230 files changed, 1014 insertions, 11763 deletions
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index 1bfbcab..0000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1 +0,0 @@ -ko_fi: bendn diff --git a/.github/banner.png b/.github/banner.png Binary files differdeleted file mode 100644 index 30126cb..0000000 --- a/.github/banner.png +++ /dev/null diff --git a/.github/bullet.gif b/.github/bullet.gif Binary files differdeleted file mode 100644 index 4f26bdd..0000000 --- a/.github/bullet.gif +++ /dev/null diff --git a/.github/workflows/export.yml b/.github/workflows/export.yml deleted file mode 100644 index 8a51295..0000000 --- a/.github/workflows/export.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: "export" # name of the workflow -on: # when it is triggered - workflow_dispatch: # manually or - push: # on a push - branches: - - main # to this branch - paths: # with modifications to these files - - "**.gd" # all gdscript files - - "**.tscn" # scene files - - "**.import" # this means a png changed - - "**.tres" # godot resources - - "**.ttf" # fonts in godot3 dont have their own .import - - ".github/workflows/export.yml" # this workflow - - "export_presets.cfg" # the export template - -jobs: # the things to do - export: # a thing to do - uses: bend-n/godot-actions/.github/workflows/callable-export.yml@main - with: # variables - godot-version: 3.5 # the godot version - image: ghcr.io/bend-n/godot-2d:3.5 # the container to use - export-name: ${{ github.event.repository.name }} # the name of the exec. ($export-name.exe) - platforms: "windows linux web android mac" # space seperated list of platforms to build - project-root-path: "." # the directory that project.godot is in - github-pages: "true" # to deploy to github pages or not (anything besides 'true' == false) - itch-path: "bendn/spaceshooty" # required for itch.io deployment. - secrets: # secrets - butler-api-key: ${{ secrets.BUTLER_CREDENTIALS }} # required for itch.io deployment - android-keystore-base64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }} # for signing the apk, not required - android-keystore-password: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }} # ditto diff --git a/.gitignore b/.gitignore deleted file mode 100644 index d18ee6c..0000000 --- a/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -.import/ -logs/ -*.sh -*.py -*.pgn -.vscode/ -exports/ -*.x86_64 -addons/ diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 9a9763e..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2022 bendn - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Main.tscn b/Main.tscn deleted file mode 100644 index 70a653e..0000000 --- a/Main.tscn +++ /dev/null @@ -1,3 +0,0 @@ -[gd_scene format=2] - -[node name="Main" type="Node2D"] diff --git a/PowerUp.gd b/PowerUp.gd deleted file mode 100644 index bad37d7..0000000 --- a/PowerUp.gd +++ /dev/null @@ -1,30 +0,0 @@ -extends Area2D - - -func _on_PowerUp_area_entered(area): - if area.is_in_group("Player"): - playerstats.power = true - get_tree().current_scene.score += 100 - $AnimationPlayer.play("death") - $confetti.emitting = true - - -const ExplosionEffect = preload("res://effects/ExplosionEffect.tscn") -const HitEffect = preload("res://effects/HitEffect.tscn") - - -func create_hit_effect(): - Game.instance_scene_on_main(HitEffect, global_position) - - -func create_explosion(): - Game.instance_scene_on_main(ExplosionEffect, global_position) - - -func _ready(): - $confetti.emitting = false - $Sprite.visible = true - - -func _on_Timer_timeout(): - $AnimationPlayer.play("death") diff --git a/PowerUp.tscn b/PowerUp.tscn deleted file mode 100644 index 0908b85..0000000 --- a/PowerUp.tscn +++ /dev/null @@ -1,100 +0,0 @@ -[gd_scene load_steps=7 format=2] - -[ext_resource path="res://PowerUp.gd" type="Script" id=1] -[ext_resource path="res://sprites/star.png" type="Texture" id=2] -[ext_resource path="res://sprites/glow.png" type="Texture" id=3] - -[sub_resource type="CanvasItemMaterial" id=3] -blend_mode = 1 - -[sub_resource type="CircleShape2D" id=1] -radius = 13.0384 - -[sub_resource type="Animation" id=2] -resource_name = "death" -length = 0.5 -tracks/0/type = "value" -tracks/0/path = NodePath("Sprite:visible") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ false ] -} -tracks/1/type = "method" -tracks/1/path = NodePath(".") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/keys = { -"times": PoolRealArray( 0, 0.5 ), -"transitions": PoolRealArray( 1, 1 ), -"values": [ { -"args": [ ], -"method": "create_explosion" -}, { -"args": [ ], -"method": "queue_free" -} ] -} - -[node name="PowerUp" type="Area2D" groups=["Player"]] -collision_layer = 0 -script = ExtResource( 1 ) - -[node name="Sprite2" type="Sprite" parent="."] -self_modulate = Color( 1, 0.890196, 0, 1 ) -material = SubResource( 3 ) -texture = ExtResource( 3 ) - -[node name="Sprite" type="Sprite" parent="."] -position = Vector2( -1, 0 ) -texture = ExtResource( 2 ) - -[node name="CollisionShape2D" type="CollisionShape2D" parent="."] -visible = false -shape = SubResource( 1 ) - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -playback_speed = 0.5 -anims/death = SubResource( 2 ) - -[node name="confetti" type="CPUParticles2D" parent="."] -show_behind_parent = true -emitting = false -amount = 80 -direction = Vector2( 0, -1 ) -spread = 180.0 -gravity = Vector2( 0, 0 ) -initial_velocity = 20.0 -linear_accel = 20.0 -scale_amount = 3.0 -scale_amount_random = 1.0 -color = Color( 0.968627, 0, 1, 1 ) -hue_variation = 1.0 -hue_variation_random = 1.0 - -[node name="Timer" type="Timer" parent="."] -wait_time = 10.0 - -[node name="CPUParticles2D" type="CPUParticles2D" parent="."] -show_behind_parent = true -amount = 20 -local_coords = false -direction = Vector2( 0, 0 ) -spread = 180.0 -gravity = Vector2( 0, 0 ) -initial_velocity = 20.0 -scale_amount = 2.0 -scale_amount_random = 0.2 -color = Color( 0.694118, 0.466667, 0.113725, 1 ) -hue_variation = 0.2 -hue_variation_random = 1.0 - -[connection signal="area_entered" from="." to="." method="_on_PowerUp_area_entered"] -[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"] diff --git a/README.md b/README.md deleted file mode 100644 index 96869d6..0000000 --- a/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# spaceshooty - -[](https://bendn.itch.io/spaceshooty "Itch.io page") - -[](https://godotengine.org "Made with godot") -<a href='https://ko-fi.com/bendn' title='Buy me a coffee' target='_blank'><img height='28' src='https://storage.ko-fi.com/cdn/brandasset/kofi_button_red.png' alt='Buy me a coffee'> </a> diff --git a/bullets/scenes/EnemyLaser.tscn b/bullets/scenes/EnemyLaser.tscn deleted file mode 100644 index 7e1adca..0000000 --- a/bullets/scenes/EnemyLaser.tscn +++ /dev/null @@ -1,148 +0,0 @@ -[gd_scene load_steps=25 format=2] - -[ext_resource path="res://sprites/enemylaser-sheet.png" type="Texture" id=1] -[ext_resource path="res://sounds/Laser.wav" type="AudioStream" id=2] -[ext_resource path="res://bullets/scripts/EnemyLaser.gd" type="Script" id=3] -[ext_resource path="res://sprites/blackandwhitefball-Sheet.png" type="Texture" id=4] - -[sub_resource type="AtlasTexture" id=16] -flags = 2 -atlas = ExtResource( 1 ) -region = Rect2( 0, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=17] -flags = 2 -atlas = ExtResource( 1 ) -region = Rect2( 16, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=18] -flags = 2 -atlas = ExtResource( 1 ) -region = Rect2( 32, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=19] -flags = 2 -atlas = ExtResource( 1 ) -region = Rect2( 48, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=20] -flags = 2 -atlas = ExtResource( 1 ) -region = Rect2( 64, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=21] -flags = 2 -atlas = ExtResource( 1 ) -region = Rect2( 80, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=22] -flags = 2 -atlas = ExtResource( 1 ) -region = Rect2( 96, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=23] -flags = 2 -atlas = ExtResource( 1 ) -region = Rect2( 112, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=24] -flags = 2 -atlas = ExtResource( 1 ) -region = Rect2( 128, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=25] -flags = 2 -atlas = ExtResource( 1 ) -region = Rect2( 144, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=26] -flags = 2 -atlas = ExtResource( 1 ) -region = Rect2( 160, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=27] -flags = 2 -atlas = ExtResource( 1 ) -region = Rect2( 176, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=28] -flags = 2 -atlas = ExtResource( 1 ) -region = Rect2( 192, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=29] -flags = 2 -atlas = ExtResource( 4 ) -region = Rect2( 0, 0, 19, 11 ) - -[sub_resource type="AtlasTexture" id=30] -flags = 2 -atlas = ExtResource( 4 ) -region = Rect2( 19, 0, 19, 11 ) - -[sub_resource type="AtlasTexture" id=31] -flags = 2 -atlas = ExtResource( 4 ) -region = Rect2( 38, 0, 19, 11 ) - -[sub_resource type="AtlasTexture" id=32] -flags = 2 -atlas = ExtResource( 4 ) -region = Rect2( 57, 0, 19, 11 ) - -[sub_resource type="SpriteFrames" id=14] -resource_local_to_scene = true -animations = [ { -"frames": [ SubResource( 16 ), SubResource( 17 ), SubResource( 18 ), SubResource( 19 ), SubResource( 20 ), SubResource( 21 ), SubResource( 22 ), SubResource( 23 ), SubResource( 24 ), SubResource( 25 ), SubResource( 26 ), SubResource( 27 ), SubResource( 28 ) ], -"loop": true, -"name": "New Anim", -"speed": 25.0 -}, { -"frames": [ SubResource( 29 ), SubResource( 30 ), SubResource( 31 ), SubResource( 32 ) ], -"loop": true, -"name": "New Anim 1", -"speed": 15.0 -} ] - -[sub_resource type="RectangleShape2D" id=34] -resource_local_to_scene = true -extents = Vector2( 4, 3 ) - -[sub_resource type="OccluderPolygon2D" id=35] -polygon = PoolVector2Array( -5, -2, -5, 2, -3, 4, 4, 4, 4, -4, -3, -4 ) - -[node name="EnemyLaser" type="RigidBody2D" groups=["ebullet"]] -z_index = 1 -collision_layer = 192 -mass = 20.0 -gravity_scale = 0.0 -linear_damp = 0.0 -angular_damp = 0.0 -script = ExtResource( 3 ) -__meta__ = { -"_edit_group_": true -} - -[node name="AnimatedSprite" type="AnimatedSprite" parent="."] -frames = SubResource( 14 ) -animation = "New Anim" -frame = 12 -playing = true -flip_h = true - -[node name="CollisionShape2D" type="CollisionShape2D" parent="."] -shape = SubResource( 34 ) - -[node name="VisibilityNotifier2D" type="VisibilityNotifier2D" parent="."] -position = Vector2( 2.08616e-07, -2.38419e-07 ) -scale = Vector2( 0.4, 0.4 ) - -[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] -stream = ExtResource( 2 ) -volume_db = -30.0 -autoplay = true - -[node name="LightOccluder2D" type="LightOccluder2D" parent="."] -occluder = SubResource( 35 ) - -[connection signal="screen_exited" from="VisibilityNotifier2D" to="." method="_on_VisibilityNotifier2D_screen_exited"] diff --git a/bullets/scenes/EnemyLaserBig.tscn b/bullets/scenes/EnemyLaserBig.tscn deleted file mode 100644 index d021285..0000000 --- a/bullets/scenes/EnemyLaserBig.tscn +++ /dev/null @@ -1,177 +0,0 @@ -[gd_scene load_steps=33 format=2] - -[ext_resource path="res://bullets/scenes/EnemyLaser.tscn" type="PackedScene" id=1] -[ext_resource path="res://sprites/bigenemylasers.png" type="Texture" id=2] - -[sub_resource type="AtlasTexture" id=16] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 0, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=17] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 64, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=18] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 128, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=19] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 192, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=20] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 256, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=21] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 320, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=22] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 384, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=23] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 448, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=24] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 512, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=25] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 576, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=26] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 640, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=27] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 704, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=28] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 768, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=1] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 0, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=2] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 64, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=3] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 128, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=4] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 192, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=5] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 256, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=6] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 320, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=7] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 384, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=8] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 448, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=9] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 512, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=10] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 576, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=11] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 640, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=12] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 704, 0, 64, 64 ) - -[sub_resource type="AtlasTexture" id=13] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 768, 0, 64, 64 ) - -[sub_resource type="SpriteFrames" id=14] -resource_local_to_scene = true -animations = [ { -"frames": [ SubResource( 16 ), SubResource( 17 ), SubResource( 18 ), SubResource( 19 ), SubResource( 20 ), SubResource( 21 ), SubResource( 22 ), SubResource( 23 ), SubResource( 24 ), SubResource( 25 ), SubResource( 26 ), SubResource( 27 ), SubResource( 28 ) ], -"loop": true, -"name": "New Anim", -"speed": 25.0 -}, { -"frames": [ SubResource( 1 ), SubResource( 2 ), SubResource( 3 ), SubResource( 4 ), SubResource( 5 ), SubResource( 6 ), SubResource( 7 ), SubResource( 8 ), SubResource( 9 ), SubResource( 10 ), SubResource( 11 ), SubResource( 12 ), SubResource( 13 ) ], -"loop": true, -"name": "default", -"speed": 25.0 -} ] - -[sub_resource type="CircleShape2D" id=30] -radius = 17.0294 - -[sub_resource type="AudioStreamSample" id=29] -resource_local_to_scene = true -data = PoolByteArray( 0, 0, 203, 21, 206, 21, 202, 21, 206, 21, 201, 21, 204, 21, 204, 21, 202, 21, 204, 21, 201, 21, 202, 21, 203, 21, 201, 21, 202, 21, 201, 21, 201, 21, 236, 20, 237, 20, 184, 19, 188, 19, 115, 18, 121, 18, 29, 17, 33, 17, 174, 15, 174, 15, 20, 14, 20, 14, 74, 12, 75, 12, 47, 10, 45, 10, 107, 7, 102, 7, 35, 1, 33, 1, 181, 248, 183, 248, 16, 246, 21, 246, 33, 244, 37, 244, 141, 242, 143, 242, 50, 241, 50, 241, 3, 240, 1, 240, 243, 238, 240, 238, 244, 237, 237, 237, 20, 237, 10, 237, 66, 236, 59, 236, 124, 235, 122, 235, 196, 234, 195, 234, 67, 234, 64, 234, 66, 234, 66, 234, 66, 234, 66, 234, 67, 234, 66, 234, 69, 234, 66, 234, 67, 234, 69, 234, 66, 234, 71, 234, 65, 234, 71, 234, 68, 234, 68, 234, 71, 234, 67, 234, 72, 234, 68, 234, 72, 234, 68, 234, 73, 234, 69, 234, 73, 234, 68, 234, 188, 21, 182, 21, 187, 21, 182, 21, 185, 21, 183, 21, 184, 21, 183, 21, 183, 21, 183, 21, 182, 21, 183, 21, 182, 21, 181, 21, 184, 21, 178, 21, 184, 21, 180, 21, 181, 21, 181, 21, 53, 21, 53, 21, 24, 20, 22, 20, 236, 18, 233, 18, 177, 17, 174, 17, 96, 16, 95, 16, 244, 14, 246, 14, 101, 13, 103, 13, 161, 11, 162, 11, 122, 9, 122, 9, 159, 6, 159, 6, 3, 253, 7, 253, 125, 248, 131, 248, 17, 246, 24, 246, 67, 244, 66, 244, 202, 242, 193, 242, 128, 241, 123, 241, 90, 240, 92, 240, 85, 239, 86, 239, 106, 238, 102, 238, 147, 237, 140, 237, 199, 236, 194, 236, 12, 236, 5, 236, 97, 235, 84, 235, 187, 234, 181, 234, 86, 234, 88, 234, 86, 234, 87, 234, 89, 234, 87, 234, 88, 234, 88, 234, 89, 234, 88, 234, 89, 234, 88, 234, 92, 234, 85, 234, 95, 234, 85, 234, 93, 234, 90, 234, 90, 234, 90, 234, 94, 234, 87, 234, 95, 234, 90, 234, 91, 234, 94, 234, 162, 21, 165, 21, 162, 21, 165, 21, 161, 21, 164, 21, 162, 21, 163, 21, 161, 21, 164, 21, 159, 21, 163, 21, 161, 21, 160, 21, 163, 21, 159, 21, 160, 21, 162, 21, 157, 21, 162, 21, 159, 21, 159, 21, 127, 21, 125, 21, 117, 20, 114, 20, 95, 19, 94, 19, 57, 18, 63, 18, 12, 17, 15, 17, 202, 15, 199, 15, 108, 14, 104, 14, 233, 12, 229, 12, 51, 11, 47, 11, 37, 9, 35, 9, 94, 6, 96, 6, 25, 253, 28, 253, 189, 248, 193, 248, 104, 246, 107, 246, 169, 244, 167, 244, 57, 243, 53, 243, 4, 242, 3, 242, 233, 240, 234, 240, 238, 239, 235, 239, 11, 239, 4, 239, 56, 238, 51, 238, 114, 237, 115, 237, 189, 236, 192, 236, 20, 236, 21, 236, 117, 235, 119, 235, 231, 234, 233, 234, 109, 234, 107, 234, 112, 234, 107, 234, 112, 234, 109, 234, 112, 234, 107, 234, 114, 234, 109, 234, 112, 234, 113, 234, 108, 234, 115, 234, 111, 234, 112, 234, 114, 234, 110, 234, 115, 234, 112, 234, 114, 234, 114, 234, 113, 234, 114, 234, 115, 234, 113, 234, 117, 234, 112, 234, 144, 21, 139, 21, 142, 21, 140, 21, 139, 21, 142, 21, 138, 21, 141, 21, 138, 21, 141, 21, 136, 21, 142, 21, 136, 21, 139, 21, 139, 21, 136, 21, 139, 21, 136, 21, 138, 21, 137, 21, 137, 21, 136, 21, 135, 21, 138, 21, 21, 21, 26, 21, 24, 20, 29, 20, 23, 19, 24, 19, 7, 18, 4, 18, 234, 16, 229, 16, 186, 15, 182, 15, 114, 14, 113, 14, 20, 13, 20, 13, 134, 11, 135, 11, 185, 9, 187, 9, 116, 7, 116, 7, 229, 3, 230, 3, 119, 250, 122, 250, 187, 247, 189, 247, 213, 245, 215, 245, 93, 244, 95, 244, 20, 243, 22, 243, 249, 241, 249, 241, 250, 240, 250, 240, 26, 240, 29, 240, 70, 239, 71, 239, 135, 238, 133, 238, 217, 237, 219, 237, 43, 237, 52, 237, 142, 236, 151, 236, 251, 235, 1, 236, 117, 235, 124, 235, 242, 234, 245, 234, 133, 234, 132, 234, 136, 234, 131, 234, 138, 234, 130, 234, 139, 234, 131, 234, 137, 234, 135, 234, 134, 234, 137, 234, 136, 234, 135, 234, 138, 234, 134, 234, 139, 234, 136, 234, 138, 234, 136, 234, 140, 234, 135, 234, 141, 234, 136, 234, 140, 234, 138, 234, 139, 234, 140, 234, 138, 234, 141, 234, 116, 21, 116, 21, 117, 21, 114, 21, 116, 21, 115, 21, 116, 21, 113, 21, 117, 21, 112, 21, 115, 21, 114, 21, 112, 21, 116, 21, 112, 21, 113, 21, 113, 21, 112, 21, 113, 21, 112, 21, 111, 21, 113, 21, 110, 21, 113, 21, 109, 21, 112, 21, 33, 21, 35, 21, 55, 20, 58, 20, 69, 19, 73, 19, 79, 18, 79, 18, 77, 17, 77, 17, 60, 16, 63, 16, 27, 15, 29, 15, 236, 13, 238, 13, 151, 12, 158, 12, 32, 11, 40, 11, 117, 9, 123, 9, 91, 7, 95, 7, 51, 4, 51, 4, 19, 251, 18, 251, 92, 248, 87, 248, 128, 246, 120, 246, 14, 245, 10, 245, 202, 243, 204, 243, 191, 242, 189, 242, 203, 241, 194, 241, 244, 240, 238, 240, 35, 240, 37, 240, 107, 239, 114, 239, 189, 238, 192, 238, 37, 238, 34, 238, 141, 237, 137, 237, 3, 237, 4, 237, 122, 236, 126, 236, 0, 236, 4, 236, 136, 235, 138, 235, 27, 235, 29, 235, 174, 234, 176, 234, 159, 234, 161, 234, 161, 234, 162, 234, 158, 234, 166, 234, 156, 234, 167, 234, 159, 234, 163, 234, 164, 234, 161, 234, 163, 234, 165, 234, 161, 234, 165, 234, 165, 234, 161, 234, 168, 234, 161, 234, 167, 234, 163, 234, 168, 234, 162, 234, 169, 234, 163, 234, 168, 234, 165, 234, 168, 234, 165, 234, 147, 10, 143, 10, 89, 21, 89, 21, 87, 21, 90, 21, 86, 21, 89, 21, 87, 21, 86, 21, 90, 21, 82, 21, 91, 21, 84, 21, 86, 21, 88, 21, 83, 21, 87, 21, 84, 21, 85, 21, 85, 21, 86, 21, 83, 21, 84, 21, 84, 21, 83, 21, 84, 21, 84, 21, 81, 21, 85, 21, 1, 21, 6, 21, 44, 20, 48, 20, 84, 19, 84, 19, 117, 18, 114, 18, 139, 17, 133, 17, 154, 16, 147, 16, 157, 15, 153, 15, 139, 14, 141, 14, 106, 13, 112, 13, 58, 12, 58, 12, 230, 10, 230, 10, 87, 9, 90, 9, 126, 7, 129, 7, 228, 4, 234, 4, 100, 252, 105, 252, 62, 249, 66, 249, 96, 247, 104, 247, 239, 245, 248, 245, 191, 244, 195, 244, 176, 243, 175, 243, 199, 242, 197, 242, 246, 241, 242, 241, 55, 241, 51, 241, 133, 240, 133, 240, 217, 239, 220, 239, 66, 239, 67, 239, 182, 238, 181, 238, 50, 238, 50, 238, 179, 237, 182, 237, 56, 237, 55, 237, 201, 236, 201, 236, 94, 236, 98, 236, 250, 235, 252, 235, 156, 235, 157, 235, 65, 235, 69, 235, 227, 234, 232, 234, 190, 234, 190, 234, 191, 234, 192, 234, 188, 234, 196, 234, 187, 234, 195, 234, 190, 234, 193, 234, 193, 234, 192, 234, 194, 234, 191, 234, 196, 234, 192, 234, 194, 234, 195, 234, 193, 234, 196, 234, 195, 234, 194, 234, 196, 234, 195, 234, 195, 234, 198, 234, 194, 234, 198, 234, 196, 234, 197, 234, 196, 234, 200, 234, 194, 234, 201, 234, 26, 235, 27, 235, 59, 21, 57, 21, 57, 21, 58, 21, 56, 21, 57, 21, 56, 21, 57, 21, 55, 21, 57, 21, 54, 21, 57, 21, 54, 21, 56, 21, 53, 21, 56, 21, 53, 21, 55, 21, 54, 21, 52, 21, 55, 21, 51, 21, 55, 21, 51, 21, 54, 21, 51, 21, 52, 21, 52, 21, 51, 21, 51, 21, 51, 21, 52, 21, 221, 20, 225, 20, 27, 20, 32, 20, 89, 19, 89, 19, 137, 18, 138, 18, 184, 17, 189, 17, 224, 16, 232, 16, 3, 16, 8, 16, 30, 15, 31, 15, 48, 14, 48, 14, 49, 13, 47, 13, 29, 12, 28, 12, 240, 10, 240, 10, 159, 9, 160, 9, 23, 8, 24, 8, 39, 6, 37, 6, 236, 2, 230, 2, 60, 251, 54, 251, 253, 248, 249, 248, 105, 247, 104, 247, 39, 246, 39, 246, 24, 245, 22, 245, 43, 244, 41, 244, 94, 243, 93, 243, 159, 242, 159, 242, 239, 241, 239, 241, 78, 241, 77, 241, 184, 240, 184, 240, 51, 240, 48, 240, 180, 239, 172, 239, 56, 239, 52, 239, 193, 238, 194, 238, 89, 238, 90, 238, 243, 237, 242, 237, 145, 237, 143, 237, 52, 237, 49, 237, 225, 236, 221, 236, 141, 236, 137, 236, 60, 236, 56, 236, 238, 235, 235, 235, 169, 235, 170, 235, 96, 235, 99, 235, 28, 235, 31, 235, 226, 234, 225, 234, 226, 234, 226, 234, 225, 234, 228, 234, 225, 234, 226, 234, 229, 234, 224, 234, 231, 234, 223, 234, 233, 234, 223, 234, 232, 234, 225, 234, 231, 234, 228, 234, 229, 234, 230, 234, 228, 234, 232, 234, 229, 234, 230, 234, 232, 234, 228, 234, 234, 234, 229, 234, 232, 234, 232, 234, 231, 234, 234, 234, 230, 234, 234, 234, 232, 234, 234, 234, 233, 234, 234, 234, 232, 234, 236, 234, 21, 236, 23, 236, 22, 21, 21, 21, 21, 21, 21, 21, 22, 21, 19, 21, 21, 21, 19, 21, 21, 21, 19, 21, 19, 21, 19, 21, 20, 21, 17, 21, 20, 21, 16, 21, 20, 21, 16, 21, 19, 21, 16, 21, 17, 21, 18, 21, 14, 21, 19, 21, 14, 21, 18, 21, 13, 21, 18, 21, 12, 21, 19, 21, 11, 21, 17, 21, 13, 21, 14, 21, 15, 21, 12, 21, 5, 21, 2, 21, 91, 20, 92, 20, 175, 19, 177, 19, 0, 19, 0, 19, 82, 18, 78, 18, 157, 17, 153, 17, 226, 16, 222, 16, 35, 16, 33, 16, 96, 15, 90, 15, 148, 14, 138, 14, 191, 13, 186, 13, 221, 12, 219, 12, 238, 11, 234, 11, 239, 10, 238, 10, 217, 9, 215, 9, 156, 8, 151, 8, 46, 7, 43, 7, 82, 5, 82, 5, 221, 1, 221, 1, 49, 251, 48, 251, 79, 249, 79, 249, 241, 247, 241, 247, 217, 246, 213, 246, 227, 245, 221, 245, 16, 245, 14, 245, 80, 244, 85, 244, 164, 243, 171, 243, 11, 243, 12, 243, 121, 242, 118, 242, 244, 241, 241, 241, 121, 241, 118, 241, 2, 241, 4, 241, 146, 240, 154, 240, 44, 240, 50, 240, 200, 239, 202, 239, 110, 239, 110, 239, 23, 239, 25, 239, 195, 238, 199, 238, 118, 238, 119, 238, 43, 238, 45, 238, 227, 237, 231, 237, 159, 237, 162, 237, 95, 237, 98, 237, 33, 237, 34, 237, 233, 236, 229, 236, 176, 236, 174, 236, 118, 236, 124, 236, 64, 236, 72, 236, 15, 236, 20, 236, 226, 235, 225, 235, 182, 235, 179, 235, 139, 235, 134, 235, 96, 235, 92, 235, 55, 235, 54, 235, 14, 235, 15, 235, 14, 235, 10, 235, 16, 235, 9, 235, 17, 235, 11, 235, 16, 235, 12, 235, 16, 235, 13, 235, 16, 235, 14, 235, 15, 235, 17, 235, 13, 235, 19, 235, 13, 235, 20, 235, 13, 235, 20, 235, 14, 235, 20, 235, 16, 235, 19, 235, 17, 235, 18, 235, 19, 235, 18, 235, 20, 235, 18, 235, 20, 235, 20, 235, 19, 235, 21, 235, 19, 235, 22, 235, 19, 235, 23, 235, 19, 235, 23, 235, 21, 235, 21, 235, 24, 235, 21, 235, 28, 235, 29, 235, 231, 20, 236, 20, 230, 20, 235, 20, 230, 20, 234, 20, 231, 20, 231, 20, 233, 20, 228, 20, 235, 20, 227, 20, 233, 20, 229, 20, 230, 20, 230, 20, 229, 20, 230, 20, 229, 20, 229, 20, 227, 20, 230, 20, 226, 20, 231, 20, 225, 20, 229, 20, 226, 20, 228, 20, 226, 20, 226, 20, 228, 20, 223, 20, 230, 20, 222, 20, 226, 20, 226, 20, 223, 20, 227, 20, 222, 20, 225, 20, 223, 20, 225, 20, 222, 20, 224, 20, 173, 20, 173, 20, 29, 20, 29, 20, 138, 19, 139, 19, 246, 18, 248, 18, 96, 18, 96, 18, 204, 17, 198, 17, 51, 17, 45, 17, 147, 16, 149, 16, 242, 15, 245, 15, 80, 15, 78, 15, 170, 14, 169, 14, 249, 13, 252, 13, 73, 13, 72, 13, 147, 12, 142, 12, 207, 11, 203, 11, 0, 11, 4, 11, 36, 10, 43, 10, 56, 9, 53, 9, 55, 8, 49, 8, 13, 7, 10, 7, 152, 5, 151, 5, 143, 3, 142, 3, 17, 253, 16, 253, 214, 250, 217, 250, 101, 249, 109, 249, 82, 248, 88, 248, 111, 247, 112, 247, 170, 246, 171, 246, 249, 245, 253, 245, 84, 245, 88, 245, 200, 244, 196, 244, 71, 244, 64, 244, 201, 243, 203, 243, 84, 243, 92, 243, 235, 242, 239, 242, 138, 242, 139, 242, 45, 242, 46, 242, 207, 241, 211, 241, 124, 241, 127, 241, 47, 241, 46, 241, 230, 240, 227, 240, 159, 240, 157, 240, 90, 240, 92, 240, 23, 240, 30, 240, 217, 239, 224, 239, 162, 239, 161, 239, 109, 239, 104, 239, 56, 239, 52, 239, 2, 239, 3, 239, 210, 238, 209, 238, 169, 238, 165, 238, 124, 238, 121, 238, 80, 238, 79, 238, 38, 238, 39, 238, 252, 237, 2, 238, 213, 237, 219, 237, 179, 237, 181, 237, 145, 237, 145, 237, 117, 237, 115, 237, 85, 237, 82, 237, 54, 237, 52, 237, 24, 237, 22, 237, 254, 236, 254, 236, 228, 236, 226, 236, 201, 236, 200, 236, 176, 236, 176, 236, 154, 236, 154, 236, 132, 236, 132, 236, 109, 236, 110, 236, 90, 236, 92, 236, 71, 236, 71, 236, 51, 236, 51, 236, 35, 236, 36, 236, 19, 236, 16, 236, 1, 236, 255, 235, 244, 235, 243, 235, 227, 235, 228, 235, 213, 235, 217, 235, 199, 235, 202, 235, 190, 235, 189, 235, 177, 235, 177, 235, 167, 235, 168, 235, 155, 235, 155, 235, 147, 235, 147, 235, 135, 235, 136, 235, 128, 235, 129, 235, 118, 235, 118, 235, 113, 235, 112, 235, 103, 235, 103, 235, 97, 235, 100, 235, 91, 235, 95, 235, 82, 235, 88, 235, 79, 235, 84, 235, 76, 235, 78, 235, 78, 235, 76, 235, 80, 235, 76, 235, 80, 235, 77, 235, 80, 235, 77, 235, 81, 235, 79, 235, 80, 235, 80, 235, 79, 235, 81, 235, 81, 235, 81, 235, 81, 235, 81, 235, 81, 235, 83, 235, 81, 235, 83, 235, 82, 235, 82, 235, 174, 20, 172, 20, 175, 20, 169, 20, 176, 20, 168, 20, 176, 20, 168, 20, 175, 20, 168, 20, 173, 20, 169, 20, 171, 20, 171, 20, 169, 20, 170, 20, 170, 20, 168, 20, 171, 20, 167, 20, 170, 20, 167, 20, 169, 20, 168, 20, 166, 20, 170, 20, 164, 20, 170, 20, 164, 20, 168, 20, 165, 20, 167, 20, 165, 20, 166, 20, 164, 20, 167, 20, 163, 20, 165, 20, 164, 20, 165, 20, 163, 20, 165, 20, 161, 20, 165, 20, 163, 20, 161, 20, 165, 20, 159, 20, 165, 20, 160, 20, 163, 20, 160, 20, 160, 20, 163, 20, 158, 20, 163, 20, 159, 20, 159, 20, 64, 20, 62, 20, 200, 19, 204, 19, 81, 19, 86, 19, 220, 18, 224, 18, 101, 18, 106, 18, 238, 17, 244, 17, 117, 17, 124, 17, 253, 16, 0, 17, 135, 16, 133, 16, 12, 16, 11, 16, 142, 15, 144, 15, 17, 15, 16, 15, 147, 14, 144, 14, 18, 14, 17, 14, 139, 13, 141, 13, 5, 13, 6, 13, 124, 12, 121, 12, 240, 11, 237, 11, 93, 11, 94, 11, 195, 10, 195, 10, 41, 10, 36, 10, 134, 9, 128, 9, 211, 8, 206, 8, 25, 8, 16, 8, 79, 7, 67, 7, 104, 6, 98, 6, 90, 5, 86, 5, 250, 3, 244, 3, 135, 1, 129, 1, 141, 252, 141, 252, 33, 251, 35, 251, 28, 250, 32, 250, 73, 249, 80, 249, 151, 248, 157, 248, 253, 247, 255, 247, 116, 247, 116, 247, 246, 246, 246, 246, 132, 246, 130, 246, 26, 246, 25, 246, 183, 245, 185, 245, 91, 245, 92, 245, 7, 245, 7, 245, 183, 244, 182, 244, 108, 244, 107, 244, 36, 244, 38, 244, 223, 243, 227, 243, 163, 243, 167, 243, 102, 243, 107, 243, 45, 243, 48, 243, 249, 242, 245, 242, 203, 242, 195, 242, 153, 242, 148, 242, 103, 242, 101, 242, 61, 242, 58, 242, 19, 242, 14, 242, 233, 241, 230, 241, 195, 241, 195, 241, 156, 241, 155, 241, 126, 241, 119, 241, 93, 241, 84, 241, 56, 241, 56, 241, 23, 241, 29, 241, 250, 240, 255, 240, 224, 240, 223, 240, 199, 240, 198, 240, 171, 240, 172, 240, 147, 240, 147, 240, 125, 240, 120, 240, 103, 240, 100, 240, 81, 240, 81, 240, 58, 240, 59, 240, 38, 240, 42, 240, 21, 240, 23, 240, 3, 240, 6, 240, 243, 239, 246, 239, 226, 239, 225, 239, 214, 239, 209, 239, 200, 239, 195, 239, 185, 239, 183, 239, 171, 239, 171, 239, 158, 239, 159, 239, 146, 239, 148, 239, 135, 239, 137, 239, 125, 239, 126, 239, 115, 239, 116, 239, 105, 239, 107, 239, 98, 239, 95, 239, 90, 239, 88, 239, 80, 239, 82, 239, 72, 239, 74, 239, 65, 239, 68, 239, 56, 239, 62, 239, 54, 239, 57, 239, 48, 239, 52, 239, 42, 239, 45, 239, 40, 239, 36, 239, 41, 239, 34, 239, 34, 239, 32, 239, 28, 239, 29, 239, 27, 239, 28, 239, 22, 239, 27, 239, 19, 239, 27, 239, 18, 239, 21, 239, 19, 239, 16, 239, 20, 239, 15, 239, 23, 239, 15, 239, 20, 239, 15, 239, 18, 239, 19, 239, 15, 239, 18, 239, 17, 239, 20, 239, 18, 239, 22, 239, 18, 239, 20, 239, 21, 239, 23, 239, 21, 239, 28, 239, 20, 239, 26, 239, 26, 239, 27, 239, 29, 239, 31, 239, 31, 239, 35, 239, 36, 239, 36, 239, 40, 239, 40, 239, 41, 239, 42, 239, 42, 239, 48, 239, 45, 239, 51, 239, 52, 239, 51, 239, 60, 239, 54, 239, 63, 239, 60, 239, 69, 239, 68, 239, 74, 239, 73, 239, 80, 239, 75, 239, 86, 239, 81, 239, 88, 239, 89, 239, 92, 239, 92, 239, 104, 239, 96, 239, 111, 239, 103, 239, 113, 239, 111, 239, 117, 239, 117, 239, 126, 239, 125, 239, 130, 239, 132, 239, 138, 239, 141, 239, 144, 239, 145, 239, 152, 239, 148, 239, 164, 239, 155, 239, 170, 239, 161, 239, 178, 239, 172, 239, 185, 239, 182, 239, 190, 239, 189, 239, 198, 239, 199, 239, 207, 239, 207, 239, 214, 239, 212, 239, 224, 239, 223, 239, 231, 239, 231, 239, 241, 239, 241, 239, 247, 239, 248, 239, 255, 239, 1, 240, 9, 240, 11, 240, 17, 240, 22, 240, 26, 240, 29, 240, 37, 240, 38, 240, 45, 240, 50, 240, 53, 240, 59, 240, 63, 240, 67, 240, 73, 240, 78, 240, 82, 240, 86, 240, 94, 240, 91, 240, 110, 240, 102, 240, 119, 240, 113, 240, 126, 240, 124, 240, 134, 240, 135, 240, 147, 240, 145, 240, 158, 240, 153, 240, 167, 240, 165, 240, 178, 240, 176, 240, 189, 240, 184, 240, 203, 240, 197, 240, 209, 240, 208, 240, 220, 240, 221, 240, 231, 240, 228, 240, 244, 240, 240, 240, 255, 240, 0, 241, 5, 241, 9, 241, 17, 241, 21, 241, 31, 241, 33, 241, 39, 241, 41, 241, 54, 241, 49, 241, 69, 241, 60, 241, 79, 241, 76, 241, 88, 241, 90, 241, 98, 241, 102, 241, 111, 241, 113, 241, 124, 241, 124, 241, 135, 241, 137, 241, 146, 241, 149, 241, 159, 241, 158, 241, 172, 241, 168, 241, 186, 241, 178, 241, 201, 241, 194, 241, 211, 241, 206, 241, 223, 241, 217, 241, 236, 241, 233, 241, 245, 241, 248, 241, 255, 241, 2, 242, 14, 242, 16, 242, 26, 242, 26, 242, 41, 242, 40, 242, 51, 242, 52, 242, 65, 242, 66, 242, 80, 242, 78, 242, 91, 242, 89, 242, 62, 20, 59, 20, 60, 20, 59, 20, 60, 20, 58, 20, 60, 20, 57, 20, 58, 20, 60, 20, 55, 20, 61, 20, 54, 20, 59, 20, 56, 20, 56, 20, 58, 20, 54, 20, 57, 20, 55, 20, 54, 20, 58, 20, 52, 20, 57, 20, 52, 20, 56, 20, 52, 20, 55, 20, 53, 20, 53, 20, 52, 20, 54, 20, 51, 20, 54, 20, 51, 20, 51, 20, 52, 20, 51, 20, 51, 20, 51, 20, 49, 20, 53, 20, 46, 20, 55, 20, 44, 20, 54, 20, 46, 20, 50, 20, 49, 20, 46, 20, 51, 20, 46, 20, 48, 20, 48, 20, 46, 20, 48, 20, 46, 20, 45, 20, 47, 20, 46, 20, 45, 20, 46, 20, 45, 20, 44, 20, 46, 20, 44, 20, 44, 20, 45, 20, 42, 20, 44, 20, 43, 20, 43, 20, 44, 20, 41, 20, 43, 20, 41, 20, 43, 20, 40, 20, 42, 20, 40, 20, 41, 20, 42, 20, 39, 20, 40, 20, 40, 20, 39, 20, 40, 20, 40, 20, 234, 19, 239, 19, 154, 19, 159, 19, 73, 19, 77, 19, 253, 18, 251, 18, 174, 18, 172, 18, 94, 18, 94, 18, 16, 18, 13, 18, 195, 17, 193, 17, 115, 17, 115, 17, 38, 17, 35, 17, 218, 16, 213, 16, 140, 16, 138, 16, 61, 16, 62, 16, 239, 15, 241, 15, 164, 15, 165, 15, 86, 15, 88, 15, 10, 15, 11, 15, 191, 14, 190, 14, 114, 14, 115, 14, 38, 14, 37, 14, 218, 13, 218, 13, 140, 13, 143, 13, 63, 13, 65, 13, 245, 12, 245, 12, 167, 12, 169, 12, 90, 12, 91, 12, 15, 12, 12, 12, 194, 11, 192, 11, 115, 11, 115, 11, 37, 11, 34, 11, 216, 10, 210, 10, 136, 10, 133, 10, 53, 10, 55, 10, 225, 9, 231, 9, 144, 9, 147, 9, 63, 9, 65, 9, 232, 8, 239, 8, 144, 8, 152, 8, 58, 8, 61, 8, 227, 7, 227, 7, 134, 7, 134, 7, 40, 7, 39, 7, 196, 6, 197, 6, 92, 6, 96, 6, 237, 5, 243, 5, 122, 5, 129, 5, 0, 5, 2, 5, 123, 4, 122, 4, 226, 3, 225, 3, 38, 3, 36, 3, 45, 2, 43, 2, 230, 254, 229, 254, 117, 253, 116, 253, 175, 252, 172, 252, 22, 252, 18, 252, 150, 251, 149, 251, 39, 251, 43, 251, 202, 250, 205, 250, 117, 250, 118, 250, 41, 250, 39, 250, 229, 249, 225, 249, 164, 249, 160, 249, 102, 249, 104, 249, 45, 249, 51, 249, 249, 248, 0, 249, 198, 248, 206, 248, 153, 248, 161, 248, 111, 248, 116, 248, 74, 248, 74, 248, 36, 248, 36, 248, 255, 247, 0, 248, 222, 247, 221, 247, 188, 247, 190, 247, 159, 247, 158, 247, 132, 247, 127, 247, 103, 247, 102, 247, 75, 247, 76, 247, 52, 247, 48, 247, 30, 247, 25, 247, 6, 247, 6, 247, 237, 246, 241, 246, 217, 246, 221, 246, 198, 246, 200, 246, 182, 246, 182, 246, 163, 246, 165, 246, 146, 246, 149, 246, 131, 246, 132, 246, 115, 246, 118, 246, 100, 246, 103, 246, 89, 246, 85, 246, 80, 246, 72, 246, 67, 246, 61, 246, 52, 246, 50, 246, 44, 246, 37, 246, 35, 246, 24, 246, 26, 246, 17, 246, 15, 246, 9, 246, 6, 246, 254, 245, 254, 245, 248, 245, 245, 245, 243, 245, 235, 245, 237, 245, 229, 245, 230, 245, 223, 245, 222, 245, 218, 245, 217, 245, 213, 245, 212, 245, 209, 245, 207, 245, 202, 245, 204, 245, 197, 245, 201, 245, 195, 245, 194, 245, 193, 245, 192, 245, 188, 245, 191, 245, 185, 245, 187, 245, 184, 245, 183, 245, 183, 245, 181, 245, 181, 245, 182, 245, 177, 245, 182, 245, 175, 245, 182, 245, 173, 245, 181, 245, 173, 245, 179, 245, 174, 245, 177, 245, 177, 245, 176, 245, 177, 245, 176, 245, 177, 245, 179, 245, 178, 245, 176, 245, 182, 245, 176, 245, 185, 245, 178, 245, 184, 245, 181, 245, 183, 245, 185, 245, 186, 245, 184, 245, 191, 245, 184, 245, 194, 245, 188, 245, 193, 245, 193, 245, 195, 245, 199, 245, 197, 245, 200, 245, 201, 245, 202, 245, 206, 245, 207, 245, 207, 245, 210, 245, 211, 245, 216, 245, 215, 245, 219, 245, 220, 245, 222, 245, 226, 245, 223, 245, 232, 245, 226, 245, 237, 245, 232, 245, 239, 245, 240, 245, 242, 245, 247, 245, 248, 245, 250, 245, 254, 245, 255, 245, 3, 246, 5, 246, 9, 246, 10, 246, 14, 246, 17, 246, 19, 246, 20, 246, 28, 246, 26, 246, 32, 246, 34, 246, 37, 246, 40, 246, 47, 246, 43, 246, 52, 246, 52, 246, 56, 246, 62, 246, 60, 246, 67, 246, 69, 246, 74, 246, 78, 246, 77, 246, 87, 246, 81, 246, 95, 246, 91, 246, 100, 246, 101, 246, 104, 246, 108, 246, 113, 246, 114, 246, 122, 246, 120, 246, 131, 246, 127, 246, 138, 246, 136, 246, 146, 246, 146, 246, 150, 246, 156, 246, 159, 246, 161, 246, 170, 246, 167, 246, 180, 246, 174, 246, 188, 246, 183, 246, 196, 246, 195, 246, 199, 246, 204, 246, 209, 246, 211, 246, 219, 246, 219, 246, 226, 246, 229, 246, 237, 246, 237, 246, 247, 246, 246, 246, 254, 246, 255, 246, 7, 247, 10, 247, 16, 247, 17, 247, 26, 247, 26, 247, 37, 247, 36, 247, 44, 247, 43, 247, 56, 247, 50, 247, 67, 247, 61, 247, 75, 247, 74, 247, 83, 247, 83, 247, 95, 247, 90, 247, 106, 247, 101, 247, 114, 247, 111, 247, 124, 247, 122, 247, 134, 247, 130, 247, 143, 247, 141, 247, 154, 247, 151, 247, 166, 247, 159, 247, 176, 247, 171, 247, 184, 247, 183, 247, 194, 247, 194, 247, 206, 247, 202, 247, 219, 247, 212, 247, 228, 247, 224, 247, 236, 247, 237, 247, 247, 247, 248, 247, 2, 248, 2, 248, 14, 248, 13, 248, 23, 248, 25, 248, 34, 248, 36, 248, 46, 248, 47, 248, 57, 248, 57, 248, 70, 248, 69, 248, 79, 248, 80, 248, 90, 248, 92, 248, 103, 248, 102, 248, 115, 248, 114, 248, 126, 248, 127, 248, 135, 248, 140, 248, 147, 248, 153, 248, 159, 248, 163, 248, 172, 248, 175, 248, 184, 248, 185, 248, 196, 248, 199, 248, 207, 248, 212, 248, 220, 248, 221, 248, 235, 248, 233, 248, 246, 248, 245, 248, 3, 249, 3, 249, 15, 249, 15, 249, 28, 249, 28, 249, 39, 249, 40, 249, 52, 249, 53, 249, 66, 249, 64, 249, 80, 249, 75, 249, 96, 249, 86, 249, 109, 249, 102, 249, 120, 249, 116, 249, 132, 249, 127, 249, 146, 249, 144, 249, 156, 249, 161, 249, 167, 249, 176, 249, 182, 249, 187, 249, 197, 249, 200, 249, 211, 249, 213, 249, 224, 249, 226, 249, 239, 249, 241, 249, 253, 249, 252, 249, 13, 250, 11, 250, 26, 250, 27, 250, 40, 250, 41, 250, 57, 250, 51, 250, 74, 250, 65, 250, 89, 250, 84, 250, 99, 250, 100, 250, 114, 250, 117, 250, 129, 250, 133, 250, 144, 250, 148, 250, 161, 250, 163, 250, 176, 250, 178, 250, 192, 250, 192, 250, 209, 250, 205, 250, 227, 250, 223, 250, 243, 250, 241, 250, 0, 251, 1, 251, 16, 251, 18, 251, 34, 251, 33, 251, 54, 251, 51, 251, 70, 251, 70, 251, 85, 251, 86, 251, 104, 251, 104, 251, 123, 251, 123, 251, 140, 251, 143, 251, 158, 251, 161, 251, 177, 251, 179, 251, 196, 251, 197, 251, 216, 251, 219, 251, 234, 251, 236, 251, 1, 252, 255, 251, 23, 252, 20, 252, 43, 252, 41, 252, 65, 252, 61, 252, 86, 252, 82, 252, 110, 252, 108, 252, 129, 252, 130, 252, 153, 252, 154, 252, 179, 252, 176, 252, 206, 252, 201, 252, 230, 252, 227, 252, 2, 253, 0, 253, 30, 253, 25, 253, 60, 253, 56, 253, 86, 253, 82, 253, 121, 253, 112, 253, 157, 253, 153, 253, 188, 253, 191, 253, 224, 253, 225, 253, 14, 254, 12, 254, 56, 254, 55, 254, 107, 254, 110, 254, 166, 254, 173, 254, 254, 254, 4, 255, 128, 255, 131, 255, 196, 0, 195, 0, 44, 1, 40, 1, 113, 1, 113, 1, 167, 1, 169, 1, 214, 1, 214, 1, 0, 2, 254, 1, 40, 2, 40, 2, 72, 2, 71, 2, 108, 2, 103, 2, 139, 2, 135, 2, 164, 2, 166, 2, 188, 2, 192, 2, 219, 2, 216, 2, 247, 2, 240, 2, 13, 3, 6, 3, 34, 3, 30, 3, 54, 3, 53, 3, 76, 3, 76, 3, 96, 3, 94, 3, 116, 3, 115, 3, 134, 3, 138, 3, 149, 3, 157, 3, 167, 3, 172, 3, 187, 3, 187, 3, 204, 3, 208, 3, 215, 3, 225, 3, 231, 3, 240, 3, 250, 3, 251, 3, 14, 4, 9, 4, 29, 4, 25, 4, 42, 4, 42, 4, 53, 4, 55, 4, 68, 4, 69, 4, 81, 4, 82, 4, 96, 4, 96, 4, 110, 4, 105, 4, 125, 4, 118, 4, 137, 4, 132, 4, 147, 4, 148, 4, 156, 4, 161, 4, 167, 4, 174, 4, 179, 4, 183, 4, 192, 4, 194, 4, 203, 4, 206, 4, 212, 4, 219, 4, 222, 4, 231, 4, 233, 4, 239, 4, 245, 4, 249, 4, 1, 5, 0, 5, 13, 5, 10, 5, 22, 5, 24, 5, 28, 5, 33, 5, 41, 5, 41, 5, 50, 5, 52, 5, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 0, 0, 254, 255, 3, 0, 252, 255, 5, 0, 252, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 2, 0, 253, 255, 3, 0, 253, 255, 2, 0, 0, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 0, 0, 2, 0, 253, 255, 3, 0, 254, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 254, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 0, 0, 2, 0, 253, 255, 2, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 252, 255, 5, 0, 252, 255, 3, 0, 254, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 254, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 3, 0, 252, 255, 4, 0, 252, 255, 3, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 2, 0, 253, 255, 2, 0, 255, 255, 0, 0, 2, 0, 252, 255, 4, 0, 252, 255, 5, 0, 252, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 0, 0, 254, 255, 3, 0, 253, 255, 2, 0, 0, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 253, 255, 3, 0, 255, 255, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 2, 0, 253, 255, 3, 0, 254, 255, 0, 0, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 0, 0, 2, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 0, 0, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 253, 255, 3, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 3, 0, 252, 255, 4, 0, 252, 255, 3, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 252, 255, 4, 0, 254, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 254, 255, 0, 0, 1, 0, 254, 255, 1, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 1, 0, 254, 255, 1, 0, 255, 255, 1, 0, 1, 0, 254, 255, 1, 0, 0, 0, 255, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 255, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 0, 0, 255, 255, 1, 0, 254, 255, 3, 0, 254, 255, 1, 0, 255, 255, 0, 0, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 0, 0, 254, 255, 4, 0, 251, 255, 4, 0, 254, 255, 0, 0, 1, 0, 0, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 252, 255, 5, 0, 252, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 253, 255, 5, 0, 251, 255, 4, 0, 253, 255, 2, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 254, 255, 4, 0, 251, 255, 4, 0, 254, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 252, 255, 4, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 2, 0, 253, 255, 4, 0, 252, 255, 3, 0, 255, 255, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 254, 255, 0, 0, 2, 0, 252, 255, 5, 0, 252, 255, 3, 0, 254, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 0, 0, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 0, 0, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 254, 255, 0, 0, 1, 0, 254, 255, 2, 0, 0, 0, 254, 255, 3, 0, 253, 255, 1, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 255, 255, 255, 255, 2, 0, 253, 255, 3, 0, 255, 255, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 254, 255, 4, 0, 251, 255, 4, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 5, 0, 251, 255, 4, 0, 253, 255, 1, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 255, 255, 255, 255, 2, 0, 253, 255, 4, 0, 253, 255, 2, 0, 254, 255, 1, 0, 1, 0, 255, 255, 1, 0, 255, 255, 255, 255, 3, 0, 253, 255, 2, 0, 255, 255, 255, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 1, 0, 0, 0, 1, 0, 255, 255, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 3, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 4, 0, 251, 255, 4, 0, 253, 255, 2, 0, 255, 255, 1, 0, 253, 255, 4, 0, 252, 255, 4, 0, 253, 255, 2, 0, 253, 255, 4, 0, 252, 255, 4, 0, 253, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 3, 0, 252, 255, 3, 0, 254, 255, 0, 0, 2, 0, 254, 255, 2, 0, 253, 255, 2, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 254, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 2, 0, 253, 255, 4, 0, 251, 255, 5, 0, 251, 255, 5, 0, 252, 255, 3, 0, 253, 255, 3, 0, 254, 255, 2, 0, 253, 255, 3, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 0, 0, 254, 255, 3, 0, 253, 255, 2, 0, 0, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 0, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 3, 0, 253, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 3, 0, 252, 255, 4, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 255, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 254, 255, 2, 0, 254, 255, 3, 0, 252, 255, 5, 0, 250, 255, 6, 0, 252, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 3, 0, 253, 255, 3, 0, 252, 255, 5, 0, 251, 255, 4, 0, 254, 255, 255, 255, 4, 0, 251, 255, 4, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 0, 0, 1, 0, 0, 0, 255, 255, 1, 0, 254, 255, 2, 0, 0, 0, 254, 255, 3, 0, 252, 255, 4, 0, 254, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 0, 0, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 252, 255, 5, 0, 252, 255, 2, 0, 255, 255, 0, 0, 1, 0, 0, 0, 255, 255, 1, 0, 254, 255, 2, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 0, 0, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 252, 255, 4, 0, 254, 255, 0, 0, 2, 0, 252, 255, 4, 0, 253, 255, 3, 0, 253, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 0, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 255, 255, 3, 0, 252, 255, 4, 0, 252, 255, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 252, 255, 5, 0, 251, 255, 4, 0, 253, 255, 1, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 251, 255, 4, 0, 254, 255, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 1, 0, 252, 255, 6, 0, 250, 255, 5, 0, 252, 255, 3, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 253, 255, 4, 0, 252, 255, 4, 0, 252, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 254, 255, 4, 0, 251, 255, 5, 0, 252, 255, 3, 0, 255, 255, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 252, 255, 4, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 2, 0, 0, 0, 254, 255, 4, 0, 252, 255, 3, 0, 253, 255, 3, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 254, 255, 4, 0, 251, 255, 4, 0, 254, 255, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 254, 255, 3, 0, 254, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 254, 255, 2, 0, 254, 255, 3, 0, 253, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 253, 255, 4, 0, 253, 255, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 2, 0, 252, 255, 5, 0, 251, 255, 3, 0, 255, 255, 0, 0, 1, 0, 255, 255, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 255, 255, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 254, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 3, 0, 253, 255, 2, 0, 255, 255, 255, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 255, 255, 3, 0, 252, 255, 4, 0, 252, 255, 3, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 0, 0, 1, 0, 0, 0, 255, 255, 2, 0, 252, 255, 4, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 255, 2, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 254, 255, 3, 0, 254, 255, 2, 0, 255, 255, 0, 0, 254, 255, 3, 0, 254, 255, 1, 0, 1, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 1, 0, 253, 255, 4, 0, 252, 255, 3, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 254, 255, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 255, 255, 3, 0, 252, 255, 4, 0, 252, 255, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 255, 255, 3, 0, 252, 255, 3, 0, 255, 255, 254, 255, 4, 0, 252, 255, 3, 0, 254, 255, 0, 0, 2, 0, 253, 255, 4, 0, 251, 255, 5, 0, 251, 255, 6, 0, 251, 255, 2, 0, 0, 0, 255, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 253, 255, 4, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 5, 0, 251, 255, 5, 0, 251, 255, 4, 0, 253, 255, 2, 0, 255, 255, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 255, 255, 3, 0, 252, 255, 5, 0, 251, 255, 3, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 0, 0, 2, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 2, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 0, 0, 2, 0, 253, 255, 4, 0, 251, 255, 5, 0, 251, 255, 5, 0, 252, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 253, 255, 3, 0, 255, 255, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 254, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 2, 0, 0, 0, 254, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 253, 255, 3, 0, 253, 255, 4, 0, 251, 255, 5, 0, 252, 255, 2, 0, 0, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 254, 255, 0, 0, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 255, 255, 1, 0, 255, 255, 255, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 0, 0, 254, 255, 3, 0, 252, 255, 4, 0, 254, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 252, 255, 5, 0, 251, 255, 5, 0, 250, 255, 6, 0, 251, 255, 4, 0, 254, 255, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 255, 255, 3, 0, 252, 255, 4, 0, 252, 255, 4, 0, 253, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 253, 255, 1, 0, 0, 0, 255, 255, 1, 0, 1, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 254, 255, 4, 0, 252, 255, 3, 0, 254, 255, 0, 0, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 4, 0, 253, 255, 1, 0, 1, 0, 253, 255, 4, 0, 253, 255, 2, 0, 255, 255, 255, 255, 1, 0, 0, 0, 0, 0, 1, 0, 254, 255, 0, 0, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 254, 255, 3, 0, 254, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 255, 255, 0, 0, 1, 0, 253, 255, 3, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 0, 0, 254, 255, 2, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 255, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 0, 0, 254, 255, 3, 0, 253, 255, 2, 0, 0, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 255, 255, 2, 0, 255, 255, 0, 0, 1, 0, 253, 255, 5, 0, 251, 255, 4, 0, 252, 255, 3, 0, 255, 255, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 251, 255, 5, 0, 251, 255, 4, 0, 253, 255, 3, 0, 253, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 2, 0, 252, 255, 4, 0, 254, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 3, 0, 252, 255, 3, 0, 255, 255, 255, 255, 3, 0, 252, 255, 3, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 3, 0, 255, 255, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 0, 0, 2, 0, 253, 255, 4, 0, 252, 255, 2, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 4, 0, 250, 255, 6, 0, 251, 255, 4, 0, 253, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 252, 255, 3, 0, 255, 255, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 254, 255, 0, 0, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 0, 0, 2, 0, 253, 255, 3, 0, 254, 255, 0, 0, 2, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 5, 0, 250, 255, 7, 0, 249, 255, 6, 0, 251, 255, 4, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 0, 0, 2, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 254, 255, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 254, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 254, 255, 0, 0, 1, 0, 254, 255, 2, 0, 0, 0, 254, 255, 3, 0, 252, 255, 4, 0, 252, 255, 4, 0, 253, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 3, 0, 252, 255, 4, 0, 252, 255, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 255, 255, 3, 0, 252, 255, 4, 0, 252, 255, 3, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 5, 0, 251, 255, 4, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 253, 255, 5, 0, 250, 255, 6, 0, 251, 255, 4, 0, 253, 255, 2, 0, 254, 255, 3, 0, 253, 255, 2, 0, 254, 255, 2, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 255, 255, 255, 255, 2, 0, 253, 255, 4, 0, 253, 255, 1, 0, 1, 0, 253, 255, 4, 0, 252, 255, 3, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 3, 0, 253, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 251, 255, 5, 0, 252, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 2, 0, 252, 255, 5, 0, 251, 255, 5, 0, 251, 255, 5, 0, 251, 255, 4, 0, 255, 255, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 0, 0, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 0, 0, 254, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 1, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 5, 0, 250, 255, 4, 0, 254, 255, 0, 0, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 1, 0, 253, 255, 4, 0, 252, 255, 4, 0, 253, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 253, 255, 5, 0, 250, 255, 5, 0, 253, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 253, 255, 4, 0, 252, 255, 4, 0, 253, 255, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 253, 255, 4, 0, 252, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 3, 0, 253, 255, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 254, 255, 4, 0, 251, 255, 4, 0, 254, 255, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 2, 0, 252, 255, 5, 0, 251, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 3, 0, 254, 255, 0, 0, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 253, 255, 4, 0, 251, 255, 5, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 3, 0, 253, 255, 1, 0, 0, 0, 255, 255, 2, 0, 255, 255, 255, 255, 2, 0, 253, 255, 3, 0, 255, 255, 0, 0, 0, 0, 255, 255, 2, 0, 255, 255, 0, 0, 1, 0, 253, 255, 5, 0, 250, 255, 5, 0, 253, 255, 2, 0, 255, 255, 0, 0, 255, 255, 2, 0, 254, 255, 3, 0, 253, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 254, 255, 0, 0, 2, 0, 252, 255, 5, 0, 252, 255, 2, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 4, 0, 251, 255, 5, 0, 251, 255, 5, 0, 252, 255, 2, 0, 0, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 255, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 3, 0, 252, 255, 3, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 0, 0, 254, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 0, 0, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 3, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 252, 255, 4, 0, 254, 255, 255, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 254, 255, 3, 0, 253, 255, 2, 0, 254, 255, 1, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 2, 0, 255, 255, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 1, 0, 253, 255, 4, 0, 252, 255, 3, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 251, 255, 5, 0, 252, 255, 3, 0, 255, 255, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 0, 0, 3, 0, 252, 255, 4, 0, 252, 255, 3, 0, 254, 255, 3, 0, 252, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 2, 0, 0, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 254, 255, 0, 0, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 253, 255, 3, 0, 253, 255, 4, 0, 252, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 2, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 252, 255, 4, 0, 253, 255, 2, 0, 253, 255, 3, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 252, 255, 5, 0, 252, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 5, 0, 250, 255, 5, 0, 254, 255, 255, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 255, 255, 3, 0, 253, 255, 2, 0, 255, 255, 255, 255, 3, 0, 252, 255, 5, 0, 251, 255, 3, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 255, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 2, 0, 253, 255, 3, 0, 252, 255, 5, 0, 252, 255, 3, 0, 253, 255, 2, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 2, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 3, 0, 253, 255, 2, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 2, 0, 253, 255, 3, 0, 254, 255, 0, 0, 2, 0, 253, 255, 3, 0, 254, 255, 0, 0, 2, 0, 254, 255, 1, 0, 0, 0, 254, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 2, 0, 252, 255, 5, 0, 251, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 253, 255, 4, 0, 252, 255, 4, 0, 252, 255, 3, 0, 255, 255, 255, 255, 3, 0, 251, 255, 5, 0, 252, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 0, 0, 255, 255, 1, 0, 254, 255, 2, 0, 0, 0, 0, 0, 255, 255, 1, 0, 254, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 2, 0, 253, 255, 3, 0, 252, 255, 5, 0, 252, 255, 3, 0, 254, 255, 0, 0, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 253, 255, 3, 0, 254, 255, 1, 0, 1, 0, 253, 255, 3, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 253, 255, 2, 0, 1, 0, 251, 255, 6, 0, 251, 255, 3, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 254, 255, 2, 0, 253, 255, 4, 0, 253, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 254, 255, 0, 0, 1, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 255, 255, 0, 0, 0, 0, 255, 255, 1, 0, 1, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 2, 0, 253, 255, 2, 0, 254, 255, 2, 0, 255, 255, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 0, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 253, 255, 5, 0, 250, 255, 5, 0, 253, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 2, 0, 252, 255, 4, 0, 254, 255, 0, 0, 1, 0, 254, 255, 2, 0, 0, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 254, 255, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 253, 255, 4, 0, 253, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 252, 255, 6, 0, 250, 255, 5, 0, 252, 255, 2, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 0, 0, 1, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 253, 255, 2, 0, 0, 0, 254, 255, 4, 0, 252, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 3, 0, 252, 255, 3, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 3, 0, 252, 255, 4, 0, 252, 255, 3, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 1, 0, 0, 0, 255, 255, 2, 0, 255, 255, 255, 255, 0, 0, 2, 0, 252, 255, 6, 0, 250, 255, 4, 0, 254, 255, 1, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 2, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 3, 0, 251, 255, 5, 0, 252, 255, 3, 0, 254, 255, 2, 0, 252, 255, 5, 0, 252, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 254, 255, 0, 0, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 4, 0, 252, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 252, 255, 5, 0, 252, 255, 3, 0, 254, 255, 0, 0, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 2, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 0, 0, 1, 0, 255, 255, 2, 0, 253, 255, 2, 0, 255, 255, 0, 0, 2, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 2, 0, 252, 255, 4, 0, 253, 255, 2, 0, 0, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 254, 255, 3, 0, 252, 255, 5, 0, 251, 255, 4, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 0, 0, 2, 0, 253, 255, 3, 0, 254, 255, 0, 0, 2, 0, 253, 255, 4, 0, 251, 255, 5, 0, 252, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 1, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 0, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 2, 0, 253, 255, 4, 0, 251, 255, 5, 0, 252, 255, 3, 0, 254, 255, 2, 0, 252, 255, 5, 0, 252, 255, 3, 0, 255, 255, 254, 255, 3, 0, 253, 255, 4, 0, 253, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 254, 255, 3, 0, 251, 255, 7, 0, 249, 255, 5, 0, 253, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 4, 0, 252, 255, 3, 0, 255, 255, 254, 255, 4, 0, 252, 255, 3, 0, 255, 255, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 4, 0, 253, 255, 1, 0, 0, 0, 255, 255, 3, 0, 253, 255, 1, 0, 1, 0, 253, 255, 3, 0, 255, 255, 255, 255, 3, 0, 253, 255, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 3, 0, 252, 255, 4, 0, 252, 255, 2, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 0, 0, 254, 255, 2, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 3, 0, 253, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 253, 255, 4, 0, 253, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 253, 255, 4, 0, 252, 255, 4, 0, 253, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 0, 0, 2, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 2, 0, 253, 255, 3, 0, 254, 255, 0, 0, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 254, 255, 2, 0, 254, 255, 3, 0, 253, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 1, 0, 1, 0, 254, 255, 3, 0, 253, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 2, 0, 253, 255, 4, 0, 251, 255, 5, 0, 253, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 3, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 0, 0, 2, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 2, 0, 253, 255, 3, 0, 252, 255, 4, 0, 253, 255, 3, 0, 253, 255, 1, 0, 0, 0, 1, 0, 254, 255, 2, 0, 253, 255, 3, 0, 255, 255, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 0, 0, 1, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 255, 255, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 4, 0, 252, 255, 2, 0, 0, 0, 254, 255, 3, 0, 254, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 253, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 253, 255, 4, 0, 252, 255, 4, 0, 253, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 2, 0, 0, 0, 254, 255, 3, 0, 254, 255, 0, 0, 2, 0, 253, 255, 2, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 3, 0, 255, 255, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 1, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 3, 0, 251, 255, 5, 0, 252, 255, 3, 0, 254, 255, 0, 0, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 0, 0, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 4, 0, 251, 255, 5, 0, 253, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 0, 0, 1, 0, 254, 255, 4, 0, 251, 255, 5, 0, 251, 255, 3, 0, 0, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 253, 255, 5, 0, 251, 255, 5, 0, 250, 255, 6, 0, 252, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 4, 0, 251, 255, 5, 0, 251, 255, 5, 0, 253, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 4, 0, 251, 255, 6, 0, 249, 255, 7, 0, 251, 255, 3, 0, 255, 255, 254, 255, 4, 0, 252, 255, 4, 0, 253, 255, 0, 0, 2, 0, 253, 255, 3, 0, 255, 255, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 0, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 0, 0, 254, 255, 3, 0, 252, 255, 4, 0, 254, 255, 255, 255, 3, 0, 252, 255, 5, 0, 251, 255, 4, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 0, 0, 254, 255, 3, 0, 254, 255, 0, 0, 2, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 0, 0, 1, 0, 0, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 0, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 254, 255, 255, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 2, 0, 253, 255, 4, 0, 252, 255, 2, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 255, 255, 3, 0, 252, 255, 4, 0, 253, 255, 1, 0, 0, 0, 255, 255, 3, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 255, 255, 1, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 2, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 253, 255, 4, 0, 252, 255, 4, 0, 253, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 255, 255, 255, 255, 2, 0, 253, 255, 3, 0, 255, 255, 0, 0, 1, 0, 252, 255, 6, 0, 250, 255, 6, 0, 251, 255, 3, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 254, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 255, 255, 2, 0, 254, 255, 2, 0, 253, 255, 3, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 2, 0, 253, 255, 2, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 252, 255, 6, 0, 249, 255, 7, 0, 251, 255, 2, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 254, 255, 3, 0, 254, 255, 0, 0, 3, 0, 250, 255, 6, 0, 252, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 0, 0, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 1, 0, 253, 255, 4, 0, 252, 255, 2, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 0, 0, 2, 0, 253, 255, 3, 0, 253, 255, 2, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 2, 0, 255, 255, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 2, 0, 252, 255, 6, 0, 249, 255, 6, 0, 253, 255, 0, 0, 2, 0, 253, 255, 2, 0, 0, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 2, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 1, 0, 254, 255, 2, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 1, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 0, 0, 255, 255, 0, 0, 2, 0, 253, 255, 3, 0, 254, 255, 0, 0, 2, 0, 253, 255, 3, 0, 254, 255, 0, 0, 1, 0, 254, 255, 3, 0, 254, 255, 1, 0, 254, 255, 2, 0, 0, 0, 255, 255, 1, 0, 254, 255, 2, 0, 0, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 0, 0, 255, 255, 1, 0, 254, 255, 2, 0, 0, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 254, 255, 0, 0, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 2, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 2, 0, 254, 255, 2, 0, 253, 255, 4, 0, 253, 255, 2, 0, 255, 255, 255, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 1, 0, 0, 0, 255, 255, 3, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 253, 255, 3, 0, 255, 255, 255, 255, 2, 0, 254, 255, 0, 0, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 252, 255, 5, 0, 252, 255, 2, 0, 255, 255, 0, 0, 2, 0, 253, 255, 2, 0, 254, 255, 2, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 1, 0, 0, 0, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 253, 255, 4, 0, 253, 255, 2, 0, 255, 255, 255, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 3, 0, 253, 255, 1, 0, 0, 0, 0, 0, 1, 0, 255, 255, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 253, 255, 4, 0, 252, 255, 4, 0, 253, 255, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 0, 0, 254, 255, 3, 0, 253, 255, 3, 0, 254, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 1, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 254, 255, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 253, 255, 1, 0, 1, 0, 253, 255, 4, 0, 253, 255, 2, 0, 255, 255, 255, 255, 3, 0, 252, 255, 4, 0, 253, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 254, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 2, 0, 252, 255, 5, 0, 250, 255, 5, 0, 254, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 254, 255, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 254, 255, 0, 0, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 0, 0, 2, 0, 253, 255, 3, 0, 253, 255, 2, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 254, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 2, 0, 1, 0, 253, 255, 4, 0, 251, 255, 4, 0, 255, 255, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 3, 0, 252, 255, 3, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 253, 255, 4, 0, 253, 255, 1, 0, 1, 0, 253, 255, 3, 0, 254, 255, 1, 0, 1, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 3, 0, 253, 255, 2, 0, 254, 255, 2, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 0, 0, 254, 255, 2, 0, 0, 0, 255, 255, 2, 0, 253, 255, 2, 0, 255, 255, 0, 0, 2, 0, 253, 255, 3, 0, 254, 255, 0, 0, 2, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 253, 255, 4, 0, 253, 255, 2, 0, 255, 255, 255, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 0, 0, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 2, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 2, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 0, 0, 2, 0, 252, 255, 5, 0, 252, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 253, 255, 4, 0, 252, 255, 3, 0, 255, 255, 255, 255, 2, 0, 253, 255, 3, 0, 255, 255, 0, 0, 1, 0, 253, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 5, 0, 252, 255, 2, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 254, 255, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 3, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 255, 255, 255, 255, 3, 0, 252, 255, 3, 0, 255, 255, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 255, 255, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 2, 0, 254, 255, 0, 0, 1, 0, 255, 255, 2, 0, 254, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 1, 0, 254, 255, 1, 0, 0, 0, 255, 255, 3, 0, 252, 255, 4, 0, 251, 255, 6, 0, 251, 255, 4, 0, 252, 255, 4, 0, 252, 255, 4, 0, 253, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 253, 255, 4, 0, 252, 255, 4, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 0, 0, 2, 0, 253, 255, 4, 0, 252, 255, 2, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 4, 0, 252, 255, 3, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 255, 2, 0, 252, 255, 4, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 2, 0, 252, 255, 5, 0, 251, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 1, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 3, 0, 252, 255, 4, 0, 252, 255, 3, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 254, 255, 255, 255, 3, 0, 252, 255, 3, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 2, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 0, 0, 2, 0, 253, 255, 4, 0, 251, 255, 4, 0, 254, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 0, 0, 254, 255, 3, 0, 252, 255, 4, 0, 254, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 3, 0, 252, 255, 3, 0, 254, 255, 1, 0, 1, 0, 254, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 0, 0, 255, 255, 1, 0, 255, 255, 0, 0, 2, 0, 253, 255, 2, 0, 0, 0, 255, 255, 2, 0, 253, 255, 2, 0, 0, 0, 0, 0, 1, 0, 253, 255, 3, 0, 254, 255, 1, 0, 1, 0, 253, 255, 4, 0, 251, 255, 4, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 254, 255, 0, 0, 1, 0, 254, 255, 3, 0, 254, 255, 0, 0, 2, 0, 253, 255, 2, 0, 0, 0, 254, 255, 4, 0, 251, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 254, 255, 1, 0, 1, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 0, 0, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 2, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 254, 255, 3, 0, 254, 255, 2, 0, 253, 255, 3, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 255, 255, 0, 0, 0, 0, 255, 255, 2, 0, 0, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 3, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 3, 0, 252, 255, 3, 0, 253, 255, 3, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 255, 255, 1, 0, 1, 0, 254, 255, 2, 0, 253, 255, 3, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 1, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 253, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 3, 0, 255, 255, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 253, 255, 3, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 3, 0, 252, 255, 3, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 3, 0, 252, 255, 4, 0, 252, 255, 4, 0, 253, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 5, 0, 251, 255, 4, 0, 253, 255, 2, 0, 0, 0, 254, 255, 3, 0, 252, 255, 4, 0, 254, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 4, 0, 251, 255, 5, 0, 252, 255, 3, 0, 253, 255, 3, 0, 253, 255, 4, 0, 252, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 2, 0, 252, 255, 4, 0, 254, 255, 0, 0, 1, 0, 254, 255, 2, 0, 0, 0, 254, 255, 3, 0, 253, 255, 2, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 255, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 2, 0, 253, 255, 2, 0, 0, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 255, 255, 0, 0, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 2, 0, 252, 255, 6, 0, 250, 255, 4, 0, 254, 255, 0, 0, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 254, 255, 3, 0, 254, 255, 1, 0, 0, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 4, 0, 251, 255, 5, 0, 251, 255, 5, 0, 252, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 2, 0, 0, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 252, 255, 5, 0, 251, 255, 5, 0, 251, 255, 4, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 2, 0, 253, 255, 4, 0, 251, 255, 4, 0, 254, 255, 1, 0, 0, 0, 255, 255, 0, 0, 2, 0, 252, 255, 6, 0, 250, 255, 4, 0, 255, 255, 254, 255, 3, 0, 254, 255, 0, 0, 2, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 3, 0, 252, 255, 3, 0, 255, 255, 255, 255, 2, 0, 254, 255, 2, 0, 253, 255, 4, 0, 251, 255, 5, 0, 253, 255, 0, 0, 2, 0, 253, 255, 3, 0, 255, 255, 254, 255, 4, 0, 252, 255, 4, 0, 252, 255, 3, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 1, 0, 1, 0, 255, 255, 0, 0, 2, 0, 252, 255, 4, 0, 254, 255, 0, 0, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 255, 255, 3, 0, 252, 255, 4, 0, 252, 255, 4, 0, 252, 255, 3, 0, 255, 255, 255, 255, 3, 0, 252, 255, 3, 0, 254, 255, 1, 0, 1, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 253, 255, 5, 0, 250, 255, 5, 0, 253, 255, 1, 0, 0, 0, 1, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 3, 0, 252, 255, 4, 0, 252, 255, 4, 0, 253, 255, 2, 0, 254, 255, 2, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 254, 255, 2, 0, 254, 255, 3, 0, 253, 255, 2, 0, 253, 255, 4, 0, 253, 255, 2, 0, 255, 255, 255, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 2, 0, 253, 255, 4, 0, 251, 255, 4, 0, 254, 255, 1, 0, 0, 0, 255, 255, 0, 0, 1, 0, 0, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 2, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 254, 255, 0, 0, 1, 0, 254, 255, 3, 0, 254, 255, 0, 0, 1, 0, 255, 255, 0, 0, 2, 0, 253, 255, 3, 0, 253, 255, 2, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 255, 255, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 1, 0, 1, 0, 253, 255, 5, 0, 250, 255, 6, 0, 251, 255, 3, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 3, 0, 252, 255, 3, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 2, 0, 0, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 2, 0, 252, 255, 5, 0, 251, 255, 4, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 0, 0, 254, 255, 3, 0, 253, 255, 2, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 0, 0, 3, 0, 252, 255, 3, 0, 255, 255, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 0, 0, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 0, 0, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 253, 255, 4, 0, 252, 255, 3, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 0, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 3, 0, 0, 0, 255, 255, 1, 0, 255, 255, 255, 255, 3, 0, 254, 255, 0, 0, 2, 0, 252, 255, 5, 0, 251, 255, 4, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 0, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 1, 0, 0, 0, 0, 0, 1, 0, 254, 255, 1, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 1, 0, 253, 255, 4, 0, 252, 255, 4, 0, 253, 255, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 253, 255, 4, 0, 253, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 254, 255, 3, 0, 253, 255, 3, 0, 254, 255, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 5, 0, 251, 255, 4, 0, 254, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 255, 255, 0, 0, 0, 0, 1, 0, 253, 255, 5, 0, 250, 255, 7, 0, 249, 255, 5, 0, 253, 255, 2, 0, 255, 255, 1, 0, 254, 255, 1, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 254, 255, 0, 0, 2, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 2, 0, 255, 255, 1, 0, 0, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 2, 0, 253, 255, 3, 0, 254, 255, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 1, 0, 253, 255, 4, 0, 252, 255, 4, 0, 253, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 2, 0, 254, 255, 0, 0, 2, 0, 253, 255, 3, 0, 255, 255, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 253, 255, 4, 0, 251, 255, 6, 0, 250, 255, 4, 0, 253, 255, 2, 0, 255, 255, 2, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 3, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 2, 0, 254, 255, 1, 0, 255, 255, 2, 0, 253, 255, 4, 0, 251, 255, 5, 0, 253, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 254, 255, 4, 0, 252, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 254, 255, 3, 0, 254, 255, 1, 0, 255, 255, 0, 0, 1, 0, 0, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 252, 255, 4, 0, 252, 255, 4, 0, 252, 255, 4, 0, 252, 255, 3, 0, 254, 255, 2, 0, 254, 255, 2, 0, 253, 255, 3, 0, 255, 255, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 3, 0, 253, 255, 2, 0, 0, 0, 254, 255, 3, 0, 253, 255, 2, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 253, 255, 4, 0, 252, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 253, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 3, 0, 255, 255, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 1, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 0, 0, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 2, 0, 254, 255, 2, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 2, 0, 254, 255, 2, 0, 253, 255, 3, 0, 254, 255, 2, 0, 254, 255, 1, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 251, 255, 4, 0, 254, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 1, 0, 253, 255, 4, 0, 252, 255, 3, 0, 255, 255, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 254, 255, 1, 0, 255, 255, 0, 0, 1, 0, 0, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 251, 255, 5, 0, 252, 255, 2, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 254, 255, 4, 0, 251, 255, 5, 0, 252, 255, 3, 0, 254, 255, 2, 0, 254, 255, 1, 0, 255, 255, 2, 0, 255, 255, 0, 0, 0, 0, 255, 255, 1, 0, 1, 0, 253, 255, 4, 0, 252, 255, 3, 0, 255, 255, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 255, 255, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 4, 0, 251, 255, 5, 0, 251, 255, 5, 0, 252, 255, 2, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 0, 0, 254, 255, 3, 0, 254, 255, 0, 0, 2, 0, 252, 255, 5, 0, 252, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 254, 255, 3, 0, 253, 255, 2, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 0, 0, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 254, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 254, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 255, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 253, 255, 4, 0, 252, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 254, 255, 4, 0, 251, 255, 4, 0, 255, 255, 254, 255, 3, 0, 253, 255, 2, 0, 0, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 2, 0, 253, 255, 3, 0, 255, 255, 255, 255, 2, 0, 254, 255, 0, 0, 2, 0, 254, 255, 1, 0, 0, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 1, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 3, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 253, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 0, 0, 2, 0, 253, 255, 3, 0, 253, 255, 2, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 3, 0, 252, 255, 5, 0, 252, 255, 1, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 0, 0, 2, 0, 252, 255, 4, 0, 254, 255, 255, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 255, 255, 3, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 2, 0, 0, 0, 0, 0, 255, 255, 1, 0, 254, 255, 4, 0, 253, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 2, 0, 255, 255, 1, 0, 0, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 1, 0, 254, 255, 1, 0, 255, 255, 0, 0, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 253, 255, 4, 0, 252, 255, 4, 0, 252, 255, 4, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 253, 255, 3, 0, 254, 255, 2, 0, 255, 255, 255, 255, 2, 0, 254, 255, 1, 0, 1, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 3, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 255, 255, 0, 0, 255, 255, 3, 0, 252, 255, 4, 0, 253, 255, 1, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 2, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 1, 0, 255, 255, 1, 0, 254, 255, 2, 0, 255, 255, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 4, 0, 251, 255, 5, 0, 252, 255, 4, 0, 253, 255, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 254, 255, 4, 0, 251, 255, 5, 0, 252, 255, 2, 0, 0, 0, 255, 255, 1, 0, 0, 0, 254, 255, 3, 0, 253, 255, 3, 0, 253, 255, 3, 0, 253, 255, 2, 0, 255, 255, 1, 0, 254, 255, 3, 0, 253, 255, 2, 0, 0, 0, 254, 255, 3, 0, 254, 255, 0, 0, 2, 0, 253, 255, 3, 0, 255, 255, 254, 255, 3, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 3, 0, 252, 255, 4, 0, 252, 255, 4, 0, 252, 255, 3, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 253, 255, 5, 0, 250, 255, 6, 0, 252, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 3, 0, 252, 255, 4, 0, 253, 255, 1, 0, 1, 0, 254, 255, 2, 0, 254, 255, 2, 0, 255, 255, 0, 0, 0, 0, 255, 255, 2, 0, 254, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 2, 0, 253, 255, 3, 0, 253, 255, 4, 0, 252, 255, 2, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 2, 0, 0, 0, 254, 255, 3, 0, 254, 255, 0, 0, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 0, 0, 255, 255, 1, 0, 255, 255, 2, 0, 253, 255, 4, 0, 252, 255, 2, 0, 0, 0, 255, 255, 2, 0, 254, 255, 1, 0, 255, 255, 1, 0, 255, 255, 1, 0 ) -format = 1 - -[sub_resource type="OccluderPolygon2D" id=31] -polygon = PoolVector2Array( -5, -2, -5, 2, -3, 4, 4, 4, 4, -4, -3, -4 ) - -[node name="EnemyLaser" instance=ExtResource( 1 )] -z_index = 0 -mass = 400.0 - -[node name="AnimatedSprite" parent="." index="0"] -frames = SubResource( 14 ) -frame = 1 - -[node name="CollisionShape2D" parent="." index="1"] -shape = SubResource( 30 ) - -[node name="AudioStreamPlayer" parent="." index="3"] -stream = SubResource( 29 ) - -[node name="LightOccluder2D" parent="." index="4"] -scale = Vector2( 3, 3 ) -occluder = SubResource( 31 ) diff --git a/bullets/scenes/Fireball.tscn b/bullets/scenes/Fireball.tscn deleted file mode 100644 index 94a1aa2..0000000 --- a/bullets/scenes/Fireball.tscn +++ /dev/null @@ -1,128 +0,0 @@ -[gd_scene load_steps=24 format=2] - -[ext_resource path="res://bullets/scenes/EnemyLaser.tscn" type="PackedScene" id=1] -[ext_resource path="res://sprites/enemylaser-sheet.png" type="Texture" id=2] -[ext_resource path="res://sprites/blackandwhitefball-Sheet.png" type="Texture" id=3] - -[sub_resource type="AtlasTexture" id=16] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 0, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=17] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 16, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=18] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 32, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=19] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 48, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=20] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 64, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=21] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 80, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=22] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 96, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=23] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 112, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=24] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 128, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=25] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 144, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=26] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 160, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=27] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 176, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=28] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 192, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=29] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 0, 0, 19, 11 ) - -[sub_resource type="AtlasTexture" id=30] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 19, 0, 19, 11 ) - -[sub_resource type="AtlasTexture" id=31] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 38, 0, 19, 11 ) - -[sub_resource type="AtlasTexture" id=32] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 57, 0, 19, 11 ) - -[sub_resource type="SpriteFrames" id=33] -resource_local_to_scene = true -animations = [ { -"frames": [ SubResource( 16 ), SubResource( 17 ), SubResource( 18 ), SubResource( 19 ), SubResource( 20 ), SubResource( 21 ), SubResource( 22 ), SubResource( 23 ), SubResource( 24 ), SubResource( 25 ), SubResource( 26 ), SubResource( 27 ), SubResource( 28 ) ], -"loop": true, -"name": "New Anim", -"speed": 25.0 -}, { -"frames": [ SubResource( 29 ), SubResource( 30 ), SubResource( 31 ), SubResource( 32 ) ], -"loop": true, -"name": "New Anim 1", -"speed": 15.0 -} ] - -[sub_resource type="RectangleShape2D" id=34] -resource_local_to_scene = true -extents = Vector2( 5.5, 4.5 ) - -[sub_resource type="OccluderPolygon2D" id=35] -polygon = PoolVector2Array( -6, -3.33333, -6, 2, -3, 5, 5, 5, 5, -6, -3.33333, -6 ) - -[node name="Fireball" instance=ExtResource( 1 )] -mass = 1000.0 -linear_velocity = Vector2( -60, 0 ) - -[node name="AnimatedSprite" parent="." index="0"] -frames = SubResource( 33 ) -animation = "New Anim 1" -frame = 0 - -[node name="CollisionShape2D" parent="." index="1"] -position = Vector2( -3.5, -0.5 ) -shape = SubResource( 34 ) - -[node name="LightOccluder2D" parent="." index="4"] -position = Vector2( -3, 0 ) -occluder = SubResource( 35 ) diff --git a/bullets/scenes/Flak.tscn b/bullets/scenes/Flak.tscn deleted file mode 100644 index 303a003..0000000 --- a/bullets/scenes/Flak.tscn +++ /dev/null @@ -1,47 +0,0 @@ -[gd_scene load_steps=6 format=2] - -[ext_resource path="res://bullets/scenes/Laser.tscn" type="PackedScene" id=1] -[ext_resource path="res://sprites/smallparticle.png" type="Texture" id=2] - -[sub_resource type="CanvasItemMaterial" id=17] - -[sub_resource type="SpriteFrames" id=18] -animations = [ { -"frames": [ ExtResource( 2 ) ], -"loop": true, -"name": "default", -"speed": 5.0 -} ] - -[sub_resource type="RectangleShape2D" id=16] -resource_local_to_scene = true -extents = Vector2( 1, 1 ) - -[node name="Flak" instance=ExtResource( 1 )] -mass = 30.0 -linear_velocity = Vector2( 15, 0 ) -spreadmaxneg = -40 -spreadmaxpos = 40 -scalingrand = true -maxscalingrand = 3 -initial_velocity = 50 -scale_glow = false - -[node name="Laser" parent="." index="0"] -self_modulate = Color( 1, 1, 1, 0.811765 ) -material = SubResource( 17 ) -frames = SubResource( 18 ) - -[node name="Collision" parent="." index="1"] -position = Vector2( 0, 0 ) -shape = SubResource( 16 ) - -[node name="VisibilityNotifier2D" parent="." index="2"] -visible = false - -[node name="Timer2" parent="." index="5"] -wait_time = 2.0 -one_shot = true -autostart = true - -[connection signal="timeout" from="Timer2" to="." method="queue_free"] diff --git a/bullets/scenes/Laser.tscn b/bullets/scenes/Laser.tscn deleted file mode 100644 index c8efd0d..0000000 --- a/bullets/scenes/Laser.tscn +++ /dev/null @@ -1,149 +0,0 @@ -[gd_scene load_steps=22 format=2] - -[ext_resource path="res://sounds/Laser.wav" type="AudioStream" id=2] -[ext_resource path="res://sprites/Laser-Sheet.png" type="Texture" id=3] -[ext_resource path="res://sprites/smallparticle.png" type="Texture" id=4] -[ext_resource path="res://sprites/PlayerMissle.png" type="Texture" id=5] -[ext_resource path="res://bullets/scripts/Laser.gd" type="Script" id=6] -[ext_resource path="res://sprites/spot.png" type="Texture" id=7] - -[sub_resource type="AtlasTexture" id=20] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 0, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=21] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 16, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=22] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 32, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=23] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 48, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=24] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 64, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=25] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 80, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=26] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 96, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=27] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 112, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=28] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 128, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=29] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 144, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=30] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 160, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=31] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 176, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=32] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 192, 0, 16, 16 ) - -[sub_resource type="SpriteFrames" id=15] -resource_local_to_scene = true -animations = [ { -"frames": [ ExtResource( 5 ) ], -"loop": true, -"name": "New Anim", -"speed": 5.0 -}, { -"frames": [ ExtResource( 4 ) ], -"loop": true, -"name": "New Anim 1", -"speed": 5.0 -}, { -"frames": [ SubResource( 20 ), SubResource( 21 ), SubResource( 22 ), SubResource( 23 ), SubResource( 24 ), SubResource( 25 ), SubResource( 26 ), SubResource( 27 ), SubResource( 28 ), SubResource( 29 ), SubResource( 30 ), SubResource( 31 ), SubResource( 32 ) ], -"loop": true, -"name": "default", -"speed": 20.0 -} ] - -[sub_resource type="CapsuleShape2D" id=34] -radius = 5.0 -height = 5.0 - -[node name="Laser" type="RigidBody2D" groups=["pbullet"]] -show_behind_parent = true -light_mask = 32769 -position = Vector2( 0, 1 ) -collision_layer = 32768 -collision_mask = 130 -mass = 5.0 -gravity_scale = 0.0 -linear_damp = 0.0 -angular_damp = 0.0 -script = ExtResource( 6 ) -spreadmaxneg = -3 -spreadmaxpos = 3 -initial_velocity = 400 -trail_rare = false -rarity_max = 2 -modulate_glow = true - -[node name="Laser" type="AnimatedSprite" parent="."] -unique_name_in_owner = true -frames = SubResource( 15 ) - -[node name="Collision" type="CollisionShape2D" parent="."] -position = Vector2( 0.5, 0 ) -shape = SubResource( 34 ) - -[node name="VisibilityNotifier2D" type="VisibilityNotifier2D" parent="."] -position = Vector2( -1.19209e-07, 2.98023e-08 ) -scale = Vector2( 0.2, 0.2 ) - -[node name="LaserSound" type="AudioStreamPlayer" parent="."] -unique_name_in_owner = true -stream = ExtResource( 2 ) -volume_db = -20.0 -autoplay = true - -[node name="Timer" type="Timer" parent="."] - -[node name="Timer2" type="Timer" parent="."] - -[node name="Light" type="Light2D" parent="."] -unique_name_in_owner = true -scale = Vector2( 0.5, 0.5 ) -texture = ExtResource( 7 ) -color = Color( 0, 0.6, 1, 0.733333 ) -energy = 2.0 -shadow_enabled = true -shadow_buffer_size = 1024 -shadow_filter = 2 -shadow_filter_smooth = 2.0 - -[connection signal="screen_exited" from="VisibilityNotifier2D" to="." method="_on_VisibilityNotifier2D_screen_exited"] diff --git a/bullets/scenes/SplitShot.tscn b/bullets/scenes/SplitShot.tscn deleted file mode 100644 index d7648c6..0000000 --- a/bullets/scenes/SplitShot.tscn +++ /dev/null @@ -1,101 +0,0 @@ -[gd_scene load_steps=18 format=2] - -[ext_resource path="res://bullets/scenes/Laser.tscn" type="PackedScene" id=1] -[ext_resource path="res://sprites/Laser-Sheet.png" type="Texture" id=3] - -[sub_resource type="AtlasTexture" id=17] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 0, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=18] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 16, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=19] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 32, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=20] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 48, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=21] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 64, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=22] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 80, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=23] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 96, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=24] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 112, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=25] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 128, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=26] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 144, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=27] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 160, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=28] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 176, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=29] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 192, 0, 16, 16 ) - -[sub_resource type="SpriteFrames" id=15] -resource_local_to_scene = true -animations = [ { -"frames": [ SubResource( 17 ), SubResource( 18 ), SubResource( 19 ), SubResource( 20 ), SubResource( 21 ), SubResource( 22 ), SubResource( 23 ), SubResource( 24 ), SubResource( 25 ), SubResource( 26 ), SubResource( 27 ), SubResource( 28 ), SubResource( 29 ) ], -"loop": true, -"name": "New Anim", -"speed": 5.0 -} ] - -[sub_resource type="RectangleShape2D" id=16] -resource_local_to_scene = true -extents = Vector2( 4.5, 4 ) - -[node name="Split" instance=ExtResource( 1 )] -mass = 1.0 -linear_velocity = Vector2( 30, 0 ) -spreadmaxneg = -20 -spreadmaxpos = 20 -initial_velocity = 150 -rarity_max = 10 -modulate_amount = 0.1 -modulate_glow = true - -[node name="Laser" parent="." index="0"] -position = Vector2( -37, -4 ) -frames = SubResource( 15 ) -animation = "New Anim" -offset = Vector2( 37, 4 ) - -[node name="Collision" parent="." index="1"] -shape = SubResource( 16 ) diff --git a/bullets/scenes/missile.tscn b/bullets/scenes/missile.tscn deleted file mode 100644 index 04138ee..0000000 --- a/bullets/scenes/missile.tscn +++ /dev/null @@ -1,65 +0,0 @@ -[gd_scene load_steps=8 format=2] - -[ext_resource path="res://sounds/missile.wav" type="AudioStream" id=2] -[ext_resource path="res://effects/Trail.tscn" type="PackedScene" id=3] -[ext_resource path="res://sprites/PlayerMissle.png" type="Texture" id=4] -[ext_resource path="res://bullets/scripts/missile.gd" type="Script" id=5] -[ext_resource path="res://sprites/spot.png" type="Texture" id=6] - -[sub_resource type="CapsuleShape2D" id=3] -radius = 6.0 -height = 6.0 - -[sub_resource type="CanvasItemMaterial" id=2] -blend_mode = 1 - -[node name="missile" type="RigidBody2D"] -collision_layer = 32768 -collision_mask = 130 -mass = 80.0 -gravity_scale = 0.0 -script = ExtResource( 5 ) -TERMINAL_VELOCITY = 200.0 -CONSTANT_THRUST = 100.0 -TURN_STRENGTH = 75.0 - -[node name="Trail" parent="." instance=ExtResource( 3 )] -position = Vector2( -5, 0 ) -THICKNESS = 3.0 - -[node name="CollisionPolygon2D" type="CollisionShape2D" parent="."] -rotation = 1.5708 -scale = Vector2( 1, -1 ) -shape = SubResource( 3 ) - -[node name="LaserSound" type="AudioStreamPlayer" parent="."] -stream = ExtResource( 2 ) -volume_db = -20.0 -autoplay = true - -[node name="Sprite" type="Sprite" parent="."] -texture = ExtResource( 4 ) - -[node name="Timer" type="Timer" parent="."] -wait_time = 20.0 -one_shot = true -autostart = true - -[node name="VisibilityNotifier2D" type="VisibilityNotifier2D" parent="."] -position = Vector2( 0.5, -8.9407e-08 ) -scale = Vector2( 0.35, 0.3 ) - -[node name="Light" type="Light2D" parent="."] -material = SubResource( 2 ) -scale = Vector2( 0.5, 0.5 ) -texture = ExtResource( 6 ) -texture_scale = 2.0 -color = Color( 0.145098, 0.658824, 1, 1 ) -energy = 2.0 -shadow_enabled = true -shadow_gradient_length = 3.0 -shadow_filter = 2 -shadow_filter_smooth = 5.0 - -[connection signal="timeout" from="Timer" to="." method="queue_free"] -[connection signal="screen_exited" from="VisibilityNotifier2D" to="." method="_on_VisibilityNotifier2D_screen_exited"] diff --git a/bullets/scripts/EnemyLaser.gd b/bullets/scripts/EnemyLaser.gd deleted file mode 100644 index 01c24c5..0000000 --- a/bullets/scripts/EnemyLaser.gd +++ /dev/null @@ -1,17 +0,0 @@ -extends RigidBody2D - -const HitEffect = preload("res://effects/HitEffect.tscn") - - -func _ready(): - randomize() - var animatedSprite = $AnimatedSprite - animatedSprite.frame = rand_range(0, 13) - - -func create_hit_effect(): - Game.instance_scene_on_main(HitEffect, global_position) - - -func _on_VisibilityNotifier2D_screen_exited(): - queue_free() diff --git a/bullets/scripts/Laser.gd b/bullets/scripts/Laser.gd deleted file mode 100644 index 96dc24a..0000000 --- a/bullets/scripts/Laser.gd +++ /dev/null @@ -1,93 +0,0 @@ -extends RigidBody2D -class_name Bullet - -export var spreadmaxneg: int -export var spreadmaxpos: int -export var scalingrand = false -export var minscalingrand = 1 -export var maxscalingrand = 1 -export var initial_velocity = 150 -export var particles = false -export var trail = false -export var trail_rare = true -export var rarity_min = 1 -export var rarity_max = 5 -export var scale_glow = true -export var modulate_amount = .2 -export var modulate_glow = false - -var powered_up = false - -const HitEffect = preload("res://effects/HitEffect.tscn") -const Trail = preload("res://effects/Trail.tscn") -var choosing = 0 - -onready var light = $"%Light" -onready var anims: AnimatedSprite = $"%Laser" -onready var laser_sound: AudioStreamPlayer = $"%LaserSound" - - -func _ready(): - set_lights(ProjectSettings.get_setting("global/bullet_lights")) - yield(get_tree(), "idle_frame") - visible = true - var direction = Vector2(initial_velocity, rand_range(spreadmaxneg, spreadmaxpos)) - apply_impulse(Vector2.ZERO, direction) - rotation = direction.angle() - - randomize() - laser_sound.pitch_scale = randf() + 0.4 - #warning-ignore: narrowing_conversion - anims.frame = rand_range(0, 13) - - laser_sound.play() - anims.play() - - if powered_up: - scalingrand = true - - if scalingrand: - var rand = rand_range(minscalingrand, maxscalingrand) - var to_scale = Vector2(rand, rand) - if powered_up: - to_scale += Vector2(1.5, 1.5) - anims.scale = to_scale - $Collision.scale = to_scale - if scale_glow: - light.texture_scale += to_scale.x / 3 - if trail: - if trail_rare: - var chance = rand_range(rarity_min, rarity_max) - chance = round(chance) - if chance == 1: - var trailinstance = Trail.instance() - add_child(trailinstance) - if powered_up: - var rand = rand_range(minscalingrand, maxscalingrand) - trailinstance.THICKNESS = rand * 2 - else: - var trailinstance = Trail.instance() - add_child(trailinstance) - if powered_up: - var rand = rand_range(minscalingrand, maxscalingrand) - trailinstance.THICKNESS = rand * 2 - - -func create_hit_effect(): - Game.instance_scene_on_main(HitEffect, global_position) - - -func _on_VisibilityNotifier2D_screen_exited(): - queue_free() - - -func _physics_process(delta): - light.color.a -= modulate_amount * delta - if light.color.a < 0: - light.enabled = false - set_physics_process(false) - - -func set_lights(enabled: bool) -> void: - light.enabled = enabled - set_physics_process(enabled) diff --git a/bullets/scripts/missile.gd b/bullets/scripts/missile.gd deleted file mode 100644 index a65a99f..0000000 --- a/bullets/scripts/missile.gd +++ /dev/null @@ -1,73 +0,0 @@ -extends RigidBody2D - -export(float) var TERMINAL_VELOCITY := 300.0 -export(float) var CONSTANT_THRUST := 200.0 -export(float) var TURN_STRENGTH := 15.0 -var off_screen = false -onready var target_last_position -var TARGET -var powered_up - - -func start(_target): - $Light.visible = ProjectSettings.get_setting("global/bullet_lights") - TARGET = _target - if is_instance_valid(TARGET): - target_last_position = TARGET.global_position - else: - linear_velocity.x = CONSTANT_THRUST - - -func _physics_process(delta: float) -> void: - if is_instance_valid(TARGET): - var target_position = TARGET.global_position + (TARGET.global_position - target_last_position) / delta - target_last_position = TARGET.global_position - var direction: Vector2 = global_position.direction_to(target_position - linear_velocity) - var attenuate_turning: float = global_transform.y.dot(direction.rotated(angular_velocity * delta)) - apply_torque_impulse(TURN_STRENGTH * attenuate_turning) - var apply_thrust := Vector2() - if linear_velocity.length() < TERMINAL_VELOCITY: - var attenuate_thrust: float = clamp(global_transform.x.dot(direction), 0, 1) - apply_thrust = global_transform.x * CONSTANT_THRUST * attenuate_thrust - apply_central_impulse(apply_thrust) - - -const ExplosionEffect = preload("res://effects/ExplosionEffect.tscn") -const HitEffect = preload("res://effects/HitEffect.tscn") - - -func create_hit_effect(): - Game.instance_scene_on_main(HitEffect, global_position) - - -func create_explosion(): - Game.instance_scene_on_main(ExplosionEffect, global_position) - - -func _exit_tree(): - if not off_screen: - create_explosion() - - -func _on_VisibilityNotifier2D_screen_exited(): - if randi() % 6 != 5: - off_screen = true - queue_free() - - -func _ready(): - $LaserSound.pitch_scale = randf() + 0.4 - var minscalingrand = 1 - var maxscalingrand = 1 - if powered_up: - CONSTANT_THRUST -= 20 - TURN_STRENGTH += 20 - minscalingrand += 1 - maxscalingrand += 2 - var rand = rand_range(minscalingrand, maxscalingrand) - var to_scale = Vector2(rand, rand) - $Sprite.scale = to_scale - $Light.texture_scale = to_scale.x - $CollisionPolygon2D.scale = to_scale - if powered_up: - $Trail.THICKNESS += rand * 2 diff --git a/effects/ExplosionEffect.tscn b/effects/ExplosionEffect.tscn deleted file mode 100644 index 28c3126..0000000 --- a/effects/ExplosionEffect.tscn +++ /dev/null @@ -1,63 +0,0 @@ -[gd_scene load_steps=5 format=2] - -[ext_resource path="res://sprites/Explosion.png" type="Texture" id=1] -[ext_resource path="res://sounds/Explode.wav" type="AudioStream" id=2] - -[sub_resource type="Animation" id=1] -resource_name = "Explode" -length = 0.5 -tracks/0/type = "value" -tracks/0/path = NodePath(".:frame") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4 ), -"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), -"update": 1, -"values": [ 0, 1, 2, 3, 4 ] -} -tracks/1/type = "method" -tracks/1/path = NodePath(".") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/keys = { -"times": PoolRealArray( 0.5 ), -"transitions": PoolRealArray( 1 ), -"values": [ { -"args": [ ], -"method": "queue_free" -} ] -} - -[sub_resource type="Animation" id=2] -length = 0.001 -tracks/0/type = "value" -tracks/0/path = NodePath(".:frame") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 0, -"values": [ 0 ] -} - -[node name="ExplosionEffect" type="Sprite"] -texture = ExtResource( 1 ) -hframes = 6 - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -autoplay = "Explode" -anims/Explode = SubResource( 1 ) -anims/RESET = SubResource( 2 ) - -[node name="ExplodeSound" type="AudioStreamPlayer" parent="."] -stream = ExtResource( 2 ) -volume_db = -30.0 -autoplay = true diff --git a/effects/Fire.tscn b/effects/Fire.tscn deleted file mode 100644 index c658fc5..0000000 --- a/effects/Fire.tscn +++ /dev/null @@ -1,41 +0,0 @@ -[gd_scene load_steps=4 format=2] - -[ext_resource path="res://sprites/Flame.png" type="Texture" id=1] - -[sub_resource type="CanvasItemMaterial" id=1] -blend_mode = 1 - -[sub_resource type="Gradient" id=2] -offsets = PoolRealArray( 0, 0.345745, 0.670213, 0.87234, 0.93617 ) -colors = PoolColorArray( 1, 0.831373, 0, 0.317647, 1, 0.356863, 0, 0.388235, 0, 0.431373, 1, 0.207843, 0.341176, 0.623529, 0.996078, 0.392157, 1, 1, 1, 0 ) - -[node name="Fire" type="CPUParticles2D"] -material = SubResource( 1 ) -amount = 64 -lifetime = 0.7 -explosiveness = 0.05 -randomness = 0.2 -lifetime_randomness = 0.1 -local_coords = false -texture = ExtResource( 1 ) -emission_shape = 2 -emission_rect_extents = Vector2( 0, 2 ) -direction = Vector2( -1, 0 ) -spread = 25.0 -gravity = Vector2( 0, 0 ) -initial_velocity = 40.0 -initial_velocity_random = 0.1 -angular_velocity = 100.0 -angular_velocity_random = 1.0 -linear_accel = 5.0 -radial_accel = 60.0 -radial_accel_random = 1.0 -angle = 720.0 -angle_random = 1.0 -scale_amount = 1.5 -scale_amount_random = 0.41 -color = Color( 0.776471, 0.776471, 0.776471, 1 ) -color_ramp = SubResource( 2 ) -__meta__ = { -"_editor_description_": "" -} diff --git a/effects/Game.gd b/effects/Game.gd deleted file mode 100644 index 37b9b67..0000000 --- a/effects/Game.gd +++ /dev/null @@ -1,78 +0,0 @@ -extends Node2D - -signal transition_halfway -var just_called = false -var keyboard = true setget set_keyboard -var USE_TOUCH = OS.has_touchscreen_ui_hint() - - -func halfway(): - emit_signal("transition_halfway") - - -func exit(): - get_tree().quit() - - -func transition(to = null): - if just_called == false: - just_called = true - get_tree().paused = true - $transitionAnimation.stop(true) - $transitionAnimation.play("fadeinout") - if to: - get_tree().change_scene(to) - yield(self, "transition_halfway") - set_input_prompts() - get_tree().paused = false - just_called = false - - -func _ready(): - set_input_prompts() - set_process_input(not USE_TOUCH) - - -func turn_off(): - get_tree().call_group("keyboard", "hide") - get_tree().call_group("gamepad", "hide") - get_tree().call_group("not_mobile", "hide") - - -func _input(event: InputEvent) -> void: - if event is InputEventJoypadButton or event is InputEventJoypadMotion and keyboard == true: - self.keyboard = false - elif event is InputEventKey and keyboard == false: - self.keyboard = true - - -func set_keyboard(new_keyboard): - keyboard = new_keyboard - set_input_prompts() - - -func set_input_prompts(): - if USE_TOUCH: - get_tree().call_group("not_mobile", "hide") - get_tree().call_group("mobile", "show") - get_tree().call_group("keyboard", "hide") - get_tree().call_group("gamepad", "hide") - elif keyboard == true: - get_tree().call_group("not_mobile", "show") - get_tree().call_group("gamepad", "hide") - get_tree().call_group("mobile", "hide") - get_tree().call_group("keyboard", "show") - elif keyboard == false: - get_tree().call_group("not_mobile", "show") - get_tree().call_group("keyboard", "hide") - get_tree().call_group("mobile", "hide") - get_tree().call_group("gamepad", "show") - - -func instance_scene_on_main(scene, position): - var main = get_tree().current_scene - var instance = scene.instance() - main.call_deferred("add_child", instance) -# main.add_child(instance) - instance.global_position = position - return instance diff --git a/effects/Game.tscn b/effects/Game.tscn deleted file mode 100644 index 1292e87..0000000 --- a/effects/Game.tscn +++ /dev/null @@ -1,70 +0,0 @@ -[gd_scene load_steps=5 format=2] - -[ext_resource path="res://sprites/transition_left.png" type="Texture" id=1] -[ext_resource path="res://effects/Game.gd" type="Script" id=2] -[ext_resource path="res://sprites/transition_right.png" type="Texture" id=3] - -[sub_resource type="Animation" id=3] -resource_name = "fadeinout" -length = 2.0 -tracks/0/type = "method" -tracks/0/path = NodePath(".") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 1 ), -"transitions": PoolRealArray( 1 ), -"values": [ { -"args": [ ], -"method": "halfway" -} ] -} -tracks/1/type = "value" -tracks/1/path = NodePath("transition/TransitionRight:position") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/keys = { -"times": PoolRealArray( 0, 1, 2 ), -"transitions": PoolRealArray( 1, 1, 1 ), -"update": 0, -"values": [ Vector2( 320, 0 ), Vector2( 119, 0 ), Vector2( 320, 0 ) ] -} -tracks/2/type = "value" -tracks/2/path = NodePath("transition/TransitionLeft:position") -tracks/2/interp = 1 -tracks/2/loop_wrap = true -tracks/2/imported = false -tracks/2/enabled = true -tracks/2/keys = { -"times": PoolRealArray( 0, 1, 2 ), -"transitions": PoolRealArray( 1, 1, 1 ), -"update": 0, -"values": [ Vector2( -251, 0 ), Vector2( 0, 0 ), Vector2( -251, 0 ) ] -} - -[node name="Game" type="Node2D"] -pause_mode = 2 -script = ExtResource( 2 ) - -[node name="transition" type="CanvasLayer" parent="."] -layer = 10 - -[node name="TransitionLeft" type="Sprite" parent="transition"] -position = Vector2( -251, 0 ) -scale = Vector2( 1.32963, 1.32963 ) -texture = ExtResource( 1 ) -centered = false - -[node name="TransitionRight" type="Sprite" parent="transition"] -position = Vector2( 320, 0 ) -scale = Vector2( 1.32963, 1.32963 ) -texture = ExtResource( 3 ) -centered = false - -[node name="transitionAnimation" type="AnimationPlayer" parent="."] -playback_speed = 2.0 -anims/fadeinout = SubResource( 3 ) diff --git a/effects/Glitch.gd b/effects/Glitch.gd deleted file mode 100644 index fa9d6c1..0000000 --- a/effects/Glitch.gd +++ /dev/null @@ -1,9 +0,0 @@ -extends CanvasLayer - - -func apply(length, off = 1): - $shaderholder.visible = true - $shaderholder.get_material().set_shader_param("offset", off) - yield(get_tree().create_timer(length), "timeout") - $shaderholder.visible = false - $shaderholder.get_material().set_shader_param("offset", 1) diff --git a/effects/Glitch.tscn b/effects/Glitch.tscn deleted file mode 100644 index 84626b5..0000000 --- a/effects/Glitch.tscn +++ /dev/null @@ -1,22 +0,0 @@ -[gd_scene load_steps=4 format=2] - -[ext_resource path="res://effects/glitch.tres" type="Shader" id=1] -[ext_resource path="res://effects/Glitch.gd" type="Script" id=3] - -[sub_resource type="ShaderMaterial" id=1] -shader = ExtResource( 1 ) -shader_param/apply = false -shader_param/offset = 1.0 - -[node name="Glitch" type="CanvasLayer"] -layer = 8 -script = ExtResource( 3 ) - -[node name="shaderholder" type="ColorRect" parent="."] -visible = false -material = SubResource( 1 ) -anchor_right = 1.0 -anchor_bottom = 1.0 -__meta__ = { -"_edit_use_anchors_": false -} diff --git a/effects/HitEffect.tscn b/effects/HitEffect.tscn deleted file mode 100644 index c755452..0000000 --- a/effects/HitEffect.tscn +++ /dev/null @@ -1,55 +0,0 @@ -[gd_scene load_steps=3 format=2] - -[ext_resource path="res://sounds/Hit.wav" type="AudioStream" id=1] - -[sub_resource type="Animation" id=2] -resource_name = "Hit" -length = 0.6 -tracks/0/type = "value" -tracks/0/path = NodePath("Particles2D:emitting") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ true ] -} -tracks/1/type = "method" -tracks/1/path = NodePath(".") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/keys = { -"times": PoolRealArray( 0.6 ), -"transitions": PoolRealArray( 1 ), -"values": [ { -"args": [ ], -"method": "queue_free" -} ] -} - -[node name="HitEffect" type="Node2D"] - -[node name="HitSound" type="AudioStreamPlayer" parent="."] -stream = ExtResource( 1 ) -volume_db = -30.0 -autoplay = true - -[node name="Particles2D" type="CPUParticles2D" parent="."] -scale = Vector2( 2, 2 ) -emitting = false -amount = 3 -lifetime = 0.5 -one_shot = true -explosiveness = 1.0 -gravity = Vector2( 0, 0 ) -initial_velocity = 60.0 -initial_velocity_random = 0.75 - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -autoplay = "Hit" -anims/Hit = SubResource( 2 ) diff --git a/effects/Stars.tscn b/effects/Stars.tscn deleted file mode 100644 index a93db49..0000000 --- a/effects/Stars.tscn +++ /dev/null @@ -1,15 +0,0 @@ -[gd_scene format=2] - -[node name="Stars" type="CPUParticles2D"] -pause_mode = 2 -position = Vector2( 320, 90 ) -amount = 100 -lifetime = 6.0 -preprocess = 6.5 -emission_shape = 2 -emission_rect_extents = Vector2( 1, 90 ) -spread = 0.0 -gravity = Vector2( 0, 0 ) -initial_velocity = -100.0 -initial_velocity_random = 0.5 -scale_amount_random = 0.5 diff --git a/effects/Trail.gd b/effects/Trail.gd deleted file mode 100644 index 8cf9cd3..0000000 --- a/effects/Trail.gd +++ /dev/null @@ -1,36 +0,0 @@ -extends Node2D - -export var MAX_LENGTH = 20 -export var THICKNESS = 2.0 - -var points = [] -var frame = 0 - - -func _physics_process(_delta): - if frame % 3 == 0: - points.push_front(global_position) - if points.size() > MAX_LENGTH: - points.pop_back() - - frame += 1 - update() - - -func _draw(): - if points.size() < 2: - return - - var antialias = false - var c = modulate - var s = float(points.size()) - var adjusted = PoolVector2Array() - var colors = PoolColorArray() - - for i in range(s): - adjusted.append(points[i] - global_position) - c.a = lerp(1.0, 0.0, i / s) - colors.append(c) - - draw_set_transform(Vector2.ZERO, -get_parent().rotation, Vector2(1, 1)) - draw_polyline_colors(adjusted, colors, THICKNESS, antialias) diff --git a/effects/Trail.tscn b/effects/Trail.tscn deleted file mode 100644 index aaf78af..0000000 --- a/effects/Trail.tscn +++ /dev/null @@ -1,7 +0,0 @@ -[gd_scene load_steps=2 format=2] - -[ext_resource path="res://effects/Trail.gd" type="Script" id=1] - -[node name="Trail" type="Node2D"] -show_behind_parent = true -script = ExtResource( 1 ) diff --git a/effects/glitch.tres b/effects/glitch.tres deleted file mode 100644 index 0062913..0000000 --- a/effects/glitch.tres +++ /dev/null @@ -1,14 +0,0 @@ -[gd_resource type="Shader" format=2] - -[resource] -code = "shader_type canvas_item; - -uniform bool apply = false; -uniform float offset = 1.; - -void fragment(){ - vec4 green_channel = texture(SCREEN_TEXTURE, SCREEN_UV); - vec4 red_channel = texture(SCREEN_TEXTURE, vec2(SCREEN_UV.x + (offset * SCREEN_PIXEL_SIZE.x), SCREEN_UV.y)); - vec4 blue_channel = texture(SCREEN_TEXTURE, vec2(SCREEN_UV.x - (offset * SCREEN_PIXEL_SIZE.x), SCREEN_UV.y)); - COLOR = vec4(red_channel.r, green_channel.g, blue_channel.b, 1.); -}" diff --git a/effects/greyscale.gdshader b/effects/greyscale.gdshader deleted file mode 100644 index cda5892..0000000 --- a/effects/greyscale.gdshader +++ /dev/null @@ -1,7 +0,0 @@ -shader_type canvas_item; - -void fragment(){ - vec4 bg = texture(SCREEN_TEXTURE, SCREEN_UV); - float avg = (bg.r + bg.g + bg.b) / 3f; - COLOR = vec4(avg, avg, avg, 1f); -}
\ No newline at end of file diff --git a/effects/shake.gd b/effects/shake.gd deleted file mode 100644 index 7474674..0000000 --- a/effects/shake.gd +++ /dev/null @@ -1,140 +0,0 @@ -extends Node - -var camera_shake_intensity = 0.0 -var camera_shake_duration = 0.0 - -enum Type { Random, Sine, Noise } -var camera_shake_type = Type.Random - -var noise: OpenSimplexNoise - - -func _ready(): - set_process(false) - # Generate noise for noise shake - # - # This is only generated once when the game starts - # and then read over and over again - # - # These parameters change the shape of the noise - # and the feel of the shake6 - noise = OpenSimplexNoise.new() - noise.seed = randi() - noise.octaves = 4 - noise.period = 20 - noise.persistence = 0.8 - - -func shake(intensity, duration, type = Type.Random): - # Set the shake parameters - # - # A good idea here is to add configuration settings that - # allow the player to turn off shake - # - # if player_no_want: - # intensity = 0 - - if intensity > camera_shake_intensity and duration > camera_shake_duration: - camera_shake_intensity = intensity - camera_shake_duration = duration - camera_shake_type = type - set_process(true) - - -func _process(delta): - # Get the camera - # - # You'll need to adjust this depending on how you want to - # keep track of the active camera in your game - # - # Maybe your game has two cameras, maybe it has 10, who knows? - # Do what you like - var camera = get_tree().current_scene.get_node("Camera2D") - # Stop shaking if the camera_shake_duration timer is down to zero - if camera_shake_duration <= 0: - # Reset the camera when the shaking is done - camera.offset = Vector2.ZERO - camera_shake_intensity = 0.0 - camera_shake_duration = 0.0 - set_process(false) - return - - # Subtract the elapsed time from the camera_shake_duration - # so that it eventually ends - # - # You can do other fun stuff here too like have the intensity - # decay gradually so that the shake tapers off - - # Shake it - - # Random shake - # Chaos - # Madness - # - # Personally, I like this best because players don't notice - # any difference in the thick of battle when the shakes are short - # and because it's dead simple. - - # Sine wave based shake - # - # Play around with the magic numbers to adjust the feel - # - # Basing the sine wave off of get_ticks_msec ensures that - # the returned value is continuous and smooth - - # Noise based shake - # - # Accessing the noise based on get_ticks_msec ensures that - # the returned value is continuous and smooth - camera_shake_duration = camera_shake_duration - delta - - # Shake it - var offset = Vector2.ZERO - - if camera_shake_type == Type.Random: - # Random shake - # Chaos - # Madness - # - # Personally, I like this best because players don't notice - # any difference in the thick of battle when the shakes are short - # and because it's dead simple. - offset = Vector2(randf(), randf()) * camera_shake_intensity - - # Sine wave based shake - # - # Play around with the magic numbers to adjust the feel - # - # Basing the sine wave off of get_ticks_msec ensures that - # the returned value is continuous and smooth - - # Noise based shake - # - # Accessing the noise based on get_ticks_msec ensures that - # the returned value is continuous and smooth - if camera_shake_type == Type.Sine: - # Sine wave based shake - # - # Play around with the magic numbers to adjust the feel - # - # Basing the sine wave off of get_ticks_msec ensures that - # the returned value is continuous and smooth - offset = ( - Vector2(sin(OS.get_ticks_msec() * 0.03), sin(OS.get_ticks_msec() * 0.07)) - * camera_shake_intensity - * 0.5 - ) - - # Noise based shake - # - # Accessing the noise based on get_ticks_msec ensures that - # the returned value is continuous and smooth - if camera_shake_type == Type.Noise: - # Noise based shake - # - # Accessing the noise based on get_ticks_msec ensures that - # the returned value is continuous and smooth - var noise_value_x = noise.get_noise_1d(OS.get_ticks_msec() * 0.1) - var noise_value_y = noise.get_noise_1d(OS.get_ticks_msec() * 0.1 + 100.0) - offset = Vector2(noise_value_x, noise_value_y) * camera_shake_intensity * 2.0 - camera.offset = offset diff --git a/enemy/scenes/Boss.tscn b/enemy/scenes/Boss.tscn deleted file mode 100644 index 8850ab3..0000000 --- a/enemy/scenes/Boss.tscn +++ /dev/null @@ -1,28 +0,0 @@ -[gd_scene load_steps=4 format=2] - -[ext_resource path="res://enemy/scenes/Enemy.tscn" type="PackedScene" id=1] -[ext_resource path="res://enemy/scripts/Boss.gd" type="Script" id=2] - -[sub_resource type="RectangleShape2D" id=1] -resource_local_to_scene = true -extents = Vector2( 4.5, 4.5 ) - -[node name="squid" instance=ExtResource( 1 )] -script = ExtResource( 2 ) -drop_power_up = true -ARMOR = 75 -score_on_kill = 200 -SPEED = 10 -shootspeed = 0.2 -stop_pos = Vector2( 100, 0 ) - -[node name="Sprite" parent="." index="0"] -rotation = 1.5708 -animation = "New Anim 2" - -[node name="CollisionShape2D" parent="." index="1"] -position = Vector2( -0.5, 0 ) -shape = SubResource( 1 ) - -[node name="Timer" parent="." index="3"] -wait_time = 2.0 diff --git a/enemy/scenes/Boss2.tscn b/enemy/scenes/Boss2.tscn deleted file mode 100644 index 3c4612c..0000000 --- a/enemy/scenes/Boss2.tscn +++ /dev/null @@ -1,24 +0,0 @@ -[gd_scene load_steps=4 format=2] - -[ext_resource path="res://enemy/scenes/Enemy.tscn" type="PackedScene" id=1] -[ext_resource path="res://bullets/scenes/Fireball.tscn" type="PackedScene" id=2] - -[sub_resource type="RectangleShape2D" id=1] -resource_local_to_scene = true -extents = Vector2( 8, 9 ) - -[node name="bigboi" instance=ExtResource( 1 )] -drop_power_up = true -ARMOR = 300 -score_on_kill = 400 -Laser = ExtResource( 2 ) -SPEED = 5 -shootspeed = 1.0 -stop_pos = Vector2( 300, 0 ) - -[node name="Sprite" parent="." index="0"] -rotation = 1.5708 -animation = "New Anim 3" - -[node name="CollisionShape2D" parent="." index="1"] -shape = SubResource( 1 ) diff --git a/enemy/scenes/Difficulty Scaling.tscn b/enemy/scenes/Difficulty Scaling.tscn deleted file mode 100644 index 3615297..0000000 --- a/enemy/scenes/Difficulty Scaling.tscn +++ /dev/null @@ -1,78 +0,0 @@ -[gd_scene load_steps=8 format=2] - -[ext_resource path="res://enemy/scenes/EasyEnemy.tscn" type="PackedScene" id=1] -[ext_resource path="res://enemy/scenes/Enemy.tscn" type="PackedScene" id=2] -[ext_resource path="res://enemy/scenes/HardEnemy.tscn" type="PackedScene" id=3] -[ext_resource path="res://enemy/scenes/Boss.tscn" type="PackedScene" id=5] -[ext_resource path="res://enemy/scenes/UFO.tscn" type="PackedScene" id=7] -[ext_resource path="res://enemy/scenes/Boss2.tscn" type="PackedScene" id=8] -[ext_resource path="res://enemy/scenes/FInalBOss.tscn" type="PackedScene" id=9] - -[node name="Difficulty Scaling" type="Node2D"] - -[node name="Difficulty_Easy" type="Node2D" parent="."] - -[node name="octopus" parent="Difficulty_Easy" instance=ExtResource( 1 )] -stop_pos = Vector2( 200, 0 ) - -[node name="Difficulty_Medium" type="Node2D" parent="."] - -[node name="basicdude" parent="Difficulty_Medium" instance=ExtResource( 2 )] - -[node name="octopus" parent="Difficulty_Medium" instance=ExtResource( 1 )] -stop_pos = Vector2( 200, 0 ) - -[node name="Difficulty_Hard" type="Node2D" parent="."] - -[node name="basicdude" parent="Difficulty_Hard" instance=ExtResource( 2 )] - -[node name="hardenemy" parent="Difficulty_Hard" instance=ExtResource( 3 )] -stop_pos = Vector2( 200, 0 ) - -[node name="ufo" parent="Difficulty_Hard" instance=ExtResource( 7 )] -stop_pos = Vector2( 200, 0 ) - -[node name="Difficulty_Boss" type="Node2D" parent="."] - -[node name="squid" parent="Difficulty_Boss" instance=ExtResource( 5 )] -stop_pos = Vector2( 200, 0 ) - -[node name="Difficulty_Impossible" type="Node2D" parent="."] - -[node name="squid" parent="Difficulty_Impossible" instance=ExtResource( 5 )] -stop_pos = Vector2( 200, 0 ) - -[node name="basicdudestronkened" parent="Difficulty_Impossible" instance=ExtResource( 2 )] -ARMOR = 50 -score_on_kill = 30 -shootspeed = 1.2 -stop_pos = Vector2( 200, 0 ) - -[node name="stronkenedufo" parent="Difficulty_Impossible" instance=ExtResource( 7 )] -ARMOR = 50 -score_on_kill = 150 -shootspeed = 4.0 -stop_pos = Vector2( 190, 0 ) - -[node name="Congrats_you beat the game now die" type="Node2D" parent="."] - -[node name="bigboi" parent="Congrats_you beat the game now die" instance=ExtResource( 8 )] -stop_pos = Vector2( 200, 0 ) - -[node name="fuckyou" type="Node2D" parent="."] - -[node name="bigboi" parent="fuckyou" instance=ExtResource( 8 )] -stop_pos = Vector2( 200, 0 ) - -[node name="squid" parent="fuckyou" instance=ExtResource( 5 )] -stop_pos = Vector2( 200, 0 ) - -[node name="LAST BOSS EVER" type="Node2D" parent="."] - -[node name="finale" parent="LAST BOSS EVER" instance=ExtResource( 9 )] -score_on_kill = 1000 - -[node name="IF YOUR STILL ALIVE, YOU ARENT NOW" type="Node2D" parent="."] - -[node name="finale" parent="IF YOUR STILL ALIVE, YOU ARENT NOW" instance=ExtResource( 9 )] -ARMOR = 2000 diff --git a/enemy/scenes/Drone.tscn b/enemy/scenes/Drone.tscn deleted file mode 100644 index df92f7f..0000000 --- a/enemy/scenes/Drone.tscn +++ /dev/null @@ -1,141 +0,0 @@ -[gd_scene load_steps=7 format=2] - -[ext_resource path="res://enemy/scripts/Drone.gd" type="Script" id=1] -[ext_resource path="res://sprites/drone_base.png" type="Texture" id=2] -[ext_resource path="res://sprites/turret.png" type="Texture" id=3] - -[sub_resource type="CircleShape2D" id=1] -radius = 18.0278 - -[sub_resource type="Animation" id=3] -length = 0.001 -tracks/0/type = "value" -tracks/0/path = NodePath("turret:frame") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 0, -"values": [ 1 ] -} - -[sub_resource type="Animation" id=2] -resource_name = "firing" -length = 0.5 -tracks/0/type = "value" -tracks/0/path = NodePath("shootsfx:playing") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ true ] -} -tracks/1/type = "value" -tracks/1/path = NodePath("turret:frame") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/keys = { -"times": PoolRealArray( 0, 0.2, 0.5 ), -"transitions": PoolRealArray( 1, 1, 1 ), -"update": 1, -"values": [ 0, 1, 0 ] -} -tracks/2/type = "method" -tracks/2/path = NodePath(".") -tracks/2/interp = 1 -tracks/2/loop_wrap = true -tracks/2/imported = false -tracks/2/enabled = true -tracks/2/keys = { -"times": PoolRealArray( 0.3 ), -"transitions": PoolRealArray( 1 ), -"values": [ { -"args": [ ], -"method": "spawn_bullet" -} ] -} -tracks/3/type = "value" -tracks/3/path = NodePath("appearFlash:visible") -tracks/3/interp = 1 -tracks/3/loop_wrap = true -tracks/3/imported = false -tracks/3/enabled = true -tracks/3/keys = { -"times": PoolRealArray( 0.4 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ true ] -} - -[node name="Drone" type="RigidBody2D"] -collision_layer = 34 -gravity_scale = 0.0 -script = ExtResource( 1 ) - -[node name="CollisionShape2D" type="CollisionShape2D" parent="."] -shape = SubResource( 1 ) - -[node name="base" type="Sprite" parent="."] -texture = ExtResource( 2 ) - -[node name="turret" type="Sprite" parent="."] -texture = ExtResource( 3 ) -centered = false -offset = Vector2( -1, -4 ) -hframes = 2 -frame = 1 - -[node name="appearFlash" type="Sprite" parent="."] - -[node name="Tween" type="Tween" parent="."] - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -anims/RESET = SubResource( 3 ) -anims/firing = SubResource( 2 ) - -[node name="shootCooldown" type="Timer" parent="."] - -[node name="rays" type="Node2D" parent="."] - -[node name="RayCast2D" type="RayCast2D" parent="rays"] -position = Vector2( 0, 17 ) -enabled = true -collision_mask = 32777 -collide_with_areas = true - -[node name="RayCast2D2" type="RayCast2D" parent="rays"] -position = Vector2( 17, 0 ) -rotation = -1.5708 -enabled = true -collision_mask = 32777 -collide_with_areas = true - -[node name="RayCast2D3" type="RayCast2D" parent="rays"] -position = Vector2( 0, -17 ) -rotation = 3.14159 -enabled = true -collision_mask = 32777 -collide_with_areas = true - -[node name="RayCast2D4" type="RayCast2D" parent="rays"] -position = Vector2( -17, 0 ) -rotation = 1.5708 -enabled = true -collision_mask = 32777 -collide_with_areas = true - -[node name="Camera2D" type="Camera2D" parent="."] - -[node name="shootsfx" type="AudioStreamPlayer" parent="."] - -[connection signal="body_entered" from="." to="." method="_on_Drone_body_entered"] -[connection signal="timeout" from="shootCooldown" to="." method="shoot"] diff --git a/enemy/scenes/EasyEnemy.tscn b/enemy/scenes/EasyEnemy.tscn deleted file mode 100644 index 04ba629..0000000 --- a/enemy/scenes/EasyEnemy.tscn +++ /dev/null @@ -1,41 +0,0 @@ -[gd_scene load_steps=8 format=2] - -[ext_resource path="res://enemy/scenes/Enemy.tscn" type="PackedScene" id=1] -[ext_resource path="res://enemy/scripts/EasyEnemy.gd" type="Script" id=2] -[ext_resource path="res://sprites/EasyEnemy.png" type="Texture" id=3] - -[sub_resource type="AtlasTexture" id=3] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 0, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=4] -flags = 2 -atlas = ExtResource( 3 ) -region = Rect2( 16, 0, 16, 16 ) - -[sub_resource type="SpriteFrames" id=2] -animations = [ { -"frames": [ SubResource( 3 ), SubResource( 4 ) ], -"loop": true, -"name": "default", -"speed": 1.5 -} ] - -[sub_resource type="RectangleShape2D" id=1] -resource_local_to_scene = true -extents = Vector2( 4.5, 7 ) - -[node name="octopus" instance=ExtResource( 1 )] -script = ExtResource( 2 ) -ARMOR = 10 -score_on_kill = 5 -SPEED = 15 -shootspeed = 10.0 - -[node name="Sprite" parent="." index="0"] -frames = SubResource( 2 ) - -[node name="CollisionShape2D" parent="." index="1"] -position = Vector2( 0.5, 0 ) -shape = SubResource( 1 ) diff --git a/enemy/scenes/Enemy.tscn b/enemy/scenes/Enemy.tscn deleted file mode 100644 index fc4b0a2..0000000 --- a/enemy/scenes/Enemy.tscn +++ /dev/null @@ -1,121 +0,0 @@ -[gd_scene load_steps=18 format=2] - -[ext_resource path="res://sprites/enemy.png" type="Texture" id=1] -[ext_resource path="res://sprites/UFO-export.png" type="Texture" id=2] -[ext_resource path="res://sprites/litableenemy.png" type="Texture" id=3] -[ext_resource path="res://sprites/squid.png" type="Texture" id=4] -[ext_resource path="res://sprites/HardEnemy.png" type="Texture" id=5] -[ext_resource path="res://sprites/boss2.png" type="Texture" id=6] -[ext_resource path="res://enemy/scripts/Enemy.gd" type="Script" id=7] - -[sub_resource type="AtlasTexture" id=5] -flags = 2 -atlas = ExtResource( 1 ) -region = Rect2( 0, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=6] -flags = 2 -atlas = ExtResource( 1 ) -region = Rect2( 16, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=7] -flags = 2 -atlas = ExtResource( 2 ) -region = Rect2( 0, 0, 18, 9 ) - -[sub_resource type="AtlasTexture" id=8] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 0, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=9] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 16, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=10] -flags = 2 -atlas = ExtResource( 4 ) -region = Rect2( 0, 0, 10, 11 ) - -[sub_resource type="AtlasTexture" id=11] -flags = 2 -atlas = ExtResource( 4 ) -region = Rect2( 0, 11, 10, 11 ) - -[sub_resource type="SpriteFrames" id=4] -animations = [ { -"frames": [ SubResource( 5 ), SubResource( 6 ) ], -"loop": true, -"name": "default", -"speed": 1.5 -}, { -"frames": [ SubResource( 7 ) ], -"loop": true, -"name": "New Anim 1", -"speed": 5.0 -}, { -"frames": [ SubResource( 8 ), SubResource( 9 ) ], -"loop": true, -"name": "New Anim", -"speed": 1.5 -}, { -"frames": [ ExtResource( 3 ) ], -"loop": true, -"name": "New Anim 4", -"speed": 5.0 -}, { -"frames": [ ExtResource( 6 ) ], -"loop": true, -"name": "New Anim 3", -"speed": 5.0 -}, { -"frames": [ SubResource( 10 ), SubResource( 11 ) ], -"loop": true, -"name": "New Anim 2", -"speed": 1.5 -} ] - -[sub_resource type="RectangleShape2D" id=1] -resource_local_to_scene = true -extents = Vector2( 5.5, 7 ) - -[sub_resource type="OccluderPolygon2D" id=12] -polygon = PoolVector2Array( -2, -7, -5, -4, -5, 5, -2, 7, 3, 7, 6, 4, 6, -5, 3, -7 ) - -[node name="basicdude" type="Area2D"] -z_index = 1 -collision_layer = 34 -script = ExtResource( 7 ) -stop_pos = Vector2( 220, 0 ) - -[node name="Sprite" type="AnimatedSprite" parent="."] -frames = SubResource( 4 ) -frame = 1 -playing = true - -[node name="CollisionShape2D" type="CollisionShape2D" parent="."] -shape = SubResource( 1 ) - -[node name="VisibilityNotifier2D" type="VisibilityNotifier2D" parent="."] -position = Vector2( -2.38419e-07, 0 ) -scale = Vector2( 0.5, 0.7 ) - -[node name="Timer" type="Timer" parent="."] -wait_time = 1.5 -autostart = true - -[node name="sidestep" type="Timer" parent="."] -wait_time = 2.0 -autostart = true - -[node name="Tween" type="Tween" parent="."] - -[node name="LightOccluder2D" type="LightOccluder2D" parent="."] -occluder = SubResource( 12 ) - -[connection signal="area_entered" from="." to="." method="_on_Enemy_area_entered"] -[connection signal="body_entered" from="." to="." method="_on_Enemy_body_entered"] -[connection signal="screen_exited" from="VisibilityNotifier2D" to="." method="_on_VisibilityNotifier2D_screen_exited"] -[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"] -[connection signal="timeout" from="sidestep" to="." method="_on_sidestep_timeout"] diff --git a/enemy/scenes/EnemySpawner.tscn b/enemy/scenes/EnemySpawner.tscn deleted file mode 100644 index 5ecad77..0000000 --- a/enemy/scenes/EnemySpawner.tscn +++ /dev/null @@ -1,86 +0,0 @@ -[gd_scene load_steps=10 format=2] - -[ext_resource path="res://enemy/scripts/EnemySpawner.gd" type="Script" id=1] -[ext_resource path="res://sprites/EasyEnemy.png" type="Texture" id=2] -[ext_resource path="res://sprites/icon.png" type="Texture" id=3] -[ext_resource path="res://sprites/squid.png" type="Texture" id=4] -[ext_resource path="res://sprites/UFO-export.png" type="Texture" id=5] -[ext_resource path="res://sprites/boss2.png" type="Texture" id=6] -[ext_resource path="res://fonts/04b-19.tres" type="DynamicFont" id=7] -[ext_resource path="res://sprites/HardEnemy.png" type="Texture" id=8] -[ext_resource path="res://sprites/bossfinal.png" type="Texture" id=9] - -[node name="EnemySpawner" type="Node2D"] -script = ExtResource( 1 ) - -[node name="SpawnPoints" type="Node2D" parent="."] - -[node name="Point" type="Position2D" parent="SpawnPoints"] -position = Vector2( 0, 45 ) - -[node name="Point3" type="Position2D" parent="SpawnPoints"] -position = Vector2( 0, 90 ) - -[node name="Point5" type="Position2D" parent="SpawnPoints"] -position = Vector2( 0, 135 ) - -[node name="Sprite Holders" type="Node2D" parent="."] -position = Vector2( -19, -33 ) - -[node name="octopus" type="Sprite" parent="Sprite Holders"] -visible = false -position = Vector2( -21, 197 ) -rotation = -1.5708 -texture = ExtResource( 2 ) -hframes = 2 - -[node name="basicenemy" type="Sprite" parent="Sprite Holders"] -visible = false -position = Vector2( -23, 197 ) -texture = ExtResource( 3 ) - -[node name="squid" type="Sprite" parent="Sprite Holders"] -visible = false -position = Vector2( -21, 197 ) -texture = ExtResource( 4 ) -vframes = 2 - -[node name="ufo" type="Sprite" parent="Sprite Holders"] -visible = false -position = Vector2( -20, 197 ) -texture = ExtResource( 5 ) - -[node name="boss" type="Sprite" parent="Sprite Holders"] -visible = false -position = Vector2( -20, 197 ) -texture = ExtResource( 6 ) - -[node name="hardy" type="Sprite" parent="Sprite Holders"] -visible = false -position = Vector2( -20, 197 ) -rotation = -1.5708 -texture = ExtResource( 8 ) -hframes = 2 - -[node name="finale" type="Sprite" parent="Sprite Holders"] -visible = false -position = Vector2( -20, 197 ) -rotation = -1.5708 -texture = ExtResource( 9 ) - -[node name="Label" type="Label" parent="Sprite Holders"] -visible = false -margin_left = -344.0 -margin_top = 189.0 -margin_right = -32.0 -margin_bottom = 206.0 -custom_fonts/font = ExtResource( 7 ) -text = "Beware of the" -align = 2 -valign = 1 - -[node name="Timer" type="Timer" parent="."] -wait_time = 0.5 -autostart = true - -[connection signal="timeout" from="Timer" to="." method="spawn_enemy_on_current_difficulty"] diff --git a/enemy/scenes/FInalBOss.tscn b/enemy/scenes/FInalBOss.tscn deleted file mode 100644 index e370985..0000000 --- a/enemy/scenes/FInalBOss.tscn +++ /dev/null @@ -1,45 +0,0 @@ -[gd_scene load_steps=5 format=2] - -[ext_resource path="res://enemy/scripts/FInalBOss.gd" type="Script" id=1] -[ext_resource path="res://sprites/bossfinal.png" type="Texture" id=2] -[ext_resource path="res://bullets/scenes/Fireball.tscn" type="PackedScene" id=3] - -[sub_resource type="CircleShape2D" id=1] -radius = 8.0 - -[node name="FInalBOss" type="Area2D"] -position = Vector2( 270, 73 ) -collision_layer = 34 -script = ExtResource( 1 ) -drop_power_up = true -ARMOR = 500 -score_on_kill = 500 -Laser = ExtResource( 3 ) -shootspeed = 0.3 -stop_pos = Vector2( 300, 0 ) - -[node name="Sprite" type="Sprite" parent="."] -texture = ExtResource( 2 ) - -[node name="CollisionShape2D" type="CollisionShape2D" parent="."] -shape = SubResource( 1 ) - -[node name="Timer" type="Timer" parent="."] -wait_time = 1.5 -autostart = true - -[node name="sidestep" type="Timer" parent="."] -wait_time = 2.0 -autostart = true - -[node name="Tween" type="Tween" parent="."] - -[node name="VisibilityNotifier2D" type="VisibilityNotifier2D" parent="."] -position = Vector2( -2.38419e-07, 0 ) -scale = Vector2( 0.5, 0.7 ) - -[connection signal="area_entered" from="." to="." method="_on_Enemy_area_entered"] -[connection signal="body_entered" from="." to="." method="_on_Enemy_body_entered"] -[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"] -[connection signal="timeout" from="sidestep" to="." method="_on_sidestep_timeout"] -[connection signal="screen_exited" from="VisibilityNotifier2D" to="." method="_on_VisibilityNotifier2D_screen_exited"] diff --git a/enemy/scenes/HardEnemy.tscn b/enemy/scenes/HardEnemy.tscn deleted file mode 100644 index d51c51d..0000000 --- a/enemy/scenes/HardEnemy.tscn +++ /dev/null @@ -1,20 +0,0 @@ -[gd_scene load_steps=4 format=2] - -[ext_resource path="res://enemy/scenes/Enemy.tscn" type="PackedScene" id=1] -[ext_resource path="res://enemy/scripts/HardEnemy.gd" type="Script" id=2] - -[sub_resource type="RectangleShape2D" id=1] -resource_local_to_scene = true -extents = Vector2( 5.5, 7 ) - -[node name="hardenemy" instance=ExtResource( 1 )] -script = ExtResource( 2 ) -score_on_kill = 20 -shootspeed = 0.8 - -[node name="Sprite" parent="." index="0"] -animation = "New Anim" -frame = 1 - -[node name="CollisionShape2D" parent="." index="1"] -shape = SubResource( 1 ) diff --git a/enemy/scenes/LastBoss.tscn b/enemy/scenes/LastBoss.tscn deleted file mode 100644 index 06c1d83..0000000 --- a/enemy/scenes/LastBoss.tscn +++ /dev/null @@ -1,16 +0,0 @@ -[gd_scene load_steps=3 format=2] - -[ext_resource path="res://enemy/scenes/Enemy.tscn" type="PackedScene" id=1] - -[sub_resource type="RectangleShape2D" id=1] -resource_local_to_scene = true -extents = Vector2( 5.5, 7 ) - -[node name="Enemy" instance=ExtResource( 1 )] -drop_power_up = true - -[node name="Sprite" parent="." index="0"] -frame = 1 - -[node name="CollisionShape2D" parent="." index="1"] -shape = SubResource( 1 ) diff --git a/enemy/scenes/UFO.tscn b/enemy/scenes/UFO.tscn deleted file mode 100644 index ffbc294..0000000 --- a/enemy/scenes/UFO.tscn +++ /dev/null @@ -1,32 +0,0 @@ -[gd_scene load_steps=6 format=2] - -[ext_resource path="res://enemy/scenes/Enemy.tscn" type="PackedScene" id=1] -[ext_resource path="res://sprites/UFO-export.png" type="Texture" id=2] -[ext_resource path="res://bullets/scenes/EnemyLaserBig.tscn" type="PackedScene" id=3] - -[sub_resource type="SpriteFrames" id=2] -resource_local_to_scene = true -animations = [ { -"frames": [ ExtResource( 2 ) ], -"loop": true, -"name": "default", -"speed": 5.0 -} ] - -[sub_resource type="RectangleShape2D" id=1] -resource_local_to_scene = true -extents = Vector2( 4, 8 ) - -[node name="Enemy" instance=ExtResource( 1 )] -drop_power_up = true -score_on_kill = 100 -Laser = ExtResource( 3 ) -SPEED = 10 -shootspeed = 5.0 - -[node name="Sprite" parent="." index="0"] -rotation = 1.5708 -frames = SubResource( 2 ) - -[node name="CollisionShape2D" parent="." index="1"] -shape = SubResource( 1 ) diff --git a/enemy/scripts/Boss.gd b/enemy/scripts/Boss.gd deleted file mode 100644 index 37fa047..0000000 --- a/enemy/scripts/Boss.gd +++ /dev/null @@ -1,2 +0,0 @@ -extends Enemy -class_name Boss diff --git a/enemy/scripts/Drone.gd b/enemy/scripts/Drone.gd deleted file mode 100644 index 76516ba..0000000 --- a/enemy/scripts/Drone.gd +++ /dev/null @@ -1,110 +0,0 @@ -extends RigidBody2D - -var alive = true -var asleep = false -var health = 15 -var COOLDOWN = 1 - -var hovering - -export var MAX_SPEED = 50 -export var MAX_THRUST = 25 - - -func _integrate_forces(state): - if not alive: - return - - if asleep: - return - - var delta = state.get_step() - - # Check nearby objects with raycast - var closest_collision = null - $rays.rotation += delta * 11 * PI - for ray in $rays.get_children(): - if ray.is_colliding(): - var collision_point = ray.get_collision_point() - global_position - if closest_collision == null: - closest_collision = collision_point - if collision_point.length() < closest_collision.length(): - closest_collision = collision_point - - # Dodge - if closest_collision: - var normal = -closest_collision.normalized() - var dodge_direction = 1 - if randf() < 0.5: - dodge_direction = -1 - linear_velocity += normal * MAX_THRUST * 2 * delta - linear_velocity += normal.rotated(PI / 2 * dodge_direction) * MAX_THRUST * delta - - # Steer towards player - var distance_to_player = global_position.distance_to($"../../Ship".global_position) - var vector_to_player = ($"../../Ship".global_position - global_position).normalized() - - # Rotate turret - var start = $turret.rotation - var angle_to_target = Vector2(1, 0).rotated(start).angle_to(vector_to_player) - var end = start + angle_to_target - $Tween.interpolate_property($turret, "rotation", start, end, 0.1, Tween.TRANS_QUAD, Tween.EASE_OUT) - $Tween.start() - - if distance_to_player > 40: - # Move towards player - linear_velocity += vector_to_player * MAX_THRUST * delta - hovering = false - else: - # Move away from player - hovering = false - linear_velocity += -vector_to_player * MAX_THRUST * delta - - # Clamp max speed - if linear_velocity.length() > MAX_SPEED: - linear_velocity = linear_velocity.normalized() * MAX_SPEED - - -func shoot(): - $shootCooldown.wait_time = COOLDOWN * (1 + rand_range(-0.25, 0.25)) - $shootCooldown.start() - - if not alive: - return - - if asleep: - return - - # Start firing animation - $AnimationPlayer.play("firing") - - -const Laser = preload("res://bullets/scenes/EnemyLaser.tscn") - - -func spawn_bullet(): - var laser = Game.instance_scene_on_main(Laser, global_position) - laser.apply_impulse(Vector2.ZERO, Vector2(-50, 0)) - - -const ExplosionEffect = preload("res://effects/ExplosionEffect.tscn") -const HitEffect = preload("res://effects/HitEffect.tscn") - - -func create_hit_effect(): - Game.instance_scene_on_main(HitEffect, global_position) - - -func create_explosion(): - Game.instance_scene_on_main(ExplosionEffect, global_position) - - -func _exit_tree(): - create_explosion() - - -func _on_Drone_body_entered(body): - if body.is_in_group("pbullet"): - health -= 1 - if health <= 0: - queue_free() diff --git a/enemy/scripts/EasyEnemy.gd b/enemy/scripts/EasyEnemy.gd deleted file mode 100644 index c3f1b7f..0000000 --- a/enemy/scripts/EasyEnemy.gd +++ /dev/null @@ -1,2 +0,0 @@ -extends Enemy -class_name EasyEnemy diff --git a/enemy/scripts/Enemy.gd b/enemy/scripts/Enemy.gd deleted file mode 100644 index 434a045..0000000 --- a/enemy/scripts/Enemy.gd +++ /dev/null @@ -1,2 +0,0 @@ -extends Enemy -class_name EnemyMedium diff --git a/enemy/scripts/EnemyClass.gd b/enemy/scripts/EnemyClass.gd deleted file mode 100644 index 9970a08..0000000 --- a/enemy/scripts/EnemyClass.gd +++ /dev/null @@ -1,97 +0,0 @@ -class_name Enemy -extends Area2D - -var count = 0 -var target -export var drop_power_up = false -export var missile = false -export var ARMOR = 20 -export var score_on_kill = 10 -const ExplosionEffect = preload("res://effects/ExplosionEffect.tscn") -export var Laser = preload("res://bullets/scenes/EnemyLaser.tscn") -export var SPEED = 25 -onready var timer = $Timer -export var shootspeed = 1.5 -var target_destination = Vector2.ZERO -var damagetobesubtracted -export var stop_pos = Vector2(200, 0) -onready var tween = $Tween - - -func _ready(): - target = get_parent().target - timer.wait_time = shootspeed - target_destination = global_position - - -func _process(delta): - if global_position.x > stop_pos.x: - global_position.x -= SPEED * delta - - -func _exit_tree(): - if drop_power_up and randi() % 10 == 2: - var powerUp = preload("res://PowerUp.tscn") - Game.instance_scene_on_main(powerUp, global_position) - - -func damage(): - damagetobesubtracted = rand_range(enemy_damage.min_damage, enemy_damage.max_damage) - damagetobesubtracted = round(damagetobesubtracted) - ARMOR -= damagetobesubtracted - if ARMOR <= 0: - add_to_score() - create_explosion() - queue_free() - - -func _on_Enemy_body_entered(body): - body.create_hit_effect() - if not body.is_in_group("Player"): - body.queue_free() - damage() - - -func _on_Enemy_area_entered(area): - if not area.is_in_group("Player"): - area.create_hit_effect() - area.queue_free() - damage() - - -func add_to_score(): - var main = get_tree().current_scene - if main.is_in_group("World"): - main.score += score_on_kill - - -func create_explosion(): - Game.instance_scene_on_main(ExplosionEffect, global_position) - - -func _on_VisibilityNotifier2D_screen_exited(): - queue_free() - - -func _on_Timer_timeout(): - if not missile: - var laser = Game.instance_scene_on_main(Laser, global_position) - laser.apply_impulse(Vector2.ZERO, Vector2(-50, 0)) - elif missile == true: - var missiles = preload("res://bullets/scenes/missile.tscn") - var m = Game.instance_scene_on_main(missiles, global_position) - m.start(target) - - -func _on_sidestep_timeout(): - var choosing = randi() % 2 - var choice = [30, -30] - target_destination = global_position + Vector2(0, choice[choosing]) - if target_destination.y > 160: - target_destination.y = 160 - elif target_destination.y < 10: - target_destination.y = 10 - tween.interpolate_property( - self, "position", global_position, target_destination, 1, Tween.TRANS_LINEAR, Tween.EASE_IN_OUT - ) - tween.start() diff --git a/enemy/scripts/EnemySpawner.gd b/enemy/scripts/EnemySpawner.gd deleted file mode 100644 index f33495d..0000000 --- a/enemy/scripts/EnemySpawner.gd +++ /dev/null @@ -1,146 +0,0 @@ -extends Node2D - -var count1 = 0 -var count2 = 0 -var count3 = 0 -var count4 = 0 -var count5 = 0 -var count6 = 0 -var count7 = 0 -var count8 = 0 - -onready var label = $"Sprite Holders/Label" -var nexthing = 0 -#min, max, level -var onscreenmax = 3 -var onscreen = 0 -var announcing = true -var dev_mode = playerstats.dev_mode -var score_ranges: Array = [ - [50, 200, 1], - [200, 749, 2], - [750, 2499, 3], - [2500, 5000, 4], - [5001, 7000, 5], - [5001, 7000, 5], - [7001, 8000, 6], - [8001, 30000, 7], - [30001, 40000, 8] -] -onready var spawnPoints = $SpawnPoints -var difficulty_levels: Array -var current_difficulty_level -onready var main = get_node("../../../EnemyHolder") -onready var world = get_tree().current_scene -var last_score: int = -1 - - -func _ready(): - visible_then_not($"Sprite Holders/octopus") - difficulty_levels = load("res://enemy/scenes/Difficulty Scaling.tscn").instance().get_children() - current_difficulty_level = difficulty_levels[0] - - -func spawn_enemy_on_current_difficulty(): - if not announcing: - if not dev_mode: - onscreen = main.get_child_count() - if onscreen <= onscreenmax: - var choices = current_difficulty_level.get_children() - var to_spawn = choices[randi() % choices.size()] - if to_spawn.name == "Drone": - if randi() % 6 == 5: - var clone = to_spawn.duplicate() - var spawn_position = get_spawn_position() - main.add_child(clone) - clone.global_position = spawn_position - else: - var clone = to_spawn.duplicate() - var spawn_position = get_spawn_position() - main.add_child(clone) - clone.global_position = spawn_position - - -func get_spawn_position(): - var points = spawnPoints.get_children() - points.shuffle() - return points[0].global_position - - -func _physics_process(_delta): - if world.score == last_score: - last_score = world.score - return - for i in score_ranges.size(): - if world.score in range(score_ranges[i][0], score_ranges[i][1], 1): - #set your dificulty to score_ranges[i][2] - diff_levels(score_ranges[i][2]) - match score_ranges[i][2]: - 1: - if not count1 >= 1: - count1 += 1 - visible_then_not($"Sprite Holders/basicenemy") - 2: - if not count2 >= 1: - count2 += 1 - visible_then_not($"Sprite Holders/hardy") - visible_then_not($"Sprite Holders/ufo") - 3: - if not count3 >= 1: - count3 += 1 - onscreenmax = 1 - label.text = "First boss = " - visible_then_not($"Sprite Holders/squid") - yield(get_tree().create_timer(6), "timeout") - label.text = "Next up =" - 4: - if not count4 >= 1: - count4 += 1 - onscreenmax = 4 - label.text = "Hats off to ye!" - label.visible = true - yield(get_tree().create_timer(6), "timeout") - label.visible = false - 5: - if not count5 >= 1: - count5 += 1 - onscreenmax = 1 - label.text = "Second boss = " - visible_then_not($"Sprite Holders/boss") - yield(get_tree().create_timer(6), "timeout") - 6: - if not count6 >= 1: - count6 += 1 - onscreenmax = 9 - label.text = "Random bullshit go!" - label.visible = true - yield(get_tree().create_timer(6), "timeout") - label.visible = false - 7: - if not count7 >= 1: - count7 += 1 - onscreenmax = 0 - label.text = "Last boss = " - visible_then_not($"Sprite Holders/finale") - label.text = "Y r u alive!!!" - 8: - if not count8 >= 1: - count8 += 1 - onscreenmax = 5 - label.visible = true - yield(get_tree().create_timer(6), "timeout") - label.visible = false - - -func diff_levels(value): - current_difficulty_level = difficulty_levels[value] - - -func visible_then_not(sprite): - announcing = true - label.visible = true - sprite.visible = true - yield(get_tree().create_timer(5), "timeout") - sprite.visible = false - label.visible = false - announcing = false diff --git a/enemy/scripts/FInalBOss.gd b/enemy/scripts/FInalBOss.gd deleted file mode 100644 index a8a0739..0000000 --- a/enemy/scripts/FInalBOss.gd +++ /dev/null @@ -1 +0,0 @@ -extends Enemy diff --git a/enemy/scripts/HardEnemy.gd b/enemy/scripts/HardEnemy.gd deleted file mode 100644 index 1dae827..0000000 --- a/enemy/scripts/HardEnemy.gd +++ /dev/null @@ -1,2 +0,0 @@ -extends Enemy -class_name HardEnemy diff --git a/enemy/scripts/UFO.gd b/enemy/scripts/UFO.gd deleted file mode 100644 index fef4638..0000000 --- a/enemy/scripts/UFO.gd +++ /dev/null @@ -1,2 +0,0 @@ -extends Enemy -class_name EnemyUfo diff --git a/enemy/scripts/enemy_damage.gd b/enemy/scripts/enemy_damage.gd deleted file mode 100644 index dbf40bb..0000000 --- a/enemy/scripts/enemy_damage.gd +++ /dev/null @@ -1,3 +0,0 @@ -extends Node -export var min_damage = 1 -export var max_damage = 2 diff --git a/export_presets.cfg b/export_presets.cfg deleted file mode 100644 index ce421fa..0000000 --- a/export_presets.cfg +++ /dev/null @@ -1,382 +0,0 @@ -[preset.0] - -name="Windows" -platform="Windows Desktop" -runnable=true -custom_features="" -export_filter="all_resources" -include_filter="" -exclude_filter="" -export_path="" -script_export_mode=1 -script_encryption_key="" - -[preset.0.options] - -custom_template/debug="" -custom_template/release="" -binary_format/64_bits=true -binary_format/embed_pck=true -texture_format/bptc=false -texture_format/s3tc=true -texture_format/etc=false -texture_format/etc2=false -texture_format/no_bptc_fallbacks=true -codesign/enable=false -codesign/identity_type=0 -codesign/identity="" -codesign/password="" -codesign/timestamp=true -codesign/timestamp_server_url="" -codesign/digest_algorithm=1 -codesign/description="" -codesign/custom_options=PoolStringArray( ) -application/modify_resources=false -application/icon="" -application/file_version="" -application/product_version="" -application/company_name="" -application/product_name="" -application/file_description="" -application/copyright="" -application/trademarks="" - -[preset.1] - -name="Linux" -platform="Linux/X11" -runnable=true -custom_features="" -export_filter="all_resources" -include_filter="" -exclude_filter="" -export_path="" -script_export_mode=1 -script_encryption_key="" - -[preset.1.options] - -custom_template/debug="" -custom_template/release="" -binary_format/64_bits=true -binary_format/embed_pck=true -texture_format/bptc=false -texture_format/s3tc=true -texture_format/etc=false -texture_format/etc2=false -texture_format/no_bptc_fallbacks=true - -[preset.2] - -name="HTML" -platform="HTML5" -runnable=true -custom_features="" -export_filter="all_resources" -include_filter="" -exclude_filter="" -export_path="" -script_export_mode=1 -script_encryption_key="" - -[preset.2.options] - -custom_template/debug="" -custom_template/release="" -variant/export_type=0 -vram_texture_compression/for_desktop=true -vram_texture_compression/for_mobile=false -html/export_icon=true -html/custom_html_shell="res://html/custom.html" -html/head_include="" -html/canvas_resize_policy=2 -html/focus_canvas_on_start=true -html/experimental_virtual_keyboard=true -progressive_web_app/enabled=false -progressive_web_app/offline_page="" -progressive_web_app/display=1 -progressive_web_app/orientation=0 -progressive_web_app/icon_144x144="" -progressive_web_app/icon_180x180="" -progressive_web_app/icon_512x512="" -progressive_web_app/background_color=Color( 0, 0, 0, 1 ) - -[preset.3] - -name="Mac" -platform="Mac OSX" -runnable=true -custom_features="" -export_filter="all_resources" -include_filter="" -exclude_filter="" -export_path="" -script_export_mode=1 -script_encryption_key="" - -[preset.3.options] - -custom_template/debug="" -custom_template/release="" -application/name="spaceshooty" -application/info="bonk the bullets" -application/icon="" -application/identifier="bendn.spaceshooty" -application/signature="" -application/app_category="Games" -application/short_version="1.0" -application/version="1.0" -application/copyright="mit" -display/high_res=true -privacy/microphone_usage_description="" -privacy/camera_usage_description="" -privacy/location_usage_description="" -privacy/address_book_usage_description="" -privacy/calendar_usage_description="" -privacy/photos_library_usage_description="" -privacy/desktop_folder_usage_description="" -privacy/documents_folder_usage_description="" -privacy/downloads_folder_usage_description="" -privacy/network_volumes_usage_description="" -privacy/removable_volumes_usage_description="" -codesign/enable=true -codesign/identity="" -codesign/timestamp=true -codesign/hardened_runtime=true -codesign/replace_existing_signature=true -codesign/entitlements/custom_file="" -codesign/entitlements/allow_jit_code_execution=false -codesign/entitlements/allow_unsigned_executable_memory=false -codesign/entitlements/allow_dyld_environment_variables=false -codesign/entitlements/disable_library_validation=false -codesign/entitlements/audio_input=false -codesign/entitlements/camera=false -codesign/entitlements/location=false -codesign/entitlements/address_book=false -codesign/entitlements/calendars=false -codesign/entitlements/photos_library=false -codesign/entitlements/apple_events=false -codesign/entitlements/debugging=false -codesign/entitlements/app_sandbox/enabled=false -codesign/entitlements/app_sandbox/network_server=false -codesign/entitlements/app_sandbox/network_client=false -codesign/entitlements/app_sandbox/device_usb=false -codesign/entitlements/app_sandbox/device_bluetooth=false -codesign/entitlements/app_sandbox/files_downloads=0 -codesign/entitlements/app_sandbox/files_pictures=0 -codesign/entitlements/app_sandbox/files_music=0 -codesign/entitlements/app_sandbox/files_movies=0 -codesign/custom_options=PoolStringArray( ) -notarization/enable=false -notarization/apple_id_name="" -notarization/apple_id_password="" -notarization/apple_team_id="" -texture_format/s3tc=true -texture_format/etc=false -texture_format/etc2=false - -[preset.4] - -name="Android" -platform="Android" -runnable=true -custom_features="" -export_filter="all_resources" -include_filter="" -exclude_filter="" -export_path="" -script_export_mode=1 -script_encryption_key="" - -[preset.4.options] - -custom_template/debug="" -custom_template/release="" -custom_build/use_custom_build=false -custom_build/export_format=0 -custom_build/min_sdk="" -custom_build/target_sdk="" -architectures/armeabi-v7a=true -architectures/arm64-v8a=false -architectures/x86=false -architectures/x86_64=false -keystore/debug="" -keystore/debug_user="" -keystore/debug_password="" -keystore/release="" -keystore/release_user="" -keystore/release_password="" -one_click_deploy/clear_previous_install=false -version/code=1 -version/name="1.0" -package/unique_name="org.godotengine.$genname" -package/name="" -package/signed=true -package/classify_as_game=true -package/retain_data_on_uninstall=false -package/exclude_from_recents=false -launcher_icons/main_192x192="" -launcher_icons/adaptive_foreground_432x432="" -launcher_icons/adaptive_background_432x432="" -graphics/opengl_debug=false -xr_features/xr_mode=0 -xr_features/hand_tracking=0 -xr_features/hand_tracking_frequency=0 -xr_features/passthrough=0 -screen/immersive_mode=true -screen/support_small=true -screen/support_normal=true -screen/support_large=true -screen/support_xlarge=true -user_data_backup/allow=false -command_line/extra_args="" -apk_expansion/enable=false -apk_expansion/SALT="" -apk_expansion/public_key="" -permissions/custom_permissions=PoolStringArray( ) -permissions/access_checkin_properties=false -permissions/access_coarse_location=false -permissions/access_fine_location=false -permissions/access_location_extra_commands=false -permissions/access_mock_location=false -permissions/access_network_state=false -permissions/access_surface_flinger=false -permissions/access_wifi_state=false -permissions/account_manager=false -permissions/add_voicemail=false -permissions/authenticate_accounts=false -permissions/battery_stats=false -permissions/bind_accessibility_service=false -permissions/bind_appwidget=false -permissions/bind_device_admin=false -permissions/bind_input_method=false -permissions/bind_nfc_service=false -permissions/bind_notification_listener_service=false -permissions/bind_print_service=false -permissions/bind_remoteviews=false -permissions/bind_text_service=false -permissions/bind_vpn_service=false -permissions/bind_wallpaper=false -permissions/bluetooth=false -permissions/bluetooth_admin=false -permissions/bluetooth_privileged=false -permissions/brick=false -permissions/broadcast_package_removed=false -permissions/broadcast_sms=false -permissions/broadcast_sticky=false -permissions/broadcast_wap_push=false -permissions/call_phone=false -permissions/call_privileged=false -permissions/camera=false -permissions/capture_audio_output=false -permissions/capture_secure_video_output=false -permissions/capture_video_output=false -permissions/change_component_enabled_state=false -permissions/change_configuration=false -permissions/change_network_state=false -permissions/change_wifi_multicast_state=false -permissions/change_wifi_state=false -permissions/clear_app_cache=false -permissions/clear_app_user_data=false -permissions/control_location_updates=false -permissions/delete_cache_files=false -permissions/delete_packages=false -permissions/device_power=false -permissions/diagnostic=false -permissions/disable_keyguard=false -permissions/dump=false -permissions/expand_status_bar=false -permissions/factory_test=false -permissions/flashlight=false -permissions/force_back=false -permissions/get_accounts=false -permissions/get_package_size=false -permissions/get_tasks=false -permissions/get_top_activity_info=false -permissions/global_search=false -permissions/hardware_test=false -permissions/inject_events=false -permissions/install_location_provider=false -permissions/install_packages=false -permissions/install_shortcut=false -permissions/internal_system_window=false -permissions/internet=false -permissions/kill_background_processes=false -permissions/location_hardware=false -permissions/manage_accounts=false -permissions/manage_app_tokens=false -permissions/manage_documents=false -permissions/manage_external_storage=false -permissions/master_clear=false -permissions/media_content_control=false -permissions/modify_audio_settings=false -permissions/modify_phone_state=false -permissions/mount_format_filesystems=false -permissions/mount_unmount_filesystems=false -permissions/nfc=false -permissions/persistent_activity=false -permissions/process_outgoing_calls=false -permissions/read_calendar=false -permissions/read_call_log=false -permissions/read_contacts=false -permissions/read_external_storage=false -permissions/read_frame_buffer=false -permissions/read_history_bookmarks=false -permissions/read_input_state=false -permissions/read_logs=false -permissions/read_phone_state=false -permissions/read_profile=false -permissions/read_sms=false -permissions/read_social_stream=false -permissions/read_sync_settings=false -permissions/read_sync_stats=false -permissions/read_user_dictionary=false -permissions/reboot=false -permissions/receive_boot_completed=false -permissions/receive_mms=false -permissions/receive_sms=false -permissions/receive_wap_push=false -permissions/record_audio=false -permissions/reorder_tasks=false -permissions/restart_packages=false -permissions/send_respond_via_message=false -permissions/send_sms=false -permissions/set_activity_watcher=false -permissions/set_alarm=false -permissions/set_always_finish=false -permissions/set_animation_scale=false -permissions/set_debug_app=false -permissions/set_orientation=false -permissions/set_pointer_speed=false -permissions/set_preferred_applications=false -permissions/set_process_limit=false -permissions/set_time=false -permissions/set_time_zone=false -permissions/set_wallpaper=false -permissions/set_wallpaper_hints=false -permissions/signal_persistent_processes=false -permissions/status_bar=false -permissions/subscribed_feeds_read=false -permissions/subscribed_feeds_write=false -permissions/system_alert_window=false -permissions/transmit_ir=false -permissions/uninstall_shortcut=false -permissions/update_device_stats=false -permissions/use_credentials=false -permissions/use_sip=false -permissions/vibrate=false -permissions/wake_lock=false -permissions/write_apn_settings=false -permissions/write_calendar=false -permissions/write_call_log=false -permissions/write_contacts=false -permissions/write_external_storage=false -permissions/write_gservices=false -permissions/write_history_bookmarks=false -permissions/write_profile=false -permissions/write_secure_settings=false -permissions/write_settings=false -permissions/write_sms=false -permissions/write_social_stream=false -permissions/write_sync_settings=false -permissions/write_user_dictionary=false diff --git a/fonts/(16)04B_30__.TTF b/fonts/(16)04B_30__.TTF Binary files differdeleted file mode 100644 index 9c2323b..0000000 --- a/fonts/(16)04B_30__.TTF +++ /dev/null diff --git a/fonts/04B_19__.TTF b/fonts/04B_19__.TTF Binary files differdeleted file mode 100644 index 6338c19..0000000 --- a/fonts/04B_19__.TTF +++ /dev/null diff --git a/fonts/04b-19.tres b/fonts/04b-19.tres deleted file mode 100644 index b086942..0000000 --- a/fonts/04b-19.tres +++ /dev/null @@ -1,7 +0,0 @@ -[gd_resource type="DynamicFont" load_steps=2 format=2] - -[ext_resource path="res://fonts/04B_19__.TTF" type="DynamicFontData" id=1] - -[resource] -size = 14 -font_data = ExtResource( 1 ) diff --git a/fonts/Paskowy.ttf b/fonts/Paskowy.ttf Binary files differdeleted file mode 100644 index 19a55dc..0000000 --- a/fonts/Paskowy.ttf +++ /dev/null diff --git a/fonts/cg-pixel-3x5-mono.ttf b/fonts/cg-pixel-3x5-mono.ttf Binary files differdeleted file mode 100644 index 5899a29..0000000 --- a/fonts/cg-pixel-3x5-mono.ttf +++ /dev/null diff --git a/fonts/fonty.tres b/fonts/fonty.tres deleted file mode 100644 index 0bc54b2..0000000 --- a/fonts/fonty.tres +++ /dev/null @@ -1,7 +0,0 @@ -[gd_resource type="DynamicFont" load_steps=2 format=2] - -[ext_resource path="res://fonts/(16)04B_30__.TTF" type="DynamicFontData" id=1] - -[resource] -size = 17 -font_data = ExtResource( 1 ) diff --git a/fonts/tiny.tres b/fonts/tiny.tres deleted file mode 100644 index 2241e9b..0000000 --- a/fonts/tiny.tres +++ /dev/null @@ -1,8 +0,0 @@ -[gd_resource type="DynamicFont" load_steps=2 format=2] - -[ext_resource path="res://fonts/cg-pixel-3x5-mono.ttf" type="DynamicFontData" id=1] - -[resource] -size = 5 -outline_color = Color( 0, 0, 0, 1 ) -font_data = ExtResource( 1 ) diff --git a/html/.gdignore b/html/.gdignore deleted file mode 100644 index e69de29..0000000 --- a/html/.gdignore +++ /dev/null diff --git a/index.apple-touch-icon.png b/index.apple-touch-icon.png Binary files differnew file mode 100644 index 0000000..b88645a --- /dev/null +++ b/index.apple-touch-icon.png diff --git a/index.audio.worklet.js b/index.audio.worklet.js new file mode 100644 index 0000000..ea4d8cb --- /dev/null +++ b/index.audio.worklet.js @@ -0,0 +1,211 @@ +/*************************************************************************/ +/* audio.worklet.js */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +class RingBuffer { + constructor(p_buffer, p_state, p_threads) { + this.buffer = p_buffer; + this.avail = p_state; + this.threads = p_threads; + this.rpos = 0; + this.wpos = 0; + } + + data_left() { + return this.threads ? Atomics.load(this.avail, 0) : this.avail; + } + + space_left() { + return this.buffer.length - this.data_left(); + } + + read(output) { + const size = this.buffer.length; + let from = 0; + let to_write = output.length; + if (this.rpos + to_write > size) { + const high = size - this.rpos; + output.set(this.buffer.subarray(this.rpos, size)); + from = high; + to_write -= high; + this.rpos = 0; + } + if (to_write) { + output.set(this.buffer.subarray(this.rpos, this.rpos + to_write), from); + } + this.rpos += to_write; + if (this.threads) { + Atomics.add(this.avail, 0, -output.length); + Atomics.notify(this.avail, 0); + } else { + this.avail -= output.length; + } + } + + write(p_buffer) { + const to_write = p_buffer.length; + const mw = this.buffer.length - this.wpos; + if (mw >= to_write) { + this.buffer.set(p_buffer, this.wpos); + this.wpos += to_write; + if (mw === to_write) { + this.wpos = 0; + } + } else { + const high = p_buffer.subarray(0, mw); + const low = p_buffer.subarray(mw); + this.buffer.set(high, this.wpos); + this.buffer.set(low); + this.wpos = low.length; + } + if (this.threads) { + Atomics.add(this.avail, 0, to_write); + Atomics.notify(this.avail, 0); + } else { + this.avail += to_write; + } + } +} + +class GodotProcessor extends AudioWorkletProcessor { + constructor() { + super(); + this.threads = false; + this.running = true; + this.lock = null; + this.notifier = null; + this.output = null; + this.output_buffer = new Float32Array(); + this.input = null; + this.input_buffer = new Float32Array(); + this.port.onmessage = (event) => { + const cmd = event.data['cmd']; + const data = event.data['data']; + this.parse_message(cmd, data); + }; + } + + process_notify() { + if (this.notifier) { + Atomics.add(this.notifier, 0, 1); + Atomics.notify(this.notifier, 0); + } + } + + parse_message(p_cmd, p_data) { + if (p_cmd === 'start' && p_data) { + const state = p_data[0]; + let idx = 0; + this.threads = true; + this.lock = state.subarray(idx, ++idx); + this.notifier = state.subarray(idx, ++idx); + const avail_in = state.subarray(idx, ++idx); + const avail_out = state.subarray(idx, ++idx); + this.input = new RingBuffer(p_data[1], avail_in, true); + this.output = new RingBuffer(p_data[2], avail_out, true); + } else if (p_cmd === 'stop') { + this.running = false; + this.output = null; + this.input = null; + } else if (p_cmd === 'start_nothreads') { + this.output = new RingBuffer(p_data[0], p_data[0].length, false); + } else if (p_cmd === 'chunk') { + this.output.write(p_data); + } + } + + static array_has_data(arr) { + return arr.length && arr[0].length && arr[0][0].length; + } + + process(inputs, outputs, parameters) { + if (!this.running) { + return false; // Stop processing. + } + if (this.output === null) { + return true; // Not ready yet, keep processing. + } + const process_input = GodotProcessor.array_has_data(inputs); + if (process_input) { + const input = inputs[0]; + const chunk = input[0].length * input.length; + if (this.input_buffer.length !== chunk) { + this.input_buffer = new Float32Array(chunk); + } + if (!this.threads) { + GodotProcessor.write_input(this.input_buffer, input); + this.port.postMessage({ 'cmd': 'input', 'data': this.input_buffer }); + } else if (this.input.space_left() >= chunk) { + GodotProcessor.write_input(this.input_buffer, input); + this.input.write(this.input_buffer); + } else { + this.port.postMessage('Input buffer is full! Skipping input frame.'); + } + } + const process_output = GodotProcessor.array_has_data(outputs); + if (process_output) { + const output = outputs[0]; + const chunk = output[0].length * output.length; + if (this.output_buffer.length !== chunk) { + this.output_buffer = new Float32Array(chunk); + } + if (this.output.data_left() >= chunk) { + this.output.read(this.output_buffer); + GodotProcessor.write_output(output, this.output_buffer); + if (!this.threads) { + this.port.postMessage({ 'cmd': 'read', 'data': chunk }); + } + } else { + this.port.postMessage('Output buffer has not enough frames! Skipping output frame.'); + } + } + this.process_notify(); + return true; + } + + static write_output(dest, source) { + const channels = dest.length; + for (let ch = 0; ch < channels; ch++) { + for (let sample = 0; sample < dest[ch].length; sample++) { + dest[ch][sample] = source[sample * channels + ch]; + } + } + } + + static write_input(dest, source) { + const channels = source.length; + for (let ch = 0; ch < channels; ch++) { + for (let sample = 0; sample < source[ch].length; sample++) { + dest[sample * channels + ch] = source[ch][sample]; + } + } + } +} + +registerProcessor('godot-processor', GodotProcessor); diff --git a/html/custom.html b/index.html index 832478b..3b58bf1 100644 --- a/html/custom.html +++ b/index.html @@ -3,7 +3,7 @@ <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, user-scalable=no" /> - <title>$GODOT_PROJECT_NAME</title> + <title>spaceshooty</title> <style type="text/css"> body { touch-action: none; @@ -127,7 +127,9 @@ visibility: visible; } </style> - $GODOT_HEAD_INCLUDE + <link id='-gd-engine-icon' rel='icon' type='image/png' href='index.icon.png' /> +<link rel='apple-touch-icon' href='index.apple-touch-icon.png'/> + </head> <body> <canvas id="canvas"> @@ -159,11 +161,11 @@ <div id="status-notice" class="godot" style="display: none"></div> </div> - <script type="text/javascript" src="$GODOT_URL"></script> + <script type="text/javascript" src="index.js"></script> <script type="text/javascript"> //<![CDATA[ - const GODOT_CONFIG = $GODOT_CONFIG; + const GODOT_CONFIG = {"args":[],"canvasResizePolicy":2,"executable":"index","experimentalVK":true,"fileSizes":{"index.pck":5315792,"index.wasm":13815789},"focusCanvas":true,"gdnativeLibs":[]}; var engine = new Engine(GODOT_CONFIG); (function () { @@ -278,3 +280,4 @@ </script> </body> </html> + diff --git a/sprites/icon.png b/index.icon.png Binary files differindex 067b40f..067b40f 100644 --- a/sprites/icon.png +++ b/index.icon.png diff --git a/index.js b/index.js new file mode 100644 index 0000000..9a9237b --- /dev/null +++ b/index.js @@ -0,0 +1,796 @@ + +var Godot = (() => { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + + return ( +function(Godot) { + Godot = Godot || {}; + +var Module=typeof Godot!="undefined"?Godot:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=(url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText});if(ENVIRONMENT_IS_WORKER){readBinary=(url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)})}readAsync=((url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=(()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()});xhr.onerror=onerror;xhr.send(null)})}setWindowTitle=(title=>document.title=title)}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var tempRet0=0;var setTempRet0=value=>{tempRet0=value};var getTempRet0=()=>tempRet0;var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||false;if(typeof WebAssembly!="object"){abort("no native wasm support detected")}function setValue(ptr,value,type="i8",noSafe){if(type.endsWith("*"))type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}function getValue(ptr,type="i8",noSafe){if(type.endsWith("*"))type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return Number(HEAPF64[ptr>>3]);default:abort("invalid type for getValue: "+type)}}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort(text)}}function getCFunc(ident){var func=Module["_"+ident];return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);function onDone(ret){if(stack!==0)stackRestore(stack);return convertReturnValue(ret)}ret=onDone(ret);return ret}function cwrap(ident,returnType,argTypes,opts){argTypes=argTypes||[];var numericArgs=argTypes.every(function(type){return type==="number"});var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return function(){return ccall(ident,returnType,argTypes,arguments,opts)}}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heapOrArray,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||33554432;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();FS.ignorePermissions=false;TTY.init();SOCKFS.root=FS.mount(SOCKFS,{},null);callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){___funcs_on_exit();callRuntimeCallbacks(__ATEXIT__);FS.quit();TTY.shutdown();IDBFS.quit();runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){{if(Module["onAbort"]){Module["onAbort"](what)}}what="Aborted("+what+")";err(what);ABORT=true;EXITSTATUS=1;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}var wasmBinaryFile;wasmBinaryFile="godot.javascript.opt.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["dk"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["rk"];addOnInit(Module["asm"]["ek"]);removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(function(instance){return instance}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch=="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func=="number"){if(callback.arg===undefined){getWasmTableEntry(func)()}else{getWasmTableEntry(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function getWasmTableEntry(funcPtr){return wasmTable.get(funcPtr)}function handleException(e){if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)}function ___call_sighandler(fp,sig){getWasmTableEntry(fp)(sig)}var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:(l,r)=>{return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start<arr.length;start++){if(arr[start]!=="")break}var end=arr.length-1;for(;end>=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i<length;i++){if(fromParts[i]!==toParts[i]){samePartsLength=i;break}}var outputParts=[];for(var i=samePartsLength;i<fromParts.length;i++){outputParts.push("..")}outputParts=outputParts.concat(toParts.slice(samePartsLength));return outputParts.join("/")}};var TTY={ttys:[],init:function(){},shutdown:function(){},register:function(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open:function(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close:function(stream){stream.tty.ops.flush(stream.tty)},flush:function(stream){stream.tty.ops.flush(stream.tty)},read:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=stream.tty.ops.get_char(stream.tty)}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:function(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.put_char){throw new FS.ErrnoError(60)}try{for(var i=0;i<length;i++){stream.tty.ops.put_char(stream.tty,buffer[offset+i])}}catch(e){throw new FS.ErrnoError(29)}if(length){stream.node.timestamp=Date.now()}return i}},default_tty_ops:{get_char:function(tty){if(!tty.input.length){var result=null;if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function zeroMemory(address,size){HEAPU8.fill(0,address,address+size)}function mmapAlloc(size){abort()}var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray:function(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage:function(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity<CAPACITY_DOUBLING_MAX?2:1.125)>>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i<size;i++)buffer[offset+i]=contents[position+i]}return size},write:function(stream,buffer,offset,length,position,canOwn){if(buffer.buffer===HEAP8.buffer){canOwn=false}if(!length)return 0;var node=stream.node;node.timestamp=Date.now();if(buffer.subarray&&(!node.contents||node.contents.subarray)){if(canOwn){node.contents=buffer.subarray(offset,offset+length);node.usedBytes=length;return length}else if(node.usedBytes===0&&position===0){node.contents=buffer.slice(offset,offset+length);node.usedBytes=length;return length}else if(position+length<=node.usedBytes){node.contents.set(buffer.subarray(offset,offset+length),position);return length}}MEMFS.expandFileStorage(node,position+length);if(node.contents.subarray&&buffer.subarray){node.contents.set(buffer.subarray(offset,offset+length),position)}else{for(var i=0;i<length;i++){node.contents[position+i]=buffer[offset+i]}}node.usedBytes=Math.max(node.usedBytes,position+length);return length},llseek:function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){position+=stream.node.usedBytes}}if(position<0){throw new FS.ErrnoError(28)}return position},allocate:function(stream,offset,length){MEMFS.expandFileStorage(stream.node,offset+length);stream.node.usedBytes=Math.max(stream.node.usedBytes,offset+length)},mmap:function(stream,address,length,position,prot,flags){if(address!==0){throw new FS.ErrnoError(28)}if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}var ptr;var allocated;var contents=stream.node.contents;if(!(flags&2)&&contents.buffer===buffer){allocated=false;ptr=contents.byteOffset}else{if(position>0||position+length<contents.length){if(contents.subarray){contents=contents.subarray(position,position+length)}else{contents=Array.prototype.slice.call(contents,position,position+length)}}allocated=true;ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}HEAP8.set(contents,ptr)}return{ptr:ptr,allocated:allocated}},msync:function(stream,buffer,offset,length,mmapFlags){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(mmapFlags&2){return 0}var bytesWritten=MEMFS.stream_ops.write(stream,buffer,0,length,offset,false);return 0}}};function asyncLoad(url,onload,onerror,noRunDep){var dep=!noRunDep?getUniqueRunDependency("al "+url):"";readAsync(url,function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}});if(dep)addRunDependency(dep)}var IDBFS={dbs:{},indexedDB:()=>{if(typeof indexedDB!="undefined")return indexedDB;var ret=null;if(typeof window=="object")ret=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;assert(ret,"IDBFS used, but indexedDB not supported");return ret},DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function(mount){return MEMFS.mount.apply(null,arguments)},syncfs:(mount,populate,callback)=>{IDBFS.getLocalSet(mount,(err,local)=>{if(err)return callback(err);IDBFS.getRemoteSet(mount,(err,remote)=>{if(err)return callback(err);var src=populate?remote:local;var dst=populate?local:remote;IDBFS.reconcile(src,dst,callback)})})},quit:()=>{Object.values(IDBFS.dbs).forEach(value=>value.close());IDBFS.dbs={}},getDB:(name,callback)=>{var db=IDBFS.dbs[name];if(db){return callback(null,db)}var req;try{req=IDBFS.indexedDB().open(name,IDBFS.DB_VERSION)}catch(e){return callback(e)}if(!req){return callback("Unable to connect to IndexedDB")}req.onupgradeneeded=(e=>{var db=e.target.result;var transaction=e.target.transaction;var fileStore;if(db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)){fileStore=transaction.objectStore(IDBFS.DB_STORE_NAME)}else{fileStore=db.createObjectStore(IDBFS.DB_STORE_NAME)}if(!fileStore.indexNames.contains("timestamp")){fileStore.createIndex("timestamp","timestamp",{unique:false})}});req.onsuccess=(()=>{db=req.result;IDBFS.dbs[name]=db;callback(null,db)});req.onerror=(e=>{callback(this.error);e.preventDefault()})},getLocalSet:(mount,callback)=>{var entries={};function isRealDir(p){return p!=="."&&p!==".."}function toAbsolute(root){return p=>{return PATH.join2(root,p)}}var check=FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));while(check.length){var path=check.pop();var stat;try{stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){check.push.apply(check,FS.readdir(path).filter(isRealDir).map(toAbsolute(path)))}entries[path]={"timestamp":stat.mtime}}return callback(null,{type:"local",entries:entries})},getRemoteSet:(mount,callback)=>{var entries={};IDBFS.getDB(mount.mountpoint,(err,db)=>{if(err)return callback(err);try{var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readonly");transaction.onerror=(e=>{callback(this.error);e.preventDefault()});var store=transaction.objectStore(IDBFS.DB_STORE_NAME);var index=store.index("timestamp");index.openKeyCursor().onsuccess=(event=>{var cursor=event.target.result;if(!cursor){return callback(null,{type:"remote",db:db,entries:entries})}entries[cursor.primaryKey]={"timestamp":cursor.key};cursor.continue()})}catch(e){return callback(e)}})},loadLocalEntry:(path,callback)=>{var stat,node;try{var lookup=FS.lookupPath(path);node=lookup.node;stat=FS.stat(path)}catch(e){return callback(e)}if(FS.isDir(stat.mode)){return callback(null,{"timestamp":stat.mtime,"mode":stat.mode})}else if(FS.isFile(stat.mode)){node.contents=MEMFS.getFileDataAsTypedArray(node);return callback(null,{"timestamp":stat.mtime,"mode":stat.mode,"contents":node.contents})}else{return callback(new Error("node type not supported"))}},storeLocalEntry:(path,entry,callback)=>{try{if(FS.isDir(entry["mode"])){FS.mkdirTree(path,entry["mode"])}else if(FS.isFile(entry["mode"])){FS.writeFile(path,entry["contents"],{canOwn:true})}else{return callback(new Error("node type not supported"))}FS.chmod(path,entry["mode"]);FS.utime(path,entry["timestamp"],entry["timestamp"])}catch(e){return callback(e)}callback(null)},removeLocalEntry:(path,callback)=>{try{var stat=FS.stat(path);if(FS.isDir(stat.mode)){FS.rmdir(path)}else if(FS.isFile(stat.mode)){FS.unlink(path)}}catch(e){return callback(e)}callback(null)},loadRemoteEntry:(store,path,callback)=>{var req=store.get(path);req.onsuccess=(event=>{callback(null,event.target.result)});req.onerror=(e=>{callback(this.error);e.preventDefault()})},storeRemoteEntry:(store,path,entry,callback)=>{try{var req=store.put(entry,path)}catch(e){callback(e);return}req.onsuccess=(()=>{callback(null)});req.onerror=(e=>{callback(this.error);e.preventDefault()})},removeRemoteEntry:(store,path,callback)=>{var req=store.delete(path);req.onsuccess=(()=>{callback(null)});req.onerror=(e=>{callback(this.error);e.preventDefault()})},reconcile:(src,dst,callback)=>{var total=0;var create=[];Object.keys(src.entries).forEach(function(key){var e=src.entries[key];var e2=dst.entries[key];if(!e2||e["timestamp"].getTime()!=e2["timestamp"].getTime()){create.push(key);total++}});var remove=[];Object.keys(dst.entries).forEach(function(key){if(!src.entries[key]){remove.push(key);total++}});if(!total){return callback(null)}var errored=false;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err&&!errored){errored=true;return callback(err)}}transaction.onerror=(e=>{done(this.error);e.preventDefault()});transaction.oncomplete=(e=>{if(!errored){callback(null)}});create.sort().forEach(path=>{if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,(err,entry)=>{if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)})}else{IDBFS.loadLocalEntry(path,(err,entry)=>{if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)})}});remove.sort().reverse().forEach(path=>{if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}})}};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:(path,opts={})=>{path=PATH_FS.resolve(FS.cwd(),path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(p=>!!p),false);var current=FS.root;var current_path="/";for(var i=0;i<parts.length;i++){var islast=i===parts.length-1;if(islast&&opts.parent){break}current=FS.lookupNode(current,parts[i]);current_path=PATH.join2(current_path,parts[i]);if(FS.isMountpoint(current)){if(!islast||islast&&opts.follow_mount){current=current.mounted.root}}if(!islast||opts.follow){var count=0;while(FS.isLink(current.mode)){var link=FS.readlink(current_path);current_path=PATH_FS.resolve(PATH.dirname(current_path),link);var lookup=FS.lookupPath(current_path,{recurse_count:opts.recurse_count+1});current=lookup.node;if(count++>40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:node=>{var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:(parentid,name)=>{var hash=0;for(var i=0;i<name.length;i++){hash=(hash<<5)-hash+name.charCodeAt(i)|0}return(parentid+hash>>>0)%FS.nameTable.length},hashAddNode:node=>{var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:node=>{var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:(parent,name)=>{var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:(parent,name,mode,rdev)=>{var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:node=>{FS.hashRemoveNode(node)},isRoot:node=>{return node===node.parent},isMountpoint:node=>{return!!node.mounted},isFile:mode=>{return(mode&61440)===32768},isDir:mode=>{return(mode&61440)===16384},isLink:mode=>{return(mode&61440)===40960},isChrdev:mode=>{return(mode&61440)===8192},isBlkdev:mode=>{return(mode&61440)===24576},isFIFO:mode=>{return(mode&61440)===4096},isSocket:mode=>{return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:str=>{var flags=FS.flagModes[str];if(typeof flags=="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:flag=>{var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:(node,perms)=>{if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup:dir=>{var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:(dir,name)=>{try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:(dir,name,isdir)=>{var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:(node,flags)=>{if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:(fd_start=0,fd_end=FS.MAX_OPEN_FDS)=>{for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:fd=>FS.streams[fd],createStream:(stream,fd_start,fd_end)=>{if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}},flags:{get:function(){return this.shared.flags},set:function(val){this.shared.flags=val}},position:{get function(){return this.shared.position},set:function(val){this.shared.position=val}}}}stream=Object.assign(new FS.FSStream,stream);var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:fd=>{FS.streams[fd]=null},chrdev_stream_ops:{open:stream=>{var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:()=>{throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice:(dev,ops)=>{FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts:mount=>{var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:(populate,callback)=>{if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:(type,opts,mountpoint)=>{var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:mountpoint=>{var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:(parent,name)=>{return parent.node_ops.lookup(parent,name)},mknod:(path,mode,dev)=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:(path,mode)=>{mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:(path,mode)=>{mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:(path,mode)=>{var dirs=path.split("/");var d="";for(var i=0;i<dirs.length;++i){if(!dirs[i])continue;d+="/"+dirs[i];try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev:(path,mode,dev)=>{if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink:(oldpath,newpath)=>{if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename:(old_path,new_path)=>{var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir:path=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(54)}return node.node_ops.readdir(node)},unlink:path=>{var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink:path=>{var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return PATH_FS.resolve(FS.getPath(link.parent),link.node_ops.readlink(link))},stat:(path,dontFollow)=>{var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node){throw new FS.ErrnoError(44)}if(!node.node_ops.getattr){throw new FS.ErrnoError(63)}return node.node_ops.getattr(node)},lstat:path=>{return FS.stat(path,true)},chmod:(path,mode,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})},lchmod:(path,mode)=>{FS.chmod(path,mode,true)},fchmod:(fd,mode)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chmod(stream.node,mode)},chown:(path,uid,gid,dontFollow)=>{var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}node.node_ops.setattr(node,{timestamp:Date.now()})},lchown:(path,uid,gid)=>{FS.chown(path,uid,gid,true)},fchown:(fd,uid,gid)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}FS.chown(stream.node,uid,gid)},truncate:(path,len)=>{if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(63)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})},ftruncate:(fd,len)=>{var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.truncate(stream.node,len)},utime:(path,atime,mtime)=>{var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})},open:(path,flags,mode)=>{if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode=="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path=="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else{node=FS.mknod(path,mode,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close:stream=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed:stream=>{return stream.fd===null},llseek:(stream,offset,whence)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read:(stream,buffer,offset,length,position)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write:(stream,buffer,offset,length,position,canOwn)=>{if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},allocate:(stream,offset,length)=>{if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(offset<0||length<=0){throw new FS.ErrnoError(28)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(stream.node.mode)){throw new FS.ErrnoError(43)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(138)}stream.stream_ops.allocate(stream,offset,length)},mmap:(stream,address,length,position,prot,flags)=>{if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}return stream.stream_ops.mmap(stream,address,length,position,prot,flags)},msync:(stream,buffer,offset,length,mmapFlags)=>{if(!stream||!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},munmap:stream=>0,ioctl:(stream,cmd,arg)=>{if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile:(path,opts={})=>{opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile:(path,data,opts={})=>{opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir:path=>{var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories:()=>{FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices:()=>{FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var random_device=getRandomDevice();FS.createDevice("/dev","random",random_device);FS.createDevice("/dev","urandom",random_device);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories:()=>{FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount:()=>{var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup:(parent,name)=>{var fd=+name;var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams:()=>{if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},ensureErrnoError:()=>{if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack="<generic error, no stack>"})},staticInit:()=>{FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS,"IDBFS":IDBFS}},init:(input,output,error)=>{FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit:()=>{FS.init.initialized=false;___stdio_exit();for(var i=0;i<FS.streams.length;i++){var stream=FS.streams[i];if(!stream){continue}FS.close(stream)}},getMode:(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode},findObject:(path,dontResolveLastLink)=>{var ret=FS.analyzePath(path,dontResolveLastLink);if(ret.exists){return ret.object}else{return null}},analyzePath:(path,dontResolveLastLink)=>{try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath:(parent,path,canRead,canWrite)=>{parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){}parent=current}return current},createFile:(parent,name,properties,canRead,canWrite)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile:(parent,name,data,canRead,canWrite,canOwn)=>{var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS.getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;i<len;++i)arr[i]=data.charCodeAt(i);data=arr}FS.chmod(node,mode|146);var stream=FS.open(node,577);FS.write(stream,data,0,data.length,0,canOwn);FS.close(stream);FS.chmod(node,mode)}return node},createDevice:(parent,name,input,output)=>{var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS.getMode(!!input,!!output);if(!FS.createDevice.major)FS.createDevice.major=64;var dev=FS.makedev(FS.createDevice.major++,0);FS.registerDevice(dev,{open:stream=>{stream.seekable=false},close:stream=>{if(output&&output.buffer&&output.buffer.length){output(10)}},read:(stream,buffer,offset,length,pos)=>{var bytesRead=0;for(var i=0;i<length;i++){var result;try{result=input()}catch(e){throw new FS.ErrnoError(29)}if(result===undefined&&bytesRead===0){throw new FS.ErrnoError(6)}if(result===null||result===undefined)break;bytesRead++;buffer[offset+i]=result}if(bytesRead){stream.node.timestamp=Date.now()}return bytesRead},write:(stream,buffer,offset,length,pos)=>{for(var i=0;i<length;i++){try{output(buffer[offset+i])}catch(e){throw new FS.ErrnoError(29)}}if(length){stream.node.timestamp=Date.now()}return i}});return FS.mkdev(path,mode,dev)},forceLoadFile:obj=>{if(obj.isDevice||obj.isFolder||obj.link||obj.contents)return true;if(typeof XMLHttpRequest!="undefined"){throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.")}else if(read_){try{obj.contents=intArrayFromString(read_(obj.url),true);obj.usedBytes=obj.contents.length}catch(e){throw new FS.ErrnoError(29)}}else{throw new Error("Cannot load without read() or XMLHttpRequest.")}},createLazyFile:(parent,name,url,canRead,canWrite)=>{function LazyUint8Array(){this.lengthKnown=false;this.chunks=[]}LazyUint8Array.prototype.get=function LazyUint8Array_get(idx){if(idx>this.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=((stream,buffer,offset,length,position)=>{FS.forceLoadFile(node);var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i<size;i++){buffer[offset+i]=contents[position+i]}}else{for(var i=0;i<size;i++){buffer[offset+i]=contents.get(position+i)}}return size});node.stream_ops=stream_ops;return node},createPreloadedFile:(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency("cp "+fullname);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS.createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(Browser.handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}},indexedDB:()=>{return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},DB_NAME:()=>{return"EM_FS_"+window.location.pathname},DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:(paths,onload,onerror)=>{onload=onload||(()=>{});onerror=onerror||(()=>{});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=(()=>{out("creating db");var db=openRequest.result;db.createObjectStore(FS.DB_STORE_NAME)});openRequest.onsuccess=(()=>{var db=openRequest.result;var transaction=db.transaction([FS.DB_STORE_NAME],"readwrite");var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var putRequest=files.put(FS.analyzePath(path).object.contents,path);putRequest.onsuccess=(()=>{ok++;if(ok+fail==total)finish()});putRequest.onerror=(()=>{fail++;if(ok+fail==total)finish()})});transaction.onerror=onerror});openRequest.onerror=onerror},loadFilesFromDB:(paths,onload,onerror)=>{onload=onload||(()=>{});onerror=onerror||(()=>{});var indexedDB=FS.indexedDB();try{var openRequest=indexedDB.open(FS.DB_NAME(),FS.DB_VERSION)}catch(e){return onerror(e)}openRequest.onupgradeneeded=onerror;openRequest.onsuccess=(()=>{var db=openRequest.result;try{var transaction=db.transaction([FS.DB_STORE_NAME],"readonly")}catch(e){onerror(e);return}var files=transaction.objectStore(FS.DB_STORE_NAME);var ok=0,fail=0,total=paths.length;function finish(){if(fail==0)onload();else onerror()}paths.forEach(path=>{var getRequest=files.get(path);getRequest.onsuccess=(()=>{if(FS.analyzePath(path).exists){FS.unlink(path)}FS.createDataFile(PATH.dirname(path),PATH.basename(path),getRequest.result,true,true,true);ok++;if(ok+fail==total)finish()});getRequest.onerror=(()=>{fail++;if(ok+fail==total)finish()})});transaction.onerror=onerror});openRequest.onerror=onerror}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt:function(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=FS.getStream(dirfd);if(!dirstream)throw new FS.ErrnoError(8);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat:function(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream}};function ___syscall__newselect(nfds,readfds,writefds,exceptfds,timeout){try{var total=0;var srcReadLow=readfds?HEAP32[readfds>>2]:0,srcReadHigh=readfds?HEAP32[readfds+4>>2]:0;var srcWriteLow=writefds?HEAP32[writefds>>2]:0,srcWriteHigh=writefds?HEAP32[writefds+4>>2]:0;var srcExceptLow=exceptfds?HEAP32[exceptfds>>2]:0,srcExceptHigh=exceptfds?HEAP32[exceptfds+4>>2]:0;var dstReadLow=0,dstReadHigh=0;var dstWriteLow=0,dstWriteHigh=0;var dstExceptLow=0,dstExceptHigh=0;var allLow=(readfds?HEAP32[readfds>>2]:0)|(writefds?HEAP32[writefds>>2]:0)|(exceptfds?HEAP32[exceptfds>>2]:0);var allHigh=(readfds?HEAP32[readfds+4>>2]:0)|(writefds?HEAP32[writefds+4>>2]:0)|(exceptfds?HEAP32[exceptfds+4>>2]:0);var check=function(fd,low,high,val){return fd<32?low&val:high&val};for(var fd=0;fd<nfds;fd++){var mask=1<<fd%32;if(!check(fd,allLow,allHigh,mask)){continue}var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);var flags=SYSCALLS.DEFAULT_POLLMASK;if(stream.stream_ops.poll){flags=stream.stream_ops.poll(stream)}if(flags&1&&check(fd,srcReadLow,srcReadHigh,mask)){fd<32?dstReadLow=dstReadLow|mask:dstReadHigh=dstReadHigh|mask;total++}if(flags&4&&check(fd,srcWriteLow,srcWriteHigh,mask)){fd<32?dstWriteLow=dstWriteLow|mask:dstWriteHigh=dstWriteHigh|mask;total++}if(flags&2&&check(fd,srcExceptLow,srcExceptHigh,mask)){fd<32?dstExceptLow=dstExceptLow|mask:dstExceptHigh=dstExceptHigh|mask;total++}}if(readfds){HEAP32[readfds>>2]=dstReadLow;HEAP32[readfds+4>>2]=dstReadHigh}if(writefds){HEAP32[writefds>>2]=dstWriteLow;HEAP32[writefds+4>>2]=dstWriteHigh}if(exceptfds){HEAP32[exceptfds>>2]=dstExceptLow;HEAP32[exceptfds+4>>2]=dstExceptHigh}return total}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}var SOCKFS={mount:function(mount){Module["websocket"]=Module["websocket"]&&"object"===typeof Module["websocket"]?Module["websocket"]:{};Module["websocket"]._callbacks={};Module["websocket"]["on"]=function(event,callback){if("function"===typeof callback){this._callbacks[event]=callback}return this};Module["websocket"].emit=function(event,param){if("function"===typeof this._callbacks[event]){this._callbacks[event].call(this,param)}};return FS.createNode(null,"/",16384|511,0)},createSocket:function(family,type,protocol){type&=~526336;var streaming=type==1;if(streaming&&protocol&&protocol!=6){throw new FS.ErrnoError(66)}var sock={family:family,type:type,protocol:protocol,server:null,error:null,peers:{},pending:[],recv_queue:[],sock_ops:SOCKFS.websocket_sock_ops};var name=SOCKFS.nextname();var node=FS.createNode(SOCKFS.root,name,49152,0);node.sock=sock;var stream=FS.createStream({path:name,node:node,flags:2,seekable:false,stream_ops:SOCKFS.stream_ops});sock.stream=stream;return sock},getSocket:function(fd){var stream=FS.getStream(fd);if(!stream||!FS.isSocket(stream.node.mode)){return null}return stream.node.sock},stream_ops:{poll:function(stream){var sock=stream.node.sock;return sock.sock_ops.poll(sock)},ioctl:function(stream,request,varargs){var sock=stream.node.sock;return sock.sock_ops.ioctl(sock,request,varargs)},read:function(stream,buffer,offset,length,position){var sock=stream.node.sock;var msg=sock.sock_ops.recvmsg(sock,length);if(!msg){return 0}buffer.set(msg.buffer,offset);return msg.buffer.length},write:function(stream,buffer,offset,length,position){var sock=stream.node.sock;return sock.sock_ops.sendmsg(sock,buffer,offset,length)},close:function(stream){var sock=stream.node.sock;sock.sock_ops.close(sock)}},nextname:function(){if(!SOCKFS.nextname.current){SOCKFS.nextname.current=0}return"socket["+SOCKFS.nextname.current+++"]"},websocket_sock_ops:{createPeer:function(sock,addr,port){var ws;if(typeof addr=="object"){ws=addr;addr=null;port=null}if(ws){if(ws._socket){addr=ws._socket.remoteAddress;port=ws._socket.remotePort}else{var result=/ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);if(!result){throw new Error("WebSocket URL must be in the format ws(s)://address:port")}addr=result[1];port=parseInt(result[2],10)}}else{try{var runtimeConfig=Module["websocket"]&&"object"===typeof Module["websocket"];var url="ws:#".replace("#","//");if(runtimeConfig){if("string"===typeof Module["websocket"]["url"]){url=Module["websocket"]["url"]}}if(url==="ws://"||url==="wss://"){var parts=addr.split("/");url=url+parts[0]+":"+port+"/"+parts.slice(1).join("/")}var subProtocols="binary";if(runtimeConfig){if("string"===typeof Module["websocket"]["subprotocol"]){subProtocols=Module["websocket"]["subprotocol"]}}var opts=undefined;if(subProtocols!=="null"){subProtocols=subProtocols.replace(/^ +| +$/g,"").split(/ *, */);opts=subProtocols}if(runtimeConfig&&null===Module["websocket"]["subprotocol"]){subProtocols="null";opts=undefined}var WebSocketConstructor;{WebSocketConstructor=WebSocket}ws=new WebSocketConstructor(url,opts);ws.binaryType="arraybuffer"}catch(e){throw new FS.ErrnoError(23)}}var peer={addr:addr,port:port,socket:ws,dgram_send_queue:[]};SOCKFS.websocket_sock_ops.addPeer(sock,peer);SOCKFS.websocket_sock_ops.handlePeerEvents(sock,peer);if(sock.type===2&&typeof sock.sport!="undefined"){peer.dgram_send_queue.push(new Uint8Array([255,255,255,255,"p".charCodeAt(0),"o".charCodeAt(0),"r".charCodeAt(0),"t".charCodeAt(0),(sock.sport&65280)>>8,sock.sport&255]))}return peer},getPeer:function(sock,addr,port){return sock.peers[addr+":"+port]},addPeer:function(sock,peer){sock.peers[peer.addr+":"+peer.port]=peer},removePeer:function(sock,peer){delete sock.peers[peer.addr+":"+peer.port]},handlePeerEvents:function(sock,peer){var first=true;var handleOpen=function(){Module["websocket"].emit("open",sock.stream.fd);try{var queued=peer.dgram_send_queue.shift();while(queued){peer.socket.send(queued);queued=peer.dgram_send_queue.shift()}}catch(e){peer.socket.close()}};function handleMessage(data){if(typeof data=="string"){var encoder=new TextEncoder;data=encoder.encode(data)}else{assert(data.byteLength!==undefined);if(data.byteLength==0){return}else{data=new Uint8Array(data)}}var wasfirst=first;first=false;if(wasfirst&&data.length===10&&data[0]===255&&data[1]===255&&data[2]===255&&data[3]===255&&data[4]==="p".charCodeAt(0)&&data[5]==="o".charCodeAt(0)&&data[6]==="r".charCodeAt(0)&&data[7]==="t".charCodeAt(0)){var newport=data[8]<<8|data[9];SOCKFS.websocket_sock_ops.removePeer(sock,peer);peer.port=newport;SOCKFS.websocket_sock_ops.addPeer(sock,peer);return}sock.recv_queue.push({addr:peer.addr,port:peer.port,data:data});Module["websocket"].emit("message",sock.stream.fd)}if(ENVIRONMENT_IS_NODE){peer.socket.on("open",handleOpen);peer.socket.on("message",function(data,isBinary){if(!isBinary){return}handleMessage(new Uint8Array(data).buffer)});peer.socket.on("close",function(){Module["websocket"].emit("close",sock.stream.fd)});peer.socket.on("error",function(error){sock.error=14;Module["websocket"].emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])})}else{peer.socket.onopen=handleOpen;peer.socket.onclose=function(){Module["websocket"].emit("close",sock.stream.fd)};peer.socket.onmessage=function peer_socket_onmessage(event){handleMessage(event.data)};peer.socket.onerror=function(error){sock.error=14;Module["websocket"].emit("error",[sock.stream.fd,sock.error,"ECONNREFUSED: Connection refused"])}}},poll:function(sock){if(sock.type===1&&sock.server){return sock.pending.length?64|1:0}var mask=0;var dest=sock.type===1?SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport):null;if(sock.recv_queue.length||!dest||dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=64|1}if(!dest||dest&&dest.socket.readyState===dest.socket.OPEN){mask|=4}if(dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=16}return mask},ioctl:function(sock,request,arg){switch(request){case 21531:var bytes=0;if(sock.recv_queue.length){bytes=sock.recv_queue[0].data.length}HEAP32[arg>>2]=bytes;return 0;default:return 28}},close:function(sock){if(sock.server){try{sock.server.close()}catch(e){}sock.server=null}var peers=Object.keys(sock.peers);for(var i=0;i<peers.length;i++){var peer=sock.peers[peers[i]];try{peer.socket.close()}catch(e){}SOCKFS.websocket_sock_ops.removePeer(sock,peer)}return 0},bind:function(sock,addr,port){if(typeof sock.saddr!="undefined"||typeof sock.sport!="undefined"){throw new FS.ErrnoError(28)}sock.saddr=addr;sock.sport=port;if(sock.type===2){if(sock.server){sock.server.close();sock.server=null}try{sock.sock_ops.listen(sock,0)}catch(e){if(!(e instanceof FS.ErrnoError))throw e;if(e.errno!==138)throw e}}},connect:function(sock,addr,port){if(sock.server){throw new FS.ErrnoError(138)}if(typeof sock.daddr!="undefined"&&typeof sock.dport!="undefined"){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(dest){if(dest.socket.readyState===dest.socket.CONNECTING){throw new FS.ErrnoError(7)}else{throw new FS.ErrnoError(30)}}}var peer=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port);sock.daddr=peer.addr;sock.dport=peer.port;throw new FS.ErrnoError(26)},listen:function(sock,backlog){if(!ENVIRONMENT_IS_NODE){throw new FS.ErrnoError(138)}},accept:function(listensock){if(!listensock.server||!listensock.pending.length){throw new FS.ErrnoError(28)}var newsock=listensock.pending.shift();newsock.stream.flags=listensock.stream.flags;return newsock},getname:function(sock,peer){var addr,port;if(peer){if(sock.daddr===undefined||sock.dport===undefined){throw new FS.ErrnoError(53)}addr=sock.daddr;port=sock.dport}else{addr=sock.saddr||0;port=sock.sport||0}return{addr:addr,port:port}},sendmsg:function(sock,buffer,offset,length,addr,port){if(sock.type===2){if(addr===undefined||port===undefined){addr=sock.daddr;port=sock.dport}if(addr===undefined||port===undefined){throw new FS.ErrnoError(17)}}else{addr=sock.daddr;port=sock.dport}var dest=SOCKFS.websocket_sock_ops.getPeer(sock,addr,port);if(sock.type===1){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){throw new FS.ErrnoError(53)}else if(dest.socket.readyState===dest.socket.CONNECTING){throw new FS.ErrnoError(6)}}if(ArrayBuffer.isView(buffer)){offset+=buffer.byteOffset;buffer=buffer.buffer}var data;data=buffer.slice(offset,offset+length);if(sock.type===2){if(!dest||dest.socket.readyState!==dest.socket.OPEN){if(!dest||dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){dest=SOCKFS.websocket_sock_ops.createPeer(sock,addr,port)}dest.dgram_send_queue.push(data);return length}}try{dest.socket.send(data);return length}catch(e){throw new FS.ErrnoError(28)}},recvmsg:function(sock,length){if(sock.type===1&&sock.server){throw new FS.ErrnoError(53)}var queued=sock.recv_queue.shift();if(!queued){if(sock.type===1){var dest=SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport);if(!dest){throw new FS.ErrnoError(53)}else if(dest.socket.readyState===dest.socket.CLOSING||dest.socket.readyState===dest.socket.CLOSED){return null}else{throw new FS.ErrnoError(6)}}else{throw new FS.ErrnoError(6)}}var queuedLength=queued.data.byteLength||queued.data.length;var queuedOffset=queued.data.byteOffset||0;var queuedBuffer=queued.data.buffer||queued.data;var bytesRead=Math.min(length,queuedLength);var res={buffer:new Uint8Array(queuedBuffer,queuedOffset,bytesRead),addr:queued.addr,port:queued.port};if(sock.type===1&&bytesRead<queuedLength){var bytesRemaining=queuedLength-bytesRead;queued.data=new Uint8Array(queuedBuffer,queuedOffset+bytesRead,bytesRemaining);sock.recv_queue.unshift(queued)}return res}}};function getSocketFromFD(fd){var socket=SOCKFS.getSocket(fd);if(!socket)throw new FS.ErrnoError(8);return socket}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}function inetPton4(str){var b=str.split(".");for(var i=0;i<4;i++){var tmp=Number(b[i]);if(isNaN(tmp))return null;b[i]=tmp}return(b[0]|b[1]<<8|b[2]<<16|b[3]<<24)>>>0}function jstoi_q(str){return parseInt(str)}function inetPton6(str){var words;var w,offset,z;var valid6regx=/^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i;var parts=[];if(!valid6regx.test(str)){return null}if(str==="::"){return[0,0,0,0,0,0,0,0]}if(str.startsWith("::")){str=str.replace("::","Z:")}else{str=str.replace("::",":Z:")}if(str.indexOf(".")>0){str=str.replace(new RegExp("[.]","g"),":");words=str.split(":");words[words.length-4]=jstoi_q(words[words.length-4])+jstoi_q(words[words.length-3])*256;words[words.length-3]=jstoi_q(words[words.length-2])+jstoi_q(words[words.length-1])*256;words=words.slice(0,words.length-2)}else{words=str.split(":")}offset=0;z=0;for(w=0;w<words.length;w++){if(typeof words[w]=="string"){if(words[w]==="Z"){for(z=0;z<8-words.length+1;z++){parts[w+z]=0}offset=z-1}else{parts[w+offset]=_htons(parseInt(words[w],16))}}else{parts[w+offset]=words[w]}}return[parts[1]<<16|parts[0],parts[3]<<16|parts[2],parts[5]<<16|parts[4],parts[7]<<16|parts[6]]}function writeSockaddr(sa,family,addr,port,addrlen){switch(family){case 2:addr=inetPton4(addr);zeroMemory(sa,16);if(addrlen){HEAP32[addrlen>>2]=16}HEAP16[sa>>1]=family;HEAP32[sa+4>>2]=addr;HEAP16[sa+2>>1]=_htons(port);break;case 10:addr=inetPton6(addr);zeroMemory(sa,28);if(addrlen){HEAP32[addrlen>>2]=28}HEAP32[sa>>2]=family;HEAP32[sa+8>>2]=addr[0];HEAP32[sa+12>>2]=addr[1];HEAP32[sa+16>>2]=addr[2];HEAP32[sa+20>>2]=addr[3];HEAP16[sa+2>>1]=_htons(port);break;default:return 5}return 0}var DNS={address_map:{id:1,addrs:{},names:{}},lookup_name:function(name){var res=inetPton4(name);if(res!==null){return name}res=inetPton6(name);if(res!==null){return name}var addr;if(DNS.address_map.addrs[name]){addr=DNS.address_map.addrs[name]}else{var id=DNS.address_map.id++;assert(id<65535,"exceeded max address mappings of 65535");addr="172.29."+(id&255)+"."+(id&65280);DNS.address_map.names[addr]=name;DNS.address_map.addrs[name]=addr}return addr},lookup_addr:function(addr){if(DNS.address_map.names[addr]){return DNS.address_map.names[addr]}return null}};function ___syscall_accept4(fd,addr,addrlen,flags){try{var sock=getSocketFromFD(fd);var newsock=sock.sock_ops.accept(sock);if(addr){var errno=writeSockaddr(addr,newsock.family,DNS.lookup_name(newsock.daddr),newsock.dport,addrlen)}return newsock.stream.fd}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function inetNtop4(addr){return(addr&255)+"."+(addr>>8&255)+"."+(addr>>16&255)+"."+(addr>>24&255)}function inetNtop6(ints){var str="";var word=0;var longest=0;var lastzero=0;var zstart=0;var len=0;var i=0;var parts=[ints[0]&65535,ints[0]>>16,ints[1]&65535,ints[1]>>16,ints[2]&65535,ints[2]>>16,ints[3]&65535,ints[3]>>16];var hasipv4=true;var v4part="";for(i=0;i<5;i++){if(parts[i]!==0){hasipv4=false;break}}if(hasipv4){v4part=inetNtop4(parts[6]|parts[7]<<16);if(parts[5]===-1){str="::ffff:";str+=v4part;return str}if(parts[5]===0){str="::";if(v4part==="0.0.0.0")v4part="";if(v4part==="0.0.0.1")v4part="1";str+=v4part;return str}}for(word=0;word<8;word++){if(parts[word]===0){if(word-lastzero>1){len=0}lastzero=word;len++}if(len>longest){longest=len;zstart=word-longest+1}}for(word=0;word<8;word++){if(longest>1){if(parts[word]===0&&word>=zstart&&word<zstart+longest){if(word===zstart){str+=":";if(zstart===0)str+=":"}continue}}str+=Number(_ntohs(parts[word]&65535)).toString(16);str+=word<7?":":""}return str}function readSockaddr(sa,salen){var family=HEAP16[sa>>1];var port=_ntohs(HEAPU16[sa+2>>1]);var addr;switch(family){case 2:if(salen!==16){return{errno:28}}addr=HEAP32[sa+4>>2];addr=inetNtop4(addr);break;case 10:if(salen!==28){return{errno:28}}addr=[HEAP32[sa+8>>2],HEAP32[sa+12>>2],HEAP32[sa+16>>2],HEAP32[sa+20>>2]];addr=inetNtop6(addr);break;default:return{errno:5}}return{family:family,addr:addr,port:port}}function getSocketAddress(addrp,addrlen,allowNull){if(allowNull&&addrp===0)return null;var info=readSockaddr(addrp,addrlen);if(info.errno)throw new FS.ErrnoError(info.errno);info.addr=DNS.lookup_addr(info.addr)||info.addr;return info}function ___syscall_bind(fd,addr,addrlen){try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.bind(sock,info.addr,info.port);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_chdir(path){try{path=SYSCALLS.getStr(path);FS.chdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_chmod(path,mode){try{path=SYSCALLS.getStr(path);FS.chmod(path,mode);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_connect(fd,addr,addrlen){try{var sock=getSocketFromFD(fd);var info=getSocketAddress(addr,addrlen);sock.sock_ops.connect(sock,info.addr,info.port);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_faccessat(dirfd,path,amode,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(amode&~7){return-28}var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.createStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 5:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 6:case 7:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd)+1;if(size<cwdLengthInBytes)return-68;stringToUTF8(cwd,buf,size);return cwdLengthInBytes}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_getdents64(fd,dirp,count){try{var stream=SYSCALLS.getStreamFromFD(fd);if(!stream.getdents){stream.getdents=FS.readdir(stream.path)}var struct_size=280;var pos=0;var off=FS.llseek(stream,0,1);var idx=Math.floor(off/struct_size);while(idx<stream.getdents.length&&pos+struct_size<=count){var id;var type;var name=stream.getdents[idx];if(name==="."){id=stream.node.id;type=4}else if(name===".."){var lookup=FS.lookupPath(stream.path,{parent:true});id=lookup.node.id;type=4}else{var child=FS.lookupNode(stream.node,name);id=child.id;type=FS.isChrdev(child.mode)?2:FS.isDir(child.mode)?4:FS.isLink(child.mode)?10:8}tempI64=[id>>>0,(tempDouble=id,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos>>2]=tempI64[0],HEAP32[dirp+pos+4>>2]=tempI64[1];tempI64=[(idx+1)*struct_size>>>0,(tempDouble=(idx+1)*struct_size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[dirp+pos+8>>2]=tempI64[0],HEAP32[dirp+pos+12>>2]=tempI64[1];HEAP16[dirp+pos+16>>1]=280;HEAP8[dirp+pos+18>>0]=type;stringToUTF8(name,dirp+pos+19,256);pos+=struct_size;idx+=1}FS.llseek(stream,idx*struct_size,0);return pos}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_getsockname(fd,addr,addrlen){try{err("__syscall_getsockname "+fd);var sock=getSocketFromFD(fd);var errno=writeSockaddr(addr,sock.family,DNS.lookup_name(sock.saddr||"0.0.0.0"),sock.sport,addrlen);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_getsockopt(fd,level,optname,optval,optlen){try{var sock=getSocketFromFD(fd);if(level===1){if(optname===4){HEAP32[optval>>2]=sock.error;HEAP32[optlen>>2]=4;sock.error=null;return 0}}return-50}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_listen(fd,backlog){try{var sock=getSocketFromFD(fd);sock.sock_ops.listen(sock,backlog);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_lstat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.lstat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_mkdirat(dirfd,path,mode){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_newfstatat(dirfd,path,buf,flags){try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags=flags&~4352;path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.doStat(nofollow?FS.lstat:FS.stat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_poll(fds,nfds,timeout){try{var nonzero=0;for(var i=0;i<nfds;i++){var pollfd=fds+8*i;var fd=HEAP32[pollfd>>2];var events=HEAP16[pollfd+4>>1];var mask=32;var stream=FS.getStream(fd);if(stream){mask=SYSCALLS.DEFAULT_POLLMASK;if(stream.stream_ops.poll){mask=stream.stream_ops.poll(stream)}}mask&=events|8|16;if(mask)nonzero++;HEAP16[pollfd+6>>1]=mask}return nonzero}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_readlinkat(dirfd,path,buf,bufsize){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_recvfrom(fd,buf,len,flags,addr,addrlen){try{var sock=getSocketFromFD(fd);var msg=sock.sock_ops.recvmsg(sock,len);if(!msg)return 0;if(addr){var errno=writeSockaddr(addr,sock.family,DNS.lookup_name(msg.addr),msg.port,addrlen)}HEAPU8.set(msg.buffer,buf);return msg.buffer.byteLength}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_renameat(olddirfd,oldpath,newdirfd,newpath){try{oldpath=SYSCALLS.getStr(oldpath);newpath=SYSCALLS.getStr(newpath);oldpath=SYSCALLS.calculateAt(olddirfd,oldpath);newpath=SYSCALLS.calculateAt(newdirfd,newpath);FS.rename(oldpath,newpath);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_rmdir(path){try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_sendto(fd,message,length,flags,addr,addr_len){try{var sock=getSocketFromFD(fd);var dest=getSocketAddress(addr,addr_len,true);if(!dest){return FS.write(sock.stream,HEAP8,message,length)}else{return sock.sock_ops.sendmsg(sock,HEAP8,message,length,dest.addr,dest.port)}}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_socket(domain,type,protocol){try{var sock=SOCKFS.createSocket(domain,type,protocol);return sock.stream.fd}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_stat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_statfs64(path,size,buf){try{path=SYSCALLS.getStr(path);HEAP32[buf+4>>2]=4096;HEAP32[buf+40>>2]=4096;HEAP32[buf+8>>2]=1e6;HEAP32[buf+12>>2]=5e5;HEAP32[buf+16>>2]=5e5;HEAP32[buf+20>>2]=FS.nextInode;HEAP32[buf+24>>2]=1e6;HEAP32[buf+28>>2]=42;HEAP32[buf+44>>2]=2;HEAP32[buf+36>>2]=255;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_symlink(target,linkpath){try{target=SYSCALLS.getStr(target);linkpath=SYSCALLS.getStr(linkpath);FS.symlink(target,linkpath);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function ___syscall_unlinkat(dirfd,path,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(flags===0){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{abort("Invalid flags passed to unlinkat")}return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return-e.errno}}function __dlinit(main_dso_handle){}var dlopenMissingError="To use dlopen, you need enable dynamic linking, see https://github.com/emscripten-core/emscripten/wiki/Linking";function __dlopen_js(filename,flag){abort(dlopenMissingError)}function __dlsym_js(handle,symbol){abort(dlopenMissingError)}function __emscripten_date_now(){return Date.now()}var nowIsMonotonic=true;function __emscripten_get_now_is_monotonic(){return nowIsMonotonic}function __emscripten_throw_longjmp(){throw Infinity}function __gmtime_js(time,tmPtr){var date=new Date(HEAP32[time>>2]*1e3);HEAP32[tmPtr>>2]=date.getUTCSeconds();HEAP32[tmPtr+4>>2]=date.getUTCMinutes();HEAP32[tmPtr+8>>2]=date.getUTCHours();HEAP32[tmPtr+12>>2]=date.getUTCDate();HEAP32[tmPtr+16>>2]=date.getUTCMonth();HEAP32[tmPtr+20>>2]=date.getUTCFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getUTCDay();var start=Date.UTC(date.getUTCFullYear(),0,1,0,0,0,0);var yday=(date.getTime()-start)/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday}function __localtime_js(time,tmPtr){var date=new Date(HEAP32[time>>2]*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var start=new Date(date.getFullYear(),0,1);var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst}function _tzset_impl(timezone,daylight,tzname){var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAP32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocateUTF8(winterName);var summerNamePtr=allocateUTF8(summerName);if(summerOffset<winterOffset){HEAP32[tzname>>2]=winterNamePtr;HEAP32[tzname+4>>2]=summerNamePtr}else{HEAP32[tzname>>2]=summerNamePtr;HEAP32[tzname+4>>2]=winterNamePtr}}function __tzset_js(timezone,daylight,tzname){if(__tzset_js.called)return;__tzset_js.called=true;_tzset_impl(timezone,daylight,tzname)}function _abort(){abort("")}function _emscripten_set_main_loop_timing(mode,value){Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(!Browser.mainLoop.running){runtimeKeepalivePush();Browser.mainLoop.running=true}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof setImmediate=="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=function(event){if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0}var _emscripten_get_now;_emscripten_get_now=(()=>performance.now());function _emscripten_webgl_do_commit_frame(){if(!GL.currentContext||!GL.currentContext.GLctx){return-3}if(GL.currentContext.defaultFbo){GL.blitOffscreenFramebuffer(GL.currentContext);return 0}if(!GL.currentContext.attributes.explicitSwapControl){return-3}return 0}function _emscripten_webgl_commit_frame(){return _emscripten_webgl_do_commit_frame()}function runtimeKeepalivePush(){runtimeKeepaliveCounter+=1}function _exit(status){exit(status)}function maybeExit(){if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}}function setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming){assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;function checkIsRunning(){if(thisMainLoopId<Browser.mainLoop.currentlyRunningMainloop){runtimeKeepalivePop();maybeExit();return false}return true}Browser.mainLoop.running=false;Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}out('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();if(!checkIsRunning())return;setTimeout(Browser.mainLoop.runner,0);return}if(!checkIsRunning())return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}Browser.mainLoop.runIter(browserIterationFunc);if(!checkIsRunning())return;if(typeof SDL=="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0)_emscripten_set_main_loop_timing(0,1e3/fps);else _emscripten_set_main_loop_timing(1,1);Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"unwind"}}function callUserCallback(func,synchronous){if(runtimeExited||ABORT){return}if(synchronous){func();return}try{func();maybeExit()}catch(e){handleException(e)}}function runtimeKeepalivePop(){runtimeKeepaliveCounter-=1}function safeSetTimeout(func,timeout){runtimeKeepalivePush();return setTimeout(function(){runtimeKeepalivePop();callUserCallback(func)},timeout)}var Browser={mainLoop:{running:false,scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;setMainLoop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus:function(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining<expected){Module["setStatus"](message+" ("+(expected-remaining)+"/"+expected+")")}else{Module["setStatus"](message)}}else{Module["setStatus"]("")}}},runIter:function(func){if(ABORT)return;if(Module["preMainLoop"]){var preRet=Module["preMainLoop"]();if(preRet===false){return}}callUserCallback(func);if(Module["postMainLoop"])Module["postMainLoop"]()}},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function(){if(!Module["preloadPlugins"])Module["preloadPlugins"]=[];if(Browser.initted)return;Browser.initted=true;try{new Blob;Browser.hasBlobConstructor=true}catch(e){Browser.hasBlobConstructor=false;out("warning: no blob constructor, cannot create blobs with mimetypes")}Browser.BlobBuilder=typeof MozBlobBuilder!="undefined"?MozBlobBuilder:typeof WebKitBlobBuilder!="undefined"?WebKitBlobBuilder:!Browser.hasBlobConstructor?out("warning: no BlobBuilder"):null;Browser.URLObject=typeof window!="undefined"?window.URL?window.URL:window.webkitURL:undefined;if(!Module.noImageDecoding&&typeof Browser.URLObject=="undefined"){out("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");Module.noImageDecoding=true}var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module.noImageDecoding&&/\.(jpg|jpeg|png|bmp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=null;if(Browser.hasBlobConstructor){try{b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}}catch(e){warnOnce("Blob constructor present but fails: "+e+"; falling back to blob builder")}}if(!b){var bb=new Browser.BlobBuilder;bb.append(new Uint8Array(byteArray).buffer);b=bb.getBlob()}var url=Browser.URLObject.createObjectURL(b);var img=new Image;img.onload=(()=>{assert(img.complete,"Image "+name+" could not be decoded");var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);preloadedImages[name]=canvas;Browser.URLObject.revokeObjectURL(url);if(onload)onload(byteArray)});img.onerror=(event=>{out("Image "+url+" could not be decoded");if(onerror)onerror()});img.src=url};Module["preloadPlugins"].push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;preloadedAudios[name]=audio;if(onload)onload(byteArray)}function fail(){if(done)return;done=true;preloadedAudios[name]=new Audio;if(onerror)onerror()}if(Browser.hasBlobConstructor){try{var b=new Blob([byteArray],{type:Browser.getMimetype(name)})}catch(e){return fail()}var url=Browser.URLObject.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",function(){finish(audio)},false);audio.onerror=function audio_onerror(event){if(done)return;out("warning: browser could not fully decode audio "+name+", trying slower base64 approach");function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i<data.length;i++){leftchar=leftchar<<8|data[i];leftbits+=8;while(leftbits>=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;safeSetTimeout(function(){finish(audio)},1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||function(){};canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||function(){};canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",function(ev){if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},handledByPreloadPlugin:function(byteArray,fullname,finish,onerror){Browser.init();var handled=false;Module["preloadPlugins"].forEach(function(plugin){if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled},createContext:function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:typeof WebGL2RenderingContext!="undefined"?2:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx=="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});Browser.init()}return ctx},destroyContext:function(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer=="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas=="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?function(){canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null)||(canvasContainer["webkitRequestFullScreen"]?function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}:null);canvasContainer.requestFullscreen()},exitFullscreen:function(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||function(){};CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame:function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame:function(func){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(func);return}var RAF=Browser.fakeRequestAnimationFrame;RAF(func)},safeSetTimeout:function(func){return safeSetTimeout(func)},safeRequestAnimationFrame:function(func){runtimeKeepalivePush();return Browser.requestAnimationFrame(function(){runtimeKeepalivePop();callUserCallback(func)})},getMimetype:function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia:function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX:function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY:function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta:function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},resizeListeners:[],updateResizeListeners:function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(function(listener){listener(canvas.width,canvas.height)})},setCanvasSize:function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions:function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h<Module["forcedAspectRatio"]){w=Math.round(h*Module["forcedAspectRatio"])}else{h=Math.round(w/Module["forcedAspectRatio"])}}if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvas.parentNode&&typeof screen!="undefined"){var factor=Math.min(screen.width/w,screen.height/h);w=Math.round(w*factor);h=Math.round(h*factor)}if(Browser.resizeCanvas){if(canvas.width!=w)canvas.width=w;if(canvas.height!=h)canvas.height=h;if(typeof canvas.style!="undefined"){canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}else{if(canvas.width!=wNative)canvas.width=wNative;if(canvas.height!=hNative)canvas.height=hNative;if(typeof canvas.style!="undefined"){if(w!=wNative||h!=hNative){canvas.style.setProperty("width",w+"px","important");canvas.style.setProperty("height",h+"px","important")}else{canvas.style.removeProperty("width");canvas.style.removeProperty("height")}}}}};function _emscripten_cancel_main_loop(){Browser.mainLoop.pause();Browser.mainLoop.func=null}function _emscripten_force_exit(status){noExitRuntime=false;runtimeKeepaliveCounter=0;exit(status)}function __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(ctx){return!!(ctx.dibvbi=ctx.getExtension("WEBGL_draw_instanced_base_vertex_base_instance"))}function __webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(ctx){return!!(ctx.mdibvbi=ctx.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance"))}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],samplers:[],transformFeedbacks:[],syncs:[],stringCache:{},stringiCache:{},unpackAlignment:4,recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i<ret;i++){table[i]=null}return ret},getSource:function(shader,count,string,length){var source="";for(var i=0;i<count;++i){var len=length?HEAP32[length+i*4>>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){if(webGLContextAttributes.renderViaOffscreenBackBuffer)webGLContextAttributes["preserveDrawingBuffer"]=true;if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;function fixedGetContext(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}canvas.getContext=fixedGetContext}var ctx=webGLContextAttributes.majorVersion>1?canvas.getContext("webgl2",webGLContextAttributes):canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},enableOffscreenFramebufferAttributes:function(webGLContextAttributes){webGLContextAttributes.renderViaOffscreenBackBuffer=true;webGLContextAttributes.preserveDrawingBuffer=true},createOffscreenFramebuffer:function(context){var gl=context.GLctx;var fbo=gl.createFramebuffer();gl.bindFramebuffer(36160,fbo);context.defaultFbo=fbo;context.defaultFboForbidBlitFramebuffer=false;if(gl.getContextAttributes().antialias){context.defaultFboForbidBlitFramebuffer=true}else{var firefoxMatch=navigator.userAgent.toLowerCase().match(/firefox\/(\d\d)/);if(firefoxMatch!=null){var firefoxVersion=firefoxMatch[1];context.defaultFboForbidBlitFramebuffer=firefoxVersion<67}}context.defaultColorTarget=gl.createTexture();context.defaultDepthTarget=gl.createRenderbuffer();GL.resizeOffscreenFramebuffer(context);gl.bindTexture(3553,context.defaultColorTarget);gl.texParameteri(3553,10241,9728);gl.texParameteri(3553,10240,9728);gl.texParameteri(3553,10242,33071);gl.texParameteri(3553,10243,33071);gl.texImage2D(3553,0,6408,gl.canvas.width,gl.canvas.height,0,6408,5121,null);gl.framebufferTexture2D(36160,36064,3553,context.defaultColorTarget,0);gl.bindTexture(3553,null);var depthTarget=gl.createRenderbuffer();gl.bindRenderbuffer(36161,context.defaultDepthTarget);gl.renderbufferStorage(36161,33189,gl.canvas.width,gl.canvas.height);gl.framebufferRenderbuffer(36160,36096,36161,context.defaultDepthTarget);gl.bindRenderbuffer(36161,null);var vertices=[-1,-1,-1,1,1,-1,1,1];var vb=gl.createBuffer();gl.bindBuffer(34962,vb);gl.bufferData(34962,new Float32Array(vertices),35044);gl.bindBuffer(34962,null);context.blitVB=vb;var vsCode="attribute vec2 pos;"+"varying lowp vec2 tex;"+"void main() { tex = pos * 0.5 + vec2(0.5,0.5); gl_Position = vec4(pos, 0.0, 1.0); }";var vs=gl.createShader(35633);gl.shaderSource(vs,vsCode);gl.compileShader(vs);var fsCode="varying lowp vec2 tex;"+"uniform sampler2D sampler;"+"void main() { gl_FragColor = texture2D(sampler, tex); }";var fs=gl.createShader(35632);gl.shaderSource(fs,fsCode);gl.compileShader(fs);var blitProgram=gl.createProgram();gl.attachShader(blitProgram,vs);gl.attachShader(blitProgram,fs);gl.linkProgram(blitProgram);context.blitProgram=blitProgram;context.blitPosLoc=gl.getAttribLocation(blitProgram,"pos");gl.useProgram(blitProgram);gl.uniform1i(gl.getUniformLocation(blitProgram,"sampler"),0);gl.useProgram(null);context.defaultVao=undefined;if(gl.createVertexArray){context.defaultVao=gl.createVertexArray();gl.bindVertexArray(context.defaultVao);gl.enableVertexAttribArray(context.blitPosLoc);gl.bindVertexArray(null)}},resizeOffscreenFramebuffer:function(context){var gl=context.GLctx;if(context.defaultColorTarget){var prevTextureBinding=gl.getParameter(32873);gl.bindTexture(3553,context.defaultColorTarget);gl.texImage2D(3553,0,6408,gl.drawingBufferWidth,gl.drawingBufferHeight,0,6408,5121,null);gl.bindTexture(3553,prevTextureBinding)}if(context.defaultDepthTarget){var prevRenderBufferBinding=gl.getParameter(36007);gl.bindRenderbuffer(36161,context.defaultDepthTarget);gl.renderbufferStorage(36161,33189,gl.drawingBufferWidth,gl.drawingBufferHeight);gl.bindRenderbuffer(36161,prevRenderBufferBinding)}},blitOffscreenFramebuffer:function(context){var gl=context.GLctx;var prevScissorTest=gl.getParameter(3089);if(prevScissorTest)gl.disable(3089);var prevFbo=gl.getParameter(36006);if(gl.blitFramebuffer&&!context.defaultFboForbidBlitFramebuffer){gl.bindFramebuffer(36008,context.defaultFbo);gl.bindFramebuffer(36009,null);gl.blitFramebuffer(0,0,gl.canvas.width,gl.canvas.height,0,0,gl.canvas.width,gl.canvas.height,16384,9728)}else{gl.bindFramebuffer(36160,null);var prevProgram=gl.getParameter(35725);gl.useProgram(context.blitProgram);var prevVB=gl.getParameter(34964);gl.bindBuffer(34962,context.blitVB);var prevActiveTexture=gl.getParameter(34016);gl.activeTexture(33984);var prevTextureBinding=gl.getParameter(32873);gl.bindTexture(3553,context.defaultColorTarget);var prevBlend=gl.getParameter(3042);if(prevBlend)gl.disable(3042);var prevCullFace=gl.getParameter(2884);if(prevCullFace)gl.disable(2884);var prevDepthTest=gl.getParameter(2929);if(prevDepthTest)gl.disable(2929);var prevStencilTest=gl.getParameter(2960);if(prevStencilTest)gl.disable(2960);function draw(){gl.vertexAttribPointer(context.blitPosLoc,2,5126,false,0,0);gl.drawArrays(5,0,4)}if(context.defaultVao){var prevVAO=gl.getParameter(34229);gl.bindVertexArray(context.defaultVao);draw();gl.bindVertexArray(prevVAO)}else{var prevVertexAttribPointer={buffer:gl.getVertexAttrib(context.blitPosLoc,34975),size:gl.getVertexAttrib(context.blitPosLoc,34339),stride:gl.getVertexAttrib(context.blitPosLoc,34340),type:gl.getVertexAttrib(context.blitPosLoc,34341),normalized:gl.getVertexAttrib(context.blitPosLoc,34922),pointer:gl.getVertexAttribOffset(context.blitPosLoc,34373)};var maxVertexAttribs=gl.getParameter(34921);var prevVertexAttribEnables=[];for(var i=0;i<maxVertexAttribs;++i){var prevEnabled=gl.getVertexAttrib(i,34338);var wantEnabled=i==context.blitPosLoc;if(prevEnabled&&!wantEnabled){gl.disableVertexAttribArray(i)}if(!prevEnabled&&wantEnabled){gl.enableVertexAttribArray(i)}prevVertexAttribEnables[i]=prevEnabled}draw();for(var i=0;i<maxVertexAttribs;++i){var prevEnabled=prevVertexAttribEnables[i];var nowEnabled=i==context.blitPosLoc;if(prevEnabled&&!nowEnabled){gl.enableVertexAttribArray(i)}if(!prevEnabled&&nowEnabled){gl.disableVertexAttribArray(i)}}gl.bindBuffer(34962,prevVertexAttribPointer.buffer);gl.vertexAttribPointer(context.blitPosLoc,prevVertexAttribPointer.size,prevVertexAttribPointer.type,prevVertexAttribPointer.normalized,prevVertexAttribPointer.stride,prevVertexAttribPointer.offset)}if(prevStencilTest)gl.enable(2960);if(prevDepthTest)gl.enable(2929);if(prevCullFace)gl.enable(2884);if(prevBlend)gl.enable(3042);gl.bindTexture(3553,prevTextureBinding);gl.activeTexture(prevActiveTexture);gl.bindBuffer(34962,prevVB);gl.useProgram(prevProgram)}gl.bindFramebuffer(36160,prevFbo);if(prevScissorTest)gl.enable(3089)},registerContext:function(ctx,webGLContextAttributes){var handle=GL.getNewId(GL.contexts);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault=="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}if(webGLContextAttributes.renderViaOffscreenBackBuffer)GL.createOffscreenFramebuffer(context);return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents=="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;__webgl_enable_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);__webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(GLctx);__webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(GLctx);if(context.version>=2){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query_webgl2")}if(context.version<2||!GLctx.disjointTimerQueryExt){GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};function _emscripten_glActiveTexture(x0){GLctx["activeTexture"](x0)}function _emscripten_glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glBeginQuery(target,id){GLctx["beginQuery"](target,GL.queries[id])}function _emscripten_glBeginQueryEXT(target,id){GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.queries[id])}function _emscripten_glBeginTransformFeedback(x0){GLctx["beginTransformFeedback"](x0)}function _emscripten_glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _emscripten_glBindBuffer(target,buffer){if(target==35051){GLctx.currentPixelPackBufferBinding=buffer}else if(target==35052){GLctx.currentPixelUnpackBufferBinding=buffer}GLctx.bindBuffer(target,GL.buffers[buffer])}function _emscripten_glBindBufferBase(target,index,buffer){GLctx["bindBufferBase"](target,index,GL.buffers[buffer])}function _emscripten_glBindBufferRange(target,index,buffer,offset,ptrsize){GLctx["bindBufferRange"](target,index,GL.buffers[buffer],offset,ptrsize)}function _emscripten_glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,framebuffer?GL.framebuffers[framebuffer]:GL.currentContext.defaultFbo)}function _emscripten_glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _emscripten_glBindSampler(unit,sampler){GLctx["bindSampler"](unit,GL.samplers[sampler])}function _emscripten_glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _emscripten_glBindTransformFeedback(target,id){GLctx["bindTransformFeedback"](target,GL.transformFeedbacks[id])}function _emscripten_glBindVertexArray(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBindVertexArrayOES(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _emscripten_glBlendColor(x0,x1,x2,x3){GLctx["blendColor"](x0,x1,x2,x3)}function _emscripten_glBlendEquation(x0){GLctx["blendEquation"](x0)}function _emscripten_glBlendEquationSeparate(x0,x1){GLctx["blendEquationSeparate"](x0,x1)}function _emscripten_glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _emscripten_glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glBlitFramebuffer(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9){GLctx["blitFramebuffer"](x0,x1,x2,x3,x4,x5,x6,x7,x8,x9)}function _emscripten_glBufferData(target,size,data,usage){if(GL.currentContext.version>=2){if(data&&size){GLctx.bufferData(target,HEAPU8,usage,data,size)}else{GLctx.bufferData(target,size,usage)}}else{GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}}function _emscripten_glBufferSubData(target,offset,size,data){if(GL.currentContext.version>=2){size&&GLctx.bufferSubData(target,offset,HEAPU8,data,size);return}GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _emscripten_glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _emscripten_glClear(x0){GLctx["clear"](x0)}function _emscripten_glClearBufferfi(x0,x1,x2,x3){GLctx["clearBufferfi"](x0,x1,x2,x3)}function _emscripten_glClearBufferfv(buffer,drawbuffer,value){GLctx["clearBufferfv"](buffer,drawbuffer,HEAPF32,value>>2)}function _emscripten_glClearBufferiv(buffer,drawbuffer,value){GLctx["clearBufferiv"](buffer,drawbuffer,HEAP32,value>>2)}function _emscripten_glClearBufferuiv(buffer,drawbuffer,value){GLctx["clearBufferuiv"](buffer,drawbuffer,HEAPU32,value>>2)}function _emscripten_glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _emscripten_glClearDepthf(x0){GLctx["clearDepth"](x0)}function _emscripten_glClearStencil(x0){GLctx["clearStencil"](x0)}function convertI32PairToI53(lo,hi){return(lo>>>0)+hi*4294967296}function _emscripten_glClientWaitSync(sync,flags,timeoutLo,timeoutHi){return GLctx.clientWaitSync(GL.syncs[sync],flags,convertI32PairToI53(timeoutLo,timeoutHi))}function _emscripten_glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _emscripten_glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _emscripten_glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){if(GL.currentContext.version>=2){if(GLctx.currentPixelUnpackBufferBinding||!imageSize){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,imageSize,data)}else{GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,HEAPU8,data,imageSize)}return}GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexImage3D(target,level,internalFormat,width,height,depth,border,imageSize,data){if(GLctx.currentPixelUnpackBufferBinding){GLctx["compressedTexImage3D"](target,level,internalFormat,width,height,depth,border,imageSize,data)}else{GLctx["compressedTexImage3D"](target,level,internalFormat,width,height,depth,border,HEAPU8,data,imageSize)}}function _emscripten_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){if(GL.currentContext.version>=2){if(GLctx.currentPixelUnpackBufferBinding||!imageSize){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,imageSize,data)}else{GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,HEAPU8,data,imageSize)}return}GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _emscripten_glCompressedTexSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,imageSize,data){if(GLctx.currentPixelUnpackBufferBinding){GLctx["compressedTexSubImage3D"](target,level,xoffset,yoffset,zoffset,width,height,depth,format,imageSize,data)}else{GLctx["compressedTexSubImage3D"](target,level,xoffset,yoffset,zoffset,width,height,depth,format,HEAPU8,data,imageSize)}}function _emscripten_glCopyBufferSubData(x0,x1,x2,x3,x4){GLctx["copyBufferSubData"](x0,x1,x2,x3,x4)}function _emscripten_glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _emscripten_glCopyTexSubImage3D(x0,x1,x2,x3,x4,x5,x6,x7,x8){GLctx["copyTexSubImage3D"](x0,x1,x2,x3,x4,x5,x6,x7,x8)}function _emscripten_glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;program.maxUniformLength=program.maxAttributeLength=program.maxUniformBlockNameLength=0;program.uniformIdCounter=1;GL.programs[id]=program;return id}function _emscripten_glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _emscripten_glCullFace(x0){GLctx["cullFace"](x0)}function _emscripten_glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GLctx.currentPixelPackBufferBinding)GLctx.currentPixelPackBufferBinding=0;if(id==GLctx.currentPixelUnpackBufferBinding)GLctx.currentPixelUnpackBufferBinding=0}}function _emscripten_glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _emscripten_glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null}function _emscripten_glDeleteQueries(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.queries[id];if(!query)continue;GLctx["deleteQuery"](query);GL.queries[id]=null}}function _emscripten_glDeleteQueriesEXT(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var query=GL.queries[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.queries[id]=null}}function _emscripten_glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _emscripten_glDeleteSamplers(n,samplers){for(var i=0;i<n;i++){var id=HEAP32[samplers+i*4>>2];var sampler=GL.samplers[id];if(!sampler)continue;GLctx["deleteSampler"](sampler);sampler.name=0;GL.samplers[id]=null}}function _emscripten_glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _emscripten_glDeleteSync(id){if(!id)return;var sync=GL.syncs[id];if(!sync){GL.recordError(1281);return}GLctx.deleteSync(sync);sync.name=0;GL.syncs[id]=null}function _emscripten_glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _emscripten_glDeleteTransformFeedbacks(n,ids){for(var i=0;i<n;i++){var id=HEAP32[ids+i*4>>2];var transformFeedback=GL.transformFeedbacks[id];if(!transformFeedback)continue;GLctx["deleteTransformFeedback"](transformFeedback);transformFeedback.name=0;GL.transformFeedbacks[id]=null}}function _emscripten_glDeleteVertexArrays(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDeleteVertexArraysOES(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _emscripten_glDepthFunc(x0){GLctx["depthFunc"](x0)}function _emscripten_glDepthMask(flag){GLctx.depthMask(!!flag)}function _emscripten_glDepthRangef(x0,x1){GLctx["depthRange"](x0,x1)}function _emscripten_glDetachShader(program,shader){GLctx.detachShader(GL.programs[program],GL.shaders[shader])}function _emscripten_glDisable(x0){GLctx["disable"](x0)}function _emscripten_glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _emscripten_glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _emscripten_glDrawArraysInstanced(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}function _emscripten_glDrawArraysInstancedANGLE(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}function _emscripten_glDrawArraysInstancedARB(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}function _emscripten_glDrawArraysInstancedEXT(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}function _emscripten_glDrawArraysInstancedNV(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}var tempFixedLengthArray=[];function _emscripten_glDrawBuffers(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawBuffersEXT(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawBuffersWEBGL(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _emscripten_glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawElementsInstanced(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glDrawElementsInstancedANGLE(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glDrawElementsInstancedARB(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glDrawElementsInstancedEXT(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _emscripten_glDrawElementsInstancedNV(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _glDrawElements(mode,count,type,indices){GLctx.drawElements(mode,count,type,indices)}function _emscripten_glDrawRangeElements(mode,start,end,count,type,indices){_glDrawElements(mode,count,type,indices)}function _emscripten_glEnable(x0){GLctx["enable"](x0)}function _emscripten_glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _emscripten_glEndQuery(x0){GLctx["endQuery"](x0)}function _emscripten_glEndQueryEXT(target){GLctx.disjointTimerQueryExt["endQueryEXT"](target)}function _emscripten_glEndTransformFeedback(){GLctx["endTransformFeedback"]()}function _emscripten_glFenceSync(condition,flags){var sync=GLctx.fenceSync(condition,flags);if(sync){var id=GL.getNewId(GL.syncs);sync.name=id;GL.syncs[id]=sync;return id}else{return 0}}function _emscripten_glFinish(){GLctx["finish"]()}function _emscripten_glFlush(){GLctx["flush"]()}function _emscripten_glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _emscripten_glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _emscripten_glFramebufferTextureLayer(target,attachment,texture,level,layer){GLctx.framebufferTextureLayer(target,attachment,GL.textures[texture],level,layer)}function _emscripten_glFrontFace(x0){GLctx["frontFace"](x0)}function __glGenObject(n,buffers,createFunction,objectTable){for(var i=0;i<n;i++){var buffer=GLctx[createFunction]();var id=buffer&&GL.getNewId(objectTable);if(buffer){buffer.name=id;objectTable[id]=buffer}else{GL.recordError(1282)}HEAP32[buffers+i*4>>2]=id}}function _emscripten_glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _emscripten_glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _emscripten_glGenQueries(n,ids){__glGenObject(n,ids,"createQuery",GL.queries)}function _emscripten_glGenQueriesEXT(n,ids){for(var i=0;i<n;i++){var query=GLctx.disjointTimerQueryExt["createQueryEXT"]();if(!query){GL.recordError(1282);while(i<n)HEAP32[ids+i++*4>>2]=0;return}var id=GL.getNewId(GL.queries);query.name=id;GL.queries[id]=query;HEAP32[ids+i*4>>2]=id}}function _emscripten_glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _emscripten_glGenSamplers(n,samplers){__glGenObject(n,samplers,"createSampler",GL.samplers)}function _emscripten_glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _emscripten_glGenTransformFeedbacks(n,ids){__glGenObject(n,ids,"createTransformFeedback",GL.transformFeedbacks)}function _emscripten_glGenVertexArrays(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenVertexArraysOES(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _emscripten_glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function __glGetActiveAttribOrUniform(funcName,program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx[funcName](program,index);if(info){var numBytesWrittenExclNull=name&&stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull;if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}}function _emscripten_glGetActiveAttrib(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)}function _emscripten_glGetActiveUniform(program,index,bufSize,length,size,type,name){__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)}function _emscripten_glGetActiveUniformBlockName(program,uniformBlockIndex,bufSize,length,uniformBlockName){program=GL.programs[program];var result=GLctx["getActiveUniformBlockName"](program,uniformBlockIndex);if(!result)return;if(uniformBlockName&&bufSize>0){var numBytesWrittenExclNull=stringToUTF8(result,uniformBlockName,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}}function _emscripten_glGetActiveUniformBlockiv(program,uniformBlockIndex,pname,params){if(!params){GL.recordError(1281);return}program=GL.programs[program];if(pname==35393){var name=GLctx["getActiveUniformBlockName"](program,uniformBlockIndex);HEAP32[params>>2]=name.length+1;return}var result=GLctx["getActiveUniformBlockParameter"](program,uniformBlockIndex,pname);if(result===null)return;if(pname==35395){for(var i=0;i<result.length;i++){HEAP32[params+i*4>>2]=result[i]}}else{HEAP32[params>>2]=result}}function _emscripten_glGetActiveUniformsiv(program,uniformCount,uniformIndices,pname,params){if(!params){GL.recordError(1281);return}if(uniformCount>0&&uniformIndices==0){GL.recordError(1281);return}program=GL.programs[program];var ids=[];for(var i=0;i<uniformCount;i++){ids.push(HEAP32[uniformIndices+i*4>>2])}var result=GLctx["getActiveUniforms"](program,ids,pname);if(!result)return;var len=result.length;for(var i=0;i<len;i++){HEAP32[params+i*4>>2]=result[i]}}function _emscripten_glGetAttachedShaders(program,maxCount,count,shaders){var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i<len;++i){var id=GL.shaders.indexOf(result[i]);HEAP32[shaders+i*4>>2]=id}}function _emscripten_glGetAttribLocation(program,name){return GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name))}function writeI53ToI64(ptr,num){HEAPU32[ptr>>2]=num;HEAPU32[ptr+4>>2]=(num-HEAPU32[ptr>>2])/4294967296}function emscriptenWebGLGet(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=0&&type!=1){GL.recordError(1280)}return;case 34814:case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break;case 33309:if(GL.currentContext.version<2){GL.recordError(1282);return}var exts=GLctx.getSupportedExtensions()||[];ret=2*exts.length;break;case 33307:case 33308:if(GL.currentContext.version<2){GL.recordError(1280);return}ret=name_==33307?3:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 36662:case 36663:case 35053:case 35055:case 36010:case 35097:case 35869:case 32874:case 36389:case 35983:case 35368:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i<result.length;++i){switch(type){case 0:HEAP32[p+i*4>>2]=result[i];break;case 2:HEAPF32[p+i*4>>2]=result[i];break;case 4:HEAP8[p+i>>0]=result[i]?1:0;break}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Unknown object returned from WebGL getParameter("+name_+")! (error: "+e+")");return}}break;default:GL.recordError(1280);err("GL_INVALID_ENUM in glGet"+type+"v: Native code calling glGet"+type+"v("+name_+") and it returns "+result+" of type "+typeof result+"!");return}}switch(type){case 1:writeI53ToI64(p,ret);break;case 0:HEAP32[p>>2]=ret;break;case 2:HEAPF32[p>>2]=ret;break;case 4:HEAP8[p>>0]=ret?1:0;break}}function _emscripten_glGetBooleanv(name_,p){emscriptenWebGLGet(name_,p,4)}function _emscripten_glGetBufferParameteri64v(target,value,data){if(!data){GL.recordError(1281);return}writeI53ToI64(data,GLctx.getBufferParameter(target,value))}function _emscripten_glGetBufferParameteriv(target,value,data){if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)}function _emscripten_glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error}function _emscripten_glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}function _emscripten_glGetFragDataLocation(program,name){return GLctx["getFragDataLocation"](GL.programs[program],UTF8ToString(name))}function _emscripten_glGetFramebufferAttachmentParameteriv(target,attachment,pname,params){var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result}function emscriptenWebGLGetIndexed(target,index,data,type){if(!data){GL.recordError(1281);return}var result=GLctx["getIndexedParameter"](target,index);var ret;switch(typeof result){case"boolean":ret=result?1:0;break;case"number":ret=result;break;case"object":if(result===null){switch(target){case 35983:case 35368:ret=0;break;default:{GL.recordError(1280);return}}}else if(result instanceof WebGLBuffer){ret=result.name|0}else{GL.recordError(1280);return}break;default:GL.recordError(1280);return}switch(type){case 1:writeI53ToI64(data,ret);break;case 0:HEAP32[data>>2]=ret;break;case 2:HEAPF32[data>>2]=ret;break;case 4:HEAP8[data>>0]=ret?1:0;break;default:throw"internal emscriptenWebGLGetIndexed() error, bad type: "+type}}function _emscripten_glGetInteger64i_v(target,index,data){emscriptenWebGLGetIndexed(target,index,data,1)}function _emscripten_glGetInteger64v(name_,p){emscriptenWebGLGet(name_,p,1)}function _emscripten_glGetIntegeri_v(target,index,data){emscriptenWebGLGetIndexed(target,index,data,0)}function _emscripten_glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}function _emscripten_glGetInternalformativ(target,internalformat,pname,bufSize,params){if(bufSize<0){GL.recordError(1281);return}if(!params){GL.recordError(1281);return}var ret=GLctx["getInternalformatParameter"](target,internalformat,pname);if(ret===null)return;for(var i=0;i<ret.length&&i<bufSize;++i){HEAP32[params+i*4>>2]=ret[i]}}function _emscripten_glGetProgramBinary(program,bufSize,length,binaryFormat,binary){GL.recordError(1282)}function _emscripten_glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}program=GL.programs[program];if(pname==35716){var log=GLctx.getProgramInfoLog(program);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){if(!program.maxUniformLength){for(var i=0;i<GLctx.getProgramParameter(program,35718);++i){program.maxUniformLength=Math.max(program.maxUniformLength,GLctx.getActiveUniform(program,i).name.length+1)}}HEAP32[p>>2]=program.maxUniformLength}else if(pname==35722){if(!program.maxAttributeLength){for(var i=0;i<GLctx.getProgramParameter(program,35721);++i){program.maxAttributeLength=Math.max(program.maxAttributeLength,GLctx.getActiveAttrib(program,i).name.length+1)}}HEAP32[p>>2]=program.maxAttributeLength}else if(pname==35381){if(!program.maxUniformBlockNameLength){for(var i=0;i<GLctx.getProgramParameter(program,35382);++i){program.maxUniformBlockNameLength=Math.max(program.maxUniformBlockNameLength,GLctx.getActiveUniformBlockName(program,i).length+1)}}HEAP32[p>>2]=program.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(program,pname)}}function _emscripten_glGetQueryObjecti64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param;if(GL.currentContext.version<2){param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname)}else{param=GLctx["getQueryParameter"](query,pname)}var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectui64vEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param;if(GL.currentContext.version<2){param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname)}else{param=GLctx["getQueryParameter"](query,pname)}var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)}function _emscripten_glGetQueryObjectuiv(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param=GLctx["getQueryParameter"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryObjectuivEXT(id,pname,params){if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret}function _emscripten_glGetQueryiv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx["getQuery"](target,pname)}function _emscripten_glGetQueryivEXT(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)}function _emscripten_glGetRenderbufferParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)}function _emscripten_glGetSamplerParameterfv(sampler,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx["getSamplerParameter"](GL.samplers[sampler],pname)}function _emscripten_glGetSamplerParameteriv(sampler,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx["getSamplerParameter"](GL.samplers[sampler],pname)}function _emscripten_glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderPrecisionFormat(shaderType,precisionType,range,precision){var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision}function _emscripten_glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _emscripten_glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var logLength=log?log.length+1:0;HEAP32[p>>2]=logLength}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source?source.length+1:0;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_glGetString(name_){var ret=GL.stringCache[name_];if(!ret){switch(name_){case 7939:var exts=GLctx.getSupportedExtensions()||[];exts=exts.concat(exts.map(function(e){return"GL_"+e}));ret=stringToNewUTF8(exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=s&&stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);if(GL.currentContext.version>=2)glVersion="OpenGL ES 3.0 ("+glVersion+")";else{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(35724);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280)}GL.stringCache[name_]=ret}return ret}function _emscripten_glGetStringi(name,index){if(GL.currentContext.version<2){GL.recordError(1282);return 0}var stringiCache=GL.stringiCache[name];if(stringiCache){if(index<0||index>=stringiCache.length){GL.recordError(1281);return 0}return stringiCache[index]}switch(name){case 7939:var exts=GLctx.getSupportedExtensions()||[];exts=exts.concat(exts.map(function(e){return"GL_"+e}));exts=exts.map(function(e){return stringToNewUTF8(e)});stringiCache=GL.stringiCache[name]=exts;if(index<0||index>=stringiCache.length){GL.recordError(1281);return 0}return stringiCache[index];default:GL.recordError(1280);return 0}}function _emscripten_glGetSynciv(sync,pname,bufSize,length,values){if(bufSize<0){GL.recordError(1281);return}if(!values){GL.recordError(1281);return}var ret=GLctx.getSyncParameter(GL.syncs[sync],pname);if(ret!==null){HEAP32[values>>2]=ret;if(length)HEAP32[length>>2]=1}}function _emscripten_glGetTexParameterfv(target,pname,params){if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTexParameteriv(target,pname,params){if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)}function _emscripten_glGetTransformFeedbackVarying(program,index,bufSize,length,size,type,name){program=GL.programs[program];var info=GLctx["getTransformFeedbackVarying"](program,index);if(!info)return;if(name&&bufSize>0){var numBytesWrittenExclNull=stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull}else{if(length)HEAP32[length>>2]=0}if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}function _emscripten_glGetUniformBlockIndex(program,uniformBlockName){return GLctx["getUniformBlockIndex"](GL.programs[program],UTF8ToString(uniformBlockName))}function _emscripten_glGetUniformIndices(program,uniformCount,uniformNames,uniformIndices){if(!uniformIndices){GL.recordError(1281);return}if(uniformCount>0&&(uniformNames==0||uniformIndices==0)){GL.recordError(1281);return}program=GL.programs[program];var names=[];for(var i=0;i<uniformCount;i++)names.push(UTF8ToString(HEAP32[uniformNames+i*4>>2]));var result=GLctx["getUniformIndices"](program,names);if(!result)return;var len=result.length;for(var i=0;i<len;i++){HEAP32[uniformIndices+i*4>>2]=result[i]}}function webglGetLeftBracePos(name){return name.slice(-1)=="]"&&name.lastIndexOf("[")}function webglPrepareUniformLocationsBeforeFirstUse(program){var uniformLocsById=program.uniformLocsById,uniformSizeAndIdsByName=program.uniformSizeAndIdsByName,i,j;if(!uniformLocsById){program.uniformLocsById=uniformLocsById={};program.uniformArrayNamesById={};for(i=0;i<GLctx.getProgramParameter(program,35718);++i){var u=GLctx.getActiveUniform(program,i);var nm=u.name;var sz=u.size;var lb=webglGetLeftBracePos(nm);var arrayName=lb>0?nm.slice(0,lb):nm;var id=program.uniformIdCounter;program.uniformIdCounter+=sz;uniformSizeAndIdsByName[arrayName]=[sz,id];for(j=0;j<sz;++j){uniformLocsById[id]=j;program.uniformArrayNamesById[id++]=arrayName}}}}function _emscripten_glGetUniformLocation(program,name){name=UTF8ToString(name);if(program=GL.programs[program]){webglPrepareUniformLocationsBeforeFirstUse(program);var uniformLocsById=program.uniformLocsById;var arrayIndex=0;var uniformBaseName=name;var leftBrace=webglGetLeftBracePos(name);if(leftBrace>0){arrayIndex=jstoi_q(name.slice(leftBrace+1))>>>0;uniformBaseName=name.slice(0,leftBrace)}var sizeAndId=program.uniformSizeAndIdsByName[uniformBaseName];if(sizeAndId&&arrayIndex<sizeAndId[0]){arrayIndex+=sizeAndId[1];if(uniformLocsById[arrayIndex]=uniformLocsById[arrayIndex]||GLctx.getUniformLocation(program,name)){return arrayIndex}}}else{GL.recordError(1281)}return-1}function webglGetUniformLocation(location){var p=GLctx.currentProgram;if(p){var webglLoc=p.uniformLocsById[location];if(typeof webglLoc=="number"){p.uniformLocsById[location]=webglLoc=GLctx.getUniformLocation(p,p.uniformArrayNamesById[location]+(webglLoc>0?"["+webglLoc+"]":""))}return webglLoc}else{GL.recordError(1282)}}function emscriptenWebGLGetUniform(program,location,params,type){if(!params){GL.recordError(1281);return}program=GL.programs[program];webglPrepareUniformLocationsBeforeFirstUse(program);var data=GLctx.getUniform(program,webglGetUniformLocation(location));if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break}}else{for(var i=0;i<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}}function _emscripten_glGetUniformfv(program,location,params){emscriptenWebGLGetUniform(program,location,params,2)}function _emscripten_glGetUniformiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}function _emscripten_glGetUniformuiv(program,location,params){emscriptenWebGLGetUniform(program,location,params,0)}function emscriptenWebGLGetVertexAttrib(index,pname,params,type){if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data&&data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break;case 5:HEAP32[params>>2]=Math.fround(data);break}}else{for(var i=0;i<data.length;i++){switch(type){case 0:HEAP32[params+i*4>>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break;case 5:HEAP32[params+i*4>>2]=Math.fround(data[i]);break}}}}function _emscripten_glGetVertexAttribIiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,0)}function _emscripten_glGetVertexAttribIuiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,0)}function _emscripten_glGetVertexAttribPointerv(index,pname,pointer){if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)}function _emscripten_glGetVertexAttribfv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,2)}function _emscripten_glGetVertexAttribiv(index,pname,params){emscriptenWebGLGetVertexAttrib(index,pname,params,5)}function _emscripten_glHint(x0,x1){GLctx["hint"](x0,x1)}function _emscripten_glInvalidateFramebuffer(target,numAttachments,attachments){var list=tempFixedLengthArray[numAttachments];for(var i=0;i<numAttachments;i++){list[i]=HEAP32[attachments+i*4>>2]}GLctx["invalidateFramebuffer"](target,list)}function _emscripten_glInvalidateSubFramebuffer(target,numAttachments,attachments,x,y,width,height){var list=tempFixedLengthArray[numAttachments];for(var i=0;i<numAttachments;i++){list[i]=HEAP32[attachments+i*4>>2]}GLctx["invalidateSubFramebuffer"](target,list,x,y,width,height)}function _emscripten_glIsBuffer(buffer){var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)}function _emscripten_glIsEnabled(x0){return GLctx["isEnabled"](x0)}function _emscripten_glIsFramebuffer(framebuffer){var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)}function _emscripten_glIsProgram(program){program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)}function _emscripten_glIsQuery(id){var query=GL.queries[id];if(!query)return 0;return GLctx["isQuery"](query)}function _emscripten_glIsQueryEXT(id){var query=GL.queries[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)}function _emscripten_glIsRenderbuffer(renderbuffer){var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)}function _emscripten_glIsSampler(id){var sampler=GL.samplers[id];if(!sampler)return 0;return GLctx["isSampler"](sampler)}function _emscripten_glIsShader(shader){var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)}function _emscripten_glIsSync(sync){return GLctx.isSync(GL.syncs[sync])}function _emscripten_glIsTexture(id){var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)}function _emscripten_glIsTransformFeedback(id){return GLctx["isTransformFeedback"](GL.transformFeedbacks[id])}function _emscripten_glIsVertexArray(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glIsVertexArrayOES(array){var vao=GL.vaos[array];if(!vao)return 0;return GLctx["isVertexArray"](vao)}function _emscripten_glLineWidth(x0){GLctx["lineWidth"](x0)}function _emscripten_glLinkProgram(program){program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}}function _emscripten_glPauseTransformFeedback(){GLctx["pauseTransformFeedback"]()}function _emscripten_glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_glPolygonOffset(x0,x1){GLctx["polygonOffset"](x0,x1)}function _emscripten_glProgramBinary(program,binaryFormat,binary,length){GL.recordError(1280)}function _emscripten_glProgramParameteri(program,pname,value){GL.recordError(1280)}function _emscripten_glQueryCounterEXT(id,target){GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.queries[id],target)}function _emscripten_glReadBuffer(x0){GLctx["readBuffer"](x0)}function computeUnpackAlignedImageSize(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize}function __colorChannelsInGlTextureFormat(format){var colorChannels={5:3,6:4,8:2,29502:3,29504:4,26917:2,26918:2,29846:3,29847:4};return colorChannels[format-6402]||1}function heapObjectForWebGLType(type){type-=5120;if(type==0)return HEAP8;if(type==1)return HEAPU8;if(type==2)return HEAP16;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922||type==28520||type==30779||type==30782)return HEAPU32;return HEAPU16}function heapAccessShiftForWebGLHeap(heap){return 31-Math.clz32(heap.BYTES_PER_ELEMENT)}function emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat){var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<<shift;var sizePerPixel=__colorChannelsInGlTextureFormat(format)*byteSize;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel,GL.unpackAlignment);return heap.subarray(pixels>>shift,pixels+bytes>>shift)}function _emscripten_glReadPixels(x,y,width,height,format,type,pixels){if(GL.currentContext.version>=2){if(GLctx.currentPixelPackBufferBinding){GLctx.readPixels(x,y,width,height,format,type,pixels)}else{var heap=heapObjectForWebGLType(type);GLctx.readPixels(x,y,width,height,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}return}var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _emscripten_glReleaseShaderCompiler(){}function _emscripten_glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _emscripten_glRenderbufferStorageMultisample(x0,x1,x2,x3,x4){GLctx["renderbufferStorageMultisample"](x0,x1,x2,x3,x4)}function _emscripten_glResumeTransformFeedback(){GLctx["resumeTransformFeedback"]()}function _emscripten_glSampleCoverage(value,invert){GLctx.sampleCoverage(value,!!invert)}function _emscripten_glSamplerParameterf(sampler,pname,param){GLctx["samplerParameterf"](GL.samplers[sampler],pname,param)}function _emscripten_glSamplerParameterfv(sampler,pname,params){var param=HEAPF32[params>>2];GLctx["samplerParameterf"](GL.samplers[sampler],pname,param)}function _emscripten_glSamplerParameteri(sampler,pname,param){GLctx["samplerParameteri"](GL.samplers[sampler],pname,param)}function _emscripten_glSamplerParameteriv(sampler,pname,params){var param=HEAP32[params>>2];GLctx["samplerParameteri"](GL.samplers[sampler],pname,param)}function _emscripten_glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _emscripten_glShaderBinary(){GL.recordError(1280)}function _emscripten_glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _emscripten_glStencilFunc(x0,x1,x2){GLctx["stencilFunc"](x0,x1,x2)}function _emscripten_glStencilFuncSeparate(x0,x1,x2,x3){GLctx["stencilFuncSeparate"](x0,x1,x2,x3)}function _emscripten_glStencilMask(x0){GLctx["stencilMask"](x0)}function _emscripten_glStencilMaskSeparate(x0,x1){GLctx["stencilMaskSeparate"](x0,x1)}function _emscripten_glStencilOp(x0,x1,x2){GLctx["stencilOp"](x0,x1,x2)}function _emscripten_glStencilOpSeparate(x0,x1,x2,x3){GLctx["stencilOpSeparate"](x0,x1,x2,x3)}function _emscripten_glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){if(GL.currentContext.version>=2){if(GLctx.currentPixelUnpackBufferBinding){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,null)}return}GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _emscripten_glTexImage3D(target,level,internalFormat,width,height,depth,border,format,type,pixels){if(GLctx.currentPixelUnpackBufferBinding){GLctx["texImage3D"](target,level,internalFormat,width,height,depth,border,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx["texImage3D"](target,level,internalFormat,width,height,depth,border,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx["texImage3D"](target,level,internalFormat,width,height,depth,border,format,type,null)}}function _emscripten_glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _emscripten_glTexParameterfv(target,pname,params){var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)}function _emscripten_glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _emscripten_glTexParameteriv(target,pname,params){var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)}function _emscripten_glTexStorage2D(x0,x1,x2,x3,x4){GLctx["texStorage2D"](x0,x1,x2,x3,x4)}function _emscripten_glTexStorage3D(x0,x1,x2,x3,x4,x5){GLctx["texStorage3D"](x0,x1,x2,x3,x4,x5)}function _emscripten_glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){if(GL.currentContext.version>=2){if(GLctx.currentPixelUnpackBufferBinding){GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,null)}return}var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _emscripten_glTexSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,pixels){if(GLctx.currentPixelUnpackBufferBinding){GLctx["texSubImage3D"](target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx["texSubImage3D"](target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx["texSubImage3D"](target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,null)}}function _emscripten_glTransformFeedbackVaryings(program,count,varyings,bufferMode){program=GL.programs[program];var vars=[];for(var i=0;i<count;i++)vars.push(UTF8ToString(HEAP32[varyings+i*4>>2]));GLctx["transformFeedbackVaryings"](program,vars,bufferMode)}function _emscripten_glUniform1f(location,v0){GLctx.uniform1f(webglGetUniformLocation(location),v0)}var miniTempWebGLFloatBuffers=[];function _emscripten_glUniform1fv(location,count,value){if(GL.currentContext.version>=2){count&&GLctx.uniform1fv(webglGetUniformLocation(location),HEAPF32,value>>2,count);return}if(count<=288){var view=miniTempWebGLFloatBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAPF32[value+4*i>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(webglGetUniformLocation(location),view)}function _emscripten_glUniform1i(location,v0){GLctx.uniform1i(webglGetUniformLocation(location),v0)}var __miniTempWebGLIntBuffers=[];function _emscripten_glUniform1iv(location,count,value){if(GL.currentContext.version>=2){count&&GLctx.uniform1iv(webglGetUniformLocation(location),HEAP32,value>>2,count);return}if(count<=288){var view=__miniTempWebGLIntBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAP32[value+4*i>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(webglGetUniformLocation(location),view)}function _emscripten_glUniform1ui(location,v0){GLctx.uniform1ui(webglGetUniformLocation(location),v0)}function _emscripten_glUniform1uiv(location,count,value){count&&GLctx.uniform1uiv(webglGetUniformLocation(location),HEAPU32,value>>2,count)}function _emscripten_glUniform2f(location,v0,v1){GLctx.uniform2f(webglGetUniformLocation(location),v0,v1)}function _emscripten_glUniform2fv(location,count,value){if(GL.currentContext.version>=2){count&&GLctx.uniform2fv(webglGetUniformLocation(location),HEAPF32,value>>2,count*2);return}if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(webglGetUniformLocation(location),view)}function _emscripten_glUniform2i(location,v0,v1){GLctx.uniform2i(webglGetUniformLocation(location),v0,v1)}function _emscripten_glUniform2iv(location,count,value){if(GL.currentContext.version>=2){count&&GLctx.uniform2iv(webglGetUniformLocation(location),HEAP32,value>>2,count*2);return}if(count<=144){var view=__miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(webglGetUniformLocation(location),view)}function _emscripten_glUniform2ui(location,v0,v1){GLctx.uniform2ui(webglGetUniformLocation(location),v0,v1)}function _emscripten_glUniform2uiv(location,count,value){count&&GLctx.uniform2uiv(webglGetUniformLocation(location),HEAPU32,value>>2,count*2)}function _emscripten_glUniform3f(location,v0,v1,v2){GLctx.uniform3f(webglGetUniformLocation(location),v0,v1,v2)}function _emscripten_glUniform3fv(location,count,value){if(GL.currentContext.version>=2){count&&GLctx.uniform3fv(webglGetUniformLocation(location),HEAPF32,value>>2,count*3);return}if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(webglGetUniformLocation(location),view)}function _emscripten_glUniform3i(location,v0,v1,v2){GLctx.uniform3i(webglGetUniformLocation(location),v0,v1,v2)}function _emscripten_glUniform3iv(location,count,value){if(GL.currentContext.version>=2){count&&GLctx.uniform3iv(webglGetUniformLocation(location),HEAP32,value>>2,count*3);return}if(count<=96){var view=__miniTempWebGLIntBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(webglGetUniformLocation(location),view)}function _emscripten_glUniform3ui(location,v0,v1,v2){GLctx.uniform3ui(webglGetUniformLocation(location),v0,v1,v2)}function _emscripten_glUniform3uiv(location,count,value){count&&GLctx.uniform3uiv(webglGetUniformLocation(location),HEAPU32,value>>2,count*3)}function _emscripten_glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(webglGetUniformLocation(location),v0,v1,v2,v3)}function _emscripten_glUniform4fv(location,count,value){if(GL.currentContext.version>=2){count&&GLctx.uniform4fv(webglGetUniformLocation(location),HEAPF32,value>>2,count*4);return}if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(webglGetUniformLocation(location),view)}function _emscripten_glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(webglGetUniformLocation(location),v0,v1,v2,v3)}function _emscripten_glUniform4iv(location,count,value){if(GL.currentContext.version>=2){count&&GLctx.uniform4iv(webglGetUniformLocation(location),HEAP32,value>>2,count*4);return}if(count<=72){var view=__miniTempWebGLIntBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(webglGetUniformLocation(location),view)}function _emscripten_glUniform4ui(location,v0,v1,v2,v3){GLctx.uniform4ui(webglGetUniformLocation(location),v0,v1,v2,v3)}function _emscripten_glUniform4uiv(location,count,value){count&&GLctx.uniform4uiv(webglGetUniformLocation(location),HEAPU32,value>>2,count*4)}function _emscripten_glUniformBlockBinding(program,uniformBlockIndex,uniformBlockBinding){program=GL.programs[program];GLctx["uniformBlockBinding"](program,uniformBlockIndex,uniformBlockBinding)}function _emscripten_glUniformMatrix2fv(location,count,transpose,value){if(GL.currentContext.version>=2){count&&GLctx.uniformMatrix2fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*4);return}if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(webglGetUniformLocation(location),!!transpose,view)}function _emscripten_glUniformMatrix2x3fv(location,count,transpose,value){count&&GLctx.uniformMatrix2x3fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*6)}function _emscripten_glUniformMatrix2x4fv(location,count,transpose,value){count&&GLctx.uniformMatrix2x4fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*8)}function _emscripten_glUniformMatrix3fv(location,count,transpose,value){if(GL.currentContext.version>=2){count&&GLctx.uniformMatrix3fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*9);return}if(count<=32){var view=miniTempWebGLFloatBuffers[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(webglGetUniformLocation(location),!!transpose,view)}function _emscripten_glUniformMatrix3x2fv(location,count,transpose,value){count&&GLctx.uniformMatrix3x2fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*6)}function _emscripten_glUniformMatrix3x4fv(location,count,transpose,value){count&&GLctx.uniformMatrix3x4fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*12)}function _emscripten_glUniformMatrix4fv(location,count,transpose,value){if(GL.currentContext.version>=2){count&&GLctx.uniformMatrix4fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*16);return}if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(webglGetUniformLocation(location),!!transpose,view)}function _emscripten_glUniformMatrix4x2fv(location,count,transpose,value){count&&GLctx.uniformMatrix4x2fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*8)}function _emscripten_glUniformMatrix4x3fv(location,count,transpose,value){count&&GLctx.uniformMatrix4x3fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*12)}function _emscripten_glUseProgram(program){program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program}function _emscripten_glValidateProgram(program){GLctx.validateProgram(GL.programs[program])}function _emscripten_glVertexAttrib1f(x0,x1){GLctx["vertexAttrib1f"](x0,x1)}function _emscripten_glVertexAttrib1fv(index,v){GLctx.vertexAttrib1f(index,HEAPF32[v>>2])}function _emscripten_glVertexAttrib2f(x0,x1,x2){GLctx["vertexAttrib2f"](x0,x1,x2)}function _emscripten_glVertexAttrib2fv(index,v){GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])}function _emscripten_glVertexAttrib3f(x0,x1,x2,x3){GLctx["vertexAttrib3f"](x0,x1,x2,x3)}function _emscripten_glVertexAttrib3fv(index,v){GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])}function _emscripten_glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _emscripten_glVertexAttribDivisor(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribDivisorANGLE(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribDivisorARB(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribDivisorEXT(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribDivisorNV(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _emscripten_glVertexAttribI4i(x0,x1,x2,x3,x4){GLctx["vertexAttribI4i"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttribI4iv(index,v){GLctx.vertexAttribI4i(index,HEAP32[v>>2],HEAP32[v+4>>2],HEAP32[v+8>>2],HEAP32[v+12>>2])}function _emscripten_glVertexAttribI4ui(x0,x1,x2,x3,x4){GLctx["vertexAttribI4ui"](x0,x1,x2,x3,x4)}function _emscripten_glVertexAttribI4uiv(index,v){GLctx.vertexAttribI4ui(index,HEAPU32[v>>2],HEAPU32[v+4>>2],HEAPU32[v+8>>2],HEAPU32[v+12>>2])}function _emscripten_glVertexAttribIPointer(index,size,type,stride,ptr){GLctx["vertexAttribIPointer"](index,size,type,stride,ptr)}function _emscripten_glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _emscripten_glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}function _emscripten_glWaitSync(sync,flags,timeoutLo,timeoutHi){GLctx.waitSync(GL.syncs[sync],flags,convertI32PairToI53(timeoutLo,timeoutHi))}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_get_heap_max(){return 2147483648}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=HEAPU8.length;requestedSize=requestedSize>>>0;var maxHeapSize=_emscripten_get_heap_max();if(requestedSize>maxHeapSize){return false}let alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop){var browserIterationFunc=getWasmTableEntry(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)}var JSEvents={inEventHandler:0,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence<y.precedence})},removeDeferredCalls:function(targetFunction){for(var i=0;i<JSEvents.deferredCalls.length;++i){if(JSEvents.deferredCalls[i].targetFunction==targetFunction){JSEvents.deferredCalls.splice(i,1);--i}}},canPerformEventHandlerRequests:function(){return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(!JSEvents.canPerformEventHandlerRequests()){return}for(var i=0;i<JSEvents.deferredCalls.length;++i){var call=JSEvents.deferredCalls[i];JSEvents.deferredCalls.splice(i,1);--i;call.targetFunction.apply(null,call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:function(target,eventTypeString){for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==target&&(!eventTypeString||eventTypeString==JSEvents.eventHandlers[i].eventTypeString)){JSEvents._removeHandler(i--)}}},_removeHandler:function(i){var h=JSEvents.eventHandlers[i];h.target.removeEventListener(h.eventTypeString,h.eventListenerFunc,h.useCapture);JSEvents.eventHandlers.splice(i,1)},registerOrRemoveHandler:function(eventHandler){var jsEventHandler=function jsEventHandler(event){++JSEvents.inEventHandler;JSEvents.currentEventHandler=eventHandler;JSEvents.runDeferredCalls();eventHandler.handlerFunc(event);JSEvents.runDeferredCalls();--JSEvents.inEventHandler};if(eventHandler.callbackfunc){eventHandler.eventListenerFunc=jsEventHandler;eventHandler.target.addEventListener(eventHandler.eventTypeString,jsEventHandler,eventHandler.useCapture);JSEvents.eventHandlers.push(eventHandler);JSEvents.registerRemoveEventListeners()}else{for(var i=0;i<JSEvents.eventHandlers.length;++i){if(JSEvents.eventHandlers[i].target==eventHandler.target&&JSEvents.eventHandlers[i].eventTypeString==eventHandler.eventTypeString){JSEvents._removeHandler(i--)}}}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};var __emscripten_webgl_power_preferences=["default","low-power","high-performance"];function maybeCStringToJsString(cString){return cString>2?UTF8ToString(cString):cString}var specialHTMLTargets=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];function findEventTarget(target){target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!="undefined"?document.querySelector(target):undefined);return domElement}function findCanvasEventTarget(target){return findEventTarget(target)}function _emscripten_webgl_do_create_context(target,attributes){var a=attributes>>2;var powerPreference=HEAP32[a+(24>>2)];var contextAttributes={"alpha":!!HEAP32[a+(0>>2)],"depth":!!HEAP32[a+(4>>2)],"stencil":!!HEAP32[a+(8>>2)],"antialias":!!HEAP32[a+(12>>2)],"premultipliedAlpha":!!HEAP32[a+(16>>2)],"preserveDrawingBuffer":!!HEAP32[a+(20>>2)],"powerPreference":__emscripten_webgl_power_preferences[powerPreference],"failIfMajorPerformanceCaveat":!!HEAP32[a+(28>>2)],majorVersion:HEAP32[a+(32>>2)],minorVersion:HEAP32[a+(36>>2)],enableExtensionsByDefault:HEAP32[a+(40>>2)],explicitSwapControl:HEAP32[a+(44>>2)],proxyContextToMainThread:HEAP32[a+(48>>2)],renderViaOffscreenBackBuffer:HEAP32[a+(52>>2)]};var canvas=findCanvasEventTarget(target);if(!canvas){return 0}if(contextAttributes.explicitSwapControl&&!contextAttributes.renderViaOffscreenBackBuffer){contextAttributes.renderViaOffscreenBackBuffer=true}var contextHandle=GL.createContext(canvas,contextAttributes);return contextHandle}function _emscripten_webgl_create_context(a0,a1){return _emscripten_webgl_do_create_context(a0,a1)}function _emscripten_webgl_destroy_context(contextHandle){if(GL.currentContext==contextHandle)GL.currentContext=0;GL.deleteContext(contextHandle)}function _emscripten_webgl_init_context_attributes(attributes){var a=attributes>>2;for(var i=0;i<56>>2;++i){HEAP32[a+i]=0}HEAP32[a+(0>>2)]=HEAP32[a+(4>>2)]=HEAP32[a+(12>>2)]=HEAP32[a+(16>>2)]=HEAP32[a+(32>>2)]=HEAP32[a+(40>>2)]=1}function _emscripten_webgl_make_context_current(contextHandle){var success=GL.makeContextCurrent(contextHandle);return success?0:-5}var ENV={};function getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _fd_fdstat_get(fd,pbuf){try{var stream=SYSCALLS.getStreamFromFD(fd);var type=stream.tty?2:FS.isDir(stream.mode)?3:FS.isLink(stream.mode)?7:4;HEAP8[pbuf>>0]=type;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function doReadv(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr<len)break}return ret}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return 61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function doWritev(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e instanceof FS.ErrnoError))throw e;return e.errno}}function _getTempRet0(){return getTempRet0()}function _getaddrinfo(node,service,hint,out){var addr=0;var port=0;var flags=0;var family=0;var type=0;var proto=0;var ai;function allocaddrinfo(family,type,proto,canon,addr,port){var sa,salen,ai;var errno;salen=family===10?28:16;addr=family===10?inetNtop6(addr):inetNtop4(addr);sa=_malloc(salen);errno=writeSockaddr(sa,family,addr,port);assert(!errno);ai=_malloc(32);HEAP32[ai+4>>2]=family;HEAP32[ai+8>>2]=type;HEAP32[ai+12>>2]=proto;HEAP32[ai+24>>2]=canon;HEAPU32[ai+20>>2]=sa;if(family===10){HEAP32[ai+16>>2]=28}else{HEAP32[ai+16>>2]=16}HEAP32[ai+28>>2]=0;return ai}if(hint){flags=HEAP32[hint>>2];family=HEAP32[hint+4>>2];type=HEAP32[hint+8>>2];proto=HEAP32[hint+12>>2]}if(type&&!proto){proto=type===2?17:6}if(!type&&proto){type=proto===17?2:1}if(proto===0){proto=6}if(type===0){type=1}if(!node&&!service){return-2}if(flags&~(1|2|4|1024|8|16|32)){return-1}if(hint!==0&&HEAP32[hint>>2]&2&&!node){return-1}if(flags&32){return-2}if(type!==0&&type!==1&&type!==2){return-7}if(family!==0&&family!==2&&family!==10){return-6}if(service){service=UTF8ToString(service);port=parseInt(service,10);if(isNaN(port)){if(flags&1024){return-2}return-8}}if(!node){if(family===0){family=2}if((flags&1)===0){if(family===2){addr=_htonl(2130706433)}else{addr=[0,0,0,1]}}ai=allocaddrinfo(family,type,proto,null,addr,port);HEAPU32[out>>2]=ai;return 0}node=UTF8ToString(node);addr=inetPton4(node);if(addr!==null){if(family===0||family===2){family=2}else if(family===10&&flags&8){addr=[0,0,_htonl(65535),addr];family=10}else{return-2}}else{addr=inetPton6(node);if(addr!==null){if(family===0||family===10){family=10}else{return-2}}}if(addr!=null){ai=allocaddrinfo(family,type,proto,node,addr,port);HEAPU32[out>>2]=ai;return 0}if(flags&4){return-2}node=DNS.lookup_name(node);addr=inetPton4(node);if(family===0){family=2}else if(family===10){addr=[0,0,_htonl(65535),addr]}ai=allocaddrinfo(family,type,proto,null,addr,port);HEAPU32[out>>2]=ai;return 0}function _getnameinfo(sa,salen,node,nodelen,serv,servlen,flags){var info=readSockaddr(sa,salen);if(info.errno){return-6}var port=info.port;var addr=info.addr;var overflowed=false;if(node&&nodelen){var lookup;if(flags&1||!(lookup=DNS.lookup_addr(addr))){if(flags&8){return-2}}else{addr=lookup}var numBytesWrittenExclNull=stringToUTF8(addr,node,nodelen);if(numBytesWrittenExclNull+1>=nodelen){overflowed=true}}if(serv&&servlen){port=""+port;var numBytesWrittenExclNull=stringToUTF8(port,serv,servlen);if(numBytesWrittenExclNull+1>=servlen){overflowed=true}}if(overflowed){return-12}return 0}function _glActiveTexture(x0){GLctx["activeTexture"](x0)}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glBeginTransformFeedback(x0){GLctx["beginTransformFeedback"](x0)}function _glBindAttribLocation(program,index,name){GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))}function _glBindBuffer(target,buffer){if(target==35051){GLctx.currentPixelPackBufferBinding=buffer}else if(target==35052){GLctx.currentPixelUnpackBufferBinding=buffer}GLctx.bindBuffer(target,GL.buffers[buffer])}function _glBindBufferBase(target,index,buffer){GLctx["bindBufferBase"](target,index,GL.buffers[buffer])}function _glBindFramebuffer(target,framebuffer){GLctx.bindFramebuffer(target,framebuffer?GL.framebuffers[framebuffer]:GL.currentContext.defaultFbo)}function _glBindRenderbuffer(target,renderbuffer){GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])}function _glBindTexture(target,texture){GLctx.bindTexture(target,GL.textures[texture])}function _glBindVertexArray(vao){GLctx["bindVertexArray"](GL.vaos[vao])}function _glBlendEquation(x0){GLctx["blendEquation"](x0)}function _glBlendFunc(x0,x1){GLctx["blendFunc"](x0,x1)}function _glBlendFuncSeparate(x0,x1,x2,x3){GLctx["blendFuncSeparate"](x0,x1,x2,x3)}function _glBlitFramebuffer(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9){GLctx["blitFramebuffer"](x0,x1,x2,x3,x4,x5,x6,x7,x8,x9)}function _glBufferData(target,size,data,usage){if(GL.currentContext.version>=2){if(data&&size){GLctx.bufferData(target,HEAPU8,usage,data,size)}else{GLctx.bufferData(target,size,usage)}}else{GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)}}function _glBufferSubData(target,offset,size,data){if(GL.currentContext.version>=2){size&&GLctx.bufferSubData(target,offset,HEAPU8,data,size);return}GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _glCheckFramebufferStatus(x0){return GLctx["checkFramebufferStatus"](x0)}function _glClear(x0){GLctx["clear"](x0)}function _glClearBufferfv(buffer,drawbuffer,value){GLctx["clearBufferfv"](buffer,drawbuffer,HEAPF32,value>>2)}function _glClearColor(x0,x1,x2,x3){GLctx["clearColor"](x0,x1,x2,x3)}function _glClearDepthf(x0){GLctx["clearDepth"](x0)}function _glColorMask(red,green,blue,alpha){GLctx.colorMask(!!red,!!green,!!blue,!!alpha)}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}function _glCompressedTexImage2D(target,level,internalFormat,width,height,border,imageSize,data){if(GL.currentContext.version>=2){if(GLctx.currentPixelUnpackBufferBinding||!imageSize){GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,imageSize,data)}else{GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,HEAPU8,data,imageSize)}return}GLctx["compressedTexImage2D"](target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imageSize,data){if(GL.currentContext.version>=2){if(GLctx.currentPixelUnpackBufferBinding||!imageSize){GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,imageSize,data)}else{GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,HEAPU8,data,imageSize)}return}GLctx["compressedTexSubImage2D"](target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)}function _glCompressedTexSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,imageSize,data){if(GLctx.currentPixelUnpackBufferBinding){GLctx["compressedTexSubImage3D"](target,level,xoffset,yoffset,zoffset,width,height,depth,format,imageSize,data)}else{GLctx["compressedTexSubImage3D"](target,level,xoffset,yoffset,zoffset,width,height,depth,format,HEAPU8,data,imageSize)}}function _glCopyBufferSubData(x0,x1,x2,x3,x4){GLctx["copyBufferSubData"](x0,x1,x2,x3,x4)}function _glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx["copyTexSubImage2D"](x0,x1,x2,x3,x4,x5,x6,x7)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;program.maxUniformLength=program.maxAttributeLength=program.maxUniformBlockNameLength=0;program.uniformIdCounter=1;GL.programs[id]=program;return id}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glCullFace(x0){GLctx["cullFace"](x0)}function _glDeleteBuffers(n,buffers){for(var i=0;i<n;i++){var id=HEAP32[buffers+i*4>>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null;if(id==GLctx.currentPixelPackBufferBinding)GLctx.currentPixelPackBufferBinding=0;if(id==GLctx.currentPixelUnpackBufferBinding)GLctx.currentPixelUnpackBufferBinding=0}}function _glDeleteFramebuffers(n,framebuffers){for(var i=0;i<n;++i){var id=HEAP32[framebuffers+i*4>>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}}function _glDeleteProgram(id){if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null}function _glDeleteRenderbuffers(n,renderbuffers){for(var i=0;i<n;i++){var id=HEAP32[renderbuffers+i*4>>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}}function _glDeleteShader(id){if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null}function _glDeleteTextures(n,textures){for(var i=0;i<n;i++){var id=HEAP32[textures+i*4>>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}}function _glDeleteVertexArrays(n,vaos){for(var i=0;i<n;i++){var id=HEAP32[vaos+i*4>>2];GLctx["deleteVertexArray"](GL.vaos[id]);GL.vaos[id]=null}}function _glDepthFunc(x0){GLctx["depthFunc"](x0)}function _glDepthMask(flag){GLctx.depthMask(!!flag)}function _glDisable(x0){GLctx["disable"](x0)}function _glDisableVertexAttribArray(index){GLctx.disableVertexAttribArray(index)}function _glDrawArrays(mode,first,count){GLctx.drawArrays(mode,first,count)}function _glDrawArraysInstanced(mode,first,count,primcount){GLctx["drawArraysInstanced"](mode,first,count,primcount)}function _glDrawBuffers(n,bufs){var bufArray=tempFixedLengthArray[n];for(var i=0;i<n;i++){bufArray[i]=HEAP32[bufs+i*4>>2]}GLctx["drawBuffers"](bufArray)}function _glDrawElementsInstanced(mode,count,type,indices,primcount){GLctx["drawElementsInstanced"](mode,count,type,indices,primcount)}function _glEnable(x0){GLctx["enable"](x0)}function _glEnableVertexAttribArray(index){GLctx.enableVertexAttribArray(index)}function _glEndTransformFeedback(){GLctx["endTransformFeedback"]()}function _glFinish(){GLctx["finish"]()}function _glFramebufferRenderbuffer(target,attachment,renderbuffertarget,renderbuffer){GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])}function _glFramebufferTexture2D(target,attachment,textarget,texture,level){GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)}function _glFramebufferTextureLayer(target,attachment,texture,level,layer){GLctx.framebufferTextureLayer(target,attachment,GL.textures[texture],level,layer)}function _glFrontFace(x0){GLctx["frontFace"](x0)}function _glGenBuffers(n,buffers){__glGenObject(n,buffers,"createBuffer",GL.buffers)}function _glGenFramebuffers(n,ids){__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)}function _glGenRenderbuffers(n,renderbuffers){__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)}function _glGenTextures(n,textures){__glGenObject(n,textures,"createTexture",GL.textures)}function _glGenVertexArrays(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}function _glGenerateMipmap(x0){GLctx["generateMipmap"](x0)}function _glGetError(){var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error}function _glGetFloatv(name_,p){emscriptenWebGLGet(name_,p,2)}function _glGetIntegerv(name_,p){emscriptenWebGLGet(name_,p,0)}function _glGetProgramBinary(program,bufSize,length,binaryFormat,binary){GL.recordError(1282)}function _glGetProgramInfoLog(program,maxLength,length,infoLog){var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _glGetProgramiv(program,pname,p){if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}program=GL.programs[program];if(pname==35716){var log=GLctx.getProgramInfoLog(program);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){if(!program.maxUniformLength){for(var i=0;i<GLctx.getProgramParameter(program,35718);++i){program.maxUniformLength=Math.max(program.maxUniformLength,GLctx.getActiveUniform(program,i).name.length+1)}}HEAP32[p>>2]=program.maxUniformLength}else if(pname==35722){if(!program.maxAttributeLength){for(var i=0;i<GLctx.getProgramParameter(program,35721);++i){program.maxAttributeLength=Math.max(program.maxAttributeLength,GLctx.getActiveAttrib(program,i).name.length+1)}}HEAP32[p>>2]=program.maxAttributeLength}else if(pname==35381){if(!program.maxUniformBlockNameLength){for(var i=0;i<GLctx.getProgramParameter(program,35382);++i){program.maxUniformBlockNameLength=Math.max(program.maxUniformBlockNameLength,GLctx.getActiveUniformBlockName(program,i).length+1)}}HEAP32[p>>2]=program.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(program,pname)}}function _glGetShaderInfoLog(shader,maxLength,length,infoLog){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _glGetShaderSource(shader,bufSize,length,source){var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull}function _glGetShaderiv(shader,pname,p){if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var logLength=log?log.length+1:0;HEAP32[p>>2]=logLength}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source?source.length+1:0;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}function _glGetString(name_){var ret=GL.stringCache[name_];if(!ret){switch(name_){case 7939:var exts=GLctx.getSupportedExtensions()||[];exts=exts.concat(exts.map(function(e){return"GL_"+e}));ret=stringToNewUTF8(exts.join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=s&&stringToNewUTF8(s);break;case 7938:var glVersion=GLctx.getParameter(7938);if(GL.currentContext.version>=2)glVersion="OpenGL ES 3.0 ("+glVersion+")";else{glVersion="OpenGL ES 2.0 ("+glVersion+")"}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(35724);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion="OpenGL ES GLSL ES "+ver_num[1]+" ("+glslVersion+")"}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280)}GL.stringCache[name_]=ret}return ret}function _glGetStringi(name,index){if(GL.currentContext.version<2){GL.recordError(1282);return 0}var stringiCache=GL.stringiCache[name];if(stringiCache){if(index<0||index>=stringiCache.length){GL.recordError(1281);return 0}return stringiCache[index]}switch(name){case 7939:var exts=GLctx.getSupportedExtensions()||[];exts=exts.concat(exts.map(function(e){return"GL_"+e}));exts=exts.map(function(e){return stringToNewUTF8(e)});stringiCache=GL.stringiCache[name]=exts;if(index<0||index>=stringiCache.length){GL.recordError(1281);return 0}return stringiCache[index];default:GL.recordError(1280);return 0}}function _glGetUniformBlockIndex(program,uniformBlockName){return GLctx["getUniformBlockIndex"](GL.programs[program],UTF8ToString(uniformBlockName))}function _glGetUniformLocation(program,name){name=UTF8ToString(name);if(program=GL.programs[program]){webglPrepareUniformLocationsBeforeFirstUse(program);var uniformLocsById=program.uniformLocsById;var arrayIndex=0;var uniformBaseName=name;var leftBrace=webglGetLeftBracePos(name);if(leftBrace>0){arrayIndex=jstoi_q(name.slice(leftBrace+1))>>>0;uniformBaseName=name.slice(0,leftBrace)}var sizeAndId=program.uniformSizeAndIdsByName[uniformBaseName];if(sizeAndId&&arrayIndex<sizeAndId[0]){arrayIndex+=sizeAndId[1];if(uniformLocsById[arrayIndex]=uniformLocsById[arrayIndex]||GLctx.getUniformLocation(program,name)){return arrayIndex}}}else{GL.recordError(1281)}return-1}function _glInvalidateFramebuffer(target,numAttachments,attachments){var list=tempFixedLengthArray[numAttachments];for(var i=0;i<numAttachments;i++){list[i]=HEAP32[attachments+i*4>>2]}GLctx["invalidateFramebuffer"](target,list)}function _glLinkProgram(program){program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}}function _glPixelStorei(pname,param){if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _glProgramBinary(program,binaryFormat,binary,length){GL.recordError(1280)}function _glProgramParameteri(program,pname,value){GL.recordError(1280)}function _glReadBuffer(x0){GLctx["readBuffer"](x0)}function _glReadPixels(x,y,width,height,format,type,pixels){if(GL.currentContext.version>=2){if(GLctx.currentPixelPackBufferBinding){GLctx.readPixels(x,y,width,height,format,type,pixels)}else{var heap=heapObjectForWebGLType(type);GLctx.readPixels(x,y,width,height,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}return}var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)}function _glRenderbufferStorage(x0,x1,x2,x3){GLctx["renderbufferStorage"](x0,x1,x2,x3)}function _glRenderbufferStorageMultisample(x0,x1,x2,x3,x4){GLctx["renderbufferStorageMultisample"](x0,x1,x2,x3,x4)}function _glScissor(x0,x1,x2,x3){GLctx["scissor"](x0,x1,x2,x3)}function _glShaderSource(shader,count,string,length){var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){if(GL.currentContext.version>=2){if(GLctx.currentPixelUnpackBufferBinding){GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,null)}return}GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)}function _glTexImage3D(target,level,internalFormat,width,height,depth,border,format,type,pixels){if(GLctx.currentPixelUnpackBufferBinding){GLctx["texImage3D"](target,level,internalFormat,width,height,depth,border,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx["texImage3D"](target,level,internalFormat,width,height,depth,border,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx["texImage3D"](target,level,internalFormat,width,height,depth,border,format,type,null)}}function _glTexParameterf(x0,x1,x2){GLctx["texParameterf"](x0,x1,x2)}function _glTexParameteri(x0,x1,x2){GLctx["texParameteri"](x0,x1,x2)}function _glTexStorage2D(x0,x1,x2,x3,x4){GLctx["texStorage2D"](x0,x1,x2,x3,x4)}function _glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels){if(GL.currentContext.version>=2){if(GLctx.currentPixelUnpackBufferBinding){GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,null)}return}var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)}function _glTexSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,pixels){if(GLctx.currentPixelUnpackBufferBinding){GLctx["texSubImage3D"](target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,pixels)}else if(pixels){var heap=heapObjectForWebGLType(type);GLctx["texSubImage3D"](target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,heap,pixels>>heapAccessShiftForWebGLHeap(heap))}else{GLctx["texSubImage3D"](target,level,xoffset,yoffset,zoffset,width,height,depth,format,type,null)}}function _glTransformFeedbackVaryings(program,count,varyings,bufferMode){program=GL.programs[program];var vars=[];for(var i=0;i<count;i++)vars.push(UTF8ToString(HEAP32[varyings+i*4>>2]));GLctx["transformFeedbackVaryings"](program,vars,bufferMode)}function _glUniform1f(location,v0){GLctx.uniform1f(webglGetUniformLocation(location),v0)}function _glUniform1i(location,v0){GLctx.uniform1i(webglGetUniformLocation(location),v0)}function _glUniform1iv(location,count,value){if(GL.currentContext.version>=2){count&&GLctx.uniform1iv(webglGetUniformLocation(location),HEAP32,value>>2,count);return}if(count<=288){var view=__miniTempWebGLIntBuffers[count-1];for(var i=0;i<count;++i){view[i]=HEAP32[value+4*i>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(webglGetUniformLocation(location),view)}function _glUniform1ui(location,v0){GLctx.uniform1ui(webglGetUniformLocation(location),v0)}function _glUniform2f(location,v0,v1){GLctx.uniform2f(webglGetUniformLocation(location),v0,v1)}function _glUniform2fv(location,count,value){if(GL.currentContext.version>=2){count&&GLctx.uniform2fv(webglGetUniformLocation(location),HEAPF32,value>>2,count*2);return}if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(webglGetUniformLocation(location),view)}function _glUniform2i(location,v0,v1){GLctx.uniform2i(webglGetUniformLocation(location),v0,v1)}function _glUniform2iv(location,count,value){if(GL.currentContext.version>=2){count&&GLctx.uniform2iv(webglGetUniformLocation(location),HEAP32,value>>2,count*2);return}if(count<=144){var view=__miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(webglGetUniformLocation(location),view)}function _glUniform3f(location,v0,v1,v2){GLctx.uniform3f(webglGetUniformLocation(location),v0,v1,v2)}function _glUniform3fv(location,count,value){if(GL.currentContext.version>=2){count&&GLctx.uniform3fv(webglGetUniformLocation(location),HEAPF32,value>>2,count*3);return}if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(webglGetUniformLocation(location),view)}function _glUniform3i(location,v0,v1,v2){GLctx.uniform3i(webglGetUniformLocation(location),v0,v1,v2)}function _glUniform4f(location,v0,v1,v2,v3){GLctx.uniform4f(webglGetUniformLocation(location),v0,v1,v2,v3)}function _glUniform4fv(location,count,value){if(GL.currentContext.version>=2){count&&GLctx.uniform4fv(webglGetUniformLocation(location),HEAPF32,value>>2,count*4);return}if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(webglGetUniformLocation(location),view)}function _glUniform4i(location,v0,v1,v2,v3){GLctx.uniform4i(webglGetUniformLocation(location),v0,v1,v2,v3)}function _glUniformBlockBinding(program,uniformBlockIndex,uniformBlockBinding){program=GL.programs[program];GLctx["uniformBlockBinding"](program,uniformBlockIndex,uniformBlockBinding)}function _glUniformMatrix2fv(location,count,transpose,value){if(GL.currentContext.version>=2){count&&GLctx.uniformMatrix2fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*4);return}if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(webglGetUniformLocation(location),!!transpose,view)}function _glUniformMatrix3fv(location,count,transpose,value){if(GL.currentContext.version>=2){count&&GLctx.uniformMatrix3fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*9);return}if(count<=32){var view=miniTempWebGLFloatBuffers[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(webglGetUniformLocation(location),!!transpose,view)}function _glUniformMatrix4fv(location,count,transpose,value){if(GL.currentContext.version>=2){count&&GLctx.uniformMatrix4fv(webglGetUniformLocation(location),!!transpose,HEAPF32,value>>2,count*16);return}if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(webglGetUniformLocation(location),!!transpose,view)}function _glUseProgram(program){program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program}function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx["vertexAttrib4f"](x0,x1,x2,x3,x4)}function _glVertexAttrib4fv(index,v){GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])}function _glVertexAttribDivisor(index,divisor){GLctx["vertexAttribDivisor"](index,divisor)}function _glVertexAttribI4ui(x0,x1,x2,x3,x4){GLctx["vertexAttribI4ui"](x0,x1,x2,x3,x4)}function _glVertexAttribIPointer(index,size,type,stride,ptr){GLctx["vertexAttribIPointer"](index,size,type,stride,ptr)}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)}function _glViewport(x0,x1,x2,x3){GLctx["viewport"](x0,x1,x2,x3)}var GodotRuntime={get_func:function(ptr){return wasmTable.get(ptr)},error:function(){err.apply(null,Array.from(arguments))},print:function(){out.apply(null,Array.from(arguments))},malloc:function(p_size){return _malloc(p_size)},free:function(p_ptr){_free(p_ptr)},getHeapValue:function(p_ptr,p_type){return getValue(p_ptr,p_type)},setHeapValue:function(p_ptr,p_value,p_type){setValue(p_ptr,p_value,p_type)},heapSub:function(p_heap,p_ptr,p_len){const bytes=p_heap.BYTES_PER_ELEMENT;return p_heap.subarray(p_ptr/bytes,p_ptr/bytes+p_len)},heapSlice:function(p_heap,p_ptr,p_len){const bytes=p_heap.BYTES_PER_ELEMENT;return p_heap.slice(p_ptr/bytes,p_ptr/bytes+p_len)},heapCopy:function(p_dst,p_src,p_ptr){const bytes=p_src.BYTES_PER_ELEMENT;return p_dst.set(p_src,p_ptr/bytes)},parseString:function(p_ptr){return UTF8ToString(p_ptr)},parseStringArray:function(p_ptr,p_size){const strings=[];const ptrs=GodotRuntime.heapSub(HEAP32,p_ptr,p_size);ptrs.forEach(function(ptr){strings.push(GodotRuntime.parseString(ptr))});return strings},strlen:function(p_str){return lengthBytesUTF8(p_str)},allocString:function(p_str){const length=GodotRuntime.strlen(p_str)+1;const c_str=GodotRuntime.malloc(length);stringToUTF8(p_str,c_str,length);return c_str},allocStringArray:function(p_strings){const size=p_strings.length;const c_ptr=GodotRuntime.malloc(size*4);for(let i=0;i<size;i++){HEAP32[(c_ptr>>2)+i]=GodotRuntime.allocString(p_strings[i])}return c_ptr},freeStringArray:function(p_ptr,p_len){for(let i=0;i<p_len;i++){GodotRuntime.free(HEAP32[(p_ptr>>2)+i])}GodotRuntime.free(p_ptr)},stringToHeap:function(p_str,p_ptr,p_len){return stringToUTF8Array(p_str,HEAP8,p_ptr,p_len)}};var GodotConfig={canvas:null,locale:"en",canvas_resize_policy:2,virtual_keyboard:false,persistent_drops:false,on_execute:null,on_exit:null,init_config:function(p_opts){GodotConfig.canvas_resize_policy=p_opts["canvasResizePolicy"];GodotConfig.canvas=p_opts["canvas"];GodotConfig.locale=p_opts["locale"]||GodotConfig.locale;GodotConfig.virtual_keyboard=p_opts["virtualKeyboard"];GodotConfig.persistent_drops=!!p_opts["persistentDrops"];GodotConfig.on_execute=p_opts["onExecute"];GodotConfig.on_exit=p_opts["onExit"];if(p_opts["focusCanvas"]){GodotConfig.canvas.focus()}},locate_file:function(file){return Module["locateFile"](file)},clear:function(){GodotConfig.canvas=null;GodotConfig.locale="en";GodotConfig.canvas_resize_policy=2;GodotConfig.virtual_keyboard=false;GodotConfig.persistent_drops=false;GodotConfig.on_execute=null;GodotConfig.on_exit=null}};var ERRNO_CODES={};var GodotFS={_idbfs:false,_syncing:false,_mount_points:[],is_persistent:function(){return GodotFS._idbfs?1:0},init:function(persistentPaths){GodotFS._idbfs=false;if(!Array.isArray(persistentPaths)){return Promise.reject(new Error("Persistent paths must be an array"))}if(!persistentPaths.length){return Promise.resolve()}GodotFS._mount_points=persistentPaths.slice();function createRecursive(dir){try{FS.stat(dir)}catch(e){if(e.errno!==ERRNO_CODES.ENOENT){throw e}FS.mkdirTree(dir)}}GodotFS._mount_points.forEach(function(path){createRecursive(path);FS.mount(IDBFS,{},path)});return new Promise(function(resolve,reject){FS.syncfs(true,function(err){if(err){GodotFS._mount_points=[];GodotFS._idbfs=false;GodotRuntime.print(`IndexedDB not available: ${err.message}`)}else{GodotFS._idbfs=true}resolve(err)})})},deinit:function(){GodotFS._mount_points.forEach(function(path){try{FS.unmount(path)}catch(e){GodotRuntime.print("Already unmounted",e)}if(GodotFS._idbfs&&IDBFS.dbs[path]){IDBFS.dbs[path].close();delete IDBFS.dbs[path]}});GodotFS._mount_points=[];GodotFS._idbfs=false;GodotFS._syncing=false},sync:function(){if(GodotFS._syncing){GodotRuntime.error("Already syncing!");return Promise.resolve()}GodotFS._syncing=true;return new Promise(function(resolve,reject){FS.syncfs(false,function(error){if(error){GodotRuntime.error(`Failed to save IDB file system: ${error.message}`)}GodotFS._syncing=false;resolve(error)})})},copy_to_fs:function(path,buffer){const idx=path.lastIndexOf("/");let dir="/";if(idx>0){dir=path.slice(0,idx)}try{FS.stat(dir)}catch(e){if(e.errno!==ERRNO_CODES.ENOENT){throw e}FS.mkdirTree(dir)}FS.writeFile(path,new Uint8Array(buffer))}};var GodotOS={request_quit:function(){},_async_cbs:[],_fs_sync_promise:null,atexit:function(p_promise_cb){GodotOS._async_cbs.push(p_promise_cb)},cleanup:function(exit_code){const cb=GodotConfig.on_exit;GodotFS.deinit();GodotConfig.clear();if(cb){cb(exit_code)}},finish_async:function(callback){GodotOS._fs_sync_promise.then(function(err){const promises=[];GodotOS._async_cbs.forEach(function(cb){promises.push(new Promise(cb))});return Promise.all(promises)}).then(function(){return GodotFS.sync()}).then(function(err){setTimeout(function(){callback()},0)})}};var GodotAudio={ctx:null,input:null,driver:null,interval:0,init:function(mix_rate,latency,onstatechange,onlatencyupdate){const opts={};if(mix_rate){opts["sampleRate"]=mix_rate}const ctx=new(window.AudioContext||window.webkitAudioContext)(opts);GodotAudio.ctx=ctx;ctx.onstatechange=function(){let state=0;switch(ctx.state){case"suspended":state=0;break;case"running":state=1;break;case"closed":state=2;break}onstatechange(state)};ctx.onstatechange();GodotAudio.interval=setInterval(function(){let computed_latency=0;if(ctx.baseLatency){computed_latency+=GodotAudio.ctx.baseLatency}if(ctx.outputLatency){computed_latency+=GodotAudio.ctx.outputLatency}onlatencyupdate(computed_latency)},1e3);GodotOS.atexit(GodotAudio.close_async);return ctx.destination.channelCount},create_input:function(callback){if(GodotAudio.input){return 0}function gotMediaInput(stream){try{GodotAudio.input=GodotAudio.ctx.createMediaStreamSource(stream);callback(GodotAudio.input)}catch(e){GodotRuntime.error("Failed creaating input.",e)}}if(navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){navigator.mediaDevices.getUserMedia({"audio":true}).then(gotMediaInput,function(e){GodotRuntime.error("Error getting user media.",e)})}else{if(!navigator.getUserMedia){navigator.getUserMedia=navigator.webkitGetUserMedia||navigator.mozGetUserMedia}if(!navigator.getUserMedia){GodotRuntime.error("getUserMedia not available.");return 1}navigator.getUserMedia({"audio":true},gotMediaInput,function(e){GodotRuntime.print(e)})}return 0},close_async:function(resolve,reject){const ctx=GodotAudio.ctx;GodotAudio.ctx=null;if(!ctx){resolve();return}if(GodotAudio.interval){clearInterval(GodotAudio.interval);GodotAudio.interval=0}if(GodotAudio.input){GodotAudio.input.disconnect();GodotAudio.input=null}let closed=Promise.resolve();if(GodotAudio.driver){closed=GodotAudio.driver.close()}closed.then(function(){return ctx.close()}).then(function(){ctx.onstatechange=null;resolve()}).catch(function(e){ctx.onstatechange=null;GodotRuntime.error("Error closing AudioContext",e);resolve()})}};function _godot_audio_capture_start(){return GodotAudio.create_input(function(input){input.connect(GodotAudio.driver.get_node())})}function _godot_audio_capture_stop(){if(GodotAudio.input){const tracks=GodotAudio.input["mediaStream"]["getTracks"]();for(let i=0;i<tracks.length;i++){tracks[i]["stop"]()}GodotAudio.input.disconnect();GodotAudio.input=null}}function _godot_audio_has_script_processor(){return GodotAudio.ctx&&GodotAudio.ctx.createScriptProcessor?1:0}function _godot_audio_has_worklet(){return GodotAudio.ctx&&GodotAudio.ctx.audioWorklet?1:0}function _godot_audio_init(p_mix_rate,p_latency,p_state_change,p_latency_update){const statechange=GodotRuntime.get_func(p_state_change);const latencyupdate=GodotRuntime.get_func(p_latency_update);const mix_rate=GodotRuntime.getHeapValue(p_mix_rate,"i32");const channels=GodotAudio.init(mix_rate,p_latency,statechange,latencyupdate);GodotRuntime.setHeapValue(p_mix_rate,GodotAudio.ctx.sampleRate,"i32");return channels}function _godot_audio_is_available(){if(!(window.AudioContext||window.webkitAudioContext)){return 0}return 1}function _godot_audio_resume(){if(GodotAudio.ctx&&GodotAudio.ctx.state!=="running"){GodotAudio.ctx.resume()}}var GodotAudioScript={script:null,create:function(buffer_length,channel_count){GodotAudioScript.script=GodotAudio.ctx.createScriptProcessor(buffer_length,2,channel_count);GodotAudio.driver=GodotAudioScript;return GodotAudioScript.script.bufferSize},start:function(p_in_buf,p_in_size,p_out_buf,p_out_size,onprocess){GodotAudioScript.script.onaudioprocess=function(event){const inb=GodotRuntime.heapSub(HEAPF32,p_in_buf,p_in_size);const input=event.inputBuffer;if(GodotAudio.input){const inlen=input.getChannelData(0).length;for(let ch=0;ch<2;ch++){const data=input.getChannelData(ch);for(let s=0;s<inlen;s++){inb[s*2+ch]=data[s]}}}onprocess();const outb=GodotRuntime.heapSub(HEAPF32,p_out_buf,p_out_size);const output=event.outputBuffer;const channels=output.numberOfChannels;for(let ch=0;ch<channels;ch++){const data=output.getChannelData(ch);for(let sample=0;sample<data.length;sample++){data[sample]=outb[sample*channels+ch]}}};GodotAudioScript.script.connect(GodotAudio.ctx.destination)},get_node:function(){return GodotAudioScript.script},close:function(){return new Promise(function(resolve,reject){GodotAudioScript.script.disconnect();GodotAudioScript.script.onaudioprocess=null;GodotAudioScript.script=null;resolve()})}};function _godot_audio_script_create(buffer_length,channel_count){const buf_len=GodotRuntime.getHeapValue(buffer_length,"i32");try{const out_len=GodotAudioScript.create(buf_len,channel_count);GodotRuntime.setHeapValue(buffer_length,out_len,"i32")}catch(e){GodotRuntime.error("Error starting AudioDriverScriptProcessor",e);return 1}return 0}function _godot_audio_script_start(p_in_buf,p_in_size,p_out_buf,p_out_size,p_cb){const onprocess=GodotRuntime.get_func(p_cb);GodotAudioScript.start(p_in_buf,p_in_size,p_out_buf,p_out_size,onprocess)}var GodotAudioWorklet={promise:null,worklet:null,ring_buffer:null,create:function(channels){const path=GodotConfig.locate_file("godot.audio.worklet.js");GodotAudioWorklet.promise=GodotAudio.ctx.audioWorklet.addModule(path).then(function(){GodotAudioWorklet.worklet=new AudioWorkletNode(GodotAudio.ctx,"godot-processor",{"outputChannelCount":[channels]});return Promise.resolve()});GodotAudio.driver=GodotAudioWorklet},start:function(in_buf,out_buf,state){GodotAudioWorklet.promise.then(function(){const node=GodotAudioWorklet.worklet;node.connect(GodotAudio.ctx.destination);node.port.postMessage({"cmd":"start","data":[state,in_buf,out_buf]});node.port.onmessage=function(event){GodotRuntime.error(event.data)}})},start_no_threads:function(p_out_buf,p_out_size,out_callback,p_in_buf,p_in_size,in_callback){function RingBuffer(){let wpos=0;let rpos=0;let pending_samples=0;const wbuf=new Float32Array(p_out_size);function send(port){if(pending_samples===0){return}const buffer=GodotRuntime.heapSub(HEAPF32,p_out_buf,p_out_size);const size=buffer.length;const tot_sent=pending_samples;out_callback(wpos,pending_samples);if(wpos+pending_samples>=size){const high=size-wpos;wbuf.set(buffer.subarray(wpos,size));pending_samples-=high;wpos=0}if(pending_samples>0){wbuf.set(buffer.subarray(wpos,wpos+pending_samples),tot_sent-pending_samples)}port.postMessage({"cmd":"chunk","data":wbuf.subarray(0,tot_sent)});wpos+=pending_samples;pending_samples=0}this.receive=function(recv_buf){const buffer=GodotRuntime.heapSub(HEAPF32,p_in_buf,p_in_size);const from=rpos;let to_write=recv_buf.length;let high=0;if(rpos+to_write>=p_in_size){high=p_in_size-rpos;buffer.set(recv_buf.subarray(0,high),rpos);to_write-=high;rpos=0}if(to_write){buffer.set(recv_buf.subarray(high,to_write),rpos)}in_callback(from,recv_buf.length);rpos+=to_write};this.consumed=function(size,port){pending_samples+=size;send(port)}}GodotAudioWorklet.ring_buffer=new RingBuffer;GodotAudioWorklet.promise.then(function(){const node=GodotAudioWorklet.worklet;const buffer=GodotRuntime.heapSlice(HEAPF32,p_out_buf,p_out_size);node.connect(GodotAudio.ctx.destination);node.port.postMessage({"cmd":"start_nothreads","data":[buffer,p_in_size]});node.port.onmessage=function(event){if(!GodotAudioWorklet.worklet){return}if(event.data["cmd"]==="read"){const read=event.data["data"];GodotAudioWorklet.ring_buffer.consumed(read,GodotAudioWorklet.worklet.port)}else if(event.data["cmd"]==="input"){const buf=event.data["data"];if(buf.length>p_in_size){GodotRuntime.error("Input chunk is too big");return}GodotAudioWorklet.ring_buffer.receive(buf)}else{GodotRuntime.error(event.data)}}})},get_node:function(){return GodotAudioWorklet.worklet},close:function(){return new Promise(function(resolve,reject){if(GodotAudioWorklet.promise===null){return}GodotAudioWorklet.promise.then(function(){GodotAudioWorklet.worklet.port.postMessage({"cmd":"stop","data":null});GodotAudioWorklet.worklet.disconnect();GodotAudioWorklet.worklet=null;GodotAudioWorklet.promise=null;resolve()}).catch(function(err){})})}};function _godot_audio_worklet_create(channels){try{GodotAudioWorklet.create(channels)}catch(e){GodotRuntime.error("Error starting AudioDriverWorklet",e);return 1}return 0}function _godot_audio_worklet_start_no_threads(p_out_buf,p_out_size,p_out_callback,p_in_buf,p_in_size,p_in_callback){const out_callback=GodotRuntime.get_func(p_out_callback);const in_callback=GodotRuntime.get_func(p_in_callback);GodotAudioWorklet.start_no_threads(p_out_buf,p_out_size,out_callback,p_in_buf,p_in_size,in_callback)}function _godot_js_config_canvas_id_get(p_ptr,p_ptr_max){GodotRuntime.stringToHeap(`#${GodotConfig.canvas.id}`,p_ptr,p_ptr_max)}function _godot_js_config_locale_get(p_ptr,p_ptr_max){GodotRuntime.stringToHeap(GodotConfig.locale,p_ptr,p_ptr_max)}var GodotDisplayCursor={shape:"auto",visible:true,cursors:{},set_style:function(style){GodotConfig.canvas.style.cursor=style},set_shape:function(shape){GodotDisplayCursor.shape=shape;let css=shape;if(shape in GodotDisplayCursor.cursors){const c=GodotDisplayCursor.cursors[shape];css=`url("${c.url}") ${c.x} ${c.y}, auto`}if(GodotDisplayCursor.visible){GodotDisplayCursor.set_style(css)}},clear:function(){GodotDisplayCursor.set_style("");GodotDisplayCursor.shape="auto";GodotDisplayCursor.visible=true;Object.keys(GodotDisplayCursor.cursors).forEach(function(key){URL.revokeObjectURL(GodotDisplayCursor.cursors[key]);delete GodotDisplayCursor.cursors[key]})},lockPointer:function(){const canvas=GodotConfig.canvas;if(canvas.requestPointerLock){canvas.requestPointerLock()}},releasePointer:function(){if(document.exitPointerLock){document.exitPointerLock()}},isPointerLocked:function(){return document.pointerLockElement===GodotConfig.canvas}};var GodotEventListeners={handlers:[],has:function(target,event,method,capture){return GodotEventListeners.handlers.findIndex(function(e){return e.target===target&&e.event===event&&e.method===method&&e.capture===capture})!==-1},add:function(target,event,method,capture){if(GodotEventListeners.has(target,event,method,capture)){return}function Handler(p_target,p_event,p_method,p_capture){this.target=p_target;this.event=p_event;this.method=p_method;this.capture=p_capture}GodotEventListeners.handlers.push(new Handler(target,event,method,capture));target.addEventListener(event,method,capture)},clear:function(){GodotEventListeners.handlers.forEach(function(h){h.target.removeEventListener(h.event,h.method,h.capture)});GodotEventListeners.handlers.length=0}};function _emscripten_webgl_do_get_current_context(){return GL.currentContext?GL.currentContext.handle:0}function _emscripten_webgl_get_current_context(){return _emscripten_webgl_do_get_current_context()}var GodotDisplayScreen={desired_size:[0,0],hidpi:true,getPixelRatio:function(){return GodotDisplayScreen.hidpi?window.devicePixelRatio||1:1},isFullscreen:function(){const elem=document.fullscreenElement||document.mozFullscreenElement||document.webkitFullscreenElement||document.msFullscreenElement;if(elem){return elem===GodotConfig.canvas}return document.fullscreen||document.mozFullScreen||document.webkitIsFullscreen},hasFullscreen:function(){return document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled},requestFullscreen:function(){if(!GodotDisplayScreen.hasFullscreen()){return 1}const canvas=GodotConfig.canvas;try{const promise=(canvas.requestFullscreen||canvas.msRequestFullscreen||canvas.mozRequestFullScreen||canvas.mozRequestFullscreen||canvas.webkitRequestFullscreen).call(canvas);if(promise){promise.catch(function(){})}}catch(e){return 1}return 0},exitFullscreen:function(){if(!GodotDisplayScreen.isFullscreen()){return 0}try{const promise=document.exitFullscreen();if(promise){promise.catch(function(){})}}catch(e){return 1}return 0},_updateGL:function(){const gl_context_handle=_emscripten_webgl_get_current_context();const gl=GL.getContext(gl_context_handle);if(gl){GL.resizeOffscreenFramebuffer(gl)}},updateSize:function(){const isFullscreen=GodotDisplayScreen.isFullscreen();const wantsFullWindow=GodotConfig.canvas_resize_policy===2;const noResize=GodotConfig.canvas_resize_policy===0;const wwidth=GodotDisplayScreen.desired_size[0];const wheight=GodotDisplayScreen.desired_size[1];const canvas=GodotConfig.canvas;let width=wwidth;let height=wheight;if(noResize){if(canvas.width!==width||canvas.height!==height){GodotDisplayScreen.desired_size=[canvas.width,canvas.height];GodotDisplayScreen._updateGL();return 1}return 0}const scale=GodotDisplayScreen.getPixelRatio();if(isFullscreen||wantsFullWindow){width=window.innerWidth*scale;height=window.innerHeight*scale}const csw=`${width/scale}px`;const csh=`${height/scale}px`;if(canvas.style.width!==csw||canvas.style.height!==csh||canvas.width!==width||canvas.height!==height){canvas.width=width;canvas.height=height;canvas.style.width=csw;canvas.style.height=csh;GodotDisplayScreen._updateGL();return 1}return 0}};var GodotDisplayVK={textinput:null,textarea:null,available:function(){return GodotConfig.virtual_keyboard&&"ontouchstart"in window},init:function(input_cb){function create(what){const elem=document.createElement(what);elem.style.display="none";elem.style.position="absolute";elem.style.zIndex="-1";elem.style.background="transparent";elem.style.padding="0px";elem.style.margin="0px";elem.style.overflow="hidden";elem.style.width="0px";elem.style.height="0px";elem.style.border="0px";elem.style.outline="none";elem.readonly=true;elem.disabled=true;GodotEventListeners.add(elem,"input",function(evt){const c_str=GodotRuntime.allocString(elem.value);input_cb(c_str,elem.selectionEnd);GodotRuntime.free(c_str)},false);GodotEventListeners.add(elem,"blur",function(evt){elem.style.display="none";elem.readonly=true;elem.disabled=true},false);GodotConfig.canvas.insertAdjacentElement("beforebegin",elem);return elem}GodotDisplayVK.textinput=create("input");GodotDisplayVK.textarea=create("textarea");GodotDisplayVK.updateSize()},show:function(text,multiline,start,end){if(!GodotDisplayVK.textinput||!GodotDisplayVK.textarea){return}if(GodotDisplayVK.textinput.style.display!==""||GodotDisplayVK.textarea.style.display!==""){GodotDisplayVK.hide()}GodotDisplayVK.updateSize();const elem=multiline?GodotDisplayVK.textarea:GodotDisplayVK.textinput;elem.readonly=false;elem.disabled=false;elem.value=text;elem.style.display="block";elem.focus();elem.setSelectionRange(start,end)},hide:function(){if(!GodotDisplayVK.textinput||!GodotDisplayVK.textarea){return}[GodotDisplayVK.textinput,GodotDisplayVK.textarea].forEach(function(elem){elem.blur();elem.style.display="none";elem.value=""})},updateSize:function(){if(!GodotDisplayVK.textinput||!GodotDisplayVK.textarea){return}const rect=GodotConfig.canvas.getBoundingClientRect();function update(elem){elem.style.left=`${rect.left}px`;elem.style.top=`${rect.top}px`;elem.style.width=`${rect.width}px`;elem.style.height=`${rect.height}px`}update(GodotDisplayVK.textinput);update(GodotDisplayVK.textarea)},clear:function(){if(GodotDisplayVK.textinput){GodotDisplayVK.textinput.remove();GodotDisplayVK.textinput=null}if(GodotDisplayVK.textarea){GodotDisplayVK.textarea.remove();GodotDisplayVK.textarea=null}}};var GodotDisplay={window_icon:"",findDPI:function(){function testDPI(dpi){return window.matchMedia(`(max-resolution: ${dpi}dpi)`).matches}function bisect(low,high,func){const mid=parseInt((high-low)/2+low,10);if(high-low<=1){return func(high)?high:low}if(func(mid)){return bisect(low,mid,func)}return bisect(mid,high,func)}try{const dpi=bisect(0,800,testDPI);return dpi>=96?dpi:96}catch(e){return 96}}};function _godot_js_display_alert(p_text){window.alert(GodotRuntime.parseString(p_text))}function _godot_js_display_canvas_focus(){GodotConfig.canvas.focus()}function _godot_js_display_canvas_is_focused(){return document.activeElement===GodotConfig.canvas}function _godot_js_display_clipboard_get(callback){const func=GodotRuntime.get_func(callback);try{navigator.clipboard.readText().then(function(result){const ptr=GodotRuntime.allocString(result);func(ptr);GodotRuntime.free(ptr)}).catch(function(e){})}catch(e){}}function _godot_js_display_clipboard_set(p_text){const text=GodotRuntime.parseString(p_text);if(!navigator.clipboard||!navigator.clipboard.writeText){return 1}navigator.clipboard.writeText(text).catch(function(e){GodotRuntime.error("Setting OS clipboard is only possible from an input callback for the HTML5 plafrom. Exception:",e)});return 0}function _godot_js_display_cursor_is_hidden(){return!GodotDisplayCursor.visible}function _godot_js_display_cursor_is_locked(){return GodotDisplayCursor.isPointerLocked()?1:0}function _godot_js_display_cursor_lock_set(p_lock){if(p_lock){GodotDisplayCursor.lockPointer()}else{GodotDisplayCursor.releasePointer()}}function _godot_js_display_cursor_set_custom_shape(p_shape,p_ptr,p_len,p_hotspot_x,p_hotspot_y){const shape=GodotRuntime.parseString(p_shape);const old_shape=GodotDisplayCursor.cursors[shape];if(p_len>0){const png=new Blob([GodotRuntime.heapSlice(HEAPU8,p_ptr,p_len)],{type:"image/png"});const url=URL.createObjectURL(png);GodotDisplayCursor.cursors[shape]={url:url,x:p_hotspot_x,y:p_hotspot_y}}else{delete GodotDisplayCursor.cursors[shape]}if(shape===GodotDisplayCursor.shape){GodotDisplayCursor.set_shape(GodotDisplayCursor.shape)}if(old_shape){URL.revokeObjectURL(old_shape.url)}}function _godot_js_display_cursor_set_shape(p_string){GodotDisplayCursor.set_shape(GodotRuntime.parseString(p_string))}function _godot_js_display_cursor_set_visible(p_visible){const visible=p_visible!==0;if(visible===GodotDisplayCursor.visible){return}GodotDisplayCursor.visible=visible;if(visible){GodotDisplayCursor.set_shape(GodotDisplayCursor.shape)}else{GodotDisplayCursor.set_style("none")}}function _godot_js_display_desired_size_set(width,height){GodotDisplayScreen.desired_size=[width,height];GodotDisplayScreen.updateSize()}function _godot_js_display_fullscreen_cb(callback){const canvas=GodotConfig.canvas;const func=GodotRuntime.get_func(callback);function change_cb(evt){if(evt.target===canvas){func(GodotDisplayScreen.isFullscreen())}}GodotEventListeners.add(document,"fullscreenchange",change_cb,false);GodotEventListeners.add(document,"mozfullscreenchange",change_cb,false);GodotEventListeners.add(document,"webkitfullscreenchange",change_cb,false)}function _godot_js_display_fullscreen_exit(){return GodotDisplayScreen.exitFullscreen()}function _godot_js_display_fullscreen_request(){return GodotDisplayScreen.requestFullscreen()}function _godot_js_display_glGetBufferSubData(target,offset,size,data){const gl_context_handle=_emscripten_webgl_get_current_context();const gl=GL.getContext(gl_context_handle);if(gl){gl.GLctx["getBufferSubData"](target,offset,HEAPU8,data,size)}}function _godot_js_display_has_webgl(p_version){if(p_version!==1&&p_version!==2){return false}try{return!!document.createElement("canvas").getContext(p_version===2?"webgl2":"webgl")}catch(e){}return false}function _godot_js_display_is_swap_ok_cancel(){const win=["Windows","Win64","Win32","WinCE"];const plat=navigator.platform||"";if(win.indexOf(plat)!==-1){return 1}return 0}function _godot_js_display_notification_cb(callback,p_enter,p_exit,p_in,p_out){const canvas=GodotConfig.canvas;const func=GodotRuntime.get_func(callback);const notif=[p_enter,p_exit,p_in,p_out];["mouseover","mouseleave","focus","blur"].forEach(function(evt_name,idx){GodotEventListeners.add(canvas,evt_name,function(){func(notif[idx])},true)})}function _godot_js_display_pixel_ratio_get(){return GodotDisplayScreen.getPixelRatio()}function _godot_js_display_screen_dpi_get(){return GodotDisplay.findDPI()}function _godot_js_display_screen_size_get(width,height){const scale=GodotDisplayScreen.getPixelRatio();GodotRuntime.setHeapValue(width,window.screen.width*scale,"i32");GodotRuntime.setHeapValue(height,window.screen.height*scale,"i32")}function _godot_js_display_setup_canvas(p_width,p_height,p_fullscreen,p_hidpi){const canvas=GodotConfig.canvas;GodotEventListeners.add(canvas,"contextmenu",function(ev){ev.preventDefault()},false);GodotEventListeners.add(canvas,"webglcontextlost",function(ev){alert("WebGL context lost, please reload the page");ev.preventDefault()},false);GodotDisplayScreen.hidpi=!!p_hidpi;switch(GodotConfig.canvas_resize_policy){case 0:GodotDisplayScreen.desired_size=[canvas.width,canvas.height];break;case 1:GodotDisplayScreen.desired_size=[p_width,p_height];break;default:canvas.style.position="absolute";canvas.style.top=0;canvas.style.left=0;break}GodotDisplayScreen.updateSize();if(p_fullscreen){GodotDisplayScreen.requestFullscreen()}}function _godot_js_display_size_update(){const updated=GodotDisplayScreen.updateSize();if(updated){GodotDisplayVK.updateSize()}return updated}function _godot_js_display_touchscreen_is_available(){return"ontouchstart"in window}function _godot_js_display_vk_available(){return GodotDisplayVK.available()}function _godot_js_display_vk_cb(p_input_cb){const input_cb=GodotRuntime.get_func(p_input_cb);if(GodotDisplayVK.available()){GodotDisplayVK.init(input_cb)}}function _godot_js_display_vk_hide(){GodotDisplayVK.hide()}function _godot_js_display_vk_show(p_text,p_multiline,p_start,p_end){const text=GodotRuntime.parseString(p_text);const start=p_start>0?p_start:0;const end=p_end>0?p_end:start;GodotDisplayVK.show(text,p_multiline,start,end)}function _godot_js_display_window_blur_cb(callback){const func=GodotRuntime.get_func(callback);GodotEventListeners.add(window,"blur",function(){func()},false)}function _godot_js_display_window_icon_set(p_ptr,p_len){let link=document.getElementById("-gd-engine-icon");if(link===null){link=document.createElement("link");link.rel="icon";link.id="-gd-engine-icon";document.head.appendChild(link)}const old_icon=GodotDisplay.window_icon;const png=new Blob([GodotRuntime.heapSlice(HEAPU8,p_ptr,p_len)],{type:"image/png"});GodotDisplay.window_icon=URL.createObjectURL(png);link.href=GodotDisplay.window_icon;if(old_icon){URL.revokeObjectURL(old_icon)}}function _godot_js_display_window_size_get(p_width,p_height){GodotRuntime.setHeapValue(p_width,GodotConfig.canvas.width,"i32");GodotRuntime.setHeapValue(p_height,GodotConfig.canvas.height,"i32")}function _godot_js_display_window_title_set(p_data){document.title=GodotRuntime.parseString(p_data)}function _godot_js_eval(p_js,p_use_global_ctx,p_union_ptr,p_byte_arr,p_byte_arr_write,p_callback){const js_code=GodotRuntime.parseString(p_js);let eval_ret=null;try{if(p_use_global_ctx){const global_eval=eval;eval_ret=global_eval(js_code)}else{eval_ret=eval(js_code)}}catch(e){GodotRuntime.error(e)}switch(typeof eval_ret){case"boolean":GodotRuntime.setHeapValue(p_union_ptr,eval_ret,"i32");return 1;case"number":GodotRuntime.setHeapValue(p_union_ptr,eval_ret,"double");return 3;case"string":GodotRuntime.setHeapValue(p_union_ptr,GodotRuntime.allocString(eval_ret),"*");return 4;case"object":if(eval_ret===null){break}if(ArrayBuffer.isView(eval_ret)&&!(eval_ret instanceof Uint8Array)){eval_ret=new Uint8Array(eval_ret.buffer)}else if(eval_ret instanceof ArrayBuffer){eval_ret=new Uint8Array(eval_ret)}if(eval_ret instanceof Uint8Array){const func=GodotRuntime.get_func(p_callback);const bytes_ptr=func(p_byte_arr,p_byte_arr_write,eval_ret.length);HEAPU8.set(eval_ret,bytes_ptr);return 20}break}return 0}var IDHandler={_last_id:0,_references:{},get:function(p_id){return IDHandler._references[p_id]},add:function(p_data){const id=++IDHandler._last_id;IDHandler._references[id]=p_data;return id},remove:function(p_id){delete IDHandler._references[p_id]}};var GodotFetch={onread:function(id,result){const obj=IDHandler.get(id);if(!obj){return}if(result.value){obj.chunks.push(result.value)}obj.reading=false;obj.done=result.done},onresponse:function(id,response){const obj=IDHandler.get(id);if(!obj){return}let chunked=false;response.headers.forEach(function(value,header){const v=value.toLowerCase().trim();const h=header.toLowerCase().trim();if(h==="transfer-encoding"&&v==="chunked"){chunked=true}});obj.status=response.status;obj.response=response;obj.reader=response.body.getReader();obj.chunked=chunked},onerror:function(id,err){GodotRuntime.error(err);const obj=IDHandler.get(id);if(!obj){return}obj.error=err},create:function(method,url,headers,body){const obj={request:null,response:null,reader:null,error:null,done:false,reading:false,status:0,chunks:[],bodySize:-1};const id=IDHandler.add(obj);const init={method:method,headers:headers,body:body};obj.request=fetch(url,init);obj.request.then(GodotFetch.onresponse.bind(null,id)).catch(GodotFetch.onerror.bind(null,id));return id},free:function(id){const obj=IDHandler.get(id);if(!obj){return}IDHandler.remove(id);if(!obj.request){return}obj.request.then(function(response){response.abort()}).catch(function(e){})},read:function(id){const obj=IDHandler.get(id);if(!obj){return}if(obj.reader&&!obj.reading){if(obj.done){obj.reader=null;return}obj.reading=true;obj.reader.read().then(GodotFetch.onread.bind(null,id)).catch(GodotFetch.onerror.bind(null,id))}}};function _godot_js_fetch_body_length_get(p_id){const obj=IDHandler.get(p_id);if(!obj||!obj.response){return-1}return obj.bodySize}function _godot_js_fetch_create(p_method,p_url,p_headers,p_headers_size,p_body,p_body_size){const method=GodotRuntime.parseString(p_method);const url=GodotRuntime.parseString(p_url);const headers=GodotRuntime.parseStringArray(p_headers,p_headers_size);const body=p_body_size?GodotRuntime.heapSlice(HEAP8,p_body,p_body_size):null;return GodotFetch.create(method,url,headers.map(function(hv){const idx=hv.indexOf(":");if(idx<=0){return[]}return[hv.slice(0,idx).trim(),hv.slice(idx+1).trim()]}).filter(function(v){return v.length===2}),body)}function _godot_js_fetch_free(id){GodotFetch.free(id)}function _godot_js_fetch_http_status_get(p_id){const obj=IDHandler.get(p_id);if(!obj||!obj.response){return 0}return obj.status}function _godot_js_fetch_is_chunked(p_id){const obj=IDHandler.get(p_id);if(!obj||!obj.response){return-1}return obj.chunked?1:0}function _godot_js_fetch_read_chunk(p_id,p_buf,p_buf_size){const obj=IDHandler.get(p_id);if(!obj||!obj.response){return 0}let to_read=p_buf_size;const chunks=obj.chunks;while(to_read&&chunks.length){const chunk=obj.chunks[0];if(chunk.length>to_read){GodotRuntime.heapCopy(HEAP8,chunk.slice(0,to_read),p_buf);chunks[0]=chunk.slice(to_read);to_read=0}else{GodotRuntime.heapCopy(HEAP8,chunk,p_buf);to_read-=chunk.length;chunks.pop()}}if(!chunks.length){GodotFetch.read(p_id)}return p_buf_size-to_read}function _godot_js_fetch_read_headers(p_id,p_parse_cb,p_ref){const obj=IDHandler.get(p_id);if(!obj||!obj.response){return 1}const cb=GodotRuntime.get_func(p_parse_cb);const arr=[];obj.response.headers.forEach(function(v,h){arr.push(`${h}:${v}`)});const c_ptr=GodotRuntime.allocStringArray(arr);cb(arr.length,c_ptr,p_ref);GodotRuntime.freeStringArray(c_ptr,arr.length);return 0}function _godot_js_fetch_state_get(p_id){const obj=IDHandler.get(p_id);if(!obj){return-1}if(obj.error){return-1}if(!obj.response){return 0}if(obj.reader){return 1}if(obj.done){return 2}return-1}var GodotInputGamepads={samples:[],get_pads:function(){try{const pads=navigator.getGamepads();if(pads){return pads}return[]}catch(e){return[]}},get_samples:function(){return GodotInputGamepads.samples},get_sample:function(index){const samples=GodotInputGamepads.samples;return index<samples.length?samples[index]:null},sample:function(){const pads=GodotInputGamepads.get_pads();const samples=[];for(let i=0;i<pads.length;i++){const pad=pads[i];if(!pad){samples.push(null);continue}const s={standard:pad.mapping==="standard",buttons:[],axes:[],connected:pad.connected};for(let b=0;b<pad.buttons.length;b++){s.buttons.push(pad.buttons[b].value)}for(let a=0;a<pad.axes.length;a++){s.axes.push(pad.axes[a])}samples.push(s)}GodotInputGamepads.samples=samples},init:function(onchange){GodotInputGamepads.samples=[];function add(pad){const guid=GodotInputGamepads.get_guid(pad);const c_id=GodotRuntime.allocString(pad.id);const c_guid=GodotRuntime.allocString(guid);onchange(pad.index,1,c_id,c_guid);GodotRuntime.free(c_id);GodotRuntime.free(c_guid)}const pads=GodotInputGamepads.get_pads();for(let i=0;i<pads.length;i++){if(pads[i]){add(pads[i])}}GodotEventListeners.add(window,"gamepadconnected",function(evt){if(evt.gamepad){add(evt.gamepad)}},false);GodotEventListeners.add(window,"gamepaddisconnected",function(evt){if(evt.gamepad){onchange(evt.gamepad.index,0)}},false)},get_guid:function(pad){if(pad.mapping){return pad.mapping}const ua=navigator.userAgent;let os="Unknown";if(ua.indexOf("Android")>=0){os="Android"}else if(ua.indexOf("Linux")>=0){os="Linux"}else if(ua.indexOf("iPhone")>=0){os="iOS"}else if(ua.indexOf("Macintosh")>=0){os="MacOSX"}else if(ua.indexOf("Windows")>=0){os="Windows"}const id=pad.id;const exp1=/vendor: ([0-9a-f]{4}) product: ([0-9a-f]{4})/i;const exp2=/^([0-9a-f]+)-([0-9a-f]+)-/i;let vendor="";let product="";if(exp1.test(id)){const match=exp1.exec(id);vendor=match[1].padStart(4,"0");product=match[2].padStart(4,"0")}else if(exp2.test(id)){const match=exp2.exec(id);vendor=match[1].padStart(4,"0");product=match[2].padStart(4,"0")}if(!vendor||!product){return`${os}Unknown`}return os+vendor+product}};var GodotInputDragDrop={promises:[],pending_files:[],add_entry:function(entry){if(entry.isDirectory){GodotInputDragDrop.add_dir(entry)}else if(entry.isFile){GodotInputDragDrop.add_file(entry)}else{GodotRuntime.error("Unrecognized entry...",entry)}},add_dir:function(entry){GodotInputDragDrop.promises.push(new Promise(function(resolve,reject){const reader=entry.createReader();reader.readEntries(function(entries){for(let i=0;i<entries.length;i++){GodotInputDragDrop.add_entry(entries[i])}resolve()})}))},add_file:function(entry){GodotInputDragDrop.promises.push(new Promise(function(resolve,reject){entry.file(function(file){const reader=new FileReader;reader.onload=function(){const f={"path":file.relativePath||file.webkitRelativePath,"name":file.name,"type":file.type,"size":file.size,"data":reader.result};if(!f["path"]){f["path"]=f["name"]}GodotInputDragDrop.pending_files.push(f);resolve()};reader.onerror=function(){GodotRuntime.print("Error reading file");reject()};reader.readAsArrayBuffer(file)},function(err){GodotRuntime.print("Error!");reject()})}))},process:function(resolve,reject){if(GodotInputDragDrop.promises.length===0){resolve();return}GodotInputDragDrop.promises.pop().then(function(){setTimeout(function(){GodotInputDragDrop.process(resolve,reject)},0)})},_process_event:function(ev,callback){ev.preventDefault();if(ev.dataTransfer.items){for(let i=0;i<ev.dataTransfer.items.length;i++){const item=ev.dataTransfer.items[i];let entry=null;if("getAsEntry"in item){entry=item.getAsEntry()}else if("webkitGetAsEntry"in item){entry=item.webkitGetAsEntry()}if(entry){GodotInputDragDrop.add_entry(entry)}}}else{GodotRuntime.error("File upload not supported")}new Promise(GodotInputDragDrop.process).then(function(){const DROP=`/tmp/drop-${parseInt(Math.random()*(1<<30),10)}/`;const drops=[];const files=[];FS.mkdir(DROP.slice(0,-1));GodotInputDragDrop.pending_files.forEach(elem=>{const path=elem["path"];GodotFS.copy_to_fs(DROP+path,elem["data"]);let idx=path.indexOf("/");if(idx===-1){drops.push(DROP+path)}else{const sub=path.substr(0,idx);idx=sub.indexOf("/");if(idx<0&&drops.indexOf(DROP+sub)===-1){drops.push(DROP+sub)}}files.push(DROP+path)});GodotInputDragDrop.promises=[];GodotInputDragDrop.pending_files=[];callback(drops);if(GodotConfig.persistent_drops){GodotOS.atexit(function(resolve,reject){GodotInputDragDrop.remove_drop(files,DROP);resolve()})}else{GodotInputDragDrop.remove_drop(files,DROP)}})},remove_drop:function(files,drop_path){const dirs=[drop_path.substr(0,drop_path.length-1)];files.forEach(function(file){FS.unlink(file);let dir=file.replace(drop_path,"");let idx=dir.lastIndexOf("/");while(idx>0){dir=dir.substr(0,idx);if(dirs.indexOf(drop_path+dir)===-1){dirs.push(drop_path+dir)}idx=dir.lastIndexOf("/")}});dirs.sort(function(a,b){const al=(a.match(/\//g)||[]).length;const bl=(b.match(/\//g)||[]).length;if(al>bl){return-1}else if(al<bl){return 1}return 0}).forEach(function(dir){FS.rmdir(dir)})},handler:function(callback){return function(ev){GodotInputDragDrop._process_event(ev,callback)}}};var GodotInput={getModifiers:function(evt){return evt.shiftKey+0+(evt.altKey+0<<1)+(evt.ctrlKey+0<<2)+(evt.metaKey+0<<3)},computePosition:function(evt,rect){const canvas=GodotConfig.canvas;const rw=canvas.width/rect.width;const rh=canvas.height/rect.height;const x=(evt.clientX-rect.x)*rw;const y=(evt.clientY-rect.y)*rh;return[x,y]}};function _godot_js_input_drop_files_cb(callback){const func=GodotRuntime.get_func(callback);const dropFiles=function(files){const args=files||[];if(!args.length){return}const argc=args.length;const argv=GodotRuntime.allocStringArray(args);func(argv,argc);GodotRuntime.freeStringArray(argv,argc)};const canvas=GodotConfig.canvas;GodotEventListeners.add(canvas,"dragover",function(ev){ev.preventDefault()},false);GodotEventListeners.add(canvas,"drop",GodotInputDragDrop.handler(dropFiles))}function _godot_js_input_gamepad_cb(change_cb){const onchange=GodotRuntime.get_func(change_cb);GodotInputGamepads.init(onchange)}function _godot_js_input_gamepad_sample(){GodotInputGamepads.sample();return 0}function _godot_js_input_gamepad_sample_count(){return GodotInputGamepads.get_samples().length}function _godot_js_input_gamepad_sample_get(p_index,r_btns,r_btns_num,r_axes,r_axes_num,r_standard){const sample=GodotInputGamepads.get_sample(p_index);if(!sample||!sample.connected){return 1}const btns=sample.buttons;const btns_len=btns.length<16?btns.length:16;for(let i=0;i<btns_len;i++){GodotRuntime.setHeapValue(r_btns+(i<<2),btns[i],"float")}GodotRuntime.setHeapValue(r_btns_num,btns_len,"i32");const axes=sample.axes;const axes_len=axes.length<10?axes.length:10;for(let i=0;i<axes_len;i++){GodotRuntime.setHeapValue(r_axes+(i<<2),axes[i],"float")}GodotRuntime.setHeapValue(r_axes_num,axes_len,"i32");const is_standard=sample.standard?1:0;GodotRuntime.setHeapValue(r_standard,is_standard,"i32");return 0}function _godot_js_input_key_cb(callback,code,key){const func=GodotRuntime.get_func(callback);function key_cb(pressed,evt){const modifiers=GodotInput.getModifiers(evt);GodotRuntime.stringToHeap(evt.code,code,32);GodotRuntime.stringToHeap(evt.key,key,32);func(pressed,evt.repeat,modifiers);evt.preventDefault()}GodotEventListeners.add(GodotConfig.canvas,"keydown",key_cb.bind(null,1),false);GodotEventListeners.add(GodotConfig.canvas,"keyup",key_cb.bind(null,0),false)}function _godot_js_input_mouse_button_cb(callback){const func=GodotRuntime.get_func(callback);const canvas=GodotConfig.canvas;function button_cb(p_pressed,evt){const rect=canvas.getBoundingClientRect();const pos=GodotInput.computePosition(evt,rect);const modifiers=GodotInput.getModifiers(evt);if(p_pressed){GodotConfig.canvas.focus()}if(func(p_pressed,evt.button,pos[0],pos[1],modifiers)){evt.preventDefault()}}GodotEventListeners.add(canvas,"mousedown",button_cb.bind(null,1),false);GodotEventListeners.add(window,"mouseup",button_cb.bind(null,0),false)}function _godot_js_input_mouse_move_cb(callback){const func=GodotRuntime.get_func(callback);const canvas=GodotConfig.canvas;function move_cb(evt){const rect=canvas.getBoundingClientRect();const pos=GodotInput.computePosition(evt,rect);const rw=canvas.width/rect.width;const rh=canvas.height/rect.height;const rel_pos_x=evt.movementX*rw;const rel_pos_y=evt.movementY*rh;const modifiers=GodotInput.getModifiers(evt);func(pos[0],pos[1],rel_pos_x,rel_pos_y,modifiers)}GodotEventListeners.add(window,"mousemove",move_cb,false)}function _godot_js_input_mouse_wheel_cb(callback){const func=GodotRuntime.get_func(callback);function wheel_cb(evt){if(func(evt["deltaX"]||0,evt["deltaY"]||0)){evt.preventDefault()}}GodotEventListeners.add(GodotConfig.canvas,"wheel",wheel_cb,false)}function _godot_js_input_paste_cb(callback){const func=GodotRuntime.get_func(callback);GodotEventListeners.add(window,"paste",function(evt){const text=evt.clipboardData.getData("text");const ptr=GodotRuntime.allocString(text);func(ptr);GodotRuntime.free(ptr)},false)}function _godot_js_input_touch_cb(callback,ids,coords){const func=GodotRuntime.get_func(callback);const canvas=GodotConfig.canvas;function touch_cb(type,evt){if(type===0){GodotConfig.canvas.focus()}const rect=canvas.getBoundingClientRect();const touches=evt.changedTouches;for(let i=0;i<touches.length;i++){const touch=touches[i];const pos=GodotInput.computePosition(touch,rect);GodotRuntime.setHeapValue(coords+i*2*8,pos[0],"double");GodotRuntime.setHeapValue(coords+(i*2+1)*8,pos[1],"double");GodotRuntime.setHeapValue(ids+i*4,touch.identifier,"i32")}func(type,touches.length);if(evt.cancelable){evt.preventDefault()}}GodotEventListeners.add(canvas,"touchstart",touch_cb.bind(null,0),false);GodotEventListeners.add(canvas,"touchend",touch_cb.bind(null,1),false);GodotEventListeners.add(canvas,"touchcancel",touch_cb.bind(null,1),false);GodotEventListeners.add(canvas,"touchmove",touch_cb.bind(null,2),false)}function _godot_js_input_vibrate_handheld(p_duration_ms){if(typeof navigator.vibrate!=="function"){GodotRuntime.print("This browser does not support vibration.")}else{navigator.vibrate(p_duration_ms)}}function _godot_js_os_download_buffer(p_ptr,p_size,p_name,p_mime){const buf=GodotRuntime.heapSlice(HEAP8,p_ptr,p_size);const name=GodotRuntime.parseString(p_name);const mime=GodotRuntime.parseString(p_mime);const blob=new Blob([buf],{type:mime});const url=window.URL.createObjectURL(blob);const a=document.createElement("a");a.href=url;a.download=name;a.style.display="none";document.body.appendChild(a);a.click();a.remove();window.URL.revokeObjectURL(url)}function _godot_js_os_execute(p_json){const json_args=GodotRuntime.parseString(p_json);const args=JSON.parse(json_args);if(GodotConfig.on_execute){GodotConfig.on_execute(args);return 0}return 1}function _godot_js_os_finish_async(p_callback){const func=GodotRuntime.get_func(p_callback);GodotOS.finish_async(func)}function _godot_js_os_fs_is_persistent(){return GodotFS.is_persistent()}function _godot_js_os_fs_sync(callback){const func=GodotRuntime.get_func(callback);GodotOS._fs_sync_promise=GodotFS.sync();GodotOS._fs_sync_promise.then(function(err){func()})}function _godot_js_os_hw_concurrency_get(){return navigator.hardwareConcurrency||1}function _godot_js_os_request_quit_cb(p_callback){GodotOS.request_quit=GodotRuntime.get_func(p_callback)}function _godot_js_os_shell_open(p_uri){window.open(GodotRuntime.parseString(p_uri),"_blank")}var GodotPWA={hasUpdate:false,updateState:function(cb,reg){if(!reg){return}if(!reg.active){return}if(reg.waiting){GodotPWA.hasUpdate=true;cb()}GodotEventListeners.add(reg,"updatefound",function(){const installing=reg.installing;GodotEventListeners.add(installing,"statechange",function(){if(installing.state==="installed"){GodotPWA.hasUpdate=true;cb()}})})}};function _godot_js_pwa_cb(p_update_cb){if("serviceWorker"in navigator){const cb=GodotRuntime.get_func(p_update_cb);navigator.serviceWorker.getRegistration().then(GodotPWA.updateState.bind(null,cb))}}function _godot_js_pwa_update(){if("serviceWorker"in navigator&&GodotPWA.hasUpdate){navigator.serviceWorker.getRegistration().then(function(reg){if(!reg||!reg.waiting){return}reg.waiting.postMessage("update")});return 0}return 1}var GodotRTCDataChannel={connect:function(p_id,p_on_open,p_on_message,p_on_error,p_on_close){const ref=IDHandler.get(p_id);if(!ref){return}ref.binaryType="arraybuffer";ref.onopen=function(event){p_on_open()};ref.onclose=function(event){p_on_close()};ref.onerror=function(event){p_on_error()};ref.onmessage=function(event){let buffer;let is_string=0;if(event.data instanceof ArrayBuffer){buffer=new Uint8Array(event.data)}else if(event.data instanceof Blob){GodotRuntime.error("Blob type not supported");return}else if(typeof event.data==="string"){is_string=1;const enc=new TextEncoder("utf-8");buffer=new Uint8Array(enc.encode(event.data))}else{GodotRuntime.error("Unknown message type");return}const len=buffer.length*buffer.BYTES_PER_ELEMENT;const out=GodotRuntime.malloc(len);HEAPU8.set(buffer,out);p_on_message(out,len,is_string);GodotRuntime.free(out)}},close:function(p_id){const ref=IDHandler.get(p_id);if(!ref){return}ref.onopen=null;ref.onmessage=null;ref.onerror=null;ref.onclose=null;ref.close()},get_prop:function(p_id,p_prop,p_def){const ref=IDHandler.get(p_id);return ref&&ref[p_prop]!==undefined?ref[p_prop]:p_def}};function _godot_js_rtc_datachannel_close(p_id){const ref=IDHandler.get(p_id);if(!ref){return}GodotRTCDataChannel.close(p_id)}function _godot_js_rtc_datachannel_connect(p_id,p_ref,p_on_open,p_on_message,p_on_error,p_on_close){const onopen=GodotRuntime.get_func(p_on_open).bind(null,p_ref);const onmessage=GodotRuntime.get_func(p_on_message).bind(null,p_ref);const onerror=GodotRuntime.get_func(p_on_error).bind(null,p_ref);const onclose=GodotRuntime.get_func(p_on_close).bind(null,p_ref);GodotRTCDataChannel.connect(p_id,onopen,onmessage,onerror,onclose)}function _godot_js_rtc_datachannel_destroy(p_id){GodotRTCDataChannel.close(p_id);IDHandler.remove(p_id)}function _godot_js_rtc_datachannel_get_buffered_amount(p_id){return GodotRTCDataChannel.get_prop(p_id,"bufferedAmount",0)}function _godot_js_rtc_datachannel_id_get(p_id){return GodotRTCDataChannel.get_prop(p_id,"id",65535)}function _godot_js_rtc_datachannel_is_negotiated(p_id){return GodotRTCDataChannel.get_prop(p_id,"negotiated",65535)}function _godot_js_rtc_datachannel_is_ordered(p_id){return GodotRTCDataChannel.get_prop(p_id,"ordered",true)}function _godot_js_rtc_datachannel_label_get(p_id){const ref=IDHandler.get(p_id);if(!ref||!ref.label){return 0}return GodotRuntime.allocString(ref.label)}function _godot_js_rtc_datachannel_max_packet_lifetime_get(p_id){const ref=IDHandler.get(p_id);if(!ref){return 65535}if(ref["maxPacketLifeTime"]!==undefined){return ref["maxPacketLifeTime"]}else if(ref["maxRetransmitTime"]!==undefined){return ref["maxRetransmitTime"]}return 65535}function _godot_js_rtc_datachannel_max_retransmits_get(p_id){return GodotRTCDataChannel.get_prop(p_id,"maxRetransmits",65535)}function _godot_js_rtc_datachannel_protocol_get(p_id){const ref=IDHandler.get(p_id);if(!ref||!ref.protocol){return 0}return GodotRuntime.allocString(ref.protocol)}function _godot_js_rtc_datachannel_ready_state_get(p_id){const ref=IDHandler.get(p_id);if(!ref){return 3}switch(ref.readyState){case"connecting":return 0;case"open":return 1;case"closing":return 2;case"closed":default:return 3}}function _godot_js_rtc_datachannel_send(p_id,p_buffer,p_length,p_raw){const ref=IDHandler.get(p_id);if(!ref){return 1}const bytes_array=new Uint8Array(p_length);for(let i=0;i<p_length;i++){bytes_array[i]=GodotRuntime.getHeapValue(p_buffer+i,"i8")}if(p_raw){ref.send(bytes_array.buffer)}else{const string=new TextDecoder("utf-8").decode(bytes_array);ref.send(string)}return 0}var GodotRTCPeerConnection={onstatechange:function(p_id,p_conn,callback,event){const ref=IDHandler.get(p_id);if(!ref){return}let state;switch(p_conn.iceConnectionState){case"new":state=0;break;case"checking":state=1;break;case"connected":case"completed":state=2;break;case"disconnected":state=3;break;case"failed":state=4;break;case"closed":default:state=5;break}callback(state)},onicecandidate:function(p_id,callback,event){const ref=IDHandler.get(p_id);if(!ref||!event.candidate){return}const c=event.candidate;const candidate_str=GodotRuntime.allocString(c.candidate);const mid_str=GodotRuntime.allocString(c.sdpMid);callback(mid_str,c.sdpMLineIndex,candidate_str);GodotRuntime.free(candidate_str);GodotRuntime.free(mid_str)},ondatachannel:function(p_id,callback,event){const ref=IDHandler.get(p_id);if(!ref){return}const cid=IDHandler.add(event.channel);callback(cid)},onsession:function(p_id,callback,session){const ref=IDHandler.get(p_id);if(!ref){return}const type_str=GodotRuntime.allocString(session.type);const sdp_str=GodotRuntime.allocString(session.sdp);callback(type_str,sdp_str);GodotRuntime.free(type_str);GodotRuntime.free(sdp_str)},onerror:function(p_id,callback,error){const ref=IDHandler.get(p_id);if(!ref){return}GodotRuntime.error(error);callback()}};function _godot_js_rtc_pc_close(p_id){const ref=IDHandler.get(p_id);if(!ref){return}ref.close()}function _godot_js_rtc_pc_create(p_config,p_ref,p_on_state_change,p_on_candidate,p_on_datachannel){const onstatechange=GodotRuntime.get_func(p_on_state_change).bind(null,p_ref);const oncandidate=GodotRuntime.get_func(p_on_candidate).bind(null,p_ref);const ondatachannel=GodotRuntime.get_func(p_on_datachannel).bind(null,p_ref);const config=JSON.parse(GodotRuntime.parseString(p_config));let conn=null;try{conn=new RTCPeerConnection(config)}catch(e){GodotRuntime.error(e);return 0}const base=GodotRTCPeerConnection;const id=IDHandler.add(conn);conn.oniceconnectionstatechange=base.onstatechange.bind(null,id,conn,onstatechange);conn.onicecandidate=base.onicecandidate.bind(null,id,oncandidate);conn.ondatachannel=base.ondatachannel.bind(null,id,ondatachannel);return id}function _godot_js_rtc_pc_datachannel_create(p_id,p_label,p_config){try{const ref=IDHandler.get(p_id);if(!ref){return 0}const label=GodotRuntime.parseString(p_label);const config=JSON.parse(GodotRuntime.parseString(p_config));const channel=ref.createDataChannel(label,config);return IDHandler.add(channel)}catch(e){GodotRuntime.error(e);return 0}}function _godot_js_rtc_pc_destroy(p_id){const ref=IDHandler.get(p_id);if(!ref){return}ref.oniceconnectionstatechange=null;ref.onicecandidate=null;ref.ondatachannel=null;IDHandler.remove(p_id)}function _godot_js_rtc_pc_ice_candidate_add(p_id,p_mid_name,p_mline_idx,p_sdp){const ref=IDHandler.get(p_id);if(!ref){return}const sdpMidName=GodotRuntime.parseString(p_mid_name);const sdpName=GodotRuntime.parseString(p_sdp);ref.addIceCandidate(new RTCIceCandidate({"candidate":sdpName,"sdpMid":sdpMidName,"sdpMlineIndex":p_mline_idx}))}function _godot_js_rtc_pc_local_description_set(p_id,p_type,p_sdp,p_obj,p_on_error){const ref=IDHandler.get(p_id);if(!ref){return}const type=GodotRuntime.parseString(p_type);const sdp=GodotRuntime.parseString(p_sdp);const onerror=GodotRuntime.get_func(p_on_error).bind(null,p_obj);ref.setLocalDescription({"sdp":sdp,"type":type}).catch(function(error){GodotRTCPeerConnection.onerror(p_id,onerror,error)})}function _godot_js_rtc_pc_offer_create(p_id,p_obj,p_on_session,p_on_error){const ref=IDHandler.get(p_id);if(!ref){return}const onsession=GodotRuntime.get_func(p_on_session).bind(null,p_obj);const onerror=GodotRuntime.get_func(p_on_error).bind(null,p_obj);ref.createOffer().then(function(session){GodotRTCPeerConnection.onsession(p_id,onsession,session)}).catch(function(error){GodotRTCPeerConnection.onerror(p_id,onerror,error)})}function _godot_js_rtc_pc_remote_description_set(p_id,p_type,p_sdp,p_obj,p_session_created,p_on_error){const ref=IDHandler.get(p_id);if(!ref){return}const type=GodotRuntime.parseString(p_type);const sdp=GodotRuntime.parseString(p_sdp);const onerror=GodotRuntime.get_func(p_on_error).bind(null,p_obj);const onsession=GodotRuntime.get_func(p_session_created).bind(null,p_obj);ref.setRemoteDescription({"sdp":sdp,"type":type}).then(function(){if(type!=="offer"){return Promise.resolve()}return ref.createAnswer().then(function(session){GodotRTCPeerConnection.onsession(p_id,onsession,session)})}).catch(function(error){GodotRTCPeerConnection.onerror(p_id,onerror,error)})}var GodotWebSocket={_onopen:function(p_id,callback,event){const ref=IDHandler.get(p_id);if(!ref){return}const c_str=GodotRuntime.allocString(ref.protocol);callback(c_str);GodotRuntime.free(c_str)},_onmessage:function(p_id,callback,event){const ref=IDHandler.get(p_id);if(!ref){return}let buffer;let is_string=0;if(event.data instanceof ArrayBuffer){buffer=new Uint8Array(event.data)}else if(event.data instanceof Blob){GodotRuntime.error("Blob type not supported");return}else if(typeof event.data==="string"){is_string=1;const enc=new TextEncoder("utf-8");buffer=new Uint8Array(enc.encode(event.data))}else{GodotRuntime.error("Unknown message type");return}const len=buffer.length*buffer.BYTES_PER_ELEMENT;const out=GodotRuntime.malloc(len);HEAPU8.set(buffer,out);callback(out,len,is_string);GodotRuntime.free(out)},_onerror:function(p_id,callback,event){const ref=IDHandler.get(p_id);if(!ref){return}callback()},_onclose:function(p_id,callback,event){const ref=IDHandler.get(p_id);if(!ref){return}const c_str=GodotRuntime.allocString(event.reason);callback(event.code,c_str,event.wasClean?1:0);GodotRuntime.free(c_str)},send:function(p_id,p_data){const ref=IDHandler.get(p_id);if(!ref||ref.readyState!==ref.OPEN){return 1}ref.send(p_data);return 0},bufferedAmount:function(p_id){const ref=IDHandler.get(p_id);if(!ref){return 0}return ref.bufferedAmount},create:function(socket,p_on_open,p_on_message,p_on_error,p_on_close){const id=IDHandler.add(socket);socket.onopen=GodotWebSocket._onopen.bind(null,id,p_on_open);socket.onmessage=GodotWebSocket._onmessage.bind(null,id,p_on_message);socket.onerror=GodotWebSocket._onerror.bind(null,id,p_on_error);socket.onclose=GodotWebSocket._onclose.bind(null,id,p_on_close);return id},close:function(p_id,p_code,p_reason){const ref=IDHandler.get(p_id);if(ref&&ref.readyState<ref.CLOSING){const code=p_code;const reason=GodotRuntime.parseString(p_reason);ref.close(code,reason)}},destroy:function(p_id){const ref=IDHandler.get(p_id);if(!ref){return}GodotWebSocket.close(p_id,3001,"destroyed");IDHandler.remove(p_id);ref.onopen=null;ref.onmessage=null;ref.onerror=null;ref.onclose=null}};function _godot_js_websocket_buffered_amount(p_id){return GodotWebSocket.bufferedAmount(p_id)}function _godot_js_websocket_close(p_id,p_code,p_reason){const code=p_code;const reason=GodotRuntime.parseString(p_reason);GodotWebSocket.close(p_id,code,reason)}function _godot_js_websocket_create(p_ref,p_url,p_proto,p_on_open,p_on_message,p_on_error,p_on_close){const on_open=GodotRuntime.get_func(p_on_open).bind(null,p_ref);const on_message=GodotRuntime.get_func(p_on_message).bind(null,p_ref);const on_error=GodotRuntime.get_func(p_on_error).bind(null,p_ref);const on_close=GodotRuntime.get_func(p_on_close).bind(null,p_ref);const url=GodotRuntime.parseString(p_url);const protos=GodotRuntime.parseString(p_proto);let socket=null;try{if(protos){socket=new WebSocket(url,protos.split(","))}else{socket=new WebSocket(url)}}catch(e){return 0}socket.binaryType="arraybuffer";return GodotWebSocket.create(socket,on_open,on_message,on_error,on_close)}function _godot_js_websocket_destroy(p_id){GodotWebSocket.destroy(p_id)}function _godot_js_websocket_send(p_id,p_buf,p_buf_len,p_raw){const bytes_array=new Uint8Array(p_buf_len);let i=0;for(i=0;i<p_buf_len;i++){bytes_array[i]=GodotRuntime.getHeapValue(p_buf+i,"i8")}let out=bytes_array.buffer;if(!p_raw){out=new TextDecoder("utf-8").decode(bytes_array)}return GodotWebSocket.send(p_id,out)}var GodotJSWrapper={proxies:null,MyProxy:function(val){const id=IDHandler.add(this);GodotJSWrapper.proxies.set(val,id);let refs=1;this.ref=function(){refs++};this.unref=function(){refs--;if(refs===0){IDHandler.remove(id);GodotJSWrapper.proxies.delete(val)}};this.get_val=function(){return val};this.get_id=function(){return id}},get_proxied:function(val){const id=GodotJSWrapper.proxies.get(val);if(id===undefined){const proxy=new GodotJSWrapper.MyProxy(val);return proxy.get_id()}IDHandler.get(id).ref();return id},get_proxied_value:function(id){const proxy=IDHandler.get(id);if(proxy===undefined){return undefined}return proxy.get_val()},variant2js:function(type,val){switch(type){case 0:return null;case 1:return!!GodotRuntime.getHeapValue(val,"i64");case 2:return GodotRuntime.getHeapValue(val,"i64");case 3:return GodotRuntime.getHeapValue(val,"double");case 4:return GodotRuntime.parseString(GodotRuntime.getHeapValue(val,"*"));case 17:return GodotJSWrapper.get_proxied_value(GodotRuntime.getHeapValue(val,"i64"));default:return undefined}},js2variant:function(p_val,p_exchange){if(p_val===undefined||p_val===null){return 0}const type=typeof p_val;if(type==="boolean"){GodotRuntime.setHeapValue(p_exchange,p_val,"i64");return 1}else if(type==="number"){if(Number.isInteger(p_val)){GodotRuntime.setHeapValue(p_exchange,p_val,"i64");return 2}GodotRuntime.setHeapValue(p_exchange,p_val,"double");return 3}else if(type==="string"){const c_str=GodotRuntime.allocString(p_val);GodotRuntime.setHeapValue(p_exchange,c_str,"*");return 4}const id=GodotJSWrapper.get_proxied(p_val);GodotRuntime.setHeapValue(p_exchange,id,"i64");return 17}};function _godot_js_wrapper_create_cb(p_ref,p_func){const func=GodotRuntime.get_func(p_func);let id=0;const cb=function(){if(!GodotJSWrapper.get_proxied_value(id)){return}const args=Array.from(arguments);func(p_ref,GodotJSWrapper.get_proxied(args),args.length)};id=GodotJSWrapper.get_proxied(cb);return id}function _godot_js_wrapper_create_object(p_object,p_args,p_argc,p_convert_callback,p_exchange,p_lock,p_free_lock_callback){const name=GodotRuntime.parseString(p_object);if(typeof window[name]==="undefined"){return-1}const convert=GodotRuntime.get_func(p_convert_callback);const freeLock=GodotRuntime.get_func(p_free_lock_callback);const args=new Array(p_argc);for(let i=0;i<p_argc;i++){const type=convert(p_args,i,p_exchange,p_lock);const lock=GodotRuntime.getHeapValue(p_lock,"*");args[i]=GodotJSWrapper.variant2js(type,p_exchange);if(lock){freeLock(p_lock,type)}}try{const res=new window[name](...args);return GodotJSWrapper.js2variant(res,p_exchange)}catch(e){GodotRuntime.error(`Error calling constructor ${name} with args:`,args,"error:",e);return-1}}function _godot_js_wrapper_interface_get(p_name){const name=GodotRuntime.parseString(p_name);if(typeof window[name]!=="undefined"){return GodotJSWrapper.get_proxied(window[name])}return 0}function _godot_js_wrapper_object_call(p_id,p_method,p_args,p_argc,p_convert_callback,p_exchange,p_lock,p_free_lock_callback){const obj=GodotJSWrapper.get_proxied_value(p_id);if(obj===undefined){return-1}const method=GodotRuntime.parseString(p_method);const convert=GodotRuntime.get_func(p_convert_callback);const freeLock=GodotRuntime.get_func(p_free_lock_callback);const args=new Array(p_argc);for(let i=0;i<p_argc;i++){const type=convert(p_args,i,p_exchange,p_lock);const lock=GodotRuntime.getHeapValue(p_lock,"*");args[i]=GodotJSWrapper.variant2js(type,p_exchange);if(lock){freeLock(p_lock,type)}}try{const res=obj[method](...args);return GodotJSWrapper.js2variant(res,p_exchange)}catch(e){GodotRuntime.error(`Error calling method ${method} on:`,obj,"error:",e);return-1}}function _godot_js_wrapper_object_get(p_id,p_exchange,p_prop){const obj=GodotJSWrapper.get_proxied_value(p_id);if(obj===undefined){return 0}if(p_prop){const prop=GodotRuntime.parseString(p_prop);try{return GodotJSWrapper.js2variant(obj[prop],p_exchange)}catch(e){GodotRuntime.error(`Error getting variable ${prop} on object`,obj);return 0}}return GodotJSWrapper.js2variant(obj,p_exchange)}function _godot_js_wrapper_object_getvar(p_id,p_type,p_exchange){const obj=GodotJSWrapper.get_proxied_value(p_id);if(obj===undefined){return-1}const prop=GodotJSWrapper.variant2js(p_type,p_exchange);if(prop===undefined||prop===null){return-1}try{return GodotJSWrapper.js2variant(obj[prop],p_exchange)}catch(e){GodotRuntime.error(`Error getting variable ${prop} on object`,obj,e);return-1}}function _godot_js_wrapper_object_set(p_id,p_name,p_type,p_exchange){const obj=GodotJSWrapper.get_proxied_value(p_id);if(obj===undefined){return}const name=GodotRuntime.parseString(p_name);try{obj[name]=GodotJSWrapper.variant2js(p_type,p_exchange)}catch(e){GodotRuntime.error(`Error setting variable ${name} on object`,obj)}}function _godot_js_wrapper_object_setvar(p_id,p_key_type,p_key_ex,p_val_type,p_val_ex){const obj=GodotJSWrapper.get_proxied_value(p_id);if(obj===undefined){return-1}const key=GodotJSWrapper.variant2js(p_key_type,p_key_ex);try{obj[key]=GodotJSWrapper.variant2js(p_val_type,p_val_ex);return 0}catch(e){GodotRuntime.error(`Error setting variable ${key} on object`,obj);return-1}}function _godot_js_wrapper_object_unref(p_id){const proxy=IDHandler.get(p_id);if(proxy!==undefined){proxy.unref()}}var GodotWebXR={gl:null,session:null,space:null,frame:null,pose:null,orig_requestAnimationFrame:null,requestAnimationFrame:callback=>{if(GodotWebXR.session&&GodotWebXR.space){const onFrame=function(time,frame){GodotWebXR.frame=frame;GodotWebXR.pose=frame.getViewerPose(GodotWebXR.space);callback(time);GodotWebXR.frame=null;GodotWebXR.pose=null};GodotWebXR.session.requestAnimationFrame(onFrame)}else{GodotWebXR.orig_requestAnimationFrame(callback)}},monkeyPatchRequestAnimationFrame:enable=>{if(GodotWebXR.orig_requestAnimationFrame===null){GodotWebXR.orig_requestAnimationFrame=Browser.requestAnimationFrame}Browser.requestAnimationFrame=enable?GodotWebXR.requestAnimationFrame:GodotWebXR.orig_requestAnimationFrame},pauseResumeMainLoop:()=>{Browser.mainLoop.pause();window.setTimeout(function(){Browser.mainLoop.resume()},0)},shaderProgram:null,programInfo:null,buffer:null,vsSource:"\n\t\t\tconst vec2 scale = vec2(0.5, 0.5);\n\t\t\tattribute vec4 aVertexPosition;\n\n\t\t\tvarying highp vec2 vTextureCoord;\n\n\t\t\tvoid main () {\n\t\t\t\tgl_Position = aVertexPosition;\n\t\t\t\tvTextureCoord = aVertexPosition.xy * scale + scale;\n\t\t\t}\n\t\t",fsSource:"\n\t\t\tvarying highp vec2 vTextureCoord;\n\n\t\t\tuniform sampler2D uSampler;\n\n\t\t\tvoid main() {\n\t\t\t\tgl_FragColor = texture2D(uSampler, vTextureCoord);\n\t\t\t}\n\t\t",initShaderProgram:(gl,vsSource,fsSource)=>{const vertexShader=GodotWebXR.loadShader(gl,gl.VERTEX_SHADER,vsSource);const fragmentShader=GodotWebXR.loadShader(gl,gl.FRAGMENT_SHADER,fsSource);const shaderProgram=gl.createProgram();gl.attachShader(shaderProgram,vertexShader);gl.attachShader(shaderProgram,fragmentShader);gl.linkProgram(shaderProgram);if(!gl.getProgramParameter(shaderProgram,gl.LINK_STATUS)){GodotRuntime.error(`Unable to initialize the shader program: ${gl.getProgramInfoLog(shaderProgram)}`);return null}return shaderProgram},loadShader:(gl,type,source)=>{const shader=gl.createShader(type);gl.shaderSource(shader,source);gl.compileShader(shader);if(!gl.getShaderParameter(shader,gl.COMPILE_STATUS)){GodotRuntime.error(`An error occurred compiling the shader: ${gl.getShaderInfoLog(shader)}`);gl.deleteShader(shader);return null}return shader},initBuffer:gl=>{const positionBuffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,positionBuffer);const positions=[-1,-1,1,-1,-1,1,1,1];gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(positions),gl.STATIC_DRAW);return positionBuffer},blitTexture:(gl,texture)=>{if(GodotWebXR.shaderProgram===null){GodotWebXR.shaderProgram=GodotWebXR.initShaderProgram(gl,GodotWebXR.vsSource,GodotWebXR.fsSource);GodotWebXR.programInfo={program:GodotWebXR.shaderProgram,attribLocations:{vertexPosition:gl.getAttribLocation(GodotWebXR.shaderProgram,"aVertexPosition")},uniformLocations:{uSampler:gl.getUniformLocation(GodotWebXR.shaderProgram,"uSampler")}};GodotWebXR.buffer=GodotWebXR.initBuffer(gl)}const orig_program=gl.getParameter(gl.CURRENT_PROGRAM);gl.useProgram(GodotWebXR.shaderProgram);gl.bindBuffer(gl.ARRAY_BUFFER,GodotWebXR.buffer);gl.vertexAttribPointer(GodotWebXR.programInfo.attribLocations.vertexPosition,2,gl.FLOAT,false,0,0);gl.enableVertexAttribArray(GodotWebXR.programInfo.attribLocations.vertexPosition);gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,texture);gl.uniform1i(GodotWebXR.programInfo.uniformLocations.uSampler,0);gl.drawArrays(gl.TRIANGLE_STRIP,0,4);gl.bindTexture(gl.TEXTURE_2D,null);gl.disableVertexAttribArray(GodotWebXR.programInfo.attribLocations.vertexPosition);gl.bindBuffer(gl.ARRAY_BUFFER,null);gl.useProgram(orig_program)},controllers:[],sampleControllers:()=>{if(!GodotWebXR.session){return}let other_index=2;const controllers=[];GodotWebXR.session.inputSources.forEach(input_source=>{if(input_source.targetRayMode==="tracked-pointer"){if(input_source.handedness==="right"){controllers[1]=input_source}else if(input_source.handedness==="left"||!controllers[0]){controllers[0]=input_source}}else{controllers[other_index++]=input_source}});GodotWebXR.controllers=controllers},getControllerId:input_source=>GodotWebXR.controllers.indexOf(input_source)};function _godot_webxr_commit_for_eye(p_eye,p_texture_id){if(!GodotWebXR.session||!GodotWebXR.pose){return}const view_index=p_eye===2?1:0;const glLayer=GodotWebXR.session.renderState.baseLayer;const view=GodotWebXR.pose.views[view_index];const viewport=glLayer.getViewport(view);const gl=GodotWebXR.gl;const orig_framebuffer=gl.getParameter(gl.FRAMEBUFFER_BINDING);const orig_viewport=gl.getParameter(gl.VIEWPORT);gl.bindFramebuffer(gl.FRAMEBUFFER,glLayer.framebuffer);gl.viewport(viewport.x,viewport.y,viewport.width,viewport.height);GodotWebXR.blitTexture(gl,GL.textures[p_texture_id]);gl.bindFramebuffer(gl.FRAMEBUFFER,orig_framebuffer);gl.viewport(orig_viewport[0],orig_viewport[1],orig_viewport[2],orig_viewport[3])}function _godot_webxr_get_bounds_geometry(){if(!GodotWebXR.space||!GodotWebXR.space.boundsGeometry){return 0}const point_count=GodotWebXR.space.boundsGeometry.length;if(point_count===0){return 0}const buf=GodotRuntime.malloc((point_count*3+1)*4);GodotRuntime.setHeapValue(buf,point_count,"i32");for(let i=0;i<point_count;i++){const point=GodotWebXR.space.boundsGeometry[i];GodotRuntime.setHeapValue(buf+(i*3+1)*4,point.x,"float");GodotRuntime.setHeapValue(buf+(i*3+2)*4,point.y,"float");GodotRuntime.setHeapValue(buf+(i*3+3)*4,point.z,"float")}return buf}function _godot_webxr_get_controller_axes(p_controller,p_xr_standard_mapping){if(GodotWebXR.controllers.length===0){return 0}const controller=GodotWebXR.controllers[p_controller];if(!controller||!controller.gamepad){return 0}let axes=controller.gamepad.axes;if(controller.gamepad.mapping==="xr-standard"){if(p_xr_standard_mapping){const trigger_axis=controller.gamepad.buttons[0].value;const grip_axis=controller.gamepad.buttons[1].value;axes=[axes[2],axes[3]*-1,trigger_axis,grip_axis,grip_axis,0,axes[0],axes[1]*-1]}else{axes[1]*=-1;axes[3]*=-1}}const buf=GodotRuntime.malloc((axes.length+1)*4);GodotRuntime.setHeapValue(buf,axes.length,"i32");for(let i=0;i<axes.length;i++){GodotRuntime.setHeapValue(buf+4+i*4,axes[i],"float")}return buf}function _godot_webxr_get_controller_buttons(p_controller,p_xr_standard_mapping){if(GodotWebXR.controllers.length===0){return 0}const controller=GodotWebXR.controllers[p_controller];if(!controller||!controller.gamepad){return 0}let buttons=controller.gamepad.buttons;if(controller.gamepad.mapping==="xr-standard"&&p_xr_standard_mapping){buttons=[0,buttons[5],buttons[1],buttons[3],buttons[6],buttons[7],buttons[8],buttons[4],buttons[9],buttons[10],buttons[11],buttons[12],buttons[13],buttons[14],buttons[2],buttons[0]]}const buf=GodotRuntime.malloc((buttons.length+1)*4);GodotRuntime.setHeapValue(buf,buttons.length,"i32");for(let i=0;i<buttons.length;i++){GodotRuntime.setHeapValue(buf+4+i*4,buttons[i]?buttons[i].value:0,"float")}return buf}function _godot_webxr_get_controller_count(){if(!GodotWebXR.session||!GodotWebXR.frame){return 0}return GodotWebXR.controllers.length}function _godot_webxr_get_controller_target_ray_mode(p_controller){if(p_controller<0||p_controller>=GodotWebXR.controllers.length){return 0}const controller=GodotWebXR.controllers[p_controller];if(!controller){return 0}switch(controller.targetRayMode){case"gaze":return 1;case"tracked-pointer":return 2;case"screen":return 3;default:break}return 0}function _godot_webxr_get_controller_transform(p_controller){if(!GodotWebXR.session||!GodotWebXR.frame){return 0}const controller=GodotWebXR.controllers[p_controller];if(!controller){return 0}const frame=GodotWebXR.frame;const space=GodotWebXR.space;const pose=frame.getPose(controller.targetRaySpace,space);if(!pose){return 0}const matrix=pose.transform.matrix;const buf=GodotRuntime.malloc(16*4);for(let i=0;i<16;i++){GodotRuntime.setHeapValue(buf+i*4,matrix[i],"float")}return buf}function _godot_webxr_get_projection_for_eye(p_eye){if(!GodotWebXR.session||!GodotWebXR.pose){return 0}const view_index=p_eye===2?1:0;const matrix=GodotWebXR.pose.views[view_index].projectionMatrix;const buf=GodotRuntime.malloc(16*4);for(let i=0;i<16;i++){GodotRuntime.setHeapValue(buf+i*4,matrix[i],"float")}return buf}function _godot_webxr_get_render_targetsize(){if(!GodotWebXR.session||!GodotWebXR.pose){return 0}const glLayer=GodotWebXR.session.renderState.baseLayer;const view=GodotWebXR.pose.views[0];const viewport=glLayer.getViewport(view);const buf=GodotRuntime.malloc(2*4);GodotRuntime.setHeapValue(buf+0,viewport.width,"i32");GodotRuntime.setHeapValue(buf+4,viewport.height,"i32");return buf}function _godot_webxr_get_transform_for_eye(p_eye){if(!GodotWebXR.session||!GodotWebXR.pose){return 0}const views=GodotWebXR.pose.views;let matrix;if(p_eye===0){matrix=GodotWebXR.pose.transform.matrix}else{matrix=views[p_eye-1].transform.matrix}const buf=GodotRuntime.malloc(16*4);for(let i=0;i<16;i++){GodotRuntime.setHeapValue(buf+i*4,matrix[i],"float")}return buf}function _godot_webxr_get_view_count(){if(!GodotWebXR.session||!GodotWebXR.pose){return 0}return GodotWebXR.pose.views.length}function _godot_webxr_get_visibility_state(){if(!GodotWebXR.session||!GodotWebXR.session.visibilityState){return 0}return GodotRuntime.allocString(GodotWebXR.session.visibilityState)}function _godot_webxr_initialize(p_session_mode,p_required_features,p_optional_features,p_requested_reference_spaces,p_on_session_started,p_on_session_ended,p_on_session_failed,p_on_controller_changed,p_on_input_event,p_on_simple_event){GodotWebXR.monkeyPatchRequestAnimationFrame(true);const session_mode=GodotRuntime.parseString(p_session_mode);const required_features=GodotRuntime.parseString(p_required_features).split(",").map(s=>s.trim()).filter(s=>s!=="");const optional_features=GodotRuntime.parseString(p_optional_features).split(",").map(s=>s.trim()).filter(s=>s!=="");const requested_reference_space_types=GodotRuntime.parseString(p_requested_reference_spaces).split(",").map(s=>s.trim());const onstarted=GodotRuntime.get_func(p_on_session_started);const onended=GodotRuntime.get_func(p_on_session_ended);const onfailed=GodotRuntime.get_func(p_on_session_failed);const oncontroller=GodotRuntime.get_func(p_on_controller_changed);const oninputevent=GodotRuntime.get_func(p_on_input_event);const onsimpleevent=GodotRuntime.get_func(p_on_simple_event);const session_init={};if(required_features.length>0){session_init["requiredFeatures"]=required_features}if(optional_features.length>0){session_init["optionalFeatures"]=optional_features}navigator.xr.requestSession(session_mode,session_init).then(function(session){GodotWebXR.session=session;session.addEventListener("end",function(evt){onended()});session.addEventListener("inputsourceschange",function(evt){let controller_changed=false;[evt.added,evt.removed].forEach(lst=>{lst.forEach(input_source=>{if(input_source.targetRayMode==="tracked-pointer"){controller_changed=true}})});if(controller_changed){oncontroller()}});["selectstart","selectend","select","squeezestart","squeezeend","squeeze"].forEach((input_event,index)=>{session.addEventListener(input_event,function(evt){GodotWebXR.sampleControllers();oninputevent(index,GodotWebXR.getControllerId(evt.inputSource))})});session.addEventListener("visibilitychange",function(evt){const c_str=GodotRuntime.allocString("visibility_state_changed");onsimpleevent(c_str);GodotRuntime.free(c_str)});const gl_context_handle=_emscripten_webgl_get_current_context();const gl=GL.getContext(gl_context_handle).GLctx;GodotWebXR.gl=gl;gl.makeXRCompatible().then(function(){session.updateRenderState({baseLayer:new XRWebGLLayer(session,gl)});function onReferenceSpaceSuccess(reference_space,reference_space_type){GodotWebXR.space=reference_space;reference_space.onreset=function(evt){const c_str=GodotRuntime.allocString("reference_space_reset");onsimpleevent(c_str);GodotRuntime.free(c_str)};GodotWebXR.pauseResumeMainLoop();window.setTimeout(function(){const c_str=GodotRuntime.allocString(reference_space_type);onstarted(c_str);GodotRuntime.free(c_str)},0)}function requestReferenceSpace(){const reference_space_type=requested_reference_space_types.shift();session.requestReferenceSpace(reference_space_type).then(refSpace=>{onReferenceSpaceSuccess(refSpace,reference_space_type)}).catch(()=>{if(requested_reference_space_types.length===0){const c_str=GodotRuntime.allocString("Unable to get any of the requested reference space types");onfailed(c_str);GodotRuntime.free(c_str)}else{requestReferenceSpace()}})}requestReferenceSpace()}).catch(function(error){const c_str=GodotRuntime.allocString(`Unable to make WebGL context compatible with WebXR: ${error}`);onfailed(c_str);GodotRuntime.free(c_str)})}).catch(function(error){const c_str=GodotRuntime.allocString(`Unable to start session: ${error}`);onfailed(c_str);GodotRuntime.free(c_str)})}function _godot_webxr_is_controller_connected(p_controller){if(!GodotWebXR.session||!GodotWebXR.frame){return false}return!!GodotWebXR.controllers[p_controller]}function _godot_webxr_is_session_supported(p_session_mode,p_callback){const session_mode=GodotRuntime.parseString(p_session_mode);const cb=GodotRuntime.get_func(p_callback);if(navigator.xr){navigator.xr.isSessionSupported(session_mode).then(function(supported){const c_str=GodotRuntime.allocString(session_mode);cb(c_str,supported?1:0);GodotRuntime.free(c_str)})}else{const c_str=GodotRuntime.allocString(session_mode);cb(c_str,0);GodotRuntime.free(c_str)}}function _godot_webxr_is_supported(){return!!navigator.xr}function _godot_webxr_sample_controller_data(){GodotWebXR.sampleControllers()}function _godot_webxr_uninitialize(){if(GodotWebXR.session){GodotWebXR.session.end().catch(e=>{})}GodotWebXR.session=null;GodotWebXR.space=null;GodotWebXR.frame=null;GodotWebXR.pose=null;GodotWebXR.monkeyPatchRequestAnimationFrame(false);GodotWebXR.pauseResumeMainLoop()}function _setTempRet0(val){setTempRet0(val)}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length<digits){str=character[0]+str}return str}function leadingNulls(value,digits){return leadingSomething(value,digits,"0")}function compareByDay(date1,date2){function sgn(value){return value<0?-1:value>0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":function(date){var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&__isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!__isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},"%w":function(date){return date.tm_wday},"%W":function(date){var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":function(date){return(date.tm_year+1900).toString().substring(2)},"%Y":function(date){return date.tm_year+1900},"%z":function(date){var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();Module["requestFullscreen"]=function Module_requestFullscreen(lockPointer,resizeCanvas){Browser.requestFullscreen(lockPointer,resizeCanvas)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};Module["createContext"]=function Module_createContext(canvas,useWebGL,setInModule,webGLContextAttributes){return Browser.createContext(canvas,useWebGL,setInModule,webGLContextAttributes)};var preloadedImages={};var preloadedAudios={};var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i+1)}var __miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){__miniTempWebGLIntBuffers[i]=__miniTempWebGLIntBuffersStorage.subarray(0,i+1)}Module["request_quit"]=function(){GodotOS.request_quit()};Module["onExit"]=GodotOS.cleanup;GodotOS._fs_sync_promise=Promise.resolve();Module["initConfig"]=GodotConfig.init_config;Module["initFS"]=GodotFS.init;Module["copyToFS"]=GodotFS.copy_to_fs;ERRNO_CODES={"EPERM":63,"ENOENT":44,"ESRCH":71,"EINTR":27,"EIO":29,"ENXIO":60,"E2BIG":1,"ENOEXEC":45,"EBADF":8,"ECHILD":12,"EAGAIN":6,"EWOULDBLOCK":6,"ENOMEM":48,"EACCES":2,"EFAULT":21,"ENOTBLK":105,"EBUSY":10,"EEXIST":20,"EXDEV":75,"ENODEV":43,"ENOTDIR":54,"EISDIR":31,"EINVAL":28,"ENFILE":41,"EMFILE":33,"ENOTTY":59,"ETXTBSY":74,"EFBIG":22,"ENOSPC":51,"ESPIPE":70,"EROFS":69,"EMLINK":34,"EPIPE":64,"EDOM":18,"ERANGE":68,"ENOMSG":49,"EIDRM":24,"ECHRNG":106,"EL2NSYNC":156,"EL3HLT":107,"EL3RST":108,"ELNRNG":109,"EUNATCH":110,"ENOCSI":111,"EL2HLT":112,"EDEADLK":16,"ENOLCK":46,"EBADE":113,"EBADR":114,"EXFULL":115,"ENOANO":104,"EBADRQC":103,"EBADSLT":102,"EDEADLOCK":16,"EBFONT":101,"ENOSTR":100,"ENODATA":116,"ETIME":117,"ENOSR":118,"ENONET":119,"ENOPKG":120,"EREMOTE":121,"ENOLINK":47,"EADV":122,"ESRMNT":123,"ECOMM":124,"EPROTO":65,"EMULTIHOP":36,"EDOTDOT":125,"EBADMSG":9,"ENOTUNIQ":126,"EBADFD":127,"EREMCHG":128,"ELIBACC":129,"ELIBBAD":130,"ELIBSCN":131,"ELIBMAX":132,"ELIBEXEC":133,"ENOSYS":52,"ENOTEMPTY":55,"ENAMETOOLONG":37,"ELOOP":32,"EOPNOTSUPP":138,"EPFNOSUPPORT":139,"ECONNRESET":15,"ENOBUFS":42,"EAFNOSUPPORT":5,"EPROTOTYPE":67,"ENOTSOCK":57,"ENOPROTOOPT":50,"ESHUTDOWN":140,"ECONNREFUSED":14,"EADDRINUSE":3,"ECONNABORTED":13,"ENETUNREACH":40,"ENETDOWN":38,"ETIMEDOUT":73,"EHOSTDOWN":142,"EHOSTUNREACH":23,"EINPROGRESS":26,"EALREADY":7,"EDESTADDRREQ":17,"EMSGSIZE":35,"EPROTONOSUPPORT":66,"ESOCKTNOSUPPORT":137,"EADDRNOTAVAIL":4,"ENETRESET":39,"EISCONN":30,"ENOTCONN":53,"ETOOMANYREFS":141,"EUSERS":136,"EDQUOT":19,"ESTALE":72,"ENOTSUP":138,"ENOMEDIUM":148,"EILSEQ":25,"EOVERFLOW":61,"ECANCELED":11,"ENOTRECOVERABLE":56,"EOWNERDEAD":62,"ESTRPIPE":135};GodotOS.atexit(function(resolve,reject){GodotDisplayCursor.clear();resolve()});GodotOS.atexit(function(resolve,reject){GodotEventListeners.clear();resolve()});GodotOS.atexit(function(resolve,reject){GodotDisplayVK.clear();resolve()});GodotJSWrapper.proxies=new Map;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var asmLibraryArg={"Xc":___call_sighandler,"Rc":___syscall__newselect,"Mc":___syscall_accept4,"Lc":___syscall_bind,"rd":___syscall_chdir,"qd":___syscall_chmod,"Kc":___syscall_connect,"sd":___syscall_faccessat,"Fa":___syscall_fcntl64,"fd":___syscall_getcwd,"Wc":___syscall_getdents64,"Jc":___syscall_getsockname,"Ic":___syscall_getsockopt,"mb":___syscall_ioctl,"Hc":___syscall_listen,"ad":___syscall_lstat64,"_c":___syscall_mkdirat,"$c":___syscall_newfstatat,"nb":___syscall_openat,"Zc":___syscall_poll,"Vc":___syscall_readlinkat,"Gc":___syscall_recvfrom,"Sc":___syscall_renameat,"Tc":___syscall_rmdir,"Fc":___syscall_sendto,"jb":___syscall_socket,"bd":___syscall_stat64,"Qc":___syscall_statfs64,"Pc":___syscall_symlink,"Uc":___syscall_unlinkat,"nd":__dlinit,"pd":__dlopen_js,"od":__dlsym_js,"Va":__emscripten_date_now,"id":__emscripten_get_now_is_monotonic,"Ec":__emscripten_throw_longjmp,"jd":__gmtime_js,"kd":__localtime_js,"md":__tzset_js,"ja":_abort,"qb":_emscripten_cancel_main_loop,"Jh":_emscripten_force_exit,"Ua":_emscripten_get_now,"yi":_emscripten_glActiveTexture,"xi":_emscripten_glAttachShader,"mf":_emscripten_glBeginQuery,"Qi":_emscripten_glBeginQueryEXT,"Ue":_emscripten_glBeginTransformFeedback,"wi":_emscripten_glBindAttribLocation,"vi":_emscripten_glBindBuffer,"Qe":_emscripten_glBindBufferBase,"Re":_emscripten_glBindBufferRange,"ui":_emscripten_glBindFramebuffer,"ti":_emscripten_glBindRenderbuffer,"Td":_emscripten_glBindSampler,"si":_emscripten_glBindTexture,"Kd":_emscripten_glBindTransformFeedback,"Ze":_emscripten_glBindVertexArray,"Hi":_emscripten_glBindVertexArrayOES,"ri":_emscripten_glBlendColor,"qi":_emscripten_glBlendEquation,"pi":_emscripten_glBlendEquationSeparate,"ni":_emscripten_glBlendFunc,"mi":_emscripten_glBlendFuncSeparate,"af":_emscripten_glBlitFramebuffer,"li":_emscripten_glBufferData,"ki":_emscripten_glBufferSubData,"ji":_emscripten_glCheckFramebufferStatus,"ii":_emscripten_glClear,"re":_emscripten_glClearBufferfi,"se":_emscripten_glClearBufferfv,"ue":_emscripten_glClearBufferiv,"te":_emscripten_glClearBufferuiv,"hi":_emscripten_glClearColor,"gi":_emscripten_glClearDepthf,"fi":_emscripten_glClearStencil,"ce":_emscripten_glClientWaitSync,"ei":_emscripten_glColorMask,"bi":_emscripten_glCompileShader,"ai":_emscripten_glCompressedTexImage2D,"rf":_emscripten_glCompressedTexImage3D,"$h":_emscripten_glCompressedTexSubImage2D,"qf":_emscripten_glCompressedTexSubImage3D,"pe":_emscripten_glCopyBufferSubData,"_h":_emscripten_glCopyTexImage2D,"Zh":_emscripten_glCopyTexSubImage2D,"sf":_emscripten_glCopyTexSubImage3D,"Yh":_emscripten_glCreateProgram,"Xh":_emscripten_glCreateShader,"Wh":_emscripten_glCullFace,"Vh":_emscripten_glDeleteBuffers,"Uh":_emscripten_glDeleteFramebuffers,"Th":_emscripten_glDeleteProgram,"of":_emscripten_glDeleteQueries,"Si":_emscripten_glDeleteQueriesEXT,"Sh":_emscripten_glDeleteRenderbuffers,"Vd":_emscripten_glDeleteSamplers,"Rh":_emscripten_glDeleteShader,"de":_emscripten_glDeleteSync,"Qh":_emscripten_glDeleteTextures,"Jd":_emscripten_glDeleteTransformFeedbacks,"Ye":_emscripten_glDeleteVertexArrays,"Gi":_emscripten_glDeleteVertexArraysOES,"Ph":_emscripten_glDepthFunc,"Oh":_emscripten_glDepthMask,"Nh":_emscripten_glDepthRangef,"Mh":_emscripten_glDetachShader,"Lh":_emscripten_glDisable,"Kh":_emscripten_glDisableVertexAttribArray,"Ih":_emscripten_glDrawArrays,"he":_emscripten_glDrawArraysInstanced,"Ci":_emscripten_glDrawArraysInstancedANGLE,"Bf":_emscripten_glDrawArraysInstancedARB,"Cf":_emscripten_glDrawArraysInstancedEXT,"td":_emscripten_glDrawArraysInstancedNV,"hf":_emscripten_glDrawBuffers,"xf":_emscripten_glDrawBuffersEXT,"Di":_emscripten_glDrawBuffersWEBGL,"Hh":_emscripten_glDrawElements,"ge":_emscripten_glDrawElementsInstanced,"Bi":_emscripten_glDrawElementsInstancedANGLE,"yf":_emscripten_glDrawElementsInstancedARB,"zf":_emscripten_glDrawElementsInstancedEXT,"Af":_emscripten_glDrawElementsInstancedNV,"vf":_emscripten_glDrawRangeElements,"Gh":_emscripten_glEnable,"Fh":_emscripten_glEnableVertexAttribArray,"lf":_emscripten_glEndQuery,"Pi":_emscripten_glEndQueryEXT,"Se":_emscripten_glEndTransformFeedback,"fe":_emscripten_glFenceSync,"Eh":_emscripten_glFinish,"Dh":_emscripten_glFlush,"Ch":_emscripten_glFramebufferRenderbuffer,"Bh":_emscripten_glFramebufferTexture2D,"_e":_emscripten_glFramebufferTextureLayer,"Ah":_emscripten_glFrontFace,"zh":_emscripten_glGenBuffers,"xh":_emscripten_glGenFramebuffers,"pf":_emscripten_glGenQueries,"Ti":_emscripten_glGenQueriesEXT,"wh":_emscripten_glGenRenderbuffers,"Wd":_emscripten_glGenSamplers,"vh":_emscripten_glGenTextures,"Id":_emscripten_glGenTransformFeedbacks,"Xe":_emscripten_glGenVertexArrays,"Fi":_emscripten_glGenVertexArraysOES,"yh":_emscripten_glGenerateMipmap,"uh":_emscripten_glGetActiveAttrib,"th":_emscripten_glGetActiveUniform,"je":_emscripten_glGetActiveUniformBlockName,"ke":_emscripten_glGetActiveUniformBlockiv,"ne":_emscripten_glGetActiveUniformsiv,"sh":_emscripten_glGetAttachedShaders,"rh":_emscripten_glGetAttribLocation,"qh":_emscripten_glGetBooleanv,"Xd":_emscripten_glGetBufferParameteri64v,"ph":_emscripten_glGetBufferParameteriv,"nh":_emscripten_glGetError,"mh":_emscripten_glGetFloatv,"Ee":_emscripten_glGetFragDataLocation,"lh":_emscripten_glGetFramebufferAttachmentParameteriv,"Yd":_emscripten_glGetInteger64i_v,"_d":_emscripten_glGetInteger64v,"Ve":_emscripten_glGetIntegeri_v,"kh":_emscripten_glGetIntegerv,"wd":_emscripten_glGetInternalformativ,"Dd":_emscripten_glGetProgramBinary,"ih":_emscripten_glGetProgramInfoLog,"jh":_emscripten_glGetProgramiv,"Ji":_emscripten_glGetQueryObjecti64vEXT,"Mi":_emscripten_glGetQueryObjectivEXT,"Ii":_emscripten_glGetQueryObjectui64vEXT,"jf":_emscripten_glGetQueryObjectuiv,"Li":_emscripten_glGetQueryObjectuivEXT,"kf":_emscripten_glGetQueryiv,"Ni":_emscripten_glGetQueryivEXT,"hh":_emscripten_glGetRenderbufferParameteriv,"Md":_emscripten_glGetSamplerParameterfv,"Nd":_emscripten_glGetSamplerParameteriv,"fh":_emscripten_glGetShaderInfoLog,"eh":_emscripten_glGetShaderPrecisionFormat,"ch":_emscripten_glGetShaderSource,"gh":_emscripten_glGetShaderiv,"bh":_emscripten_glGetString,"qe":_emscripten_glGetStringi,"Zd":_emscripten_glGetSynciv,"ah":_emscripten_glGetTexParameterfv,"$g":_emscripten_glGetTexParameteriv,"Oe":_emscripten_glGetTransformFeedbackVarying,"le":_emscripten_glGetUniformBlockIndex,"oe":_emscripten_glGetUniformIndices,"Yg":_emscripten_glGetUniformLocation,"_g":_emscripten_glGetUniformfv,"Zg":_emscripten_glGetUniformiv,"Fe":_emscripten_glGetUniformuiv,"Me":_emscripten_glGetVertexAttribIiv,"Le":_emscripten_glGetVertexAttribIuiv,"Vg":_emscripten_glGetVertexAttribPointerv,"Xg":_emscripten_glGetVertexAttribfv,"Wg":_emscripten_glGetVertexAttribiv,"Tg":_emscripten_glHint,"Ad":_emscripten_glInvalidateFramebuffer,"zd":_emscripten_glInvalidateSubFramebuffer,"Sg":_emscripten_glIsBuffer,"Rg":_emscripten_glIsEnabled,"Qg":_emscripten_glIsFramebuffer,"Pg":_emscripten_glIsProgram,"nf":_emscripten_glIsQuery,"Ri":_emscripten_glIsQueryEXT,"Og":_emscripten_glIsRenderbuffer,"Ud":_emscripten_glIsSampler,"Ng":_emscripten_glIsShader,"ee":_emscripten_glIsSync,"Mg":_emscripten_glIsTexture,"Hd":_emscripten_glIsTransformFeedback,"We":_emscripten_glIsVertexArray,"Ei":_emscripten_glIsVertexArrayOES,"Lg":_emscripten_glLineWidth,"Kg":_emscripten_glLinkProgram,"Fd":_emscripten_glPauseTransformFeedback,"Ig":_emscripten_glPixelStorei,"Hg":_emscripten_glPolygonOffset,"Cd":_emscripten_glProgramBinary,"Bd":_emscripten_glProgramParameteri,"Oi":_emscripten_glQueryCounterEXT,"wf":_emscripten_glReadBuffer,"Gg":_emscripten_glReadPixels,"Fg":_emscripten_glReleaseShaderCompiler,"Eg":_emscripten_glRenderbufferStorage,"$e":_emscripten_glRenderbufferStorageMultisample,"Ed":_emscripten_glResumeTransformFeedback,"Dg":_emscripten_glSampleCoverage,"Pd":_emscripten_glSamplerParameterf,"Od":_emscripten_glSamplerParameterfv,"Sd":_emscripten_glSamplerParameteri,"Qd":_emscripten_glSamplerParameteriv,"Cg":_emscripten_glScissor,"Bg":_emscripten_glShaderBinary,"Ag":_emscripten_glShaderSource,"zg":_emscripten_glStencilFunc,"xg":_emscripten_glStencilFuncSeparate,"wg":_emscripten_glStencilMask,"vg":_emscripten_glStencilMaskSeparate,"ug":_emscripten_glStencilOp,"tg":_emscripten_glStencilOpSeparate,"sg":_emscripten_glTexImage2D,"uf":_emscripten_glTexImage3D,"rg":_emscripten_glTexParameterf,"qg":_emscripten_glTexParameterfv,"pg":_emscripten_glTexParameteri,"og":_emscripten_glTexParameteriv,"yd":_emscripten_glTexStorage2D,"xd":_emscripten_glTexStorage3D,"mg":_emscripten_glTexSubImage2D,"tf":_emscripten_glTexSubImage3D,"Pe":_emscripten_glTransformFeedbackVaryings,"lg":_emscripten_glUniform1f,"kg":_emscripten_glUniform1fv,"jg":_emscripten_glUniform1i,"ig":_emscripten_glUniform1iv,"De":_emscripten_glUniform1ui,"ze":_emscripten_glUniform1uiv,"hg":_emscripten_glUniform2f,"gg":_emscripten_glUniform2fv,"fg":_emscripten_glUniform2i,"eg":_emscripten_glUniform2iv,"Ce":_emscripten_glUniform2ui,"ye":_emscripten_glUniform2uiv,"dg":_emscripten_glUniform3f,"ag":_emscripten_glUniform3fv,"$f":_emscripten_glUniform3i,"_f":_emscripten_glUniform3iv,"Be":_emscripten_glUniform3ui,"we":_emscripten_glUniform3uiv,"Zf":_emscripten_glUniform4f,"Yf":_emscripten_glUniform4fv,"Xf":_emscripten_glUniform4i,"Wf":_emscripten_glUniform4iv,"Ae":_emscripten_glUniform4ui,"ve":_emscripten_glUniform4uiv,"ie":_emscripten_glUniformBlockBinding,"Vf":_emscripten_glUniformMatrix2fv,"gf":_emscripten_glUniformMatrix2x3fv,"ef":_emscripten_glUniformMatrix2x4fv,"Uf":_emscripten_glUniformMatrix3fv,"ff":_emscripten_glUniformMatrix3x2fv,"cf":_emscripten_glUniformMatrix3x4fv,"Tf":_emscripten_glUniformMatrix4fv,"df":_emscripten_glUniformMatrix4x2fv,"bf":_emscripten_glUniformMatrix4x3fv,"Rf":_emscripten_glUseProgram,"Qf":_emscripten_glValidateProgram,"Pf":_emscripten_glVertexAttrib1f,"Of":_emscripten_glVertexAttrib1fv,"Nf":_emscripten_glVertexAttrib2f,"Mf":_emscripten_glVertexAttrib2fv,"Lf":_emscripten_glVertexAttrib3f,"Kf":_emscripten_glVertexAttrib3fv,"Jf":_emscripten_glVertexAttrib4f,"If":_emscripten_glVertexAttrib4fv,"Ld":_emscripten_glVertexAttribDivisor,"Ai":_emscripten_glVertexAttribDivisorANGLE,"Df":_emscripten_glVertexAttribDivisorARB,"Ef":_emscripten_glVertexAttribDivisorEXT,"ud":_emscripten_glVertexAttribDivisorNV,"Ke":_emscripten_glVertexAttribI4i,"He":_emscripten_glVertexAttribI4iv,"Je":_emscripten_glVertexAttribI4ui,"Ge":_emscripten_glVertexAttribI4uiv,"Ne":_emscripten_glVertexAttribIPointer,"Gf":_emscripten_glVertexAttribPointer,"Ff":_emscripten_glViewport,"$d":_emscripten_glWaitSync,"hd":_emscripten_memcpy_big,"Ta":_emscripten_resize_heap,"pb":_emscripten_set_main_loop,"fb":_emscripten_webgl_commit_frame,"Cc":_emscripten_webgl_create_context,"bc":_emscripten_webgl_destroy_context,"Oc":_emscripten_webgl_init_context_attributes,"xc":_emscripten_webgl_make_context_current,"dd":_environ_get,"ed":_environ_sizes_get,"ua":_fd_close,"cd":_fd_fdstat_get,"lb":_fd_read,"Ac":_fd_seek,"kb":_fd_write,"k":_getTempRet0,"Sa":_getaddrinfo,"Pb":_getnameinfo,"c":_glActiveTexture,"Na":_glAttachShader,"bb":_glBeginTransformFeedback,"vb":_glBindAttribLocation,"b":_glBindBuffer,"P":_glBindBufferBase,"e":_glBindFramebuffer,"_":_glBindRenderbuffer,"a":_glBindTexture,"m":_glBindVertexArray,"D":_glBlendEquation,"X":_glBlendFunc,"w":_glBlendFuncSeparate,"ha":_glBlitFramebuffer,"q":_glBufferData,"K":_glBufferSubData,"M":_glCheckFramebufferStatus,"J":_glClear,"qa":_glClearBufferfv,"O":_glClearColor,"aa":_glClearDepthf,"N":_glColorMask,"ka":_glCompileShader,"Ab":_glCompressedTexImage2D,"gj":_glCompressedTexSubImage2D,"zb":_glCompressedTexSubImage3D,"ej":_glCopyBufferSubData,"_a":_glCopyTexSubImage2D,"$a":_glCreateProgram,"Da":_glCreateShader,"ra":_glCullFace,"L":_glDeleteBuffers,"F":_glDeleteFramebuffers,"Q":_glDeleteProgram,"U":_glDeleteRenderbuffers,"I":_glDeleteShader,"B":_glDeleteTextures,"ea":_glDeleteVertexArrays,"Y":_glDepthFunc,"H":_glDepthMask,"i":_glDisable,"p":_glDisableVertexAttribArray,"A":_glDrawArrays,"ya":_glDrawArraysInstanced,"Ja":_glDrawBuffers,"ba":_glDrawElements,"Ka":_glDrawElementsInstanced,"s":_glEnable,"j":_glEnableVertexAttribArray,"ab":_glEndTransformFeedback,"Db":_glFinish,"Z":_glFramebufferRenderbuffer,"x":_glFramebufferTexture2D,"fj":_glFramebufferTextureLayer,"Bb":_glFrontFace,"C":_glGenBuffers,"E":_glGenFramebuffers,"ga":_glGenRenderbuffers,"v":_glGenTextures,"W":_glGenVertexArrays,"R":_glGenerateMipmap,"Cb":_glGetError,"wb":_glGetFloatv,"$":_glGetIntegerv,"Zi":_glGetProgramBinary,"tb":_glGetProgramInfoLog,"Ea":_glGetProgramiv,"Oa":_glGetShaderInfoLog,"Vi":_glGetShaderSource,"da":_glGetShaderiv,"wa":_glGetString,"dj":_glGetStringi,"Xi":_glGetUniformBlockIndex,"va":_glGetUniformLocation,"lj":_glInvalidateFramebuffer,"ub":_glLinkProgram,"la":_glPixelStorei,"bj":_glProgramBinary,"_i":_glProgramParameteri,"ia":_glReadBuffer,"cb":_glReadPixels,"fa":_glRenderbufferStorage,"Ga":_glRenderbufferStorageMultisample,"T":_glScissor,"Pa":_glShaderSource,"r":_glTexImage2D,"Ia":_glTexImage3D,"g":_glTexParameterf,"d":_glTexParameteri,"ij":_glTexStorage2D,"Ha":_glTexSubImage2D,"Qa":_glTexSubImage3D,"$i":_glTransformFeedbackVaryings,"f":_glUniform1f,"u":_glUniform1i,"db":_glUniform1iv,"xb":_glUniform1ui,"Za":_glUniform2f,"n":_glUniform2fv,"Ca":_glUniform2i,"ma":_glUniform2iv,"Ya":_glUniform3f,"V":_glUniform3fv,"Ba":_glUniform3i,"xa":_glUniform4f,"y":_glUniform4fv,"Aa":_glUniform4i,"Wi":_glUniformBlockBinding,"sb":_glUniformMatrix2fv,"rb":_glUniformMatrix3fv,"o":_glUniformMatrix4fv,"pa":_glUseProgram,"z":_glVertexAttrib4f,"S":_glVertexAttrib4fv,"G":_glVertexAttribDivisor,"pj":_glVertexAttribI4ui,"La":_glVertexAttribIPointer,"h":_glVertexAttribPointer,"t":_glViewport,"di":_godot_audio_capture_start,"cg":_godot_audio_capture_stop,"be":_godot_audio_has_script_processor,"dc":_godot_audio_has_worklet,"bk":_godot_audio_init,"ck":_godot_audio_is_available,"kj":_godot_audio_resume,"yc":_godot_audio_script_create,"nc":_godot_audio_script_start,"Ub":_godot_audio_worklet_create,"ak":_godot_audio_worklet_start_no_threads,"Sb":_godot_js_config_canvas_id_get,"dh":_godot_js_config_locale_get,"_b":_godot_js_display_alert,"me":_godot_js_display_canvas_focus,"xe":_godot_js_display_canvas_is_focused,"ld":_godot_js_display_clipboard_get,"vd":_godot_js_display_clipboard_set,"Te":_godot_js_display_cursor_is_hidden,"Ie":_godot_js_display_cursor_is_locked,"Wa":_godot_js_display_cursor_lock_set,"ob":_godot_js_display_cursor_set_custom_shape,"Hf":_godot_js_display_cursor_set_shape,"Xa":_godot_js_display_cursor_set_visible,"yg":_godot_js_display_desired_size_set,"oc":_godot_js_display_fullscreen_cb,"Sf":_godot_js_display_fullscreen_exit,"bg":_godot_js_display_fullscreen_request,"Rj":_godot_js_display_glGetBufferSubData,"ib":_godot_js_display_has_webgl,"Yc":_godot_js_display_is_swap_ok_cancel,"lc":_godot_js_display_notification_cb,"cc":_godot_js_display_pixel_ratio_get,"ec":_godot_js_display_screen_dpi_get,"Jg":_godot_js_display_screen_size_get,"gd":_godot_js_display_setup_canvas,"Ug":_godot_js_display_size_update,"ae":_godot_js_display_touchscreen_is_available,"jc":_godot_js_display_vk_available,"kc":_godot_js_display_vk_cb,"hc":_godot_js_display_vk_hide,"ic":_godot_js_display_vk_show,"mc":_godot_js_display_window_blur_cb,"Yb":_godot_js_display_window_icon_set,"ng":_godot_js_display_window_size_get,"Zb":_godot_js_display_window_title_set,"zi":_godot_js_eval,"qj":_godot_js_fetch_body_length_get,"Aj":_godot_js_fetch_create,"Jb":_godot_js_fetch_free,"nj":_godot_js_fetch_http_status_get,"rj":_godot_js_fetch_is_chunked,"oj":_godot_js_fetch_read_chunk,"mj":_godot_js_fetch_read_headers,"eb":_godot_js_fetch_state_get,"pc":_godot_js_input_drop_files_cb,"rc":_godot_js_input_gamepad_cb,"fc":_godot_js_input_gamepad_sample,"Rd":_godot_js_input_gamepad_sample_count,"Gd":_godot_js_input_gamepad_sample_get,"sc":_godot_js_input_key_cb,"wc":_godot_js_input_mouse_button_cb,"vc":_godot_js_input_mouse_move_cb,"uc":_godot_js_input_mouse_wheel_cb,"qc":_godot_js_input_paste_cb,"tc":_godot_js_input_touch_cb,"Wb":_godot_js_input_vibrate_handheld,"oi":_godot_js_os_download_buffer,"ac":_godot_js_os_execute,"oh":_godot_js_os_finish_async,"Rb":_godot_js_os_fs_is_persistent,"gc":_godot_js_os_fs_sync,"$b":_godot_js_os_hw_concurrency_get,"Tb":_godot_js_os_request_quit_cb,"Xb":_godot_js_os_shell_open,"Qb":_godot_js_pwa_cb,"Vb":_godot_js_pwa_update,"Ob":_godot_js_rtc_datachannel_close,"Vj":_godot_js_rtc_datachannel_connect,"Sj":_godot_js_rtc_datachannel_destroy,"Wj":_godot_js_rtc_datachannel_get_buffered_amount,"_j":_godot_js_rtc_datachannel_id_get,"Xj":_godot_js_rtc_datachannel_is_negotiated,"$j":_godot_js_rtc_datachannel_is_ordered,"Uj":_godot_js_rtc_datachannel_label_get,"Zj":_godot_js_rtc_datachannel_max_packet_lifetime_get,"Yj":_godot_js_rtc_datachannel_max_retransmits_get,"Tj":_godot_js_rtc_datachannel_protocol_get,"Nb":_godot_js_rtc_datachannel_ready_state_get,"Mb":_godot_js_rtc_datachannel_send,"Qj":_godot_js_rtc_pc_close,"Lj":_godot_js_rtc_pc_create,"Kj":_godot_js_rtc_pc_datachannel_create,"Lb":_godot_js_rtc_pc_destroy,"Mj":_godot_js_rtc_pc_ice_candidate_add,"Oj":_godot_js_rtc_pc_local_description_set,"Pj":_godot_js_rtc_pc_offer_create,"Nj":_godot_js_rtc_pc_remote_description_set,"Kb":_godot_js_websocket_buffered_amount,"Ij":_godot_js_websocket_close,"Hj":_godot_js_websocket_create,"Ib":_godot_js_websocket_destroy,"Jj":_godot_js_websocket_send,"Yi":_godot_js_wrapper_create_cb,"Ki":_godot_js_wrapper_create_object,"Ui":_godot_js_wrapper_interface_get,"aj":_godot_js_wrapper_object_call,"hj":_godot_js_wrapper_object_get,"yb":_godot_js_wrapper_object_getvar,"jj":_godot_js_wrapper_object_set,"cj":_godot_js_wrapper_object_setvar,"ci":_godot_js_wrapper_object_unref,"vj":_godot_webxr_commit_for_eye,"Ej":_godot_webxr_get_bounds_geometry,"Fb":_godot_webxr_get_controller_axes,"sj":_godot_webxr_get_controller_buttons,"uj":_godot_webxr_get_controller_count,"Ra":_godot_webxr_get_controller_target_ray_mode,"tj":_godot_webxr_get_controller_transform,"wj":_godot_webxr_get_projection_for_eye,"yj":_godot_webxr_get_render_targetsize,"xj":_godot_webxr_get_transform_for_eye,"Dj":_godot_webxr_get_view_count,"Fj":_godot_webxr_get_visibility_state,"Bj":_godot_webxr_initialize,"Gb":_godot_webxr_is_controller_connected,"Gj":_godot_webxr_is_session_supported,"Cj":_godot_webxr_is_supported,"Hb":_godot_webxr_sample_controller_data,"zj":_godot_webxr_uninitialize,"za":invoke_ii,"na":invoke_iii,"gb":invoke_iiii,"hb":invoke_iiiii,"Dc":invoke_iiiiii,"Bc":invoke_iiiiiii,"zc":invoke_iij,"ca":invoke_vi,"oa":invoke_vii,"ta":invoke_viii,"sa":invoke_viiii,"Ma":invoke_viiiiiii,"l":_setTempRet0,"Eb":_strftime,"Nc":_strftime_l};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["ek"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["fk"]).apply(null,arguments)};var __Z13godot_js_mainiPPc=Module["__Z13godot_js_mainiPPc"]=function(){return(__Z13godot_js_mainiPPc=Module["__Z13godot_js_mainiPPc"]=Module["asm"]["gk"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["hk"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["ik"]).apply(null,arguments)};var _htonl=Module["_htonl"]=function(){return(_htonl=Module["_htonl"]=Module["asm"]["jk"]).apply(null,arguments)};var _htons=Module["_htons"]=function(){return(_htons=Module["_htons"]=Module["asm"]["kk"]).apply(null,arguments)};var _ntohs=Module["_ntohs"]=function(){return(_ntohs=Module["_ntohs"]=Module["asm"]["lk"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["mk"]).apply(null,arguments)};var __emwebxr_on_input_event=Module["__emwebxr_on_input_event"]=function(){return(__emwebxr_on_input_event=Module["__emwebxr_on_input_event"]=Module["asm"]["nk"]).apply(null,arguments)};var __emwebxr_on_simple_event=Module["__emwebxr_on_simple_event"]=function(){return(__emwebxr_on_simple_event=Module["__emwebxr_on_simple_event"]=Module["asm"]["ok"]).apply(null,arguments)};var ___stdio_exit=Module["___stdio_exit"]=function(){return(___stdio_exit=Module["___stdio_exit"]=Module["asm"]["pk"]).apply(null,arguments)};var ___funcs_on_exit=Module["___funcs_on_exit"]=function(){return(___funcs_on_exit=Module["___funcs_on_exit"]=Module["asm"]["qk"]).apply(null,arguments)};var _setThrew=Module["_setThrew"]=function(){return(_setThrew=Module["_setThrew"]=Module["asm"]["sk"]).apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return(stackSave=Module["stackSave"]=Module["asm"]["tk"]).apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return(stackRestore=Module["stackRestore"]=Module["asm"]["uk"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["vk"]).apply(null,arguments)};var dynCall_iij=Module["dynCall_iij"]=function(){return(dynCall_iij=Module["dynCall_iij"]=Module["asm"]["wk"]).apply(null,arguments)};function invoke_vii(index,a1,a2){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return getWasmTableEntry(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7){var sp=stackSave();try{getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6,a7)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{return getWasmTableEntry(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}function invoke_iij(index,a1,a2,a3){var sp=stackSave();try{return dynCall_iij(index,a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0)throw e;_setThrew(1,0)}}Module["cwrap"]=cwrap;Module["callMain"]=callMain;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module["_main"];args=args||[];var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(thisProgram);for(var i=1;i<argc;i++){HEAP32[(argv>>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=entryFunction(argc,argv);exit(ret,true);return ret}catch(e){return handleException(e)}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){EXITSTATUS=status;if(!keepRuntimeAlive()){exitRuntime()}procExit(status)}function procExit(code){EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=false;if(Module["noInitialRun"])shouldRunNow=false;run(); + + + return Godot.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = Godot; +else if (typeof define === 'function' && define['amd']) + define([], function() { return Godot; }); +else if (typeof exports === 'object') + exports["Godot"] = Godot; + +const Preloader = /** @constructor */ function () { // eslint-disable-line no-unused-vars + function getTrackedResponse(response, load_status) { + function onloadprogress(reader, controller) { + return reader.read().then(function (result) { + if (load_status.done) { + return Promise.resolve(); + } + if (result.value) { + controller.enqueue(result.value); + load_status.loaded += result.value.length; + } + if (!result.done) { + return onloadprogress(reader, controller); + } + load_status.done = true; + return Promise.resolve(); + }); + } + const reader = response.body.getReader(); + return new Response(new ReadableStream({ + start: function (controller) { + onloadprogress(reader, controller).then(function () { + controller.close(); + }); + }, + }), { headers: response.headers }); + } + + function loadFetch(file, tracker, fileSize, raw) { + tracker[file] = { + total: fileSize || 0, + loaded: 0, + done: false, + }; + return fetch(file).then(function (response) { + if (!response.ok) { + return Promise.reject(new Error(`Failed loading file '${file}'`)); + } + const tr = getTrackedResponse(response, tracker[file]); + if (raw) { + return Promise.resolve(tr); + } + return tr.arrayBuffer(); + }); + } + + function retry(func, attempts = 1) { + function onerror(err) { + if (attempts <= 1) { + return Promise.reject(err); + } + return new Promise(function (resolve, reject) { + setTimeout(function () { + retry(func, attempts - 1).then(resolve).catch(reject); + }, 1000); + }); + } + return func().catch(onerror); + } + + const DOWNLOAD_ATTEMPTS_MAX = 4; + const loadingFiles = {}; + const lastProgress = { loaded: 0, total: 0 }; + let progressFunc = null; + + const animateProgress = function () { + let loaded = 0; + let total = 0; + let totalIsValid = true; + let progressIsFinal = true; + + Object.keys(loadingFiles).forEach(function (file) { + const stat = loadingFiles[file]; + if (!stat.done) { + progressIsFinal = false; + } + if (!totalIsValid || stat.total === 0) { + totalIsValid = false; + total = 0; + } else { + total += stat.total; + } + loaded += stat.loaded; + }); + if (loaded !== lastProgress.loaded || total !== lastProgress.total) { + lastProgress.loaded = loaded; + lastProgress.total = total; + if (typeof progressFunc === 'function') { + progressFunc(loaded, total); + } + } + if (!progressIsFinal) { + requestAnimationFrame(animateProgress); + } + }; + + this.animateProgress = animateProgress; + + this.setProgressFunc = function (callback) { + progressFunc = callback; + }; + + this.loadPromise = function (file, fileSize, raw = false) { + return retry(loadFetch.bind(null, file, loadingFiles, fileSize, raw), DOWNLOAD_ATTEMPTS_MAX); + }; + + this.preloadedFiles = []; + this.preload = function (pathOrBuffer, destPath, fileSize) { + let buffer = null; + if (typeof pathOrBuffer === 'string') { + const me = this; + return this.loadPromise(pathOrBuffer, fileSize).then(function (buf) { + me.preloadedFiles.push({ + path: destPath || pathOrBuffer, + buffer: buf, + }); + return Promise.resolve(); + }); + } else if (pathOrBuffer instanceof ArrayBuffer) { + buffer = new Uint8Array(pathOrBuffer); + } else if (ArrayBuffer.isView(pathOrBuffer)) { + buffer = new Uint8Array(pathOrBuffer.buffer); + } + if (buffer) { + this.preloadedFiles.push({ + path: destPath, + buffer: pathOrBuffer, + }); + return Promise.resolve(); + } + return Promise.reject(new Error('Invalid object for preloading')); + }; +}; + +/** + * An object used to configure the Engine instance based on godot export options, and to override those in custom HTML + * templates if needed. + * + * @header Engine configuration + * @summary The Engine configuration object. This is just a typedef, create it like a regular object, e.g.: + * + * ``const MyConfig = { executable: 'godot', unloadAfterInit: false }`` + * + * @typedef {Object} EngineConfig + */ +const EngineConfig = {}; // eslint-disable-line no-unused-vars + +/** + * @struct + * @constructor + * @ignore + */ +const InternalConfig = function (initConfig) { // eslint-disable-line no-unused-vars + const cfg = /** @lends {InternalConfig.prototype} */ { + /** + * Whether the unload the engine automatically after the instance is initialized. + * + * @memberof EngineConfig + * @default + * @type {boolean} + */ + unloadAfterInit: true, + /** + * The HTML DOM Canvas object to use. + * + * By default, the first canvas element in the document will be used is none is specified. + * + * @memberof EngineConfig + * @default + * @type {?HTMLCanvasElement} + */ + canvas: null, + /** + * The name of the WASM file without the extension. (Set by Godot Editor export process). + * + * @memberof EngineConfig + * @default + * @type {string} + */ + executable: '', + /** + * An alternative name for the game pck to load. The executable name is used otherwise. + * + * @memberof EngineConfig + * @default + * @type {?string} + */ + mainPack: null, + /** + * Specify a language code to select the proper localization for the game. + * + * The browser locale will be used if none is specified. See complete list of + * :ref:`supported locales <doc_locales>`. + * + * @memberof EngineConfig + * @type {?string} + * @default + */ + locale: null, + /** + * The canvas resize policy determines how the canvas should be resized by Godot. + * + * ``0`` means Godot won't do any resizing. This is useful if you want to control the canvas size from + * javascript code in your template. + * + * ``1`` means Godot will resize the canvas on start, and when changing window size via engine functions. + * + * ``2`` means Godot will adapt the canvas size to match the whole browser window. + * + * @memberof EngineConfig + * @type {number} + * @default + */ + canvasResizePolicy: 2, + /** + * The arguments to be passed as command line arguments on startup. + * + * See :ref:`command line tutorial <doc_command_line_tutorial>`. + * + * **Note**: :js:meth:`startGame <Engine.prototype.startGame>` will always add the ``--main-pack`` argument. + * + * @memberof EngineConfig + * @type {Array<string>} + * @default + */ + args: [], + /** + * When enabled, the game canvas will automatically grab the focus when the engine starts. + * + * @memberof EngineConfig + * @type {boolean} + * @default + */ + focusCanvas: true, + /** + * When enabled, this will turn on experimental virtual keyboard support on mobile. + * + * @memberof EngineConfig + * @type {boolean} + * @default + */ + experimentalVK: false, + /** + * The progressive web app service worker to install. + * @memberof EngineConfig + * @default + * @type {string} + */ + serviceWorker: '', + /** + * @ignore + * @type {Array.<string>} + */ + persistentPaths: ['/userfs'], + /** + * @ignore + * @type {boolean} + */ + persistentDrops: false, + /** + * @ignore + * @type {Array.<string>} + */ + gdnativeLibs: [], + /** + * @ignore + * @type {Array.<string>} + */ + fileSizes: [], + /** + * A callback function for handling Godot's ``OS.execute`` calls. + * + * This is for example used in the Web Editor template to switch between project manager and editor, and for running the game. + * + * @callback EngineConfig.onExecute + * @param {string} path The path that Godot's wants executed. + * @param {Array.<string>} args The arguments of the "command" to execute. + */ + /** + * @ignore + * @type {?function(string, Array.<string>)} + */ + onExecute: null, + /** + * A callback function for being notified when the Godot instance quits. + * + * **Note**: This function will not be called if the engine crashes or become unresponsive. + * + * @callback EngineConfig.onExit + * @param {number} status_code The status code returned by Godot on exit. + */ + /** + * @ignore + * @type {?function(number)} + */ + onExit: null, + /** + * A callback function for displaying download progress. + * + * The function is called once per frame while downloading files, so the usage of ``requestAnimationFrame()`` + * is not necessary. + * + * If the callback function receives a total amount of bytes as 0, this means that it is impossible to calculate. + * Possible reasons include: + * + * - Files are delivered with server-side chunked compression + * - Files are delivered with server-side compression on Chromium + * - Not all file downloads have started yet (usually on servers without multi-threading) + * + * @callback EngineConfig.onProgress + * @param {number} current The current amount of downloaded bytes so far. + * @param {number} total The total amount of bytes to be downloaded. + */ + /** + * @ignore + * @type {?function(number, number)} + */ + onProgress: null, + /** + * A callback function for handling the standard output stream. This method should usually only be used in debug pages. + * + * By default, ``console.log()`` is used. + * + * @callback EngineConfig.onPrint + * @param {...*} [var_args] A variadic number of arguments to be printed. + */ + /** + * @ignore + * @type {?function(...*)} + */ + onPrint: function () { + console.log.apply(console, Array.from(arguments)); // eslint-disable-line no-console + }, + /** + * A callback function for handling the standard error stream. This method should usually only be used in debug pages. + * + * By default, ``console.error()`` is used. + * + * @callback EngineConfig.onPrintError + * @param {...*} [var_args] A variadic number of arguments to be printed as errors. + */ + /** + * @ignore + * @type {?function(...*)} + */ + onPrintError: function (var_args) { + console.error.apply(console, Array.from(arguments)); // eslint-disable-line no-console + }, + }; + + /** + * @ignore + * @struct + * @constructor + * @param {EngineConfig} opts + */ + function Config(opts) { + this.update(opts); + } + + Config.prototype = cfg; + + /** + * @ignore + * @param {EngineConfig} opts + */ + Config.prototype.update = function (opts) { + const config = opts || {}; + // NOTE: We must explicitly pass the default, accessing it via + // the key will fail due to closure compiler renames. + function parse(key, def) { + if (typeof (config[key]) === 'undefined') { + return def; + } + return config[key]; + } + // Module config + this.unloadAfterInit = parse('unloadAfterInit', this.unloadAfterInit); + this.onPrintError = parse('onPrintError', this.onPrintError); + this.onPrint = parse('onPrint', this.onPrint); + this.onProgress = parse('onProgress', this.onProgress); + + // Godot config + this.canvas = parse('canvas', this.canvas); + this.executable = parse('executable', this.executable); + this.mainPack = parse('mainPack', this.mainPack); + this.locale = parse('locale', this.locale); + this.canvasResizePolicy = parse('canvasResizePolicy', this.canvasResizePolicy); + this.persistentPaths = parse('persistentPaths', this.persistentPaths); + this.persistentDrops = parse('persistentDrops', this.persistentDrops); + this.experimentalVK = parse('experimentalVK', this.experimentalVK); + this.focusCanvas = parse('focusCanvas', this.focusCanvas); + this.serviceWorker = parse('serviceWorker', this.serviceWorker); + this.gdnativeLibs = parse('gdnativeLibs', this.gdnativeLibs); + this.fileSizes = parse('fileSizes', this.fileSizes); + this.args = parse('args', this.args); + this.onExecute = parse('onExecute', this.onExecute); + this.onExit = parse('onExit', this.onExit); + }; + + /** + * @ignore + * @param {string} loadPath + * @param {Response} response + */ + Config.prototype.getModuleConfig = function (loadPath, response) { + let r = response; + return { + 'print': this.onPrint, + 'printErr': this.onPrintError, + 'thisProgram': this.executable, + 'noExitRuntime': true, + 'dynamicLibraries': [`${loadPath}.side.wasm`], + 'instantiateWasm': function (imports, onSuccess) { + function done(result) { + onSuccess(result['instance'], result['module']); + } + if (typeof (WebAssembly.instantiateStreaming) !== 'undefined') { + WebAssembly.instantiateStreaming(Promise.resolve(r), imports).then(done); + } else { + r.arrayBuffer().then(function (buffer) { + WebAssembly.instantiate(buffer, imports).then(done); + }); + } + r = null; + return {}; + }, + 'locateFile': function (path) { + if (path.endsWith('.worker.js')) { + return `${loadPath}.worker.js`; + } else if (path.endsWith('.audio.worklet.js')) { + return `${loadPath}.audio.worklet.js`; + } else if (path.endsWith('.js')) { + return `${loadPath}.js`; + } else if (path.endsWith('.side.wasm')) { + return `${loadPath}.side.wasm`; + } else if (path.endsWith('.wasm')) { + return `${loadPath}.wasm`; + } + return path; + }, + }; + }; + + /** + * @ignore + * @param {function()} cleanup + */ + Config.prototype.getGodotConfig = function (cleanup) { + // Try to find a canvas + if (!(this.canvas instanceof HTMLCanvasElement)) { + const nodes = document.getElementsByTagName('canvas'); + if (nodes.length && nodes[0] instanceof HTMLCanvasElement) { + this.canvas = nodes[0]; + } + if (!this.canvas) { + throw new Error('No canvas found in page'); + } + } + // Canvas can grab focus on click, or key events won't work. + if (this.canvas.tabIndex < 0) { + this.canvas.tabIndex = 0; + } + + // Browser locale, or custom one if defined. + let locale = this.locale; + if (!locale) { + locale = navigator.languages ? navigator.languages[0] : navigator.language; + locale = locale.split('.')[0]; + } + locale = locale.replace('-', '_'); + const onExit = this.onExit; + + // Godot configuration. + return { + 'canvas': this.canvas, + 'canvasResizePolicy': this.canvasResizePolicy, + 'locale': locale, + 'persistentDrops': this.persistentDrops, + 'virtualKeyboard': this.experimentalVK, + 'focusCanvas': this.focusCanvas, + 'onExecute': this.onExecute, + 'onExit': function (p_code) { + cleanup(); // We always need to call the cleanup callback to free memory. + if (typeof (onExit) === 'function') { + onExit(p_code); + } + }, + }; + }; + return new Config(initConfig); +}; + +/** + * Projects exported for the Web expose the :js:class:`Engine` class to the JavaScript environment, that allows + * fine control over the engine's start-up process. + * + * This API is built in an asynchronous manner and requires basic understanding + * of `Promises <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises>`__. + * + * @module Engine + * @header HTML5 shell class reference + */ +const Engine = (function () { + const preloader = new Preloader(); + + let loadPromise = null; + let loadPath = ''; + let initPromise = null; + + /** + * @classdesc The ``Engine`` class provides methods for loading and starting exported projects on the Web. For default export + * settings, this is already part of the exported HTML page. To understand practical use of the ``Engine`` class, + * see :ref:`Custom HTML page for Web export <doc_customizing_html5_shell>`. + * + * @description Create a new Engine instance with the given configuration. + * + * @global + * @constructor + * @param {EngineConfig} initConfig The initial config for this instance. + */ + function Engine(initConfig) { // eslint-disable-line no-shadow + this.config = new InternalConfig(initConfig); + this.rtenv = null; + } + + /** + * Load the engine from the specified base path. + * + * @param {string} basePath Base path of the engine to load. + * @param {number=} [size=0] The file size if known. + * @returns {Promise} A Promise that resolves once the engine is loaded. + * + * @function Engine.load + */ + Engine.load = function (basePath, size) { + if (loadPromise == null) { + loadPath = basePath; + loadPromise = preloader.loadPromise(`${loadPath}.wasm`, size, true); + requestAnimationFrame(preloader.animateProgress); + } + return loadPromise; + }; + + /** + * Unload the engine to free memory. + * + * This method will be called automatically depending on the configuration. See :js:attr:`unloadAfterInit`. + * + * @function Engine.unload + */ + Engine.unload = function () { + loadPromise = null; + }; + + /** + * Check whether WebGL is available. Optionally, specify a particular version of WebGL to check for. + * + * @param {number=} [majorVersion=1] The major WebGL version to check for. + * @returns {boolean} If the given major version of WebGL is available. + * @function Engine.isWebGLAvailable + */ + Engine.isWebGLAvailable = function (majorVersion = 1) { + try { + return !!document.createElement('canvas').getContext(['webgl', 'webgl2'][majorVersion - 1]); + } catch (e) { /* Not available */ } + return false; + }; + + /** + * Safe Engine constructor, creates a new prototype for every new instance to avoid prototype pollution. + * @ignore + * @constructor + */ + function SafeEngine(initConfig) { + const proto = /** @lends Engine.prototype */ { + /** + * Initialize the engine instance. Optionally, pass the base path to the engine to load it, + * if it hasn't been loaded yet. See :js:meth:`Engine.load`. + * + * @param {string=} basePath Base path of the engine to load. + * @return {Promise} A ``Promise`` that resolves once the engine is loaded and initialized. + */ + init: function (basePath) { + if (initPromise) { + return initPromise; + } + if (loadPromise == null) { + if (!basePath) { + initPromise = Promise.reject(new Error('A base path must be provided when calling `init` and the engine is not loaded.')); + return initPromise; + } + Engine.load(basePath, this.config.fileSizes[`${basePath}.wasm`]); + } + const me = this; + function doInit(promise) { + // Care! Promise chaining is bogus with old emscripten versions. + // This caused a regression with the Mono build (which uses an older emscripten version). + // Make sure to test that when refactoring. + return new Promise(function (resolve, reject) { + promise.then(function (response) { + const cloned = new Response(response.clone().body, { 'headers': [['content-type', 'application/wasm']] }); + Godot(me.config.getModuleConfig(loadPath, cloned)).then(function (module) { + const paths = me.config.persistentPaths; + module['initFS'](paths).then(function (err) { + me.rtenv = module; + if (me.config.unloadAfterInit) { + Engine.unload(); + } + resolve(); + }); + }); + }); + }); + } + preloader.setProgressFunc(this.config.onProgress); + initPromise = doInit(loadPromise); + return initPromise; + }, + + /** + * Load a file so it is available in the instance's file system once it runs. Must be called **before** starting the + * instance. + * + * If not provided, the ``path`` is derived from the URL of the loaded file. + * + * @param {string|ArrayBuffer} file The file to preload. + * + * If a ``string`` the file will be loaded from that path. + * + * If an ``ArrayBuffer`` or a view on one, the buffer will used as the content of the file. + * + * @param {string=} path Path by which the file will be accessible. Required, if ``file`` is not a string. + * + * @returns {Promise} A Promise that resolves once the file is loaded. + */ + preloadFile: function (file, path) { + return preloader.preload(file, path, this.config.fileSizes[file]); + }, + + /** + * Start the engine instance using the given override configuration (if any). + * :js:meth:`startGame <Engine.prototype.startGame>` can be used in typical cases instead. + * + * This will initialize the instance if it is not initialized. For manual initialization, see :js:meth:`init <Engine.prototype.init>`. + * The engine must be loaded beforehand. + * + * Fails if a canvas cannot be found on the page, or not specified in the configuration. + * + * @param {EngineConfig} override An optional configuration override. + * @return {Promise} Promise that resolves once the engine started. + */ + start: function (override) { + this.config.update(override); + const me = this; + return me.init().then(function () { + if (!me.rtenv) { + return Promise.reject(new Error('The engine must be initialized before it can be started')); + } + + let config = {}; + try { + config = me.config.getGodotConfig(function () { + me.rtenv = null; + }); + } catch (e) { + return Promise.reject(e); + } + // Godot configuration. + me.rtenv['initConfig'](config); + + // Preload GDNative libraries. + const libs = []; + me.config.gdnativeLibs.forEach(function (lib) { + libs.push(me.rtenv['loadDynamicLibrary'](lib, { 'loadAsync': true })); + }); + return Promise.all(libs).then(function () { + return new Promise(function (resolve, reject) { + preloader.preloadedFiles.forEach(function (file) { + me.rtenv['copyToFS'](file.path, file.buffer); + }); + preloader.preloadedFiles.length = 0; // Clear memory + me.rtenv['callMain'](me.config.args); + initPromise = null; + if (me.config.serviceWorker && 'serviceWorker' in navigator) { + navigator.serviceWorker.register(me.config.serviceWorker); + } + resolve(); + }); + }); + }); + }, + + /** + * Start the game instance using the given configuration override (if any). + * + * This will initialize the instance if it is not initialized. For manual initialization, see :js:meth:`init <Engine.prototype.init>`. + * + * This will load the engine if it is not loaded, and preload the main pck. + * + * This method expects the initial config (or the override) to have both the :js:attr:`executable` and :js:attr:`mainPack` + * properties set (normally done by the editor during export). + * + * @param {EngineConfig} override An optional configuration override. + * @return {Promise} Promise that resolves once the game started. + */ + startGame: function (override) { + this.config.update(override); + // Add main-pack argument. + const exe = this.config.executable; + const pack = this.config.mainPack || `${exe}.pck`; + this.config.args = ['--main-pack', pack].concat(this.config.args); + // Start and init with execName as loadPath if not inited. + const me = this; + return Promise.all([ + this.init(exe), + this.preloadFile(pack, pack), + ]).then(function () { + return me.start.apply(me); + }); + }, + + /** + * Create a file at the specified ``path`` with the passed as ``buffer`` in the instance's file system. + * + * @param {string} path The location where the file will be created. + * @param {ArrayBuffer} buffer The content of the file. + */ + copyToFS: function (path, buffer) { + if (this.rtenv == null) { + throw new Error('Engine must be inited before copying files'); + } + this.rtenv['copyToFS'](path, buffer); + }, + + /** + * Request that the current instance quit. + * + * This is akin the user pressing the close button in the window manager, and will + * have no effect if the engine has crashed, or is stuck in a loop. + * + */ + requestQuit: function () { + if (this.rtenv) { + this.rtenv['request_quit'](); + } + }, + }; + + Engine.prototype = proto; + // Closure compiler exported instance methods. + Engine.prototype['init'] = Engine.prototype.init; + Engine.prototype['preloadFile'] = Engine.prototype.preloadFile; + Engine.prototype['start'] = Engine.prototype.start; + Engine.prototype['startGame'] = Engine.prototype.startGame; + Engine.prototype['copyToFS'] = Engine.prototype.copyToFS; + Engine.prototype['requestQuit'] = Engine.prototype.requestQuit; + // Also expose static methods as instance methods + Engine.prototype['load'] = Engine.load; + Engine.prototype['unload'] = Engine.unload; + Engine.prototype['isWebGLAvailable'] = Engine.isWebGLAvailable; + return new Engine(initConfig); + } + + // Closure compiler exported static methods. + SafeEngine['load'] = Engine.load; + SafeEngine['unload'] = Engine.unload; + SafeEngine['isWebGLAvailable'] = Engine.isWebGLAvailable; + + return SafeEngine; +}()); +if (typeof window !== 'undefined') { + window['Engine'] = Engine; +} diff --git a/sounds/Music.ogg b/index.pck Binary files differindex f1c5210..469a445 100644 --- a/sounds/Music.ogg +++ b/index.pck diff --git a/index.png b/index.png Binary files differnew file mode 100644 index 0000000..067b40f --- /dev/null +++ b/index.png diff --git a/index.wasm b/index.wasm Binary files differnew file mode 100644 index 0000000..37bacd7 --- /dev/null +++ b/index.wasm diff --git a/other/Save&Load.gd b/other/Save&Load.gd deleted file mode 100644 index f32c6bd..0000000 --- a/other/Save&Load.gd +++ /dev/null @@ -1,23 +0,0 @@ -extends Node - -const SAVE_DATA_PATH = "user://save_data.json" - -var default_save_data = {highscore = 0, unlocked1 = true, unlocked2 = false, unlocked3 = false, unlocked4 = false} - - -func save_data_to_file(save_data): - var json_string = to_json(save_data) - var save_file = File.new() - save_file.open(SAVE_DATA_PATH, File.WRITE) - save_file.store_line(json_string) - save_file.close() - - -func load_data_from_file(): - var save_file = File.new() - if not save_file.file_exists(SAVE_DATA_PATH): - return default_save_data - save_file.open(SAVE_DATA_PATH, File.READ) - var save_data = parse_json(save_file.get_as_text()) - save_file.close() - return save_data diff --git a/player/scenes/Ship.tscn b/player/scenes/Ship.tscn deleted file mode 100644 index f7e69ae..0000000 --- a/player/scenes/Ship.tscn +++ /dev/null @@ -1,386 +0,0 @@ -[gd_scene load_steps=35 format=2] - -[ext_resource path="res://ui/scenes/mobile/MobileControls.tscn" type="PackedScene" id=1] -[ext_resource path="res://sounds/thrust.wav" type="AudioStream" id=2] -[ext_resource path="res://effects/Trail.tscn" type="PackedScene" id=3] -[ext_resource path="res://sprites/ship.png" type="Texture" id=4] -[ext_resource path="res://sounds/thrust_start.wav" type="AudioStream" id=5] -[ext_resource path="res://sounds/thrust_end.wav" type="AudioStream" id=6] -[ext_resource path="res://player/scripts/ShipArea2d.gd" type="Script" id=7] -[ext_resource path="res://sounds/ShipHit.wav" type="AudioStream" id=8] -[ext_resource path="res://ui/scenes/mobile/MobileJoystick.tscn" type="PackedScene" id=9] -[ext_resource path="res://effects/Fire.tscn" type="PackedScene" id=10] -[ext_resource path="res://player/scripts/Ship.gd" type="Script" id=11] -[ext_resource path="res://sprites/spot.png" type="Texture" id=12] - -[sub_resource type="CanvasItemMaterial" id=42] -blend_mode = 1 - -[sub_resource type="Animation" id=38] -resource_name = "Die Anim" -length = 0.5 -tracks/0/type = "value" -tracks/0/path = NodePath("CPUParticles2D:emitting") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ true ] -} -tracks/1/type = "value" -tracks/1/path = NodePath("Sprite:visible") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ false ] -} -tracks/2/type = "method" -tracks/2/path = NodePath(".") -tracks/2/interp = 1 -tracks/2/loop_wrap = true -tracks/2/imported = false -tracks/2/enabled = true -tracks/2/keys = { -"times": PoolRealArray( 0.5 ), -"transitions": PoolRealArray( 1 ), -"values": [ { -"args": [ ], -"method": "queue_free" -} ] -} - -[sub_resource type="Animation" id=5] -resource_name = "Down" -length = 0.7 -loop = true -tracks/0/type = "value" -tracks/0/path = NodePath("Sprite:frame") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6 ), -"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1 ), -"update": 1, -"values": [ 7, 6, 5, 4, 3, 2, 1 ] -} - -[sub_resource type="Animation" id=22] -resource_name = "IdleDown" -length = 0.1 -loop = true -tracks/0/type = "value" -tracks/0/path = NodePath("Sprite:frame") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ 0 ] -} - -[sub_resource type="Animation" id=23] -resource_name = "IdleRight" -length = 0.1 -loop = true -tracks/0/type = "value" -tracks/0/path = NodePath("Sprite:frame") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ 0 ] -} - -[sub_resource type="Animation" id=21] -resource_name = "IdleUp" -length = 0.1 -loop = true -tracks/0/type = "value" -tracks/0/path = NodePath("Sprite:frame") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ 0 ] -} - -[sub_resource type="Animation" id=40] -length = 0.001 - -[sub_resource type="Animation" id=7] -resource_name = "Right" -length = 0.1 -loop = true -tracks/0/type = "value" -tracks/0/path = NodePath(".:rotation_degrees") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 0, -"values": [ 0.0 ] -} -tracks/1/type = "value" -tracks/1/path = NodePath("Sprite:frame") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/keys = { -"times": PoolRealArray( 0.0408909 ), -"transitions": PoolRealArray( 1 ), -"update": 1, -"values": [ 0 ] -} - -[sub_resource type="Animation" id=4] -resource_name = "Up" -length = 0.7 -loop = true -tracks/0/type = "value" -tracks/0/path = NodePath("Sprite:frame") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7 ), -"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1 ), -"update": 1, -"values": [ 1, 2, 3, 4, 5, 6, 7, 8 ] -} - -[sub_resource type="AnimationNodeAnimation" id=35] -animation = "IdleDown" - -[sub_resource type="AnimationNodeAnimation" id=36] -animation = "IdleRight" - -[sub_resource type="AnimationNodeAnimation" id=37] -animation = "IdleUp" - -[sub_resource type="AnimationNodeBlendSpace2D" id=32] -blend_point_0/node = SubResource( 35 ) -blend_point_0/pos = Vector2( 0, 1 ) -blend_point_1/node = SubResource( 36 ) -blend_point_1/pos = Vector2( 1, 0 ) -blend_point_2/node = SubResource( 37 ) -blend_point_2/pos = Vector2( 0, -1 ) -blend_mode = 1 - -[sub_resource type="AnimationNodeAnimation" id=29] -animation = "Down" - -[sub_resource type="AnimationNodeAnimation" id=30] -animation = "Right" - -[sub_resource type="AnimationNodeAnimation" id=31] -animation = "Up" - -[sub_resource type="AnimationNodeBlendSpace2D" id=28] -blend_point_0/node = SubResource( 29 ) -blend_point_0/pos = Vector2( 0, 1 ) -blend_point_1/node = SubResource( 30 ) -blend_point_1/pos = Vector2( 1.1, 0 ) -blend_point_2/node = SubResource( 31 ) -blend_point_2/pos = Vector2( 0, -1 ) -max_space = Vector2( 1.1, 1 ) -blend_mode = 1 - -[sub_resource type="AnimationNodeStateMachineTransition" id=33] - -[sub_resource type="AnimationNodeStateMachineTransition" id=34] - -[sub_resource type="AnimationNodeStateMachine" id=27] -states/Idle/node = SubResource( 32 ) -states/Idle/position = Vector2( 402, 81 ) -states/Turn/node = SubResource( 28 ) -states/Turn/position = Vector2( 248, 81 ) -transitions = [ "Turn", "Idle", SubResource( 33 ), "Idle", "Turn", SubResource( 34 ) ] -start_node = "Idle" - -[sub_resource type="AnimationNodeStateMachinePlayback" id=3] - -[sub_resource type="CircleShape2D" id=39] -radius = 374.065 - -[node name="Ship" type="KinematicBody2D" groups=["Player"]] -z_index = 2 -z_as_relative = false -collision_layer = 17 -collision_mask = 8 -script = ExtResource( 11 ) - -[node name="Light" type="Light2D" parent="."] -material = SubResource( 42 ) -scale = Vector2( 0.5, 0.5 ) -texture = ExtResource( 12 ) -texture_scale = 3.0 -shadow_enabled = true -shadow_gradient_length = 3.0 -shadow_filter = 2 -shadow_filter_smooth = 5.0 - -[node name="Fire" parent="." instance=ExtResource( 10 )] -emitting = false - -[node name="Trail" parent="." instance=ExtResource( 3 )] -position = Vector2( -2, -5 ) -MAX_LENGTH = 30 - -[node name="LeftWingtip" type="Position2D" parent="Trail"] -position = Vector2( 0, -4.76837e-07 ) - -[node name="Trail2" parent="." instance=ExtResource( 3 )] -position = Vector2( -2, 5 ) -MAX_LENGTH = 30 - -[node name="RightWingtip" type="Position2D" parent="Trail2"] - -[node name="Collision3" type="CollisionPolygon2D" parent="."] -visible = false -polygon = PoolVector2Array( -7, -4, -4, -4, -4, -6, -1, -6, 2, -2, 5, -2, 7, -1, 7, 1, 5, 2, 2, 2, -1, 6, -4, 6, -4, 4, -7, 4 ) - -[node name="Sprite" type="Sprite" parent="."] -z_index = 2 -z_as_relative = false -texture = ExtResource( 4 ) -hframes = 9 - -[node name="Timer" type="Timer" parent="."] - -[node name="thrustsfxin" type="AudioStreamPlayer" parent="."] -stream = ExtResource( 5 ) - -[node name="thrustsfxloop" type="AudioStreamPlayer" parent="."] -stream = ExtResource( 2 ) -volume_db = -8.0 - -[node name="thrustsfxend" type="AudioStreamPlayer" parent="."] -stream = ExtResource( 6 ) -volume_db = -4.0 - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -"anims/Die Anim" = SubResource( 38 ) -anims/Down = SubResource( 5 ) -anims/IdleDown = SubResource( 22 ) -anims/IdleRight = SubResource( 23 ) -anims/IdleUp = SubResource( 21 ) -anims/RESET = SubResource( 40 ) -anims/Right = SubResource( 7 ) -anims/Up = SubResource( 4 ) - -[node name="AnimationTree" type="AnimationTree" parent="."] -tree_root = SubResource( 27 ) -anim_player = NodePath("../AnimationPlayer") -parameters/playback = SubResource( 3 ) -parameters/Idle/blend_position = Vector2( 0, 0 ) -parameters/Turn/blend_position = Vector2( 0, 0 ) - -[node name="CPUParticles2D" type="CPUParticles2D" parent="."] -position = Vector2( -12, -19 ) -scale = Vector2( 2, 2 ) -emitting = false -amount = 100 -lifetime = 0.5 -one_shot = true -explosiveness = 0.5 -local_coords = false -draw_order = 1 -emission_shape = 3 -emission_points = PoolVector2Array( 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 1, 3, 1, 4, 1, 5, 1, 6, 1, 7, 1, 8, 1, 9, 1, 10, 1, 11, 1, 12, 2, 3, 2, 4, 2, 5, 2, 6, 2, 7, 2, 8, 2, 9, 2, 10, 2, 11, 2, 12, 3, 0, 3, 1, 3, 2, 3, 3, 3, 4, 3, 5, 3, 6, 3, 7, 3, 8, 3, 9, 3, 10, 3, 11, 3, 12, 3, 13, 3, 14, 3, 15, 4, 0, 4, 1, 4, 2, 4, 3, 4, 4, 4, 5, 4, 6, 4, 7, 4, 8, 4, 9, 4, 10, 4, 11, 4, 12, 4, 13, 4, 14, 4, 15, 5, 0, 5, 1, 5, 2, 5, 3, 5, 4, 5, 5, 5, 6, 5, 7, 5, 8, 5, 9, 5, 10, 5, 11, 5, 12, 5, 13, 5, 14, 5, 15, 6, 1, 6, 2, 6, 3, 6, 4, 6, 5, 6, 6, 6, 7, 6, 8, 6, 9, 6, 10, 6, 11, 6, 12, 6, 13, 6, 14, 7, 2, 7, 3, 7, 4, 7, 5, 7, 6, 7, 7, 7, 8, 7, 9, 7, 10, 7, 11, 7, 12, 7, 13, 8, 3, 8, 4, 8, 5, 8, 6, 8, 7, 8, 8, 8, 9, 8, 10, 8, 11, 8, 12, 9, 4, 9, 5, 9, 6, 9, 7, 9, 8, 9, 9, 9, 10, 9, 11, 10, 5, 10, 6, 10, 7, 10, 8, 10, 9, 10, 10, 11, 5, 11, 6, 11, 7, 11, 8, 11, 9, 11, 10, 12, 5, 12, 6, 12, 7, 12, 8, 12, 9, 12, 10, 13, 6, 13, 7, 13, 8, 13, 9, 14, 6, 14, 7, 14, 8, 14, 9, 15, 7, 15, 8 ) -emission_colors = PoolColorArray( 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1 ) -direction = Vector2( 1, -1 ) -spread = 100.0 -initial_velocity = 90.0 -scale_amount = 1.5 -scale_amount_random = 0.2 - -[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] -stream = ExtResource( 8 ) -volume_db = -20.0 - -[node name="MobileControls" type="CanvasLayer" parent="."] - -[node name="MobileButtons" parent="MobileControls" instance=ExtResource( 1 )] - -[node name="MobileJoystick" parent="MobileControls" groups=["mobile"] instance=ExtResource( 9 )] - -[node name="damage" type="Area2D" parent="." groups=["Player", "player"]] - -[node name="Collision2" type="CollisionPolygon2D" parent="damage"] -visible = false -polygon = PoolVector2Array( -7, -4, -4, -4, -4, -6, -1, -6, 2, -2, 5, -2, 7, -1, 7, 1, 5, 2, 2, 2, -1, 6, -4, 6, -4, 4, -7, 4 ) - -[node name="target_getter" type="Area2D" parent="." groups=["Player"]] -z_index = 2 -z_as_relative = false -collision_layer = 32 -collision_mask = 32 -script = ExtResource( 7 ) - -[node name="Collision" type="CollisionShape2D" parent="target_getter"] -visible = false -shape = SubResource( 39 ) - -[node name="Muzzles" type="Node2D" parent="."] -visible = false - -[node name="LaserMuzzle" type="Node2D" parent="Muzzles"] - -[node name="Position2D" type="Position2D" parent="Muzzles/LaserMuzzle"] -position = Vector2( 5, 0 ) - -[node name="RocketMuzzle" type="Node2D" parent="Muzzles"] - -[node name="Position2D" type="Position2D" parent="Muzzles/RocketMuzzle"] -position = Vector2( -2, -5 ) - -[node name="Position2D2" type="Position2D" parent="Muzzles/RocketMuzzle"] -position = Vector2( -2, 5 ) - -[node name="SplitMuzzle" type="Node2D" parent="Muzzles"] - -[node name="Position2D" type="Position2D" parent="Muzzles/SplitMuzzle"] -position = Vector2( -2, -5 ) - -[node name="Position2D2" type="Position2D" parent="Muzzles/SplitMuzzle"] -position = Vector2( -2, 5 ) - -[node name="Position2D3" type="Position2D" parent="Muzzles/SplitMuzzle"] -position = Vector2( 5, 0 ) - -[node name="FlakMuzzle" type="Node2D" parent="Muzzles"] - -[node name="Position2D" type="Position2D" parent="Muzzles/FlakMuzzle"] -position = Vector2( 5, 0 ) - -[connection signal="finished" from="AudioStreamPlayer" to="." method="_on_AudioStreamPlayer_finished"] -[connection signal="area_entered" from="damage" to="." method="_on_Ship_area_entered"] -[connection signal="body_entered" from="damage" to="." method="_on_Ship_body_entered"] -[connection signal="target" from="target_getter" to="." method="_on_target_getter_target"] diff --git a/player/scripts/Ship.gd b/player/scripts/Ship.gd deleted file mode 100644 index d3b969b..0000000 --- a/player/scripts/Ship.gd +++ /dev/null @@ -1,261 +0,0 @@ -extends KinematicBody2D -class_name playerkinematic - -var counter -var i_am_in_cooldown: bool -var wait_time = .1 -var walled = false -export var id = 1 -export var fireoffset = 2 -onready var animationState = $AnimationTree.get("parameters/playback") -onready var HitEffect = preload("res://effects/HitEffect.tscn") -onready var hitSound = $AudioStreamPlayer -const ExplosionEffect = preload("res://effects/ExplosionEffect.tscn") -var attack = preload("res://bullets/scenes/Laser.tscn") -export(int) var SPEED = 100 -onready var timer = $Timer -var movementpenalty = 20 -var velocity = Vector2.ZERO -signal player_death -var ACCELERATION = 500 -var FRICTION = 20 -var recoil = 40 -var input_vector = Vector2.ZERO -var USE_TOUCH = OS.has_touchscreen_ui_hint() -onready var splitshotu -onready var rocketsu -onready var lasersu -onready var flaku -onready var beamu -onready var fire = $Fire -onready var joystick = $MobileControls/MobileJoystick -onready var thrustsfxin = $thrustsfxin -onready var thrustsfxend = $thrustsfxend -onready var thrustsfxloop = $thrustsfxloop -onready var animation_tree = $AnimationTree - -var amount = 1 -var target = null -var firing = false -var thrusting_last_frame = false -var shake_intensity = .3 -var quant = 30 -var shake_duration = .2 - - -func _ready(): - playerstats.gun = "lasers" - animation_tree.active = true - lasersu = playerstats.lasers - rocketsu = playerstats.rockets - splitshotu = playerstats.splitshot - flaku = playerstats.flak - beamu = playerstats.beam - - -func create_hit_effect(): - Game.instance_scene_on_main(HitEffect, global_position) - - -func _physics_process(delta): - input_vector.x = Input.get_axis("left_%s" % id, "right_%s" % id) - input_vector.y = Input.get_axis("up_%s" % id, "down_%s" % id) - if Game.keyboard: - input_vector = input_vector.normalized() - if joystick.in_use: - input_vector = joystick.force - #makes a input vector based off of inputs, and supports controllers - # fire particle code - var fire_dir = input_vector * -1 - fire.direction = fire_dir - - if input_vector.x > 0 or input_vector.y != 0: - fire.emitting = true - fire.initial_velocity = input_vector.x * 40 - else: - fire.emitting = false - - if input_vector != Vector2.ZERO: - if not thrusting_last_frame: - thrustsfxin.playing = true - - if not thrustsfxloop.playing: - thrustsfxloop.playing = true - - thrusting_last_frame = true - else: - if thrusting_last_frame: - thrustsfxloop.playing = false - thrustsfxend.playing = true - - if thrustsfxin.playing: - thrustsfxin.playing = false - - thrusting_last_frame = false - if input_vector != Vector2.ZERO: #moves ya - velocity = velocity.move_toward(input_vector * SPEED, ACCELERATION * delta) - animation_tree.set("parameters/Turn/blend_position", input_vector) - animationState.travel("Turn") - else: - #stops you - animationState.travel("Idle") - velocity = velocity.move_toward(Vector2.ZERO, FRICTION * delta) - if firing: - SPEED = movementpenalty - if not i_am_in_cooldown: - if randi() % quant == quant - 1: - Glitch.apply(.1, amount) - else: - SPEED = 100 - if not i_am_in_cooldown and Input.is_action_pressed("shoot_%s" % id): - shoot() - elif not Input.is_action_pressed("shoot_%s" % id): - firing = false - if Input.is_action_just_pressed("change_gun_%s" % id): - match playerstats.gun: - "lasers": - rockets() - "rockets": - lasers() -# "splitshot": -# lasers() -# "flak": -# lasers() - velocity = move_and_slide(velocity) - - -func _on_TouchScreenButton_force(force): - input_vector = force - - -func _on_Ship_area_entered(area): - if not area.is_in_group("pbullet") and not area.is_in_group("Player"): - qfreenplay(area) - - -func qfreenplay(q): - q.queue_free() - play() - - -func _on_Ship_body_entered(body): - if not body.is_in_group("Player") and not body.is_in_group("pbullet"): - qfreenplay(body) - - -func play(): - hitSound.play() - - -func _on_AudioStreamPlayer_finished(): - playerstats.hp -= 1 - if playerstats.hp <= 0: - $AnimationPlayer.play("Die Anim") - - -func _go_into_cooldown(): - i_am_in_cooldown = true - timer.start(wait_time) - yield(timer, "timeout") - i_am_in_cooldown = false - - -func flak(): - if flaku: - wait_time = .001 - shake_intensity = .03 - shake_duration = .04 - enemy_damage.min_damage = 15 - enemy_damage.max_damage = 30 - movementpenalty = 0 - quant = 20 - amount = .5 - recoil = 1 - attack = preload("res://bullets/scenes/Flak.tscn") - playerstats.gun = "flak" - - -func rockets(): - if rocketsu: - shake_intensity = .4 - shake_duration = .3 - wait_time = 1 - amount = 1 - quant = 4 - enemy_damage.min_damage = 10 - enemy_damage.max_damage = 30 - movementpenalty = 60 - recoil = 200 - attack = preload("res://bullets/scenes/missile.tscn") - playerstats.gun = "rockets" - - -func lasers(): - if lasersu: - amount = 1 - shake_intensity = .3 - shake_duration = .2 - wait_time = .1 - quant = 20 - enemy_damage.min_damage = 4 - enemy_damage.max_damage = 9 - movementpenalty = 20 - recoil = 20 - attack = preload("res://bullets/scenes/Laser.tscn") - playerstats.gun = "lasers" - - -func splitshot(): - if splitshotu: - quant = 40 - wait_time = 0.05 - shake_intensity = .2 - amount = .5 - shake_duration = .2 - enemy_damage.min_damage = .5 - enemy_damage.max_damage = 1 - recoil = 12 - movementpenalty = 130 - attack = preload("res://bullets/scenes/SplitShot.tscn") - playerstats.gun = "splitshot" - - -onready var rocket_muzzles = $Muzzles/RocketMuzzle.get_children() -onready var laser_muzzles = $Muzzles/LaserMuzzle.get_children() - - -func shoot(): #shoot - _go_into_cooldown() - if !firing: - firing = true - Shake.shake(shake_intensity, shake_duration) - match playerstats.gun: - "rockets": - for muzzle in rocket_muzzles: - var bullet = fire(muzzle.global_position, attack) - bullet.start(target) - "lasers": - for muzzle in laser_muzzles: - fire(muzzle.global_position, attack) - - -# warning-ignore:function_conflicts_variable -func fire(global_pos, Bullet): - var bullet = Game.instance_scene_on_main(Bullet, global_pos) - if playerstats.power: - bullet.powered_up = true - if not self.is_on_wall(): - velocity.x -= recoil - else: - velocity.x -= recoil / 10 - return bullet - - -func _exit_tree(): - playerstats.alive = false - Game.instance_scene_on_main(ExplosionEffect, global_position) - emit_signal("player_death") - - -func _on_target_getter_target(_target): - target = _target diff --git a/player/scripts/ShipArea2d.gd b/player/scripts/ShipArea2d.gd deleted file mode 100644 index f894df2..0000000 --- a/player/scripts/ShipArea2d.gd +++ /dev/null @@ -1,26 +0,0 @@ -extends Area2D - -var target = null setget tar - -signal target - - -func tar(tget): - emit_signal("target", tget) - - -func _physics_process(_delta): - if !target or not is_instance_valid(target): - find_target() - - -func find_target(): - var units = get_overlapping_areas() - if units.size() > 0: - var closest = units[0] - for unit in units: - if position.distance_to(unit.global_position) < position.distance_to(closest.global_position): - closest = unit - self.target = closest - else: - self.target = null diff --git a/player/scripts/playerstats.gd b/player/scripts/playerstats.gd deleted file mode 100644 index ab5745b..0000000 --- a/player/scripts/playerstats.gd +++ /dev/null @@ -1,44 +0,0 @@ -extends Node -class_name playerstatz - -var alive = true -var dev_mode = false -var beam = true -var splitshot = true -var multiplayerlocal = false -var rockets = true -var lasers = true -var flak = true -var gun = "lasers" -var power = false setget set_powerup -export(int) var max_hp = 3 setget set_max_health -var hp = max_hp setget set_health -var recent_score: int - -signal no_hp -signal hp_changed(value) -signal max_hp_changed(value) - - -func set_max_health(value): - max_hp = value - self.hp = min(hp, max_hp) - emit_signal("max_hp_changed", value) - - -func set_health(value): - hp = value - emit_signal("hp_changed", hp) - if hp <= 0: - emit_signal("no_hp") - - -func _ready(): - self.hp = max_hp - - -func set_powerup(new_power): - power = new_power - if power: - var t = get_tree().create_timer(8) - t.connect("timeout", self, "set_powerup", [false]) diff --git a/project.godot b/project.godot deleted file mode 100644 index fc31629..0000000 --- a/project.godot +++ /dev/null @@ -1,322 +0,0 @@ -; Engine configuration file. -; It's best edited using the editor UI and not directly, -; since the parameters that go here are not all obvious. -; -; Format: -; [section] ; section goes between [] -; param=value ; assign values to parameters - -config_version=4 - -_global_script_classes=[ { -"base": "Enemy", -"class": "Boss", -"language": "GDScript", -"path": "res://enemy/scripts/Boss.gd" -}, { -"base": "RigidBody2D", -"class": "Bullet", -"language": "GDScript", -"path": "res://bullets/scripts/Laser.gd" -}, { -"base": "Enemy", -"class": "EasyEnemy", -"language": "GDScript", -"path": "res://enemy/scripts/EasyEnemy.gd" -}, { -"base": "Area2D", -"class": "Enemy", -"language": "GDScript", -"path": "res://enemy/scripts/EnemyClass.gd" -}, { -"base": "Enemy", -"class": "EnemyMedium", -"language": "GDScript", -"path": "res://enemy/scripts/Enemy.gd" -}, { -"base": "Enemy", -"class": "EnemyUfo", -"language": "GDScript", -"path": "res://enemy/scripts/UFO.gd" -}, { -"base": "Enemy", -"class": "HardEnemy", -"language": "GDScript", -"path": "res://enemy/scripts/HardEnemy.gd" -}, { -"base": "KinematicBody2D", -"class": "playerkinematic", -"language": "GDScript", -"path": "res://player/scripts/Ship.gd" -}, { -"base": "Node", -"class": "playerstatz", -"language": "GDScript", -"path": "res://player/scripts/playerstats.gd" -} ] -_global_script_class_icons={ -"Boss": "", -"Bullet": "", -"EasyEnemy": "", -"Enemy": "", -"EnemyMedium": "", -"EnemyUfo": "", -"HardEnemy": "", -"playerkinematic": "", -"playerstatz": "" -} - -[application] - -config/name="spaceshooty" -run/main_scene="res://ui/scenes/StartMenu.tscn" -boot_splash/image="res://sprites/icon.png" -boot_splash/use_filter=false -boot_splash/bg_color=Color( 0.12549, 0.145098, 0.192157, 0.0509804 ) -config/icon="res://sprites/icon.png" -config/macos_native_icon="res://sprites/icon.png" -config/windows_native_icon="res://sprites/icon.png" - -[autoload] - -Music="*res://sounds/Music.tscn" -SaveAndLoad="*res://other/Save&Load.gd" -enemy_damage="*res://enemy/scripts/enemy_damage.gd" -playerstats="*res://player/scripts/playerstats.gd" -Shake="*res://effects/shake.gd" -Game="*res://effects/Game.tscn" -Glitch="*res://effects/Glitch.tscn" - -[compression] - -formats/zstd/long_distance_matching=true -formats/zstd/compression_level=22 -formats/zlib/compression_level=9 -formats/gzip/compression_level=9 - -[debug] - -gdscript/warnings/return_value_discarded=false - -[display] - -window/size/width=320 -window/size/height=180 -window/size/fullscreen=true -window/size/test_width=1280 -window/size/test_height=720 -window/dpi/allow_hidpi=true -window/vsync/use_vsync=false -window/per_pixel_transparency/allowed=true -window/per_pixel_transparency/enabled=true -mouse_cursor/custom_image="res://sprites/cursor.png" -window/stretch/mode="2d" -window/stretch/aspect="expand" - -[editor_plugins] - -enabled=PoolStringArray( ) - -[global] - -bullet_lights=true - -[importer_defaults] - -texture={ -"compress/bptc_ldr": 0, -"compress/hdr_mode": 0, -"compress/lossy_quality": 0.7, -"compress/mode": 0, -"compress/normal_map": 0, -"detect_3d": false, -"flags/anisotropic": false, -"flags/filter": false, -"flags/mipmaps": false, -"flags/repeat": 0, -"flags/srgb": 2, -"process/HDR_as_SRGB": false, -"process/fix_alpha_border": true, -"process/invert_color": false, -"process/normal_map_invert_y": false, -"process/premult_alpha": false, -"size_limit": 0, -"stream": false, -"svg/scale": 1.0 -} - -[input] - -ui_accept={ -"deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":32,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"pressed":false,"doubleclick":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":32,"unicode":0,"echo":false,"script":null) -, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":false,"script":null) -, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":2,"pressure":0.0,"pressed":false,"script":null) - ] -} -ui_select={ -"deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":32,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"pressed":false,"doubleclick":false,"script":null) -, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":false,"script":null) - ] -} -ui_cancel={ -"deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777217,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":1,"pressure":0.0,"pressed":false,"script":null) - ] -} -ui_focus_next={ -"deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777218,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] -} -ui_focus_prev={ -"deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":true,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777218,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] -} -ui_left={ -"deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null) - ] -} -ui_right={ -"deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"script":null) - ] -} -ui_up={ -"deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null) - ] -} -ui_down={ -"deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null) - ] -} -ui_page_up={ -"deadzone": 0.5, -"events": [ ] -} -ui_page_down={ -"deadzone": 0.5, -"events": [ ] -} -ui_home={ -"deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777229,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] -} -ui_end={ -"deadzone": 0.5, -"events": [ ] -} -right_1={ -"deadzone": 0.2, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null) - ] -} -left_1={ -"deadzone": 0.2, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null) - ] -} -up_1={ -"deadzone": 0.2, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null) - ] -} -down_1={ -"deadzone": 0.2, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null) - ] -} -shoot_1={ -"deadzone": 0.2, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":32,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":2,"pressure":0.0,"pressed":false,"script":null) - ] -} -change_gun_1={ -"deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777218,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":3,"pressure":0.0,"pressed":false,"script":null) - ] -} -pause={ -"deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777217,"physical_scancode":0,"unicode":0,"echo":false,"script":null) -, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":1,"pressure":0.0,"pressed":false,"script":null) - ] -} -options={ -"deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777220,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] -} -spacebar={ -"deadzone": 0.5, -"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":32,"physical_scancode":0,"unicode":0,"echo":false,"script":null) - ] -} -x={ -"deadzone": 0.5, -"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":2,"pressure":0.0,"pressed":false,"script":null) - ] -} - -[input_devices] - -pointing/emulate_mouse_from_touch=false - -[layer_names] - -2d_render/layer_1="player" -2d_physics/layer_1="player" -2d_physics/layer_2="enemy" -2d_physics/layer_3="bullet" -2d_physics/layer_4="world_collisions" -2d_physics/layer_5="player_collide" -2d_physics/layer_6="targeted" -2d_physics/layer_12="ui" -3d_physics/layer_12="ui" - -[physics] - -2d/thread_model=2 -2d/time_before_sleep=0.1 -common/physics_interpolation=true -common/enable_object_picking=false - -[rendering] - -quality/driver/driver_name="GLES2" -quality/driver/fallback_to_gles2=true -2d/options/use_nvidia_rect_flicker_workaround=true -quality/intended_usage/framebuffer_allocation=0 -quality/intended_usage/framebuffer_allocation.mobile=0 -2d/snapping/use_gpu_pixel_snap=true -threads/thread_model=2 -vram_compression/import_etc=true -vram_compression/import_pvrtc=true -quality/shadows/filter_mode=2 -quality/shadows/filter_mode.mobile=2 -quality/filters/anisotropic_filter_level=1 -quality/dynamic_fonts/use_oversampling=false diff --git a/sounds/Explode.wav b/sounds/Explode.wav Binary files differdeleted file mode 100644 index 639aa7f..0000000 --- a/sounds/Explode.wav +++ /dev/null diff --git a/sounds/Explode.wav.import b/sounds/Explode.wav.import deleted file mode 100644 index cc1ba73..0000000 --- a/sounds/Explode.wav.import +++ /dev/null @@ -1,23 +0,0 @@ -[remap] - -importer="wav" -type="AudioStreamSample" -path="res://.import/Explode.wav-6c5ca6b4d6e678fe4150686f30c446e2.sample" - -[deps] - -source_file="res://sounds/Explode.wav" -dest_files=[ "res://.import/Explode.wav-6c5ca6b4d6e678fe4150686f30c446e2.sample" ] - -[params] - -force/8_bit=false -force/mono=false -force/max_rate=false -force/max_rate_hz=44100 -edit/trim=false -edit/normalize=false -edit/loop_mode=0 -edit/loop_begin=0 -edit/loop_end=-1 -compress/mode=0 diff --git a/sounds/Hit.wav b/sounds/Hit.wav Binary files differdeleted file mode 100644 index c3e0bc2..0000000 --- a/sounds/Hit.wav +++ /dev/null diff --git a/sounds/Hit.wav.import b/sounds/Hit.wav.import deleted file mode 100644 index 55825cd..0000000 --- a/sounds/Hit.wav.import +++ /dev/null @@ -1,23 +0,0 @@ -[remap] - -importer="wav" -type="AudioStreamSample" -path="res://.import/Hit.wav-5d92a1bbf8d35910f840017082ad1b47.sample" - -[deps] - -source_file="res://sounds/Hit.wav" -dest_files=[ "res://.import/Hit.wav-5d92a1bbf8d35910f840017082ad1b47.sample" ] - -[params] - -force/8_bit=false -force/mono=false -force/max_rate=false -force/max_rate_hz=44100 -edit/trim=false -edit/normalize=false -edit/loop_mode=0 -edit/loop_begin=0 -edit/loop_end=-1 -compress/mode=0 diff --git a/sounds/Laser.wav b/sounds/Laser.wav Binary files differdeleted file mode 100644 index 52693e0..0000000 --- a/sounds/Laser.wav +++ /dev/null diff --git a/sounds/Laser.wav.import b/sounds/Laser.wav.import deleted file mode 100644 index 92ff681..0000000 --- a/sounds/Laser.wav.import +++ /dev/null @@ -1,23 +0,0 @@ -[remap] - -importer="wav" -type="AudioStreamSample" -path="res://.import/Laser.wav-3b820c59a92ec9dba4a9ae4052085250.sample" - -[deps] - -source_file="res://sounds/Laser.wav" -dest_files=[ "res://.import/Laser.wav-3b820c59a92ec9dba4a9ae4052085250.sample" ] - -[params] - -force/8_bit=false -force/mono=false -force/max_rate=false -force/max_rate_hz=44100 -edit/trim=false -edit/normalize=false -edit/loop_mode=0 -edit/loop_begin=0 -edit/loop_end=-1 -compress/mode=0 diff --git a/sounds/Music.ogg.import b/sounds/Music.ogg.import deleted file mode 100644 index 3196a5b..0000000 --- a/sounds/Music.ogg.import +++ /dev/null @@ -1,15 +0,0 @@ -[remap] - -importer="ogg_vorbis" -type="AudioStreamOGGVorbis" -path="res://.import/Music.ogg-2b7cf951fddcace049637acc92067a32.oggstr" - -[deps] - -source_file="res://sounds/Music.ogg" -dest_files=[ "res://.import/Music.ogg-2b7cf951fddcace049637acc92067a32.oggstr" ] - -[params] - -loop=true -loop_offset=0 diff --git a/sounds/Music.tscn b/sounds/Music.tscn deleted file mode 100644 index c345728..0000000 --- a/sounds/Music.tscn +++ /dev/null @@ -1,9 +0,0 @@ -[gd_scene load_steps=2 format=2] - -[ext_resource path="res://sounds/Music.ogg" type="AudioStream" id=1] - -[node name="Music" type="AudioStreamPlayer"] -pause_mode = 2 -stream = ExtResource( 1 ) -volume_db = -26.0 -autoplay = true diff --git a/sounds/ShipHit.wav b/sounds/ShipHit.wav Binary files differdeleted file mode 100644 index a601c6e..0000000 --- a/sounds/ShipHit.wav +++ /dev/null diff --git a/sounds/ShipHit.wav.import b/sounds/ShipHit.wav.import deleted file mode 100644 index bc24d6f..0000000 --- a/sounds/ShipHit.wav.import +++ /dev/null @@ -1,23 +0,0 @@ -[remap] - -importer="wav" -type="AudioStreamSample" -path="res://.import/ShipHit.wav-da3aa0cf6913c89191a963d9dddbbb4c.sample" - -[deps] - -source_file="res://sounds/ShipHit.wav" -dest_files=[ "res://.import/ShipHit.wav-da3aa0cf6913c89191a963d9dddbbb4c.sample" ] - -[params] - -force/8_bit=false -force/mono=false -force/max_rate=false -force/max_rate_hz=44100 -edit/trim=false -edit/normalize=false -edit/loop_mode=0 -edit/loop_begin=0 -edit/loop_end=-1 -compress/mode=0 diff --git a/sounds/missile.wav b/sounds/missile.wav Binary files differdeleted file mode 100644 index 5b1c779..0000000 --- a/sounds/missile.wav +++ /dev/null diff --git a/sounds/missile.wav.import b/sounds/missile.wav.import deleted file mode 100644 index 765e7d2..0000000 --- a/sounds/missile.wav.import +++ /dev/null @@ -1,23 +0,0 @@ -[remap] - -importer="wav" -type="AudioStreamSample" -path="res://.import/missile.wav-1fb8b7a03f647ceb0c0fea9579c6c2b1.sample" - -[deps] - -source_file="res://sounds/missile.wav" -dest_files=[ "res://.import/missile.wav-1fb8b7a03f647ceb0c0fea9579c6c2b1.sample" ] - -[params] - -force/8_bit=false -force/mono=false -force/max_rate=false -force/max_rate_hz=44100 -edit/trim=false -edit/normalize=false -edit/loop_mode=0 -edit/loop_begin=0 -edit/loop_end=-1 -compress/mode=0 diff --git a/sounds/thrust.wav b/sounds/thrust.wav Binary files differdeleted file mode 100644 index 9a6718a..0000000 --- a/sounds/thrust.wav +++ /dev/null diff --git a/sounds/thrust.wav.import b/sounds/thrust.wav.import deleted file mode 100644 index 5fb1a0f..0000000 --- a/sounds/thrust.wav.import +++ /dev/null @@ -1,23 +0,0 @@ -[remap] - -importer="wav" -type="AudioStreamSample" -path="res://.import/thrust.wav-dcae1f3a027628c87cc049dc3c4ba29d.sample" - -[deps] - -source_file="res://sounds/thrust.wav" -dest_files=[ "res://.import/thrust.wav-dcae1f3a027628c87cc049dc3c4ba29d.sample" ] - -[params] - -force/8_bit=false -force/mono=false -force/max_rate=false -force/max_rate_hz=44100 -edit/trim=false -edit/normalize=false -edit/loop_mode=0 -edit/loop_begin=0 -edit/loop_end=-1 -compress/mode=0 diff --git a/sounds/thrust_end.wav b/sounds/thrust_end.wav Binary files differdeleted file mode 100644 index 1176c09..0000000 --- a/sounds/thrust_end.wav +++ /dev/null diff --git a/sounds/thrust_end.wav.import b/sounds/thrust_end.wav.import deleted file mode 100644 index 9fa083c..0000000 --- a/sounds/thrust_end.wav.import +++ /dev/null @@ -1,23 +0,0 @@ -[remap] - -importer="wav" -type="AudioStreamSample" -path="res://.import/thrust_end.wav-db30a56d5fda908540365eb0b4f2f2f1.sample" - -[deps] - -source_file="res://sounds/thrust_end.wav" -dest_files=[ "res://.import/thrust_end.wav-db30a56d5fda908540365eb0b4f2f2f1.sample" ] - -[params] - -force/8_bit=false -force/mono=false -force/max_rate=false -force/max_rate_hz=44100 -edit/trim=false -edit/normalize=false -edit/loop_mode=0 -edit/loop_begin=0 -edit/loop_end=-1 -compress/mode=0 diff --git a/sounds/thrust_start.wav b/sounds/thrust_start.wav Binary files differdeleted file mode 100644 index f94b7ba..0000000 --- a/sounds/thrust_start.wav +++ /dev/null diff --git a/sounds/thrust_start.wav.import b/sounds/thrust_start.wav.import deleted file mode 100644 index 00db8c5..0000000 --- a/sounds/thrust_start.wav.import +++ /dev/null @@ -1,23 +0,0 @@ -[remap] - -importer="wav" -type="AudioStreamSample" -path="res://.import/thrust_start.wav-af3e96bb56c23733c06ce97f5a016d93.sample" - -[deps] - -source_file="res://sounds/thrust_start.wav" -dest_files=[ "res://.import/thrust_start.wav-af3e96bb56c23733c06ce97f5a016d93.sample" ] - -[params] - -force/8_bit=false -force/mono=false -force/max_rate=false -force/max_rate_hz=44100 -edit/trim=false -edit/normalize=false -edit/loop_mode=0 -edit/loop_begin=0 -edit/loop_end=-1 -compress/mode=0 diff --git a/sprites/EasyEnemy.png b/sprites/EasyEnemy.png Binary files differdeleted file mode 100644 index fbbbc77..0000000 --- a/sprites/EasyEnemy.png +++ /dev/null diff --git a/sprites/EasyEnemy.png.import b/sprites/EasyEnemy.png.import deleted file mode 100644 index a3ae461..0000000 --- a/sprites/EasyEnemy.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/EasyEnemy.png-f917d2377d7001e64027cc5e63f7a389.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/EasyEnemy.png" -dest_files=[ "res://.import/EasyEnemy.png-f917d2377d7001e64027cc5e63f7a389.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/EnemyMissile.png b/sprites/EnemyMissile.png Binary files differdeleted file mode 100644 index 872e239..0000000 --- a/sprites/EnemyMissile.png +++ /dev/null diff --git a/sprites/EnemyMissile.png.import b/sprites/EnemyMissile.png.import deleted file mode 100644 index 8f48fd4..0000000 --- a/sprites/EnemyMissile.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/EnemyMissile.png-cb91e9ffffbb1beb5147fe5507371ab3.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/EnemyMissile.png" -dest_files=[ "res://.import/EnemyMissile.png-cb91e9ffffbb1beb5147fe5507371ab3.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/Explosion.png b/sprites/Explosion.png Binary files differdeleted file mode 100644 index 81086cc..0000000 --- a/sprites/Explosion.png +++ /dev/null diff --git a/sprites/Explosion.png.import b/sprites/Explosion.png.import deleted file mode 100644 index dc0d22b..0000000 --- a/sprites/Explosion.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/Explosion.png-b982da0d38ede858ab3f64ad091769aa.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/Explosion.png" -dest_files=[ "res://.import/Explosion.png-b982da0d38ede858ab3f64ad091769aa.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/Flame.png b/sprites/Flame.png Binary files differdeleted file mode 100644 index afc392d..0000000 --- a/sprites/Flame.png +++ /dev/null diff --git a/sprites/Flame.png.import b/sprites/Flame.png.import deleted file mode 100644 index 17c2834..0000000 --- a/sprites/Flame.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/Flame.png-398c221346a8409b8dc5c65754ea764a.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/Flame.png" -dest_files=[ "res://.import/Flame.png-398c221346a8409b8dc5c65754ea764a.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/HardEnemy.png b/sprites/HardEnemy.png Binary files differdeleted file mode 100644 index 9597d69..0000000 --- a/sprites/HardEnemy.png +++ /dev/null diff --git a/sprites/HardEnemy.png.import b/sprites/HardEnemy.png.import deleted file mode 100644 index 0f7946a..0000000 --- a/sprites/HardEnemy.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/HardEnemy.png-6d215f28ac4c09f90222b2a679f873ed.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/HardEnemy.png" -dest_files=[ "res://.import/HardEnemy.png-6d215f28ac4c09f90222b2a679f873ed.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/Laser-Sheet.png b/sprites/Laser-Sheet.png Binary files differdeleted file mode 100644 index c77f28d..0000000 --- a/sprites/Laser-Sheet.png +++ /dev/null diff --git a/sprites/Laser-Sheet.png.import b/sprites/Laser-Sheet.png.import deleted file mode 100644 index ad7397a..0000000 --- a/sprites/Laser-Sheet.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/Laser-Sheet.png-432fa97315758bc1cdfa454aa4c558cf.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/Laser-Sheet.png" -dest_files=[ "res://.import/Laser-Sheet.png-432fa97315758bc1cdfa454aa4c558cf.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/PlayerMissileIcon.png b/sprites/PlayerMissileIcon.png Binary files differdeleted file mode 100644 index 60975f5..0000000 --- a/sprites/PlayerMissileIcon.png +++ /dev/null diff --git a/sprites/PlayerMissileIcon.png.import b/sprites/PlayerMissileIcon.png.import deleted file mode 100644 index 65ce3fa..0000000 --- a/sprites/PlayerMissileIcon.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/PlayerMissileIcon.png-d72f6c19ad7c8761d9be1b6ba9822ebf.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/PlayerMissileIcon.png" -dest_files=[ "res://.import/PlayerMissileIcon.png-d72f6c19ad7c8761d9be1b6ba9822ebf.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/PlayerMissle.png b/sprites/PlayerMissle.png Binary files differdeleted file mode 100644 index d32103b..0000000 --- a/sprites/PlayerMissle.png +++ /dev/null diff --git a/sprites/PlayerMissle.png.import b/sprites/PlayerMissle.png.import deleted file mode 100644 index db8654b..0000000 --- a/sprites/PlayerMissle.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/PlayerMissle.png-5e06ba395910a9d376541f67b563c833.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/PlayerMissle.png" -dest_files=[ "res://.import/PlayerMissle.png-5e06ba395910a9d376541f67b563c833.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/Ship.png b/sprites/Ship.png Binary files differdeleted file mode 100644 index 089df60..0000000 --- a/sprites/Ship.png +++ /dev/null diff --git a/sprites/Ship.png.import b/sprites/Ship.png.import deleted file mode 100644 index 521e6c2..0000000 --- a/sprites/Ship.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/Ship.png-4d7cc2daf3e5518c76f45438d1a0acb6.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/Ship.png" -dest_files=[ "res://.import/Ship.png-4d7cc2daf3e5518c76f45438d1a0acb6.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/UFO-export.png b/sprites/UFO-export.png Binary files differdeleted file mode 100644 index 3eef517..0000000 --- a/sprites/UFO-export.png +++ /dev/null diff --git a/sprites/UFO-export.png.import b/sprites/UFO-export.png.import deleted file mode 100644 index 2fcc22a..0000000 --- a/sprites/UFO-export.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/UFO-export.png-25de0e03ca0b44b046ff097da56c4c8b.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/UFO-export.png" -dest_files=[ "res://.import/UFO-export.png-25de0e03ca0b44b046ff097da56c4c8b.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/arrows.png b/sprites/arrows.png Binary files differdeleted file mode 100644 index 3318c05..0000000 --- a/sprites/arrows.png +++ /dev/null diff --git a/sprites/arrows.png.import b/sprites/arrows.png.import deleted file mode 100644 index 06bbef7..0000000 --- a/sprites/arrows.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/arrows.png-b1c3a4ded648549751c70b6336bb41dd.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/arrows.png" -dest_files=[ "res://.import/arrows.png-b1c3a4ded648549751c70b6336bb41dd.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/aseprites/enemylaser.ase b/sprites/aseprites/enemylaser.ase Binary files differdeleted file mode 100644 index d76f0aa..0000000 --- a/sprites/aseprites/enemylaser.ase +++ /dev/null diff --git a/sprites/aseprites/shipspin.aseprite b/sprites/aseprites/shipspin.aseprite Binary files differdeleted file mode 100644 index e874555..0000000 --- a/sprites/aseprites/shipspin.aseprite +++ /dev/null diff --git a/sprites/aseprites/star.ase b/sprites/aseprites/star.ase Binary files differdeleted file mode 100644 index 34d970b..0000000 --- a/sprites/aseprites/star.ase +++ /dev/null diff --git a/sprites/attakbutton.png b/sprites/attakbutton.png Binary files differdeleted file mode 100644 index 264dd61..0000000 --- a/sprites/attakbutton.png +++ /dev/null diff --git a/sprites/attakbutton.png.import b/sprites/attakbutton.png.import deleted file mode 100644 index 2d3a25e..0000000 --- a/sprites/attakbutton.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/attakbutton.png-1e5294f83c0b7adbe439b1db5c72dbe4.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/attakbutton.png" -dest_files=[ "res://.import/attakbutton.png-1e5294f83c0b7adbe439b1db5c72dbe4.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/bigenemylasers.png b/sprites/bigenemylasers.png Binary files differdeleted file mode 100644 index 1c6f727..0000000 --- a/sprites/bigenemylasers.png +++ /dev/null diff --git a/sprites/bigenemylasers.png.import b/sprites/bigenemylasers.png.import deleted file mode 100644 index 8aac13d..0000000 --- a/sprites/bigenemylasers.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/bigenemylasers.png-b0441a2d713d750f0c3a5e63fd6d5453.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/bigenemylasers.png" -dest_files=[ "res://.import/bigenemylasers.png-b0441a2d713d750f0c3a5e63fd6d5453.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/blackandwhitefball-Sheet.png b/sprites/blackandwhitefball-Sheet.png Binary files differdeleted file mode 100644 index 1d6761a..0000000 --- a/sprites/blackandwhitefball-Sheet.png +++ /dev/null diff --git a/sprites/blackandwhitefball-Sheet.png.import b/sprites/blackandwhitefball-Sheet.png.import deleted file mode 100644 index a03a52f..0000000 --- a/sprites/blackandwhitefball-Sheet.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/blackandwhitefball-Sheet.png-08e5e128020cd9cf6cead95a8ca6474c.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/blackandwhitefball-Sheet.png" -dest_files=[ "res://.import/blackandwhitefball-Sheet.png-08e5e128020cd9cf6cead95a8ca6474c.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/blackhoole.png b/sprites/blackhoole.png Binary files differdeleted file mode 100644 index bf0df53..0000000 --- a/sprites/blackhoole.png +++ /dev/null diff --git a/sprites/blackhoole.png.import b/sprites/blackhoole.png.import deleted file mode 100644 index c4238dd..0000000 --- a/sprites/blackhoole.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/blackhoole.png-55fb4d810fef52208a6d856ff10db673.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/blackhoole.png" -dest_files=[ "res://.import/blackhoole.png-55fb4d810fef52208a6d856ff10db673.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/boss2.png b/sprites/boss2.png Binary files differdeleted file mode 100644 index 5301c4f..0000000 --- a/sprites/boss2.png +++ /dev/null diff --git a/sprites/boss2.png.import b/sprites/boss2.png.import deleted file mode 100644 index f5747b1..0000000 --- a/sprites/boss2.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/boss2.png-2f0cc49c9b95bdf2eb501ba7f374d405.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/boss2.png" -dest_files=[ "res://.import/boss2.png-2f0cc49c9b95bdf2eb501ba7f374d405.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/bossfinal.png b/sprites/bossfinal.png Binary files differdeleted file mode 100644 index 07cd59b..0000000 --- a/sprites/bossfinal.png +++ /dev/null diff --git a/sprites/bossfinal.png.import b/sprites/bossfinal.png.import deleted file mode 100644 index e690375..0000000 --- a/sprites/bossfinal.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/bossfinal.png-0d5bd56da1c481f0e5ea229599f670c8.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/bossfinal.png" -dest_files=[ "res://.import/bossfinal.png-0d5bd56da1c481f0e5ea229599f670c8.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/boxchecked.png b/sprites/boxchecked.png Binary files differdeleted file mode 100644 index 1ddfc54..0000000 --- a/sprites/boxchecked.png +++ /dev/null diff --git a/sprites/boxchecked.png.import b/sprites/boxchecked.png.import deleted file mode 100644 index e71d53f..0000000 --- a/sprites/boxchecked.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/boxchecked.png-2bd6744b0657952d32ac6cfc458e9608.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/boxchecked.png" -dest_files=[ "res://.import/boxchecked.png-2bd6744b0657952d32ac6cfc458e9608.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/boxunchecked.png b/sprites/boxunchecked.png Binary files differdeleted file mode 100644 index 0291f4e..0000000 --- a/sprites/boxunchecked.png +++ /dev/null diff --git a/sprites/boxunchecked.png.import b/sprites/boxunchecked.png.import deleted file mode 100644 index 80ae6a8..0000000 --- a/sprites/boxunchecked.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/boxunchecked.png-6b723660cd7f33d892d93c33c83a53de.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/boxunchecked.png" -dest_files=[ "res://.import/boxunchecked.png-6b723660cd7f33d892d93c33c83a53de.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/changegun.png b/sprites/changegun.png Binary files differdeleted file mode 100644 index 2b89ade..0000000 --- a/sprites/changegun.png +++ /dev/null diff --git a/sprites/changegun.png.import b/sprites/changegun.png.import deleted file mode 100644 index 2358e91..0000000 --- a/sprites/changegun.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/changegun.png-c6384e86cdd8ffc830330fc2868a3c09.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/changegun.png" -dest_files=[ "res://.import/changegun.png-c6384e86cdd8ffc830330fc2868a3c09.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/cursor.png b/sprites/cursor.png Binary files differdeleted file mode 100644 index 6f51cc5..0000000 --- a/sprites/cursor.png +++ /dev/null diff --git a/sprites/cursor.png.import b/sprites/cursor.png.import deleted file mode 100644 index 8fbb3d2..0000000 --- a/sprites/cursor.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/cursor.png-ab659432fe95e81e8963a978cc7193a5.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/cursor.png" -dest_files=[ "res://.import/cursor.png-ab659432fe95e81e8963a978cc7193a5.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/drone_base.png b/sprites/drone_base.png Binary files differdeleted file mode 100644 index 2f1fb49..0000000 --- a/sprites/drone_base.png +++ /dev/null diff --git a/sprites/drone_base.png.import b/sprites/drone_base.png.import deleted file mode 100644 index 2d8c894..0000000 --- a/sprites/drone_base.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/drone_base.png-bd0c290d7350f2dc9ea19c1f0748a838.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/drone_base.png" -dest_files=[ "res://.import/drone_base.png-bd0c290d7350f2dc9ea19c1f0748a838.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/emptyheart.png b/sprites/emptyheart.png Binary files differdeleted file mode 100644 index 2966bfd..0000000 --- a/sprites/emptyheart.png +++ /dev/null diff --git a/sprites/emptyheart.png.import b/sprites/emptyheart.png.import deleted file mode 100644 index 2ff77d3..0000000 --- a/sprites/emptyheart.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/emptyheart.png-4c570cbae97ad77ee372005e27288e38.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/emptyheart.png" -dest_files=[ "res://.import/emptyheart.png-4c570cbae97ad77ee372005e27288e38.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/enemy.png b/sprites/enemy.png Binary files differdeleted file mode 100644 index e62ed14..0000000 --- a/sprites/enemy.png +++ /dev/null diff --git a/sprites/enemy.png.import b/sprites/enemy.png.import deleted file mode 100644 index 27b5a2a..0000000 --- a/sprites/enemy.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/enemy.png-03f80dfd1208a1b3024d79304d31759f.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/enemy.png" -dest_files=[ "res://.import/enemy.png-03f80dfd1208a1b3024d79304d31759f.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/enemylaser-sheet.png b/sprites/enemylaser-sheet.png Binary files differdeleted file mode 100644 index a054eea..0000000 --- a/sprites/enemylaser-sheet.png +++ /dev/null diff --git a/sprites/enemylaser-sheet.png.import b/sprites/enemylaser-sheet.png.import deleted file mode 100644 index a35eebd..0000000 --- a/sprites/enemylaser-sheet.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/enemylaser-sheet.png-bd9de81a84bcea7c4276a4d6fcd11c5c.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/enemylaser-sheet.png" -dest_files=[ "res://.import/enemylaser-sheet.png-bd9de81a84bcea7c4276a4d6fcd11c5c.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/finaaleenemy.png b/sprites/finaaleenemy.png Binary files differdeleted file mode 100644 index d081534..0000000 --- a/sprites/finaaleenemy.png +++ /dev/null diff --git a/sprites/finaaleenemy.png.import b/sprites/finaaleenemy.png.import deleted file mode 100644 index dbdd18b..0000000 --- a/sprites/finaaleenemy.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/finaaleenemy.png-3914590f015fd8c062e5d5e59b945982.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/finaaleenemy.png" -dest_files=[ "res://.import/finaaleenemy.png-3914590f015fd8c062e5d5e59b945982.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/fullhart.png b/sprites/fullhart.png Binary files differdeleted file mode 100644 index 4699df5..0000000 --- a/sprites/fullhart.png +++ /dev/null diff --git a/sprites/fullhart.png.import b/sprites/fullhart.png.import deleted file mode 100644 index 3cc6137..0000000 --- a/sprites/fullhart.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/fullhart.png-8f24bec2083e4f2c371c31d5cb1b9959.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/fullhart.png" -dest_files=[ "res://.import/fullhart.png-8f24bec2083e4f2c371c31d5cb1b9959.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/glow.png b/sprites/glow.png Binary files differdeleted file mode 100644 index 92d7524..0000000 --- a/sprites/glow.png +++ /dev/null diff --git a/sprites/glow.png.import b/sprites/glow.png.import deleted file mode 100644 index d1bc5dc..0000000 --- a/sprites/glow.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/glow.png-bcf9057dcbc868c06794846f57635757.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/glow.png" -dest_files=[ "res://.import/glow.png-bcf9057dcbc868c06794846f57635757.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/handle.png b/sprites/handle.png Binary files differdeleted file mode 100644 index 00d3af4..0000000 --- a/sprites/handle.png +++ /dev/null diff --git a/sprites/handle.png.import b/sprites/handle.png.import deleted file mode 100644 index 449a2fe..0000000 --- a/sprites/handle.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/handle.png-83e7e65f503b40896ada2cfc7afeaf51.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/handle.png" -dest_files=[ "res://.import/handle.png-83e7e65f503b40896ada2cfc7afeaf51.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/icon.png.import b/sprites/icon.png.import deleted file mode 100644 index 27f3bbc..0000000 --- a/sprites/icon.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/icon.png-82ea131e750a89467e27b5ff9b11ce77.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/icon.png" -dest_files=[ "res://.import/icon.png-82ea131e750a89467e27b5ff9b11ce77.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/inputs.png b/sprites/inputs.png Binary files differdeleted file mode 100644 index fd34ea3..0000000 --- a/sprites/inputs.png +++ /dev/null diff --git a/sprites/inputs.png.import b/sprites/inputs.png.import deleted file mode 100644 index a543c23..0000000 --- a/sprites/inputs.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/inputs.png-9190b397f521c760a8278093462480c6.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/inputs.png" -dest_files=[ "res://.import/inputs.png-9190b397f521c760a8278093462480c6.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/laser.png b/sprites/laser.png Binary files differdeleted file mode 100644 index cdb99bd..0000000 --- a/sprites/laser.png +++ /dev/null diff --git a/sprites/laser.png.import b/sprites/laser.png.import deleted file mode 100644 index 5b00af4..0000000 --- a/sprites/laser.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/laser.png-f4ce210a174cac85145e35b68cb78881.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/laser.png" -dest_files=[ "res://.import/laser.png-f4ce210a174cac85145e35b68cb78881.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/litableenemy.png b/sprites/litableenemy.png Binary files differdeleted file mode 100644 index 30f509b..0000000 --- a/sprites/litableenemy.png +++ /dev/null diff --git a/sprites/litableenemy.png.import b/sprites/litableenemy.png.import deleted file mode 100644 index 69c0ee6..0000000 --- a/sprites/litableenemy.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/litableenemy.png-f94977cdff6af4a87b2e53a9507e36b8.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/litableenemy.png" -dest_files=[ "res://.import/litableenemy.png-f94977cdff6af4a87b2e53a9507e36b8.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/localmultiplayer.png b/sprites/localmultiplayer.png Binary files differdeleted file mode 100644 index ea938dc..0000000 --- a/sprites/localmultiplayer.png +++ /dev/null diff --git a/sprites/localmultiplayer.png.import b/sprites/localmultiplayer.png.import deleted file mode 100644 index 011888e..0000000 --- a/sprites/localmultiplayer.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/localmultiplayer.png-e0d1c5835f92b78be08637e2d4bd1417.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/localmultiplayer.png" -dest_files=[ "res://.import/localmultiplayer.png-e0d1c5835f92b78be08637e2d4bd1417.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/lock.png b/sprites/lock.png Binary files differdeleted file mode 100644 index 32c9eaa..0000000 --- a/sprites/lock.png +++ /dev/null diff --git a/sprites/lock.png.import b/sprites/lock.png.import deleted file mode 100644 index 96852d7..0000000 --- a/sprites/lock.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/lock.png-3d7affd92f148181b7af83f7cdbe68b8.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/lock.png" -dest_files=[ "res://.import/lock.png-3d7affd92f148181b7af83f7cdbe68b8.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/planet.png b/sprites/planet.png Binary files differdeleted file mode 100644 index 23c8ebf..0000000 --- a/sprites/planet.png +++ /dev/null diff --git a/sprites/planet.png.import b/sprites/planet.png.import deleted file mode 100644 index 540c57a..0000000 --- a/sprites/planet.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/planet.png-6a8dbdae4fae92f9943e4dadb3ddb560.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/planet.png" -dest_files=[ "res://.import/planet.png-6a8dbdae4fae92f9943e4dadb3ddb560.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/scroll.png b/sprites/scroll.png Binary files differdeleted file mode 100644 index 0fe56be..0000000 --- a/sprites/scroll.png +++ /dev/null diff --git a/sprites/scroll.png.import b/sprites/scroll.png.import deleted file mode 100644 index 451878a..0000000 --- a/sprites/scroll.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/scroll.png-144fd1f917f813d32f69a6536159b84b.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/scroll.png" -dest_files=[ "res://.import/scroll.png-144fd1f917f813d32f69a6536159b84b.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/scrollhighlighted.png b/sprites/scrollhighlighted.png Binary files differdeleted file mode 100644 index fe2dddc..0000000 --- a/sprites/scrollhighlighted.png +++ /dev/null diff --git a/sprites/scrollhighlighted.png.import b/sprites/scrollhighlighted.png.import deleted file mode 100644 index 7c08949..0000000 --- a/sprites/scrollhighlighted.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/scrollhighlighted.png-beab887a264a62245ec30f7740960e1a.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/scrollhighlighted.png" -dest_files=[ "res://.import/scrollhighlighted.png-beab887a264a62245ec30f7740960e1a.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/ship.png b/sprites/ship.png Binary files differdeleted file mode 100644 index 089df60..0000000 --- a/sprites/ship.png +++ /dev/null diff --git a/sprites/ship.png.import b/sprites/ship.png.import deleted file mode 100644 index 45976bf..0000000 --- a/sprites/ship.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/ship.png-4d5e64b785005468aa74f7ca14df1341.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/ship.png" -dest_files=[ "res://.import/ship.png-4d5e64b785005468aa74f7ca14df1341.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/smallparticle.png b/sprites/smallparticle.png Binary files differdeleted file mode 100644 index b5900cd..0000000 --- a/sprites/smallparticle.png +++ /dev/null diff --git a/sprites/smallparticle.png.import b/sprites/smallparticle.png.import deleted file mode 100644 index fcf94d0..0000000 --- a/sprites/smallparticle.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/smallparticle.png-89307b418d826f6e8d01c7bdf25683ec.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/smallparticle.png" -dest_files=[ "res://.import/smallparticle.png-89307b418d826f6e8d01c7bdf25683ec.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/split.png b/sprites/split.png Binary files differdeleted file mode 100644 index 99853a2..0000000 --- a/sprites/split.png +++ /dev/null diff --git a/sprites/split.png.import b/sprites/split.png.import deleted file mode 100644 index 45c34b1..0000000 --- a/sprites/split.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/split.png-6a39e8e1f7d76edc03b9e7b061f16fbf.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/split.png" -dest_files=[ "res://.import/split.png-6a39e8e1f7d76edc03b9e7b061f16fbf.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/spot.png b/sprites/spot.png Binary files differdeleted file mode 100644 index c2b3fa9..0000000 --- a/sprites/spot.png +++ /dev/null diff --git a/sprites/spot.png.import b/sprites/spot.png.import deleted file mode 100644 index 60712bc..0000000 --- a/sprites/spot.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/spot.png-18511fae98530e22feedc606f2824924.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/spot.png" -dest_files=[ "res://.import/spot.png-18511fae98530e22feedc606f2824924.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/squid.png b/sprites/squid.png Binary files differdeleted file mode 100644 index b4234e5..0000000 --- a/sprites/squid.png +++ /dev/null diff --git a/sprites/squid.png.import b/sprites/squid.png.import deleted file mode 100644 index 9720843..0000000 --- a/sprites/squid.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/squid.png-6edc593251b96bade5e011ca7a52bf79.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/squid.png" -dest_files=[ "res://.import/squid.png-6edc593251b96bade5e011ca7a52bf79.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=1 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/star.png b/sprites/star.png Binary files differdeleted file mode 100644 index d902017..0000000 --- a/sprites/star.png +++ /dev/null diff --git a/sprites/star.png.import b/sprites/star.png.import deleted file mode 100644 index cb96557..0000000 --- a/sprites/star.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/star.png-b168e13ae1f9d03011573f475e49f2fb.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/star.png" -dest_files=[ "res://.import/star.png-b168e13ae1f9d03011573f475e49f2fb.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/start.png b/sprites/start.png Binary files differdeleted file mode 100644 index 930080e..0000000 --- a/sprites/start.png +++ /dev/null diff --git a/sprites/start.png.import b/sprites/start.png.import deleted file mode 100644 index bcc018b..0000000 --- a/sprites/start.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/start.png-2ced13661a0339f8c5d524a89b029731.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/start.png" -dest_files=[ "res://.import/start.png-2ced13661a0339f8c5d524a89b029731.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/stop-2.png b/sprites/stop-2.png Binary files differdeleted file mode 100644 index b5e6f66..0000000 --- a/sprites/stop-2.png +++ /dev/null diff --git a/sprites/stop-2.png.import b/sprites/stop-2.png.import deleted file mode 100644 index 25cfeae..0000000 --- a/sprites/stop-2.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/stop-2.png-073a576d977cf7eea27d2d5ef902214d.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/stop-2.png" -dest_files=[ "res://.import/stop-2.png-073a576d977cf7eea27d2d5ef902214d.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/stop-2rotated.png b/sprites/stop-2rotated.png Binary files differdeleted file mode 100644 index 935ba3e..0000000 --- a/sprites/stop-2rotated.png +++ /dev/null diff --git a/sprites/stop-2rotated.png.import b/sprites/stop-2rotated.png.import deleted file mode 100644 index 1b03f21..0000000 --- a/sprites/stop-2rotated.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/stop-2rotated.png-62372a671cb7bd5105356093c5345c71.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/stop-2rotated.png" -dest_files=[ "res://.import/stop-2rotated.png-62372a671cb7bd5105356093c5345c71.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/stop.png b/sprites/stop.png Binary files differdeleted file mode 100644 index 6e27800..0000000 --- a/sprites/stop.png +++ /dev/null diff --git a/sprites/stop.png.import b/sprites/stop.png.import deleted file mode 100644 index 2b570c7..0000000 --- a/sprites/stop.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/stop.png-35629ae652483aa7f0d7e4c6de14434f.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/stop.png" -dest_files=[ "res://.import/stop.png-35629ae652483aa7f0d7e4c6de14434f.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/stoprotated.png b/sprites/stoprotated.png Binary files differdeleted file mode 100644 index 9fba754..0000000 --- a/sprites/stoprotated.png +++ /dev/null diff --git a/sprites/stoprotated.png.import b/sprites/stoprotated.png.import deleted file mode 100644 index d4a047f..0000000 --- a/sprites/stoprotated.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/stoprotated.png-3aa48c3d65249dde550f820e0cf71c6f.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/stoprotated.png" -dest_files=[ "res://.import/stoprotated.png-3aa48c3d65249dde550f820e0cf71c6f.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/touchbg.png b/sprites/touchbg.png Binary files differdeleted file mode 100644 index 18e29ab..0000000 --- a/sprites/touchbg.png +++ /dev/null diff --git a/sprites/touchbg.png.import b/sprites/touchbg.png.import deleted file mode 100644 index 99136ef..0000000 --- a/sprites/touchbg.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/touchbg.png-63355816cf232acd398781f30cf347b9.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/touchbg.png" -dest_files=[ "res://.import/touchbg.png-63355816cf232acd398781f30cf347b9.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/transition_left.png b/sprites/transition_left.png Binary files differdeleted file mode 100644 index 6aad0f9..0000000 --- a/sprites/transition_left.png +++ /dev/null diff --git a/sprites/transition_left.png.import b/sprites/transition_left.png.import deleted file mode 100644 index 3d0e616..0000000 --- a/sprites/transition_left.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/transition_left.png-20d359cd1456f6c8daaf674ccde9220b.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/transition_left.png" -dest_files=[ "res://.import/transition_left.png-20d359cd1456f6c8daaf674ccde9220b.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/transition_right.png b/sprites/transition_right.png Binary files differdeleted file mode 100644 index 4e0c130..0000000 --- a/sprites/transition_right.png +++ /dev/null diff --git a/sprites/transition_right.png.import b/sprites/transition_right.png.import deleted file mode 100644 index a0811f5..0000000 --- a/sprites/transition_right.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/transition_right.png-4233bdb6d98451fb921d3d4c3bfaca4a.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/transition_right.png" -dest_files=[ "res://.import/transition_right.png-4233bdb6d98451fb921d3d4c3bfaca4a.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/sprites/turret.png b/sprites/turret.png Binary files differdeleted file mode 100644 index b1644cd..0000000 --- a/sprites/turret.png +++ /dev/null diff --git a/sprites/turret.png.import b/sprites/turret.png.import deleted file mode 100644 index 5cc6dbb..0000000 --- a/sprites/turret.png.import +++ /dev/null @@ -1,35 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/turret.png-40695d9cca6c50c87204953ec994d732.stex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://sprites/turret.png" -dest_files=[ "res://.import/turret.png-40695d9cca6c50c87204953ec994d732.stex" ] - -[params] - -compress/mode=0 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=0 -flags/filter=false -flags/mipmaps=false -flags/anisotropic=false -flags/srgb=2 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 diff --git a/ui/buttontheme.tres b/ui/buttontheme.tres deleted file mode 100644 index 712964e..0000000 --- a/ui/buttontheme.tres +++ /dev/null @@ -1,113 +0,0 @@ -[gd_resource type="Theme" load_steps=20 format=2] - -[ext_resource path="res://fonts/04b-19.tres" type="DynamicFont" id=1] -[ext_resource path="res://ui/new_styleboxflat.tres" type="StyleBox" id=2] -[ext_resource path="res://sprites/arrows.png" type="Texture" id=3] -[ext_resource path="res://sprites/boxunchecked.png" type="Texture" id=4] -[ext_resource path="res://sprites/boxchecked.png" type="Texture" id=5] -[ext_resource path="res://sprites/stop-2rotated.png" type="Texture" id=6] -[ext_resource path="res://sprites/stoprotated.png" type="Texture" id=7] -[ext_resource path="res://sprites/scroll.png" type="Texture" id=8] -[ext_resource path="res://sprites/scrollhighlighted.png" type="Texture" id=9] - -[sub_resource type="StyleBoxFlat" id=6] -bg_color = Color( 0.0823529, 0.0823529, 0.0745098, 0.588235 ) -corner_radius_top_left = 1 -corner_radius_top_right = 1 -corner_radius_bottom_right = 1 -corner_radius_bottom_left = 1 -corner_detail = 3 -expand_margin_left = 4.0 -expand_margin_right = 4.0 -expand_margin_top = 4.0 -expand_margin_bottom = 4.0 -anti_aliasing = false - -[sub_resource type="StyleBoxEmpty" id=2] - -[sub_resource type="StyleBoxEmpty" id=5] - -[sub_resource type="StyleBoxEmpty" id=1] - -[sub_resource type="StyleBoxEmpty" id=3] - -[sub_resource type="StyleBoxFlat" id=4] -bg_color = Color( 0, 0, 0, 0.588235 ) -corner_radius_top_left = 1 -corner_radius_top_right = 1 -corner_radius_bottom_right = 1 -corner_radius_bottom_left = 1 -expand_margin_left = 4.0 -expand_margin_right = 4.0 -expand_margin_top = 4.0 -expand_margin_bottom = 4.0 -anti_aliasing = false - -[sub_resource type="StyleBoxTexture" id=7] -texture = ExtResource( 7 ) -region_rect = Rect2( 0, 0, 16, 16 ) - -[sub_resource type="StyleBoxTexture" id=8] -texture = ExtResource( 6 ) -region_rect = Rect2( 0, 0, 16, 16 ) - -[sub_resource type="StyleBoxTexture" id=9] -content_margin_top = 0.0 -content_margin_bottom = 0.0 -texture = ExtResource( 8 ) -region_rect = Rect2( 0, 0, 16, 16 ) - -[sub_resource type="StyleBoxTexture" id=10] -texture = ExtResource( 9 ) -region_rect = Rect2( 0, 0, 16, 16 ) - -[resource] -Button/fonts/font = ExtResource( 1 ) -Button/styles/disabled = SubResource( 6 ) -Button/styles/focus = ExtResource( 2 ) -Button/styles/hover = SubResource( 2 ) -Button/styles/normal = SubResource( 2 ) -Button/styles/pressed = SubResource( 2 ) -CheckBox/constants/check_vadjust = 2 -CheckBox/constants/hseparation = 0 -CheckBox/icons/checked = ExtResource( 5 ) -CheckBox/icons/unchecked = ExtResource( 4 ) -CheckBox/styles/focus = ExtResource( 2 ) -Label/colors/font_color_shadow = Color( 0, 0, 0, 0.345098 ) -Label/fonts/font = ExtResource( 1 ) -Label/styles/normal = SubResource( 5 ) -OptionButton/colors/font_color = Color( 0.88, 0.88, 0.88, 1 ) -OptionButton/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 ) -OptionButton/colors/font_color_focus = Color( 0.94, 0.94, 0.94, 1 ) -OptionButton/colors/font_color_hover = Color( 0.94, 0.94, 0.94, 1 ) -OptionButton/colors/font_color_pressed = Color( 1, 1, 1, 1 ) -OptionButton/constants/arrow_margin = 2 -OptionButton/constants/hseparation = 2 -OptionButton/fonts/font = ExtResource( 1 ) -OptionButton/icons/arrow = ExtResource( 3 ) -OptionButton/styles/disabled = SubResource( 1 ) -OptionButton/styles/focus = ExtResource( 2 ) -OptionButton/styles/hover = SubResource( 1 ) -OptionButton/styles/normal = SubResource( 1 ) -OptionButton/styles/pressed = SubResource( 1 ) -PopupMenu/fonts/font = ExtResource( 1 ) -PopupMenu/icons/radio_checked = ExtResource( 5 ) -PopupMenu/icons/radio_unchecked = ExtResource( 4 ) -PopupMenu/styles/hover = ExtResource( 2 ) -PopupMenu/styles/labeled_separator_left = SubResource( 3 ) -PopupMenu/styles/labeled_separator_right = SubResource( 3 ) -PopupMenu/styles/panel = SubResource( 4 ) -PopupMenu/styles/panel_disabled = SubResource( 3 ) -PopupMenu/styles/separator = SubResource( 3 ) -ScrollContainer/styles/bg = null -VScrollBar/icons/decrement = null -VScrollBar/icons/decrement_highlight = null -VScrollBar/icons/decrement_pressed = null -VScrollBar/icons/increment = null -VScrollBar/icons/increment_highlight = null -VScrollBar/icons/increment_pressed = null -VScrollBar/styles/grabber = SubResource( 7 ) -VScrollBar/styles/grabber_highlight = SubResource( 8 ) -VScrollBar/styles/grabber_pressed = SubResource( 8 ) -VScrollBar/styles/scroll = SubResource( 9 ) -VScrollBar/styles/scroll_focus = SubResource( 10 ) diff --git a/ui/lock.tres b/ui/lock.tres deleted file mode 100644 index a115a9c..0000000 --- a/ui/lock.tres +++ /dev/null @@ -1,7 +0,0 @@ -[gd_resource type="StyleBoxTexture" load_steps=2 format=2] - -[ext_resource path="res://sprites/lock.png" type="Texture" id=1] - -[resource] -texture = ExtResource( 1 ) -region_rect = Rect2( 0, 0, 18, 24 ) diff --git a/ui/new_styleboxflat.tres b/ui/new_styleboxflat.tres deleted file mode 100644 index 02871b3..0000000 --- a/ui/new_styleboxflat.tres +++ /dev/null @@ -1,13 +0,0 @@ -[gd_resource type="StyleBoxFlat" format=2] - -[resource] -bg_color = Color( 1, 0.85098, 0.054902, 0.588235 ) -corner_radius_top_left = 1 -corner_radius_top_right = 1 -corner_radius_bottom_right = 1 -corner_radius_bottom_left = 1 -expand_margin_left = 4.0 -expand_margin_right = 4.0 -expand_margin_top = 4.0 -expand_margin_bottom = 4.0 -anti_aliasing = false diff --git a/ui/scenes/GameOverScreen.tscn b/ui/scenes/GameOverScreen.tscn deleted file mode 100644 index 61b206e..0000000 --- a/ui/scenes/GameOverScreen.tscn +++ /dev/null @@ -1,2108 +0,0 @@ -[gd_scene load_steps=411 format=2] - -[ext_resource path="res://fonts/fonty.tres" type="DynamicFont" id=1] -[ext_resource path="res://effects/Stars.tscn" type="PackedScene" id=2] -[ext_resource path="res://ui/scripts/GameOverScreen.gd" type="Script" id=3] -[ext_resource path="res://fonts/(16)04B_30__.TTF" type="DynamicFontData" id=4] -[ext_resource path="res://sprites/changegun.png" type="Texture" id=5] -[ext_resource path="res://sprites/blackhoole.png" type="Texture" id=6] -[ext_resource path="res://fonts/04b-19.tres" type="DynamicFont" id=7] - -[sub_resource type="AtlasTexture" id=54] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 0, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=55] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 200, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=56] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 400, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=57] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 600, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=58] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 800, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=59] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1000, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=60] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1200, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=61] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1400, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=62] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1600, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=63] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1800, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=64] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2000, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=65] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2200, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=66] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2400, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=67] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2600, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=68] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2800, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=69] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3000, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=70] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3200, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=71] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3400, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=72] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3600, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=73] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3800, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=74] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 0, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=75] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 200, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=76] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 400, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=77] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 600, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=78] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 800, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=79] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1000, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=80] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1200, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=81] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1400, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=82] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1600, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=83] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1800, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=84] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2000, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=85] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2200, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=86] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2400, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=87] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2600, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=88] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2800, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=89] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3000, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=90] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3200, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=91] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3400, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=92] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3600, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=93] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3800, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=94] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 0, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=95] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 200, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=96] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 400, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=97] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 600, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=98] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 800, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=99] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1000, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=100] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1200, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=101] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1400, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=102] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1600, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=103] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1800, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=104] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2000, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=105] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2200, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=106] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2400, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=107] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2600, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=108] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2800, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=109] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3000, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=110] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3200, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=111] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3400, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=112] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3600, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=113] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3800, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=114] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 0, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=115] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 200, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=116] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 400, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=117] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 600, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=118] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 800, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=119] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1000, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=120] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1200, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=121] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1400, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=122] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1600, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=123] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1800, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=124] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2000, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=125] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2200, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=126] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2400, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=127] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2600, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=128] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2800, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=129] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3000, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=130] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3200, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=131] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3400, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=132] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3600, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=133] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3800, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=134] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 0, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=135] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 200, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=136] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 400, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=137] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 600, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=138] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 800, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=139] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1000, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=140] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1200, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=141] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1400, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=142] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1600, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=143] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1800, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=144] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2000, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=145] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2200, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=146] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2400, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=147] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2600, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=148] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2800, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=149] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3000, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=150] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3200, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=151] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3400, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=152] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3600, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=153] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3800, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=154] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 0, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=155] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 200, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=156] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 400, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=157] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 600, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=158] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 800, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=159] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1000, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=160] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1200, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=161] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1400, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=162] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1600, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=163] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1800, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=164] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2000, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=165] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2200, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=166] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2400, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=167] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2600, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=168] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2800, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=169] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3000, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=170] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3200, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=171] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3400, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=172] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3600, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=173] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3800, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=174] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 0, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=175] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 200, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=176] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 400, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=177] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 600, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=178] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 800, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=179] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1000, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=180] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1200, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=181] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1400, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=182] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1600, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=183] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1800, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=184] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2000, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=185] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2200, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=186] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2400, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=187] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2600, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=188] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2800, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=189] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3000, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=190] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3200, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=191] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3400, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=192] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3600, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=193] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3800, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=194] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 0, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=195] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 200, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=196] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 400, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=197] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 600, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=198] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 800, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=199] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1000, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=200] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1200, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=201] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1400, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=202] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1600, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=203] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1800, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=204] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2000, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=205] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2200, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=206] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2400, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=207] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2600, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=208] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2800, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=209] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3000, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=210] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3200, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=211] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3400, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=212] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3600, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=213] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3800, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=214] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 0, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=215] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 200, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=216] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 400, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=217] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 600, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=218] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 800, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=219] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1000, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=220] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1200, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=221] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1400, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=222] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1600, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=223] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1800, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=224] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2000, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=225] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2200, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=226] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2400, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=227] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2600, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=228] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2800, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=229] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3000, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=230] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3200, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=231] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3400, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=232] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3600, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=233] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3800, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=234] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 0, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=235] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 200, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=236] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 400, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=237] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 600, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=238] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 800, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=239] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1000, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=240] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1200, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=241] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1400, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=242] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1600, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=243] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1800, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=244] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2000, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=245] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2200, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=246] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2400, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=247] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2600, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=248] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2800, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=249] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3000, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=250] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3200, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=251] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3400, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=252] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3600, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=253] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3800, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=254] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 0, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=255] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 200, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=256] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 400, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=257] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 600, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=258] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 800, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=259] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1000, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=260] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1200, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=261] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1400, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=262] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1600, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=263] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1800, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=264] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2000, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=265] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2200, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=266] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2400, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=267] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2600, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=268] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2800, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=269] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3000, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=270] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3200, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=271] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3400, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=272] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3600, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=273] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3800, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=274] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 0, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=275] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 200, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=276] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 400, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=277] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 600, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=278] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 800, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=279] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1000, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=280] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1200, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=281] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1400, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=282] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1600, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=283] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1800, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=284] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2000, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=285] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2200, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=286] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2400, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=287] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2600, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=288] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2800, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=289] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3000, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=290] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3200, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=291] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3400, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=292] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3600, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=293] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3800, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=294] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 0, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=295] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 200, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=296] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 400, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=297] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 600, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=298] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 800, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=299] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1000, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=300] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1200, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=301] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1400, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=302] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1600, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=303] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1800, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=304] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2000, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=305] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2200, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=306] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2400, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=307] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2600, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=308] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2800, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=309] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3000, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=310] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3200, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=311] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3400, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=312] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3600, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=313] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3800, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=314] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 0, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=315] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 200, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=316] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 400, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=317] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 600, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=318] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 800, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=319] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1000, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=320] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1200, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=321] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1400, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=322] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1600, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=323] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1800, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=324] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2000, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=325] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2200, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=326] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2400, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=327] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2600, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=328] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2800, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=329] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3000, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=330] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3200, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=331] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3400, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=332] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3600, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=333] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3800, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=334] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 0, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=335] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 200, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=336] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 400, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=337] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 600, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=338] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 800, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=339] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1000, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=340] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1200, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=341] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1400, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=342] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1600, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=343] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1800, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=344] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2000, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=345] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2200, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=346] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2400, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=347] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2600, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=348] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2800, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=349] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3000, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=350] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3200, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=351] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3400, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=352] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3600, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=353] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3800, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=354] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 0, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=355] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 200, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=356] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 400, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=357] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 600, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=358] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 800, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=359] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1000, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=360] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1200, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=361] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1400, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=362] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1600, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=363] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1800, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=364] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2000, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=365] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2200, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=366] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2400, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=367] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2600, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=368] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2800, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=369] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3000, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=370] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3200, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=371] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3400, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=372] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3600, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=373] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3800, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=374] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 0, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=375] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 200, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=376] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 400, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=377] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 600, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=378] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 800, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=379] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1000, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=380] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1200, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=381] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1400, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=382] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1600, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=383] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1800, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=384] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2000, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=385] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2200, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=386] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2400, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=387] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2600, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=388] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2800, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=389] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3000, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=390] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3200, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=391] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3400, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=392] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3600, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=393] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3800, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=394] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 0, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=395] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 200, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=396] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 400, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=397] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 600, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=398] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 800, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=399] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1000, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=400] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1200, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=401] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1400, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=402] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1600, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=403] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1800, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=404] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2000, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=405] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2200, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=406] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2400, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=407] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2600, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=408] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2800, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=409] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3000, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=410] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3200, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=411] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3400, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=412] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3600, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=413] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3800, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=414] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 0, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=415] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 200, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=416] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 400, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=417] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 600, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=418] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 800, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=419] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1000, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=420] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1200, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=421] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1400, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=422] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1600, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=423] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1800, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=424] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2000, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=425] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2200, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=426] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2400, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=427] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2600, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=428] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2800, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=429] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3000, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=430] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3200, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=431] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3400, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=432] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3600, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=433] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3800, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=434] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 0, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=435] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 200, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=436] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 400, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=437] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 600, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=438] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 800, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=439] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1000, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=440] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1200, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=441] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1400, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=442] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1600, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=443] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 1800, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=444] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2000, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=445] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2200, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=446] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2400, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=447] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2600, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=448] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 2800, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=449] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3000, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=450] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3200, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=451] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3400, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=452] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3600, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=453] -flags = 2 -atlas = ExtResource( 6 ) -region = Rect2( 3800, 3800, 200, 200 ) - -[sub_resource type="SpriteFrames" id=53] -animations = [ { -"frames": [ SubResource( 54 ), SubResource( 55 ), SubResource( 56 ), SubResource( 57 ), SubResource( 58 ), SubResource( 59 ), SubResource( 60 ), SubResource( 61 ), SubResource( 62 ), SubResource( 63 ), SubResource( 64 ), SubResource( 65 ), SubResource( 66 ), SubResource( 67 ), SubResource( 68 ), SubResource( 69 ), SubResource( 70 ), SubResource( 71 ), SubResource( 72 ), SubResource( 73 ), SubResource( 74 ), SubResource( 75 ), SubResource( 76 ), SubResource( 77 ), SubResource( 78 ), SubResource( 79 ), SubResource( 80 ), SubResource( 81 ), SubResource( 82 ), SubResource( 83 ), SubResource( 84 ), SubResource( 85 ), SubResource( 86 ), SubResource( 87 ), SubResource( 88 ), SubResource( 89 ), SubResource( 90 ), SubResource( 91 ), SubResource( 92 ), SubResource( 93 ), SubResource( 94 ), SubResource( 95 ), SubResource( 96 ), SubResource( 97 ), SubResource( 98 ), SubResource( 99 ), SubResource( 100 ), SubResource( 101 ), SubResource( 102 ), SubResource( 103 ), SubResource( 104 ), SubResource( 105 ), SubResource( 106 ), SubResource( 107 ), SubResource( 108 ), SubResource( 109 ), SubResource( 110 ), SubResource( 111 ), SubResource( 112 ), SubResource( 113 ), SubResource( 114 ), SubResource( 115 ), SubResource( 116 ), SubResource( 117 ), SubResource( 118 ), SubResource( 119 ), SubResource( 120 ), SubResource( 121 ), SubResource( 122 ), SubResource( 123 ), SubResource( 124 ), SubResource( 125 ), SubResource( 126 ), SubResource( 127 ), SubResource( 128 ), SubResource( 129 ), SubResource( 130 ), SubResource( 131 ), SubResource( 132 ), SubResource( 133 ), SubResource( 134 ), SubResource( 135 ), SubResource( 136 ), SubResource( 137 ), SubResource( 138 ), SubResource( 139 ), SubResource( 140 ), SubResource( 141 ), SubResource( 142 ), SubResource( 143 ), SubResource( 144 ), SubResource( 145 ), SubResource( 146 ), SubResource( 147 ), SubResource( 148 ), SubResource( 149 ), SubResource( 150 ), SubResource( 151 ), SubResource( 152 ), SubResource( 153 ), SubResource( 154 ), SubResource( 155 ), SubResource( 156 ), SubResource( 157 ), SubResource( 158 ), SubResource( 159 ), SubResource( 160 ), SubResource( 161 ), SubResource( 162 ), SubResource( 163 ), SubResource( 164 ), SubResource( 165 ), SubResource( 166 ), SubResource( 167 ), SubResource( 168 ), SubResource( 169 ), SubResource( 170 ), SubResource( 171 ), SubResource( 172 ), SubResource( 173 ), SubResource( 174 ), SubResource( 175 ), SubResource( 176 ), SubResource( 177 ), SubResource( 178 ), SubResource( 179 ), SubResource( 180 ), SubResource( 181 ), SubResource( 182 ), SubResource( 183 ), SubResource( 184 ), SubResource( 185 ), SubResource( 186 ), SubResource( 187 ), SubResource( 188 ), SubResource( 189 ), SubResource( 190 ), SubResource( 191 ), SubResource( 192 ), SubResource( 193 ), SubResource( 194 ), SubResource( 195 ), SubResource( 196 ), SubResource( 197 ), SubResource( 198 ), SubResource( 199 ), SubResource( 200 ), SubResource( 201 ), SubResource( 202 ), SubResource( 203 ), SubResource( 204 ), SubResource( 205 ), SubResource( 206 ), SubResource( 207 ), SubResource( 208 ), SubResource( 209 ), SubResource( 210 ), SubResource( 211 ), SubResource( 212 ), SubResource( 213 ), SubResource( 214 ), SubResource( 215 ), SubResource( 216 ), SubResource( 217 ), SubResource( 218 ), SubResource( 219 ), SubResource( 220 ), SubResource( 221 ), SubResource( 222 ), SubResource( 223 ), SubResource( 224 ), SubResource( 225 ), SubResource( 226 ), SubResource( 227 ), SubResource( 228 ), SubResource( 229 ), SubResource( 230 ), SubResource( 231 ), SubResource( 232 ), SubResource( 233 ), SubResource( 234 ), SubResource( 235 ), SubResource( 236 ), SubResource( 237 ), SubResource( 238 ), SubResource( 239 ), SubResource( 240 ), SubResource( 241 ), SubResource( 242 ), SubResource( 243 ), SubResource( 244 ), SubResource( 245 ), SubResource( 246 ), SubResource( 247 ), SubResource( 248 ), SubResource( 249 ), SubResource( 250 ), SubResource( 251 ), SubResource( 252 ), SubResource( 253 ), SubResource( 254 ), SubResource( 255 ), SubResource( 256 ), SubResource( 257 ), SubResource( 258 ), SubResource( 259 ), SubResource( 260 ), SubResource( 261 ), SubResource( 262 ), SubResource( 263 ), SubResource( 264 ), SubResource( 265 ), SubResource( 266 ), SubResource( 267 ), SubResource( 268 ), SubResource( 269 ), SubResource( 270 ), SubResource( 271 ), SubResource( 272 ), SubResource( 273 ), SubResource( 274 ), SubResource( 275 ), SubResource( 276 ), SubResource( 277 ), SubResource( 278 ), SubResource( 279 ), SubResource( 280 ), SubResource( 281 ), SubResource( 282 ), SubResource( 283 ), SubResource( 284 ), SubResource( 285 ), SubResource( 286 ), SubResource( 287 ), SubResource( 288 ), SubResource( 289 ), SubResource( 290 ), SubResource( 291 ), SubResource( 292 ), SubResource( 293 ), SubResource( 294 ), SubResource( 295 ), SubResource( 296 ), SubResource( 297 ), SubResource( 298 ), SubResource( 299 ), SubResource( 300 ), SubResource( 301 ), SubResource( 302 ), SubResource( 303 ), SubResource( 304 ), SubResource( 305 ), SubResource( 306 ), SubResource( 307 ), SubResource( 308 ), SubResource( 309 ), SubResource( 310 ), SubResource( 311 ), SubResource( 312 ), SubResource( 313 ), SubResource( 314 ), SubResource( 315 ), SubResource( 316 ), SubResource( 317 ), SubResource( 318 ), SubResource( 319 ), SubResource( 320 ), SubResource( 321 ), SubResource( 322 ), SubResource( 323 ), SubResource( 324 ), SubResource( 325 ), SubResource( 326 ), SubResource( 327 ), SubResource( 328 ), SubResource( 329 ), SubResource( 330 ), SubResource( 331 ), SubResource( 332 ), SubResource( 333 ), SubResource( 334 ), SubResource( 335 ), SubResource( 336 ), SubResource( 337 ), SubResource( 338 ), SubResource( 339 ), SubResource( 340 ), SubResource( 341 ), SubResource( 342 ), SubResource( 343 ), SubResource( 344 ), SubResource( 345 ), SubResource( 346 ), SubResource( 347 ), SubResource( 348 ), SubResource( 349 ), SubResource( 350 ), SubResource( 351 ), SubResource( 352 ), SubResource( 353 ), SubResource( 354 ), SubResource( 355 ), SubResource( 356 ), SubResource( 357 ), SubResource( 358 ), SubResource( 359 ), SubResource( 360 ), SubResource( 361 ), SubResource( 362 ), SubResource( 363 ), SubResource( 364 ), SubResource( 365 ), SubResource( 366 ), SubResource( 367 ), SubResource( 368 ), SubResource( 369 ), SubResource( 370 ), SubResource( 371 ), SubResource( 372 ), SubResource( 373 ), SubResource( 374 ), SubResource( 375 ), SubResource( 376 ), SubResource( 377 ), SubResource( 378 ), SubResource( 379 ), SubResource( 380 ), SubResource( 381 ), SubResource( 382 ), SubResource( 383 ), SubResource( 384 ), SubResource( 385 ), SubResource( 386 ), SubResource( 387 ), SubResource( 388 ), SubResource( 389 ), SubResource( 390 ), SubResource( 391 ), SubResource( 392 ), SubResource( 393 ), SubResource( 394 ), SubResource( 395 ), SubResource( 396 ), SubResource( 397 ), SubResource( 398 ), SubResource( 399 ), SubResource( 400 ), SubResource( 401 ), SubResource( 402 ), SubResource( 403 ), SubResource( 404 ), SubResource( 405 ), SubResource( 406 ), SubResource( 407 ), SubResource( 408 ), SubResource( 409 ), SubResource( 410 ), SubResource( 411 ), SubResource( 412 ), SubResource( 413 ), SubResource( 414 ), SubResource( 415 ), SubResource( 416 ), SubResource( 417 ), SubResource( 418 ), SubResource( 419 ), SubResource( 420 ), SubResource( 421 ), SubResource( 422 ), SubResource( 423 ), SubResource( 424 ), SubResource( 425 ), SubResource( 426 ), SubResource( 427 ), SubResource( 428 ), SubResource( 429 ), SubResource( 430 ), SubResource( 431 ), SubResource( 432 ), SubResource( 433 ), SubResource( 434 ), SubResource( 435 ), SubResource( 436 ), SubResource( 437 ), SubResource( 438 ), SubResource( 439 ), SubResource( 440 ), SubResource( 441 ), SubResource( 442 ), SubResource( 443 ), SubResource( 444 ), SubResource( 445 ), SubResource( 446 ), SubResource( 447 ), SubResource( 448 ), SubResource( 449 ), SubResource( 450 ), SubResource( 451 ), SubResource( 452 ), SubResource( 453 ) ], -"loop": true, -"name": "hole", -"speed": 35.0 -} ] - -[sub_resource type="DynamicFont" id=1] -size = 34 -font_data = ExtResource( 4 ) - -[sub_resource type="CircleShape2D" id=2] -radius = 30.0 - -[node name="GameOverScreen" type="Node"] -script = ExtResource( 3 ) -hole = true - -[node name="Background" type="ColorRect" parent="."] -anchor_right = 1.0 -anchor_bottom = 1.0 -color = Color( 0, 0, 0, 1 ) -__meta__ = { -"_edit_lock_": true, -"_edit_use_anchors_": false -} - -[node name="Stars" parent="." instance=ExtResource( 2 )] - -[node name="AnimatedSprite" type="AnimatedSprite" parent="."] -position = Vector2( 296, 112 ) -rotation = 1.5708 -frames = SubResource( 53 ) -animation = "hole" - -[node name="GameOverLabel" type="Label" parent="."] -margin_left = 16.0 -margin_top = 96.0 -margin_right = 232.0 -margin_bottom = 129.0 -custom_fonts/font = SubResource( 1 ) -text = "You died." -align = 1 -valign = 1 -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="HighscoreLabel" type="Label" parent="."] -margin_left = 8.0 -margin_top = 8.0 -margin_right = 312.0 -margin_bottom = 25.0 -custom_fonts/font = ExtResource( 7 ) -text = "Highscore = " -align = 1 -valign = 1 -autowrap = true -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Score" type="Label" parent="."] -margin_left = -40.0 -margin_top = 30.0 -margin_right = 272.0 -margin_bottom = 47.0 -custom_fonts/font = ExtResource( 1 ) -text = "Score = " -align = 1 -valign = 1 -autowrap = true -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Esc" type="Label" parent="."] -margin_left = 64.0 -margin_top = 160.0 -margin_right = 256.0 -margin_bottom = 177.0 -custom_fonts/font = ExtResource( 1 ) -text = "esc to return" -align = 1 -valign = 1 -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="TouchScreenButton" type="TouchScreenButton" parent="."] -position = Vector2( 24, 24 ) -normal = ExtResource( 5 ) -shape = SubResource( 2 ) -action = "ui_cancel" - -[node name="Camera2D" type="Camera2D" parent="."] -position = Vector2( 160, 90 ) diff --git a/ui/scenes/HpUi.tscn b/ui/scenes/HpUi.tscn deleted file mode 100644 index 7ba46ed..0000000 --- a/ui/scenes/HpUi.tscn +++ /dev/null @@ -1,29 +0,0 @@ -[gd_scene load_steps=4 format=2] - -[ext_resource path="res://sprites/emptyheart.png" type="Texture" id=1] -[ext_resource path="res://sprites/fullhart.png" type="Texture" id=2] -[ext_resource path="res://ui/scripts/HpUi.gd" type="Script" id=3] - -[node name="HpUi" type="Control"] -anchor_right = 1.0 -anchor_bottom = 1.0 -margin_right = -277.0 -margin_bottom = -169.0 -script = ExtResource( 3 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="EmptyHarts" type="TextureRect" parent="."] -margin_right = 43.0 -margin_bottom = 11.0 -texture = ExtResource( 1 ) -expand = true -stretch_mode = 2 - -[node name="FullHarts" type="TextureRect" parent="."] -margin_right = 15.0 -margin_bottom = 11.0 -texture = ExtResource( 2 ) -expand = true -stretch_mode = 2 diff --git a/ui/scenes/StartMenu.tscn b/ui/scenes/StartMenu.tscn deleted file mode 100644 index c36a4fd..0000000 --- a/ui/scenes/StartMenu.tscn +++ /dev/null @@ -1,2199 +0,0 @@ -[gd_scene load_steps=414 format=2] - -[ext_resource path="res://ui/scripts/StartMenu.gd" type="Script" id=2] -[ext_resource path="res://effects/Stars.tscn" type="PackedScene" id=3] -[ext_resource path="res://ui/scenes/mobile/MobileControls.tscn" type="PackedScene" id=4] -[ext_resource path="res://sprites/blackhoole.png" type="Texture" id=5] -[ext_resource path="res://fonts/Paskowy.ttf" type="DynamicFontData" id=6] -[ext_resource path="res://ui/buttontheme.tres" type="Theme" id=7] -[ext_resource path="res://ui/scenes/pause.tscn" type="PackedScene" id=8] -[ext_resource path="res://sprites/inputs.png" type="Texture" id=9] -[ext_resource path="res://fonts/tiny.tres" type="DynamicFont" id=10] -[ext_resource path="res://fonts/04b-19.tres" type="DynamicFont" id=11] - -[sub_resource type="ShaderMaterial" id=403] - -[sub_resource type="AtlasTexture" id=1] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 0, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=2] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 200, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=3] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 400, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=4] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 600, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=5] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 800, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=6] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1000, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=7] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1200, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=8] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1400, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=9] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1600, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=10] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1800, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=11] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2000, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=12] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2200, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=13] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2400, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=14] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2600, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=15] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2800, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=16] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3000, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=17] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3200, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=18] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3400, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=19] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3600, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=20] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3800, 0, 200, 200 ) - -[sub_resource type="AtlasTexture" id=21] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 0, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=22] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 200, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=23] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 400, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=24] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 600, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=25] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 800, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=26] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1000, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=27] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1200, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=28] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1400, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=29] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1600, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=30] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1800, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=31] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2000, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=32] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2200, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=33] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2400, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=34] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2600, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=35] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2800, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=36] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3000, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=37] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3200, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=38] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3400, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=39] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3600, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=40] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3800, 200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=41] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 0, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=42] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 200, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=43] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 400, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=44] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 600, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=45] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 800, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=46] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1000, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=47] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1200, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=48] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1400, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=49] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1600, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=50] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1800, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=51] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2000, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=52] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2200, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=53] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2400, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=54] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2600, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=55] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2800, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=56] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3000, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=57] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3200, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=58] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3400, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=59] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3600, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=60] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3800, 400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=61] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 0, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=62] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 200, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=63] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 400, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=64] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 600, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=65] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 800, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=66] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1000, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=67] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1200, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=68] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1400, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=69] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1600, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=70] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1800, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=71] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2000, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=72] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2200, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=73] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2400, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=74] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2600, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=75] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2800, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=76] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3000, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=77] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3200, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=78] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3400, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=79] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3600, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=80] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3800, 600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=81] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 0, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=82] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 200, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=83] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 400, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=84] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 600, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=85] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 800, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=86] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1000, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=87] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1200, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=88] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1400, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=89] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1600, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=90] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1800, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=91] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2000, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=92] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2200, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=93] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2400, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=94] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2600, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=95] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2800, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=96] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3000, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=97] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3200, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=98] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3400, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=99] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3600, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=100] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3800, 800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=101] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 0, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=102] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 200, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=103] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 400, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=104] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 600, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=105] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 800, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=106] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1000, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=107] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1200, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=108] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1400, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=109] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1600, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=110] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1800, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=111] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2000, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=112] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2200, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=113] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2400, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=114] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2600, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=115] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2800, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=116] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3000, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=117] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3200, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=118] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3400, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=119] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3600, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=120] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3800, 1000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=121] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 0, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=122] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 200, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=123] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 400, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=124] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 600, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=125] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 800, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=126] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1000, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=127] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1200, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=128] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1400, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=129] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1600, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=130] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1800, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=131] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2000, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=132] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2200, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=133] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2400, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=134] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2600, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=135] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2800, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=136] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3000, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=137] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3200, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=138] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3400, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=139] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3600, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=140] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3800, 1200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=141] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 0, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=142] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 200, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=143] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 400, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=144] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 600, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=145] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 800, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=146] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1000, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=147] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1200, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=148] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1400, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=149] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1600, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=150] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1800, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=151] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2000, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=152] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2200, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=153] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2400, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=154] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2600, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=155] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2800, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=156] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3000, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=157] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3200, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=158] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3400, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=159] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3600, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=160] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3800, 1400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=161] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 0, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=162] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 200, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=163] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 400, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=164] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 600, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=165] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 800, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=166] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1000, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=167] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1200, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=168] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1400, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=169] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1600, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=170] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1800, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=171] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2000, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=172] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2200, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=173] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2400, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=174] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2600, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=175] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2800, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=176] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3000, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=177] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3200, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=178] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3400, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=179] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3600, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=180] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3800, 1600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=181] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 0, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=182] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 200, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=183] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 400, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=184] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 600, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=185] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 800, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=186] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1000, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=187] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1200, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=188] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1400, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=189] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1600, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=190] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1800, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=191] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2000, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=192] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2200, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=193] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2400, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=194] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2600, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=195] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2800, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=196] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3000, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=197] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3200, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=198] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3400, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=199] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3600, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=200] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3800, 1800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=201] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 0, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=202] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 200, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=203] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 400, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=204] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 600, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=205] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 800, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=206] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1000, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=207] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1200, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=208] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1400, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=209] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1600, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=210] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1800, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=211] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2000, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=212] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2200, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=213] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2400, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=214] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2600, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=215] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2800, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=216] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3000, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=217] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3200, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=218] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3400, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=219] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3600, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=220] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3800, 2000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=221] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 0, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=222] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 200, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=223] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 400, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=224] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 600, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=225] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 800, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=226] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1000, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=227] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1200, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=228] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1400, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=229] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1600, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=230] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1800, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=231] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2000, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=232] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2200, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=233] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2400, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=234] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2600, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=235] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2800, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=236] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3000, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=237] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3200, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=238] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3400, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=239] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3600, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=240] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3800, 2200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=241] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 0, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=242] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 200, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=243] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 400, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=244] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 600, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=245] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 800, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=246] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1000, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=247] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1200, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=248] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1400, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=249] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1600, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=250] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1800, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=251] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2000, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=252] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2200, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=253] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2400, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=254] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2600, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=255] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2800, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=256] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3000, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=257] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3200, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=258] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3400, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=259] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3600, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=260] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3800, 2400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=261] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 0, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=262] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 200, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=263] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 400, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=264] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 600, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=265] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 800, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=266] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1000, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=267] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1200, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=268] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1400, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=269] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1600, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=270] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1800, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=271] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2000, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=272] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2200, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=273] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2400, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=274] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2600, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=275] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2800, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=276] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3000, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=277] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3200, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=278] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3400, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=279] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3600, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=280] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3800, 2600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=281] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 0, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=282] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 200, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=283] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 400, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=284] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 600, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=285] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 800, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=286] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1000, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=287] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1200, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=288] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1400, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=289] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1600, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=290] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1800, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=291] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2000, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=292] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2200, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=293] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2400, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=294] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2600, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=295] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2800, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=296] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3000, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=297] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3200, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=298] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3400, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=299] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3600, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=300] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3800, 2800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=301] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 0, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=302] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 200, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=303] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 400, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=304] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 600, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=305] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 800, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=306] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1000, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=307] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1200, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=308] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1400, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=309] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1600, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=310] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1800, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=311] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2000, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=312] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2200, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=313] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2400, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=314] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2600, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=315] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2800, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=316] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3000, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=317] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3200, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=318] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3400, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=319] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3600, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=320] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3800, 3000, 200, 200 ) - -[sub_resource type="AtlasTexture" id=321] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 0, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=322] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 200, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=323] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 400, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=324] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 600, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=325] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 800, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=326] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1000, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=327] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1200, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=328] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1400, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=329] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1600, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=330] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1800, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=331] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2000, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=332] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2200, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=333] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2400, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=334] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2600, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=335] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2800, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=336] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3000, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=337] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3200, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=338] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3400, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=339] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3600, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=340] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3800, 3200, 200, 200 ) - -[sub_resource type="AtlasTexture" id=341] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 0, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=342] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 200, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=343] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 400, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=344] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 600, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=345] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 800, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=346] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1000, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=347] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1200, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=348] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1400, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=349] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1600, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=350] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1800, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=351] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2000, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=352] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2200, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=353] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2400, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=354] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2600, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=355] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2800, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=356] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3000, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=357] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3200, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=358] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3400, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=359] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3600, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=360] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3800, 3400, 200, 200 ) - -[sub_resource type="AtlasTexture" id=361] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 0, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=362] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 200, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=363] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 400, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=364] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 600, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=365] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 800, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=366] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1000, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=367] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1200, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=368] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1400, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=369] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1600, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=370] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1800, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=371] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2000, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=372] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2200, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=373] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2400, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=374] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2600, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=375] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2800, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=376] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3000, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=377] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3200, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=378] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3400, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=379] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3600, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=380] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3800, 3600, 200, 200 ) - -[sub_resource type="AtlasTexture" id=381] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 0, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=382] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 200, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=383] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 400, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=384] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 600, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=385] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 800, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=386] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1000, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=387] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1200, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=388] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1400, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=389] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1600, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=390] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 1800, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=391] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2000, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=392] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2200, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=393] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2400, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=394] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2600, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=395] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 2800, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=396] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3000, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=397] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3200, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=398] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3400, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=399] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3600, 3800, 200, 200 ) - -[sub_resource type="AtlasTexture" id=400] -flags = 2 -atlas = ExtResource( 5 ) -region = Rect2( 3800, 3800, 200, 200 ) - -[sub_resource type="SpriteFrames" id=401] -animations = [ { -"frames": [ SubResource( 1 ), SubResource( 2 ), SubResource( 3 ), SubResource( 4 ), SubResource( 5 ), SubResource( 6 ), SubResource( 7 ), SubResource( 8 ), SubResource( 9 ), SubResource( 10 ), SubResource( 11 ), SubResource( 12 ), SubResource( 13 ), SubResource( 14 ), SubResource( 15 ), SubResource( 16 ), SubResource( 17 ), SubResource( 18 ), SubResource( 19 ), SubResource( 20 ), SubResource( 21 ), SubResource( 22 ), SubResource( 23 ), SubResource( 24 ), SubResource( 25 ), SubResource( 26 ), SubResource( 27 ), SubResource( 28 ), SubResource( 29 ), SubResource( 30 ), SubResource( 31 ), SubResource( 32 ), SubResource( 33 ), SubResource( 34 ), SubResource( 35 ), SubResource( 36 ), SubResource( 37 ), SubResource( 38 ), SubResource( 39 ), SubResource( 40 ), SubResource( 41 ), SubResource( 42 ), SubResource( 43 ), SubResource( 44 ), SubResource( 45 ), SubResource( 46 ), SubResource( 47 ), SubResource( 48 ), SubResource( 49 ), SubResource( 50 ), SubResource( 51 ), SubResource( 52 ), SubResource( 53 ), SubResource( 54 ), SubResource( 55 ), SubResource( 56 ), SubResource( 57 ), SubResource( 58 ), SubResource( 59 ), SubResource( 60 ), SubResource( 61 ), SubResource( 62 ), SubResource( 63 ), SubResource( 64 ), SubResource( 65 ), SubResource( 66 ), SubResource( 67 ), SubResource( 68 ), SubResource( 69 ), SubResource( 70 ), SubResource( 71 ), SubResource( 72 ), SubResource( 73 ), SubResource( 74 ), SubResource( 75 ), SubResource( 76 ), SubResource( 77 ), SubResource( 78 ), SubResource( 79 ), SubResource( 80 ), SubResource( 81 ), SubResource( 82 ), SubResource( 83 ), SubResource( 84 ), SubResource( 85 ), SubResource( 86 ), SubResource( 87 ), SubResource( 88 ), SubResource( 89 ), SubResource( 90 ), SubResource( 91 ), SubResource( 92 ), SubResource( 93 ), SubResource( 94 ), SubResource( 95 ), SubResource( 96 ), SubResource( 97 ), SubResource( 98 ), SubResource( 99 ), SubResource( 100 ), SubResource( 101 ), SubResource( 102 ), SubResource( 103 ), SubResource( 104 ), SubResource( 105 ), SubResource( 106 ), SubResource( 107 ), SubResource( 108 ), SubResource( 109 ), SubResource( 110 ), SubResource( 111 ), SubResource( 112 ), SubResource( 113 ), SubResource( 114 ), SubResource( 115 ), SubResource( 116 ), SubResource( 117 ), SubResource( 118 ), SubResource( 119 ), SubResource( 120 ), SubResource( 121 ), SubResource( 122 ), SubResource( 123 ), SubResource( 124 ), SubResource( 125 ), SubResource( 126 ), SubResource( 127 ), SubResource( 128 ), SubResource( 129 ), SubResource( 130 ), SubResource( 131 ), SubResource( 132 ), SubResource( 133 ), SubResource( 134 ), SubResource( 135 ), SubResource( 136 ), SubResource( 137 ), SubResource( 138 ), SubResource( 139 ), SubResource( 140 ), SubResource( 141 ), SubResource( 142 ), SubResource( 143 ), SubResource( 144 ), SubResource( 145 ), SubResource( 146 ), SubResource( 147 ), SubResource( 148 ), SubResource( 149 ), SubResource( 150 ), SubResource( 151 ), SubResource( 152 ), SubResource( 153 ), SubResource( 154 ), SubResource( 155 ), SubResource( 156 ), SubResource( 157 ), SubResource( 158 ), SubResource( 159 ), SubResource( 160 ), SubResource( 161 ), SubResource( 162 ), SubResource( 163 ), SubResource( 164 ), SubResource( 165 ), SubResource( 166 ), SubResource( 167 ), SubResource( 168 ), SubResource( 169 ), SubResource( 170 ), SubResource( 171 ), SubResource( 172 ), SubResource( 173 ), SubResource( 174 ), SubResource( 175 ), SubResource( 176 ), SubResource( 177 ), SubResource( 178 ), SubResource( 179 ), SubResource( 180 ), SubResource( 181 ), SubResource( 182 ), SubResource( 183 ), SubResource( 184 ), SubResource( 185 ), SubResource( 186 ), SubResource( 187 ), SubResource( 188 ), SubResource( 189 ), SubResource( 190 ), SubResource( 191 ), SubResource( 192 ), SubResource( 193 ), SubResource( 194 ), SubResource( 195 ), SubResource( 196 ), SubResource( 197 ), SubResource( 198 ), SubResource( 199 ), SubResource( 200 ), SubResource( 201 ), SubResource( 202 ), SubResource( 203 ), SubResource( 204 ), SubResource( 205 ), SubResource( 206 ), SubResource( 207 ), SubResource( 208 ), SubResource( 209 ), SubResource( 210 ), SubResource( 211 ), SubResource( 212 ), SubResource( 213 ), SubResource( 214 ), SubResource( 215 ), SubResource( 216 ), SubResource( 217 ), SubResource( 218 ), SubResource( 219 ), SubResource( 220 ), SubResource( 221 ), SubResource( 222 ), SubResource( 223 ), SubResource( 224 ), SubResource( 225 ), SubResource( 226 ), SubResource( 227 ), SubResource( 228 ), SubResource( 229 ), SubResource( 230 ), SubResource( 231 ), SubResource( 232 ), SubResource( 233 ), SubResource( 234 ), SubResource( 235 ), SubResource( 236 ), SubResource( 237 ), SubResource( 238 ), SubResource( 239 ), SubResource( 240 ), SubResource( 241 ), SubResource( 242 ), SubResource( 243 ), SubResource( 244 ), SubResource( 245 ), SubResource( 246 ), SubResource( 247 ), SubResource( 248 ), SubResource( 249 ), SubResource( 250 ), SubResource( 251 ), SubResource( 252 ), SubResource( 253 ), SubResource( 254 ), SubResource( 255 ), SubResource( 256 ), SubResource( 257 ), SubResource( 258 ), SubResource( 259 ), SubResource( 260 ), SubResource( 261 ), SubResource( 262 ), SubResource( 263 ), SubResource( 264 ), SubResource( 265 ), SubResource( 266 ), SubResource( 267 ), SubResource( 268 ), SubResource( 269 ), SubResource( 270 ), SubResource( 271 ), SubResource( 272 ), SubResource( 273 ), SubResource( 274 ), SubResource( 275 ), SubResource( 276 ), SubResource( 277 ), SubResource( 278 ), SubResource( 279 ), SubResource( 280 ), SubResource( 281 ), SubResource( 282 ), SubResource( 283 ), SubResource( 284 ), SubResource( 285 ), SubResource( 286 ), SubResource( 287 ), SubResource( 288 ), SubResource( 289 ), SubResource( 290 ), SubResource( 291 ), SubResource( 292 ), SubResource( 293 ), SubResource( 294 ), SubResource( 295 ), SubResource( 296 ), SubResource( 297 ), SubResource( 298 ), SubResource( 299 ), SubResource( 300 ), SubResource( 301 ), SubResource( 302 ), SubResource( 303 ), SubResource( 304 ), SubResource( 305 ), SubResource( 306 ), SubResource( 307 ), SubResource( 308 ), SubResource( 309 ), SubResource( 310 ), SubResource( 311 ), SubResource( 312 ), SubResource( 313 ), SubResource( 314 ), SubResource( 315 ), SubResource( 316 ), SubResource( 317 ), SubResource( 318 ), SubResource( 319 ), SubResource( 320 ), SubResource( 321 ), SubResource( 322 ), SubResource( 323 ), SubResource( 324 ), SubResource( 325 ), SubResource( 326 ), SubResource( 327 ), SubResource( 328 ), SubResource( 329 ), SubResource( 330 ), SubResource( 331 ), SubResource( 332 ), SubResource( 333 ), SubResource( 334 ), SubResource( 335 ), SubResource( 336 ), SubResource( 337 ), SubResource( 338 ), SubResource( 339 ), SubResource( 340 ), SubResource( 341 ), SubResource( 342 ), SubResource( 343 ), SubResource( 344 ), SubResource( 345 ), SubResource( 346 ), SubResource( 347 ), SubResource( 348 ), SubResource( 349 ), SubResource( 350 ), SubResource( 351 ), SubResource( 352 ), SubResource( 353 ), SubResource( 354 ), SubResource( 355 ), SubResource( 356 ), SubResource( 357 ), SubResource( 358 ), SubResource( 359 ), SubResource( 360 ), SubResource( 361 ), SubResource( 362 ), SubResource( 363 ), SubResource( 364 ), SubResource( 365 ), SubResource( 366 ), SubResource( 367 ), SubResource( 368 ), SubResource( 369 ), SubResource( 370 ), SubResource( 371 ), SubResource( 372 ), SubResource( 373 ), SubResource( 374 ), SubResource( 375 ), SubResource( 376 ), SubResource( 377 ), SubResource( 378 ), SubResource( 379 ), SubResource( 380 ), SubResource( 381 ), SubResource( 382 ), SubResource( 383 ), SubResource( 384 ), SubResource( 385 ), SubResource( 386 ), SubResource( 387 ), SubResource( 388 ), SubResource( 389 ), SubResource( 390 ), SubResource( 391 ), SubResource( 392 ), SubResource( 393 ), SubResource( 394 ), SubResource( 395 ), SubResource( 396 ), SubResource( 397 ), SubResource( 398 ), SubResource( 399 ), SubResource( 400 ) ], -"loop": true, -"name": "default", -"speed": 40.0 -} ] - -[sub_resource type="DynamicFont" id=402] -size = 26 -font_data = ExtResource( 6 ) - -[node name="StartMenu" type="Node"] -script = ExtResource( 2 ) - -[node name="ColorRect" type="ColorRect" parent="."] -anchor_right = 1.0 -anchor_bottom = 1.0 -color = Color( 0, 0, 0, 1 ) -__meta__ = { -"_edit_lock_": true, -"_edit_use_anchors_": false -} - -[node name="AnimatedSprite" type="AnimatedSprite" parent="."] -material = SubResource( 403 ) -position = Vector2( 42, 138 ) -frames = SubResource( 401 ) -flip_h = true - -[node name="start" type="Label" parent="." groups=["not_mobile"]] -margin_left = 66.0 -margin_top = 69.0 -margin_right = 224.0 -margin_bottom = 86.0 -custom_fonts/font = ExtResource( 11 ) -text = "press to play" -align = 1 -valign = 1 - -[node name="space" type="Sprite" parent="start" groups=["keyboard"]] -position = Vector2( 70, 8 ) -texture = ExtResource( 9 ) -region_enabled = true -region_rect = Rect2( 0, 64, 48, 16 ) -__meta__ = { -"_edit_group_": true -} - -[node name="label" type="Label" parent="start/space"] -anchor_right = 1.0 -anchor_bottom = 1.0 -margin_left = -24.0 -margin_top = -6.0 -margin_right = -24.0 -margin_bottom = -6.0 -custom_colors/font_color = Color( 0, 0, 0, 1 ) -custom_fonts/font = ExtResource( 10 ) -text = "space -" -align = 1 -valign = 2 - -[node name="x" type="Sprite" parent="start" groups=["gamepad"]] -visible = false -position = Vector2( 67, 8 ) -texture = ExtResource( 9 ) -region_enabled = true -region_rect = Rect2( 32, 112, 16, 16 ) - -[node name="escape" type="Label" parent="." groups=["not_mobile"]] -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -margin_left = -50.0 -margin_top = 22.0 -margin_right = 70.0 -margin_bottom = 36.0 -custom_fonts/font = ExtResource( 11 ) -text = "press to quit" -valign = 1 - -[node name="esc" type="Sprite" parent="escape" groups=["keyboard"]] -position = Vector2( 55, 7 ) -texture = ExtResource( 9 ) -region_enabled = true -region_rect = Rect2( 0, 16, 23, 16 ) -__meta__ = { -"_edit_group_": true -} - -[node name="label" type="Label" parent="escape/esc"] -anchor_right = 1.0 -anchor_bottom = 1.0 -margin_left = -12.0 -margin_top = -8.0 -margin_right = -12.0 -margin_bottom = -8.0 -custom_colors/font_color = Color( 0, 0, 0, 1 ) -custom_fonts/font = ExtResource( 10 ) -text = "esc" -align = 1 -valign = 1 - -[node name="b" type="Sprite" parent="escape" groups=["gamepad"]] -visible = false -position = Vector2( 54, 24 ) -texture = ExtResource( 9 ) -region_enabled = true -region_rect = Rect2( 16, 112, 16, 16 ) - -[node name="Stars" parent="." instance=ExtResource( 3 )] - -[node name="Label" type="Label" parent="."] -anchor_right = 1.0 -margin_left = 8.0 -margin_top = 15.0 -margin_bottom = 32.0 -custom_fonts/font = ExtResource( 11 ) -text = "highscore = " - -[node name="MobileControls" parent="." instance=ExtResource( 4 )] - -[node name="Attack" parent="MobileControls" index="0"] -visible = false - -[node name="Change gun" parent="MobileControls" index="1"] -visible = false - -[node name="productions- inc" type="Label" parent="."] -margin_left = 218.0 -margin_top = -21.0 -margin_right = 315.0 -margin_bottom = 14.0 -custom_fonts/font = SubResource( 402 ) -text = "bendn productions" -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="settings" type="Label" parent="." groups=["not_mobile"]] -anchor_left = 0.5 -anchor_top = 1.0 -anchor_right = 0.5 -anchor_bottom = 1.0 -margin_left = -27.0 -margin_top = -28.0 -margin_right = 137.0 -margin_bottom = -11.0 -theme = ExtResource( 7 ) -text = "press for options" -align = 1 -valign = 2 - -[node name="keyboard" type="Sprite" parent="settings" groups=["keyboard"]] -position = Vector2( 60, 10 ) -texture = ExtResource( 9 ) -region_enabled = true -region_rect = Rect2( 0, 48, 32, 16 ) -__meta__ = { -"_edit_group_": true -} - -[node name="label" type="Label" parent="settings/keyboard"] -margin_left = -15.0 -margin_top = -7.0 -margin_right = 15.0 -margin_bottom = 6.0 -custom_colors/font_color = Color( 0, 0, 0, 1 ) -custom_colors/font_color_shadow = Color( 0, 0, 0, 0 ) -custom_fonts/font = ExtResource( 10 ) -text = "back _" -align = 1 -valign = 1 - -[node name="pause" parent="." instance=ExtResource( 8 )] -visible = false -trigger = "options" - -[node name="Camera2D" type="Camera2D" parent="."] -position = Vector2( 160, 90 ) - -[editable path="MobileControls"] diff --git a/ui/scenes/UIResolutionSelector.tscn b/ui/scenes/UIResolutionSelector.tscn deleted file mode 100644 index a727171..0000000 --- a/ui/scenes/UIResolutionSelector.tscn +++ /dev/null @@ -1,19 +0,0 @@ -[gd_scene load_steps=3 format=2] - -[ext_resource path="res://ui/scripts/UIResolutionSelector.gd" type="Script" id=1] -[ext_resource path="res://ui/buttontheme.tres" type="Theme" id=5] - -[node name="OptionButton" type="OptionButton"] -margin_right = 72.0 -margin_bottom = 40.0 -theme = ExtResource( 5 ) -custom_constants/arrow_margin = 0 -text = "1280x720" -items = [ "640x300", null, false, 0, null, "1280x720", null, false, 1, null, "1920x1080", null, false, 2, null ] -selected = 1 -script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[connection signal="item_selected" from="." to="." method="_on_OptionButton_item_selected"] diff --git a/ui/scenes/UiSettingContainer.tscn b/ui/scenes/UiSettingContainer.tscn deleted file mode 100644 index 116f404..0000000 --- a/ui/scenes/UiSettingContainer.tscn +++ /dev/null @@ -1,11 +0,0 @@ -[gd_scene load_steps=2 format=2] - -[ext_resource path="res://ui/buttontheme.tres" type="Theme" id=2] - -[node name="CheckBox" type="CheckBox"] -margin_right = 16.0 -margin_bottom = 16.0 -theme = ExtResource( 2 ) -__meta__ = { -"_edit_use_anchors_": false -} diff --git a/ui/scenes/WeaponUi.tscn b/ui/scenes/WeaponUi.tscn deleted file mode 100644 index 6a45e0a..0000000 --- a/ui/scenes/WeaponUi.tscn +++ /dev/null @@ -1,80 +0,0 @@ -[gd_scene load_steps=8 format=2] - -[ext_resource path="res://sprites/PlayerMissileIcon.png" type="Texture" id=1] -[ext_resource path="res://sprites/laser.png" type="Texture" id=2] -[ext_resource path="res://sprites/split.png" type="Texture" id=3] -[ext_resource path="res://ui/scripts/WeaponUi.gd" type="Script" id=4] -[ext_resource path="res://sprites/smallparticle.png" type="Texture" id=6] -[ext_resource path="res://sprites/inputs.png" type="Texture" id=7] -[ext_resource path="res://fonts/tiny.tres" type="DynamicFont" id=8] - -[node name="WeaponUi" type="Control"] -anchor_right = 1.0 -anchor_bottom = 1.0 -margin_right = -300.0 -margin_bottom = -164.0 -script = ExtResource( 4 ) - -[node name="Rocket" type="TextureRect" parent="."] -visible = false -margin_left = 10.0 -margin_right = 18.0 -margin_bottom = 10.0 -rect_rotation = 90.0 -texture = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Laser" type="TextureRect" parent="."] -visible = false -margin_right = 20.0 -margin_bottom = 15.0 -texture = ExtResource( 2 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Split" type="TextureRect" parent="."] -visible = false -margin_right = 20.0 -margin_bottom = 15.0 -texture = ExtResource( 3 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Flak" type="TextureRect" parent="."] -visible = false -margin_right = 20.0 -margin_bottom = 15.0 -texture = ExtResource( 6 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="tab" type="Sprite" parent="." groups=["keyboard"]] -position = Vector2( -15, 9 ) -texture = ExtResource( 7 ) -region_enabled = true -region_rect = Rect2( 0, 16, 23, 16 ) - -[node name="Label" type="Label" parent="tab"] -anchor_right = 1.0 -anchor_bottom = 1.0 -margin_left = -12.0 -margin_top = -8.0 -margin_right = -12.0 -margin_bottom = -8.0 -custom_colors/font_color = Color( 0, 0, 0, 1 ) -custom_fonts/font = ExtResource( 8 ) -text = "tab" -align = 1 -valign = 1 - -[node name="y" type="Sprite" parent="." groups=["gamepad"]] -visible = false -position = Vector2( -11, 2 ) -texture = ExtResource( 7 ) -region_enabled = true -region_rect = Rect2( 48, 112, 16, 16 ) diff --git a/ui/scenes/Win.tscn b/ui/scenes/Win.tscn deleted file mode 100644 index 1e90c32..0000000 --- a/ui/scenes/Win.tscn +++ /dev/null @@ -1,72 +0,0 @@ -[gd_scene load_steps=8 format=2] - -[ext_resource path="res://fonts/fonty.tres" type="DynamicFont" id=1] -[ext_resource path="res://fonts/(16)04B_30__.TTF" type="DynamicFontData" id=2] -[ext_resource path="res://ui/scripts/GameOverScreen.gd" type="Script" id=3] -[ext_resource path="res://effects/Stars.tscn" type="PackedScene" id=4] -[ext_resource path="res://sprites/changegun.png" type="Texture" id=5] - -[sub_resource type="DynamicFont" id=1] -size = 32 -font_data = ExtResource( 2 ) - -[sub_resource type="CircleShape2D" id=2] -radius = 30.0 - -[node name="Win" type="Node"] -script = ExtResource( 3 ) - -[node name="ColorRect" type="ColorRect" parent="."] -anchor_right = 1.0 -anchor_bottom = 1.0 -color = Color( 0, 0, 0, 1 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Label" type="Label" parent="."] -margin_left = -8.0 -margin_top = 24.0 -margin_right = 312.0 -margin_bottom = 89.0 -custom_fonts/font = SubResource( 1 ) -text = "You win" -align = 1 -valign = 1 -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Label2" type="Label" parent="." groups=["not_mobile"]] -margin_left = 8.0 -margin_top = 88.0 -margin_right = 312.0 -margin_bottom = 176.0 -custom_fonts/font = ExtResource( 1 ) -text = "esc to go back to start screen, not that i assume your going to play again" -autowrap = true -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="HighscoreLabel" type="Label" parent="."] -anchor_right = 1.0 -margin_bottom = 17.0 -custom_fonts/font = ExtResource( 1 ) -text = "highscore goes here" -align = 1 -autowrap = true -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Stars" parent="." instance=ExtResource( 4 )] - -[node name="TouchScreenButton" type="TouchScreenButton" parent="."] -position = Vector2( 24, 24 ) -normal = ExtResource( 5 ) -shape = SubResource( 2 ) -action = "ui_cancel" - -[node name="Camera2D" type="Camera2D" parent="."] -position = Vector2( 160, 90 ) diff --git a/ui/scenes/levelselect.tscn b/ui/scenes/levelselect.tscn deleted file mode 100644 index a187002..0000000 --- a/ui/scenes/levelselect.tscn +++ /dev/null @@ -1,19 +0,0 @@ -[gd_scene load_steps=2 format=2] - -[ext_resource path="res://sprites/lock.png" type="Texture" id=1] - -[node name="levelselect" type="ColorRect"] -anchor_right = 1.0 -anchor_bottom = 1.0 -color = Color( 0, 0, 0, 1 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="TextureButton" type="TextureButton" parent="."] -margin_left = 16.0 -margin_top = 16.0 -margin_right = 40.0 -margin_bottom = 40.0 -disabled = true -texture_disabled = ExtResource( 1 ) diff --git a/ui/scenes/mobile/MobileControls.tscn b/ui/scenes/mobile/MobileControls.tscn deleted file mode 100644 index f0b94b7..0000000 --- a/ui/scenes/mobile/MobileControls.tscn +++ /dev/null @@ -1,25 +0,0 @@ -[gd_scene load_steps=4 format=2] - -[ext_resource path="res://sprites/attakbutton.png" type="Texture" id=2] -[ext_resource path="res://sprites/changegun.png" type="Texture" id=3] - -[sub_resource type="CircleShape2D" id=1] -radius = 40.0 - -[node name="MobileButtons" type="Node2D"] - -[node name="Attack" type="TouchScreenButton" parent="."] -modulate = Color( 1, 1, 1, 0.392157 ) -position = Vector2( 268, 128 ) -normal = ExtResource( 2 ) -shape = SubResource( 1 ) -passby_press = true -action = "shoot_1" - -[node name="Change gun" type="TouchScreenButton" parent="."] -modulate = Color( 1, 1, 1, 0.392157 ) -position = Vector2( 7, 5 ) -normal = ExtResource( 3 ) -shape = SubResource( 1 ) -passby_press = true -action = "ui_focus_next" diff --git a/ui/scenes/mobile/MobileJoystick.tscn b/ui/scenes/mobile/MobileJoystick.tscn deleted file mode 100644 index 162c417..0000000 --- a/ui/scenes/mobile/MobileJoystick.tscn +++ /dev/null @@ -1,27 +0,0 @@ -[gd_scene load_steps=5 format=2] - -[ext_resource path="res://sprites/handle.png" type="Texture" id=1] -[ext_resource path="res://sprites/touchbg.png" type="Texture" id=2] -[ext_resource path="res://ui/scripts/Joystick.gd" type="Script" id=4] - -[sub_resource type="CircleShape2D" id=1] -radius = 20.0 - -[node name="TouchButton" type="TouchScreenButton"] -self_modulate = Color( 1, 1, 1, 0.588235 ) -position = Vector2( 10, 115 ) -scale = Vector2( 0.302198, 0.302198 ) -normal = ExtResource( 2 ) -shape = SubResource( 1 ) -shape_visible = false -passby_press = true -script = ExtResource( 4 ) -__meta__ = { -"_edit_group_": true -} - -[node name="Handle" type="Sprite" parent="."] -unique_name_in_owner = true -position = Vector2( 87.2464, 84.7536 ) -scale = Vector2( 0.705991, 0.705991 ) -texture = ExtResource( 1 ) diff --git a/ui/scenes/pause.tscn b/ui/scenes/pause.tscn deleted file mode 100644 index 2d865f1..0000000 --- a/ui/scenes/pause.tscn +++ /dev/null @@ -1,68 +0,0 @@ -[gd_scene load_steps=4 format=2] - -[ext_resource path="res://ui/scripts/pausemenu.gd" type="Script" id=2] -[ext_resource path="res://ui/buttontheme.tres" type="Theme" id=3] -[ext_resource path="res://ui/scenes/settings.tscn" type="PackedScene" id=6] - -[node name="pause" type="Control"] -pause_mode = 2 -anchor_right = 1.0 -anchor_bottom = 1.0 -script = ExtResource( 2 ) - -[node name="Background" type="ColorRect" parent="."] -anchor_right = 1.0 -anchor_bottom = 1.0 -color = Color( 0, 0, 0, 0.611765 ) - -[node name="VBoxContainer" type="VBoxContainer" parent="Background"] -anchor_bottom = 1.0 -margin_left = 14.0 -margin_top = 16.0 -margin_right = 88.0 -margin_bottom = -60.0 - -[node name="MainMenuButton" type="Button" parent="Background/VBoxContainer"] -unique_name_in_owner = true -margin_right = 74.0 -margin_bottom = 14.0 -theme = ExtResource( 3 ) -text = "Main menu" -align = 0 -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="options" type="Button" parent="Background/VBoxContainer"] -margin_top = 18.0 -margin_right = 74.0 -margin_bottom = 32.0 -theme = ExtResource( 3 ) -text = "Options" -align = 0 -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="exit" type="Button" parent="Background/VBoxContainer"] -margin_top = 36.0 -margin_right = 74.0 -margin_bottom = 50.0 -theme = ExtResource( 3 ) -text = "exit" -align = 0 -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="settings" parent="Background" instance=ExtResource( 6 )] -unique_name_in_owner = true -visible = false -__meta__ = { -"_edit_use_anchors_": false -} - -[connection signal="pressed" from="Background/VBoxContainer/MainMenuButton" to="." method="_on_MainMenuButton_pressed"] -[connection signal="pressed" from="Background/VBoxContainer/options" to="." method="_on_options_pressed"] -[connection signal="pressed" from="Background/VBoxContainer/exit" to="." method="_on_exit_pressed"] -[connection signal="back" from="Background/settings" to="." method="_on_settings_back"] diff --git a/ui/scenes/settings.tscn b/ui/scenes/settings.tscn deleted file mode 100644 index ba3c0fb..0000000 --- a/ui/scenes/settings.tscn +++ /dev/null @@ -1,159 +0,0 @@ -[gd_scene load_steps=11 format=2] - -[ext_resource path="res://ui/scripts/settings.gd" type="Script" id=1] -[ext_resource path="res://sprites/stop.png" type="Texture" id=2] -[ext_resource path="res://sprites/stop-2.png" type="Texture" id=5] -[ext_resource path="res://ui/scripts/Volume.gd" type="Script" id=6] -[ext_resource path="res://ui/scenes/UiSettingContainer.tscn" type="PackedScene" id=7] -[ext_resource path="res://ui/scenes/UIResolutionSelector.tscn" type="PackedScene" id=8] -[ext_resource path="res://ui/buttontheme.tres" type="Theme" id=9] -[ext_resource path="res://ui/new_styleboxflat.tres" type="StyleBox" id=10] - -[sub_resource type="StyleBoxFlat" id=1] -bg_color = Color( 0.898039, 0.898039, 0.898039, 0.854902 ) -corner_radius_top_left = 1 -corner_radius_top_right = 1 -corner_radius_bottom_right = 1 -corner_radius_bottom_left = 1 -expand_margin_left = 4.0 -expand_margin_right = 4.0 -expand_margin_top = 4.0 -expand_margin_bottom = 4.0 -anti_aliasing = false - -[sub_resource type="StyleBoxFlat" id=4] -bg_color = Color( 0.34902, 0.807843, 1, 1 ) -corner_radius_top_left = 1 -corner_radius_top_right = 1 -corner_radius_bottom_right = 1 -corner_radius_bottom_left = 1 -expand_margin_left = 4.0 -expand_margin_right = 4.0 -expand_margin_top = 4.0 -expand_margin_bottom = 4.0 -anti_aliasing = false - -[node name="settings" type="Control"] -pause_mode = 2 -anchor_right = 1.0 -anchor_bottom = 1.0 -script = ExtResource( 1 ) - -[node name="Backgroud" type="ColorRect" parent="."] -anchor_right = 1.0 -anchor_bottom = 1.0 -color = Color( 0, 0, 0, 0.611765 ) - -[node name="SettingsWindow" type="VBoxContainer" parent="Backgroud"] -margin_left = 16.0 -margin_top = 16.0 -margin_right = 173.0 -margin_bottom = 128.0 -theme = ExtResource( 9 ) - -[node name="VolumeBox" type="HBoxContainer" parent="Backgroud/SettingsWindow"] -margin_right = 157.0 -margin_bottom = 16.0 -custom_constants/separation = 10 - -[node name="VolumeSlider" type="HSlider" parent="Backgroud/SettingsWindow/VolumeBox"] -margin_right = 99.0 -margin_bottom = 16.0 -focus_neighbour_top = NodePath("../../BackButton") -focus_neighbour_bottom = NodePath("../../ResolutionBox/UIResolutionSelector") -size_flags_horizontal = 3 -custom_icons/grabber_highlight = ExtResource( 5 ) -custom_icons/grabber = ExtResource( 2 ) -custom_styles/slider = SubResource( 1 ) -custom_styles/grabber_area_highlight = SubResource( 4 ) -custom_styles/grabber_area = ExtResource( 10 ) -max_value = 2.0 -step = 0.05 -script = ExtResource( 6 ) -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="VolumeLabel" type="Label" parent="Backgroud/SettingsWindow/VolumeBox"] -margin_left = 109.0 -margin_top = 1.0 -margin_right = 157.0 -margin_bottom = 15.0 -theme = ExtResource( 9 ) -custom_colors/font_color = Color( 1, 0.929412, 0.764706, 1 ) -text = "volume" - -[node name="ResolutionBox" type="HBoxContainer" parent="Backgroud/SettingsWindow"] -margin_top = 20.0 -margin_right = 157.0 -margin_bottom = 34.0 - -[node name="UIResolutionSelector" parent="Backgroud/SettingsWindow/ResolutionBox" instance=ExtResource( 8 )] -margin_right = 67.0 -margin_bottom = 14.0 -focus_neighbour_top = NodePath("../../VolumeBox/VolumeSlider") -focus_neighbour_bottom = NodePath("../../fullscreen") -size_flags_horizontal = 0 -theme = null -text = "640x300" -items = [ "640x300", null, false, 0, null, "1280x720", null, false, 1, null, "1920x1080", null, false, 2, null ] -selected = 0 - -[node name="ResolutionLabel" type="Label" parent="Backgroud/SettingsWindow/ResolutionBox"] -margin_left = 71.0 -margin_right = 143.0 -margin_bottom = 14.0 -theme = ExtResource( 9 ) -text = "Resolutioេnតថឹ" - -[node name="fullscreen" parent="Backgroud/SettingsWindow" instance=ExtResource( 7 )] -margin_top = 38.0 -margin_right = 88.0 -margin_bottom = 54.0 -focus_neighbour_top = NodePath("../ResolutionBox/UIResolutionSelector") -focus_neighbour_bottom = NodePath("../vsync") -size_flags_horizontal = 0 -theme = null -pressed = true -text = "fullscreen" - -[node name="vsync" parent="Backgroud/SettingsWindow" instance=ExtResource( 7 )] -margin_top = 58.0 -margin_right = 56.0 -margin_bottom = 74.0 -focus_neighbour_top = NodePath("../fullscreen") -focus_neighbour_bottom = NodePath("../bullet lights") -size_flags_horizontal = 0 -theme = null -text = "Vsync" - -[node name="bullet lights" type="CheckBox" parent="Backgroud/SettingsWindow"] -margin_top = 78.0 -margin_right = 157.0 -margin_bottom = 94.0 -focus_neighbour_top = NodePath("../vsync") -focus_neighbour_bottom = NodePath("../BackButton") -pressed = true -text = "bullet lights" - -[node name="BackButton" type="Button" parent="Backgroud/SettingsWindow"] -unique_name_in_owner = true -margin_top = 98.0 -margin_right = 32.0 -margin_bottom = 112.0 -focus_neighbour_top = NodePath("../bullet lights") -focus_neighbour_bottom = NodePath("../VolumeBox/VolumeSlider") -size_flags_horizontal = 0 -text = "Back" -align = 0 -__meta__ = { -"_edit_use_anchors_": false -} - -[connection signal="gui_input" from="Backgroud/SettingsWindow/VolumeBox/VolumeSlider" to="Backgroud/SettingsWindow/VolumeBox/VolumeSlider" method="_on_VolumeSlider_gui_input"] -[connection signal="value_changed" from="Backgroud/SettingsWindow/VolumeBox/VolumeSlider" to="Backgroud/SettingsWindow/VolumeBox/VolumeSlider" method="_on_value_changed"] -[connection signal="resolution_changed" from="Backgroud/SettingsWindow/ResolutionBox/UIResolutionSelector" to="." method="_on_UIResolutionSelector_resolution_changed"] -[connection signal="toggled" from="Backgroud/SettingsWindow/fullscreen" to="." method="_on_UIFullscreenCheckbox_toggled"] -[connection signal="toggled" from="Backgroud/SettingsWindow/vsync" to="." method="_on_UIVsyncCheckbox_toggled"] -[connection signal="toggled" from="Backgroud/SettingsWindow/bullet lights" to="." method="_on_bullet_lights_toggled"] -[connection signal="pressed" from="Backgroud/SettingsWindow/BackButton" to="." method="_on_BackButton_pressed"] diff --git a/ui/scripts/GameOverScreen.gd b/ui/scripts/GameOverScreen.gd deleted file mode 100644 index 2c76587..0000000 --- a/ui/scripts/GameOverScreen.gd +++ /dev/null @@ -1,25 +0,0 @@ -extends Node -export var hole = false -onready var highscoreLabel = $HighscoreLabel -var USE_TOUCH = OS.has_touchscreen_ui_hint() - - -func _ready(): - $Score.text = ("Score = " + str(playerstats.recent_score)) - set_highscore_label() - $TouchScreenButton.visible = USE_TOUCH - if hole: - $AnimatedSprite.play("hole") - var save_data = SaveAndLoad.load_data_from_file() - if playerstats.recent_score >= save_data.highscore: - $HighscoreLabel.hide() - - -func _input(event): - if event.is_action("ui_cancel"): - Game.transition("res://ui/scenes/StartMenu.tscn") - - -func set_highscore_label(): - var save_data = SaveAndLoad.load_data_from_file() - highscoreLabel.text = "Highscore = " + str(save_data.highscore) diff --git a/ui/scripts/HpUi.gd b/ui/scripts/HpUi.gd deleted file mode 100644 index 12ee4de..0000000 --- a/ui/scripts/HpUi.gd +++ /dev/null @@ -1,25 +0,0 @@ -extends Control - -export var hearts = 5 setget set_hearts -export var max_hearts = 5 setget set_max_hearts -onready var fullHearts = $FullHarts -onready var emptyHearts = $EmptyHarts - - -func set_hearts(value): - hearts = clamp(value, 0, max_hearts) - if fullHearts != null: - fullHearts.rect_size.x = hearts * 15 - - -func set_max_hearts(value): - max_hearts = max(value, 1) - self.hearts = min(hearts, max_hearts) - if emptyHearts != null: - emptyHearts.rect_size.x = max_hearts * 15 - - -func _ready(): - self.hearts = playerstats.hp - playerstats.connect("hp_changed", self, "set_hearts") - playerstats.connect("max_hp_changed", self, "set_max_hearts") diff --git a/ui/scripts/Joystick.gd b/ui/scripts/Joystick.gd deleted file mode 100644 index 19d64a9..0000000 --- a/ui/scripts/Joystick.gd +++ /dev/null @@ -1,51 +0,0 @@ -extends TouchScreenButton - - -func angle_to_vec(angle: float) -> Vector2: - return Vector2(cos(angle), sin(angle)) - - -func weighted_average(a: Vector2, b: Vector2, weight: float) -> Vector2: - return a * weight + b * (1.0 - weight) - - -var radius: float -var center: Vector2 -var event_index = -1 -var in_use: bool = false -var force: Vector2 = Vector2() -const FRICTION = 400 -onready var handle = $"%Handle" - - -func _ready(): - radius = normal.get_width() * global_scale.x / 2 - center = global_position + Vector2(radius, radius) - handle.global_position = center - - -func _input(event): - if event is InputEventScreenDrag || (event is InputEventScreenTouch && event.is_pressed()): - var dist = event.position.distance_to(center) - - if dist <= radius or event.get_index() == event_index: - event_index = event.get_index() - in_use = true - - var clamped_dist = min(dist, radius) - var angle = event.position.angle_to_point(center) - - force = angle_to_vec(angle) * clamped_dist / radius - - handle.global_position = center + force.normalized() * clamped_dist - - if event is InputEventScreenTouch and !event.is_pressed() and event.get_index() == event_index: - event_index = -1 - in_use = false - - -func _process(delta): - # Return the button to the center of the joystick - if !in_use: - handle.global_position = weighted_average(handle.global_position, center, 0.8) - force = force.move_toward(Vector2.ZERO, FRICTION * delta) diff --git a/ui/scripts/StartMenu.gd b/ui/scripts/StartMenu.gd deleted file mode 100644 index 0cd31e2..0000000 --- a/ui/scripts/StartMenu.gd +++ /dev/null @@ -1,24 +0,0 @@ -extends Node -var USE_TOUCH = OS.has_touchscreen_ui_hint() -var on = false - -onready var highscoreLabel = $Label - - -func _input(event): - if on: - if event.is_action("shoot_1"): - Game.transition("res://world/World.tscn") - if event.is_action("ui_cancel"): - Game.exit() - - -func _ready(): - var save_data = SaveAndLoad.load_data_from_file() - highscoreLabel.text = "Highscore = " + str(save_data.highscore) - if USE_TOUCH: - $MobileControls/Attack.visible = true - $AnimatedSprite.play("default") - $MobileControls/Attack.visible = USE_TOUCH - yield(get_tree().create_timer(.3), "timeout") - on = true diff --git a/ui/scripts/UIResolutionSelector.gd b/ui/scripts/UIResolutionSelector.gd deleted file mode 100644 index e01a440..0000000 --- a/ui/scripts/UIResolutionSelector.gd +++ /dev/null @@ -1,26 +0,0 @@ -# Scene with an OptionButton to select the resolution from a list of options -extends OptionButton -var focused_now -# Emitted when the selected resolution changes. -signal resolution_changed(new_resolution) - - -func _update_selected_item(text: String) -> void: - # The resolution options are written in the form "XRESxYRES". - # Using `split_floats` we get an array with both values as floats. - var values := text.split_floats("x") - # Emit a signal for informing the newly selected resolution - emit_signal("resolution_changed", Vector2(values[0], values[1])) - - -func _on_OptionButton_item_selected(_index: int) -> void: - _update_selected_item(self.text) - - -func _on_OptionButton_item_focused(index): - focused_now = index - - -func _on_OptionButton_gui_input(event): - if event.is_action("ui_accept") and focused_now != null: - _on_OptionButton_item_selected(focused_now) diff --git a/ui/scripts/Volume.gd b/ui/scripts/Volume.gd deleted file mode 100644 index 2ff2ad5..0000000 --- a/ui/scripts/Volume.gd +++ /dev/null @@ -1,18 +0,0 @@ -extends HSlider -export var audio_bus_name := "Master" -onready var _bus := AudioServer.get_bus_index(audio_bus_name) - - -func _ready() -> void: - value = db2linear(AudioServer.get_bus_volume_db(_bus)) - - -func _on_value_changed(value: float) -> void: - AudioServer.set_bus_volume_db(_bus, linear2db(value)) - - -func _on_VolumeSlider_gui_input(event): - if event.is_action("ui_left"): - value -= .009 - elif event.is_action("ui_right"): - value += .009 diff --git a/ui/scripts/WeaponUi.gd b/ui/scripts/WeaponUi.gd deleted file mode 100644 index b3705b8..0000000 --- a/ui/scripts/WeaponUi.gd +++ /dev/null @@ -1,13 +0,0 @@ -extends Control - -onready var laser := $Laser -onready var rocket := $Rocket -onready var split := $Split -onready var flak := $Flak - - -func _process(_delta) -> void: - laser.visible = playerstats.gun == "lasers" - flak.visible = playerstats.gun == "flak" - split.visible = playerstats.gun == "splitshot" - rocket.visible = playerstats.gun == "rockets" diff --git a/ui/scripts/pausemenu.gd b/ui/scripts/pausemenu.gd deleted file mode 100644 index ea08083..0000000 --- a/ui/scripts/pausemenu.gd +++ /dev/null @@ -1,43 +0,0 @@ -extends Control - -var setting = false -export var trigger = "pause" - -onready var main_menu_button = $"%MainMenuButton" -onready var settings = $"%settings" - - -func _input(event): - if event.is_action_pressed(trigger): - var tree = get_tree() - tree.paused = not tree.paused - visible = tree.paused - if tree.paused: - main_menu_button.grab_focus() - else: - settings.hide() - - -func _exit_tree(): - get_tree().paused = false - - -func _on_settings_back(): - settings.visible = false - setting = false - yield(get_tree(), "idle_frame") - main_menu_button.grab_focus() - - -func _on_options_pressed(): - if setting != true: - setting = true - settings.called() - - -func _on_exit_pressed(): - Game.exit() - - -func _on_MainMenuButton_pressed(): - Game.transition("res://ui/scenes/StartMenu.tscn") diff --git a/ui/scripts/settings.gd b/ui/scripts/settings.gd deleted file mode 100644 index f1b3446..0000000 --- a/ui/scripts/settings.gd +++ /dev/null @@ -1,29 +0,0 @@ -extends Control - -signal back - - -func called(): - show() - $"%BackButton".grab_focus() - - -func _on_UIResolutionSelector_resolution_changed(new_resolution: Vector2) -> void: - OS.set_window_size(new_resolution) - - -func _on_UIFullscreenCheckbox_toggled(button_pressed: bool) -> void: - OS.window_fullscreen = button_pressed - - -func _on_UIVsyncCheckbox_toggled(button_pressed: bool) -> void: - OS.vsync_enabled = button_pressed - - -func _on_BackButton_pressed(): - emit_signal("back") - - -func _on_bullet_lights_toggled(button_pressed): - get_tree().call_group("pbullet", "set_lights", button_pressed) - ProjectSettings.set_setting("global/bullet_lights", button_pressed) diff --git a/world/EnemyHolder.gd b/world/EnemyHolder.gd deleted file mode 100644 index 61ec512..0000000 --- a/world/EnemyHolder.gd +++ /dev/null @@ -1,3 +0,0 @@ -extends Node2D - -onready var target = get_parent().get_node("CanvasLayer2/Background/Ship") diff --git a/world/World.gd b/world/World.gd deleted file mode 100644 index 82d8ecd..0000000 --- a/world/World.gd +++ /dev/null @@ -1,81 +0,0 @@ -extends Node - -var count2 -var count = 0 -var score = 0 setget set_score -var USE_TOUCH = OS.has_touchscreen_ui_hint() -onready var scoreLabel = $CanvasLayer2/Background/ScoreLabel - - -func _ready(): - if playerstats.dev_mode: - $CanvasLayer2/HpUi.hide() - $CanvasLayer2/WeaponUi.hide() - scoreLabel.hide() - - -func set_score(value): - score = value - update_score_label() - if score >= 1000: - if count2 != 1: - count2 = 1 - var addorno = 1 - if playerstats.hp != playerstats.max_hp: - addorno += 1 - playerstats.max_hp += 1 - playerstats.hp += addorno - if addorno == 2: - announce("congrats on those hearts") - else: - announce("congrats on that heart") - - if score >= 10000: - if count != 1: - count = 1 - var save_data = SaveAndLoad.load_data_from_file() - save_data.unlocked2 = true - SaveAndLoad.save_data_to_file(save_data) - print("saved?") - if score >= 30000: - Game.transition("res://ui/scenes/Win.tscn") - - -func update_score_label(): - scoreLabel.text = "Score = " + str(score) - - -func update_save_data(): - var save_data = SaveAndLoad.load_data_from_file() - if score > save_data.highscore: - save_data.highscore = score - SaveAndLoad.save_data_to_file(save_data) - - -func _on_Ship_player_death(): - playerstats.max_hp = 3 - playerstats.recent_score = score - $CanvasLayer2/Background/HpUi.visible = false - playerstats.hp = playerstats.max_hp - update_save_data() - yield(get_tree().create_timer(1), "timeout") - Game.transition("res://ui/scenes/GameOverScreen.tscn") - - -onready var speaker = $CanvasLayer2/Background/anouncementlabel -onready var confetti = $CanvasLayer2/Background/anouncementlabel/confetti - - -func announce(text): - speaker.text = text - confetti.emitting = true - yield(get_tree().create_timer(8), "timeout") - confetti.emitting = false - speaker.text = " " - - -func _process(_delta): - if playerstats.power == true: - $CanvasLayer2/Background/powerup.show() - else: - $CanvasLayer2/Background/powerup.hide() diff --git a/world/World.tscn b/world/World.tscn deleted file mode 100644 index 88a61af..0000000 --- a/world/World.tscn +++ /dev/null @@ -1,189 +0,0 @@ -[gd_scene load_steps=16 format=2] - -[ext_resource path="res://world/World.gd" type="Script" id=1] -[ext_resource path="res://ui/scenes/pause.tscn" type="PackedScene" id=2] -[ext_resource path="res://effects/Stars.tscn" type="PackedScene" id=3] -[ext_resource path="res://enemy/scenes/EnemySpawner.tscn" type="PackedScene" id=4] -[ext_resource path="res://ui/scenes/WeaponUi.tscn" type="PackedScene" id=5] -[ext_resource path="res://world/EnemyHolder.gd" type="Script" id=6] -[ext_resource path="res://ui/scenes/HpUi.tscn" type="PackedScene" id=7] -[ext_resource path="res://player/scenes/Ship.tscn" type="PackedScene" id=8] -[ext_resource path="res://fonts/fonty.tres" type="DynamicFont" id=9] -[ext_resource path="res://ui/buttontheme.tres" type="Theme" id=10] -[ext_resource path="res://PowerUp.tscn" type="PackedScene" id=11] -[ext_resource path="res://fonts/04b-19.tres" type="DynamicFont" id=12] - -[sub_resource type="Shader" id=6] -code = "shader_type canvas_item; - -uniform float vignette_intensity = 0.4; -uniform float vignette_opacity : hint_range(0.0, 1.0) = 0.5; -uniform vec4 vignette_rgb : hint_color = vec4(0.0, 0.0, 0.0, 1.0); - -float vignette(vec2 uv){ - uv *= 1.0 - uv.xy; - float vignette = uv.x * uv.y * 15.0; - return pow(vignette, vignette_intensity * vignette_opacity); -} - -void fragment(){ - vec4 color = texture(SCREEN_TEXTURE, SCREEN_UV); - vec4 text = texture(TEXTURE, UV); - - text.rgba *= (vignette_rgb.rgba); - text.rgba *= (1.0 - vignette(UV)); - - COLOR = vec4((text.rgb)*color.rgb,text.a); -}" - -[sub_resource type="ShaderMaterial" id=7] -shader = SubResource( 6 ) -shader_param/vignette_intensity = 4.829 -shader_param/vignette_opacity = 0.12 -shader_param/vignette_rgb = Color( 0, 0, 0, 1 ) - -[sub_resource type="RectangleShape2D" id=4] -extents = Vector2( 19.125, 183 ) - -[node name="World" type="Node" groups=["World"]] -script = ExtResource( 1 ) - -[node name="Camera2D" type="Camera2D" parent="."] -position = Vector2( 160, 90 ) -z_index = 1 -current = true - -[node name="EnemyHolder" type="Node2D" parent="."] -script = ExtResource( 6 ) - -[node name="CanvasLayer2" type="Control" parent="."] -anchor_right = 1.0 -anchor_bottom = 1.0 - -[node name="ColorRect" type="ColorRect" parent="CanvasLayer2"] -anchor_right = 1.0 -anchor_bottom = 1.0 -margin_left = -24.0 -margin_top = -22.0 -margin_right = 28.0 -margin_bottom = 19.0 -color = Color( 0.105882, 0.105882, 0.105882, 1 ) - -[node name="Background" type="Control" parent="CanvasLayer2"] -material = SubResource( 7 ) -anchor_right = 1.0 -anchor_bottom = 1.0 -__meta__ = { -"_edit_lock_": true -} - -[node name="WeaponUi" parent="CanvasLayer2/Background" instance=ExtResource( 5 )] -margin_left = 31.0 -margin_top = 5.0 -margin_right = -269.0 -margin_bottom = -159.0 - -[node name="HpUi" parent="CanvasLayer2/Background" instance=ExtResource( 7 )] -margin_left = 242.0 -margin_top = 5.0 -margin_right = -11.0 -margin_bottom = -164.0 - -[node name="ScoreLabel" type="Label" parent="CanvasLayer2/Background"] -anchor_left = 0.5 -anchor_right = 0.5 -margin_left = -91.5 -margin_top = 7.0 -margin_right = 91.5 -margin_bottom = 24.0 -custom_fonts/font = ExtResource( 12 ) -text = "Score = 0" -align = 1 -autowrap = true - -[node name="powerup" type="Label" parent="CanvasLayer2/Background"] -visible = false -anchor_right = 1.0 -margin_left = 134.0 -margin_top = 156.0 -margin_right = -3.0 -margin_bottom = 173.0 -custom_fonts/font = ExtResource( 9 ) -text = "POWER UP!!!" -align = 1 -autowrap = true -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Stars" parent="CanvasLayer2/Background" instance=ExtResource( 3 )] - -[node name="EnemySpawner" parent="CanvasLayer2/Background" instance=ExtResource( 4 )] -position = Vector2( 320, 0 ) - -[node name="walls" type="StaticBody2D" parent="CanvasLayer2/Background"] -position = Vector2( -15, 0 ) -collision_layer = 8 -collision_mask = 16 - -[node name="CollisionShape2D" type="CollisionShape2D" parent="CanvasLayer2/Background/walls"] -position = Vector2( -3, 80 ) -shape = SubResource( 4 ) - -[node name="left" type="Position2D" parent="CanvasLayer2/Background/walls/CollisionShape2D"] -position = Vector2( 19, -79 ) - -[node name="bottom" type="Position2D" parent="CanvasLayer2/Background/walls/CollisionShape2D"] -position = Vector2( 19, 100 ) - -[node name="CollisionShape2D4" type="CollisionShape2D" parent="CanvasLayer2/Background/walls"] -position = Vector2( 378, 90 ) -shape = SubResource( 4 ) - -[node name="CollisionShape2D2" type="CollisionShape2D" parent="CanvasLayer2/Background/walls"] -position = Vector2( 175, 198 ) -rotation = 1.5708 -shape = SubResource( 4 ) - -[node name="CollisionShape2D3" type="CollisionShape2D" parent="CanvasLayer2/Background/walls"] -position = Vector2( 175, -18 ) -rotation = 1.5708 -shape = SubResource( 4 ) - -[node name="pause" parent="CanvasLayer2/Background" instance=ExtResource( 2 )] -visible = false - -[node name="anouncementlabel" type="Label" parent="CanvasLayer2/Background"] -margin_left = 3.0 -margin_top = 163.0 -margin_right = 189.0 -margin_bottom = 177.0 -theme = ExtResource( 10 ) -align = 1 - -[node name="confetti" type="CPUParticles2D" parent="CanvasLayer2/Background/anouncementlabel"] -show_behind_parent = true -position = Vector2( 83, 2 ) -emitting = false -amount = 80 -emission_shape = 2 -emission_rect_extents = Vector2( 80, 2 ) -direction = Vector2( 0, -1 ) -spread = 140.0 -gravity = Vector2( 0, -50 ) -initial_velocity = 20.0 -linear_accel = 20.0 -scale_amount = 3.0 -scale_amount_random = 1.0 -color = Color( 0.968627, 0, 1, 1 ) -hue_variation = 1.0 -hue_variation_random = 1.0 - -[node name="Ship" parent="CanvasLayer2/Background" instance=ExtResource( 8 )] -position = Vector2( 25, 77 ) -z_index = 1 - -[node name="PowerUp" parent="." instance=ExtResource( 11 )] -position = Vector2( 226, 57 ) - -[connection signal="player_death" from="CanvasLayer2/Background/Ship" to="." method="_on_Ship_player_death"] |