From 9cf6944ac85e7c1b9644b9f8c3b655f767281f5d Mon Sep 17 00:00:00 2001 From: Lexi Quinn Date: Fri, 17 Nov 2023 20:49:38 +1100 Subject: [PATCH] multiplayer pretty much works now i think --- Assets/TextureAtlases/funbox.glb | Bin 0 -> 13044 bytes Assets/TextureAtlases/funbox.glb.import | 32 ++ .../ClassCards/Assault/tower_stats.tres | 4 +- .../ClassCards/Blowdart/card_blowdart.tres | 2 +- .../BombLauncher/bomb_projectile.gd | 2 + .../DamageEnhancer/card_damage_enhancer.tres | 11 - .../Flamethrower/card_flamethrower.tres | 26 +- .../Flamethrower/flame_particles.tres | 19 ++ .../Flamethrower/tower_flamethrower.gd | 31 +- .../Flamethrower/tower_flamethrower.tscn | 104 ++---- .../ClassCards/Flamethrower/tower_stats.tres | 25 ++ .../Flamethrower/weapon_flamethrower.gd | 35 +-- .../Flamethrower/weapon_flamethrower.tscn | 113 ++----- .../ClassCards/Flamethrower/weapon_stats.tres | 25 ++ .../GammaLaser/card_gamma_laser.tres | 11 - .../ClassCards/Lightning/card_lightning.tres | 11 - .../ClassCards/Reactor/card_reactor.tres | 30 +- .../Reactor/radiation_particles.tres | 19 ++ .../ClassCards/Reactor/reactortower.gd | 17 - .../ClassCards/Reactor/reactorweapon.gd | 30 -- .../ClassCards/Reactor/tower_reactor.gd | 15 + .../ClassCards/Reactor/tower_reactor.tscn | 85 ++--- .../ClassCards/Reactor/tower_stats.tres | 25 ++ .../ClassCards/Reactor/weapon_reactor.gd | 7 + .../ClassCards/Reactor/weapon_reactor.tscn | 112 ++----- .../ClassCards/Reactor/weapon_stats.tres | 25 ++ .../Refridgerator/card_refridgerator.tres | 19 -- .../ClassCards/Refridgerator/fridgetower.gd | 17 - .../Refridgerator/refridgeratorweapon.gd | 30 -- .../Refridgerator/tower_refridgerator.tscn | 76 ----- .../Refridgerator/weapon_refridgerator.tscn | 100 ------ .../Refrigerator/card_refrigerator.tres | 23 ++ .../Refrigerator/cold_particles.tres | 19 ++ .../Refrigerator/tower_refrigerator.gd | 15 + .../Refrigerator/tower_refrigerator.tscn | 43 +++ .../ClassCards/Refrigerator/tower_stats.tres | 25 ++ .../Refrigerator/weapon_refrigerator.tscn | 21 ++ .../ClassCards/Refrigerator/weapon_stats.tres | 25 ++ .../RocketLauncher/rocket_projectile.tscn | 2 - .../RocketLauncher/weapon_rocket_launcher.gd | 1 + .../ClassCards/Sniper/weapon_stats.tres | 2 +- PCs/hero.gd | 2 +- PCs/hero.tscn | 4 +- Scenes/Menus/audio_options.tscn | 4 + Scenes/Menus/gameplay_options.tscn | 167 ++++++++++ Scenes/Menus/graphics_options.tscn | 125 ++++++++ Scenes/Menus/keybind_options.tscn | 22 ++ Scenes/Menus/multiplayer_lobby.tscn | 1 - Scenes/Menus/options_menu.tscn | 297 +----------------- Scenes/Menus/singleplayer_lobby.tscn | 2 - Scenes/Towers/range_affecting_tower.tscn | 7 + Scenes/Towers/shapecast_tower.tscn | 14 + Scenes/UI/chatbox.tscn | 40 ++- Scenes/Weapons/shapecast_weapon.tscn | 44 +++ Scenes/tower_base.tscn | 15 +- Scenes/tower_frame.tscn | 16 +- Scripts/Projectiles/explosive_projectile.gd | 9 + Scripts/Projectiles/homing_projectile.gd | 7 +- Scripts/Projectiles/projectile.gd | 10 + Scripts/Resources/player_graphics_settings.gd | 38 +++ Scripts/Resources/player_preferences.gd | 25 -- Scripts/Towers/hitscan_tower.gd | 2 + Scripts/Towers/projectile_tower.gd | 1 + Scripts/Towers/range_affecting_tower.gd | 32 ++ Scripts/Towers/shapecast_tower.gd | 48 +++ Scripts/Towers/tower.gd | 9 + Scripts/Weapons/projectile_weapon.gd | 1 + Scripts/Weapons/shapecast_weapon.gd | 55 ++++ Scripts/card_hand.gd | 2 +- Scripts/chatbox.gd | 56 +++- Scripts/data.gd | 10 +- Scripts/game.gd | 10 +- Scripts/gameplay_options.gd | 46 +++ Scripts/graphics_options.gd | 36 +++ Scripts/keybind_options.gd | 63 ++++ Scripts/multiplayer_lobby.gd | 5 +- Scripts/options_menu.gd | 127 +------- Scripts/singleplayer_lobby.gd | 1 + Scripts/tower_base.gd | 6 +- Worlds/GreenPlanet/Levels/first_level.tscn | 6 +- Worlds/GreenPlanet/tilemap.tres | 8 +- funbox.glb | Bin 0 -> 13044 bytes funbox.glb.import | 45 +++ funbox.tscn | 13 + funboxtex.png | Bin 0 -> 1801 bytes funboxtex.png.import | 34 ++ textmesh.res | Bin 0 -> 7420 bytes 87 files changed, 1476 insertions(+), 1223 deletions(-) create mode 100644 Assets/TextureAtlases/funbox.glb create mode 100644 Assets/TextureAtlases/funbox.glb.import delete mode 100644 PCs/Universal/ClassCards/DamageEnhancer/card_damage_enhancer.tres create mode 100644 PCs/Universal/ClassCards/Flamethrower/flame_particles.tres create mode 100644 PCs/Universal/ClassCards/Flamethrower/tower_stats.tres create mode 100644 PCs/Universal/ClassCards/Flamethrower/weapon_stats.tres delete mode 100644 PCs/Universal/ClassCards/GammaLaser/card_gamma_laser.tres delete mode 100644 PCs/Universal/ClassCards/Lightning/card_lightning.tres create mode 100644 PCs/Universal/ClassCards/Reactor/radiation_particles.tres delete mode 100644 PCs/Universal/ClassCards/Reactor/reactortower.gd delete mode 100644 PCs/Universal/ClassCards/Reactor/reactorweapon.gd create mode 100644 PCs/Universal/ClassCards/Reactor/tower_reactor.gd create mode 100644 PCs/Universal/ClassCards/Reactor/tower_stats.tres create mode 100644 PCs/Universal/ClassCards/Reactor/weapon_reactor.gd create mode 100644 PCs/Universal/ClassCards/Reactor/weapon_stats.tres delete mode 100644 PCs/Universal/ClassCards/Refridgerator/card_refridgerator.tres delete mode 100644 PCs/Universal/ClassCards/Refridgerator/fridgetower.gd delete mode 100644 PCs/Universal/ClassCards/Refridgerator/refridgeratorweapon.gd delete mode 100644 PCs/Universal/ClassCards/Refridgerator/tower_refridgerator.tscn delete mode 100644 PCs/Universal/ClassCards/Refridgerator/weapon_refridgerator.tscn create mode 100644 PCs/Universal/ClassCards/Refrigerator/card_refrigerator.tres create mode 100644 PCs/Universal/ClassCards/Refrigerator/cold_particles.tres create mode 100644 PCs/Universal/ClassCards/Refrigerator/tower_refrigerator.gd create mode 100644 PCs/Universal/ClassCards/Refrigerator/tower_refrigerator.tscn create mode 100644 PCs/Universal/ClassCards/Refrigerator/tower_stats.tres create mode 100644 PCs/Universal/ClassCards/Refrigerator/weapon_refrigerator.tscn create mode 100644 PCs/Universal/ClassCards/Refrigerator/weapon_stats.tres create mode 100644 Scenes/Menus/audio_options.tscn create mode 100644 Scenes/Menus/gameplay_options.tscn create mode 100644 Scenes/Menus/graphics_options.tscn create mode 100644 Scenes/Menus/keybind_options.tscn create mode 100644 Scenes/Towers/range_affecting_tower.tscn create mode 100644 Scenes/Towers/shapecast_tower.tscn create mode 100644 Scenes/Weapons/shapecast_weapon.tscn create mode 100644 Scripts/Resources/player_graphics_settings.gd create mode 100644 Scripts/Towers/range_affecting_tower.gd create mode 100644 Scripts/Towers/shapecast_tower.gd create mode 100644 Scripts/Weapons/shapecast_weapon.gd create mode 100644 Scripts/gameplay_options.gd create mode 100644 Scripts/graphics_options.gd create mode 100644 Scripts/keybind_options.gd create mode 100644 funbox.glb create mode 100644 funbox.glb.import create mode 100644 funbox.tscn create mode 100644 funboxtex.png create mode 100644 funboxtex.png.import create mode 100644 textmesh.res diff --git a/Assets/TextureAtlases/funbox.glb b/Assets/TextureAtlases/funbox.glb new file mode 100644 index 0000000000000000000000000000000000000000..592f730ce2ef3ea9f794297dcd4385c0a70d5f40 GIT binary patch literal 13044 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 X!9>wiEMaSczMvtZxA=m3i|6S-vw))@ literal 0 HcmV?d00001 diff --git a/Assets/TextureAtlases/funbox.glb.import b/Assets/TextureAtlases/funbox.glb.import new file mode 100644 index 0000000..76c09c2 --- /dev/null +++ b/Assets/TextureAtlases/funbox.glb.import @@ -0,0 +1,32 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dunbllusdlmcb" +path="res://.godot/imported/funbox.glb-41e82e7ba643b674dacd582affc5d422.scn" + +[deps] + +source_file="res://Assets/TextureAtlases/funbox.glb" +dest_files=["res://.godot/imported/funbox.glb-41e82e7ba643b674dacd582affc5d422.scn"] + +[params] + +nodes/root_type="Node3D" +nodes/root_name="Scene Root" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +import_script/path="" +_subresources={} +gltf/embedded_image_handling=1 diff --git a/PCs/Universal/ClassCards/Assault/tower_stats.tres b/PCs/Universal/ClassCards/Assault/tower_stats.tres index 2779bea..6500c95 100644 --- a/PCs/Universal/ClassCards/Assault/tower_stats.tres +++ b/PCs/Universal/ClassCards/Assault/tower_stats.tres @@ -6,12 +6,12 @@ [sub_resource type="Resource" id="Resource_bukji"] script = ExtResource("1_cwxf1") key = "Fire Delay" -value = 1.0 +value = 0.5 [sub_resource type="Resource" id="Resource_2e75s"] script = ExtResource("1_cwxf1") key = "Damage" -value = 0.5 +value = 1.0 [sub_resource type="Resource" id="Resource_1vpnf"] script = ExtResource("1_cwxf1") diff --git a/PCs/Universal/ClassCards/Blowdart/card_blowdart.tres b/PCs/Universal/ClassCards/Blowdart/card_blowdart.tres index fc603e3..d07e90e 100644 --- a/PCs/Universal/ClassCards/Blowdart/card_blowdart.tres +++ b/PCs/Universal/ClassCards/Blowdart/card_blowdart.tres @@ -14,7 +14,7 @@ region = Rect2(0, 0, 64, 64) [resource] script = ExtResource("1_nobd8") title = "Blowdart" -rarity = 2 +rarity = 1 faction = 0 sprite = SubResource("AtlasTexture_jl74p") turret_scene = ExtResource("4_wvh75") diff --git a/PCs/Universal/ClassCards/BombLauncher/bomb_projectile.gd b/PCs/Universal/ClassCards/BombLauncher/bomb_projectile.gd index 5fd6b89..3262567 100644 --- a/PCs/Universal/ClassCards/BombLauncher/bomb_projectile.gd +++ b/PCs/Universal/ClassCards/BombLauncher/bomb_projectile.gd @@ -7,6 +7,8 @@ var bounces := 0 func _ready() -> void: apply_central_impulse(direction * force) + if owner_id == 0: + max_bounces = 0 func _on_body_entered(_body: Node) -> void: diff --git a/PCs/Universal/ClassCards/DamageEnhancer/card_damage_enhancer.tres b/PCs/Universal/ClassCards/DamageEnhancer/card_damage_enhancer.tres deleted file mode 100644 index 114da6a..0000000 --- a/PCs/Universal/ClassCards/DamageEnhancer/card_damage_enhancer.tres +++ /dev/null @@ -1,11 +0,0 @@ -[gd_resource type="Resource" script_class="Card" load_steps=3 format=3 uid="uid://0p0i7m5ciwtq"] - -[ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_hj6hq"] -[ext_resource type="Texture2D" uid="uid://ca4lwwd3e0y73" path="res://PCs/Universal/ClassCards/Assault/g_assault.tres" id="2_irvam"] - -[resource] -script = ExtResource("1_hj6hq") -title = "Damage Enhancer" -rarity = 2 -faction = 0 -sprite = ExtResource("2_irvam") diff --git a/PCs/Universal/ClassCards/Flamethrower/card_flamethrower.tres b/PCs/Universal/ClassCards/Flamethrower/card_flamethrower.tres index 7e1f403..678a4ed 100644 --- a/PCs/Universal/ClassCards/Flamethrower/card_flamethrower.tres +++ b/PCs/Universal/ClassCards/Flamethrower/card_flamethrower.tres @@ -1,19 +1,23 @@ -[gd_resource type="Resource" script_class="Card" load_steps=7 format=3 uid="uid://1xke2uy2vfuf"] +[gd_resource type="Resource" script_class="Card" load_steps=8 format=3 uid="uid://dg4pjt47q8xpw"] [ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_xmwih"] -[ext_resource type="Resource" uid="uid://5ywipj3632u8" path="res://Resources/TurretStats/flametower.tres" id="2_80w0f"] -[ext_resource type="Texture2D" uid="uid://jmxhiwsiw1f5" path="res://Assets/TextureAtlases/g_glue_gun.tres" id="2_ukaax"] -[ext_resource type="PackedScene" uid="uid://dvqk2lysu02gf" path="res://PCs/Universal/ClassCards/Flamethrower/tower_flamethrower.tscn" id="3_yfmjg"] -[ext_resource type="Resource" uid="uid://c4ihsd13o1esd" path="res://Resources/WeaponStats/flamethrower.tres" id="4_rdoaa"] -[ext_resource type="PackedScene" uid="uid://cprppqfd2wf6s" path="res://PCs/Universal/ClassCards/Flamethrower/weapon_flamethrower.tscn" id="5_6v5br"] +[ext_resource type="Texture2D" uid="uid://oblavj8vj30n" path="res://PCs/Universal/ClassCards/GlueLauncher/glue_gun.png" id="2_ocjdv"] +[ext_resource type="Resource" uid="uid://cdtjbxs21peqg" path="res://PCs/Universal/ClassCards/Flamethrower/tower_stats.tres" id="3_sjxkl"] +[ext_resource type="PackedScene" uid="uid://dhv7m4lky7bd8" path="res://PCs/Universal/ClassCards/Flamethrower/weapon_flamethrower.tscn" id="4_800j1"] +[ext_resource type="PackedScene" uid="uid://dkoj1766ygo3f" path="res://PCs/Universal/ClassCards/Flamethrower/tower_flamethrower.tscn" id="4_rgkdc"] +[ext_resource type="Resource" uid="uid://yjknwdimtm8g" path="res://PCs/Universal/ClassCards/Flamethrower/weapon_stats.tres" id="5_qi4e4"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_bcolm"] +atlas = ExtResource("2_ocjdv") +region = Rect2(0, 0, 64, 64) [resource] script = ExtResource("1_xmwih") title = "Flamethrower" rarity = 2 faction = 0 -sprite = ExtResource("2_ukaax") -turret = ExtResource("3_yfmjg") -weapon = ExtResource("5_6v5br") -weapon_stats = ExtResource("4_rdoaa") -tower_stats = ExtResource("2_80w0f") +sprite = SubResource("AtlasTexture_bcolm") +turret_scene = ExtResource("4_rgkdc") +weapon_scene = ExtResource("4_800j1") +weapon_stats = ExtResource("5_qi4e4") +tower_stats = ExtResource("3_sjxkl") diff --git a/PCs/Universal/ClassCards/Flamethrower/flame_particles.tres b/PCs/Universal/ClassCards/Flamethrower/flame_particles.tres new file mode 100644 index 0000000..b178753 --- /dev/null +++ b/PCs/Universal/ClassCards/Flamethrower/flame_particles.tres @@ -0,0 +1,19 @@ +[gd_resource type="ParticleProcessMaterial" load_steps=3 format=3 uid="uid://gyeamtekshor"] + +[sub_resource type="Gradient" id="Gradient_eiw3y"] +interpolation_color_space = 2 +offsets = PackedFloat32Array(0, 0.178862, 0.455285, 1) +colors = PackedColorArray(0.94, 0.830333, 0, 1, 1, 0.222923, 0.00252032, 1, 0.517571, 0.0343237, 0.0001635, 1, 0.0352941, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_arw7j"] +gradient = SubResource("Gradient_eiw3y") + +[resource] +direction = Vector3(0, 0, -1) +spread = 15.0 +gravity = Vector3(0, 0, 0) +initial_velocity_min = 3.0 +initial_velocity_max = 3.0 +scale_min = 0.3 +scale_max = 0.3 +color_ramp = SubResource("GradientTexture1D_arw7j") diff --git a/PCs/Universal/ClassCards/Flamethrower/tower_flamethrower.gd b/PCs/Universal/ClassCards/Flamethrower/tower_flamethrower.gd index 3ea4405..7dfa2c4 100644 --- a/PCs/Universal/ClassCards/Flamethrower/tower_flamethrower.gd +++ b/PCs/Universal/ClassCards/Flamethrower/tower_flamethrower.gd @@ -1,27 +1,8 @@ -extends Tower -class_name FlameyTower - -@export var shapecast : ShapeCast3D -@export var particlesystem : GPUParticles3D -@export var status_stats : StatusStats +extends ShapecastTower +class_name FlamethrowerTower -func _process(delta: float) -> void: - super._process(delta) - if targeted_enemy: - particlesystem.emitting = true - else: - particlesystem.emitting = false - - -func shoot(): - for index in shapecast.get_collision_count(): - var target = shapecast.get_collider(index) as CharacterBody3D - var status = StatusOnFire.new() - status.stats = status_stats - target.status_manager.add_effect(status) - - -func aim(): - model.look_at(targeted_enemy.global_position) - model.rotation.x = 0.0 +func build_status_object() -> StatusEffect: + var status = StatusDoT.new() + status.stats = status_stats + return status diff --git a/PCs/Universal/ClassCards/Flamethrower/tower_flamethrower.tscn b/PCs/Universal/ClassCards/Flamethrower/tower_flamethrower.tscn index e41e51a..416b8c6 100644 --- a/PCs/Universal/ClassCards/Flamethrower/tower_flamethrower.tscn +++ b/PCs/Universal/ClassCards/Flamethrower/tower_flamethrower.tscn @@ -1,83 +1,47 @@ -[gd_scene load_steps=10 format=3 uid="uid://dvqk2lysu02gf"] +[gd_scene load_steps=11 format=3 uid="uid://dkoj1766ygo3f"] -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Flamethrower/tower_flamethrower.gd" id="1_6dcsj"] -[ext_resource type="Resource" uid="uid://dbanx8taicddm" path="res://Resources/StatusEffects/on_fire.tres" id="2_yo2b7"] +[ext_resource type="PackedScene" uid="uid://8uxu72vjo0cv" path="res://Scenes/Towers/shapecast_tower.tscn" id="1_jagpf"] +[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Flamethrower/tower_flamethrower.gd" id="2_7vewc"] +[ext_resource type="Resource" uid="uid://dbanx8taicddm" path="res://Resources/StatusEffects/on_fire.tres" id="3_aop2h"] +[ext_resource type="Resource" uid="uid://cdtjbxs21peqg" path="res://PCs/Universal/ClassCards/Flamethrower/tower_stats.tres" id="4_by7c8"] -[sub_resource type="Gradient" id="Gradient_kkqms"] -offsets = PackedFloat32Array(0.00591716, 1) -colors = PackedColorArray(0.898039, 0.447059, 0, 1, 1, 0, 0, 0.34902) +[sub_resource type="BoxShape3D" id="BoxShape3D_r367g"] +size = Vector3(2, 2, 3) -[sub_resource type="GradientTexture1D" id="GradientTexture1D_4cwgw"] -gradient = SubResource("Gradient_kkqms") +[sub_resource type="Gradient" id="Gradient_ay233"] +offsets = PackedFloat32Array(0, 0.178862, 0.455285, 1) +colors = PackedColorArray(0.94, 0.830333, 0, 1, 1, 0.222923, 0.00252032, 1, 0.517571, 0.0343237, 0.0001635, 1, 0.0352941, 0, 0, 1) -[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_2nhns"] -direction = Vector3(0, 1, 0) -spread = 20.0 +[sub_resource type="GradientTexture1D" id="GradientTexture1D_7rrxx"] +gradient = SubResource("Gradient_ay233") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_r7587"] +direction = Vector3(0, 0, -1) +spread = 15.0 gravity = Vector3(0, 0, 0) -initial_velocity_min = 5.0 -initial_velocity_max = 5.0 -damping_min = 4.464 -damping_max = 4.464 -color_ramp = SubResource("GradientTexture1D_4cwgw") +initial_velocity_min = 3.0 +initial_velocity_max = 3.0 +color_ramp = SubResource("GradientTexture1D_7rrxx") -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ycjd1"] -transparency = 1 +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_p8aw8"] vertex_color_use_as_albedo = true -[sub_resource type="BoxMesh" id="BoxMesh_q83y7"] -material = SubResource("StandardMaterial3D_ycjd1") +[sub_resource type="BoxMesh" id="BoxMesh_h4c6o"] +material = SubResource("StandardMaterial3D_p8aw8") size = Vector3(0.3, 0.3, 0.3) -[sub_resource type="BoxShape3D" id="BoxShape3D_vck5q"] -size = Vector3(2.145, 3.125, 2.415) +[node name="ShapecastTower" instance=ExtResource("1_jagpf")] +script = ExtResource("2_7vewc") +status_stats = ExtResource("3_aop2h") +stats = ExtResource("4_by7c8") -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_imgrm"] -transparency = 1 -cull_mode = 2 -shading_mode = 0 -albedo_color = Color(0.686275, 0, 0, 0.278431) - -[node name="Node3D" type="Node3D" node_paths=PackedStringArray("shapecast", "particlesystem", "model", "range_sphere", "minimap_range_sphere")] -script = ExtResource("1_6dcsj") -shapecast = NodePath("Model/Node3D/ShapeCast3D") -particlesystem = NodePath("Model/Node3D/GPUParticles3D") -status_stats = ExtResource("2_yo2b7") -model = NodePath("Model") -range_sphere = NodePath("Model/CSGSphere3D") -minimap_range_sphere = NodePath("Model/CSGSphere3D2") - -[node name="Model" type="Node3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0) - -[node name="CSGBox3D" type="CSGBox3D" parent="Model"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.968366, 0) -size = Vector3(1, 1.25244, 1) - -[node name="CSGBox3D2" type="CSGBox3D" parent="Model"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00567371, -0.780982, -0.514041) -size = Vector3(0.481654, 0.427749, 1.38438) - -[node name="Node3D" type="Node3D" parent="Model"] -transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, -0.807848, -1.2154) - -[node name="GPUParticles3D" type="GPUParticles3D" parent="Model/Node3D"] -amount = 48 -visibility_aabb = AABB(-2.2922, -3.14731, -1.92995, 4.5844, 6.29461, 3.85991) -process_material = SubResource("ParticleProcessMaterial_2nhns") -draw_pass_1 = SubResource("BoxMesh_q83y7") - -[node name="ShapeCast3D" type="ShapeCast3D" parent="Model/Node3D"] -shape = SubResource("BoxShape3D_vck5q") -target_position = Vector3(0, 1.51, 0) +[node name="ShapeCast3D" parent="Yaw" index="0"] +shape = SubResource("BoxShape3D_r367g") +target_position = Vector3(0, 0, -2) collision_mask = 4 -[node name="CSGSphere3D" type="CSGSphere3D" parent="Model"] -visible = false -radius = 7.5 -material = SubResource("StandardMaterial3D_imgrm") - -[node name="CSGSphere3D2" type="CSGSphere3D" parent="Model"] -visible = false -layers = 4 -radius = 7.5 -material = SubResource("StandardMaterial3D_imgrm") +[node name="GPUParticles3D" parent="Yaw/ShapeCast3D" index="0"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.534666) +amount = 16 +process_material = SubResource("ParticleProcessMaterial_r7587") +draw_pass_1 = SubResource("BoxMesh_h4c6o") diff --git a/PCs/Universal/ClassCards/Flamethrower/tower_stats.tres b/PCs/Universal/ClassCards/Flamethrower/tower_stats.tres new file mode 100644 index 0000000..06e0374 --- /dev/null +++ b/PCs/Universal/ClassCards/Flamethrower/tower_stats.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="CardText" load_steps=6 format=3 uid="uid://cdtjbxs21peqg"] + +[ext_resource type="Script" path="res://Scripts/Resources/stat_attribute.gd" id="1_jc00v"] +[ext_resource type="Script" path="res://Scripts/Resources/card_text.gd" id="2_mmknc"] + +[sub_resource type="Resource" id="Resource_j28f4"] +script = ExtResource("1_jc00v") +key = "Fire Delay" +value = 0.5 + +[sub_resource type="Resource" id="Resource_likes"] +script = ExtResource("1_jc00v") +key = "Damage" +value = 0.0 + +[sub_resource type="Resource" id="Resource_b65mk"] +script = ExtResource("1_jc00v") +key = "Range" +value = 3.0 + +[resource] +script = ExtResource("2_mmknc") +target_type = 1 +attributes = Array[ExtResource("1_jc00v")]([SubResource("Resource_j28f4"), SubResource("Resource_likes"), SubResource("Resource_b65mk")]) +text = "Hold to apply Burning to enemies in front of you" diff --git a/PCs/Universal/ClassCards/Flamethrower/weapon_flamethrower.gd b/PCs/Universal/ClassCards/Flamethrower/weapon_flamethrower.gd index 66ce08f..c658aeb 100644 --- a/PCs/Universal/ClassCards/Flamethrower/weapon_flamethrower.gd +++ b/PCs/Universal/ClassCards/Flamethrower/weapon_flamethrower.gd @@ -1,30 +1,7 @@ -extends Weapon +extends ShapecastWeapon +class_name FlamethrowerWeapon -@export var shapecast : ShapeCast3D -@export var particlesystem : GPUParticles3D -@export var status_stats : StatusStats - - -func _ready() -> void: - cooldown = 1.0 / stats.fire_rate - - -func set_raycast_origin(_node): - pass - - -func shoot(): - if other_cooldown <= 0 and stats != null: - other_cooldown = cooldown - particlesystem.emitting = true - $AnimationPlayer.play("shoot") - for index in shapecast.get_collision_count(): - var target = shapecast.get_collider(index) as CharacterBody3D - var status = StatusOnFire.new() - status.stats = status_stats - target.status_manager.add_effect(status) - - -func release_trigger(): - trigger_held = false - particlesystem.emitting = false +func build_status_object() -> StatusEffect: + var status = StatusDoT.new() + status.stats = status_stats + return status diff --git a/PCs/Universal/ClassCards/Flamethrower/weapon_flamethrower.tscn b/PCs/Universal/ClassCards/Flamethrower/weapon_flamethrower.tscn index 9529caf..0500a8a 100644 --- a/PCs/Universal/ClassCards/Flamethrower/weapon_flamethrower.tscn +++ b/PCs/Universal/ClassCards/Flamethrower/weapon_flamethrower.tscn @@ -1,100 +1,23 @@ -[gd_scene load_steps=14 format=3 uid="uid://cprppqfd2wf6s"] +[gd_scene load_steps=8 format=3 uid="uid://dhv7m4lky7bd8"] -[ext_resource type="Texture2D" uid="uid://jmxhiwsiw1f5" path="res://Assets/TextureAtlases/g_glue_gun.tres" id="1_kpb2q"] -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Flamethrower/weapon_flamethrower.gd" id="2_18t5l"] -[ext_resource type="Resource" uid="uid://dbanx8taicddm" path="res://Resources/StatusEffects/on_fire.tres" id="3_2sa8l"] -[ext_resource type="Resource" uid="uid://c4ihsd13o1esd" path="res://Resources/WeaponStats/flamethrower.tres" id="4_ih15j"] +[ext_resource type="PackedScene" uid="uid://dp4gfr5h0tbcd" path="res://Scenes/Weapons/shapecast_weapon.tscn" id="1_ovmdp"] +[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Flamethrower/weapon_flamethrower.gd" id="2_227rf"] +[ext_resource type="Resource" uid="uid://dbanx8taicddm" path="res://Resources/StatusEffects/on_fire.tres" id="3_fqch8"] +[ext_resource type="Resource" uid="uid://yjknwdimtm8g" path="res://PCs/Universal/ClassCards/Flamethrower/weapon_stats.tres" id="4_oafdt"] +[ext_resource type="Texture2D" uid="uid://oblavj8vj30n" path="res://PCs/Universal/ClassCards/GlueLauncher/glue_gun.png" id="5_wdw3e"] +[ext_resource type="Material" uid="uid://gyeamtekshor" path="res://PCs/Universal/ClassCards/Flamethrower/flame_particles.tres" id="6_idhp2"] -[sub_resource type="Animation" id="Animation_n8b32"] -length = 0.001 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath(".:texture:region") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Rect2(0, 0, 64, 64)] -} +[sub_resource type="AtlasTexture" id="AtlasTexture_3hank"] +atlas = ExtResource("5_wdw3e") +region = Rect2(0, 0, 64, 64) -[sub_resource type="Animation" id="Animation_g0h8q"] -resource_name = "shoot" -length = 0.15 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath(".:texture:region") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0, 0.15), -"transitions": PackedFloat32Array(0, 0), -"update": 0, -"values": [Rect2(64, 0, 64, 64), Rect2(0, 0, 64, 64)] -} +[node name="FlamethrowerWeapon" instance=ExtResource("1_ovmdp")] +script = ExtResource("2_227rf") +status_stats = ExtResource("3_fqch8") +stats = ExtResource("4_oafdt") -[sub_resource type="AnimationLibrary" id="AnimationLibrary_ntl6p"] -_data = { -"RESET": SubResource("Animation_n8b32"), -"shoot": SubResource("Animation_g0h8q") -} +[node name="Sprite3D" parent="." index="0"] +texture = SubResource("AtlasTexture_3hank") -[sub_resource type="BoxShape3D" id="BoxShape3D_q7gll"] -size = Vector3(3, 3, 4) - -[sub_resource type="Gradient" id="Gradient_nneoo"] -offsets = PackedFloat32Array(0.00591716, 1) -colors = PackedColorArray(0.898039, 0.447059, 0, 1, 1, 0, 0, 0.34902) - -[sub_resource type="GradientTexture1D" id="GradientTexture1D_gpquw"] -gradient = SubResource("Gradient_nneoo") - -[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_cp5dw"] -direction = Vector3(0, 1, 0) -spread = 20.0 -gravity = Vector3(0, 0, 0) -initial_velocity_min = 5.0 -initial_velocity_max = 5.0 -damping_min = 1.9 -damping_max = 1.9 -color_ramp = SubResource("GradientTexture1D_gpquw") - -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_2yd7w"] -transparency = 1 -vertex_color_use_as_albedo = true - -[sub_resource type="BoxMesh" id="BoxMesh_ggcx2"] -material = SubResource("StandardMaterial3D_2yd7w") -size = Vector3(0.3, 0.3, 0.3) - -[node name="Weapon" type="Sprite3D" node_paths=PackedStringArray("shapecast", "particlesystem")] -layers = 2 -billboard = 1 -texture_filter = 0 -texture = ExtResource("1_kpb2q") -script = ExtResource("2_18t5l") -shapecast = NodePath("ShapeCast3D") -particlesystem = NodePath("GPUParticles3D") -status_stats = ExtResource("3_2sa8l") -stats = ExtResource("4_ih15j") - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -libraries = { -"": SubResource("AnimationLibrary_ntl6p") -} - -[node name="ShapeCast3D" type="ShapeCast3D" parent="."] -transform = Transform3D(0.975695, 0, 0.219131, 0, 1, 0, -0.219131, 0, 0.975695, 0, 0, 0) -shape = SubResource("BoxShape3D_q7gll") -target_position = Vector3(0, 0, -2) -collision_mask = 4 - -[node name="GPUParticles3D" type="GPUParticles3D" parent="."] -transform = Transform3D(0.975695, -0.219131, -9.57852e-09, 0, -4.37114e-08, 1, -0.219131, -0.975695, -4.2649e-08, 0, 0, 0) -amount = 32 -visibility_aabb = AABB(-2.2922, -3.14731, -1.92995, 4.5844, 6.29461, 3.85991) -process_material = SubResource("ParticleProcessMaterial_cp5dw") -draw_pass_1 = SubResource("BoxMesh_ggcx2") +[node name="GPUParticles3D" parent="ShapeCast3D" index="0"] +process_material = ExtResource("6_idhp2") diff --git a/PCs/Universal/ClassCards/Flamethrower/weapon_stats.tres b/PCs/Universal/ClassCards/Flamethrower/weapon_stats.tres new file mode 100644 index 0000000..3227da7 --- /dev/null +++ b/PCs/Universal/ClassCards/Flamethrower/weapon_stats.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="CardText" load_steps=6 format=3 uid="uid://yjknwdimtm8g"] + +[ext_resource type="Script" path="res://Scripts/Resources/card_text.gd" id="1_7qcx8"] +[ext_resource type="Script" path="res://Scripts/Resources/stat_attribute.gd" id="1_g5aby"] + +[sub_resource type="Resource" id="Resource_j28f4"] +script = ExtResource("1_g5aby") +key = "Fire Delay" +value = 0.4 + +[sub_resource type="Resource" id="Resource_likes"] +script = ExtResource("1_g5aby") +key = "Damage" +value = 1.0 + +[sub_resource type="Resource" id="Resource_b65mk"] +script = ExtResource("1_g5aby") +key = "Range" +value = 3.0 + +[resource] +script = ExtResource("1_7qcx8") +target_type = 0 +attributes = Array[ExtResource("1_g5aby")]([SubResource("Resource_j28f4"), SubResource("Resource_likes"), SubResource("Resource_b65mk")]) +text = "Hold to apply Burning to enemies in front of you" diff --git a/PCs/Universal/ClassCards/GammaLaser/card_gamma_laser.tres b/PCs/Universal/ClassCards/GammaLaser/card_gamma_laser.tres deleted file mode 100644 index d9b3277..0000000 --- a/PCs/Universal/ClassCards/GammaLaser/card_gamma_laser.tres +++ /dev/null @@ -1,11 +0,0 @@ -[gd_resource type="Resource" script_class="Card" load_steps=3 format=3 uid="uid://qyhlpglghda3"] - -[ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_goeex"] -[ext_resource type="Texture2D" uid="uid://ca4lwwd3e0y73" path="res://PCs/Universal/ClassCards/Assault/g_assault.tres" id="2_a7b2p"] - -[resource] -script = ExtResource("1_goeex") -title = "Gamma Laser" -rarity = 3 -faction = 0 -sprite = ExtResource("2_a7b2p") diff --git a/PCs/Universal/ClassCards/Lightning/card_lightning.tres b/PCs/Universal/ClassCards/Lightning/card_lightning.tres deleted file mode 100644 index 3198dc7..0000000 --- a/PCs/Universal/ClassCards/Lightning/card_lightning.tres +++ /dev/null @@ -1,11 +0,0 @@ -[gd_resource type="Resource" script_class="Card" load_steps=3 format=3 uid="uid://biy2kw34h5t8n"] - -[ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_oj1u6"] -[ext_resource type="Texture2D" uid="uid://ca4lwwd3e0y73" path="res://PCs/Universal/ClassCards/Assault/g_assault.tres" id="2_eyg7w"] - -[resource] -script = ExtResource("1_oj1u6") -title = "Lightning" -rarity = 4 -faction = 0 -sprite = ExtResource("2_eyg7w") diff --git a/PCs/Universal/ClassCards/Reactor/card_reactor.tres b/PCs/Universal/ClassCards/Reactor/card_reactor.tres index 56a55cc..bfe3b56 100644 --- a/PCs/Universal/ClassCards/Reactor/card_reactor.tres +++ b/PCs/Universal/ClassCards/Reactor/card_reactor.tres @@ -1,19 +1,23 @@ -[gd_resource type="Resource" script_class="Card" load_steps=7 format=3 uid="uid://dra640am6ykri"] +[gd_resource type="Resource" script_class="Card" load_steps=8 format=3 uid="uid://b3o112jw3loiu"] -[ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_7065k"] -[ext_resource type="Texture2D" uid="uid://ca4lwwd3e0y73" path="res://PCs/Universal/ClassCards/Assault/g_assault.tres" id="2_8hvde"] -[ext_resource type="Resource" uid="uid://baa8sauri4218" path="res://Resources/TurretStats/reactor.tres" id="3_ikj6b"] -[ext_resource type="PackedScene" uid="uid://byglhh0etuy6" path="res://PCs/Universal/ClassCards/Reactor/tower_reactor.tscn" id="4_y3lkh"] -[ext_resource type="PackedScene" uid="uid://cpe3b700kwj48" path="res://PCs/Universal/ClassCards/Reactor/weapon_reactor.tscn" id="5_atmmn"] -[ext_resource type="Resource" uid="uid://b5eakeawu3gle" path="res://Resources/WeaponStats/reactor.tres" id="5_erecn"] +[ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_0ciid"] +[ext_resource type="Texture2D" uid="uid://oblavj8vj30n" path="res://PCs/Universal/ClassCards/GlueLauncher/glue_gun.png" id="2_as4jg"] +[ext_resource type="Resource" uid="uid://cssdyxk8oefsd" path="res://PCs/Universal/ClassCards/Reactor/tower_stats.tres" id="3_7vuex"] +[ext_resource type="PackedScene" uid="uid://yymj42pp6v1t" path="res://PCs/Universal/ClassCards/Reactor/weapon_reactor.tscn" id="3_de72q"] +[ext_resource type="PackedScene" uid="uid://dqrkn0vp2tmrh" path="res://PCs/Universal/ClassCards/Reactor/tower_reactor.tscn" id="4_1krig"] +[ext_resource type="Resource" uid="uid://ipfr7emuarbj" path="res://PCs/Universal/ClassCards/Reactor/weapon_stats.tres" id="4_wilo7"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_7aw4q"] +atlas = ExtResource("2_as4jg") +region = Rect2(0, 0, 64, 64) [resource] -script = ExtResource("1_7065k") +script = ExtResource("1_0ciid") title = "Reactor" rarity = 4 faction = 0 -sprite = ExtResource("2_8hvde") -turret = ExtResource("4_y3lkh") -weapon = ExtResource("5_atmmn") -weapon_stats = ExtResource("5_erecn") -tower_stats = ExtResource("3_ikj6b") +sprite = SubResource("AtlasTexture_7aw4q") +turret_scene = ExtResource("4_1krig") +weapon_scene = ExtResource("3_de72q") +weapon_stats = ExtResource("4_wilo7") +tower_stats = ExtResource("3_7vuex") diff --git a/PCs/Universal/ClassCards/Reactor/radiation_particles.tres b/PCs/Universal/ClassCards/Reactor/radiation_particles.tres new file mode 100644 index 0000000..c10582a --- /dev/null +++ b/PCs/Universal/ClassCards/Reactor/radiation_particles.tres @@ -0,0 +1,19 @@ +[gd_resource type="ParticleProcessMaterial" load_steps=3 format=3 uid="uid://bjab6t4n0s5ac"] + +[sub_resource type="Gradient" id="Gradient_eiw3y"] +interpolation_color_space = 2 +offsets = PackedFloat32Array(0, 0.0894309, 1) +colors = PackedColorArray(0, 0.831373, 0, 1, 4.21144e-08, 0.320987, -4.81308e-08, 0.721201, 0, 0.254902, 0, 0) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_arw7j"] +gradient = SubResource("Gradient_eiw3y") + +[resource] +direction = Vector3(0, 0, -1) +spread = 15.0 +gravity = Vector3(0, 0, 0) +initial_velocity_min = 3.0 +initial_velocity_max = 3.0 +scale_min = 0.3 +scale_max = 0.3 +color_ramp = SubResource("GradientTexture1D_arw7j") diff --git a/PCs/Universal/ClassCards/Reactor/reactortower.gd b/PCs/Universal/ClassCards/Reactor/reactortower.gd deleted file mode 100644 index 25c10f3..0000000 --- a/PCs/Universal/ClassCards/Reactor/reactortower.gd +++ /dev/null @@ -1,17 +0,0 @@ -extends Tower -class_name ReactorTower - -@export var status_stats : StatusStats -@export var particlesystem : GPUParticles3D - - -func aim(): - pass - - -func shoot(): - for enemy in get_tree().get_nodes_in_group("Enemies"): - if global_position.distance_to(enemy.global_position) <= stats.fire_range: - var status = StatusRadioactive.new() - status.stats = status_stats - enemy.status_manager.add_effect(status) diff --git a/PCs/Universal/ClassCards/Reactor/reactorweapon.gd b/PCs/Universal/ClassCards/Reactor/reactorweapon.gd deleted file mode 100644 index 07a5577..0000000 --- a/PCs/Universal/ClassCards/Reactor/reactorweapon.gd +++ /dev/null @@ -1,30 +0,0 @@ -extends Weapon - -@export var shapecast : ShapeCast3D -@export var particlesystem : GPUParticles3D -@export var status_stats : StatusStats - - -func _ready() -> void: - cooldown = 1.0 / stats.fire_rate - - -func set_raycast_origin(_node): - pass - - -func shoot(): - if other_cooldown <= 0 and stats != null: - other_cooldown = cooldown - particlesystem.emitting = true - $AnimationPlayer.play("shoot") - for index in shapecast.get_collision_count(): - var target = shapecast.get_collider(index) as CharacterBody3D - var status = StatusRadioactive.new() - status.stats = status_stats - target.status_manager.add_effect(status) - - -func release_trigger(): - trigger_held = false - particlesystem.emitting = false diff --git a/PCs/Universal/ClassCards/Reactor/tower_reactor.gd b/PCs/Universal/ClassCards/Reactor/tower_reactor.gd new file mode 100644 index 0000000..624303e --- /dev/null +++ b/PCs/Universal/ClassCards/Reactor/tower_reactor.gd @@ -0,0 +1,15 @@ +extends RangeAffectingTower +class_name ReactorTower + +@export var particles : GPUParticles3D + + +func _ready() -> void: + super._ready() + particles.process_material.emission_ring_radius = target_range + + +func build_status_object() -> StatusEffect: + var status = StatusDoT.new() + status.stats = status_stats + return status diff --git a/PCs/Universal/ClassCards/Reactor/tower_reactor.tscn b/PCs/Universal/ClassCards/Reactor/tower_reactor.tscn index 0a2fb6d..bb99aec 100644 --- a/PCs/Universal/ClassCards/Reactor/tower_reactor.tscn +++ b/PCs/Universal/ClassCards/Reactor/tower_reactor.tscn @@ -1,72 +1,43 @@ -[gd_scene load_steps=10 format=3 uid="uid://byglhh0etuy6"] +[gd_scene load_steps=10 format=3 uid="uid://dqrkn0vp2tmrh"] -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Reactor/reactortower.gd" id="1_rb733"] -[ext_resource type="Resource" uid="uid://dxlisoas4xlmo" path="res://Resources/StatusEffects/radioactive.tres" id="2_vyodb"] -[ext_resource type="Resource" uid="uid://baa8sauri4218" path="res://Resources/TurretStats/reactor.tres" id="3_a6b2i"] +[ext_resource type="PackedScene" uid="uid://bi6b2r6wek7he" path="res://Scenes/Towers/range_affecting_tower.tscn" id="1_afsqn"] +[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Reactor/tower_reactor.gd" id="2_6w83m"] +[ext_resource type="Resource" uid="uid://dxlisoas4xlmo" path="res://Resources/StatusEffects/radioactive.tres" id="3_xhrj0"] +[ext_resource type="Resource" uid="uid://cssdyxk8oefsd" path="res://PCs/Universal/ClassCards/Reactor/tower_stats.tres" id="4_rkhup"] -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_imgrm"] -transparency = 1 -cull_mode = 2 -shading_mode = 0 -albedo_color = Color(0.686275, 0, 0, 0.278431) +[sub_resource type="Gradient" id="Gradient_ranod"] +interpolation_color_space = 2 +offsets = PackedFloat32Array(0.252033, 1) +colors = PackedColorArray(0, 0.533333, 0, 1, 0, 1, 0, 0.34902) -[sub_resource type="Gradient" id="Gradient_kkqms"] -colors = PackedColorArray(0.376471, 0.976471, 0, 0.435294, 0.127613, 0.391512, 0, 0.870588) +[sub_resource type="GradientTexture1D" id="GradientTexture1D_iinp2"] +gradient = SubResource("Gradient_ranod") -[sub_resource type="GradientTexture1D" id="GradientTexture1D_4cwgw"] -gradient = SubResource("Gradient_kkqms") - -[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_2nhns"] +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_q1hpa"] emission_shape = 6 emission_ring_axis = Vector3(0, 1, 0) -emission_ring_height = 0.5 -emission_ring_radius = 20.0 +emission_ring_height = 0.1 +emission_ring_radius = 30.0 emission_ring_inner_radius = 0.0 -gravity = Vector3(0, 1, 0) -color_ramp = SubResource("GradientTexture1D_4cwgw") +gravity = Vector3(0, 3, 0) +color_ramp = SubResource("GradientTexture1D_iinp2") -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ycjd1"] +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_rl0f7"] transparency = 1 vertex_color_use_as_albedo = true -[sub_resource type="BoxMesh" id="BoxMesh_q83y7"] -material = SubResource("StandardMaterial3D_ycjd1") +[sub_resource type="BoxMesh" id="BoxMesh_fr4f1"] +material = SubResource("StandardMaterial3D_rl0f7") size = Vector3(0.3, 0.3, 0.3) -[node name="Node3D" type="Node3D" node_paths=PackedStringArray("particlesystem", "model", "range_sphere", "minimap_range_sphere")] -script = ExtResource("1_rb733") -status_stats = ExtResource("2_vyodb") -particlesystem = NodePath("Model/GPUParticles3D") -stats = ExtResource("3_a6b2i") -model = NodePath("Model") -range_sphere = NodePath("Model/CSGSphere3D") -minimap_range_sphere = NodePath("Model/CSGSphere3D2") +[node name="ReactorTower" node_paths=PackedStringArray("particles") instance=ExtResource("1_afsqn")] +script = ExtResource("2_6w83m") +particles = NodePath("GPUParticles3D") +status_stats = ExtResource("3_xhrj0") +stats = ExtResource("4_rkhup") -[node name="Model" type="Node3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0) - -[node name="CSGBox3D" type="CSGBox3D" parent="Model"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.968366, 0) -size = Vector3(1, 1.25244, 1) - -[node name="CSGBox3D2" type="CSGBox3D" parent="Model"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.426601, 0) -size = Vector3(0.661144, 1.25244, 0.721315) - -[node name="CSGSphere3D" type="CSGSphere3D" parent="Model"] -visible = false -radius = 7.5 -material = SubResource("StandardMaterial3D_imgrm") - -[node name="CSGSphere3D2" type="CSGSphere3D" parent="Model"] -visible = false -layers = 4 -radius = 7.5 -material = SubResource("StandardMaterial3D_imgrm") - -[node name="GPUParticles3D" type="GPUParticles3D" parent="Model"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -2, 0) +[node name="GPUParticles3D" type="GPUParticles3D" parent="." index="5"] amount = 12 -visibility_aabb = AABB(-110.773, -4, -105.31, 221.547, 8, 210.62) -process_material = SubResource("ParticleProcessMaterial_2nhns") -draw_pass_1 = SubResource("BoxMesh_q83y7") +lifetime = 0.6 +process_material = SubResource("ParticleProcessMaterial_q1hpa") +draw_pass_1 = SubResource("BoxMesh_fr4f1") diff --git a/PCs/Universal/ClassCards/Reactor/tower_stats.tres b/PCs/Universal/ClassCards/Reactor/tower_stats.tres new file mode 100644 index 0000000..44376d4 --- /dev/null +++ b/PCs/Universal/ClassCards/Reactor/tower_stats.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="CardText" load_steps=6 format=3 uid="uid://cssdyxk8oefsd"] + +[ext_resource type="Script" path="res://Scripts/Resources/stat_attribute.gd" id="1_ppnfm"] +[ext_resource type="Script" path="res://Scripts/Resources/card_text.gd" id="2_5jdx5"] + +[sub_resource type="Resource" id="Resource_j28f4"] +script = ExtResource("1_ppnfm") +key = "Fire Delay" +value = 2.0 + +[sub_resource type="Resource" id="Resource_likes"] +script = ExtResource("1_ppnfm") +key = "Damage" +value = 0.0 + +[sub_resource type="Resource" id="Resource_b65mk"] +script = ExtResource("1_ppnfm") +key = "Range" +value = 30.0 + +[resource] +script = ExtResource("2_5jdx5") +target_type = 1 +attributes = Array[ExtResource("1_ppnfm")]([SubResource("Resource_j28f4"), SubResource("Resource_likes"), SubResource("Resource_b65mk")]) +text = "Slowly applies Radioactive to enemies around itself at a range of /Range\\m" diff --git a/PCs/Universal/ClassCards/Reactor/weapon_reactor.gd b/PCs/Universal/ClassCards/Reactor/weapon_reactor.gd new file mode 100644 index 0000000..fccac20 --- /dev/null +++ b/PCs/Universal/ClassCards/Reactor/weapon_reactor.gd @@ -0,0 +1,7 @@ +extends ShapecastWeapon +class_name ReactorWeapon + +func build_status_object() -> StatusEffect: + var status = StatusDoT.new() + status.stats = status_stats + return status diff --git a/PCs/Universal/ClassCards/Reactor/weapon_reactor.tscn b/PCs/Universal/ClassCards/Reactor/weapon_reactor.tscn index 0dc1737..b36d5ff 100644 --- a/PCs/Universal/ClassCards/Reactor/weapon_reactor.tscn +++ b/PCs/Universal/ClassCards/Reactor/weapon_reactor.tscn @@ -1,99 +1,31 @@ -[gd_scene load_steps=14 format=3 uid="uid://cpe3b700kwj48"] +[gd_scene load_steps=10 format=3 uid="uid://yymj42pp6v1t"] -[ext_resource type="Texture2D" uid="uid://jmxhiwsiw1f5" path="res://Assets/TextureAtlases/g_glue_gun.tres" id="1_lmai4"] -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Reactor/reactorweapon.gd" id="2_mpd2q"] -[ext_resource type="Resource" uid="uid://dxlisoas4xlmo" path="res://Resources/StatusEffects/radioactive.tres" id="3_x464r"] -[ext_resource type="Resource" uid="uid://b5eakeawu3gle" path="res://Resources/WeaponStats/reactor.tres" id="4_lclha"] +[ext_resource type="PackedScene" uid="uid://dp4gfr5h0tbcd" path="res://Scenes/Weapons/shapecast_weapon.tscn" id="1_du35a"] +[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Reactor/weapon_reactor.gd" id="2_oe7hd"] +[ext_resource type="Resource" uid="uid://dxlisoas4xlmo" path="res://Resources/StatusEffects/radioactive.tres" id="3_hsfwd"] +[ext_resource type="Resource" uid="uid://ipfr7emuarbj" path="res://PCs/Universal/ClassCards/Reactor/weapon_stats.tres" id="4_83mkk"] +[ext_resource type="Texture2D" uid="uid://oblavj8vj30n" path="res://PCs/Universal/ClassCards/GlueLauncher/glue_gun.png" id="5_bawfy"] +[ext_resource type="Material" uid="uid://bjab6t4n0s5ac" path="res://PCs/Universal/ClassCards/Reactor/radiation_particles.tres" id="6_0sgt1"] -[sub_resource type="Animation" id="Animation_n8b32"] -length = 0.001 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath(".:texture:region") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Rect2(0, 0, 64, 64)] -} +[sub_resource type="AtlasTexture" id="AtlasTexture_0dpt5"] +atlas = ExtResource("5_bawfy") +region = Rect2(0, 0, 64, 64) -[sub_resource type="Animation" id="Animation_g0h8q"] -resource_name = "shoot" -length = 0.15 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath(".:texture:region") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0, 0.15), -"transitions": PackedFloat32Array(0, 0), -"update": 0, -"values": [Rect2(64, 0, 64, 64), Rect2(0, 0, 64, 64)] -} - -[sub_resource type="AnimationLibrary" id="AnimationLibrary_ntl6p"] -_data = { -"RESET": SubResource("Animation_n8b32"), -"shoot": SubResource("Animation_g0h8q") -} - -[sub_resource type="BoxShape3D" id="BoxShape3D_q7gll"] -size = Vector3(3, 3, 4) - -[sub_resource type="Gradient" id="Gradient_kkqms"] -colors = PackedColorArray(0.376471, 0.976471, 0, 0.435294, 0.127613, 0.391512, 0, 0.870588) - -[sub_resource type="GradientTexture1D" id="GradientTexture1D_gpquw"] -gradient = SubResource("Gradient_kkqms") - -[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_cp5dw"] -direction = Vector3(0, 1, 0) -spread = 20.0 -gravity = Vector3(0, 0, 0) -initial_velocity_min = 5.0 -initial_velocity_max = 5.0 -damping_min = 1.9 -damping_max = 1.9 -color_ramp = SubResource("GradientTexture1D_gpquw") - -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_2yd7w"] +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_l4nsh"] transparency = 1 vertex_color_use_as_albedo = true -[sub_resource type="BoxMesh" id="BoxMesh_ggcx2"] -material = SubResource("StandardMaterial3D_2yd7w") -size = Vector3(0.3, 0.3, 0.3) +[sub_resource type="BoxMesh" id="BoxMesh_5o1ws"] +material = SubResource("StandardMaterial3D_l4nsh") -[node name="Weapon" type="Sprite3D" node_paths=PackedStringArray("shapecast", "particlesystem")] -layers = 2 -billboard = 1 -texture_filter = 0 -texture = ExtResource("1_lmai4") -script = ExtResource("2_mpd2q") -shapecast = NodePath("ShapeCast3D") -particlesystem = NodePath("GPUParticles3D") -status_stats = ExtResource("3_x464r") -stats = ExtResource("4_lclha") +[node name="ReactorWeapon" instance=ExtResource("1_du35a")] +script = ExtResource("2_oe7hd") +status_stats = ExtResource("3_hsfwd") +stats = ExtResource("4_83mkk") -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -libraries = { -"": SubResource("AnimationLibrary_ntl6p") -} +[node name="Sprite3D" parent="." index="0"] +texture = SubResource("AtlasTexture_0dpt5") -[node name="ShapeCast3D" type="ShapeCast3D" parent="."] -transform = Transform3D(0.975695, 0, 0.219131, 0, 1, 0, -0.219131, 0, 0.975695, 0, 0, 0) -shape = SubResource("BoxShape3D_q7gll") -target_position = Vector3(0, 0, -2) -collision_mask = 4 - -[node name="GPUParticles3D" type="GPUParticles3D" parent="."] -transform = Transform3D(0.975695, -0.219131, -9.57852e-09, 0, -4.37114e-08, 1, -0.219131, -0.975695, -4.2649e-08, 0, 0, 0) -amount = 32 -visibility_aabb = AABB(-2.2922, -3.14731, -1.92995, 4.5844, 6.29461, 3.85991) -process_material = SubResource("ParticleProcessMaterial_cp5dw") -draw_pass_1 = SubResource("BoxMesh_ggcx2") +[node name="GPUParticles3D" parent="ShapeCast3D" index="0"] +process_material = ExtResource("6_0sgt1") +draw_pass_1 = SubResource("BoxMesh_5o1ws") diff --git a/PCs/Universal/ClassCards/Reactor/weapon_stats.tres b/PCs/Universal/ClassCards/Reactor/weapon_stats.tres new file mode 100644 index 0000000..fb5dd45 --- /dev/null +++ b/PCs/Universal/ClassCards/Reactor/weapon_stats.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="CardText" load_steps=6 format=3 uid="uid://ipfr7emuarbj"] + +[ext_resource type="Script" path="res://Scripts/Resources/stat_attribute.gd" id="1_biwk3"] +[ext_resource type="Script" path="res://Scripts/Resources/card_text.gd" id="2_62mnm"] + +[sub_resource type="Resource" id="Resource_j28f4"] +script = ExtResource("1_biwk3") +key = "Fire Delay" +value = 0.5 + +[sub_resource type="Resource" id="Resource_likes"] +script = ExtResource("1_biwk3") +key = "Damage" +value = 1.0 + +[sub_resource type="Resource" id="Resource_b65mk"] +script = ExtResource("1_biwk3") +key = "Range" +value = 3.0 + +[resource] +script = ExtResource("2_62mnm") +target_type = 0 +attributes = Array[ExtResource("1_biwk3")]([SubResource("Resource_j28f4"), SubResource("Resource_likes"), SubResource("Resource_b65mk")]) +text = "Hold to apply Radioactive to enemies in front of you" diff --git a/PCs/Universal/ClassCards/Refridgerator/card_refridgerator.tres b/PCs/Universal/ClassCards/Refridgerator/card_refridgerator.tres deleted file mode 100644 index 4b683b4..0000000 --- a/PCs/Universal/ClassCards/Refridgerator/card_refridgerator.tres +++ /dev/null @@ -1,19 +0,0 @@ -[gd_resource type="Resource" script_class="Card" load_steps=7 format=3 uid="uid://dmd5730tvyp6a"] - -[ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_yreyk"] -[ext_resource type="Texture2D" uid="uid://ca4lwwd3e0y73" path="res://PCs/Universal/ClassCards/Assault/g_assault.tres" id="2_fgsd3"] -[ext_resource type="Resource" uid="uid://ugpxwdjfvssu" path="res://Resources/TurretStats/refridgerator.tres" id="3_b48s2"] -[ext_resource type="PackedScene" uid="uid://bxjyrqs8bvi41" path="res://PCs/Universal/ClassCards/Refridgerator/tower_refridgerator.tscn" id="4_t5vm7"] -[ext_resource type="PackedScene" uid="uid://b1457hrmd4xm7" path="res://PCs/Universal/ClassCards/Refridgerator/weapon_refridgerator.tscn" id="5_axlkp"] -[ext_resource type="Resource" uid="uid://cpyrdja71sboe" path="res://Resources/WeaponStats/refridgerator.tres" id="5_xe410"] - -[resource] -script = ExtResource("1_yreyk") -title = "Refridgerator" -rarity = 1 -faction = 0 -sprite = ExtResource("2_fgsd3") -turret = ExtResource("4_t5vm7") -weapon = ExtResource("5_axlkp") -weapon_stats = ExtResource("5_xe410") -tower_stats = ExtResource("3_b48s2") diff --git a/PCs/Universal/ClassCards/Refridgerator/fridgetower.gd b/PCs/Universal/ClassCards/Refridgerator/fridgetower.gd deleted file mode 100644 index c9b1adf..0000000 --- a/PCs/Universal/ClassCards/Refridgerator/fridgetower.gd +++ /dev/null @@ -1,17 +0,0 @@ -extends Tower -class_name RefridgeratorTower - -@export var status_stats : StatusStats -@export var particlesystem : GPUParticles3D - - -func aim(): - pass - - -func shoot(): - for enemy in get_tree().get_nodes_in_group("Enemies"): - if global_position.distance_to(enemy.global_position) <= stats.fire_range: - var status = StatusCold.new() - status.stats = status_stats - enemy.status_manager.add_effect(status) diff --git a/PCs/Universal/ClassCards/Refridgerator/refridgeratorweapon.gd b/PCs/Universal/ClassCards/Refridgerator/refridgeratorweapon.gd deleted file mode 100644 index c6518cb..0000000 --- a/PCs/Universal/ClassCards/Refridgerator/refridgeratorweapon.gd +++ /dev/null @@ -1,30 +0,0 @@ -extends Weapon - -@export var shapecast : ShapeCast3D -@export var particlesystem : GPUParticles3D -@export var status_stats : StatusStats - - -func _ready() -> void: - cooldown = 1.0 / stats.fire_rate - - -func set_raycast_origin(_node): - pass - - -func shoot(): - if other_cooldown <= 0 and stats != null: - other_cooldown = cooldown - particlesystem.emitting = true - $AnimationPlayer.play("shoot") - for index in shapecast.get_collision_count(): - var target = shapecast.get_collider(index) as CharacterBody3D - var status = StatusCold.new() - status.stats = status_stats - target.status_manager.add_effect(status) - - -func release_trigger(): - trigger_held = false - particlesystem.emitting = false diff --git a/PCs/Universal/ClassCards/Refridgerator/tower_refridgerator.tscn b/PCs/Universal/ClassCards/Refridgerator/tower_refridgerator.tscn deleted file mode 100644 index 5e81737..0000000 --- a/PCs/Universal/ClassCards/Refridgerator/tower_refridgerator.tscn +++ /dev/null @@ -1,76 +0,0 @@ -[gd_scene load_steps=10 format=3 uid="uid://bxjyrqs8bvi41"] - -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Refridgerator/fridgetower.gd" id="1_wo1ar"] -[ext_resource type="Resource" uid="uid://fed6kimfbcwv" path="res://Resources/StatusEffects/cold.tres" id="2_ccxwb"] -[ext_resource type="Resource" uid="uid://ugpxwdjfvssu" path="res://Resources/TurretStats/refridgerator.tres" id="3_hmanw"] - -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_imgrm"] -transparency = 1 -cull_mode = 2 -shading_mode = 0 -albedo_color = Color(0.686275, 0, 0, 0.278431) - -[sub_resource type="Gradient" id="Gradient_kkqms"] -offsets = PackedFloat32Array(0, 0.512195, 1) -colors = PackedColorArray(1, 1, 1, 1, 0.189479, 0.632903, 0.66198, 0.818269, 0.12549, 0.603922, 0.635294, 0.803922) - -[sub_resource type="GradientTexture1D" id="GradientTexture1D_4cwgw"] -gradient = SubResource("Gradient_kkqms") - -[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_2nhns"] -spread = 180.0 -flatness = 1.0 -gravity = Vector3(0, -3, 0) -initial_velocity_min = 7.0 -initial_velocity_max = 7.0 -tangential_accel_min = 5.0 -tangential_accel_max = 13.48 -damping_min = 8.0 -damping_max = 8.0 -color_ramp = SubResource("GradientTexture1D_4cwgw") - -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ycjd1"] -transparency = 1 -vertex_color_use_as_albedo = true - -[sub_resource type="BoxMesh" id="BoxMesh_q83y7"] -material = SubResource("StandardMaterial3D_ycjd1") -size = Vector3(0.3, 0.3, 0.3) - -[node name="Node3D" type="Node3D" node_paths=PackedStringArray("particlesystem", "model", "range_sphere", "minimap_range_sphere")] -script = ExtResource("1_wo1ar") -status_stats = ExtResource("2_ccxwb") -particlesystem = NodePath("Model/GPUParticles3D") -stats = ExtResource("3_hmanw") -model = NodePath("Model") -range_sphere = NodePath("Model/CSGSphere3D") -minimap_range_sphere = NodePath("Model/CSGSphere3D2") - -[node name="Model" type="Node3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0) - -[node name="CSGBox3D" type="CSGBox3D" parent="Model"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.968366, 0) -size = Vector3(1, 1.25244, 1) - -[node name="CSGBox3D2" type="CSGBox3D" parent="Model"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.991506, 0) -size = Vector3(1.25687, 0.204013, 1.29481) - -[node name="CSGSphere3D" type="CSGSphere3D" parent="Model"] -visible = false -radius = 7.5 -material = SubResource("StandardMaterial3D_imgrm") - -[node name="CSGSphere3D2" type="CSGSphere3D" parent="Model"] -visible = false -layers = 4 -radius = 7.5 -material = SubResource("StandardMaterial3D_imgrm") - -[node name="GPUParticles3D" type="GPUParticles3D" parent="Model"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.984682, 0) -amount = 48 -visibility_aabb = AABB(-7.20412, -4, -6.98341, 14.4082, 8, 13.9668) -process_material = SubResource("ParticleProcessMaterial_2nhns") -draw_pass_1 = SubResource("BoxMesh_q83y7") diff --git a/PCs/Universal/ClassCards/Refridgerator/weapon_refridgerator.tscn b/PCs/Universal/ClassCards/Refridgerator/weapon_refridgerator.tscn deleted file mode 100644 index eca25b0..0000000 --- a/PCs/Universal/ClassCards/Refridgerator/weapon_refridgerator.tscn +++ /dev/null @@ -1,100 +0,0 @@ -[gd_scene load_steps=14 format=3 uid="uid://b1457hrmd4xm7"] - -[ext_resource type="Texture2D" uid="uid://jmxhiwsiw1f5" path="res://Assets/TextureAtlases/g_glue_gun.tres" id="1_edx8q"] -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Refridgerator/refridgeratorweapon.gd" id="2_uadfd"] -[ext_resource type="Resource" uid="uid://fed6kimfbcwv" path="res://Resources/StatusEffects/cold.tres" id="3_saiop"] -[ext_resource type="Resource" uid="uid://cpyrdja71sboe" path="res://Resources/WeaponStats/refridgerator.tres" id="4_f60ka"] - -[sub_resource type="Animation" id="Animation_n8b32"] -length = 0.001 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath(".:texture:region") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Rect2(0, 0, 64, 64)] -} - -[sub_resource type="Animation" id="Animation_g0h8q"] -resource_name = "shoot" -length = 0.15 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath(".:texture:region") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0, 0.15), -"transitions": PackedFloat32Array(0, 0), -"update": 0, -"values": [Rect2(64, 0, 64, 64), Rect2(0, 0, 64, 64)] -} - -[sub_resource type="AnimationLibrary" id="AnimationLibrary_ntl6p"] -_data = { -"RESET": SubResource("Animation_n8b32"), -"shoot": SubResource("Animation_g0h8q") -} - -[sub_resource type="BoxShape3D" id="BoxShape3D_q7gll"] -size = Vector3(3, 3, 4) - -[sub_resource type="Gradient" id="Gradient_kkqms"] -offsets = PackedFloat32Array(0, 0.512195, 1) -colors = PackedColorArray(1, 1, 1, 1, 0.189479, 0.632903, 0.66198, 0.818269, 0.12549, 0.603922, 0.635294, 0.803922) - -[sub_resource type="GradientTexture1D" id="GradientTexture1D_gpquw"] -gradient = SubResource("Gradient_kkqms") - -[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_cp5dw"] -direction = Vector3(0, 1, 0) -spread = 20.0 -gravity = Vector3(0, 0, 0) -initial_velocity_min = 5.0 -initial_velocity_max = 5.0 -damping_min = 1.9 -damping_max = 1.9 -color_ramp = SubResource("GradientTexture1D_gpquw") - -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_2yd7w"] -transparency = 1 -vertex_color_use_as_albedo = true - -[sub_resource type="BoxMesh" id="BoxMesh_ggcx2"] -material = SubResource("StandardMaterial3D_2yd7w") -size = Vector3(0.3, 0.3, 0.3) - -[node name="Weapon" type="Sprite3D" node_paths=PackedStringArray("shapecast", "particlesystem")] -layers = 2 -billboard = 1 -texture_filter = 0 -texture = ExtResource("1_edx8q") -script = ExtResource("2_uadfd") -shapecast = NodePath("ShapeCast3D") -particlesystem = NodePath("GPUParticles3D") -status_stats = ExtResource("3_saiop") -stats = ExtResource("4_f60ka") - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -libraries = { -"": SubResource("AnimationLibrary_ntl6p") -} - -[node name="ShapeCast3D" type="ShapeCast3D" parent="."] -transform = Transform3D(0.975695, 0, 0.219131, 0, 1, 0, -0.219131, 0, 0.975695, 0, 0, 0) -shape = SubResource("BoxShape3D_q7gll") -target_position = Vector3(0, 0, -2) -collision_mask = 4 - -[node name="GPUParticles3D" type="GPUParticles3D" parent="."] -transform = Transform3D(0.975695, -0.219131, -9.57852e-09, 0, -4.37114e-08, 1, -0.219131, -0.975695, -4.2649e-08, 0, 0, 0) -amount = 32 -visibility_aabb = AABB(-2.2922, -3.14731, -1.92995, 4.5844, 6.29461, 3.85991) -process_material = SubResource("ParticleProcessMaterial_cp5dw") -draw_pass_1 = SubResource("BoxMesh_ggcx2") diff --git a/PCs/Universal/ClassCards/Refrigerator/card_refrigerator.tres b/PCs/Universal/ClassCards/Refrigerator/card_refrigerator.tres new file mode 100644 index 0000000..d88de8a --- /dev/null +++ b/PCs/Universal/ClassCards/Refrigerator/card_refrigerator.tres @@ -0,0 +1,23 @@ +[gd_resource type="Resource" script_class="Card" load_steps=8 format=3 uid="uid://ds8qx4ggmqetk"] + +[ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_84afc"] +[ext_resource type="Texture2D" uid="uid://oblavj8vj30n" path="res://PCs/Universal/ClassCards/GlueLauncher/glue_gun.png" id="2_kdslp"] +[ext_resource type="Resource" uid="uid://st0qrut5nxrm" path="res://PCs/Universal/ClassCards/Refrigerator/tower_stats.tres" id="3_bihii"] +[ext_resource type="PackedScene" uid="uid://b0vi11kj3lxng" path="res://PCs/Universal/ClassCards/Refrigerator/weapon_refrigerator.tscn" id="4_0oufq"] +[ext_resource type="PackedScene" uid="uid://bqaynyhxdr4to" path="res://PCs/Universal/ClassCards/Refrigerator/tower_refrigerator.tscn" id="4_7x6qx"] +[ext_resource type="Resource" uid="uid://5l758yxfpi1e" path="res://PCs/Universal/ClassCards/Refrigerator/weapon_stats.tres" id="5_dqmyh"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_fuxlt"] +atlas = ExtResource("2_kdslp") +region = Rect2(0, 0, 64, 64) + +[resource] +script = ExtResource("1_84afc") +title = "Refrigerator" +rarity = 1 +faction = 0 +sprite = SubResource("AtlasTexture_fuxlt") +turret_scene = ExtResource("4_7x6qx") +weapon_scene = ExtResource("4_0oufq") +weapon_stats = ExtResource("5_dqmyh") +tower_stats = ExtResource("3_bihii") diff --git a/PCs/Universal/ClassCards/Refrigerator/cold_particles.tres b/PCs/Universal/ClassCards/Refrigerator/cold_particles.tres new file mode 100644 index 0000000..62d4e31 --- /dev/null +++ b/PCs/Universal/ClassCards/Refrigerator/cold_particles.tres @@ -0,0 +1,19 @@ +[gd_resource type="ParticleProcessMaterial" load_steps=3 format=3 uid="uid://ckung57mij7ue"] + +[sub_resource type="Gradient" id="Gradient_eiw3y"] +interpolation_color_space = 2 +offsets = PackedFloat32Array(0, 0.325203, 1) +colors = PackedColorArray(0.827004, 0.826193, 0.823983, 1, 0.338333, 0.810555, 0.85349, 1, 0.0352941, 0.803922, 0.858824, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_arw7j"] +gradient = SubResource("Gradient_eiw3y") + +[resource] +direction = Vector3(0, 0, -1) +spread = 15.0 +gravity = Vector3(0, 0, 0) +initial_velocity_min = 3.0 +initial_velocity_max = 3.0 +scale_min = 0.3 +scale_max = 0.3 +color_ramp = SubResource("GradientTexture1D_arw7j") diff --git a/PCs/Universal/ClassCards/Refrigerator/tower_refrigerator.gd b/PCs/Universal/ClassCards/Refrigerator/tower_refrigerator.gd new file mode 100644 index 0000000..c9e798e --- /dev/null +++ b/PCs/Universal/ClassCards/Refrigerator/tower_refrigerator.gd @@ -0,0 +1,15 @@ +extends RangeAffectingTower +class_name RefrigeratorTower + +@export var particles : GPUParticles3D + + +func _ready() -> void: + super._ready() + particles.process_material.emission_ring_radius = target_range + + +func build_status_object() -> StatusEffect: + var status = StatusSlow.new() + status.stats = status_stats + return status diff --git a/PCs/Universal/ClassCards/Refrigerator/tower_refrigerator.tscn b/PCs/Universal/ClassCards/Refrigerator/tower_refrigerator.tscn new file mode 100644 index 0000000..663ad9a --- /dev/null +++ b/PCs/Universal/ClassCards/Refrigerator/tower_refrigerator.tscn @@ -0,0 +1,43 @@ +[gd_scene load_steps=10 format=3 uid="uid://bqaynyhxdr4to"] + +[ext_resource type="PackedScene" uid="uid://bi6b2r6wek7he" path="res://Scenes/Towers/range_affecting_tower.tscn" id="1_4hvoi"] +[ext_resource type="Resource" uid="uid://fed6kimfbcwv" path="res://Resources/StatusEffects/cold.tres" id="2_u4dux"] +[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Refrigerator/tower_refrigerator.gd" id="2_yhcmv"] +[ext_resource type="Resource" uid="uid://st0qrut5nxrm" path="res://PCs/Universal/ClassCards/Refrigerator/tower_stats.tres" id="3_jjh3a"] + +[sub_resource type="Gradient" id="Gradient_lm6vx"] +offsets = PackedFloat32Array(0, 0.682927, 1) +colors = PackedColorArray(0, 1, 1, 1, 0.430894, 1, 1, 1, 1, 1, 1, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_wv576"] +gradient = SubResource("Gradient_lm6vx") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_ijefe"] +spread = 180.0 +flatness = 1.0 +gravity = Vector3(0, -8, 0) +initial_velocity_min = 7.0 +initial_velocity_max = 7.0 +tangential_accel_min = 6.0 +tangential_accel_max = 6.0 +damping_min = 10.0 +damping_max = 10.0 +color_ramp = SubResource("GradientTexture1D_wv576") + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_niq28"] +vertex_color_use_as_albedo = true + +[sub_resource type="BoxMesh" id="BoxMesh_btdsr"] +material = SubResource("StandardMaterial3D_niq28") +size = Vector3(0.3, 0.3, 0.3) + +[node name="RefrigeratorTower" node_paths=PackedStringArray("particles") instance=ExtResource("1_4hvoi")] +script = ExtResource("2_yhcmv") +particles = NodePath("GPUParticles3D") +status_stats = ExtResource("2_u4dux") +stats = ExtResource("3_jjh3a") + +[node name="GPUParticles3D" type="GPUParticles3D" parent="." index="5"] +amount = 32 +process_material = SubResource("ParticleProcessMaterial_ijefe") +draw_pass_1 = SubResource("BoxMesh_btdsr") diff --git a/PCs/Universal/ClassCards/Refrigerator/tower_stats.tres b/PCs/Universal/ClassCards/Refrigerator/tower_stats.tres new file mode 100644 index 0000000..2c9efe0 --- /dev/null +++ b/PCs/Universal/ClassCards/Refrigerator/tower_stats.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="CardText" load_steps=6 format=3 uid="uid://st0qrut5nxrm"] + +[ext_resource type="Script" path="res://Scripts/Resources/stat_attribute.gd" id="1_ti2i3"] +[ext_resource type="Script" path="res://Scripts/Resources/card_text.gd" id="2_e8yt2"] + +[sub_resource type="Resource" id="Resource_j28f4"] +script = ExtResource("1_ti2i3") +key = "Fire Delay" +value = 1.0 + +[sub_resource type="Resource" id="Resource_likes"] +script = ExtResource("1_ti2i3") +key = "Damage" +value = 0.0 + +[sub_resource type="Resource" id="Resource_b65mk"] +script = ExtResource("1_ti2i3") +key = "Range" +value = 3.0 + +[resource] +script = ExtResource("2_e8yt2") +target_type = 1 +attributes = Array[ExtResource("1_ti2i3")]([SubResource("Resource_j28f4"), SubResource("Resource_likes"), SubResource("Resource_b65mk")]) +text = "Applies Cold to enemies around itself" diff --git a/PCs/Universal/ClassCards/Refrigerator/weapon_refrigerator.tscn b/PCs/Universal/ClassCards/Refrigerator/weapon_refrigerator.tscn new file mode 100644 index 0000000..d86664d --- /dev/null +++ b/PCs/Universal/ClassCards/Refrigerator/weapon_refrigerator.tscn @@ -0,0 +1,21 @@ +[gd_scene load_steps=7 format=3 uid="uid://b0vi11kj3lxng"] + +[ext_resource type="PackedScene" uid="uid://dp4gfr5h0tbcd" path="res://Scenes/Weapons/shapecast_weapon.tscn" id="1_g3e4a"] +[ext_resource type="Resource" uid="uid://fed6kimfbcwv" path="res://Resources/StatusEffects/cold.tres" id="2_pranv"] +[ext_resource type="Resource" uid="uid://5l758yxfpi1e" path="res://PCs/Universal/ClassCards/Refrigerator/weapon_stats.tres" id="3_ihljm"] +[ext_resource type="Texture2D" uid="uid://oblavj8vj30n" path="res://PCs/Universal/ClassCards/GlueLauncher/glue_gun.png" id="4_y5ps0"] +[ext_resource type="Material" uid="uid://ckung57mij7ue" path="res://PCs/Universal/ClassCards/Refrigerator/cold_particles.tres" id="5_8q1lc"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_0yua2"] +atlas = ExtResource("4_y5ps0") +region = Rect2(0, 0, 64, 64) + +[node name="RefrigeratorWeapon" instance=ExtResource("1_g3e4a")] +status_stats = ExtResource("2_pranv") +stats = ExtResource("3_ihljm") + +[node name="Sprite3D" parent="." index="0"] +texture = SubResource("AtlasTexture_0yua2") + +[node name="GPUParticles3D" parent="ShapeCast3D" index="0"] +process_material = ExtResource("5_8q1lc") diff --git a/PCs/Universal/ClassCards/Refrigerator/weapon_stats.tres b/PCs/Universal/ClassCards/Refrigerator/weapon_stats.tres new file mode 100644 index 0000000..997cfa8 --- /dev/null +++ b/PCs/Universal/ClassCards/Refrigerator/weapon_stats.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="CardText" load_steps=6 format=3 uid="uid://5l758yxfpi1e"] + +[ext_resource type="Script" path="res://Scripts/Resources/stat_attribute.gd" id="1_v7ces"] +[ext_resource type="Script" path="res://Scripts/Resources/card_text.gd" id="2_1d5nm"] + +[sub_resource type="Resource" id="Resource_j28f4"] +script = ExtResource("1_v7ces") +key = "Fire Delay" +value = 0.5 + +[sub_resource type="Resource" id="Resource_likes"] +script = ExtResource("1_v7ces") +key = "Damage" +value = 1.0 + +[sub_resource type="Resource" id="Resource_b65mk"] +script = ExtResource("1_v7ces") +key = "Range" +value = 3.0 + +[resource] +script = ExtResource("2_1d5nm") +target_type = 0 +attributes = Array[ExtResource("1_v7ces")]([SubResource("Resource_j28f4"), SubResource("Resource_likes"), SubResource("Resource_b65mk")]) +text = "Hold to apply Cold to enemies in front of you" diff --git a/PCs/Universal/ClassCards/RocketLauncher/rocket_projectile.tscn b/PCs/Universal/ClassCards/RocketLauncher/rocket_projectile.tscn index 82ca005..d1d03e8 100644 --- a/PCs/Universal/ClassCards/RocketLauncher/rocket_projectile.tscn +++ b/PCs/Universal/ClassCards/RocketLauncher/rocket_projectile.tscn @@ -6,8 +6,6 @@ [node name="Rocket" instance=ExtResource("1_fnn4i")] script = ExtResource("2_86up0") -acceleration = 40.0 -max_speed = 14.0 [node name="Sprite3D" parent="." index="1"] pixel_size = 0.013 diff --git a/PCs/Universal/ClassCards/RocketLauncher/weapon_rocket_launcher.gd b/PCs/Universal/ClassCards/RocketLauncher/weapon_rocket_launcher.gd index b399597..0dbda9e 100644 --- a/PCs/Universal/ClassCards/RocketLauncher/weapon_rocket_launcher.gd +++ b/PCs/Universal/ClassCards/RocketLauncher/weapon_rocket_launcher.gd @@ -66,6 +66,7 @@ func networked_spawn_rocket(target_node_path, peer_id): projectile.position = global_position projectile.damage = damage projectile.target = target + projectile.owner_id = peer_id projectile.name = str(peer_id) + str(projectile_id) get_tree().root.add_child(projectile) projectile.apply_central_impulse(Vector3.UP * 3.0) diff --git a/PCs/Universal/ClassCards/Sniper/weapon_stats.tres b/PCs/Universal/ClassCards/Sniper/weapon_stats.tres index a75e53d..f71622b 100644 --- a/PCs/Universal/ClassCards/Sniper/weapon_stats.tres +++ b/PCs/Universal/ClassCards/Sniper/weapon_stats.tres @@ -6,7 +6,7 @@ [sub_resource type="Resource" id="Resource_58kde"] script = ExtResource("1_7xbx2") key = "Fire Delay" -value = 1.2 +value = 0.9 [sub_resource type="Resource" id="Resource_jl4jv"] script = ExtResource("1_7xbx2") diff --git a/PCs/hero.gd b/PCs/hero.gd index d5eb983..0f9ba12 100644 --- a/PCs/hero.gd +++ b/PCs/hero.gd @@ -133,7 +133,7 @@ func _process(delta: float) -> void: movement.zoom_factor -= sprint_zoom_speed * delta if movement.zoom_factor <= 1.0 - movement.sprint_zoom_factor: movement.zoom_factor = 1.0 - movement.sprint_zoom_factor - camera.fov = Data.preferences.hfov * (1.0 / movement.zoom_factor) + camera.fov = Data.graphics.hfov * (1.0 / movement.zoom_factor) if Input.is_action_just_pressed("View Map"): hud.maximise_minimap(Game.level) diff --git a/PCs/hero.tscn b/PCs/hero.tscn index d74e57a..5553d30 100644 --- a/PCs/hero.tscn +++ b/PCs/hero.tscn @@ -22,7 +22,7 @@ [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_jbu13"] -[sub_resource type="AtlasTexture" id="AtlasTexture_oyv4e"] +[sub_resource type="AtlasTexture" id="AtlasTexture_kr8sn"] resource_local_to_scene = true atlas = ExtResource("6_yyp8i") region = Rect2(0, 0, 96, 96) @@ -103,7 +103,7 @@ collision_mask = 24 [node name="EightDirectionSprite" parent="." instance=ExtResource("2_ib0t5")] transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0.915529, 0) -texture = SubResource("AtlasTexture_oyv4e") +texture = SubResource("AtlasTexture_kr8sn") [node name="Inventory" type="Node" parent="."] script = ExtResource("6_cf5ap") diff --git a/Scenes/Menus/audio_options.tscn b/Scenes/Menus/audio_options.tscn new file mode 100644 index 0000000..c867dbd --- /dev/null +++ b/Scenes/Menus/audio_options.tscn @@ -0,0 +1,4 @@ +[gd_scene format=3 uid="uid://bwc45ogto8thn"] + +[node name="Audio" type="VBoxContainer"] +visible = false diff --git a/Scenes/Menus/gameplay_options.tscn b/Scenes/Menus/gameplay_options.tscn new file mode 100644 index 0000000..fcb30b3 --- /dev/null +++ b/Scenes/Menus/gameplay_options.tscn @@ -0,0 +1,167 @@ +[gd_scene load_steps=3 format=3 uid="uid://bjk7jf0bau5lv"] + +[ext_resource type="Script" path="res://Scripts/gameplay_options.gd" id="1_sy26f"] + +[sub_resource type="ImageTexture" id="ImageTexture_03x6q"] + +[node name="Gameplay" type="VBoxContainer" node_paths=PackedStringArray("look_sens_slider", "look_sens_input", "toggle_sprint_checkbox", "invert_lookY", "invert_lookX", "fixed_minimap", "tower_damage", "self_damage", "party_damage", "status_damage")] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_sy26f") +look_sens_slider = NodePath("MouseSens/HBoxContainer/HSlider") +look_sens_input = NodePath("MouseSens/HBoxContainer/SpinBox") +toggle_sprint_checkbox = NodePath("ToggleSprint/CenterContainer/CheckButton") +invert_lookY = NodePath("InvertMouseY/CenterContainer/CheckButton") +invert_lookX = NodePath("InvertMouseX/CenterContainer/CheckButton") +fixed_minimap = NodePath("FixedMinimap/CenterContainer/CheckButton") +tower_damage = NodePath("FloatingDamageIndicators/CenterContainer/HBoxContainer/TowerDamage") +self_damage = NodePath("FloatingDamageIndicators/CenterContainer/HBoxContainer/SelfDamage") +party_damage = NodePath("FloatingDamageIndicators/CenterContainer/HBoxContainer/PartyDamage") +status_damage = NodePath("FloatingDamageIndicators/CenterContainer/HBoxContainer/StatusDamage") + +[node name="MouseSens" type="HBoxContainer" parent="."] +layout_mode = 2 +alignment = 1 + +[node name="Label" type="Label" parent="MouseSens"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Look Sensitivity" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="HBoxContainer" type="HBoxContainer" parent="MouseSens"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="SpinBox" type="SpinBox" parent="MouseSens/HBoxContainer"] +layout_mode = 2 +theme_override_icons/updown = SubResource("ImageTexture_03x6q") +step = 0.01 +alignment = 1 +update_on_text_changed = true + +[node name="HSlider" type="HSlider" parent="MouseSens/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 1 +step = 0.01 +scrollable = false + +[node name="ToggleSprint" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="Label" type="Label" parent="ToggleSprint"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Toggle Sprint" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="CenterContainer" type="CenterContainer" parent="ToggleSprint"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="CheckButton" type="CheckButton" parent="ToggleSprint/CenterContainer"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="InvertMouseY" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="Label" type="Label" parent="InvertMouseY"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Invert Look Y" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="CenterContainer" type="CenterContainer" parent="InvertMouseY"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="CheckButton" type="CheckButton" parent="InvertMouseY/CenterContainer"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="InvertMouseX" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="Label" type="Label" parent="InvertMouseX"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Invert Look X" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="CenterContainer" type="CenterContainer" parent="InvertMouseX"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="CheckButton" type="CheckButton" parent="InvertMouseX/CenterContainer"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="FixedMinimap" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="Label" type="Label" parent="FixedMinimap"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Fixed Minimap" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="CenterContainer" type="CenterContainer" parent="FixedMinimap"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="CheckButton" type="CheckButton" parent="FixedMinimap/CenterContainer"] +layout_mode = 2 + +[node name="FloatingDamageIndicators" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="Label" type="Label" parent="FloatingDamageIndicators"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Floating Damage Indicators" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="CenterContainer" type="CenterContainer" parent="FloatingDamageIndicators"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="HBoxContainer" type="HBoxContainer" parent="FloatingDamageIndicators/CenterContainer"] +layout_mode = 2 + +[node name="TowerDamage" type="Button" parent="FloatingDamageIndicators/CenterContainer/HBoxContainer"] +layout_mode = 2 +toggle_mode = true +button_pressed = true +text = "Tower Damage" + +[node name="SelfDamage" type="Button" parent="FloatingDamageIndicators/CenterContainer/HBoxContainer"] +layout_mode = 2 +toggle_mode = true +button_pressed = true +text = "Self Damage" + +[node name="PartyDamage" type="Button" parent="FloatingDamageIndicators/CenterContainer/HBoxContainer"] +layout_mode = 2 +toggle_mode = true +button_pressed = true +text = "Party Damage" + +[node name="StatusDamage" type="Button" parent="FloatingDamageIndicators/CenterContainer/HBoxContainer"] +layout_mode = 2 +toggle_mode = true +button_pressed = true +text = "Status Effect Damage" + +[connection signal="value_changed" from="MouseSens/HBoxContainer/SpinBox" to="." method="_on_mouse_sens_spin_box_value_changed"] +[connection signal="value_changed" from="MouseSens/HBoxContainer/HSlider" to="." method="_on_mouse_sens_h_slider_value_changed"] diff --git a/Scenes/Menus/graphics_options.tscn b/Scenes/Menus/graphics_options.tscn new file mode 100644 index 0000000..1c8f776 --- /dev/null +++ b/Scenes/Menus/graphics_options.tscn @@ -0,0 +1,125 @@ +[gd_scene load_steps=3 format=3 uid="uid://bmd4mawasoc11"] + +[ext_resource type="Script" path="res://Scripts/graphics_options.gd" id="1_85rh6"] + +[sub_resource type="ImageTexture" id="ImageTexture_03x6q"] + +[node name="Graphics" type="VBoxContainer" node_paths=PackedStringArray("fov_input", "fov_slider", "vsync_dropdown", "aa_dropdown", "window_dropdown")] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_85rh6") +fov_input = NodePath("FOV/HBoxContainer/SpinBox") +fov_slider = NodePath("FOV/HBoxContainer/HSlider") +vsync_dropdown = NodePath("VSync/OptionButton") +aa_dropdown = NodePath("AntiAliasing/OptionButton") +window_dropdown = NodePath("Windowed/OptionButton") + +[node name="FOV" type="HBoxContainer" parent="."] +layout_mode = 2 +alignment = 1 + +[node name="Label" type="Label" parent="FOV"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Field Of View" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="HBoxContainer" type="HBoxContainer" parent="FOV"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="SpinBox" type="SpinBox" parent="FOV/HBoxContainer"] +layout_mode = 2 +theme_override_icons/updown = SubResource("ImageTexture_03x6q") +min_value = 40.0 +max_value = 160.0 +value = 100.0 +allow_greater = true +allow_lesser = true +alignment = 1 +update_on_text_changed = true + +[node name="HSlider" type="HSlider" parent="FOV/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 1 +min_value = 40.0 +max_value = 160.0 +value = 100.0 +scrollable = false + +[node name="VSync" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="Label" type="Label" parent="VSync"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "V-Sync" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="OptionButton" type="OptionButton" parent="VSync"] +layout_mode = 2 +size_flags_horizontal = 3 +item_count = 4 +selected = 1 +popup/item_0/text = "Off" +popup/item_0/id = 0 +popup/item_1/text = "On" +popup/item_1/id = 1 +popup/item_2/text = "Adaptive" +popup/item_2/id = 2 +popup/item_3/text = "Triple Buffered" +popup/item_3/id = 3 + +[node name="AntiAliasing" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="Label" type="Label" parent="AntiAliasing"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Anti-Aliasing +" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="OptionButton" type="OptionButton" parent="AntiAliasing"] +layout_mode = 2 +size_flags_horizontal = 3 +item_count = 3 +selected = 0 +popup/item_0/text = "Off" +popup/item_0/id = 0 +popup/item_1/text = "FXAA" +popup/item_1/id = 1 +popup/item_2/text = "TAA" +popup/item_2/id = 2 + +[node name="Windowed" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="Label" type="Label" parent="Windowed"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Window Mode" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="OptionButton" type="OptionButton" parent="Windowed"] +layout_mode = 2 +size_flags_horizontal = 3 +item_count = 3 +selected = 0 +popup/item_0/text = "Windowed" +popup/item_0/id = 0 +popup/item_1/text = "Borderless Windowed" +popup/item_1/id = 1 +popup/item_2/text = "Fullscreen" +popup/item_2/id = 2 + +[connection signal="value_changed" from="FOV/HBoxContainer/SpinBox" to="." method="_on_fov_spin_box_value_changed"] +[connection signal="value_changed" from="FOV/HBoxContainer/HSlider" to="." method="_on_fov_h_slider_value_changed"] diff --git a/Scenes/Menus/keybind_options.tscn b/Scenes/Menus/keybind_options.tscn new file mode 100644 index 0000000..f7af891 --- /dev/null +++ b/Scenes/Menus/keybind_options.tscn @@ -0,0 +1,22 @@ +[gd_scene load_steps=2 format=3 uid="uid://bf2nosqt5f82e"] + +[ext_resource type="Script" path="res://Scripts/keybind_options.gd" id="1_oxg0p"] + +[node name="Keybinds" type="VBoxContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_oxg0p") + +[node name="HBoxContainer" type="HBoxContainer" parent="."] +layout_mode = 2 + +[node name="ScrollContainer" type="ScrollContainer" parent="."] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="VBoxContainer" type="VBoxContainer" parent="ScrollContainer"] +layout_mode = 2 +size_flags_horizontal = 3 diff --git a/Scenes/Menus/multiplayer_lobby.tscn b/Scenes/Menus/multiplayer_lobby.tscn index 2f74cc8..523fd1c 100644 --- a/Scenes/Menus/multiplayer_lobby.tscn +++ b/Scenes/Menus/multiplayer_lobby.tscn @@ -64,7 +64,6 @@ text = "Ready" [node name="Chatbox" parent="." instance=ExtResource("6_wtqwd")] layout_mode = 1 -offset_bottom = -507.0 [connection signal="player_connected" from="." to="Scoreboard" method="add_player"] [connection signal="player_disconnected" from="." to="Scoreboard" method="remove_player"] diff --git a/Scenes/Menus/options_menu.tscn b/Scenes/Menus/options_menu.tscn index 0ea02ed..3977bd7 100644 --- a/Scenes/Menus/options_menu.tscn +++ b/Scenes/Menus/options_menu.tscn @@ -1,11 +1,12 @@ -[gd_scene load_steps=4 format=3 uid="uid://clulh7v8c7h85"] +[gd_scene load_steps=6 format=3 uid="uid://clulh7v8c7h85"] [ext_resource type="Script" path="res://Scripts/options_menu.gd" id="1_bievw"] -[ext_resource type="PackedScene" uid="uid://clsdko6ttudu8" path="res://Scenes/UI/keybind_popup.tscn" id="2_bq25i"] +[ext_resource type="PackedScene" uid="uid://bjk7jf0bau5lv" path="res://Scenes/Menus/gameplay_options.tscn" id="3_25wuw"] +[ext_resource type="PackedScene" uid="uid://bmd4mawasoc11" path="res://Scenes/Menus/graphics_options.tscn" id="4_ckcvq"] +[ext_resource type="PackedScene" uid="uid://bf2nosqt5f82e" path="res://Scenes/Menus/keybind_options.tscn" id="5_4k33c"] +[ext_resource type="PackedScene" uid="uid://bwc45ogto8thn" path="res://Scenes/Menus/audio_options.tscn" id="6_4vs8p"] -[sub_resource type="ImageTexture" id="ImageTexture_03x6q"] - -[node name="OptionsMenu" type="PanelContainer" node_paths=PackedStringArray("look_sens_slider", "look_sens_input", "toggle_sprint_checkbox", "vsync_dropdown", "aa_dropdown", "window_dropdown", "invert_lookY", "invert_lookX", "fov_input", "fov_slider", "fixed_minimap", "tower_damage", "self_damage", "party_damage")] +[node name="OptionsMenu" type="PanelContainer"] anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 @@ -16,21 +17,6 @@ offset_bottom = -30.0 grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_bievw") -keybind_popup = ExtResource("2_bq25i") -look_sens_slider = NodePath("VBoxContainer/TabContainer/Gameplay/MouseSens/HBoxContainer/HSlider") -look_sens_input = NodePath("VBoxContainer/TabContainer/Gameplay/MouseSens/HBoxContainer/SpinBox") -toggle_sprint_checkbox = NodePath("VBoxContainer/TabContainer/Gameplay/ToggleSprint/CenterContainer/CheckButton") -vsync_dropdown = NodePath("VBoxContainer/TabContainer/Graphics/VSync/OptionButton") -aa_dropdown = NodePath("VBoxContainer/TabContainer/Graphics/AntiAliasing/OptionButton") -window_dropdown = NodePath("VBoxContainer/TabContainer/Graphics/Windowed/OptionButton") -invert_lookY = NodePath("VBoxContainer/TabContainer/Gameplay/InvertMouseY/CenterContainer/CheckButton") -invert_lookX = NodePath("VBoxContainer/TabContainer/Gameplay/InvertMouseX/CenterContainer/CheckButton") -fov_input = NodePath("VBoxContainer/TabContainer/Graphics/FOV/HBoxContainer/SpinBox") -fov_slider = NodePath("VBoxContainer/TabContainer/Graphics/FOV/HBoxContainer/HSlider") -fixed_minimap = NodePath("VBoxContainer/TabContainer/Gameplay/FixedMinimap/CenterContainer/CheckButton") -tower_damage = NodePath("VBoxContainer/TabContainer/Gameplay/FloatingDamageIndicators/CenterContainer/HBoxContainer/Button") -self_damage = NodePath("VBoxContainer/TabContainer/Gameplay/FloatingDamageIndicators/CenterContainer/HBoxContainer/Button2") -party_damage = NodePath("VBoxContainer/TabContainer/Gameplay/FloatingDamageIndicators/CenterContainer/HBoxContainer/Button3") [node name="VBoxContainer" type="VBoxContainer" parent="."] layout_mode = 2 @@ -39,275 +25,18 @@ layout_mode = 2 layout_mode = 2 size_flags_vertical = 3 -[node name="Gameplay" type="VBoxContainer" parent="VBoxContainer/TabContainer"] +[node name="Gameplay" parent="VBoxContainer/TabContainer" instance=ExtResource("3_25wuw")] layout_mode = 2 -[node name="MouseSens" type="HBoxContainer" parent="VBoxContainer/TabContainer/Gameplay"] -layout_mode = 2 -alignment = 1 - -[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Gameplay/MouseSens"] -layout_mode = 2 -size_flags_horizontal = 3 -text = "Look Sensitivity" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/TabContainer/Gameplay/MouseSens"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="SpinBox" type="SpinBox" parent="VBoxContainer/TabContainer/Gameplay/MouseSens/HBoxContainer"] -layout_mode = 2 -theme_override_icons/updown = SubResource("ImageTexture_03x6q") -step = 0.01 -alignment = 1 -update_on_text_changed = true - -[node name="HSlider" type="HSlider" parent="VBoxContainer/TabContainer/Gameplay/MouseSens/HBoxContainer"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 1 -step = 0.01 -scrollable = false - -[node name="ToggleSprint" type="HBoxContainer" parent="VBoxContainer/TabContainer/Gameplay"] -layout_mode = 2 - -[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Gameplay/ToggleSprint"] -layout_mode = 2 -size_flags_horizontal = 3 -text = "Toggle Sprint" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="CenterContainer" type="CenterContainer" parent="VBoxContainer/TabContainer/Gameplay/ToggleSprint"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="CheckButton" type="CheckButton" parent="VBoxContainer/TabContainer/Gameplay/ToggleSprint/CenterContainer"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="InvertMouseY" type="HBoxContainer" parent="VBoxContainer/TabContainer/Gameplay"] -layout_mode = 2 - -[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Gameplay/InvertMouseY"] -layout_mode = 2 -size_flags_horizontal = 3 -text = "Invert Look Y" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="CenterContainer" type="CenterContainer" parent="VBoxContainer/TabContainer/Gameplay/InvertMouseY"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="CheckButton" type="CheckButton" parent="VBoxContainer/TabContainer/Gameplay/InvertMouseY/CenterContainer"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="InvertMouseX" type="HBoxContainer" parent="VBoxContainer/TabContainer/Gameplay"] -layout_mode = 2 - -[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Gameplay/InvertMouseX"] -layout_mode = 2 -size_flags_horizontal = 3 -text = "Invert Look X" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="CenterContainer" type="CenterContainer" parent="VBoxContainer/TabContainer/Gameplay/InvertMouseX"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="CheckButton" type="CheckButton" parent="VBoxContainer/TabContainer/Gameplay/InvertMouseX/CenterContainer"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="FixedMinimap" type="HBoxContainer" parent="VBoxContainer/TabContainer/Gameplay"] -layout_mode = 2 - -[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Gameplay/FixedMinimap"] -layout_mode = 2 -size_flags_horizontal = 3 -text = "Fixed Minimap" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="CenterContainer" type="CenterContainer" parent="VBoxContainer/TabContainer/Gameplay/FixedMinimap"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="CheckButton" type="CheckButton" parent="VBoxContainer/TabContainer/Gameplay/FixedMinimap/CenterContainer"] -layout_mode = 2 - -[node name="FloatingDamageIndicators" type="HBoxContainer" parent="VBoxContainer/TabContainer/Gameplay"] -layout_mode = 2 - -[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Gameplay/FloatingDamageIndicators"] -layout_mode = 2 -size_flags_horizontal = 3 -text = "Floating Damage Indicators" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="CenterContainer" type="CenterContainer" parent="VBoxContainer/TabContainer/Gameplay/FloatingDamageIndicators"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/TabContainer/Gameplay/FloatingDamageIndicators/CenterContainer"] -layout_mode = 2 - -[node name="Button" type="Button" parent="VBoxContainer/TabContainer/Gameplay/FloatingDamageIndicators/CenterContainer/HBoxContainer"] -layout_mode = 2 -toggle_mode = true -button_pressed = true -text = "Tower Damage" - -[node name="Button2" type="Button" parent="VBoxContainer/TabContainer/Gameplay/FloatingDamageIndicators/CenterContainer/HBoxContainer"] -layout_mode = 2 -toggle_mode = true -button_pressed = true -text = "Self Damage" - -[node name="Button3" type="Button" parent="VBoxContainer/TabContainer/Gameplay/FloatingDamageIndicators/CenterContainer/HBoxContainer"] -layout_mode = 2 -toggle_mode = true -button_pressed = true -text = "Party Damage" - -[node name="Button4" type="Button" parent="VBoxContainer/TabContainer/Gameplay/FloatingDamageIndicators/CenterContainer/HBoxContainer"] -layout_mode = 2 -toggle_mode = true -button_pressed = true -text = "Status Effect Damage" - -[node name="Graphics" type="VBoxContainer" parent="VBoxContainer/TabContainer"] +[node name="Graphics" parent="VBoxContainer/TabContainer" instance=ExtResource("4_ckcvq")] visible = false layout_mode = 2 -[node name="FOV" type="HBoxContainer" parent="VBoxContainer/TabContainer/Graphics"] -layout_mode = 2 -alignment = 1 - -[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Graphics/FOV"] -layout_mode = 2 -size_flags_horizontal = 3 -text = "Field Of View" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/TabContainer/Graphics/FOV"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="SpinBox" type="SpinBox" parent="VBoxContainer/TabContainer/Graphics/FOV/HBoxContainer"] -layout_mode = 2 -theme_override_icons/updown = SubResource("ImageTexture_03x6q") -min_value = 40.0 -max_value = 160.0 -value = 100.0 -allow_greater = true -allow_lesser = true -alignment = 1 -update_on_text_changed = true - -[node name="HSlider" type="HSlider" parent="VBoxContainer/TabContainer/Graphics/FOV/HBoxContainer"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 1 -min_value = 40.0 -max_value = 160.0 -value = 100.0 -scrollable = false - -[node name="VSync" type="HBoxContainer" parent="VBoxContainer/TabContainer/Graphics"] -layout_mode = 2 - -[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Graphics/VSync"] -layout_mode = 2 -size_flags_horizontal = 3 -text = "V-Sync" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="OptionButton" type="OptionButton" parent="VBoxContainer/TabContainer/Graphics/VSync"] -layout_mode = 2 -size_flags_horizontal = 3 -item_count = 4 -selected = 1 -popup/item_0/text = "Off" -popup/item_0/id = 0 -popup/item_1/text = "On" -popup/item_1/id = 1 -popup/item_2/text = "Adaptive" -popup/item_2/id = 2 -popup/item_3/text = "Triple Buffered" -popup/item_3/id = 3 - -[node name="AntiAliasing" type="HBoxContainer" parent="VBoxContainer/TabContainer/Graphics"] -layout_mode = 2 - -[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Graphics/AntiAliasing"] -layout_mode = 2 -size_flags_horizontal = 3 -text = "Anti-Aliasing -" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="OptionButton" type="OptionButton" parent="VBoxContainer/TabContainer/Graphics/AntiAliasing"] -layout_mode = 2 -size_flags_horizontal = 3 -item_count = 3 -selected = 0 -popup/item_0/text = "Off" -popup/item_0/id = 0 -popup/item_1/text = "FXAA" -popup/item_1/id = 1 -popup/item_2/text = "TAA" -popup/item_2/id = 2 - -[node name="Windowed" type="HBoxContainer" parent="VBoxContainer/TabContainer/Graphics"] -layout_mode = 2 - -[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Graphics/Windowed"] -layout_mode = 2 -size_flags_horizontal = 3 -text = "Window Mode" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="OptionButton" type="OptionButton" parent="VBoxContainer/TabContainer/Graphics/Windowed"] -layout_mode = 2 -size_flags_horizontal = 3 -item_count = 3 -selected = 0 -popup/item_0/text = "Windowed" -popup/item_0/id = 0 -popup/item_1/text = "Borderless Windowed" -popup/item_1/id = 1 -popup/item_2/text = "Fullscreen" -popup/item_2/id = 2 - -[node name="Keybinds" type="VBoxContainer" parent="VBoxContainer/TabContainer"] +[node name="Keybinds" parent="VBoxContainer/TabContainer" instance=ExtResource("5_4k33c")] visible = false layout_mode = 2 -[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/TabContainer/Keybinds"] -layout_mode = 2 - -[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer/TabContainer/Keybinds"] -layout_mode = 2 -size_flags_vertical = 3 - -[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/TabContainer/Keybinds/ScrollContainer"] -layout_mode = 2 -size_flags_horizontal = 3 - -[node name="Audio" type="VBoxContainer" parent="VBoxContainer/TabContainer"] -visible = false +[node name="Audio" parent="VBoxContainer/TabContainer" instance=ExtResource("6_4vs8p")] layout_mode = 2 [node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] @@ -322,11 +51,5 @@ text = "Discard" layout_mode = 2 text = "Confirm" -[connection signal="value_changed" from="VBoxContainer/TabContainer/Gameplay/MouseSens/HBoxContainer/SpinBox" to="." method="_on_mouse_sens_spin_box_value_changed"] -[connection signal="value_changed" from="VBoxContainer/TabContainer/Gameplay/MouseSens/HBoxContainer/HSlider" to="." method="_on_mouse_sens_h_slider_value_changed"] -[connection signal="value_changed" from="VBoxContainer/TabContainer/Graphics/FOV/HBoxContainer/SpinBox" to="." method="_on_fov_spin_box_value_changed"] -[connection signal="value_changed" from="VBoxContainer/TabContainer/Graphics/FOV/HBoxContainer/HSlider" to="." method="_on_fov_h_slider_value_changed"] -[connection signal="item_selected" from="VBoxContainer/TabContainer/Graphics/VSync/OptionButton" to="." method="_on_vsync_option_button_item_selected"] -[connection signal="item_selected" from="VBoxContainer/TabContainer/Graphics/AntiAliasing/OptionButton" to="." method="_on_AA_option_button_item_selected"] [connection signal="pressed" from="VBoxContainer/HBoxContainer/Cancel" to="." method="_on_cancel_pressed"] [connection signal="pressed" from="VBoxContainer/HBoxContainer/Confirm" to="." method="_on_confirm_pressed"] diff --git a/Scenes/Menus/singleplayer_lobby.tscn b/Scenes/Menus/singleplayer_lobby.tscn index a79f77e..c586e2f 100644 --- a/Scenes/Menus/singleplayer_lobby.tscn +++ b/Scenes/Menus/singleplayer_lobby.tscn @@ -54,9 +54,7 @@ grow_vertical = 2 text = "Ready" [node name="Chatbox" parent="." instance=ExtResource("3_l8xy3")] -visible = false layout_mode = 1 -offset_bottom = -507.0 [connection signal="pressed" from="ReadyButton" to="Scoreboard" method="set_player_ready_state" binds= [1, true]] [connection signal="pressed" from="ReadyButton" to="ReadyButton" method="set_visible" binds= [false]] diff --git a/Scenes/Towers/range_affecting_tower.tscn b/Scenes/Towers/range_affecting_tower.tscn new file mode 100644 index 0000000..3d00b32 --- /dev/null +++ b/Scenes/Towers/range_affecting_tower.tscn @@ -0,0 +1,7 @@ +[gd_scene load_steps=3 format=3 uid="uid://bi6b2r6wek7he"] + +[ext_resource type="PackedScene" uid="uid://dxwtlvv632ae8" path="res://Scenes/Towers/status_applying_tower.tscn" id="1_x852w"] +[ext_resource type="Script" path="res://Scripts/Towers/range_affecting_tower.gd" id="2_wc1xf"] + +[node name="RangeAffectingTower" instance=ExtResource("1_x852w")] +script = ExtResource("2_wc1xf") diff --git a/Scenes/Towers/shapecast_tower.tscn b/Scenes/Towers/shapecast_tower.tscn new file mode 100644 index 0000000..65d0e27 --- /dev/null +++ b/Scenes/Towers/shapecast_tower.tscn @@ -0,0 +1,14 @@ +[gd_scene load_steps=3 format=3 uid="uid://8uxu72vjo0cv"] + +[ext_resource type="PackedScene" uid="uid://bvqu1heobgboe" path="res://Scenes/Towers/tower.tscn" id="1_ljc02"] +[ext_resource type="Script" path="res://Scripts/Towers/shapecast_tower.gd" id="2_qh834"] + +[node name="ShapecastTower" node_paths=PackedStringArray("shapecast", "particlesystem") instance=ExtResource("1_ljc02")] +script = ExtResource("2_qh834") +shapecast = NodePath("Yaw/ShapeCast3D") +particlesystem = NodePath("Yaw/ShapeCast3D/GPUParticles3D") +status_stats = null + +[node name="ShapeCast3D" type="ShapeCast3D" parent="Yaw" index="0"] + +[node name="GPUParticles3D" type="GPUParticles3D" parent="Yaw/ShapeCast3D" index="0"] diff --git a/Scenes/UI/chatbox.tscn b/Scenes/UI/chatbox.tscn index a1b1ee7..dd7b1ab 100644 --- a/Scenes/UI/chatbox.tscn +++ b/Scenes/UI/chatbox.tscn @@ -1,8 +1,11 @@ -[gd_scene load_steps=2 format=3 uid="uid://ddmg342ff2qaq"] +[gd_scene load_steps=3 format=3 uid="uid://ddmg342ff2qaq"] [ext_resource type="Script" path="res://Scripts/chatbox.gd" id="1_k3g22"] -[node name="Chatbox" type="Control"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_c3kb6"] +bg_color = Color(0.223529, 0.211765, 0.184314, 0.462745) + +[node name="Chatbox" type="Control" node_paths=PackedStringArray("input_line", "textbox", "text_panel", "fade_timer")] layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -11,24 +14,32 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_k3g22") +input_line = NodePath("VBoxContainer/LineEdit") +textbox = NodePath("VBoxContainer/PanelContainer/RichTextLabel") +text_panel = NodePath("VBoxContainer/PanelContainer") +fade_timer = NodePath("Timer") [node name="VBoxContainer" type="VBoxContainer" parent="."] -layout_mode = 1 -anchors_preset = -1 -anchor_top = 1.0 -anchor_bottom = 1.0 -offset_left = 15.0 -offset_top = -210.0 -offset_right = 350.0 -offset_bottom = -10.0 -grow_vertical = 0 +layout_mode = 2 +offset_left = 40.0 +offset_top = 100.0 +offset_right = 375.0 +offset_bottom = 300.0 mouse_filter = 2 alignment = 2 -[node name="RichTextLabel" type="RichTextLabel" parent="VBoxContainer"] +[node name="PanelContainer" type="PanelContainer" parent="VBoxContainer"] +modulate = Color(1, 1, 1, 0) +layout_mode = 2 +size_flags_vertical = 3 +theme_override_styles/panel = SubResource("StyleBoxFlat_c3kb6") + +[node name="RichTextLabel" type="RichTextLabel" parent="VBoxContainer/PanelContainer"] +modulate = Color(1, 1, 1, 0) layout_mode = 2 size_flags_vertical = 3 mouse_filter = 2 +bbcode_enabled = true scroll_following = true [node name="LineEdit" type="LineEdit" parent="VBoxContainer"] @@ -37,3 +48,8 @@ layout_mode = 2 mouse_filter = 2 context_menu_enabled = false selecting_enabled = false + +[node name="Timer" type="Timer" parent="."] +wait_time = 3.5 + +[connection signal="timeout" from="Timer" to="." method="_on_timer_timeout"] diff --git a/Scenes/Weapons/shapecast_weapon.tscn b/Scenes/Weapons/shapecast_weapon.tscn new file mode 100644 index 0000000..2387863 --- /dev/null +++ b/Scenes/Weapons/shapecast_weapon.tscn @@ -0,0 +1,44 @@ +[gd_scene load_steps=7 format=3 uid="uid://dp4gfr5h0tbcd"] + +[ext_resource type="PackedScene" uid="uid://b7nargdyg28fj" path="res://Scenes/Weapons/weapon.tscn" id="1_gfchc"] +[ext_resource type="Script" path="res://Scripts/Weapons/shapecast_weapon.gd" id="2_lg6v5"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_uk6ey"] +size = Vector3(2, 2, 3) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_vi555"] +vertex_color_use_as_albedo = true + +[sub_resource type="BoxMesh" id="BoxMesh_o37rs"] +material = SubResource("StandardMaterial3D_vi555") + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_sgbeo"] +transparency = 1 +cull_mode = 1 +shading_mode = 0 +albedo_color = Color(1, 0, 0.415686, 0.223529) + +[node name="ShapecastWeapon" node_paths=PackedStringArray("shapecast", "range_debug_indicator", "particles") instance=ExtResource("1_gfchc")] +script = ExtResource("2_lg6v5") +shapecast = NodePath("ShapeCast3D") +range_debug_indicator = NodePath("CSGSphere3D") +status_stats = null +particles = NodePath("ShapeCast3D/GPUParticles3D") + +[node name="ShapeCast3D" type="ShapeCast3D" parent="." index="2"] +transform = Transform3D(0.984808, 0, 0.173648, 0, 1, 0, -0.173648, 0, 0.984808, 0, 0, 0) +shape = SubResource("BoxShape3D_uk6ey") +target_position = Vector3(0, 0, -1.5) +collision_mask = 4 + +[node name="GPUParticles3D" type="GPUParticles3D" parent="ShapeCast3D" index="0"] +amount = 36 +visibility_aabb = AABB(-1.02851, -1.00566, -3.03983, 2.05703, 2.01132, 6.07966) +draw_pass_1 = SubResource("BoxMesh_o37rs") + +[node name="CSGSphere3D" type="CSGSphere3D" parent="." index="3"] +visible = false +radius = 4.104 +radial_segments = 16 +rings = 16 +material = SubResource("StandardMaterial3D_sgbeo") diff --git a/Scenes/tower_base.tscn b/Scenes/tower_base.tscn index aaf4606..6c66290 100644 --- a/Scenes/tower_base.tscn +++ b/Scenes/tower_base.tscn @@ -1,28 +1,27 @@ -[gd_scene load_steps=5 format=3 uid="uid://ddbbwx0yy16lh"] +[gd_scene load_steps=6 format=3 uid="uid://ddbbwx0yy16lh"] [ext_resource type="Script" path="res://Scripts/tower_base.gd" id="1_tghvd"] [ext_resource type="Script" path="res://Scripts/inventory.gd" id="2_p5c7g"] [ext_resource type="Texture2D" uid="uid://ba85u6i558x4w" path="res://Assets/Textures/minimap_node.png" id="3_01hk3"] +[ext_resource type="ArrayMesh" uid="uid://cr83c74ys8rll" path="res://textmesh.res" id="4_hosgw"] [sub_resource type="BoxShape3D" id="BoxShape3D_lc72v"] +size = Vector3(1.1, 1.1, 1.1) [node name="Node3D" type="StaticBody3D" node_paths=PackedStringArray("inventory", "block", "collider", "minimap_icon")] collision_layer = 17 script = ExtResource("1_tghvd") inventory = NodePath("Inventory") -block = NodePath("CSGBox3D") +block = NodePath("MeshInstance3D") collider = NodePath("CollisionShape3D") minimap_icon = NodePath("Sprite3D") -[node name="CSGBox3D" type="CSGBox3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) - [node name="Inventory" type="Node" parent="."] script = ExtResource("2_p5c7g") max_size = 1 [node name="CollisionShape3D" type="CollisionShape3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.55, 0) shape = SubResource("BoxShape3D_lc72v") [node name="Sprite3D" type="Sprite3D" parent="."] @@ -31,3 +30,7 @@ layers = 4 modulate = Color(0, 1, 0, 1) texture_filter = 0 texture = ExtResource("3_01hk3") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.55, 0) +mesh = ExtResource("4_hosgw") diff --git a/Scenes/tower_frame.tscn b/Scenes/tower_frame.tscn index 33b991c..dcba23b 100644 --- a/Scenes/tower_frame.tscn +++ b/Scenes/tower_frame.tscn @@ -17,23 +17,23 @@ albedo_color = Color(0.0980392, 0.309804, 0.180392, 1) [node name="Node3D" type="Node3D"] [node name="CSGBox3D2" type="CSGBox3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.02, 0.525) -size = Vector3(1, 0.04, 0.05) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.02, 0.575) +size = Vector3(0.525, 0.04, 0.05) material = SubResource("StandardMaterial3D_xt3aj") [node name="CSGBox3D3" type="CSGBox3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.02, -0.525) -size = Vector3(1, 0.04, 0.05) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.02, -0.575) +size = Vector3(0.525, 0.04, 0.05) material = SubResource("StandardMaterial3D_gbm1j") [node name="CSGBox3D4" type="CSGBox3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.525, 0.02, 0) -size = Vector3(0.05, 0.04, 1.1) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.575, 0.02, 0) +size = Vector3(0.05, 0.04, 0.525) material = SubResource("StandardMaterial3D_18qg8") [node name="CSGBox3D5" type="CSGBox3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.525, 0.02, 0) -size = Vector3(0.05, 0.04, 1.1) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.575, 0.02, 0) +size = Vector3(0.05, 0.04, 0.525) material = SubResource("StandardMaterial3D_ip8b2") [node name="Sprite3D" type="Sprite3D" parent="."] diff --git a/Scripts/Projectiles/explosive_projectile.gd b/Scripts/Projectiles/explosive_projectile.gd index 01d3970..0a1ec30 100644 --- a/Scripts/Projectiles/explosive_projectile.gd +++ b/Scripts/Projectiles/explosive_projectile.gd @@ -26,6 +26,15 @@ func explode(): func hit(target): target.damage(damage) + if owner_id == 0: + if Data.preferences.display_tower_damage_indicators: + spawn_damage_indicator(target.sprite.global_position) + if owner_id == multiplayer.get_unique_id(): + if Data.preferences.display_self_damage_indicators: + spawn_damage_indicator(target.sprite.global_position) + if owner_id != 0 and owner_id != multiplayer.get_unique_id(): + if Data.preferences.display_party_damage_indicators: + spawn_damage_indicator(target.sprite.global_position) @rpc("reliable") diff --git a/Scripts/Projectiles/homing_projectile.gd b/Scripts/Projectiles/homing_projectile.gd index 6a5d099..fca909d 100644 --- a/Scripts/Projectiles/homing_projectile.gd +++ b/Scripts/Projectiles/homing_projectile.gd @@ -2,16 +2,17 @@ extends ExplosiveProjectile class_name HomingProjectile var target : Node3D -@export var acceleration := 40.0 -@export var max_speed := 14.0 +var acceleration := 50.0 +var max_speed := 13.0 func _physics_process(_delta: float) -> void: if is_instance_valid(target): - direction = global_position.direction_to(target.global_position) + direction = global_position.direction_to(target.sprite.global_position) #apply_central_force(direction * acceleration) func _integrate_forces(state: PhysicsDirectBodyState3D) -> void: + state.linear_velocity = state.linear_velocity.limit_length(state.linear_velocity.length() * (1.0 - 0.08)) state.linear_velocity += direction * acceleration * state.step state.linear_velocity = state.linear_velocity.limit_length(max_speed) diff --git a/Scripts/Projectiles/projectile.gd b/Scripts/Projectiles/projectile.gd index 31f35b8..da0715c 100644 --- a/Scripts/Projectiles/projectile.gd +++ b/Scripts/Projectiles/projectile.gd @@ -3,6 +3,8 @@ class_name Projectile @export var collision_shape : CollisionShape3D +var damage_particle_scene = preload("res://Scenes/damage_particle.tscn") +var owner_id = 0 #should be left unchanged by towers, 1 for host, peer_id on peers var direction := Vector3.FORWARD var force := 2.0 var damage := 0.0 @@ -18,6 +20,14 @@ func _process(delta: float) -> void: time_alive += delta +func spawn_damage_indicator(pos): + if damage > 0: + var marker = damage_particle_scene.instantiate() + get_tree().root.add_child(marker) + marker.set_number(damage) + marker.position = pos + + func _on_body_entered(_body: Node) -> void: pass # Replace with function body. diff --git a/Scripts/Resources/player_graphics_settings.gd b/Scripts/Resources/player_graphics_settings.gd new file mode 100644 index 0000000..1e99178 --- /dev/null +++ b/Scripts/Resources/player_graphics_settings.gd @@ -0,0 +1,38 @@ +extends Resource +class_name PlayerGraphicsSettings + +const SAVE_PATH := "user://graphics_settings.tres" + +@export var hfov := 100.0 +@export var vsync_mode := 1 +@export var aa_mode := 0 +@export var windowed_mode := 0 + + +func apply_graphical_settings(viewport): + DisplayServer.window_set_vsync_mode(vsync_mode) + match aa_mode: + 0: + viewport.use_taa = false + viewport.screen_space_aa = Viewport.SCREEN_SPACE_AA_DISABLED + 1: + viewport.use_taa = false + viewport.screen_space_aa = Viewport.SCREEN_SPACE_AA_FXAA + 2: + viewport.use_taa = true + viewport.screen_space_aa = Viewport.SCREEN_SPACE_AA_DISABLED + match windowed_mode: + 0: + DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) + 1: + DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN) + 2: + DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN) + + +func save_profile_to_disk(): + ResourceSaver.save(self, SAVE_PATH) +static func load_profile_from_disk() -> PlayerGraphicsSettings: + if ResourceLoader.exists(SAVE_PATH): + return ResourceLoader.load(SAVE_PATH) + return PlayerGraphicsSettings.new() diff --git a/Scripts/Resources/player_preferences.gd b/Scripts/Resources/player_preferences.gd index 9ef494b..bbc6efc 100644 --- a/Scripts/Resources/player_preferences.gd +++ b/Scripts/Resources/player_preferences.gd @@ -7,10 +7,6 @@ const SAVE_PATH := "user://preferences.tres" @export var invert_lookY := false @export var invert_lookX := false @export var toggle_sprint := false -@export var vsync_mode := 1 -@export var aa_mode := 0 -@export var windowed_mode := 0 -@export var hfov := 100.0 @export var fixed_minimap := false @export var display_tower_damage_indicators := true @export var display_self_damage_indicators := true @@ -18,27 +14,6 @@ const SAVE_PATH := "user://preferences.tres" @export var display_status_effect_damage_indicators := true -func apply_graphical_settings(viewport): - DisplayServer.window_set_vsync_mode(vsync_mode) - match aa_mode: - 0: - viewport.use_taa = false - viewport.screen_space_aa = Viewport.SCREEN_SPACE_AA_DISABLED - 1: - viewport.use_taa = false - viewport.screen_space_aa = Viewport.SCREEN_SPACE_AA_FXAA - 2: - viewport.use_taa = true - viewport.screen_space_aa = Viewport.SCREEN_SPACE_AA_DISABLED - match windowed_mode: - 0: - DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) - 1: - DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN) - 2: - DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN) - - func save_profile_to_disk(): ResourceSaver.save(self, SAVE_PATH) static func load_profile_from_disk() -> PlayerPreferences: diff --git a/Scripts/Towers/hitscan_tower.gd b/Scripts/Towers/hitscan_tower.gd index 45b5d51..5ef45be 100644 --- a/Scripts/Towers/hitscan_tower.gd +++ b/Scripts/Towers/hitscan_tower.gd @@ -6,6 +6,8 @@ func shoot(): super.shoot() if targeted_enemy and is_instance_valid(targeted_enemy) and targeted_enemy.alive: targeted_enemy.damage(damage) + if Data.preferences.display_tower_damage_indicators: + spawn_damage_indicator(targeted_enemy.sprite.global_position) @rpc("reliable") diff --git a/Scripts/Towers/projectile_tower.gd b/Scripts/Towers/projectile_tower.gd index 1d65c24..3320054 100644 --- a/Scripts/Towers/projectile_tower.gd +++ b/Scripts/Towers/projectile_tower.gd @@ -28,3 +28,4 @@ func networked_spawn_projectile(peer_id): projectile.name = base_name + str(peer_id) + str(projectile_id) get_tree().root.add_child(projectile) projectile_id += 1 + return projectile diff --git a/Scripts/Towers/range_affecting_tower.gd b/Scripts/Towers/range_affecting_tower.gd new file mode 100644 index 0000000..68454c3 --- /dev/null +++ b/Scripts/Towers/range_affecting_tower.gd @@ -0,0 +1,32 @@ +extends StatusApplyingTower +class_name RangeAffectingTower + + +func _physics_process(_delta: float) -> void: + if !is_multiplayer_authority(): + return + var enemies_in_range = [] + for enemy in get_tree().get_nodes_in_group("Enemies"): + if !is_instance_valid(enemy) or !enemy.alive or global_position.distance_to(enemy.global_position) > target_range: + continue + enemies_in_range.append(enemy) + if time_since_firing >= time_between_shots: + time_since_firing -= time_between_shots + for enemy in enemies_in_range: + fire(enemy) + + +func fire(target): + if is_instance_valid(target) and target.alive: + target.damage(damage) + target.status_manager.add_effect(build_status_object()) + if Data.preferences.display_tower_damage_indicators: + spawn_damage_indicator(target.sprite.global_position) + if is_multiplayer_authority(): + networked_fire.rpc(get_tree().root.get_path_to(target)) + + +@rpc("reliable") +func networked_fire(target_node_path): + var target = get_tree().root.get_node(target_node_path) + fire(target) diff --git a/Scripts/Towers/shapecast_tower.gd b/Scripts/Towers/shapecast_tower.gd new file mode 100644 index 0000000..4188d33 --- /dev/null +++ b/Scripts/Towers/shapecast_tower.gd @@ -0,0 +1,48 @@ +extends Tower +class_name ShapecastTower + +@export var shapecast : ShapeCast3D +@export var particlesystem : GPUParticles3D +@export var status_stats : StatusStats + + +func _process(delta: float) -> void: + super._process(delta) + if targeted_enemy: + particlesystem.emitting = true + else: + particlesystem.emitting = false + + +func shoot(): + for index in shapecast.get_collision_count(): + var target = shapecast.get_collider(index) as CharacterBody3D + hit(target) + + +func aim(): + yaw_model.look_at(targeted_enemy.global_position) + pitch_model.look_at(targeted_enemy.global_position) + pitch_model.rotation.x = 0.0 + + +func hit(target): + if is_instance_valid(target) and target.alive: + target.damage(damage) + if Data.preferences.display_tower_damage_indicators: + spawn_damage_indicator(target.sprite.global_position) + target.status_manager.add_effect(build_status_object()) + if is_multiplayer_authority(): + networked_hit.rpc(get_tree().root.get_path_to(target)) + + +func build_status_object() -> StatusEffect: + var status = StatusEffect.new() + status.stats = status_stats + return status + + +@rpc("reliable") +func networked_hit(target_node_path): + var target = get_tree().root.get_node(target_node_path) + hit(target) diff --git a/Scripts/Towers/tower.gd b/Scripts/Towers/tower.gd index 3a2167f..e7e76de 100644 --- a/Scripts/Towers/tower.gd +++ b/Scripts/Towers/tower.gd @@ -7,6 +7,7 @@ class_name Tower @export var yaw_model : MeshInstance3D @export var range_indicator : CSGSphere3D +var damage_particle_scene = preload("res://Scenes/damage_particle.tscn") var base_name var targeted_enemy var time_since_firing := 0.0 @@ -82,6 +83,14 @@ func shoot(): networked_shoot.rpc() +func spawn_damage_indicator(pos): + if damage > 0: + var marker = damage_particle_scene.instantiate() + get_tree().root.add_child(marker) + marker.set_number(damage) + marker.position = pos + + @rpc("reliable") func networked_shoot(): shoot() diff --git a/Scripts/Weapons/projectile_weapon.gd b/Scripts/Weapons/projectile_weapon.gd index 22b40fd..7178fab 100644 --- a/Scripts/Weapons/projectile_weapon.gd +++ b/Scripts/Weapons/projectile_weapon.gd @@ -24,6 +24,7 @@ func networked_spawn_projectile(peer_id, direction): projectile.damage = damage projectile.direction = direction projectile.force = force + projectile.owner_id = peer_id projectile.name = str(peer_id) + str(projectile_id) get_tree().root.add_child(projectile) projectile_id += 1 diff --git a/Scripts/Weapons/shapecast_weapon.gd b/Scripts/Weapons/shapecast_weapon.gd new file mode 100644 index 0000000..7895ada --- /dev/null +++ b/Scripts/Weapons/shapecast_weapon.gd @@ -0,0 +1,55 @@ +extends Weapon +class_name ShapecastWeapon + +@export var shapecast : ShapeCast3D +@export var range_debug_indicator : CSGSphere3D +@export var status_stats : StatusStats +@export var particles : GPUParticles3D + +var attack_range := 0.0 + + +func _ready() -> void: + super._ready() + attack_range = stats.get_attribute("Range") + range_debug_indicator.radius = attack_range + shapecast.shape.size.z = attack_range + shapecast.target_position = -hero.camera.basis.z * (attack_range / 2.0) + + +func _process(delta: float) -> void: + super._process(delta) + particles.emitting = trigger_held + + +func shoot(): + super.shoot() + for index in shapecast.get_collision_count(): + var target = shapecast.get_collider(index) + if target: + var target_hitbox = target.shape_owner_get_owner(shapecast.get_collider_shape(index)) + if target_hitbox is Hitbox: + hit(target, target_hitbox) + if Data.preferences.display_self_damage_indicators: + spawn_damage_indicator(target.sprite.global_position) + networked_hit.rpc(get_tree().root.get_path_to(target), get_tree().root.get_path_to(target_hitbox)) + + +func build_status_object() -> StatusEffect: + var status = StatusEffect.new() + status.stats = status_stats + return status + + +func hit(target, target_hitbox : Hitbox): + target_hitbox.damage(damage) + target.status_manager.add_effect(build_status_object()) + + +@rpc("reliable") +func networked_hit(target_path : String, target_hitbox_path : String): + var target = get_tree().root.get_node(target_path) + var target_hitbox = get_tree().root.get_node(target_hitbox_path) as Hitbox + hit(target, target_hitbox) + if Data.preferences.display_party_damage_indicators: + spawn_damage_indicator(target.sprite.global_position) diff --git a/Scripts/card_hand.gd b/Scripts/card_hand.gd index aab9f3d..a28e0f2 100644 --- a/Scripts/card_hand.gd +++ b/Scripts/card_hand.gd @@ -30,4 +30,4 @@ func view_weapon(): func view_tower(): description.text = process_card_text(stats.tower_stats) - target_label.text = str(stats.tower_stats.target_type) + target_label.text = str(Data.TargetType.keys()[stats.tower_stats.target_type]) diff --git a/Scripts/chatbox.gd b/Scripts/chatbox.gd index 1fb2512..e42df04 100644 --- a/Scripts/chatbox.gd +++ b/Scripts/chatbox.gd @@ -4,42 +4,70 @@ class_name Chatbox signal opened signal closed +@export var input_line : LineEdit +@export var textbox : RichTextLabel +@export var text_panel : PanelContainer +@export var fade_timer : Timer + var text_selected := false var username := "default" +var color = Color.TOMATO +var fading = true +var time_to_fade = 2.0 +var time_since_started_fading = 2.0 + + +func _process(delta: float) -> void: + if fading: + time_since_started_fading += delta + else: + time_since_started_fading = 0.0 + textbox.modulate.a = lerpf(1.0, 0.0, time_since_started_fading / time_to_fade) + text_panel.modulate.a = lerpf(1.0, 0.0, time_since_started_fading / time_to_fade) + func _input(event: InputEvent) -> void: if !text_selected and event.is_action_pressed("Open Text Chat"): get_viewport().set_input_as_handled() opened.emit() - $VBoxContainer/LineEdit.visible = true - $VBoxContainer/LineEdit.grab_focus() + input_line.visible = true + input_line.grab_focus() text_selected = true + fading = false return if text_selected and event is InputEventKey and event.pressed == true: if event.keycode == KEY_ENTER: get_viewport().set_input_as_handled() closed.emit() - $VBoxContainer/LineEdit.deselect() - $VBoxContainer/LineEdit.visible = false + input_line.deselect() + input_line.visible = false text_selected = false - if $VBoxContainer/LineEdit.text.length() != 0: - if $VBoxContainer/LineEdit.text.begins_with("/"): - Game.parse_command($VBoxContainer/LineEdit.text, multiplayer.get_unique_id()) + if input_line.text.length() != 0: + if input_line.text.begins_with("/"): + Game.parse_command(input_line.text, multiplayer.get_unique_id()) + fade_timer.start() else: - rpc("append_message", username, $VBoxContainer/LineEdit.text) - $VBoxContainer/LineEdit.clear() + append_message.rpc(username, color, input_line.text) + input_line.clear() if event.keycode == KEY_ESCAPE: get_viewport().set_input_as_handled() closed.emit() - $VBoxContainer/LineEdit.deselect() - $VBoxContainer/LineEdit.visible = false + input_line.deselect() + input_line.visible = false text_selected = false + fade_timer.start() func change_username(old_name, new_name): - append_message("server", old_name + " has changed their display name to " + new_name) + append_message("SERVER", Color.TOMATO, old_name + " has changed their display name to " + new_name) @rpc("reliable","call_local","any_peer") -func append_message(user, content): - $VBoxContainer/RichTextLabel.append_text("[" + user + "] " + content + "\n") +func append_message(user, user_color, content): + textbox.append_text("[[color=" + user_color.to_html() + "]" + user + "[color=white]] " + content + "\n") + fading = false + fade_timer.start() + + +func _on_timer_timeout() -> void: + fading = true diff --git a/Scripts/data.gd b/Scripts/data.gd index 9ab9009..0853e31 100644 --- a/Scripts/data.gd +++ b/Scripts/data.gd @@ -4,6 +4,7 @@ var characters : Array[HeroClass] var cards : Array[Card] var enemies : Array[Enemy] var keymaps : Array[PlayerKeymap] +var graphics : PlayerGraphicsSettings var preferences : PlayerPreferences var player_profile : PlayerProfile var player_keymap : PlayerKeymap @@ -22,10 +23,11 @@ var rarity_weights = { } func _ready() -> void: + graphics = PlayerGraphicsSettings.load_profile_from_disk() + graphics.apply_graphical_settings(get_viewport()) player_profile = PlayerProfile.load_profile_from_disk() preferences = PlayerPreferences.load_profile_from_disk() player_keymap = PlayerKeymap.load_profile_from_disk() - preferences.apply_graphical_settings(get_viewport()) player_keymap.apply() characters.append(preload("res://PCs/Red/red.tres")) @@ -39,10 +41,10 @@ func _ready() -> void: cards.append(preload("res://PCs/Universal/ClassCards/RocketLauncher/card_rocket_launcher.tres")) #Uncommon cards.append(preload("res://PCs/Universal/ClassCards/Blowdart/card_blowdart.tres")) - #cards.append(preload("res://PCs/Universal/ClassCards/Refridgerator/card_refridgerator.tres")) + cards.append(preload("res://PCs/Universal/ClassCards/Refrigerator/card_refrigerator.tres")) cards.append(preload("res://PCs/Universal/ClassCards/GlueLauncher/card_glue_launcher.tres")) #Rare - #cards.append(preload("res://PCs/Universal/ClassCards/Flamethrower/card_flamethrower.tres")) + cards.append(preload("res://PCs/Universal/ClassCards/Flamethrower/card_flamethrower.tres")) #cards.append(preload("res://PCs/Universal/ClassCards/DamageEnhancer/card_damage_enhancer.tres")) #cards.append(preload("res://PCs/Universal/ClassCards/SpeedEnhancer/card_speed_enhancer.tres")) #Epic @@ -51,7 +53,7 @@ func _ready() -> void: #cards.append(preload("res://PCs/Universal/ClassCards/GammaLaser/card_gamma_laser.tres")) #Legendary cards.append(preload("res://PCs/Universal/ClassCards/Sniper/card_sniper.tres")) - #cards.append(preload("res://PCs/Universal/ClassCards/Reactor/card_reactor.tres")) + cards.append(preload("res://PCs/Universal/ClassCards/Reactor/card_reactor.tres")) #cards.append(preload("res://PCs/Universal/ClassCards/Lightning/card_lightning.tres")) enemies.append(preload("res://Worlds/GreenPlanet/Enemies/dog.tres")) diff --git a/Scripts/game.gd b/Scripts/game.gd index 9041fba..3c07854 100644 --- a/Scripts/game.gd +++ b/Scripts/game.gd @@ -25,6 +25,7 @@ var wave := 0 var upcoming_wave var pot : float var UILayer : CanvasLayer +var chatbox : Chatbox func _ready() -> void: @@ -41,6 +42,12 @@ func parse_command(text : String, peer_id : int): if x.title == gift_name: gift = x connected_players_nodes[peer_id].inventory.add(gift) + if text.substr(1, 2) == "tr": + chatbox.append_message("SERVER", Color.TOMATO, "[color=#f7a8b8]t[color=#55cdfc]r[color=#ffffff]a[color=#55cdfc]n[color=#f7a8b8]s [color=#e50000]r[color=#ff8d00]i[color=#ffee00]g[color=#028121]h[color=#004cff]t[color=#760088]s[color=white]!!") +# if text.substr(1, 17) == "show tower ranges": +# pass +# if text.substr(1, 20) = "show gauntlet ranges": +# pass func spawn_level(): @@ -63,7 +70,6 @@ func spawn_players(player_array, player_profiles, chatbox_open_signal, chatbox_c player.position = level.player_spawns[p_i].global_position player.profile = player_profiles[peer_id] player.hero_class = Data.characters[player_profiles[peer_id].preferred_class] - print(player.hero_class.hero_name) player.ready_state_changed.connect(ready_player) if peer_id == multiplayer.get_unique_id(): chatbox_open_signal.connect(player.pause) @@ -99,7 +105,7 @@ func set_upcoming_wave(): if is_multiplayer_authority(): var spawn_power = WaveManager.calculate_spawn_power(wave + 1, connected_players_nodes.size()) var new_wave = WaveManager.generate_wave(spawn_power, level.enemy_pool) - networked_set_upcoming_wave.rpc(new_wave, 6 + floori(spawn_power / 100)) + networked_set_upcoming_wave.rpc(new_wave, 6 + floori(spawn_power / 50)) @rpc("reliable", "call_local") diff --git a/Scripts/gameplay_options.gd b/Scripts/gameplay_options.gd new file mode 100644 index 0000000..6dee586 --- /dev/null +++ b/Scripts/gameplay_options.gd @@ -0,0 +1,46 @@ +extends VBoxContainer +class_name GameplayOptionsMenu + +@export var look_sens_slider : HSlider +@export var look_sens_input : SpinBox +@export var toggle_sprint_checkbox : CheckButton +@export var invert_lookY : CheckButton +@export var invert_lookX : CheckButton +@export var fixed_minimap : CheckButton +@export var tower_damage : Button +@export var self_damage : Button +@export var party_damage : Button +@export var status_damage : Button + + +func _ready() -> void: + look_sens_slider.value = Data.preferences.mouse_sens + look_sens_input.value = Data.preferences.mouse_sens + toggle_sprint_checkbox.button_pressed = Data.preferences.toggle_sprint + invert_lookY.button_pressed = Data.preferences.invert_lookY + invert_lookX.button_pressed = Data.preferences.invert_lookX + fixed_minimap.button_pressed = Data.preferences.fixed_minimap + tower_damage.button_pressed = Data.preferences.display_tower_damage_indicators + self_damage.button_pressed = Data.preferences.display_self_damage_indicators + party_damage.button_pressed = Data.preferences.display_party_damage_indicators + status_damage.button_pressed = Data.preferences.display_status_effect_damage_indicators + + +func save() -> void: + Data.preferences.mouse_sens = look_sens_slider.value + Data.preferences.toggle_sprint = toggle_sprint_checkbox.button_pressed + Data.preferences.invert_lookY = invert_lookY.button_pressed + Data.preferences.invert_lookX = invert_lookX.button_pressed + Data.preferences.fixed_minimap = fixed_minimap.button_pressed + Data.preferences.display_tower_damage_indicators = tower_damage.button_pressed + Data.preferences.display_self_damage_indicators = self_damage.button_pressed + Data.preferences.display_party_damage_indicators = party_damage.button_pressed + Data.preferences.display_status_effect_damage_indicators = status_damage.button_pressed + + +func _on_mouse_sens_spin_box_value_changed(value: float) -> void: + look_sens_slider.value = value + + +func _on_mouse_sens_h_slider_value_changed(value: float) -> void: + look_sens_input.value = value diff --git a/Scripts/graphics_options.gd b/Scripts/graphics_options.gd new file mode 100644 index 0000000..b865714 --- /dev/null +++ b/Scripts/graphics_options.gd @@ -0,0 +1,36 @@ +extends VBoxContainer +class_name GraphicsOptionsMenu + +@export var fov_input : SpinBox +@export var fov_slider : HSlider +@export var vsync_dropdown : OptionButton +@export var aa_dropdown : OptionButton +@export var window_dropdown : OptionButton + + +func _ready(): + fov_input.value = Data.graphics.hfov + fov_slider.value = Data.graphics.hfov + vsync_dropdown.selected = Data.graphics.vsync_mode + aa_dropdown.selected = Data.graphics.aa_mode + + +func save(): + Data.graphics.hfov = fov_slider.value + Data.graphics.vsync_mode = vsync_dropdown.selected + Data.graphics.aa_mode = aa_dropdown.selected + Data.graphics.windowed_mode = window_dropdown.selected + + +func _on_fov_spin_box_value_changed(value: float) -> void: + if value < 40.0: + value = 40.0 + if value > 160.0: + value = 160.0 + fov_slider.value = value + Data.graphics.hfov = value + + +func _on_fov_h_slider_value_changed(value: float) -> void: + fov_input.value = value + Data.graphics.hfov = value diff --git a/Scripts/keybind_options.gd b/Scripts/keybind_options.gd new file mode 100644 index 0000000..154cf92 --- /dev/null +++ b/Scripts/keybind_options.gd @@ -0,0 +1,63 @@ +extends VBoxContainer + +var keybind_popup = load("res://Scenes/UI/keybind_popup.tscn") +var keybind_boxes = [] +var keybind_buttons = {} +var key_event +var selected_button +var selected_button_button +var listening_for_key := false + + +func _ready() -> void: + for index in Data.keymaps.size(): + var map = Data.keymaps[index] + var button = Button.new() + button.text = map.title + button.pressed.connect(set_keymap.bind(index)) + $HBoxContainer.add_child(button) + load_keybind_labels() + + +func set_keymap(keymap_index): + Data.player_keymap = Data.keymaps[keymap_index] + Data.player_keymap.apply() + load_keybind_labels() + + +func load_keybind_labels(): + for box in keybind_boxes: + box.queue_free() + keybind_boxes.clear() + for action in InputMap.get_actions(): + if !action.begins_with("ui_"): + var box = HBoxContainer.new() + var alabel = Label.new() + var elabel = Button.new() + alabel.text = action + if InputMap.action_get_events(action).size() > 0: + elabel.text = InputMap.action_get_events(action)[0].as_text() + elabel.size_flags_horizontal += Control.SIZE_EXPAND + alabel.size_flags_horizontal += Control.SIZE_EXPAND + alabel.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER + alabel.size_flags_stretch_ratio = 2.0 + #elabel.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT + box.add_child(alabel) + box.add_child(elabel) + elabel.pressed.connect(_on_keybind_button_pressed.bind(elabel)) + keybind_buttons[elabel] = action + $ScrollContainer/VBoxContainer.add_child(box) + keybind_boxes.append(box) + + +func _on_keybind_button_pressed(value: Button) -> void: + selected_button = keybind_buttons[value] + selected_button_button = value + var popup = keybind_popup.instantiate() + popup.event_detected.connect(change_key) + Game.UILayer.add_child(popup) + + +func change_key(event: InputEvent): + Data.player_keymap.replace_action_event(selected_button, event) + selected_button_button.text = event.as_text() diff --git a/Scripts/multiplayer_lobby.gd b/Scripts/multiplayer_lobby.gd index 6aab1a2..ffbf72c 100644 --- a/Scripts/multiplayer_lobby.gd +++ b/Scripts/multiplayer_lobby.gd @@ -32,7 +32,7 @@ func _on_player_connected(peer_id): func _on_player_disconnected(peer_id): if chatbox: - chatbox.append_message("SERVER", connected_players_profiles[peer_id].display_name + " has disconnected!") + chatbox.append_message("SERVER", Color.TOMATO, connected_players_profiles[peer_id].display_name + " has disconnected!") connected_players_profiles.erase(peer_id) player_disconnected.emit(peer_id) @@ -64,6 +64,7 @@ func setup_game(peer_id): Game.spawn_level() scoreboard.all_players_ready.connect(start_game) Game.game_restarted.connect(setup_the_ui) + Game.chatbox = chatbox setup_the_ui() chatbox.username = Data.player_profile.display_name Data.player_profile.display_name_changed.connect(chatbox.change_username) @@ -116,7 +117,7 @@ func add_player(new_player_profile_dict): var new_player_peer_id = multiplayer.get_remote_sender_id() var new_player_profile = PlayerProfile.from_dict(new_player_profile_dict) if chatbox: - chatbox.append_message("SERVER", new_player_profile.display_name + " has connected!") + chatbox.append_message("SERVER", Color.TOMATO, new_player_profile.display_name + " has connected!") connected_players_profiles[new_player_peer_id] = new_player_profile player_connected.emit(new_player_peer_id, new_player_profile) diff --git a/Scripts/options_menu.gd b/Scripts/options_menu.gd index 1229162..22dae47 100644 --- a/Scripts/options_menu.gd +++ b/Scripts/options_menu.gd @@ -1,137 +1,14 @@ extends Control class_name OptionsMenu -@export var keybind_popup : PackedScene -@export var look_sens_slider : HSlider -@export var look_sens_input : SpinBox -@export var toggle_sprint_checkbox : CheckButton -@export var vsync_dropdown : OptionButton -@export var aa_dropdown : OptionButton -@export var window_dropdown : OptionButton -@export var invert_lookY : CheckButton -@export var invert_lookX : CheckButton -@export var fov_input : SpinBox -@export var fov_slider : HSlider -@export var fixed_minimap : CheckButton -@export var tower_damage : Button -@export var self_damage : Button -@export var party_damage : Button -@export var status_damage : Button -var keybind_boxes = [] -var keybind_buttons = {} -var key_event -var selected_button -var selected_button_button -var listening_for_key := false - -func _ready(): - look_sens_slider.value = Data.preferences.mouse_sens - look_sens_input.value = Data.preferences.mouse_sens - toggle_sprint_checkbox.button_pressed = Data.preferences.toggle_sprint - vsync_dropdown.selected = Data.preferences.vsync_mode - aa_dropdown.selected = Data.preferences.aa_mode - invert_lookY.button_pressed = Data.preferences.invert_lookY - invert_lookX.button_pressed = Data.preferences.invert_lookX - fov_input.value = Data.preferences.hfov - fov_slider.value = Data.preferences.hfov - fixed_minimap.button_pressed = Data.preferences.fixed_minimap - tower_damage.button_pressed = Data.preferences.display_tower_damage_indicators - self_damage.button_pressed = Data.preferences.display_self_damage_indicators - party_damage.button_pressed = Data.preferences.display_party_damage_indicators - status_damage.button_pressed = Data.preferences.display_status_effect_damage_indicators - for index in Data.keymaps.size(): - var map = Data.keymaps[index] - var button = Button.new() - button.text = map.title - button.pressed.connect(set_keymap.bind(index)) - $VBoxContainer/TabContainer/Keybinds/HBoxContainer.add_child(button) - load_keybind_labels() - - -func set_keymap(keymap_index): - Data.player_keymap = Data.keymaps[keymap_index] - Data.player_keymap.apply() - load_keybind_labels() - - -func load_keybind_labels(): - for box in keybind_boxes: - box.queue_free() - keybind_boxes.clear() - for action in InputMap.get_actions(): - if !action.begins_with("ui_"): - var box = HBoxContainer.new() - var alabel = Label.new() - var elabel = Button.new() - alabel.text = action - if InputMap.action_get_events(action).size() > 0: - elabel.text = InputMap.action_get_events(action)[0].as_text() - elabel.size_flags_horizontal += Control.SIZE_EXPAND - alabel.size_flags_horizontal += Control.SIZE_EXPAND - alabel.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER - alabel.size_flags_stretch_ratio = 2.0 - #elabel.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT - box.add_child(alabel) - box.add_child(elabel) - elabel.pressed.connect(_on_keybind_button_pressed.bind(elabel)) - keybind_buttons[elabel] = action - $VBoxContainer/TabContainer/Keybinds/ScrollContainer/VBoxContainer.add_child(box) - keybind_boxes.append(box) - func _on_cancel_pressed() -> void: queue_free() func _on_confirm_pressed() -> void: - Data.preferences.mouse_sens = look_sens_slider.value - Data.preferences.toggle_sprint = toggle_sprint_checkbox.button_pressed - Data.preferences.vsync_mode = vsync_dropdown.selected - Data.preferences.aa_mode = aa_dropdown.selected - Data.preferences.windowed_mode = window_dropdown.selected - Data.preferences.invert_lookY = invert_lookY.button_pressed - Data.preferences.invert_lookX = invert_lookX.button_pressed - Data.preferences.fixed_minimap = fixed_minimap.button_pressed - Data.preferences.display_tower_damage_indicators = tower_damage.button_pressed - Data.preferences.display_self_damage_indicators = self_damage.button_pressed - Data.preferences.display_party_damage_indicators = party_damage.button_pressed - Data.preferences.display_status_effect_damage_indicators = status_damage.button_pressed - Data.preferences.apply_graphical_settings(get_viewport()) + Data.graphics.apply_graphical_settings(get_viewport()) + Data.graphics.save_profile_to_disk() Data.preferences.save_profile_to_disk() Data.player_keymap.save_profile_to_disk() queue_free() - - -func _on_mouse_sens_spin_box_value_changed(value: float) -> void: - look_sens_slider.value = value - - -func _on_mouse_sens_h_slider_value_changed(value: float) -> void: - look_sens_input.value = value - - -func _on_fov_spin_box_value_changed(value: float) -> void: - if value < 40.0: - value = 40.0 - if value > 160.0: - value = 160.0 - fov_slider.value = value - Data.preferences.hfov = value - - -func _on_fov_h_slider_value_changed(value: float) -> void: - fov_input.value = value - Data.preferences.hfov = value - - -func _on_keybind_button_pressed(value: Button) -> void: - selected_button = keybind_buttons[value] - selected_button_button = value - var popup = keybind_popup.instantiate() - popup.event_detected.connect(change_key) - add_child(popup) - - -func change_key(event: InputEvent): - Data.player_keymap.replace_action_event(selected_button, event) - selected_button_button.text = event.as_text() diff --git a/Scripts/singleplayer_lobby.gd b/Scripts/singleplayer_lobby.gd index 1471dc3..36fbae4 100644 --- a/Scripts/singleplayer_lobby.gd +++ b/Scripts/singleplayer_lobby.gd @@ -19,6 +19,7 @@ func setup_game(): scoreboard.add_player(1, Data.player_profile) scoreboard.all_players_ready.connect(start_game) Game.game_restarted.connect(setup_the_ui) + Game.chatbox = chatbox setup_the_ui() chatbox.username = Data.player_profile.display_name Data.player_profile.display_name_changed.connect(chatbox.change_username) diff --git a/Scripts/tower_base.gd b/Scripts/tower_base.gd index dcac602..ab68ec3 100644 --- a/Scripts/tower_base.gd +++ b/Scripts/tower_base.gd @@ -2,7 +2,7 @@ extends StaticBody3D class_name TowerBase @export var inventory : Inventory -@export var block : CSGBox3D +@export var block : Node3D @export var collider : CollisionShape3D @export var minimap_icon : Sprite3D @@ -27,7 +27,7 @@ func remove_card() -> Card: func set_material(value: StandardMaterial3D): - block.material = value + block.material_override = value func toggle_collision(): @@ -40,7 +40,7 @@ func networked_spawn_tower(): tower.stats = inventory.selected_item.tower_stats tower.name = "tower" tower.base_name = name - tower.position = Vector3.UP + tower.position = Vector3(0, 1.2, 0) minimap_icon.modulate = Color.RED add_child(tower) diff --git a/Worlds/GreenPlanet/Levels/first_level.tscn b/Worlds/GreenPlanet/Levels/first_level.tscn index 63339a9..b01bc15 100644 --- a/Worlds/GreenPlanet/Levels/first_level.tscn +++ b/Worlds/GreenPlanet/Levels/first_level.tscn @@ -80,7 +80,7 @@ curve = SubResource("Curve3D_suxqu") script = ExtResource("11_d7ofl") [node name="GroundSpawn" parent="." node_paths=PackedStringArray("path", "dest", "enemy_path") instance=ExtResource("3_5imwp")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 0.5, 0) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -29.9396, 0.5, 0) path = NodePath("../VisualizedPath") type = 1 dest = NodePath("../EnemyGoal") @@ -541,8 +541,8 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1) [node name="AStarGraph3D" type="Node3D" parent="." node_paths=PackedStringArray("start", "end", "spawner", "visualized_path", "tower_path")] script = ExtResource("11_07ukk") -grid_size = Vector2i(19, 9) -point_gap = 1.5 +grid_size = Vector2i(15, 7) +point_gap = 2.0 start = NodePath("../GroundSpawn") end = NodePath("../EnemyGoal") spawner = NodePath("../GroundSpawn") diff --git a/Worlds/GreenPlanet/tilemap.tres b/Worlds/GreenPlanet/tilemap.tres index e68523a..51f6f6d 100644 --- a/Worlds/GreenPlanet/tilemap.tres +++ b/Worlds/GreenPlanet/tilemap.tres @@ -11,7 +11,7 @@ texture_filter = 0 material = SubResource("StandardMaterial3D_ulcfh") orientation = 1 -[sub_resource type="Image" id="Image_nskyb"] +[sub_resource type="Image" id="Image_s3x5u"] data = { "data": PackedByteArray(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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 95, 179, 90, 255, 95, 179, 90, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 61, 129, 57, 255, 74, 149, 70, 255, 95, 179, 90, 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, 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, 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, 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, 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, 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, 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, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 179, 90, 255, 95, 179, 90, 255, 74, 149, 70, 255, 74, 149, 70, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 60, 129, 57, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 60, 129, 57, 255, 60, 129, 57, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 129, 57, 255, 95, 179, 90, 255, 95, 179, 90, 255, 60, 128, 57, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 74, 149, 70, 255, 74, 149, 70, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 74, 148, 70, 255, 74, 148, 70, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 74, 149, 70, 255, 74, 149, 70, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 95, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 60, 128, 56, 255, 74, 148, 70, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 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, 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, 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, 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, 0, 0, 0, 0, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 60, 128, 56, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 74, 148, 70, 255, 74, 148, 70, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 74, 148, 70, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 60, 128, 56, 255, 74, 148, 70, 255, 74, 148, 70, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 74, 148, 69, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 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, 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, 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, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 179, 90, 255, 60, 128, 56, 255, 94, 179, 90, 255, 94, 179, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 60, 128, 56, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 74, 148, 69, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 60, 128, 56, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 73, 148, 69, 255, 60, 128, 56, 255, 60, 128, 56, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 73, 148, 69, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 60, 128, 56, 255, 73, 148, 69, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 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, 0, 0, 0, 0, 0, 0, 0, 0, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 73, 148, 69, 255, 73, 148, 69, 255, 60, 128, 56, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 73, 148, 69, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 60, 128, 56, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 60, 128, 56, 255, 60, 128, 56, 255, 73, 148, 69, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 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, 0, 0, 0, 0, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 73, 148, 69, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 73, 148, 69, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 73, 148, 69, 255, 73, 148, 69, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 73, 148, 69, 255, 60, 128, 56, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 73, 148, 69, 255, 73, 148, 69, 255, 60, 128, 56, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 73, 148, 69, 255, 60, 128, 56, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 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, 0, 0, 0, 0, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 60, 128, 56, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 60, 128, 56, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 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, 0, 0, 0, 0, 73, 148, 69, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 73, 148, 69, 255, 73, 148, 69, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 60, 128, 56, 255, 73, 148, 69, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 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, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 60, 128, 56, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 73, 148, 69, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 60, 128, 56, 255, 60, 128, 56, 255, 73, 147, 69, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 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, 0, 0, 0, 0, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 90, 255, 94, 178, 89, 255, 94, 178, 89, 255, 60, 128, 56, 255, 60, 128, 56, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 73, 147, 69, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 73, 147, 69, 255, 73, 147, 69, 255, 60, 128, 56, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 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, 0, 0, 0, 0, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 60, 128, 56, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 60, 128, 56, 255, 94, 178, 89, 255, 94, 178, 89, 255, 73, 147, 69, 255, 73, 147, 69, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 73, 147, 69, 255, 73, 147, 69, 255, 60, 128, 56, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 60, 127, 56, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 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, 0, 0, 0, 0, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 60, 128, 56, 255, 73, 147, 69, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 60, 127, 56, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 73, 147, 69, 255, 73, 147, 69, 255, 60, 127, 56, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 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, 0, 0, 0, 0, 0, 0, 0, 0, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 73, 147, 69, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 59, 127, 56, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 59, 127, 56, 255, 73, 147, 69, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 178, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 59, 127, 56, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 73, 147, 69, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 59, 127, 56, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 59, 127, 56, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 59, 127, 56, 255, 73, 147, 69, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 73, 147, 69, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 73, 147, 69, 255, 73, 147, 69, 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, 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, 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, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 94, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 73, 147, 69, 255, 73, 147, 69, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 59, 127, 56, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 73, 147, 69, 255, 73, 147, 69, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 73, 147, 69, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 73, 147, 69, 255, 73, 147, 69, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 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, 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, 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, 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, 0, 0, 0, 0, 59, 127, 56, 255, 73, 147, 69, 255, 73, 147, 69, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 59, 127, 55, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 59, 127, 55, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 73, 147, 68, 255, 73, 147, 68, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 73, 147, 68, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 59, 127, 55, 255, 59, 127, 55, 255, 73, 147, 68, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 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, 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, 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, 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, 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, 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, 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, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 255, 93, 177, 89, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 146, 68, 255, 72, 146, 68, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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), "format": "RGBA8", @@ -21,7 +21,7 @@ data = { } [sub_resource type="ImageTexture" id="ImageTexture_p1rdv"] -image = SubResource("Image_nskyb") +image = SubResource("Image_s3x5u") [sub_resource type="BoxShape3D" id="BoxShape3D_mtfk2"] @@ -32,7 +32,7 @@ albedo_texture = ExtResource("1_sntky") material = SubResource("StandardMaterial3D_jnpkd") orientation = 1 -[sub_resource type="Image" id="Image_kf41u"] +[sub_resource type="Image" id="Image_gn8c5"] data = { "data": PackedByteArray(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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 95, 100, 92, 255, 103, 106, 99, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 104, 97, 255, 110, 113, 108, 255, 117, 120, 115, 255, 112, 115, 110, 255, 106, 109, 103, 255, 101, 105, 97, 255, 105, 107, 99, 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, 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, 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, 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, 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, 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, 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, 110, 112, 107, 255, 106, 109, 103, 255, 101, 105, 98, 255, 98, 103, 96, 255, 106, 109, 103, 255, 105, 109, 102, 255, 104, 107, 100, 255, 105, 105, 98, 255, 102, 102, 94, 255, 103, 103, 96, 255, 107, 107, 100, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 98, 92, 255, 107, 106, 100, 255, 106, 106, 99, 255, 105, 107, 101, 255, 108, 110, 104, 255, 114, 116, 111, 255, 114, 117, 112, 255, 109, 111, 105, 255, 109, 109, 102, 255, 108, 107, 100, 255, 103, 104, 96, 255, 103, 103, 95, 255, 106, 105, 98, 255, 108, 108, 101, 255, 109, 109, 103, 255, 106, 108, 103, 255, 103, 105, 100, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 108, 101, 255, 104, 104, 98, 255, 93, 94, 88, 255, 91, 92, 86, 255, 94, 95, 89, 255, 99, 100, 94, 255, 108, 107, 101, 255, 101, 102, 94, 255, 94, 96, 87, 255, 94, 96, 87, 255, 96, 97, 88, 255, 102, 102, 94, 255, 104, 104, 97, 255, 107, 107, 100, 255, 108, 109, 103, 255, 110, 111, 107, 255, 110, 112, 108, 255, 107, 109, 104, 255, 94, 97, 91, 255, 83, 87, 78, 255, 84, 88, 79, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 98, 99, 93, 255, 99, 100, 94, 255, 92, 94, 88, 255, 92, 93, 87, 255, 93, 95, 88, 255, 96, 97, 91, 255, 95, 96, 90, 255, 88, 90, 82, 255, 80, 83, 75, 255, 74, 78, 69, 255, 77, 81, 72, 255, 83, 86, 77, 255, 86, 89, 80, 255, 88, 91, 81, 255, 92, 94, 85, 255, 100, 102, 95, 255, 105, 107, 102, 255, 108, 110, 105, 255, 104, 106, 101, 255, 95, 98, 92, 255, 86, 89, 81, 255, 83, 87, 78, 255, 81, 86, 76, 255, 89, 93, 83, 255, 98, 102, 92, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 102, 97, 255, 101, 101, 97, 255, 103, 104, 99, 255, 98, 99, 94, 255, 93, 93, 87, 255, 90, 90, 84, 255, 81, 83, 78, 255, 84, 87, 80, 255, 85, 88, 79, 255, 83, 87, 77, 255, 78, 81, 73, 255, 72, 76, 68, 255, 66, 71, 63, 255, 69, 73, 66, 255, 68, 71, 66, 255, 67, 69, 66, 255, 74, 76, 72, 255, 83, 86, 80, 255, 93, 96, 90, 255, 95, 98, 91, 255, 97, 100, 94, 255, 102, 105, 97, 255, 100, 103, 93, 255, 103, 106, 96, 255, 106, 108, 99, 255, 109, 111, 102, 255, 105, 107, 98, 255, 98, 101, 91, 255, 101, 105, 94, 255, 113, 115, 107, 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, 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, 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, 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, 0, 0, 0, 0, 98, 99, 94, 255, 101, 101, 97, 255, 99, 100, 95, 255, 99, 100, 96, 255, 102, 103, 99, 255, 92, 92, 86, 255, 88, 87, 81, 255, 91, 92, 86, 255, 91, 94, 87, 255, 84, 88, 81, 255, 73, 77, 70, 255, 70, 74, 66, 255, 71, 75, 67, 255, 71, 76, 69, 255, 72, 75, 71, 255, 72, 74, 71, 255, 73, 75, 73, 255, 69, 71, 69, 255, 66, 69, 66, 255, 72, 74, 72, 255, 77, 79, 75, 255, 89, 92, 85, 255, 98, 102, 93, 255, 102, 105, 95, 255, 109, 111, 101, 255, 114, 116, 106, 255, 111, 113, 104, 255, 105, 108, 98, 255, 110, 113, 104, 255, 124, 127, 122, 255, 125, 128, 123, 255, 127, 130, 125, 255, 123, 126, 120, 255, 118, 121, 113, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 107, 101, 255, 106, 104, 97, 255, 99, 99, 92, 255, 99, 100, 94, 255, 99, 100, 95, 255, 102, 102, 98, 255, 98, 99, 95, 255, 88, 88, 82, 255, 85, 84, 78, 255, 85, 84, 78, 255, 88, 89, 83, 255, 87, 87, 81, 255, 83, 83, 76, 255, 78, 80, 73, 255, 82, 84, 79, 255, 81, 83, 80, 255, 76, 78, 75, 255, 80, 83, 80, 255, 84, 86, 84, 255, 86, 88, 85, 255, 89, 92, 89, 255, 89, 92, 87, 255, 91, 95, 89, 255, 92, 96, 90, 255, 93, 97, 91, 255, 98, 101, 94, 255, 107, 109, 102, 255, 112, 114, 105, 255, 111, 114, 106, 255, 106, 111, 101, 255, 101, 106, 94, 255, 105, 110, 98, 255, 114, 119, 110, 255, 123, 127, 120, 255, 125, 128, 123, 255, 112, 116, 107, 255, 101, 104, 91, 255, 104, 109, 96, 255, 106, 110, 99, 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, 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, 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, 112, 112, 105, 255, 113, 111, 104, 255, 111, 108, 102, 255, 116, 114, 106, 255, 122, 120, 111, 255, 126, 124, 114, 255, 120, 119, 109, 255, 105, 105, 98, 255, 95, 97, 91, 255, 89, 90, 84, 255, 90, 91, 85, 255, 92, 95, 88, 255, 90, 91, 85, 255, 85, 85, 79, 255, 84, 85, 77, 255, 84, 87, 77, 255, 85, 89, 78, 255, 89, 93, 82, 255, 83, 87, 78, 255, 79, 83, 76, 255, 79, 81, 77, 255, 82, 85, 81, 255, 90, 94, 89, 255, 97, 101, 96, 255, 102, 105, 100, 255, 97, 100, 95, 255, 89, 94, 87, 255, 93, 97, 91, 255, 100, 103, 98, 255, 97, 101, 94, 255, 98, 102, 95, 255, 104, 108, 100, 255, 110, 114, 106, 255, 122, 125, 119, 255, 121, 125, 118, 255, 120, 124, 117, 255, 107, 111, 101, 255, 96, 100, 86, 255, 96, 99, 85, 255, 96, 99, 85, 255, 105, 109, 95, 255, 112, 117, 104, 255, 114, 119, 106, 255, 106, 110, 99, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 101, 96, 255, 109, 107, 101, 255, 118, 116, 108, 255, 122, 120, 111, 255, 117, 116, 108, 255, 120, 119, 110, 255, 125, 123, 113, 255, 119, 118, 110, 255, 107, 108, 102, 255, 94, 97, 90, 255, 85, 88, 82, 255, 88, 90, 84, 255, 93, 95, 89, 255, 95, 98, 92, 255, 96, 97, 90, 255, 92, 95, 85, 255, 95, 98, 88, 255, 96, 99, 89, 255, 91, 95, 84, 255, 86, 90, 79, 255, 89, 93, 82, 255, 95, 98, 89, 255, 92, 95, 88, 255, 91, 94, 87, 255, 90, 94, 87, 255, 90, 94, 88, 255, 94, 98, 93, 255, 99, 102, 97, 255, 101, 103, 99, 255, 89, 91, 84, 255, 84, 87, 78, 255, 86, 89, 80, 255, 93, 96, 88, 255, 100, 104, 96, 255, 104, 109, 100, 255, 106, 109, 102, 255, 109, 112, 103, 255, 108, 113, 101, 255, 104, 108, 96, 255, 101, 104, 91, 255, 99, 103, 89, 255, 105, 109, 96, 255, 110, 115, 102, 255, 111, 115, 103, 255, 111, 116, 104, 255, 97, 100, 90, 255, 88, 90, 81, 255, 83, 84, 77, 255, 81, 83, 75, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 104, 95, 255, 105, 106, 97, 255, 118, 117, 110, 255, 121, 120, 112, 255, 125, 123, 114, 255, 125, 123, 114, 255, 121, 119, 111, 255, 114, 114, 107, 255, 110, 111, 104, 255, 102, 104, 98, 255, 93, 96, 89, 255, 92, 94, 88, 255, 87, 90, 83, 255, 84, 88, 81, 255, 90, 92, 85, 255, 101, 101, 94, 255, 109, 110, 102, 255, 114, 115, 106, 255, 115, 115, 107, 255, 115, 116, 108, 255, 114, 115, 107, 255, 102, 104, 96, 255, 94, 97, 90, 255, 99, 100, 94, 255, 104, 104, 98, 255, 99, 100, 94, 255, 93, 96, 89, 255, 100, 101, 95, 255, 99, 100, 94, 255, 96, 99, 92, 255, 92, 95, 87, 255, 89, 92, 84, 255, 90, 93, 85, 255, 94, 97, 89, 255, 95, 99, 91, 255, 91, 94, 85, 255, 85, 86, 79, 255, 83, 83, 76, 255, 86, 85, 79, 255, 89, 88, 81, 255, 86, 87, 78, 255, 87, 89, 77, 255, 92, 95, 82, 255, 104, 108, 96, 255, 111, 115, 104, 255, 113, 117, 106, 255, 104, 107, 97, 255, 94, 96, 87, 255, 87, 89, 81, 255, 84, 86, 78, 255, 89, 91, 84, 255, 95, 99, 90, 255, 95, 99, 88, 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, 0, 0, 0, 0, 0, 0, 0, 0, 115, 116, 108, 255, 110, 111, 103, 255, 105, 106, 97, 255, 107, 109, 100, 255, 117, 118, 110, 255, 124, 124, 116, 255, 126, 126, 119, 255, 120, 122, 114, 255, 113, 114, 108, 255, 110, 111, 104, 255, 110, 110, 104, 255, 104, 105, 99, 255, 91, 94, 88, 255, 86, 90, 84, 255, 90, 92, 85, 255, 93, 93, 87, 255, 94, 95, 89, 255, 98, 99, 94, 255, 102, 102, 98, 255, 107, 108, 103, 255, 109, 110, 103, 255, 108, 109, 101, 255, 107, 106, 100, 255, 100, 101, 95, 255, 96, 98, 91, 255, 97, 98, 92, 255, 101, 102, 96, 255, 103, 103, 96, 255, 100, 101, 94, 255, 101, 103, 94, 255, 97, 100, 90, 255, 90, 94, 83, 255, 90, 93, 83, 255, 87, 90, 80, 255, 87, 90, 81, 255, 95, 97, 90, 255, 94, 96, 88, 255, 88, 89, 81, 255, 87, 86, 80, 255, 76, 76, 69, 255, 70, 69, 63, 255, 70, 69, 64, 255, 69, 69, 63, 255, 67, 70, 64, 255, 78, 81, 74, 255, 91, 94, 85, 255, 96, 99, 90, 255, 95, 97, 88, 255, 97, 100, 91, 255, 100, 103, 93, 255, 99, 102, 93, 255, 101, 105, 97, 255, 104, 108, 101, 255, 103, 106, 99, 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, 0, 0, 0, 0, 108, 109, 100, 255, 108, 109, 100, 255, 113, 114, 106, 255, 118, 119, 111, 255, 119, 119, 112, 255, 120, 120, 112, 255, 117, 118, 110, 255, 118, 122, 114, 255, 114, 118, 111, 255, 102, 105, 97, 255, 97, 100, 91, 255, 99, 100, 92, 255, 107, 107, 101, 255, 114, 114, 108, 255, 107, 108, 103, 255, 103, 103, 99, 255, 105, 106, 102, 255, 103, 104, 100, 255, 99, 100, 96, 255, 99, 100, 95, 255, 102, 103, 98, 255, 109, 109, 104, 255, 110, 109, 104, 255, 113, 112, 107, 255, 112, 111, 105, 255, 106, 106, 100, 255, 97, 99, 92, 255, 95, 97, 90, 255, 98, 99, 92, 255, 97, 99, 90, 255, 97, 100, 90, 255, 101, 103, 93, 255, 99, 101, 92, 255, 94, 97, 87, 255, 92, 95, 85, 255, 90, 94, 84, 255, 95, 97, 90, 255, 101, 102, 95, 255, 104, 104, 97, 255, 92, 92, 85, 255, 76, 75, 69, 255, 74, 74, 68, 255, 75, 75, 69, 255, 71, 74, 67, 255, 69, 73, 67, 255, 64, 69, 63, 255, 73, 77, 70, 255, 79, 83, 75, 255, 90, 93, 85, 255, 99, 102, 93, 255, 101, 104, 96, 255, 106, 109, 103, 255, 109, 112, 106, 255, 107, 110, 104, 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, 0, 0, 0, 0, 103, 106, 96, 255, 110, 112, 103, 255, 124, 124, 116, 255, 117, 118, 109, 255, 114, 115, 106, 255, 112, 113, 104, 255, 115, 117, 108, 255, 119, 122, 115, 255, 117, 121, 114, 255, 110, 113, 105, 255, 103, 106, 97, 255, 96, 98, 90, 255, 95, 98, 90, 255, 101, 103, 96, 255, 108, 107, 103, 255, 112, 110, 107, 255, 113, 112, 109, 255, 103, 104, 99, 255, 93, 94, 88, 255, 87, 88, 82, 255, 83, 84, 77, 255, 84, 85, 79, 255, 96, 97, 92, 255, 100, 101, 95, 255, 102, 102, 97, 255, 118, 116, 111, 255, 120, 118, 112, 255, 120, 118, 112, 255, 113, 113, 105, 255, 105, 107, 96, 255, 98, 101, 90, 255, 98, 101, 91, 255, 100, 103, 93, 255, 106, 108, 99, 255, 108, 110, 101, 255, 103, 106, 98, 255, 96, 100, 93, 255, 98, 101, 95, 255, 98, 102, 96, 255, 91, 95, 88, 255, 84, 87, 80, 255, 81, 83, 77, 255, 79, 81, 74, 255, 74, 77, 70, 255, 76, 80, 73, 255, 89, 92, 83, 255, 96, 98, 89, 255, 94, 97, 88, 255, 96, 99, 90, 255, 97, 100, 91, 255, 90, 94, 87, 255, 86, 90, 85, 255, 92, 96, 90, 255, 103, 106, 100, 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, 0, 0, 0, 0, 96, 99, 88, 255, 97, 100, 89, 255, 96, 100, 89, 255, 101, 104, 94, 255, 108, 110, 101, 255, 117, 118, 109, 255, 122, 124, 116, 255, 121, 125, 118, 255, 113, 117, 109, 255, 101, 104, 95, 255, 102, 104, 96, 255, 108, 111, 103, 255, 114, 118, 111, 255, 118, 120, 115, 255, 117, 115, 112, 255, 119, 116, 114, 255, 118, 115, 113, 255, 113, 111, 108, 255, 100, 99, 94, 255, 90, 90, 83, 255, 87, 88, 81, 255, 84, 86, 79, 255, 85, 88, 82, 255, 97, 98, 92, 255, 100, 101, 95, 255, 103, 103, 97, 255, 112, 111, 105, 255, 113, 113, 107, 255, 109, 110, 102, 255, 111, 112, 102, 255, 118, 118, 108, 255, 124, 123, 112, 255, 127, 126, 114, 255, 119, 119, 108, 255, 111, 113, 103, 255, 109, 112, 104, 255, 110, 114, 108, 255, 107, 111, 104, 255, 102, 106, 100, 255, 103, 107, 100, 255, 101, 105, 99, 255, 95, 98, 92, 255, 87, 91, 85, 255, 86, 90, 84, 255, 87, 92, 86, 255, 84, 89, 82, 255, 81, 85, 79, 255, 79, 83, 76, 255, 89, 92, 84, 255, 95, 98, 89, 255, 98, 102, 95, 255, 96, 100, 94, 255, 91, 95, 89, 255, 92, 94, 89, 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, 101, 103, 94, 255, 103, 105, 95, 255, 109, 111, 101, 255, 107, 109, 100, 255, 95, 98, 87, 255, 91, 95, 84, 255, 93, 97, 86, 255, 99, 101, 91, 255, 106, 109, 99, 255, 107, 111, 100, 255, 105, 108, 97, 255, 100, 102, 91, 255, 94, 96, 84, 255, 100, 103, 93, 255, 105, 107, 100, 255, 109, 107, 103, 255, 110, 108, 105, 255, 111, 109, 106, 255, 106, 104, 100, 255, 100, 99, 94, 255, 101, 99, 94, 255, 103, 102, 97, 255, 101, 103, 95, 255, 98, 102, 92, 255, 102, 105, 96, 255, 103, 106, 97, 255, 100, 102, 95, 255, 97, 98, 93, 255, 100, 101, 95, 255, 112, 113, 104, 255, 116, 118, 107, 255, 116, 117, 107, 255, 117, 118, 108, 255, 121, 122, 111, 255, 122, 123, 112, 255, 119, 120, 109, 255, 115, 117, 106, 255, 105, 108, 98, 255, 99, 102, 94, 255, 99, 102, 95, 255, 105, 109, 103, 255, 105, 108, 102, 255, 98, 102, 96, 255, 94, 97, 92, 255, 93, 97, 92, 255, 94, 97, 93, 255, 88, 92, 86, 255, 85, 89, 83, 255, 87, 91, 85, 255, 90, 94, 88, 255, 90, 95, 88, 255, 88, 92, 85, 255, 87, 91, 85, 255, 91, 94, 89, 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, 0, 0, 0, 0, 101, 102, 93, 255, 103, 105, 94, 255, 103, 105, 94, 255, 103, 104, 94, 255, 103, 104, 94, 255, 96, 98, 88, 255, 91, 94, 84, 255, 94, 97, 87, 255, 95, 98, 86, 255, 96, 98, 87, 255, 102, 105, 95, 255, 109, 113, 105, 255, 103, 106, 97, 255, 92, 94, 82, 255, 91, 93, 84, 255, 91, 94, 88, 255, 91, 94, 89, 255, 92, 95, 90, 255, 91, 92, 86, 255, 91, 92, 85, 255, 89, 90, 83, 255, 91, 93, 85, 255, 96, 99, 90, 255, 101, 104, 95, 255, 104, 108, 99, 255, 109, 111, 104, 255, 112, 114, 107, 255, 107, 110, 102, 255, 108, 111, 103, 255, 121, 123, 114, 255, 123, 125, 115, 255, 124, 126, 115, 255, 124, 125, 113, 255, 121, 122, 111, 255, 114, 115, 105, 255, 113, 114, 104, 255, 111, 114, 103, 255, 110, 113, 102, 255, 102, 104, 95, 255, 94, 96, 87, 255, 90, 92, 83, 255, 89, 91, 82, 255, 95, 97, 89, 255, 102, 105, 98, 255, 109, 111, 108, 255, 112, 114, 112, 255, 112, 114, 112, 255, 110, 112, 110, 255, 104, 107, 104, 255, 92, 96, 91, 255, 92, 95, 89, 255, 102, 102, 96, 255, 97, 99, 92, 255, 92, 95, 88, 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, 0, 0, 0, 0, 121, 120, 111, 255, 111, 112, 101, 255, 99, 101, 91, 255, 101, 103, 93, 255, 105, 106, 96, 255, 110, 111, 100, 255, 112, 113, 102, 255, 106, 106, 98, 255, 99, 99, 92, 255, 96, 97, 89, 255, 100, 101, 92, 255, 101, 103, 93, 255, 99, 101, 90, 255, 96, 98, 86, 255, 97, 100, 92, 255, 98, 100, 96, 255, 89, 93, 87, 255, 85, 89, 83, 255, 88, 92, 86, 255, 86, 90, 84, 255, 82, 86, 80, 255, 83, 86, 80, 255, 91, 94, 87, 255, 93, 96, 88, 255, 93, 97, 88, 255, 104, 107, 99, 255, 111, 113, 106, 255, 113, 115, 108, 255, 114, 116, 108, 255, 113, 114, 106, 255, 107, 107, 100, 255, 110, 111, 103, 255, 118, 120, 112, 255, 125, 127, 118, 255, 124, 127, 118, 255, 115, 117, 107, 255, 107, 110, 99, 255, 109, 112, 101, 255, 110, 114, 103, 255, 103, 106, 96, 255, 89, 91, 82, 255, 87, 88, 80, 255, 85, 87, 79, 255, 91, 94, 85, 255, 94, 97, 87, 255, 94, 97, 88, 255, 100, 103, 95, 255, 106, 109, 102, 255, 105, 109, 103, 255, 104, 106, 103, 255, 101, 103, 99, 255, 95, 99, 92, 255, 94, 98, 91, 255, 100, 101, 95, 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, 0, 0, 0, 0, 105, 106, 97, 255, 110, 111, 101, 255, 119, 119, 108, 255, 127, 127, 115, 255, 128, 128, 116, 255, 120, 120, 109, 255, 107, 108, 99, 255, 106, 106, 98, 255, 112, 112, 105, 255, 112, 112, 105, 255, 108, 109, 101, 255, 107, 107, 100, 255, 111, 111, 104, 255, 110, 110, 103, 255, 101, 102, 95, 255, 97, 99, 93, 255, 98, 100, 96, 255, 94, 96, 92, 255, 85, 89, 83, 255, 79, 84, 77, 255, 82, 86, 79, 255, 86, 89, 83, 255, 88, 90, 85, 255, 89, 91, 85, 255, 92, 93, 88, 255, 98, 98, 94, 255, 102, 103, 98, 255, 104, 106, 99, 255, 104, 106, 98, 255, 107, 108, 101, 255, 113, 114, 106, 255, 116, 117, 109, 255, 118, 120, 112, 255, 118, 120, 112, 255, 119, 122, 114, 255, 114, 116, 107, 255, 103, 104, 93, 255, 97, 97, 85, 255, 96, 96, 84, 255, 101, 103, 91, 255, 106, 108, 97, 255, 109, 113, 102, 255, 103, 107, 97, 255, 99, 102, 93, 255, 99, 102, 93, 255, 100, 103, 94, 255, 96, 99, 90, 255, 102, 106, 97, 255, 108, 112, 103, 255, 109, 113, 104, 255, 109, 111, 104, 255, 111, 111, 106, 255, 109, 110, 105, 255, 102, 103, 97, 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, 0, 0, 0, 0, 0, 0, 0, 0, 108, 110, 102, 255, 114, 114, 107, 255, 113, 113, 105, 255, 114, 114, 106, 255, 119, 119, 111, 255, 122, 122, 114, 255, 120, 120, 112, 255, 121, 120, 113, 255, 118, 118, 111, 255, 109, 109, 102, 255, 99, 99, 91, 255, 103, 103, 96, 255, 107, 107, 100, 255, 104, 104, 97, 255, 102, 103, 95, 255, 107, 107, 100, 255, 106, 106, 99, 255, 99, 99, 92, 255, 95, 97, 91, 255, 97, 99, 94, 255, 95, 97, 92, 255, 91, 93, 88, 255, 87, 90, 85, 255, 87, 89, 85, 255, 95, 96, 91, 255, 103, 103, 97, 255, 106, 106, 100, 255, 105, 106, 100, 255, 109, 111, 105, 255, 120, 122, 117, 255, 119, 121, 116, 255, 116, 117, 112, 255, 113, 115, 108, 255, 117, 119, 111, 255, 117, 120, 111, 255, 111, 114, 103, 255, 106, 109, 97, 255, 103, 105, 93, 255, 100, 101, 89, 255, 101, 102, 90, 255, 105, 108, 95, 255, 108, 111, 100, 255, 109, 112, 103, 255, 104, 107, 98, 255, 92, 95, 87, 255, 89, 91, 83, 255, 82, 83, 75, 255, 81, 82, 75, 255, 90, 92, 85, 255, 96, 98, 92, 255, 100, 101, 96, 255, 109, 109, 104, 255, 114, 113, 108, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 109, 100, 255, 109, 110, 102, 255, 110, 111, 104, 255, 112, 112, 106, 255, 117, 116, 110, 255, 108, 108, 102, 255, 99, 100, 93, 255, 97, 97, 90, 255, 98, 98, 90, 255, 100, 100, 93, 255, 102, 103, 95, 255, 108, 108, 101, 255, 111, 111, 104, 255, 115, 115, 108, 255, 116, 116, 109, 255, 106, 106, 99, 255, 93, 95, 89, 255, 93, 96, 91, 255, 100, 102, 98, 255, 98, 100, 95, 255, 92, 94, 89, 255, 96, 97, 91, 255, 100, 101, 95, 255, 96, 97, 90, 255, 93, 96, 86, 255, 97, 100, 91, 255, 103, 106, 98, 255, 110, 113, 107, 255, 119, 123, 118, 255, 125, 128, 124, 255, 118, 120, 114, 255, 108, 109, 100, 255, 101, 103, 92, 255, 102, 104, 93, 255, 111, 115, 104, 255, 113, 118, 106, 255, 113, 117, 106, 255, 114, 117, 107, 255, 119, 120, 112, 255, 118, 119, 111, 255, 104, 107, 99, 255, 94, 98, 91, 255, 85, 90, 82, 255, 83, 86, 79, 255, 85, 87, 80, 255, 96, 96, 90, 255, 100, 100, 94, 255, 104, 104, 99, 255, 111, 110, 104, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 107, 100, 255, 102, 103, 97, 255, 89, 92, 86, 255, 86, 88, 82, 255, 87, 89, 80, 255, 93, 95, 87, 255, 98, 99, 92, 255, 105, 105, 97, 255, 110, 110, 103, 255, 111, 110, 103, 255, 109, 109, 102, 255, 102, 104, 98, 255, 95, 98, 92, 255, 92, 95, 89, 255, 97, 99, 94, 255, 99, 102, 97, 255, 99, 102, 97, 255, 100, 102, 96, 255, 102, 104, 97, 255, 106, 108, 101, 255, 96, 98, 89, 255, 91, 93, 82, 255, 91, 93, 83, 255, 94, 96, 87, 255, 103, 105, 97, 255, 107, 108, 102, 255, 104, 105, 97, 255, 100, 100, 92, 255, 96, 96, 88, 255, 96, 97, 88, 255, 101, 103, 93, 255, 101, 103, 92, 255, 100, 103, 93, 255, 103, 106, 98, 255, 103, 106, 98, 255, 97, 101, 93, 255, 96, 99, 92, 255, 99, 101, 94, 255, 99, 101, 94, 255, 97, 100, 92, 255, 102, 104, 95, 255, 107, 108, 100, 255, 109, 109, 102, 255, 103, 103, 96, 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, 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, 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, 97, 100, 93, 255, 96, 99, 93, 255, 98, 100, 95, 255, 95, 97, 91, 255, 93, 95, 88, 255, 100, 102, 96, 255, 105, 106, 100, 255, 103, 105, 99, 255, 107, 109, 104, 255, 110, 112, 108, 255, 105, 107, 102, 255, 101, 103, 98, 255, 99, 101, 96, 255, 99, 102, 96, 255, 101, 103, 94, 255, 98, 99, 90, 255, 100, 101, 91, 255, 98, 99, 89, 255, 92, 94, 84, 255, 93, 94, 84, 255, 92, 93, 83, 255, 99, 99, 91, 255, 105, 106, 99, 255, 113, 113, 106, 255, 107, 107, 100, 255, 97, 96, 88, 255, 94, 93, 84, 255, 93, 92, 84, 255, 91, 92, 85, 255, 90, 92, 87, 255, 88, 91, 85, 255, 89, 92, 85, 255, 87, 90, 84, 255, 85, 89, 82, 255, 92, 95, 88, 255, 98, 100, 92, 255, 103, 103, 95, 255, 110, 111, 102, 255, 111, 111, 103, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 89, 80, 255, 86, 90, 80, 255, 93, 97, 87, 255, 96, 99, 89, 255, 96, 99, 89, 255, 109, 111, 104, 255, 116, 117, 112, 255, 118, 120, 116, 255, 114, 115, 109, 255, 108, 109, 100, 255, 100, 101, 92, 255, 105, 105, 96, 255, 107, 107, 98, 255, 116, 116, 105, 255, 112, 113, 102, 255, 108, 108, 98, 255, 97, 98, 89, 255, 98, 99, 91, 255, 103, 103, 96, 255, 98, 98, 91, 255, 96, 96, 88, 255, 94, 93, 84, 255, 93, 92, 84, 255, 85, 86, 78, 255, 82, 84, 79, 255, 86, 88, 84, 255, 89, 91, 87, 255, 89, 91, 86, 255, 86, 88, 83, 255, 88, 91, 86, 255, 92, 94, 88, 255, 97, 98, 91, 255, 106, 106, 98, 255, 113, 113, 105, 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, 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, 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, 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, 0, 0, 0, 0, 95, 99, 88, 255, 102, 105, 95, 255, 108, 110, 101, 255, 109, 111, 102, 255, 108, 110, 101, 255, 110, 113, 104, 255, 119, 119, 110, 255, 119, 119, 109, 255, 122, 121, 111, 255, 115, 115, 105, 255, 107, 107, 98, 255, 107, 107, 98, 255, 108, 108, 100, 255, 105, 105, 98, 255, 100, 100, 93, 255, 106, 105, 98, 255, 107, 106, 99, 255, 101, 101, 93, 255, 97, 97, 90, 255, 99, 99, 94, 255, 96, 97, 94, 255, 87, 89, 84, 255, 83, 85, 80, 255, 75, 78, 72, 255, 82, 85, 80, 255, 86, 89, 84, 255, 89, 92, 86, 255, 89, 92, 85, 255, 96, 97, 91, 255, 100, 102, 95, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 118, 111, 255, 116, 117, 110, 255, 115, 115, 109, 255, 118, 117, 112, 255, 121, 119, 113, 255, 118, 118, 110, 255, 112, 112, 103, 255, 106, 106, 98, 255, 99, 100, 92, 255, 95, 96, 88, 255, 94, 95, 87, 255, 98, 99, 91, 255, 101, 101, 94, 255, 100, 101, 94, 255, 105, 106, 100, 255, 106, 108, 102, 255, 100, 102, 95, 255, 94, 96, 89, 255, 94, 96, 90, 255, 96, 97, 93, 255, 94, 96, 92, 255, 90, 92, 86, 255, 87, 90, 83, 255, 92, 94, 87, 255, 98, 100, 92, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 117, 118, 111, 255, 109, 112, 104, 255, 103, 106, 99, 255, 93, 94, 88, 255, 86, 88, 80, 255, 88, 90, 82, 255, 87, 89, 81, 255, 89, 91, 81, 255, 91, 93, 84, 255, 96, 97, 89, 255, 99, 101, 93, 255, 106, 107, 102, 255, 112, 113, 109, 255, 110, 112, 108, 255, 107, 109, 104, 255, 94, 96, 88, 255, 90, 92, 83, 255, 96, 97, 90, 255, 97, 98, 92, 255, 91, 94, 87, 255, 92, 96, 87, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 103, 94, 255, 96, 98, 91, 255, 87, 89, 81, 255, 83, 86, 77, 255, 86, 89, 81, 255, 90, 92, 84, 255, 94, 96, 88, 255, 98, 99, 91, 255, 100, 102, 94, 255, 106, 107, 102, 255, 101, 103, 96, 255, 97, 100, 91, 255, 96, 97, 89, 255, 95, 96, 89, 255, 95, 95, 88, 255, 96, 97, 90, 255, 100, 101, 92, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 101, 92, 255, 100, 101, 93, 255, 97, 98, 90, 255, 95, 96, 88, 255, 98, 99, 91, 255, 104, 105, 98, 255, 103, 104, 98, 255, 105, 106, 100, 255, 112, 113, 109, 255, 111, 111, 107, 255, 107, 107, 102, 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, 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, 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, 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, 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, 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, 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, 85, 87, 78, 255, 82, 85, 76, 255, 88, 90, 82, 255, 96, 98, 89, 255, 96, 98, 89, 255, 103, 105, 97, 255, 112, 114, 107, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 100, 90, 255, 102, 104, 95, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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), "format": "RGBA8", @@ -42,7 +42,7 @@ data = { } [sub_resource type="ImageTexture" id="ImageTexture_35hew"] -image = SubResource("Image_kf41u") +image = SubResource("Image_gn8c5") [sub_resource type="BoxShape3D" id="BoxShape3D_d3j6k"] diff --git a/funbox.glb b/funbox.glb new file mode 100644 index 0000000000000000000000000000000000000000..592f730ce2ef3ea9f794297dcd4385c0a70d5f40 GIT binary patch literal 13044 zcmb7K33yaRwm!usva5g_LTDj|5JD%NGzsM1V&4}9RKx|cG$9faOoFH(yf~ubhzqC) zh&)gSQ4mEPMIi|aK6&#{$3Y!H@PVSDh#SbDBRJ=;d#k%T=_~EkI(6=;|Lo^h0w0CN z6Nfe;qT}gA{w72tCyX0g>B}uI4^{a3R{9D&bEvGmsI-K^>8XBSRf?}XpAGo>`dzNv*Z0~=UrFvv zmiZ>AvlL%RX+a1F{_Cr*kGxg-W`@eAD^(XiXm(!62guCaicncmZn0ynpmcU#acDwO zL8!pjx1wxzh;29y#<(~RY*t>`m{3J-adA=p_|n;h(@R3-tX)~9%&{L8KsYjZO7;8G zpjcKkv#6rzW*3lKQBhWuH@gC_mA=czO&Bq8#JI64%CY0dj~Ou9*EcQ2H*v_MLF2}a zA3VkH>zmG1C@Lu^%7;oI51l!Ntn3tjYGyFt&-ABd`m_3^ zrS}O!6b$DEqmZuxAE7r%1PDT}Wsxn@sQO+0*R%j6o@<`ysBZu#sM z2a{am#c$Yis>bze#lyeC@j3WYRy@4n*Ye_x_;b8?!&gl_ypc^JzD;Dtws`S|Zmkz@%%0`N8@00I z;f=g%hajwk_K(BiHC2_ zI0rx2iibZraJy@NaLpg&Ed%e#8!=n)@a+Z-cH`e}#lssp*2KdbHf!SH_0J&OEphO* z1}2KvKjUyu#=+YLCKj*mTNl%ScVkfUczAt}VMe`pJ^#RX@vg4=x$ecgx(X8quYCa@ z#T)i@%nB1jE?KwEl{esZ4Css21#igJodX+~0o1&Yf3Lbz{s6Cj_PBU29yaR?o1Q#+ z$}uQAXW(H|x|n!*^*flGqbIN9G;89)+x6sX{$Zcxv3TIsx1%vSeh+zly!uXE-B`Se z2fcQ4RP*yYys9(iL1WIq*T>fx_*gvfYCc{2XW|teH9>E8?+D*ZG5NQGYED!iWAW&t zmV5F0b~ryn5obI+?C99M`0YO>)g9Qqt9Bdj@$&Gm@v-=qhUM03xflQDPf6+yc%HFm z;^9kU>htS{<*GigTzc__uJq!OJ7VT|>@)H3r7^L1x1I`fCLZxS9Q?747`opA=mR0i%0HS z9tU4%V4`@#m#VpIGm7WmJ^87w0|6H&F9A$=ak_2ZrV5Hj`{HXh2wz<34+yAl`}6;CY8EU}`tpmCwZ z4kg!LwPM|G0YWWjoE^cNu{jzVr}s^5SJ;bBPm|br)oNa&T^w8>k7}nbL^^gBA@*us z?xSnaP_Aq7JG#=q*oH6FlNi3-+QN0%uZlCe4&n1^aM59u~cj8PQH=4 z8T~rL{nH?x`ZKI@Wgig#`mu9?ipk7G^j1-7qf2eoHwWs<0Ez)UcE=%{~qxx-N^S6@#_)4=Y3`7XwISO z*K2+}FkW?V=f}wrRNpP&ohQ04#yp$4QMntKT4Pq-n!~CyFS=Iq|I)@<+hLBxzVW>t za^=+ZHr}!0J*iKo-2Z0p2K%Jv`rE$_%dvZY@qj(|vm%b?Brm@tI;{4Zu37TsqdjE( z{j5i`<>|bhvi?rgo^_$$MD59J_wd1wtS#THu;)E}Kih;nkyk6VU(Nm}9-n6ex9OZF z_9t%yl->F};zu0yccN~ty-sSsFzs&pM7sySgzte3R^!JI7wt{2KXfTPg7ldsS~= zAQ!Z_!)m^4xID^o)D?ZHzklnSCHWsO$R?GI<<{TkSSzmVV11uH)?VBy$)0ulc+M+D z<>T}zQ6i3ZYu8xF>(@n(sd$F3-eDuJ7g!&0?M_-~eaCkF@BLsmK5uEip&RbDvu`Pq zj|{y+^>Oi-)CN2H0D1lWu5D7;L;YZ{nCsyeC#>6Ftg=6NzPs{|_yb%|#E*LJ3|wQE z_Q;YsRrwNeAinm!|7|0_(EbWlAJiB1Sw5rAx~^&-=ZQJ-OXPj%_33Wji4t|p;6A_} z;)gxdp9pi{mzaZ9V=DO_^PH&ai2nX`?$UnEzuIk~FNa>5Em3Fm75&ifmb7{_(8HivC?RDM1zwB#?DeyMk&Z z9_)@hQRU_6Bj3n7?v-^Du4mbGyb9!#Z_boudAn`MH!K>&vKzwk;IXE1`-8pYfl;Ga zb{ntB>Yf4)^8KwtF5Z#D?qiQ^wSjN`VjFqj@s)PJ-2Sr9d-LS!tJmgy%HL7b7jBXR zdJdP%xF0)Ce`>9tn;_xm{q?JD>^Y2IemqmYKmUjg{h}e?s~zWv^GU7?^qu%8%Mq{L zr0&VSd_Um)%8f0;@32QSomYW`9QW#!PMuZ0PCf-#p&w_MRm z?we9!=b!hI4IK0i-IFGtzVlu?o#*<2rK9E4laE+4rWVQt&DU7KLB1_3CDQ?zXF}sbe--u#bM@yV%wyByZ$-h97+2M;|Sgqf2{B z`h1ABd-w)*Z*}E7+jUR1zUDeSICQMl@<6saKgM?Fb@0iF$=eieOFr59{rkn;`QOLP z;#>=4;}196!%z2TewunO+PTlhIpn}!ou4nK9v)&rj(gJ4n=B7Do2%whE_f!4N8ES^ z&R^J3_Fo&Y=9QdK=Z^i!5^EO^nI{qV{9@Zi-y(MMB>J^) zLJ#|&Ur332&Z$qagdON3&!r=~y73iD|Z&d9u53!rm-}G=?qGv z&U7)gW7>{d)7g|yH!;15ZlPc3CHju(cXWg%QZjXA+LiLCh%TcPrYTfNSFkLPX&yDF zn`st}WIB?v*u!;nKGX9lm4;AX8qah*jia^Hm=-ZzM6c3SG?n~J{WOrh9HEo+DGd}p z@hSPl-}rnH-Ou!XdW{mPJNcOUs3#4e_WU-0S0Y_bXK_xK^O{M!=oBqyx}5&W8uwEp zrj2MLWzsd&i)k;qf%7@W*<4M7D2Ztj-AD)N5N%+(fnMa_%`Xxc2%-zbGU`VK)Prdc znm`}ZD*BP>kM#evnm(hqXg!@RhKuzyTzpL{XgW<}I*op%{?wZ;V0rYjDw$T& z9J+*N(;ZCjpbM!JwWI}17f=Nar&79)>3!6eM$tudC(}FWzo-?pp?jI$OZQM88bPC( zj;1Emf^MZMrd1@lT1V(G)5G*8T~9X6WjdE`r)y~*&1X8FI&w!ZX1#X2M$kD_Mt3p2 zi!P;HN}z>I7g7nGOC9J>O#ejX)Q#?@KQsL^b)oIlSY(Uslr27DA4lmKrq9qiT1K1b zIi}BXy*6=;H!|JGZ%gPE=9chU#@wrX@(Qm_Bu$vdA-8Xf5%pj@H$K( z%AuE;zD)n7-{?xN=x@AMP%Za#7o}4%O=3EUGH4|YqX5$YeNR(p4L!m12@29;YAO1O z#neyip$~WhPB1+|Z!lsC+groyH~Nyc(q^Wcx#x}OJaLX_MCXW&^a=O%ZKiM2|ItIV zm$`>{J;>b0e6p9b z@6ssoExkuSv8DHT?WITQ?;P2qydGw57f1ScULVj`G)y!SUr{5mjb7)xcQM_?XK%5+ zgG>+7|8g8Za*RLFlk`8F@e^EuAg=)ZmHwNKvyWBm;a~I^{md4ZbM|%g6rJYywsKru z#Q<@x=*p|T7%9?38>VeUiWnp=5f?MPSfmOehKlA)n~P?mo9H8mDTyYchmhh@rk9Ei zqOAys9Hu#~t?NjyMXsIwR>w$NblIekMTM6&pXlEu@soB9gB z*iC-1lXg&ou*43s#6F&ho}#r_ORYs?T1w}OOtF+Q#ryOEwG;it3)Ej6;Q47P&Ju#o z63_At(pt1&Yzu)K;xcibxSzY(h-a{uxJW$5Uop{#lqI^052?F&g#JN6(M9}&x`-N{ X!9>wiEMaSczMvtZxA=m3i|6S-vw))@ literal 0 HcmV?d00001 diff --git a/funbox.glb.import b/funbox.glb.import new file mode 100644 index 0000000..9d60d1b --- /dev/null +++ b/funbox.glb.import @@ -0,0 +1,45 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dx0ixlcxcxpcg" +path="res://.godot/imported/funbox.glb-d1e31206a7865f3af16dc0128c2d024a.scn" + +[deps] + +source_file="res://funbox.glb" +dest_files=["res://.godot/imported/funbox.glb-d1e31206a7865f3af16dc0128c2d024a.scn"] + +[params] + +nodes/root_type="Node3D" +nodes/root_name="Scene Root" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +import_script/path="" +_subresources={ +"meshes": { +"funbox_Cube_001": { +"generate/lightmap_uv": 0, +"generate/lods": 0, +"generate/shadow_meshes": 0, +"lods/normal_merge_angle": 60.0, +"lods/normal_split_angle": 25.0, +"save_to_file/enabled": true, +"save_to_file/make_streamable": "", +"save_to_file/path": "res://textmesh.res" +} +} +} +gltf/embedded_image_handling=0 diff --git a/funbox.tscn b/funbox.tscn new file mode 100644 index 0000000..f182727 --- /dev/null +++ b/funbox.tscn @@ -0,0 +1,13 @@ +[gd_scene load_steps=4 format=3 uid="uid://cbspcgdno2u5g"] + +[ext_resource type="PackedScene" uid="uid://dx0ixlcxcxpcg" path="res://funbox.glb" id="1_s5q5d"] +[ext_resource type="Texture2D" uid="uid://bmor4v4j7krgh" path="res://funboxtex.png" id="2_e8jej"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ppe8m"] +albedo_texture = ExtResource("2_e8jej") +texture_filter = 0 + +[node name="funbox" instance=ExtResource("1_s5q5d")] + +[node name="Cube" parent="." index="0"] +surface_material_override/0 = SubResource("StandardMaterial3D_ppe8m") diff --git a/funboxtex.png b/funboxtex.png new file mode 100644 index 0000000000000000000000000000000000000000..3b86f2b159ad2dc5bffe0d27f270d37b1f07da0c GIT binary patch literal 1801 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 literal 0 HcmV?d00001