diff --git a/.gitignore b/.gitignore index 4709183670ac629a32ff7df40816c79c7c932daa..f89d046b0bb89fc57616385a338ac1eafb86d48b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ # Godot 4+ specific ignores .godot/ +.vscode/ \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ad55a50c4899ecb65573f24d2ea59f594d5772d3..f32e42a14660c3544157f53a22fb48f94c9f751b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,7 +2,7 @@ include: VersionInfo.yml stages: - import-assets - - test +# - test - build - pack - deploy @@ -25,10 +25,8 @@ cache: # ================================================================================================================ # Job Dependencies # ================================================================================================================ -# =+=+=+=+=+=+=+= BUILD COMMON =+=+=+=+=+=+=+= -.build-internal: &build-internal - image: $BUILD_IMAGE - script: +# =+=+=+=+=+=+=+= BUILD COMMON SCRIPT STEPS =+=+=+=+=+=+=+= +.build-internal-script: &build-internal-script - mkdir -v -p build/$BUILD_FOLDER - echo godot -v --headless $EXPORT_MODE "$BUILD_TARGET" build/$BUILD_FOLDER/$EXPORT_NAME_INTERNAL$BUILD_FILE_EXTENSION # TODO: Remove the retry mechanism when I figure out what's causing it to fail the first time every time. @@ -39,6 +37,14 @@ cache: fi - ls build/$BUILD_FOLDER - test -f build/$BUILD_FOLDER/$EXPORT_NAME_INTERNAL$BUILD_FILE_EXTENSION || (echo "$EXPORT_NAME_INTERNAL$BUILD_FILE_EXTENSION is missing!" && exit 1) + + + +# =+=+=+=+=+=+=+= BUILD COMMON =+=+=+=+=+=+=+= +.build-internal: &build-internal + image: $BUILD_IMAGE + script: + - *build-internal-script artifacts: name: $EXPORT_NAME_INTERNAL paths: @@ -114,6 +120,14 @@ build_internal:windows-debug: <<: *build-internal except: - main + script: + - *build-internal-script # Script block overwrites build-internal, so we need to call this manually here. + # Generate an icon from the provided set of png images. Replace the Godot icon with ours. + - godot --headless -s ./addons/godoticon/CreateIcon.gd icon.ico ./icon/icon_16.png ./icon/icon_32.png ./icon/icon_48.png ./icon/icon_64.png ./icon/icon_128.png ./icon/icon_256.png + - ls + #- godot --headless -s ./addons/godoticon/CreateIcon.gd icon.ico ./icon/icon_256.png - Alternative command. Use this if you prefer to only maintain the 256 size image. + - echo godot --headless -s ./addons/godoticon/ReplaceIcon.gd icon.ico build/$BUILD_FOLDER/$EXPORT_NAME_INTERNAL.exe + - godot --headless -s ./addons/godoticon/ReplaceIcon.gd icon.ico build/$BUILD_FOLDER/$EXPORT_NAME_INTERNAL.exe build_internal:mac-debug: stage: build @@ -157,6 +171,11 @@ build_release:windows-release: BUILD_FOLDER: "windows-release" EXPORT_MODE: "--export-release" <<: *build-release + script: + # Generate an icon from the provided set of png images. Replace the Godot icon with ours. + - godot --headless -s ./addons/godoticon/CreateIcon.gd icon.ico ./icon/icon_16.png ./icon/icon_32.png ./icon/icon_48.png ./icon/icon_64.png ./icon/icon_128.png ./icon/icon_256.png + #- godot --headless -s ./addons/godoticon/CreateIcon.gd icon.ico ./icon/icon_256.png - Alternative command. Use this if you prefer to only maintain the 256 size image. + - godot --headless -s ./addons/godoticon/ReplaceIcon.gd icon.ico build/$BUILD_FOLDER/$EXPORT_NAME_RELEASE.exe build_release:mac-release: stage: build @@ -186,19 +205,19 @@ build_release:web-release: <<: *build-web # =+=+=+=+=+=+=+= TEST JOBS =+=+=+=+=+=+=+= -gdunit4: - image: $TEST_IMAGE - stage: test - script: - - ls -la; ls .godot # Cache test. - - chmod u+x ./addons/gdUnit4/runtest.sh - - xvfb-run --auto-servernum ./addons/gdUnit4/runtest.sh -a test --audio-driver Dummy --display-driver x11 --rendering-driver opengl3 --screen 0 --continue --verbose - artifacts: - when: always - paths: - - ./reports/report_1/results.xml - reports: - junit: ./reports/report_1/results.xml +# gdunit4: +# image: $TEST_IMAGE +# stage: test +# script: +# - ls -la; ls .godot # Cache test. +# - chmod u+x ./addons/gdUnit4/runtest.sh +# - xvfb-run --auto-servernum ./addons/gdUnit4/runtest.sh -a test --audio-driver Dummy --display-driver x11 --rendering-driver opengl3 --screen 0 --continue --verbose +# artifacts: +# when: always +# paths: +# - ./reports/report_1/results.xml +# reports: +# junit: ./reports/report_1/results.xml # =+=+=+=+=+=+=+= PACK JOBS =+=+=+=+=+=+=+= # Contain all of the builds in a single artifact so we don't have to download all the things! diff --git a/.gitmodules b/.gitmodules index 924584ba3403ee66441074a8cfa6025c6b510158..b7c0e0b3431718d43357596d6f7bb146502929fa 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,6 @@ [submodule "addons/sdg-print"] path = addons/sdg-print url = https://github.com/SdgGames/sdg-print +[submodule "addons/godoticon"] + path = addons/godoticon + url = https://github.com/SdgGames/godoticon diff --git a/game.gd b/Game/game.gd similarity index 100% rename from game.gd rename to Game/game.gd diff --git a/game.tscn b/Game/game.tscn similarity index 85% rename from game.tscn rename to Game/game.tscn index 8f9618a9aa09d73028e7939a97fb9c83ad31b67f..852c961a12edf32430083716419fd45719716512 100644 --- a/game.tscn +++ b/Game/game.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://dkdinvtxg00hn"] -[ext_resource type="Script" path="res://game.gd" id="1_3tn46"] +[ext_resource type="Script" path="res://Game/game.gd" id="1_3tn46"] [node name="Game" type="Node"] script = ExtResource("1_3tn46") diff --git a/VersionInfo.yml b/VersionInfo.yml index ae2ef65417906ffedcba16af7428a68a2fedcd01..c3e86e391999103e182bfa1f4fa7c4c796859da6 100644 --- a/VersionInfo.yml +++ b/VersionInfo.yml @@ -7,4 +7,4 @@ variables: # Stable is used for any major update that is not a game launch # Unstable is incremented for every other release RELEASE_NUMBER: "0.0.0" - GODOT_VERSION: "4.2.2" + GODOT_VERSION: "4.3" diff --git a/addons/gdUnit4 b/addons/gdUnit4 index fae9ee372807d394582da11f36038d21b0b3cfff..3c7a658f3f3f4e99abf572baec614cb8550c0d28 160000 --- a/addons/gdUnit4 +++ b/addons/gdUnit4 @@ -1 +1 @@ -Subproject commit fae9ee372807d394582da11f36038d21b0b3cfff +Subproject commit 3c7a658f3f3f4e99abf572baec614cb8550c0d28 diff --git a/addons/godot-console b/addons/godot-console index c8ce18d3755043e901e936ff50e9f8e264a4a22d..cd42c8dc3a5c131f7fd697a3f1ecec2e2760a8b9 160000 --- a/addons/godot-console +++ b/addons/godot-console @@ -1 +1 @@ -Subproject commit c8ce18d3755043e901e936ff50e9f8e264a4a22d +Subproject commit cd42c8dc3a5c131f7fd697a3f1ecec2e2760a8b9 diff --git a/addons/godoticon b/addons/godoticon new file mode 160000 index 0000000000000000000000000000000000000000..dec0e520f5eb54b7f38ecfb4b25d300432980c21 --- /dev/null +++ b/addons/godoticon @@ -0,0 +1 @@ +Subproject commit dec0e520f5eb54b7f38ecfb4b25d300432980c21 diff --git a/icon.svg b/icon.svg deleted file mode 100644 index adc26df6c2cd666478b85216d4a6d93f61680cb7..0000000000000000000000000000000000000000 --- a/icon.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/icon/icon.svg b/icon/icon.svg new file mode 100644 index 0000000000000000000000000000000000000000..320e3b0a7cb58bbfcab0286af3afc522c5d78657 --- /dev/null +++ b/icon/icon.svg @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icon.svg.import b/icon/icon.svg.import similarity index 74% rename from icon.svg.import rename to icon/icon.svg.import index 37fc3005c7d9c817d841758b0aaf33d30da9c4ae..545f57a7d3f8479d9400cd72cd5f0c1cc16143c1 100644 --- a/icon.svg.import +++ b/icon/icon.svg.import @@ -2,16 +2,16 @@ importer="texture" type="CompressedTexture2D" -uid="uid://dv4efoeuhe54h" -path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +uid="uid://b31na4u8s8md4" +path="res://.godot/imported/icon.svg-305b672091780d093b892ba8652d7193.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://icon.svg" -dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] +source_file="res://icon/icon.svg" +dest_files=["res://.godot/imported/icon.svg-305b672091780d093b892ba8652d7193.ctex"] [params] diff --git a/icon/icon_128.png b/icon/icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..83c5fe51719ad32cf10566bfb3e3975802b2f4dc Binary files /dev/null and b/icon/icon_128.png differ diff --git a/icon/icon_128.png.import b/icon/icon_128.png.import new file mode 100644 index 0000000000000000000000000000000000000000..bf52134483be4c18dd12af122dc1700f005799b0 --- /dev/null +++ b/icon/icon_128.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://gkswogcrbi3b" +path="res://.godot/imported/icon_128.png-a86d254b632988d65dc463370b0f93b5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon/icon_128.png" +dest_files=["res://.godot/imported/icon_128.png-a86d254b632988d65dc463370b0f93b5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/icon/icon_16.png b/icon/icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..cef58b1bab42f6c1f69eb31fcef336c5dc37e303 Binary files /dev/null and b/icon/icon_16.png differ diff --git a/icon/icon_16.png.import b/icon/icon_16.png.import new file mode 100644 index 0000000000000000000000000000000000000000..fdd7a6a05b1be6632feea49929d4b802476626a8 --- /dev/null +++ b/icon/icon_16.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d3kya3ay6sj8j" +path="res://.godot/imported/icon_16.png-9a88273f0fdae14e83722888485425c5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon/icon_16.png" +dest_files=["res://.godot/imported/icon_16.png-9a88273f0fdae14e83722888485425c5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/icon/icon_256.png b/icon/icon_256.png new file mode 100644 index 0000000000000000000000000000000000000000..4c2a051ec4ef1e1e2a618cf3bf19e3263c91e767 Binary files /dev/null and b/icon/icon_256.png differ diff --git a/icon/icon_256.png.import b/icon/icon_256.png.import new file mode 100644 index 0000000000000000000000000000000000000000..5a61a86dd6cf38a4ff7f6cae58fc7599ab62c018 --- /dev/null +++ b/icon/icon_256.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://xesxabnthe5w" +path="res://.godot/imported/icon_256.png-725d87b0722774dce29a52cc6858a9bf.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon/icon_256.png" +dest_files=["res://.godot/imported/icon_256.png-725d87b0722774dce29a52cc6858a9bf.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/icon/icon_32.png b/icon/icon_32.png new file mode 100644 index 0000000000000000000000000000000000000000..1d795d566c3025df074f9cf9fcb223e49e05ae47 Binary files /dev/null and b/icon/icon_32.png differ diff --git a/icon/icon_32.png.import b/icon/icon_32.png.import new file mode 100644 index 0000000000000000000000000000000000000000..2026fa7f458a2ece6520e7b76954179d9ba0eccc --- /dev/null +++ b/icon/icon_32.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://csq256dwcqo71" +path="res://.godot/imported/icon_32.png-360c5e82de26f3e18ed7a1d99cefade4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon/icon_32.png" +dest_files=["res://.godot/imported/icon_32.png-360c5e82de26f3e18ed7a1d99cefade4.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/icon/icon_48.png b/icon/icon_48.png new file mode 100644 index 0000000000000000000000000000000000000000..cd1be97a31431097c5f058d6bb4b6586c44f49bf Binary files /dev/null and b/icon/icon_48.png differ diff --git a/icon/icon_48.png.import b/icon/icon_48.png.import new file mode 100644 index 0000000000000000000000000000000000000000..78b774e8a2623d84afe2e847f24763873a23775d --- /dev/null +++ b/icon/icon_48.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://clvfcjmwfyulc" +path="res://.godot/imported/icon_48.png-54429ef63e259cab63cbc9e50a865476.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon/icon_48.png" +dest_files=["res://.godot/imported/icon_48.png-54429ef63e259cab63cbc9e50a865476.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/icon/icon_64.png b/icon/icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..d1b48ede8c365da86290ac6b101e0e4c4a7366f6 Binary files /dev/null and b/icon/icon_64.png differ diff --git a/icon/icon_64.png.import b/icon/icon_64.png.import new file mode 100644 index 0000000000000000000000000000000000000000..fccdf5308ceb23464079426bf33c2539e3f672dc --- /dev/null +++ b/icon/icon_64.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ibdflrgwcv8c" +path="res://.godot/imported/icon_64.png-8b81ba0bc25a001564678869cd5c053c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon/icon_64.png" +dest_files=["res://.godot/imported/icon_64.png-8b81ba0bc25a001564678869cd5c053c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +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/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/icon/readme.md b/icon/readme.md new file mode 100644 index 0000000000000000000000000000000000000000..e6117ab838ac5f68b19d19fde60113d767ed8393 --- /dev/null +++ b/icon/readme.md @@ -0,0 +1,20 @@ +# How to have less files. +These icons are automatically built into an icon file using the scripts in the `godoticon` addon. + +If you don't want this many icon files in your project, you can replace the command in the `gitlab-ci.yml` file to just use a single icon. Look for this part of the file: + +``` +# Generate an icon from the provided set of png images. Replace the Godot icon with ours. +- godot --headless -s ./addons/godoticon/CreateIcon.gd icon.ico ./icon/icon_16.png ./icon/icon_32.png ./icon/icon_48.png ./icon/icon_64.png ./icon/icon_128.png ./icon/icon_256.png +# Alternative command. Use this if you prefer to only maintain the 256 size image. +#- godot --headless -s ./addons/godoticon/CreateIcon.gd icon.ico ./icon/icon_256.png +- godot --headless -s ./addons/godoticon/ReplaceIcon.gd icon.ico build/$BUILD_FOLDER/$EXPORT_NAME_INTERNAL.exe +``` + +Replace the `CreateIcon.gd` command with the version using a single input file. Note that there are two jobs that need to be updated: `build_internal:windows-debug` and `build_release:windows-release` + +Additionally, you can remove the `.svg` file and just use a single 256 pixel `.png` file for everything. In that case, switch the `CreateIcon.gd` line to the following: +``` +godot --headless -s ./addons/godoticon/CreateIcon.gd icon.ico icon.png +``` +This assumes that the icon is at the project root and is named `icon.png`. Point Godot to the same file for the simplest setup. \ No newline at end of file diff --git a/project.godot b/project.godot index cafd1b5a7dd860cd7cfb0fa740b746f44727c838..f462d93e345a3d8e444f0a18ba3bfe4f7c267594 100644 --- a/project.godot +++ b/project.godot @@ -12,9 +12,9 @@ config_version=5 config/name="Template" config/tags=PackedStringArray("library") -run/main_scene="res://game.tscn" -config/features=PackedStringArray("4.2", "Forward Plus") -config/icon="res://icon.svg" +run/main_scene="res://Game/game.tscn" +config/features=PackedStringArray("4.3", "Forward Plus") +config/icon="res://icon/icon.svg" [autoload] @@ -31,6 +31,15 @@ window/size/viewport_height=900 enabled=PackedStringArray("res://addons/fps_counter/plugin.cfg", "res://addons/godot-console/console/plugin.cfg", "res://addons/sdg-print/plugin.cfg", "res://addons/gdUnit4/plugin.cfg") +[file_customization] + +folder_colors={ +"res://Game/": "blue", +"res://addons/": "gray", +"res://icon/": "purple", +"res://test/": "gray" +} + [filesystem] import/blender/enabled=false @@ -44,21 +53,21 @@ ui/toolbar/run_overall=true console_toggle={ "deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":96,"physical_keycode":0,"key_label":0,"unicode":96,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":96,"physical_keycode":0,"key_label":0,"unicode":96,"location":0,"echo":false,"script":null) ] } console_autocomplete={ "deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194306,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194306,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) ] } console_history_up={ "deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194320,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194320,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) ] } console_history_down={ "deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194322,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194322,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) ] }