diff --git a/Assets/TextureAtlases/g_accelerator.tres b/Assets/TextureAtlases/g_accelerator.tres deleted file mode 100644 index fc7c31c..0000000 --- a/Assets/TextureAtlases/g_accelerator.tres +++ /dev/null @@ -1,7 +0,0 @@ -[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://d1am28tgvwaa0"] - -[ext_resource type="Texture2D" uid="uid://cx5cwn11fuugq" path="res://Assets/Textures/accelerator.png" id="1_e3hoc"] - -[resource] -atlas = ExtResource("1_e3hoc") -region = Rect2(0, 0, 64, 64) diff --git a/Assets/TextureAtlases/g_assault.tres b/Assets/TextureAtlases/g_assault.tres deleted file mode 100644 index 0c7b91e..0000000 --- a/Assets/TextureAtlases/g_assault.tres +++ /dev/null @@ -1,7 +0,0 @@ -[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://ca4lwwd3e0y73"] - -[ext_resource type="Texture2D" uid="uid://celay30i4soud" path="res://Assets/Textures/g_assault.png" id="1_5fof3"] - -[resource] -atlas = ExtResource("1_5fof3") -region = Rect2(0, 0, 64, 64) diff --git a/Assets/TextureAtlases/g_glue_gun.tres b/Assets/TextureAtlases/g_glue_gun.tres deleted file mode 100644 index 49d6a69..0000000 --- a/Assets/TextureAtlases/g_glue_gun.tres +++ /dev/null @@ -1,7 +0,0 @@ -[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://jmxhiwsiw1f5"] - -[ext_resource type="Texture2D" uid="uid://oblavj8vj30n" path="res://Assets/Textures/glue_gun.png" id="1_2wjjm"] - -[resource] -atlas = ExtResource("1_2wjjm") -region = Rect2(0, 0, 64, 64) diff --git a/Assets/TextureAtlases/g_grenade_launcher.tres b/Assets/TextureAtlases/g_grenade_launcher.tres deleted file mode 100644 index 892a5b6..0000000 --- a/Assets/TextureAtlases/g_grenade_launcher.tres +++ /dev/null @@ -1,7 +0,0 @@ -[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://bwufgga1pjyt"] - -[ext_resource type="Texture2D" uid="uid://3qcdx7n440sc" path="res://Assets/Textures/grenade_launcher.png" id="1_qc0g6"] - -[resource] -atlas = ExtResource("1_qc0g6") -region = Rect2(0, 0, 64, 64) diff --git a/Assets/TextureAtlases/g_rocket_launcher.tres b/Assets/TextureAtlases/g_rocket_launcher.tres deleted file mode 100644 index 304659c..0000000 --- a/Assets/TextureAtlases/g_rocket_launcher.tres +++ /dev/null @@ -1,7 +0,0 @@ -[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://clr6kfyci5jqb"] - -[ext_resource type="Texture2D" uid="uid://by1y15lm0bppe" path="res://Assets/Textures/rocket_launcher.png" id="1_0bxom"] - -[resource] -atlas = ExtResource("1_0bxom") -region = Rect2(0, 0, 64, 64) diff --git a/Assets/TextureAtlases/g_sniper.tres b/Assets/TextureAtlases/g_sniper.tres deleted file mode 100644 index 94355f0..0000000 --- a/Assets/TextureAtlases/g_sniper.tres +++ /dev/null @@ -1,7 +0,0 @@ -[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://fmqq24n7rwvm"] - -[ext_resource type="Texture2D" uid="uid://cv2eycs1j0ho7" path="res://Assets/Textures/g_sniper.png" id="1_weegr"] - -[resource] -atlas = ExtResource("1_weegr") -region = Rect2(0, 0, 64, 64) diff --git a/Assets/TextureAtlases/gun.tres b/Assets/TextureAtlases/gun.tres deleted file mode 100644 index 4713b17..0000000 --- a/Assets/TextureAtlases/gun.tres +++ /dev/null @@ -1,8 +0,0 @@ -[gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://d060ag2vw7dp1"] - -[ext_resource type="Texture2D" uid="uid://ctjktwiq2fcjm" path="res://Assets/Textures/gun.png" id="1_m5tps"] - -[resource] -resource_local_to_scene = true -atlas = ExtResource("1_m5tps") -region = Rect2(0, 0, 64, 64) diff --git a/Assets/TextureAtlases/target_list.tres b/Assets/TextureAtlases/target_list.tres index 62d1538..2ea1850 100644 --- a/Assets/TextureAtlases/target_list.tres +++ b/Assets/TextureAtlases/target_list.tres @@ -1,6 +1,6 @@ [gd_resource type="AtlasTexture" load_steps=2 format=3 uid="uid://bgeu8dnqaxq7v"] -[ext_resource type="Texture2D" uid="uid://cc2umukpibmx1" path="res://Assets/Textures/target_list.png" id="1_s0pjb"] +[ext_resource type="Texture2D" uid="uid://cc2umukpibmx1" path="res://PCs/Universal/ClassCards/RocketLauncher/target_list.png" id="1_s0pjb"] [resource] atlas = ExtResource("1_s0pjb") diff --git a/Assets/Textures/8directionplayer.png b/Assets/Textures/8directionplayer.png deleted file mode 100644 index 8766948..0000000 Binary files a/Assets/Textures/8directionplayer.png and /dev/null differ diff --git a/PCs/Blue/blue.tres b/PCs/Blue/blue.tres index b140022..2070eef 100644 --- a/PCs/Blue/blue.tres +++ b/PCs/Blue/blue.tres @@ -1,9 +1,9 @@ [gd_resource type="Resource" script_class="HeroClass" load_steps=5 format=3 uid="uid://dxonpv8qbyrjy"] [ext_resource type="Script" path="res://Scripts/Resources/hero_class.gd" id="1_aeu85"] -[ext_resource type="Resource" uid="uid://dh5fjnbp8auw1" path="res://PCs/Universal/ClassCards/RocketLauncher/card_rocket_launcher.tres" id="1_uvyoy"] -[ext_resource type="Resource" uid="uid://bmoreipvttks8" path="res://PCs/Universal/ClassCards/Assault/card_assault.tres" id="2_3yr5a"] -[ext_resource type="Resource" uid="uid://cvf5bxtu6er17" path="res://PCs/Universal/ClassCards/Sniper/card_sniper.tres" id="3_wyb0n"] +[ext_resource type="Resource" uid="uid://b37r54q84vqoi" path="res://PCs/Universal/ClassCards/RocketLauncher/card_rocket_launcher.tres" id="1_uvyoy"] +[ext_resource type="Resource" uid="uid://deer0awg4d18o" path="res://PCs/Universal/ClassCards/Assault/card_assault.tres" id="2_3yr5a"] +[ext_resource type="Resource" uid="uid://ckm88acryitl4" path="res://PCs/Universal/ClassCards/Sniper/card_sniper.tres" id="3_wyb0n"] [resource] script = ExtResource("1_aeu85") diff --git a/PCs/Green/green.tres b/PCs/Green/green.tres index a84271e..44a8146 100644 --- a/PCs/Green/green.tres +++ b/PCs/Green/green.tres @@ -1,13 +1,13 @@ [gd_resource type="Resource" script_class="HeroClass" load_steps=6 format=3 uid="uid://ogbkbf1v7j7l"] [ext_resource type="Script" path="res://Scripts/Resources/hero_class.gd" id="1_cpfpk"] -[ext_resource type="Resource" uid="uid://cvf5bxtu6er17" path="res://PCs/Universal/ClassCards/Sniper/card_sniper.tres" id="1_hv6hq"] +[ext_resource type="Resource" uid="uid://ckm88acryitl4" path="res://PCs/Universal/ClassCards/Sniper/card_sniper.tres" id="1_hv6hq"] [ext_resource type="Texture2D" uid="uid://bgt3j4cuq814m" path="res://Assets/TextureAtlases/green.tres" id="2_4p73e"] -[ext_resource type="Resource" uid="uid://dh5fjnbp8auw1" path="res://PCs/Universal/ClassCards/RocketLauncher/card_rocket_launcher.tres" id="2_jdi4m"] -[ext_resource type="Resource" uid="uid://bmoreipvttks8" path="res://PCs/Universal/ClassCards/Assault/card_assault.tres" id="3_f04lj"] +[ext_resource type="Resource" uid="uid://b37r54q84vqoi" path="res://PCs/Universal/ClassCards/RocketLauncher/card_rocket_launcher.tres" id="2_jdi4m"] +[ext_resource type="Resource" uid="uid://deer0awg4d18o" path="res://PCs/Universal/ClassCards/Assault/card_assault.tres" id="3_f04lj"] [resource] script = ExtResource("1_cpfpk") hero_name = "Green" texture = ExtResource("2_4p73e") -deck = Array[Resource("res://Scripts/Resources/card.gd")]([ExtResource("1_hv6hq"), ExtResource("2_jdi4m"), ExtResource("3_f04lj")]) +deck = Array[Resource("res://Scripts/Resources/card.gd")]([ExtResource("3_f04lj"), ExtResource("1_hv6hq"), ExtResource("2_jdi4m")]) diff --git a/PCs/Red/red.tres b/PCs/Red/red.tres index 88e2518..8ce5e3c 100644 --- a/PCs/Red/red.tres +++ b/PCs/Red/red.tres @@ -1,13 +1,13 @@ [gd_resource type="Resource" script_class="HeroClass" load_steps=6 format=3 uid="uid://b5pc3frhx467q"] [ext_resource type="Script" path="res://Scripts/Resources/hero_class.gd" id="1_1wkap"] -[ext_resource type="Resource" uid="uid://bmoreipvttks8" path="res://PCs/Universal/ClassCards/Assault/card_assault.tres" id="1_iiksa"] -[ext_resource type="Resource" uid="uid://cvf5bxtu6er17" path="res://PCs/Universal/ClassCards/Sniper/card_sniper.tres" id="2_hkiwr"] +[ext_resource type="Resource" uid="uid://deer0awg4d18o" path="res://PCs/Universal/ClassCards/Assault/card_assault.tres" id="1_iiksa"] +[ext_resource type="Resource" uid="uid://ckm88acryitl4" path="res://PCs/Universal/ClassCards/Sniper/card_sniper.tres" id="2_hkiwr"] [ext_resource type="Texture2D" uid="uid://hxev3a2ktya" path="res://Assets/TextureAtlases/red.tres" id="2_kjc7g"] -[ext_resource type="Resource" uid="uid://dh5fjnbp8auw1" path="res://PCs/Universal/ClassCards/RocketLauncher/card_rocket_launcher.tres" id="3_ruhqi"] +[ext_resource type="Resource" uid="uid://b37r54q84vqoi" path="res://PCs/Universal/ClassCards/RocketLauncher/card_rocket_launcher.tres" id="3_ruhqi"] [resource] script = ExtResource("1_1wkap") hero_name = "Red" texture = ExtResource("2_kjc7g") -deck = Array[Resource("res://Scripts/Resources/card.gd")]([ExtResource("1_iiksa"), ExtResource("2_hkiwr"), ExtResource("3_ruhqi")]) +deck = Array[Resource("res://Scripts/Resources/card.gd")]([ExtResource("2_hkiwr"), ExtResource("3_ruhqi"), ExtResource("1_iiksa")]) diff --git a/PCs/Universal/ClassCards/Assault/card_assault.tres b/PCs/Universal/ClassCards/Assault/card_assault.tres index 4cf7e84..c02b196 100644 --- a/PCs/Universal/ClassCards/Assault/card_assault.tres +++ b/PCs/Universal/ClassCards/Assault/card_assault.tres @@ -1,19 +1,23 @@ -[gd_resource type="Resource" script_class="Card" load_steps=7 format=3 uid="uid://bmoreipvttks8"] +[gd_resource type="Resource" script_class="Card" load_steps=8 format=3 uid="uid://deer0awg4d18o"] [ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_yqa4b"] -[ext_resource type="Texture2D" uid="uid://ca4lwwd3e0y73" path="res://Assets/TextureAtlases/g_assault.tres" id="2_8j5h0"] -[ext_resource type="PackedScene" uid="uid://fernyl7fsifv" path="res://PCs/Universal/ClassCards/Assault/tower_assault.tscn" id="3_0r6s7"] -[ext_resource type="Resource" uid="uid://w15ojqyxd72q" path="res://Resources/WeaponStats/assault.tres" id="3_k2yr3"] -[ext_resource type="Resource" uid="uid://cktq4o3yuxgsa" path="res://Resources/TurretStats/assault.tres" id="3_p4byc"] -[ext_resource type="PackedScene" uid="uid://d1xe6hsq05110" path="res://PCs/Universal/ClassCards/Assault/weapon_assault.tscn" id="3_wj5gm"] +[ext_resource type="Texture2D" uid="uid://celay30i4soud" path="res://PCs/Universal/ClassCards/Assault/g_assault.png" id="2_a8may"] +[ext_resource type="PackedScene" uid="uid://2eehfcrsednw" path="res://PCs/Universal/ClassCards/Assault/weapon_assault.tscn" id="3_28y3b"] +[ext_resource type="Resource" uid="uid://bdmsiw45xxhiv" path="res://PCs/Universal/ClassCards/Assault/tower_stats.tres" id="3_ks0jw"] +[ext_resource type="PackedScene" uid="uid://bbfm4i4xlkwdr" path="res://PCs/Universal/ClassCards/Assault/tower_assault.tscn" id="4_5nu32"] +[ext_resource type="Resource" uid="uid://smctw4ogm4rx" path="res://PCs/Universal/ClassCards/Assault/weapon_stats.tres" id="4_est7t"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_q0mw6"] +atlas = ExtResource("2_a8may") +region = Rect2(0, 0, 64, 64) [resource] script = ExtResource("1_yqa4b") title = "Assault" rarity = 0 faction = 0 -sprite = ExtResource("2_8j5h0") -turret = ExtResource("3_0r6s7") -weapon = ExtResource("3_wj5gm") -weapon_stats = ExtResource("3_k2yr3") -tower_stats = ExtResource("3_p4byc") +sprite = SubResource("AtlasTexture_q0mw6") +turret_scene = ExtResource("4_5nu32") +weapon_scene = ExtResource("3_28y3b") +weapon_stats = ExtResource("4_est7t") +tower_stats = ExtResource("3_ks0jw") diff --git a/Assets/Textures/g_assault.png b/PCs/Universal/ClassCards/Assault/g_assault.png similarity index 100% rename from Assets/Textures/g_assault.png rename to PCs/Universal/ClassCards/Assault/g_assault.png diff --git a/Assets/Textures/g_assault.png.import b/PCs/Universal/ClassCards/Assault/g_assault.png.import similarity index 70% rename from Assets/Textures/g_assault.png.import rename to PCs/Universal/ClassCards/Assault/g_assault.png.import index 43fa149..fc15c5f 100644 --- a/Assets/Textures/g_assault.png.import +++ b/PCs/Universal/ClassCards/Assault/g_assault.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://celay30i4soud" -path="res://.godot/imported/g_assault.png-18634d790d834a408188c873cb3b1336.ctex" +path="res://.godot/imported/g_assault.png-5ee2b44f3ff930af8f664652779a0f99.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://Assets/Textures/g_assault.png" -dest_files=["res://.godot/imported/g_assault.png-18634d790d834a408188c873cb3b1336.ctex"] +source_file="res://PCs/Universal/ClassCards/Assault/g_assault.png" +dest_files=["res://.godot/imported/g_assault.png-5ee2b44f3ff930af8f664652779a0f99.ctex"] [params] diff --git a/PCs/Universal/ClassCards/Assault/tower_assault.gd b/PCs/Universal/ClassCards/Assault/tower_assault.gd new file mode 100644 index 0000000..9647c7a --- /dev/null +++ b/PCs/Universal/ClassCards/Assault/tower_assault.gd @@ -0,0 +1,2 @@ +extends HitscanTower +class_name AssaultTower diff --git a/PCs/Universal/ClassCards/Assault/tower_assault.tscn b/PCs/Universal/ClassCards/Assault/tower_assault.tscn index b4b6281..50850aa 100644 --- a/PCs/Universal/ClassCards/Assault/tower_assault.tscn +++ b/PCs/Universal/ClassCards/Assault/tower_assault.tscn @@ -1,41 +1,9 @@ -[gd_scene load_steps=4 format=3 uid="uid://fernyl7fsifv"] +[gd_scene load_steps=4 format=3 uid="uid://bbfm4i4xlkwdr"] -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Assault/tower.gd" id="1_c2874"] -[ext_resource type="Resource" uid="uid://cktq4o3yuxgsa" path="res://Resources/TurretStats/assault.tres" id="2_t516u"] +[ext_resource type="PackedScene" uid="uid://dumiyjlnea4gq" path="res://Scenes/Towers/hitscan_tower.tscn" id="1_uadu5"] +[ext_resource type="Resource" uid="uid://bdmsiw45xxhiv" path="res://PCs/Universal/ClassCards/Assault/tower_stats.tres" id="2_gg1gn"] +[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Assault/tower_assault.gd" id="2_olbck"] -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_llb88"] -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("model", "range_sphere", "minimap_range_sphere")] -script = ExtResource("1_c2874") -stats = ExtResource("2_t516u") -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"] - -[node name="CSGBox3D2" type="CSGBox3D" parent="Model"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.714825, 0, -0.423869) -size = Vector3(0.481654, 0.427749, 1.38438) - -[node name="CSGBox3D3" type="CSGBox3D" parent="Model"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.715, 0, -0.424) -size = Vector3(0.481654, 0.427749, 1.38438) - -[node name="CSGSphere3D" type="CSGSphere3D" parent="Model"] -visible = false -radius = 7.5 -material = SubResource("StandardMaterial3D_llb88") - -[node name="CSGSphere3D2" type="CSGSphere3D" parent="Model"] -visible = false -layers = 4 -radius = 7.5 -material = SubResource("StandardMaterial3D_llb88") +[node name="AssaultTower" instance=ExtResource("1_uadu5")] +script = ExtResource("2_olbck") +stats = ExtResource("2_gg1gn") diff --git a/PCs/Universal/ClassCards/Assault/tower_stats.tres b/PCs/Universal/ClassCards/Assault/tower_stats.tres new file mode 100644 index 0000000..d6465a5 --- /dev/null +++ b/PCs/Universal/ClassCards/Assault/tower_stats.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="CardText" load_steps=6 format=3 uid="uid://bdmsiw45xxhiv"] + +[ext_resource type="Script" path="res://Scripts/Resources/card_text.gd" id="1_50mwk"] +[ext_resource type="Script" path="res://Scripts/Resources/stat_attribute.gd" id="1_cwxf1"] + +[sub_resource type="Resource" id="Resource_bukji"] +script = ExtResource("1_cwxf1") +key = "Fire Delay" +value = 1.0 + +[sub_resource type="Resource" id="Resource_2e75s"] +script = ExtResource("1_cwxf1") +key = "Damage" +value = 1.0 + +[sub_resource type="Resource" id="Resource_1vpnf"] +script = ExtResource("1_cwxf1") +key = "Range" +value = 10.0 + +[resource] +script = ExtResource("1_50mwk") +target_type = 1 +attributes = Array[ExtResource("1_cwxf1")]([SubResource("Resource_bukji"), SubResource("Resource_2e75s"), SubResource("Resource_1vpnf")]) +text = "Fires a shot every /Fire Delay\\ seconds dealing /Damage\\ damage at a range of /Range\\m" diff --git a/PCs/Universal/ClassCards/Assault/weapon.gd b/PCs/Universal/ClassCards/Assault/weapon.gd deleted file mode 100644 index 476f8d7..0000000 --- a/PCs/Universal/ClassCards/Assault/weapon.gd +++ /dev/null @@ -1,73 +0,0 @@ -extends Sprite3D -class_name Weapon - -@export var stats : WeaponStats -@export var hero : Hero - -var cooldown := 0.0 -var other_cooldown := 0.0 -var trigger_held := false -var second_trigger_held := false - - -func _ready() -> void: - cooldown = 1.0 / stats.fire_rate - $RayCast3D.target_position = Vector3(0, 0, -stats.fire_range) - - -func set_raycast_origin(node): - $RayCast3D.global_position = node.global_position - - -func set_hero(value): - hero = value - - -func _process(delta: float) -> void: - if stats != null: - other_cooldown -= delta - - -func _physics_process(_delta: float) -> void: - if trigger_held: - shoot() - - -func hold_trigger(): - trigger_held = true - - -func release_trigger(): - trigger_held = false - - -func hold_second_trigger(): - second_trigger_held = true - - -func release_second_trigger(): - second_trigger_held = false - - -func shoot(): - if other_cooldown <= 0 and stats != null: - other_cooldown = cooldown - $AnimationPlayer.play("shoot") - if $RayCast3D.is_colliding(): - var target = $RayCast3D.get_collider() - if target != null: - var target_hitbox = target.shape_owner_get_owner($RayCast3D.get_collider_shape()) - if target_hitbox is Hitbox: - target_hitbox.damage(stats.damage) - networked_hit.rpc(get_tree().root.get_path_to(target_hitbox)) - - -@rpc -func networked_shoot(): - $AnimationPlayer.play("shoot") - - -@rpc("reliable") -func networked_hit(target_node_path : String): - var target_node = get_tree().root.get_node(target_node_path) - target_node.damage(stats.damage) diff --git a/PCs/Universal/ClassCards/Assault/weapon_assault.gd b/PCs/Universal/ClassCards/Assault/weapon_assault.gd new file mode 100644 index 0000000..3ac4ae0 --- /dev/null +++ b/PCs/Universal/ClassCards/Assault/weapon_assault.gd @@ -0,0 +1,2 @@ +extends HitscanWeapon +class_name AssaultWeapon diff --git a/PCs/Universal/ClassCards/Assault/weapon_assault.tscn b/PCs/Universal/ClassCards/Assault/weapon_assault.tscn index 239e093..7a1d188 100644 --- a/PCs/Universal/ClassCards/Assault/weapon_assault.tscn +++ b/PCs/Universal/ClassCards/Assault/weapon_assault.tscn @@ -1,58 +1,15 @@ -[gd_scene load_steps=7 format=3 uid="uid://d1xe6hsq05110"] +[gd_scene load_steps=5 format=3 uid="uid://2eehfcrsednw"] -[ext_resource type="Texture2D" uid="uid://ca4lwwd3e0y73" path="res://Assets/TextureAtlases/g_assault.tres" id="1_117ne"] -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Assault/weapon.gd" id="2_4ie8w"] -[ext_resource type="Resource" uid="uid://w15ojqyxd72q" path="res://Resources/WeaponStats/assault.tres" id="3_s4ckt"] +[ext_resource type="PackedScene" uid="uid://difwo7wlyqr3h" path="res://Scenes/Weapons/hitscan_weapon.tscn" id="1_wkxf7"] +[ext_resource type="Resource" uid="uid://smctw4ogm4rx" path="res://PCs/Universal/ClassCards/Assault/weapon_stats.tres" id="2_fnp5x"] +[ext_resource type="Texture2D" uid="uid://celay30i4soud" path="res://PCs/Universal/ClassCards/Assault/g_assault.png" id="3_kuj4t"] -[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_604rb"] +atlas = ExtResource("3_kuj4t") +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="HitscanWeapon" instance=ExtResource("1_wkxf7")] +stats = ExtResource("2_fnp5x") -[sub_resource type="AnimationLibrary" id="AnimationLibrary_ntl6p"] -_data = { -"RESET": SubResource("Animation_n8b32"), -"shoot": SubResource("Animation_g0h8q") -} - -[node name="Weapon" type="Sprite3D"] -layers = 2 -billboard = 1 -texture_filter = 0 -texture = ExtResource("1_117ne") -script = ExtResource("2_4ie8w") -stats = ExtResource("3_s4ckt") - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -libraries = { -"": SubResource("AnimationLibrary_ntl6p") -} - -[node name="RayCast3D" type="RayCast3D" parent="."] -collision_mask = 4 +[node name="Sprite3D" parent="." index="0"] +texture = SubResource("AtlasTexture_604rb") diff --git a/PCs/Universal/ClassCards/Assault/weapon_stats.tres b/PCs/Universal/ClassCards/Assault/weapon_stats.tres new file mode 100644 index 0000000..14a8fdd --- /dev/null +++ b/PCs/Universal/ClassCards/Assault/weapon_stats.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="CardText" load_steps=6 format=3 uid="uid://smctw4ogm4rx"] + +[ext_resource type="Script" path="res://Scripts/Resources/card_text.gd" id="1_gk542"] +[ext_resource type="Script" path="res://Scripts/Resources/stat_attribute.gd" id="1_qt3yl"] + +[sub_resource type="Resource" id="Resource_bcrtt"] +script = ExtResource("1_qt3yl") +key = "Damage" +value = 3.0 + +[sub_resource type="Resource" id="Resource_llper"] +script = ExtResource("1_qt3yl") +key = "Range" +value = 15.0 + +[sub_resource type="Resource" id="Resource_7i2dt"] +script = ExtResource("1_qt3yl") +key = "Fire Delay" +value = 0.2 + +[resource] +script = ExtResource("1_gk542") +target_type = 0 +attributes = Array[ExtResource("1_qt3yl")]([SubResource("Resource_bcrtt"), SubResource("Resource_llper"), SubResource("Resource_7i2dt")]) +text = "Fires a shot every /Fire Delay\\ seconds dealing /Damage\\ damage at a range of /Range\\m" diff --git a/PCs/Universal/ClassCards/Blowdart/blowdart.png b/PCs/Universal/ClassCards/Blowdart/blowdart.png new file mode 100644 index 0000000..ea13f58 Binary files /dev/null and b/PCs/Universal/ClassCards/Blowdart/blowdart.png differ diff --git a/PCs/Universal/ClassCards/Blowdart/blowdart.png.import b/PCs/Universal/ClassCards/Blowdart/blowdart.png.import new file mode 100644 index 0000000..6b64dca --- /dev/null +++ b/PCs/Universal/ClassCards/Blowdart/blowdart.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dnlplq8duves3" +path.s3tc="res://.godot/imported/blowdart.png-bf139154f6dbb2ce97655e4664c07987.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://PCs/Universal/ClassCards/Blowdart/blowdart.png" +dest_files=["res://.godot/imported/blowdart.png-bf139154f6dbb2ce97655e4664c07987.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/PCs/Universal/ClassCards/Blowdart/blowdartweapon.gd b/PCs/Universal/ClassCards/Blowdart/blowdartweapon.gd deleted file mode 100644 index 04cbd58..0000000 --- a/PCs/Universal/ClassCards/Blowdart/blowdartweapon.gd +++ /dev/null @@ -1,17 +0,0 @@ -extends Weapon -class_name BlowdartWeapon - -@export var status_stats : StatusStats - -func shoot(): - if other_cooldown <= 0 and stats != null: - other_cooldown = cooldown - $AnimationPlayer.play("shoot") - if $RayCast3D.is_colliding(): - var target = $RayCast3D.get_collider() - if target != null: - var target_hitbox = target.shape_owner_get_owner($RayCast3D.get_collider_shape()) - if target_hitbox is Hitbox: - var status = StatusPoison.new() - status.stats = status_stats - target.status_manager.add_effect(status) diff --git a/PCs/Universal/ClassCards/Blowdart/card_blowdart.tres b/PCs/Universal/ClassCards/Blowdart/card_blowdart.tres index cf0ce68..f16467f 100644 --- a/PCs/Universal/ClassCards/Blowdart/card_blowdart.tres +++ b/PCs/Universal/ClassCards/Blowdart/card_blowdart.tres @@ -1,19 +1,9 @@ -[gd_resource type="Resource" script_class="Card" load_steps=7 format=3 uid="uid://dnoi0fx0ppsrf"] +[gd_resource type="Resource" script_class="Card" load_steps=2 format=3 uid="uid://bywwtjdjsgdsj"] -[ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_vm4gs"] -[ext_resource type="Texture2D" uid="uid://ca4lwwd3e0y73" path="res://Assets/TextureAtlases/g_assault.tres" id="2_lyppa"] -[ext_resource type="Resource" uid="uid://by1gyra5a4aks" path="res://Resources/TurretStats/blowdart.tres" id="3_ybbbf"] -[ext_resource type="PackedScene" uid="uid://qkvo6ibgfrlb" path="res://PCs/Universal/ClassCards/Blowdart/tower_blowdart.tscn" id="4_55xb7"] -[ext_resource type="PackedScene" uid="uid://cqo6wwf5vbilg" path="res://PCs/Universal/ClassCards/Blowdart/weapon_blowdart.tscn" id="5_c4q5e"] -[ext_resource type="Resource" uid="uid://dhegsd45xi7na" path="res://Resources/WeaponStats/blowdart.tres" id="6_ii6x2"] +[ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_nobd8"] [resource] -script = ExtResource("1_vm4gs") +script = ExtResource("1_nobd8") title = "Blowdart" -rarity = 1 +rarity = 0 faction = 0 -sprite = ExtResource("2_lyppa") -turret = ExtResource("4_55xb7") -weapon = ExtResource("5_c4q5e") -weapon_stats = ExtResource("6_ii6x2") -tower_stats = ExtResource("3_ybbbf") diff --git a/PCs/Universal/ClassCards/Blowdart/weapon_blowdart.gd b/PCs/Universal/ClassCards/Blowdart/weapon_blowdart.gd new file mode 100644 index 0000000..1b7193a --- /dev/null +++ b/PCs/Universal/ClassCards/Blowdart/weapon_blowdart.gd @@ -0,0 +1,8 @@ +extends StatusApplyingWeapon +class_name BlowdartWeapon + + +func build_status_object() -> StatusEffect: + var status = StatusDoT.new() + status.stats = status_stats + return status diff --git a/PCs/Universal/ClassCards/Blowdart/weapon_blowdart.tscn b/PCs/Universal/ClassCards/Blowdart/weapon_blowdart.tscn index 979d5bb..96b23d9 100644 --- a/PCs/Universal/ClassCards/Blowdart/weapon_blowdart.tscn +++ b/PCs/Universal/ClassCards/Blowdart/weapon_blowdart.tscn @@ -1,60 +1,27 @@ -[gd_scene load_steps=8 format=3 uid="uid://cqo6wwf5vbilg"] +[gd_scene load_steps=7 format=3 uid="uid://cy05ssd52exf0"] -[ext_resource type="Texture2D" uid="uid://jmxhiwsiw1f5" path="res://Assets/TextureAtlases/g_glue_gun.tres" id="1_3t02x"] -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Blowdart/blowdartweapon.gd" id="2_ytopx"] -[ext_resource type="Resource" uid="uid://cbskijhnnj3kw" path="res://Resources/StatusEffects/poisoned.tres" id="3_qabj4"] -[ext_resource type="Resource" uid="uid://dhegsd45xi7na" path="res://Resources/WeaponStats/blowdart.tres" id="4_j03wq"] +[ext_resource type="PackedScene" uid="uid://nrdexcyatika" path="res://Scenes/Weapons/status_applying_weapon.tscn" id="1_t3gfv"] +[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Blowdart/weapon_blowdart.gd" id="2_g1m1f"] +[ext_resource type="Resource" uid="uid://cbskijhnnj3kw" path="res://Resources/StatusEffects/poisoned.tres" id="3_wculg"] +[ext_resource type="Resource" uid="uid://c6e50linnk2i7" path="res://PCs/Universal/ClassCards/Blowdart/weapon_stats.tres" id="4_dwqec"] +[ext_resource type="Texture2D" uid="uid://dnlplq8duves3" path="res://PCs/Universal/ClassCards/Blowdart/blowdart.png" id="5_rvf06"] -[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_85web"] +atlas = ExtResource("5_rvf06") +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="BlowdartWeapon" instance=ExtResource("1_t3gfv")] +script = ExtResource("2_g1m1f") +status_stats = ExtResource("3_wculg") +raycast = Object(RayCast3D,"_import_path":NodePath(""),"unique_name_in_owner":false,"process_mode":0,"process_priority":0,"process_physics_priority":0,"process_thread_group":0,"editor_description":"","transform":Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0),"rotation_edit_mode":0,"rotation_order":2,"top_level":false,"visible":true,"visibility_parent":NodePath(""),"enabled":true,"exclude_parent":true,"target_position":Vector3(0, 0, -1),"collision_mask":4,"hit_from_inside":false,"collide_with_areas":false,"collide_with_bodies":true,"debug_shape_custom_color":Color(0, 0, 0, 1),"debug_shape_thickness":2,"script":null) -[sub_resource type="AnimationLibrary" id="AnimationLibrary_ntl6p"] -_data = { -"RESET": SubResource("Animation_n8b32"), -"shoot": SubResource("Animation_g0h8q") -} +range_debug_indicator = Object(CSGSphere3D,"_import_path":NodePath(""),"unique_name_in_owner":false,"process_mode":0,"process_priority":0,"process_physics_priority":0,"process_thread_group":0,"editor_description":"","transform":Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0),"rotation_edit_mode":0,"rotation_order":2,"top_level":false,"visible":false,"visibility_parent":NodePath(""),"layers":1,"sorting_offset":0.0,"sorting_use_aabb_center":true,"material_override":null,"material_overlay":null,"transparency":0.0,"cast_shadow":1,"extra_cull_margin":0.0,"custom_aabb":AABB(0, 0, 0, 0, 0, 0),"lod_bias":1.0,"ignore_occlusion_culling":false,"gi_mode":1,"gi_lightmap_scale":0,"visibility_range_begin":0.0,"visibility_range_begin_margin":0.0,"visibility_range_end":0.0,"visibility_range_end_margin":0.0,"visibility_range_fade_mode":0,"operation":0,"snap":0.001,"calculate_tangents":true,"use_collision":false,"collision_layer":1,"collision_mask":1,"collision_priority":1.0,"flip_faces":false,"radius":4.104,"radial_segments":16,"rings":16,"smooth_faces":true,"material":null,"script":null) -[node name="Weapon" type="Sprite3D"] -layers = 2 -billboard = 1 -texture_filter = 0 -texture = ExtResource("1_3t02x") -script = ExtResource("2_ytopx") -status_stats = ExtResource("3_qabj4") -stats = ExtResource("4_j03wq") +stats = ExtResource("4_dwqec") +animator = Object(AnimationPlayer,"_import_path":NodePath(""),"unique_name_in_owner":false,"process_mode":0,"process_priority":0,"process_physics_priority":0,"process_thread_group":0,"editor_description":"","root_node":NodePath(".."),"autoplay":"","reset_on_save":true,"playback_process_mode":1,"playback_default_blend_time":0.0,"speed_scale":1.0,"method_call_mode":0,"audio_max_polyphony":32,"movie_quit_on_finish":false,"libraries":{ +"": null +},"blend_times":[],"script":null) -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -libraries = { -"": SubResource("AnimationLibrary_ntl6p") -} -[node name="RayCast3D" type="RayCast3D" parent="."] -collision_mask = 4 +[node name="Sprite3D" parent="." index="0"] +texture = SubResource("AtlasTexture_85web") diff --git a/PCs/Universal/ClassCards/Blowdart/weapon_stats.tres b/PCs/Universal/ClassCards/Blowdart/weapon_stats.tres new file mode 100644 index 0000000..4441be2 --- /dev/null +++ b/PCs/Universal/ClassCards/Blowdart/weapon_stats.tres @@ -0,0 +1,24 @@ +[gd_resource type="Resource" script_class="CardText" load_steps=6 format=3 uid="uid://c6e50linnk2i7"] + +[ext_resource type="Script" path="res://Scripts/Resources/card_text.gd" id="1_5ldx7"] +[ext_resource type="Script" path="res://Scripts/Resources/stat_attribute.gd" id="1_pw5it"] + +[sub_resource type="Resource" id="Resource_1txa7"] +script = ExtResource("1_pw5it") +key = "Damage" +value = 0.0 + +[sub_resource type="Resource" id="Resource_46kv2"] +script = ExtResource("1_pw5it") +key = "Range" +value = 15.0 + +[sub_resource type="Resource" id="Resource_gb76x"] +script = ExtResource("1_pw5it") +key = "Fire Delay" +value = 0.8 + +[resource] +script = ExtResource("1_5ldx7") +attributes = Array[ExtResource("1_pw5it")]([SubResource("Resource_1txa7"), SubResource("Resource_46kv2"), SubResource("Resource_gb76x")]) +text = "Fires every /Fire Delay\\s, applying one stack of Poison at a range of /Range\\m" diff --git a/PCs/Universal/ClassCards/BombLauncher/bomb.gd b/PCs/Universal/ClassCards/BombLauncher/bomb.gd deleted file mode 100644 index a16e826..0000000 --- a/PCs/Universal/ClassCards/BombLauncher/bomb.gd +++ /dev/null @@ -1,20 +0,0 @@ -extends RigidBody3D -class_name Bomb - -@export var max_bounces := 1 -@export var damage := 10.0 -@export var explosion_range := 3.0 -var bounces := 0 - -func _on_body_entered(_body: Node) -> void: - bounces += 1 - var collided_body = get_colliding_bodies()[0].get_collision_layer_value(3) - if bounces > max_bounces or collided_body: - explode() - - -func explode(): - for enemy in get_tree().get_nodes_in_group("Enemies"): - if global_position.distance_to(enemy.global_position) <= explosion_range: - enemy.damage(damage) - queue_free() diff --git a/Assets/Textures/bomb.png b/PCs/Universal/ClassCards/BombLauncher/bomb.png similarity index 100% rename from Assets/Textures/bomb.png rename to PCs/Universal/ClassCards/BombLauncher/bomb.png diff --git a/Assets/Textures/bomb.png.import b/PCs/Universal/ClassCards/BombLauncher/bomb.png.import similarity index 71% rename from Assets/Textures/bomb.png.import rename to PCs/Universal/ClassCards/BombLauncher/bomb.png.import index 88ef533..ed78b3e 100644 --- a/Assets/Textures/bomb.png.import +++ b/PCs/Universal/ClassCards/BombLauncher/bomb.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://b54d5dc4jmlau" -path="res://.godot/imported/bomb.png-c85d126612097bd650bbb12e0b92da53.ctex" +path="res://.godot/imported/bomb.png-487c0a83cb041cff7ffc29ecb2986a5b.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://Assets/Textures/bomb.png" -dest_files=["res://.godot/imported/bomb.png-c85d126612097bd650bbb12e0b92da53.ctex"] +source_file="res://PCs/Universal/ClassCards/BombLauncher/bomb.png" +dest_files=["res://.godot/imported/bomb.png-487c0a83cb041cff7ffc29ecb2986a5b.ctex"] [params] diff --git a/PCs/Universal/ClassCards/BombLauncher/bomb.tscn b/PCs/Universal/ClassCards/BombLauncher/bomb.tscn deleted file mode 100644 index 300e91a..0000000 --- a/PCs/Universal/ClassCards/BombLauncher/bomb.tscn +++ /dev/null @@ -1,29 +0,0 @@ -[gd_scene load_steps=5 format=3 uid="uid://d147iwg2wcqc5"] - -[ext_resource type="Texture2D" uid="uid://b54d5dc4jmlau" path="res://Assets/Textures/bomb.png" id="1_u615o"] -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/BombLauncher/bomb.gd" id="1_vekqm"] - -[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_whkhx"] -bounce = 0.6 - -[sub_resource type="SphereShape3D" id="SphereShape3D_mi0in"] -radius = 0.2 - -[node name="RigidBody3D" type="RigidBody3D"] -collision_layer = 0 -collision_mask = 5 -physics_material_override = SubResource("PhysicsMaterial_whkhx") -max_contacts_reported = 1 -contact_monitor = true -script = ExtResource("1_vekqm") - -[node name="Node3D" type="Sprite3D" parent="."] -transform = Transform3D(1.4, 0, 0, 0, 1.4, 0, 0, 0, 1.4, 0, 0, 0) -billboard = 1 -texture_filter = 0 -texture = ExtResource("1_u615o") - -[node name="CollisionShape3D" type="CollisionShape3D" parent="."] -shape = SubResource("SphereShape3D_mi0in") - -[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/PCs/Universal/ClassCards/BombLauncher/bomb_projectile.gd b/PCs/Universal/ClassCards/BombLauncher/bomb_projectile.gd new file mode 100644 index 0000000..5fd6b89 --- /dev/null +++ b/PCs/Universal/ClassCards/BombLauncher/bomb_projectile.gd @@ -0,0 +1,16 @@ +extends ExplosiveProjectile +class_name BombProjectile + +var max_bounces := 1 +var bounces := 0 + + +func _ready() -> void: + apply_central_impulse(direction * force) + + +func _on_body_entered(_body: Node) -> void: + bounces += 1 + var collided_body = get_colliding_bodies()[0].get_collision_layer_value(3) + if bounces > max_bounces or collided_body: + explode() diff --git a/PCs/Universal/ClassCards/BombLauncher/bomb_projectile.tscn b/PCs/Universal/ClassCards/BombLauncher/bomb_projectile.tscn new file mode 100644 index 0000000..b2cd76d --- /dev/null +++ b/PCs/Universal/ClassCards/BombLauncher/bomb_projectile.tscn @@ -0,0 +1,17 @@ +[gd_scene load_steps=5 format=3 uid="uid://c8oq5unisjqne"] + +[ext_resource type="PackedScene" uid="uid://7f4dfphgiswr" path="res://Scenes/Projectiles/explosive_projectile.tscn" id="1_kf2wi"] +[ext_resource type="Script" path="res://PCs/Universal/ClassCards/BombLauncher/bomb_projectile.gd" id="2_qvo4u"] +[ext_resource type="Texture2D" uid="uid://b54d5dc4jmlau" path="res://PCs/Universal/ClassCards/BombLauncher/bomb.png" id="3_ilhep"] + +[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_bbpul"] +bounce = 0.3 + +[node name="Bomb" instance=ExtResource("1_kf2wi")] +physics_material_override = SubResource("PhysicsMaterial_bbpul") +gravity_scale = 1.0 +script = ExtResource("2_qvo4u") + +[node name="Sprite3D" parent="." index="1"] +pixel_size = 0.015 +texture = ExtResource("3_ilhep") diff --git a/PCs/Universal/ClassCards/BombLauncher/bombweapon.gd b/PCs/Universal/ClassCards/BombLauncher/bombweapon.gd deleted file mode 100644 index 16a4c14..0000000 --- a/PCs/Universal/ClassCards/BombLauncher/bombweapon.gd +++ /dev/null @@ -1,21 +0,0 @@ -extends Weapon -class_name BombWeapon - -@export var bomb_scene: PackedScene -var firing_velocity - -func _ready() -> void: - cooldown = 1.0 / stats.fire_rate - firing_velocity = sqrt((stats.fire_range * ProjectSettings.get_setting("physics/3d/default_gravity")) / sin(2 * 45)) - $RayCast3D.target_position = Vector3(0, 0, -stats.fire_range) - - -func shoot(): - if other_cooldown <= 0 and stats != null: - other_cooldown = cooldown - $AnimationPlayer.play("shoot") - var bomb = bomb_scene.instantiate() as Bomb - bomb.position = $RayCast3D.global_position - bomb.damage = stats.damage - get_tree().root.add_child(bomb) - bomb.apply_impulse(-global_transform.basis.z * firing_velocity) diff --git a/PCs/Universal/ClassCards/BombLauncher/card_bomb_launcher.tres b/PCs/Universal/ClassCards/BombLauncher/card_bomb_launcher.tres new file mode 100644 index 0000000..8a7d166 --- /dev/null +++ b/PCs/Universal/ClassCards/BombLauncher/card_bomb_launcher.tres @@ -0,0 +1,23 @@ +[gd_resource type="Resource" script_class="Card" load_steps=8 format=3 uid="uid://blgngx360vff1"] + +[ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_qtxcq"] +[ext_resource type="Texture2D" uid="uid://3qcdx7n440sc" path="res://PCs/Universal/ClassCards/BombLauncher/grenade_launcher.png" id="2_qpxaq"] +[ext_resource type="Resource" uid="uid://8eaecilvan23" path="res://PCs/Universal/ClassCards/BombLauncher/tower_stats.tres" id="3_gknxe"] +[ext_resource type="PackedScene" uid="uid://c3fqlkytyc62u" path="res://PCs/Universal/ClassCards/BombLauncher/weapon_bomb_launcher.tscn" id="3_s56j6"] +[ext_resource type="Resource" uid="uid://co6eorobj1xuu" path="res://PCs/Universal/ClassCards/BombLauncher/weapon_stats.tres" id="4_s74ea"] +[ext_resource type="PackedScene" uid="uid://d2cch7qrwocg8" path="res://PCs/Universal/ClassCards/BombLauncher/tower_bomb_launcher.tscn" id="4_vc8pe"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_rat6o"] +atlas = ExtResource("2_qpxaq") +region = Rect2(0, 0, 64, 64) + +[resource] +script = ExtResource("1_qtxcq") +title = "Bomb Launcher" +rarity = 0 +faction = 0 +sprite = SubResource("AtlasTexture_rat6o") +turret_scene = ExtResource("4_vc8pe") +weapon_scene = ExtResource("3_s56j6") +weapon_stats = ExtResource("4_s74ea") +tower_stats = ExtResource("3_gknxe") diff --git a/PCs/Universal/ClassCards/BombLauncher/card_grenade_launcher.tres b/PCs/Universal/ClassCards/BombLauncher/card_grenade_launcher.tres deleted file mode 100644 index e174f69..0000000 --- a/PCs/Universal/ClassCards/BombLauncher/card_grenade_launcher.tres +++ /dev/null @@ -1,19 +0,0 @@ -[gd_resource type="Resource" script_class="Card" load_steps=7 format=3 uid="uid://bvpkvmda845o5"] - -[ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_bscy2"] -[ext_resource type="Texture2D" uid="uid://bwufgga1pjyt" path="res://Assets/TextureAtlases/g_grenade_launcher.tres" id="2_xtrq2"] -[ext_resource type="Resource" uid="uid://crmsk6lvp5i4e" path="res://Resources/TurretStats/bomblauncher.tres" id="3_c1c3t"] -[ext_resource type="PackedScene" uid="uid://6ckryuql3bh8" path="res://PCs/Universal/ClassCards/BombLauncher/weapon_bomb_launcher.tscn" id="4_iaadg"] -[ext_resource type="PackedScene" uid="uid://cwc8y1nv53btu" path="res://PCs/Universal/ClassCards/BombLauncher/tower_bomb_launcher.tscn" id="4_ux0v3"] -[ext_resource type="Resource" uid="uid://kbaiy5u6imtu" path="res://Resources/WeaponStats/bomblauncher.tres" id="5_mhhrq"] - -[resource] -script = ExtResource("1_bscy2") -title = "Bomb Launcher" -rarity = 0 -faction = 0 -sprite = ExtResource("2_xtrq2") -turret = ExtResource("4_ux0v3") -weapon = ExtResource("4_iaadg") -weapon_stats = ExtResource("5_mhhrq") -tower_stats = ExtResource("3_c1c3t") diff --git a/Assets/Textures/grenade_launcher.png b/PCs/Universal/ClassCards/BombLauncher/grenade_launcher.png similarity index 100% rename from Assets/Textures/grenade_launcher.png rename to PCs/Universal/ClassCards/BombLauncher/grenade_launcher.png diff --git a/Assets/Textures/grenade_launcher.png.import b/PCs/Universal/ClassCards/BombLauncher/grenade_launcher.png.import similarity index 67% rename from Assets/Textures/grenade_launcher.png.import rename to PCs/Universal/ClassCards/BombLauncher/grenade_launcher.png.import index 43b9eae..b839f1f 100644 --- a/Assets/Textures/grenade_launcher.png.import +++ b/PCs/Universal/ClassCards/BombLauncher/grenade_launcher.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://3qcdx7n440sc" -path="res://.godot/imported/grenade_launcher.png-3275b92d0df686a016f2abc93d27971f.ctex" +path="res://.godot/imported/grenade_launcher.png-1e7f404a8d0cf786acfd3eff044b4f0c.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://Assets/Textures/grenade_launcher.png" -dest_files=["res://.godot/imported/grenade_launcher.png-3275b92d0df686a016f2abc93d27971f.ctex"] +source_file="res://PCs/Universal/ClassCards/BombLauncher/grenade_launcher.png" +dest_files=["res://.godot/imported/grenade_launcher.png-1e7f404a8d0cf786acfd3eff044b4f0c.ctex"] [params] diff --git a/PCs/Universal/ClassCards/BombLauncher/tower_bomb_launcher.gd b/PCs/Universal/ClassCards/BombLauncher/tower_bomb_launcher.gd new file mode 100644 index 0000000..a3d1301 --- /dev/null +++ b/PCs/Universal/ClassCards/BombLauncher/tower_bomb_launcher.gd @@ -0,0 +1,20 @@ +extends ProjectileTower +class_name BombLauncherTower + +func _ready() -> void: + super._ready() + force = sqrt((target_range * ProjectSettings.get_setting("physics/3d/default_gravity")) / sin(2 * 45)) + + +func aim(): + super.aim() + var pos = Vector2(global_position.x, global_position.z) + var t_pos = Vector2(targeted_enemy.global_position.x, targeted_enemy.global_position.z) + var x = pos.distance_to(t_pos) + var y = targeted_enemy.global_position.y - (global_position.y + 1) + var v = force + var g = ProjectSettings.get_setting("physics/3d/default_gravity") + var v2 = pow(v, 2) + var angle = atan((v2 + sqrt(pow(v, 4) - g * ((g * pow(x, 2)) + (2 * y * v2)))) / (g * x)) + yaw_model.look_at(Vector3(t_pos.x, yaw_model.global_position.y, t_pos.y)) + yaw_model.rotate(yaw_model.global_transform.basis.x.normalized(), angle) diff --git a/PCs/Universal/ClassCards/BombLauncher/tower_bomb_launcher.tscn b/PCs/Universal/ClassCards/BombLauncher/tower_bomb_launcher.tscn index f8ce091..37f24fd 100644 --- a/PCs/Universal/ClassCards/BombLauncher/tower_bomb_launcher.tscn +++ b/PCs/Universal/ClassCards/BombLauncher/tower_bomb_launcher.tscn @@ -1,39 +1,11 @@ -[gd_scene load_steps=5 format=3 uid="uid://cwc8y1nv53btu"] +[gd_scene load_steps=5 format=3 uid="uid://d2cch7qrwocg8"] -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/BombLauncher/bombtower.gd" id="1_u2hyk"] -[ext_resource type="PackedScene" uid="uid://d147iwg2wcqc5" path="res://PCs/Universal/ClassCards/BombLauncher/bomb.tscn" id="2_n307r"] -[ext_resource type="Resource" uid="uid://crmsk6lvp5i4e" path="res://Resources/TurretStats/bomblauncher.tres" id="3_xv5rx"] +[ext_resource type="PackedScene" uid="uid://t0b32qb8eub2" path="res://Scenes/Towers/projectile_tower.tscn" id="1_r8hbo"] +[ext_resource type="Script" path="res://PCs/Universal/ClassCards/BombLauncher/tower_bomb_launcher.gd" id="2_vlaa6"] +[ext_resource type="PackedScene" uid="uid://c8oq5unisjqne" path="res://PCs/Universal/ClassCards/BombLauncher/bomb_projectile.tscn" id="3_562if"] +[ext_resource type="Resource" uid="uid://8eaecilvan23" path="res://PCs/Universal/ClassCards/BombLauncher/tower_stats.tres" id="4_xgwj1"] -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_nr2od"] -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("model", "range_sphere", "minimap_range_sphere")] -script = ExtResource("1_u2hyk") -bomb_scene = ExtResource("2_n307r") -stats = ExtResource("3_xv5rx") -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, 1.13842, 0) - -[node name="CSGBox3D" type="CSGBox3D" parent="Model"] - -[node name="CSGBox3D2" type="CSGBox3D" parent="Model"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.65) -size = Vector3(0.596453, 0.632841, 0.539216) - -[node name="CSGSphere3D" type="CSGSphere3D" parent="Model"] -visible = false -radius = 7.5 -material = SubResource("StandardMaterial3D_nr2od") - -[node name="CSGSphere3D2" type="CSGSphere3D" parent="Model"] -visible = false -layers = 4 -radius = 7.5 -material = SubResource("StandardMaterial3D_nr2od") +[node name="BombLauncherTower" instance=ExtResource("1_r8hbo")] +script = ExtResource("2_vlaa6") +projectile_scene = ExtResource("3_562if") +stats = ExtResource("4_xgwj1") diff --git a/PCs/Universal/ClassCards/BombLauncher/tower_stats.tres b/PCs/Universal/ClassCards/BombLauncher/tower_stats.tres new file mode 100644 index 0000000..eff28b8 --- /dev/null +++ b/PCs/Universal/ClassCards/BombLauncher/tower_stats.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="CardText" load_steps=6 format=3 uid="uid://8eaecilvan23"] + +[ext_resource type="Script" path="res://Scripts/Resources/stat_attribute.gd" id="1_gjldi"] +[ext_resource type="Script" path="res://Scripts/Resources/card_text.gd" id="2_jt2vs"] + +[sub_resource type="Resource" id="Resource_yb48y"] +script = ExtResource("1_gjldi") +key = "Fire Delay" +value = 4.0 + +[sub_resource type="Resource" id="Resource_ewwvw"] +script = ExtResource("1_gjldi") +key = "Damage" +value = 10.0 + +[sub_resource type="Resource" id="Resource_qu5dv"] +script = ExtResource("1_gjldi") +key = "Range" +value = 8.0 + +[resource] +script = ExtResource("2_jt2vs") +target_type = 1 +attributes = Array[ExtResource("1_gjldi")]([SubResource("Resource_yb48y"), SubResource("Resource_ewwvw"), SubResource("Resource_qu5dv")]) +text = "Launch a bomb that deals /Damage\\ damage every /Fire Delay\\ seconds" diff --git a/PCs/Universal/ClassCards/BombLauncher/weapon_bomb_launcher.gd b/PCs/Universal/ClassCards/BombLauncher/weapon_bomb_launcher.gd new file mode 100644 index 0000000..f740f47 --- /dev/null +++ b/PCs/Universal/ClassCards/BombLauncher/weapon_bomb_launcher.gd @@ -0,0 +1,8 @@ +extends ProjectileWeapon +class_name BombLauncherWeapon + + +func _ready() -> void: + super._ready() + var launch_range = stats.get_attribute("Range") + force = sqrt((launch_range * ProjectSettings.get_setting("physics/3d/default_gravity")) / sin(2 * 45)) diff --git a/PCs/Universal/ClassCards/BombLauncher/weapon_bomb_launcher.tscn b/PCs/Universal/ClassCards/BombLauncher/weapon_bomb_launcher.tscn index c709062..b56acf5 100644 --- a/PCs/Universal/ClassCards/BombLauncher/weapon_bomb_launcher.tscn +++ b/PCs/Universal/ClassCards/BombLauncher/weapon_bomb_launcher.tscn @@ -1,59 +1,11 @@ -[gd_scene load_steps=8 format=3 uid="uid://6ckryuql3bh8"] +[gd_scene load_steps=5 format=3 uid="uid://c3fqlkytyc62u"] -[ext_resource type="Texture2D" uid="uid://bwufgga1pjyt" path="res://Assets/TextureAtlases/g_grenade_launcher.tres" id="1_n7mif"] -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/BombLauncher/bombweapon.gd" id="2_4iyo6"] -[ext_resource type="PackedScene" uid="uid://d147iwg2wcqc5" path="res://PCs/Universal/ClassCards/BombLauncher/bomb.tscn" id="3_506dv"] -[ext_resource type="Resource" uid="uid://kbaiy5u6imtu" path="res://Resources/WeaponStats/bomblauncher.tres" id="4_45cu2"] +[ext_resource type="PackedScene" uid="uid://bqdllitxbbpyp" path="res://Scenes/Weapons/projectile_weapon.tscn" id="1_gbycb"] +[ext_resource type="Script" path="res://PCs/Universal/ClassCards/BombLauncher/weapon_bomb_launcher.gd" id="2_g5ihb"] +[ext_resource type="Resource" uid="uid://co6eorobj1xuu" path="res://PCs/Universal/ClassCards/BombLauncher/weapon_stats.tres" id="3_73ol1"] +[ext_resource type="PackedScene" uid="uid://c8oq5unisjqne" path="res://PCs/Universal/ClassCards/BombLauncher/bomb_projectile.tscn" id="3_jxt6m"] -[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") -} - -[node name="Weapon" type="Sprite3D"] -layers = 2 -billboard = 1 -texture_filter = 0 -texture = ExtResource("1_n7mif") -script = ExtResource("2_4iyo6") -bomb_scene = ExtResource("3_506dv") -stats = ExtResource("4_45cu2") - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -libraries = { -"": SubResource("AnimationLibrary_ntl6p") -} - -[node name="RayCast3D" type="RayCast3D" parent="."] +[node name="BombLauncherWeapon" instance=ExtResource("1_gbycb")] +script = ExtResource("2_g5ihb") +projectile_scene = ExtResource("3_jxt6m") +stats = ExtResource("3_73ol1") diff --git a/PCs/Universal/ClassCards/BombLauncher/weapon_stats.tres b/PCs/Universal/ClassCards/BombLauncher/weapon_stats.tres new file mode 100644 index 0000000..80d8031 --- /dev/null +++ b/PCs/Universal/ClassCards/BombLauncher/weapon_stats.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="CardText" load_steps=6 format=3 uid="uid://co6eorobj1xuu"] + +[ext_resource type="Script" path="res://Scripts/Resources/card_text.gd" id="1_8i32s"] +[ext_resource type="Script" path="res://Scripts/Resources/stat_attribute.gd" id="1_kj8v0"] + +[sub_resource type="Resource" id="Resource_yb48y"] +script = ExtResource("1_kj8v0") +key = "Fire Delay" +value = 2.0 + +[sub_resource type="Resource" id="Resource_ewwvw"] +script = ExtResource("1_kj8v0") +key = "Damage" +value = 10.0 + +[sub_resource type="Resource" id="Resource_qu5dv"] +script = ExtResource("1_kj8v0") +key = "Range" +value = 10.0 + +[resource] +script = ExtResource("1_8i32s") +target_type = 0 +attributes = Array[ExtResource("1_kj8v0")]([SubResource("Resource_yb48y"), SubResource("Resource_ewwvw"), SubResource("Resource_qu5dv")]) +text = "Launch a bomb that deals /Damage\\ damage every /Fire Delay\\ seconds" diff --git a/PCs/Universal/ClassCards/DamageEnhancer/card_damage_enhancer.tres b/PCs/Universal/ClassCards/DamageEnhancer/card_damage_enhancer.tres index e39160c..114da6a 100644 --- a/PCs/Universal/ClassCards/DamageEnhancer/card_damage_enhancer.tres +++ b/PCs/Universal/ClassCards/DamageEnhancer/card_damage_enhancer.tres @@ -1,7 +1,7 @@ [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://Assets/TextureAtlases/g_assault.tres" id="2_irvam"] +[ext_resource type="Texture2D" uid="uid://ca4lwwd3e0y73" path="res://PCs/Universal/ClassCards/Assault/g_assault.tres" id="2_irvam"] [resource] script = ExtResource("1_hj6hq") diff --git a/PCs/Universal/ClassCards/Fireball/card_fireball.tres b/PCs/Universal/ClassCards/Fireball/card_fireball.tres index ebd2644..1433ca3 100644 --- a/PCs/Universal/ClassCards/Fireball/card_fireball.tres +++ b/PCs/Universal/ClassCards/Fireball/card_fireball.tres @@ -1,19 +1,19 @@ -[gd_resource type="Resource" script_class="Card" load_steps=7 format=3 uid="uid://b1gd7d12pr52k"] +[gd_resource type="Resource" script_class="Card" load_steps=6 format=3 uid="uid://bibx2my7igspq"] -[ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_opk1n"] -[ext_resource type="Texture2D" uid="uid://ca4lwwd3e0y73" path="res://Assets/TextureAtlases/g_assault.tres" id="2_51tvo"] -[ext_resource type="Resource" uid="uid://b8a635kajtq6" path="res://Resources/TurretStats/fireball.tres" id="3_8w2yo"] -[ext_resource type="PackedScene" uid="uid://dr2bmfj8fquxr" path="res://PCs/Universal/ClassCards/Fireball/tower_fireball.tscn" id="4_cxojl"] -[ext_resource type="PackedScene" uid="uid://cxlr31wydvroj" path="res://PCs/Universal/ClassCards/Fireball/weapon_fireball.tscn" id="5_47hbf"] -[ext_resource type="Resource" uid="uid://c473xvhm2g6m0" path="res://Resources/WeaponStats/fireball.tres" id="6_05wvy"] +[ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_qktm8"] +[ext_resource type="Texture2D" uid="uid://mwgpnnm3g3re" path="res://PCs/Universal/ClassCards/Fireball/fireball.png" id="2_lfltq"] +[ext_resource type="PackedScene" uid="uid://dnwjfb4fexr0o" path="res://PCs/Universal/ClassCards/Fireball/weapon_fireball.tscn" id="3_4c0mu"] +[ext_resource type="Resource" uid="uid://dhwhwicgpw7yh" path="res://PCs/Universal/ClassCards/Fireball/weapon_stats.tres" id="4_folo6"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_wvh1s"] +atlas = ExtResource("2_lfltq") +region = Rect2(0, 0, 64, 64) [resource] -script = ExtResource("1_opk1n") +script = ExtResource("1_qktm8") title = "Fireball" rarity = 3 faction = 0 -sprite = ExtResource("2_51tvo") -turret = ExtResource("4_cxojl") -weapon = ExtResource("5_47hbf") -weapon_stats = ExtResource("6_05wvy") -tower_stats = ExtResource("3_8w2yo") +sprite = SubResource("AtlasTexture_wvh1s") +weapon_scene = ExtResource("3_4c0mu") +weapon_stats = ExtResource("4_folo6") diff --git a/PCs/Universal/ClassCards/Fireball/fireball.gd b/PCs/Universal/ClassCards/Fireball/fireball.gd deleted file mode 100644 index 60f5c2e..0000000 --- a/PCs/Universal/ClassCards/Fireball/fireball.gd +++ /dev/null @@ -1,32 +0,0 @@ -extends RigidBody3D -class_name Fireball - -@export var explosion_range := 6.0 -var acceleration := 15.0 -var direction -var status_stats : StatusStats -var lifetime := 15.0 -var time_alive := 0.0 - - -func _process(delta: float) -> void: - time_alive += delta - if time_alive >= lifetime: - explode() - - -func _physics_process(_delta: float) -> void: - apply_central_force(direction * acceleration) - - -func _on_body_entered(_body: Node) -> void: - explode() - - -func explode(): - for enemy in get_tree().get_nodes_in_group("Enemies"): - if global_position.distance_to(enemy.global_position) <= explosion_range: - var status = StatusOnFire.new() - status.stats = status_stats - enemy.status_manager.add_effect(status) - queue_free() diff --git a/PCs/Universal/ClassCards/Fireball/fireball.png b/PCs/Universal/ClassCards/Fireball/fireball.png new file mode 100644 index 0000000..a9a2fcb Binary files /dev/null and b/PCs/Universal/ClassCards/Fireball/fireball.png differ diff --git a/PCs/Universal/ClassCards/Fireball/fireball.png.import b/PCs/Universal/ClassCards/Fireball/fireball.png.import new file mode 100644 index 0000000..864ce71 --- /dev/null +++ b/PCs/Universal/ClassCards/Fireball/fireball.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://mwgpnnm3g3re" +path="res://.godot/imported/fireball.png-a75470cb6074cbc91efe353b08c6eb50.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://PCs/Universal/ClassCards/Fireball/fireball.png" +dest_files=["res://.godot/imported/fireball.png-a75470cb6074cbc91efe353b08c6eb50.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/PCs/Universal/ClassCards/Fireball/fireball.tscn b/PCs/Universal/ClassCards/Fireball/fireball.tscn deleted file mode 100644 index 547ce5b..0000000 --- a/PCs/Universal/ClassCards/Fireball/fireball.tscn +++ /dev/null @@ -1,30 +0,0 @@ -[gd_scene load_steps=5 format=3 uid="uid://dyglfv8lh2rbg"] - -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Fireball/fireball.gd" id="1_a3evl"] -[ext_resource type="Texture2D" uid="uid://b54d5dc4jmlau" path="res://Assets/Textures/bomb.png" id="2_h8lqn"] - -[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_whkhx"] -bounce = 0.6 - -[sub_resource type="SphereShape3D" id="SphereShape3D_mi0in"] -radius = 0.2 - -[node name="RigidBody3D" type="RigidBody3D"] -collision_layer = 0 -collision_mask = 5 -physics_material_override = SubResource("PhysicsMaterial_whkhx") -gravity_scale = 0.0 -max_contacts_reported = 1 -contact_monitor = true -script = ExtResource("1_a3evl") - -[node name="Node3D" type="Sprite3D" parent="."] -transform = Transform3D(1.4, 0, 0, 0, 1.4, 0, 0, 0, 1.4, 0, 0, 0) -billboard = 1 -texture_filter = 0 -texture = ExtResource("2_h8lqn") - -[node name="CollisionShape3D" type="CollisionShape3D" parent="."] -shape = SubResource("SphereShape3D_mi0in") - -[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/PCs/Universal/ClassCards/Fireball/fireball_projectile.gd b/PCs/Universal/ClassCards/Fireball/fireball_projectile.gd new file mode 100644 index 0000000..987f3a7 --- /dev/null +++ b/PCs/Universal/ClassCards/Fireball/fireball_projectile.gd @@ -0,0 +1,8 @@ +extends StatusApplyingProjectile +class_name FireballProjectile + + +func build_status_object() -> StatusEffect: + var status = StatusDoT.new() + status.stats = status_stats + return status diff --git a/PCs/Universal/ClassCards/Fireball/fireball_projectile.png b/PCs/Universal/ClassCards/Fireball/fireball_projectile.png new file mode 100644 index 0000000..a3540a8 Binary files /dev/null and b/PCs/Universal/ClassCards/Fireball/fireball_projectile.png differ diff --git a/PCs/Universal/ClassCards/Fireball/fireball_projectile.png.import b/PCs/Universal/ClassCards/Fireball/fireball_projectile.png.import new file mode 100644 index 0000000..b4602e8 --- /dev/null +++ b/PCs/Universal/ClassCards/Fireball/fireball_projectile.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://baarbcx0nxi7w" +path="res://.godot/imported/fireball_projectile.png-bb6edb8e296f3f750c1296e8d3dde180.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://PCs/Universal/ClassCards/Fireball/fireball_projectile.png" +dest_files=["res://.godot/imported/fireball_projectile.png-bb6edb8e296f3f750c1296e8d3dde180.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/PCs/Universal/ClassCards/Fireball/fireball_projectile.tscn b/PCs/Universal/ClassCards/Fireball/fireball_projectile.tscn new file mode 100644 index 0000000..b31680d --- /dev/null +++ b/PCs/Universal/ClassCards/Fireball/fireball_projectile.tscn @@ -0,0 +1,13 @@ +[gd_scene load_steps=5 format=3 uid="uid://ddpixntjsbpqp"] + +[ext_resource type="PackedScene" uid="uid://beq6rn0babncg" path="res://Scenes/Projectiles/status_applying_projectile.tscn" id="1_a8cjq"] +[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Fireball/fireball_projectile.gd" id="2_rin44"] +[ext_resource type="Resource" uid="uid://dbanx8taicddm" path="res://Resources/StatusEffects/on_fire.tres" id="3_vb4ff"] +[ext_resource type="Texture2D" uid="uid://baarbcx0nxi7w" path="res://PCs/Universal/ClassCards/Fireball/fireball_projectile.png" id="4_uua74"] + +[node name="Fireball" instance=ExtResource("1_a8cjq")] +script = ExtResource("2_rin44") +status_stats = ExtResource("3_vb4ff") + +[node name="Sprite3D" parent="." index="1"] +texture = ExtResource("4_uua74") diff --git a/PCs/Universal/ClassCards/Fireball/fireballweapon.gd b/PCs/Universal/ClassCards/Fireball/fireballweapon.gd deleted file mode 100644 index d0a6817..0000000 --- a/PCs/Universal/ClassCards/Fireball/fireballweapon.gd +++ /dev/null @@ -1,16 +0,0 @@ -extends Weapon -class_name FireballWeapon - -@export var fireball_scene : PackedScene -@export var status_stats : StatusStats - - -func shoot(): - if other_cooldown <= 0 and stats != null: - other_cooldown = cooldown - $AnimationPlayer.play("shoot") - var fireball = fireball_scene.instantiate() as Fireball - fireball.position = $RayCast3D.global_position - fireball.status_stats = status_stats - get_tree().root.add_child(fireball) - fireball.direction = -global_transform.basis.z diff --git a/PCs/Universal/ClassCards/Fireball/weapon_fireball.gd b/PCs/Universal/ClassCards/Fireball/weapon_fireball.gd new file mode 100644 index 0000000..994d670 --- /dev/null +++ b/PCs/Universal/ClassCards/Fireball/weapon_fireball.gd @@ -0,0 +1,2 @@ +extends ProjectileWeapon +class_name FireballWeapon diff --git a/PCs/Universal/ClassCards/Fireball/weapon_fireball.tscn b/PCs/Universal/ClassCards/Fireball/weapon_fireball.tscn index 8e72368..a02f6e0 100644 --- a/PCs/Universal/ClassCards/Fireball/weapon_fireball.tscn +++ b/PCs/Universal/ClassCards/Fireball/weapon_fireball.tscn @@ -1,79 +1,19 @@ -[gd_scene load_steps=10 format=3 uid="uid://cxlr31wydvroj"] +[gd_scene load_steps=7 format=3 uid="uid://dnwjfb4fexr0o"] -[ext_resource type="Texture2D" uid="uid://clr6kfyci5jqb" path="res://Assets/TextureAtlases/g_rocket_launcher.tres" id="1_jmfbt"] -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Fireball/fireballweapon.gd" id="2_rmmdm"] -[ext_resource type="PackedScene" uid="uid://dyglfv8lh2rbg" path="res://PCs/Universal/ClassCards/Fireball/fireball.tscn" id="3_xtqoc"] -[ext_resource type="Resource" uid="uid://dbanx8taicddm" path="res://Resources/StatusEffects/on_fire.tres" id="4_a0kl2"] -[ext_resource type="Resource" uid="uid://c473xvhm2g6m0" path="res://Resources/WeaponStats/fireball.tres" id="5_n36an"] -[ext_resource type="Texture2D" uid="uid://bgeu8dnqaxq7v" path="res://Assets/TextureAtlases/target_list.tres" id="6_bpghv"] +[ext_resource type="PackedScene" uid="uid://bqdllitxbbpyp" path="res://Scenes/Weapons/projectile_weapon.tscn" id="1_7k6fb"] +[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Fireball/weapon_fireball.gd" id="2_nprco"] +[ext_resource type="PackedScene" uid="uid://ddpixntjsbpqp" path="res://PCs/Universal/ClassCards/Fireball/fireball_projectile.tscn" id="3_2j1mm"] +[ext_resource type="Resource" uid="uid://dhwhwicgpw7yh" path="res://PCs/Universal/ClassCards/Fireball/weapon_stats.tres" id="4_rqdnu"] +[ext_resource type="Texture2D" uid="uid://mwgpnnm3g3re" path="res://PCs/Universal/ClassCards/Fireball/fireball.png" id="5_r42ic"] -[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_hfmm6"] +atlas = ExtResource("5_r42ic") +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="FireballWeapon" instance=ExtResource("1_7k6fb")] +script = ExtResource("2_nprco") +projectile_scene = ExtResource("3_2j1mm") +stats = ExtResource("4_rqdnu") -[sub_resource type="AnimationLibrary" id="AnimationLibrary_ntl6p"] -_data = { -"RESET": SubResource("Animation_n8b32"), -"shoot": SubResource("Animation_g0h8q") -} - -[node name="Weapon" type="Sprite3D"] -layers = 2 -billboard = 1 -texture_filter = 0 -texture = ExtResource("1_jmfbt") -script = ExtResource("2_rmmdm") -fireball_scene = ExtResource("3_xtqoc") -status_stats = ExtResource("4_a0kl2") -stats = ExtResource("5_n36an") - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -libraries = { -"": SubResource("AnimationLibrary_ntl6p") -} - -[node name="RayCast3D" type="RayCast3D" parent="."] -collision_mask = 4 - -[node name="TextureRect" type="TextureRect" parent="."] -visible = false -texture_filter = 1 -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = -20.0 -offset_top = -20.0 -offset_right = 20.0 -offset_bottom = 20.0 -grow_horizontal = 2 -grow_vertical = 2 -texture = ExtResource("6_bpghv") +[node name="Sprite3D" parent="." index="0"] +texture = SubResource("AtlasTexture_hfmm6") diff --git a/PCs/Universal/ClassCards/Fireball/weapon_stats.tres b/PCs/Universal/ClassCards/Fireball/weapon_stats.tres new file mode 100644 index 0000000..f30753a --- /dev/null +++ b/PCs/Universal/ClassCards/Fireball/weapon_stats.tres @@ -0,0 +1,8 @@ +[gd_resource type="Resource" script_class="CardText" load_steps=2 format=3 uid="uid://dhwhwicgpw7yh"] + +[ext_resource type="Script" path="res://Scripts/Resources/card_text.gd" id="1_hmbwy"] + +[resource] +script = ExtResource("1_hmbwy") +attributes = Array[Resource("res://Scripts/Resources/stat_attribute.gd")]([]) +text = "" diff --git a/PCs/Universal/ClassCards/GammaLaser/card_gamma_laser.tres b/PCs/Universal/ClassCards/GammaLaser/card_gamma_laser.tres index 2ef59d7..d9b3277 100644 --- a/PCs/Universal/ClassCards/GammaLaser/card_gamma_laser.tres +++ b/PCs/Universal/ClassCards/GammaLaser/card_gamma_laser.tres @@ -1,7 +1,7 @@ [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://Assets/TextureAtlases/g_assault.tres" id="2_a7b2p"] +[ext_resource type="Texture2D" uid="uid://ca4lwwd3e0y73" path="res://PCs/Universal/ClassCards/Assault/g_assault.tres" id="2_a7b2p"] [resource] script = ExtResource("1_goeex") diff --git a/PCs/Universal/ClassCards/Gatling/card_gatling.tres b/PCs/Universal/ClassCards/Gatling/card_gatling.tres index 4ac57e0..387fbb7 100644 --- a/PCs/Universal/ClassCards/Gatling/card_gatling.tres +++ b/PCs/Universal/ClassCards/Gatling/card_gatling.tres @@ -1,19 +1,23 @@ -[gd_resource type="Resource" script_class="Card" load_steps=7 format=3 uid="uid://q23ludhji5p4"] +[gd_resource type="Resource" script_class="Card" load_steps=8 format=3 uid="uid://cvto66tp7rrst"] [ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_5html"] -[ext_resource type="Texture2D" uid="uid://d1am28tgvwaa0" path="res://Assets/TextureAtlases/g_accelerator.tres" id="2_a3hso"] -[ext_resource type="Resource" uid="uid://cc20tomywj0jm" path="res://Resources/TurretStats/accelerator.tres" id="3_yj53i"] -[ext_resource type="PackedScene" uid="uid://rcqf3vangjlp" path="res://PCs/Universal/ClassCards/Gatling/weapon_gatling.tscn" id="4_4xp1m"] -[ext_resource type="PackedScene" uid="uid://bwcdgglljbmot" path="res://PCs/Universal/ClassCards/Gatling/tower_gatling.tscn" id="4_maix8"] -[ext_resource type="Resource" uid="uid://ouwge5etb4me" path="res://Resources/WeaponStats/accelerator.tres" id="5_hguan"] +[ext_resource type="Texture2D" uid="uid://cx5cwn11fuugq" path="res://PCs/Universal/ClassCards/Gatling/gatling.png" id="2_rof1s"] +[ext_resource type="Resource" uid="uid://nxl5wabgl36t" path="res://PCs/Universal/ClassCards/Gatling/tower_stats.tres" id="3_4hykq"] +[ext_resource type="PackedScene" uid="uid://dkxi1ssoa44jn" path="res://PCs/Universal/ClassCards/Gatling/weapon_gatling.tscn" id="3_wkjyf"] +[ext_resource type="Resource" uid="uid://cj2x1jvo8l4ot" path="res://PCs/Universal/ClassCards/Gatling/weapon_stats.tres" id="4_76fd1"] +[ext_resource type="PackedScene" uid="uid://bjuc3x7u3f271" path="res://PCs/Universal/ClassCards/Gatling/tower_gatling.tscn" id="4_thk7u"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_rwa4l"] +atlas = ExtResource("2_rof1s") +region = Rect2(0, 0, 64, 64) [resource] script = ExtResource("1_5html") title = "Gatling" rarity = 0 faction = 0 -sprite = ExtResource("2_a3hso") -turret = ExtResource("4_maix8") -weapon = ExtResource("4_4xp1m") -weapon_stats = ExtResource("5_hguan") -tower_stats = ExtResource("3_yj53i") +sprite = SubResource("AtlasTexture_rwa4l") +turret_scene = ExtResource("4_thk7u") +weapon_scene = ExtResource("3_wkjyf") +weapon_stats = ExtResource("4_76fd1") +tower_stats = ExtResource("3_4hykq") diff --git a/Assets/Textures/accelerator.png b/PCs/Universal/ClassCards/Gatling/gatling.png similarity index 100% rename from Assets/Textures/accelerator.png rename to PCs/Universal/ClassCards/Gatling/gatling.png diff --git a/Assets/Textures/accelerator.png.import b/PCs/Universal/ClassCards/Gatling/gatling.png.import similarity index 70% rename from Assets/Textures/accelerator.png.import rename to PCs/Universal/ClassCards/Gatling/gatling.png.import index a4f1065..2256096 100644 --- a/Assets/Textures/accelerator.png.import +++ b/PCs/Universal/ClassCards/Gatling/gatling.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://cx5cwn11fuugq" -path="res://.godot/imported/accelerator.png-1a0f15190d75444ec6328a57ff1e8fbe.ctex" +path="res://.godot/imported/gatling.png-884c4cce4654c4213d5c047580076c33.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://Assets/Textures/accelerator.png" -dest_files=["res://.godot/imported/accelerator.png-1a0f15190d75444ec6328a57ff1e8fbe.ctex"] +source_file="res://PCs/Universal/ClassCards/Gatling/gatling.png" +dest_files=["res://.godot/imported/gatling.png-884c4cce4654c4213d5c047580076c33.ctex"] [params] diff --git a/PCs/Universal/ClassCards/Gatling/speedytower.gd b/PCs/Universal/ClassCards/Gatling/speedytower.gd deleted file mode 100644 index cf9befc..0000000 --- a/PCs/Universal/ClassCards/Gatling/speedytower.gd +++ /dev/null @@ -1,32 +0,0 @@ -extends Tower -class_name SpeedyTower - -var third_cooldown := 0.0 - -var time_since_firing_started := 0.0 -var time_to_reach_max_speed := 3.0 -var max_speed_multiplier := 2.0 -var destination_multiplier := 0.0 - -func _ready() -> void: - cooldown = 1.0 / stats.fire_rate - destination_multiplier = 1.0 / max_speed_multiplier - - -func _process(delta: float) -> void: - other_cooldown -= delta - if !targeted_enemy: - acquire_target() - else: - if model.global_position.distance_to(targeted_enemy.global_position) > stats.fire_range: - targeted_enemy = null - time_since_firing_started = 0.0 - third_cooldown = cooldown - if targeted_enemy: - time_since_firing_started += delta - var progress = clamp(time_since_firing_started / time_to_reach_max_speed, 0, 1.0) - third_cooldown = cooldown * (1.0 - (destination_multiplier * progress)) - aim() - if other_cooldown <= 0: - shoot() - other_cooldown = third_cooldown diff --git a/PCs/Universal/ClassCards/Gatling/speedyweapon.gd b/PCs/Universal/ClassCards/Gatling/speedyweapon.gd deleted file mode 100644 index e12b15e..0000000 --- a/PCs/Universal/ClassCards/Gatling/speedyweapon.gd +++ /dev/null @@ -1,60 +0,0 @@ -extends Weapon -class_name SpeedyWeapon - -var third_cooldown := 0.0 - -var time_since_firing_started := 0.0 -var time_to_reach_max_speed := 3.0 -var max_speed_multiplier := 2.0 -var destination_multiplier := 0.0 - - -func _ready() -> void: - cooldown = 1.0 / stats.fire_rate - destination_multiplier = 1.0 / max_speed_multiplier - $RayCast3D.target_position = Vector3(0, 0, -stats.fire_range) - - -func set_raycast_origin(node): - $RayCast3D.global_position = node.global_position - - -func _process(delta: float) -> void: - if stats != null: - other_cooldown -= delta - if trigger_held: - time_since_firing_started += delta - var progress = clamp(time_since_firing_started / time_to_reach_max_speed, 0, 1.0) - third_cooldown = cooldown * (1.0 - (destination_multiplier * progress)) - - -func _physics_process(_delta: float) -> void: - if trigger_held: - shoot() - - -func hold_trigger(): - trigger_held = true - - -func release_trigger(): - trigger_held = false - time_since_firing_started = 0.0 - third_cooldown = cooldown - - -func shoot(): - if other_cooldown <= 0 and stats != null: - other_cooldown = third_cooldown - $AnimationPlayer.play("shoot") - if $RayCast3D.is_colliding(): - var target = $RayCast3D.get_collider() - if target != null: - var target_hitbox = target.shape_owner_get_owner($RayCast3D.get_collider_shape()) - if target_hitbox is Hitbox: - target_hitbox.damage(stats.damage) - -@rpc -func networked_shoot(): - $AnimationPlayer.play("shoot") - diff --git a/PCs/Universal/ClassCards/Gatling/tower_gatling.gd b/PCs/Universal/ClassCards/Gatling/tower_gatling.gd new file mode 100644 index 0000000..93eadfc --- /dev/null +++ b/PCs/Universal/ClassCards/Gatling/tower_gatling.gd @@ -0,0 +1,38 @@ +extends HitscanTower +class_name GatlingTower + +var time_since_firing_started := 0.0 +var time_to_reach_max_speed := 0.0 +var max_speed_multiplier := 0.0 +var current_time_between_shots := 0.0 +var final_time_between_shots := 0.0 + + +func _ready() -> void: + super._ready() + time_to_reach_max_speed = stats.get_attribute("Speed Time") + max_speed_multiplier = stats.get_attribute("Speed Multiplier") + final_time_between_shots = time_between_shots / max_speed_multiplier + + +func _process(delta: float) -> void: + if time_since_firing < current_time_between_shots: + time_since_firing += delta + + +func _physics_process(delta: float) -> void: + if !targeted_enemy: + acquire_target() + else: + if !targeted_enemy.alive or global_position.distance_to(targeted_enemy.global_position) > target_range: + targeted_enemy = null + time_since_firing_started = 0.0 + current_time_between_shots = time_between_shots + if targeted_enemy: + aim() + time_since_firing_started += delta + var progress = clamp(time_since_firing_started / time_to_reach_max_speed, 0, 1.0) + current_time_between_shots = lerpf(time_between_shots, final_time_between_shots, progress) + if time_since_firing >= current_time_between_shots: + time_since_firing -= current_time_between_shots + shoot() diff --git a/PCs/Universal/ClassCards/Gatling/tower_gatling.tscn b/PCs/Universal/ClassCards/Gatling/tower_gatling.tscn index 1d5ef13..12634d6 100644 --- a/PCs/Universal/ClassCards/Gatling/tower_gatling.tscn +++ b/PCs/Universal/ClassCards/Gatling/tower_gatling.tscn @@ -1,57 +1,9 @@ -[gd_scene load_steps=4 format=3 uid="uid://bwcdgglljbmot"] +[gd_scene load_steps=4 format=3 uid="uid://bjuc3x7u3f271"] -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Gatling/speedytower.gd" id="1_26he3"] -[ext_resource type="Resource" uid="uid://cc20tomywj0jm" path="res://Resources/TurretStats/accelerator.tres" id="2_puwlv"] +[ext_resource type="PackedScene" uid="uid://dumiyjlnea4gq" path="res://Scenes/Towers/hitscan_tower.tscn" id="1_su74p"] +[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Gatling/tower_gatling.gd" id="2_ipjp1"] +[ext_resource type="Resource" uid="uid://nxl5wabgl36t" path="res://PCs/Universal/ClassCards/Gatling/tower_stats.tres" id="3_oicqw"] -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_73y0x"] -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("model", "range_sphere", "minimap_range_sphere")] -script = ExtResource("1_26he3") -stats = ExtResource("2_puwlv") -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"] - -[node name="CSGBox3D2" type="CSGBox3D" parent="Model"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00131059, 0.27342, -0.880753) -size = Vector3(0.177, 0.148, 0.929) - -[node name="CSGBox3D3" type="CSGBox3D" parent="Model"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.226066, 0.0918715, -0.880753) -size = Vector3(0.177, 0.148, 0.929) - -[node name="CSGBox3D4" type="CSGBox3D" parent="Model"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.227674, -0.174673, -0.880753) -size = Vector3(0.177, 0.148, 0.929) - -[node name="CSGBox3D5" type="CSGBox3D" parent="Model"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00246562, -0.314903, -0.880753) -size = Vector3(0.177, 0.148, 0.929) - -[node name="CSGBox3D6" type="CSGBox3D" parent="Model"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.259054, -0.125834, -0.880753) -size = Vector3(0.177, 0.148, 0.929) - -[node name="CSGBox3D7" type="CSGBox3D" parent="Model"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.26701, 0.102116, -0.880753) -size = Vector3(0.177, 0.148, 0.929) - -[node name="CSGSphere3D" type="CSGSphere3D" parent="Model"] -visible = false -radius = 7.5 -material = SubResource("StandardMaterial3D_73y0x") - -[node name="CSGSphere3D2" type="CSGSphere3D" parent="Model"] -visible = false -layers = 4 -radius = 7.5 -material = SubResource("StandardMaterial3D_73y0x") +[node name="GatlingTower" instance=ExtResource("1_su74p")] +script = ExtResource("2_ipjp1") +stats = ExtResource("3_oicqw") diff --git a/PCs/Universal/ClassCards/Gatling/tower_stats.tres b/PCs/Universal/ClassCards/Gatling/tower_stats.tres new file mode 100644 index 0000000..abf2616 --- /dev/null +++ b/PCs/Universal/ClassCards/Gatling/tower_stats.tres @@ -0,0 +1,37 @@ +[gd_resource type="Resource" script_class="CardText" load_steps=8 format=3 uid="uid://nxl5wabgl36t"] + +[ext_resource type="Script" path="res://Scripts/Resources/card_text.gd" id="1_80xci"] +[ext_resource type="Script" path="res://Scripts/Resources/stat_attribute.gd" id="1_nu6vr"] + +[sub_resource type="Resource" id="Resource_oayfg"] +script = ExtResource("1_nu6vr") +key = "Fire Delay" +value = 1.0 + +[sub_resource type="Resource" id="Resource_fekle"] +script = ExtResource("1_nu6vr") +key = "Damage" +value = 1.0 + +[sub_resource type="Resource" id="Resource_ud8xi"] +script = ExtResource("1_nu6vr") +key = "Range" +value = 10.0 + +[sub_resource type="Resource" id="Resource_cvkxf"] +script = ExtResource("1_nu6vr") +key = "Speed Multiplier" +value = 2.0 + +[sub_resource type="Resource" id="Resource_pivwn"] +script = ExtResource("1_nu6vr") +key = "Speed Time" +value = 3.0 + +[resource] +script = ExtResource("1_80xci") +target_type = 1 +attributes = Array[ExtResource("1_nu6vr")]([SubResource("Resource_oayfg"), SubResource("Resource_fekle"), SubResource("Resource_ud8xi"), SubResource("Resource_cvkxf"), SubResource("Resource_pivwn")]) +text = "Fires a shot every [Fire Delay] seconds dealing [Damage] damage at a range of [Range]m + +While attacking the same target, gradually accelerates to [Speed Multiplier] times the fire rate over [Speed Time]" diff --git a/PCs/Universal/ClassCards/Gatling/weapon_gatling.gd b/PCs/Universal/ClassCards/Gatling/weapon_gatling.gd new file mode 100644 index 0000000..66f4d53 --- /dev/null +++ b/PCs/Universal/ClassCards/Gatling/weapon_gatling.gd @@ -0,0 +1,36 @@ +extends HitscanWeapon +class_name GatlingWeapon + +var time_since_firing_started := 0.0 +var time_to_reach_max_speed := 0.0 +var max_speed_multiplier := 0.0 +var current_time_between_shots := 0.0 +var final_time_between_shots := 0.0 + + +func _ready() -> void: + super._ready() + time_to_reach_max_speed = stats.get_attribute("Speed Time") + max_speed_multiplier = stats.get_attribute("Speed Multiplier") + final_time_between_shots = time_between_shots / max_speed_multiplier + + +func _process(delta: float) -> void: + super._process(delta) + if trigger_held: + time_since_firing_started += delta + var progress = clamp(time_since_firing_started / time_to_reach_max_speed, 0, 1.0) + current_time_between_shots = lerpf(time_between_shots, final_time_between_shots, progress) + + +func _physics_process(_delta: float) -> void: + if trigger_held and time_since_firing >= current_time_between_shots: + time_since_firing -= current_time_between_shots + shoot() + networked_shoot.rpc() + + +func release_trigger(): + super.release_trigger() + time_since_firing_started = 0.0 + current_time_between_shots = time_between_shots diff --git a/PCs/Universal/ClassCards/Gatling/weapon_gatling.tscn b/PCs/Universal/ClassCards/Gatling/weapon_gatling.tscn index e24488a..057d1d5 100644 --- a/PCs/Universal/ClassCards/Gatling/weapon_gatling.tscn +++ b/PCs/Universal/ClassCards/Gatling/weapon_gatling.tscn @@ -1,58 +1,15 @@ -[gd_scene load_steps=7 format=3 uid="uid://rcqf3vangjlp"] +[gd_scene load_steps=5 format=3 uid="uid://dkxi1ssoa44jn"] -[ext_resource type="Texture2D" uid="uid://d1am28tgvwaa0" path="res://Assets/TextureAtlases/g_accelerator.tres" id="1_n3tw0"] -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Gatling/speedyweapon.gd" id="2_fkecd"] -[ext_resource type="Resource" uid="uid://ouwge5etb4me" path="res://Resources/WeaponStats/accelerator.tres" id="3_nq6wu"] +[ext_resource type="PackedScene" uid="uid://difwo7wlyqr3h" path="res://Scenes/Weapons/hitscan_weapon.tscn" id="1_fwlu5"] +[ext_resource type="Resource" uid="uid://cj2x1jvo8l4ot" path="res://PCs/Universal/ClassCards/Gatling/weapon_stats.tres" id="2_fnyjd"] +[ext_resource type="Texture2D" uid="uid://cx5cwn11fuugq" path="res://PCs/Universal/ClassCards/Gatling/gatling.png" id="2_rv8ps"] -[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_0im1y"] +atlas = ExtResource("2_rv8ps") +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="HitscanWeapon" instance=ExtResource("1_fwlu5")] +stats = ExtResource("2_fnyjd") -[sub_resource type="AnimationLibrary" id="AnimationLibrary_ntl6p"] -_data = { -"RESET": SubResource("Animation_n8b32"), -"shoot": SubResource("Animation_g0h8q") -} - -[node name="Weapon" type="Sprite3D"] -layers = 2 -billboard = 1 -texture_filter = 0 -texture = ExtResource("1_n3tw0") -script = ExtResource("2_fkecd") -stats = ExtResource("3_nq6wu") - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -libraries = { -"": SubResource("AnimationLibrary_ntl6p") -} - -[node name="RayCast3D" type="RayCast3D" parent="."] -collision_mask = 4 +[node name="Sprite3D" parent="." index="0"] +texture = SubResource("AtlasTexture_0im1y") diff --git a/PCs/Universal/ClassCards/Gatling/weapon_stats.tres b/PCs/Universal/ClassCards/Gatling/weapon_stats.tres new file mode 100644 index 0000000..80badf7 --- /dev/null +++ b/PCs/Universal/ClassCards/Gatling/weapon_stats.tres @@ -0,0 +1,37 @@ +[gd_resource type="Resource" script_class="CardText" load_steps=8 format=3 uid="uid://cj2x1jvo8l4ot"] + +[ext_resource type="Script" path="res://Scripts/Resources/card_text.gd" id="1_630yu"] +[ext_resource type="Script" path="res://Scripts/Resources/stat_attribute.gd" id="1_vpmor"] + +[sub_resource type="Resource" id="Resource_fi7tc"] +script = ExtResource("1_vpmor") +key = "Fire Delay" +value = 0.4 + +[sub_resource type="Resource" id="Resource_r6h5d"] +script = ExtResource("1_vpmor") +key = "Damage" +value = 2.0 + +[sub_resource type="Resource" id="Resource_gwg1i"] +script = ExtResource("1_vpmor") +key = "Range" +value = 20.0 + +[sub_resource type="Resource" id="Resource_ogk1x"] +script = ExtResource("1_vpmor") +key = "Speed Multiplier" +value = 2.0 + +[sub_resource type="Resource" id="Resource_wdp3h"] +script = ExtResource("1_vpmor") +key = "Speed Time" +value = 3.0 + +[resource] +script = ExtResource("1_630yu") +target_type = 0 +attributes = Array[ExtResource("1_vpmor")]([SubResource("Resource_fi7tc"), SubResource("Resource_r6h5d"), SubResource("Resource_gwg1i"), SubResource("Resource_ogk1x"), SubResource("Resource_wdp3h")]) +text = "Fires a shot every [Fire Delay] seconds dealing [Damage] damage at a range of [Range]m + +While held, gradually accelerates to [Speed Multiplier] times the fire rate over [Speed Time]" diff --git a/PCs/Universal/ClassCards/GlueLauncher/card_glue_launcher.tres b/PCs/Universal/ClassCards/GlueLauncher/card_glue_launcher.tres index 3954ac6..ec60c45 100644 --- a/PCs/Universal/ClassCards/GlueLauncher/card_glue_launcher.tres +++ b/PCs/Universal/ClassCards/GlueLauncher/card_glue_launcher.tres @@ -1,19 +1,9 @@ -[gd_resource type="Resource" script_class="Card" load_steps=7 format=3 uid="uid://bhmbk26whdsys"] +[gd_resource type="Resource" script_class="Card" load_steps=2 format=3 uid="uid://fwsg5av1egp2"] -[ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_4m1rh"] -[ext_resource type="Texture2D" uid="uid://jmxhiwsiw1f5" path="res://Assets/TextureAtlases/g_glue_gun.tres" id="2_xsq3l"] -[ext_resource type="Resource" uid="uid://dhcukj44khkd7" path="res://Resources/TurretStats/glue.tres" id="3_tb5qj"] -[ext_resource type="PackedScene" uid="uid://d24q8j53oiyd4" path="res://PCs/Universal/ClassCards/GlueLauncher/weapon_glue_launcher.tscn" id="4_0jn1x"] -[ext_resource type="PackedScene" uid="uid://dja1b2ke8clo5" path="res://PCs/Universal/ClassCards/GlueLauncher/tower_glue_launcher.tscn" id="4_1nhoo"] -[ext_resource type="Resource" uid="uid://dnucn65m12dmq" path="res://Resources/WeaponStats/glue.tres" id="5_qk2lw"] +[ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_tdu8a"] [resource] -script = ExtResource("1_4m1rh") -title = "Glue Gun" -rarity = 1 +script = ExtResource("1_tdu8a") +title = "" +rarity = 0 faction = 0 -sprite = ExtResource("2_xsq3l") -turret = ExtResource("4_1nhoo") -weapon = ExtResource("4_0jn1x") -weapon_stats = ExtResource("5_qk2lw") -tower_stats = ExtResource("3_tb5qj") diff --git a/Assets/Textures/glue_gun.png b/PCs/Universal/ClassCards/GlueLauncher/glue_gun.png similarity index 100% rename from Assets/Textures/glue_gun.png rename to PCs/Universal/ClassCards/GlueLauncher/glue_gun.png diff --git a/Assets/Textures/glue_gun.png.import b/PCs/Universal/ClassCards/GlueLauncher/glue_gun.png.import similarity index 69% rename from Assets/Textures/glue_gun.png.import rename to PCs/Universal/ClassCards/GlueLauncher/glue_gun.png.import index d39fb6c..59e3306 100644 --- a/Assets/Textures/glue_gun.png.import +++ b/PCs/Universal/ClassCards/GlueLauncher/glue_gun.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://oblavj8vj30n" -path="res://.godot/imported/glue_gun.png-e9e16bf72630f36d6fabf28ef7667749.ctex" +path="res://.godot/imported/glue_gun.png-da3fc52d7c51b5aff27c153501f54c6c.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://Assets/Textures/glue_gun.png" -dest_files=["res://.godot/imported/glue_gun.png-e9e16bf72630f36d6fabf28ef7667749.ctex"] +source_file="res://PCs/Universal/ClassCards/GlueLauncher/glue_gun.png" +dest_files=["res://.godot/imported/glue_gun.png-da3fc52d7c51b5aff27c153501f54c6c.ctex"] [params] diff --git a/PCs/Universal/ClassCards/GlueLauncher/stickyweapon.gd b/PCs/Universal/ClassCards/GlueLauncher/stickyweapon.gd deleted file mode 100644 index b2c013a..0000000 --- a/PCs/Universal/ClassCards/GlueLauncher/stickyweapon.gd +++ /dev/null @@ -1,17 +0,0 @@ -extends Weapon -class_name StickyWeapon - -@export var status_stats : StatusStats - -func shoot(): - if other_cooldown <= 0 and stats != null: - other_cooldown = cooldown - $AnimationPlayer.play("shoot") - if $RayCast3D.is_colliding(): - var target = $RayCast3D.get_collider() - if target != null: - var target_hitbox = target.shape_owner_get_owner($RayCast3D.get_collider_shape()) - if target_hitbox is Hitbox: - var status = StatusSticky.new() - status.stats = status_stats - target.status_manager.add_effect(status) diff --git a/PCs/Universal/ClassCards/GlueLauncher/weapon_glue_launcher.gd b/PCs/Universal/ClassCards/GlueLauncher/weapon_glue_launcher.gd new file mode 100644 index 0000000..e66346b --- /dev/null +++ b/PCs/Universal/ClassCards/GlueLauncher/weapon_glue_launcher.gd @@ -0,0 +1,7 @@ +extends StatusApplyingWeapon + + +func build_status_object() -> StatusEffect: + var status = StatusSlow.new() + status.stats = status_stats + return status diff --git a/PCs/Universal/ClassCards/GlueLauncher/weapon_glue_launcher.tscn b/PCs/Universal/ClassCards/GlueLauncher/weapon_glue_launcher.tscn index 549ae83..fa4809a 100644 --- a/PCs/Universal/ClassCards/GlueLauncher/weapon_glue_launcher.tscn +++ b/PCs/Universal/ClassCards/GlueLauncher/weapon_glue_launcher.tscn @@ -1,60 +1,19 @@ -[gd_scene load_steps=8 format=3 uid="uid://d24q8j53oiyd4"] +[gd_scene load_steps=7 format=3 uid="uid://takm6diuy71m"] -[ext_resource type="Texture2D" uid="uid://jmxhiwsiw1f5" path="res://Assets/TextureAtlases/g_glue_gun.tres" id="1_pl6t8"] -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/GlueLauncher/stickyweapon.gd" id="2_dnhqb"] -[ext_resource type="Resource" uid="uid://d0643gfp52x3s" path="res://Resources/StatusEffects/sticky.tres" id="3_4t7ku"] -[ext_resource type="Resource" uid="uid://dnucn65m12dmq" path="res://Resources/WeaponStats/glue.tres" id="3_li2dn"] +[ext_resource type="PackedScene" uid="uid://nrdexcyatika" path="res://Scenes/Weapons/status_applying_weapon.tscn" id="1_7v0k2"] +[ext_resource type="Script" path="res://PCs/Universal/ClassCards/GlueLauncher/weapon_glue_launcher.gd" id="2_12ex2"] +[ext_resource type="Resource" uid="uid://d0643gfp52x3s" path="res://Resources/StatusEffects/sticky.tres" id="3_xtk6n"] +[ext_resource type="Resource" uid="uid://boj1ho5x0sxtq" path="res://PCs/Universal/ClassCards/GlueLauncher/weapon_stats.tres" id="4_c3ve8"] +[ext_resource type="Texture2D" uid="uid://oblavj8vj30n" path="res://PCs/Universal/ClassCards/GlueLauncher/glue_gun.png" id="5_obawu"] -[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_ehcsl"] +atlas = ExtResource("5_obawu") +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="GlueLauncherWeapon" instance=ExtResource("1_7v0k2")] +script = ExtResource("2_12ex2") +status_stats = ExtResource("3_xtk6n") +stats = ExtResource("4_c3ve8") -[sub_resource type="AnimationLibrary" id="AnimationLibrary_ntl6p"] -_data = { -"RESET": SubResource("Animation_n8b32"), -"shoot": SubResource("Animation_g0h8q") -} - -[node name="Weapon" type="Sprite3D"] -layers = 2 -billboard = 1 -texture_filter = 0 -texture = ExtResource("1_pl6t8") -script = ExtResource("2_dnhqb") -status_stats = ExtResource("3_4t7ku") -stats = ExtResource("3_li2dn") - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -libraries = { -"": SubResource("AnimationLibrary_ntl6p") -} - -[node name="RayCast3D" type="RayCast3D" parent="."] -collision_mask = 4 +[node name="Sprite3D" parent="." index="0"] +texture = SubResource("AtlasTexture_ehcsl") diff --git a/PCs/Universal/ClassCards/GlueLauncher/weapon_stats.tres b/PCs/Universal/ClassCards/GlueLauncher/weapon_stats.tres new file mode 100644 index 0000000..d68e88a --- /dev/null +++ b/PCs/Universal/ClassCards/GlueLauncher/weapon_stats.tres @@ -0,0 +1,24 @@ +[gd_resource type="Resource" script_class="CardText" load_steps=6 format=3 uid="uid://boj1ho5x0sxtq"] + +[ext_resource type="Script" path="res://Scripts/Resources/card_text.gd" id="1_8sdo4"] +[ext_resource type="Script" path="res://Scripts/Resources/stat_attribute.gd" id="1_gheu8"] + +[sub_resource type="Resource" id="Resource_gbocu"] +script = ExtResource("1_gheu8") +key = "Damage" +value = 0.0 + +[sub_resource type="Resource" id="Resource_6a2im"] +script = ExtResource("1_gheu8") +key = "Range" +value = 13.0 + +[sub_resource type="Resource" id="Resource_7npe0"] +script = ExtResource("1_gheu8") +key = "Fire Delay" +value = 0.5 + +[resource] +script = ExtResource("1_8sdo4") +attributes = Array[ExtResource("1_gheu8")]([SubResource("Resource_gbocu"), SubResource("Resource_6a2im"), SubResource("Resource_7npe0")]) +text = "Fires every [Fire Delay]s, making the target Sticky at a range of [Range]m" diff --git a/PCs/Universal/ClassCards/Icicle/card_icicle.tres b/PCs/Universal/ClassCards/Icicle/card_icicle.tres index bb1c636..48d132f 100644 --- a/PCs/Universal/ClassCards/Icicle/card_icicle.tres +++ b/PCs/Universal/ClassCards/Icicle/card_icicle.tres @@ -1,19 +1,19 @@ -[gd_resource type="Resource" script_class="Card" load_steps=7 format=3 uid="uid://bceyh6nn6h15y"] +[gd_resource type="Resource" script_class="Card" load_steps=6 format=3 uid="uid://cb1uqjl1387kk"] -[ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_g0mbh"] -[ext_resource type="Texture2D" uid="uid://ca4lwwd3e0y73" path="res://Assets/TextureAtlases/g_assault.tres" id="2_gnblw"] -[ext_resource type="Resource" uid="uid://cdmkajdgfpk6h" path="res://Resources/TurretStats/icicle.tres" id="3_fgq80"] -[ext_resource type="PackedScene" uid="uid://clabvrajn6k3r" path="res://PCs/Universal/ClassCards/Icicle/tower_icicle.tscn" id="4_jwh3d"] -[ext_resource type="PackedScene" uid="uid://dvfpqrrmjfco4" path="res://PCs/Universal/ClassCards/Icicle/weapon_icicle.tscn" id="5_appk0"] -[ext_resource type="Resource" uid="uid://dsmlqik586soo" path="res://Resources/WeaponStats/icicle.tres" id="6_mfnfc"] +[ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_cmmto"] +[ext_resource type="Texture2D" uid="uid://mqo5qcghfit8" path="res://PCs/Universal/ClassCards/Icicle/icicle.png" id="2_w5fi7"] +[ext_resource type="PackedScene" uid="uid://v3iuf4lt2iff" path="res://PCs/Universal/ClassCards/Icicle/weapon_icicle.tscn" id="3_ve3rv"] +[ext_resource type="Resource" uid="uid://ckjmym1ofww4" path="res://PCs/Universal/ClassCards/Icicle/weapon_stats.tres" id="4_yv37w"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_7due4"] +atlas = ExtResource("2_w5fi7") +region = Rect2(0, 0, 64, 64) [resource] -script = ExtResource("1_g0mbh") +script = ExtResource("1_cmmto") title = "Icicle" rarity = 3 faction = 0 -sprite = ExtResource("2_gnblw") -turret = ExtResource("4_jwh3d") -weapon = ExtResource("5_appk0") -weapon_stats = ExtResource("6_mfnfc") -tower_stats = ExtResource("3_fgq80") +sprite = SubResource("AtlasTexture_7due4") +weapon_scene = ExtResource("3_ve3rv") +weapon_stats = ExtResource("4_yv37w") diff --git a/PCs/Universal/ClassCards/Icicle/icicle.gd b/PCs/Universal/ClassCards/Icicle/icicle.gd deleted file mode 100644 index 887400e..0000000 --- a/PCs/Universal/ClassCards/Icicle/icicle.gd +++ /dev/null @@ -1,32 +0,0 @@ -extends RigidBody3D -class_name Icicle - -@export var explosion_range := 6.0 -var acceleration := 15.0 -var direction -var status_stats : StatusStats -var lifetime := 15.0 -var time_alive := 0.0 - - -func _process(delta: float) -> void: - time_alive += delta - if time_alive >= lifetime: - explode() - - -func _physics_process(_delta: float) -> void: - apply_central_force(direction * acceleration) - - -func _on_body_entered(_body: Node) -> void: - explode() - - -func explode(): - for enemy in get_tree().get_nodes_in_group("Enemies"): - if global_position.distance_to(enemy.global_position) <= explosion_range: - var status = StatusCold.new() - status.stats = status_stats - enemy.status_manager.add_effect(status) - queue_free() diff --git a/PCs/Universal/ClassCards/Icicle/icicle.png b/PCs/Universal/ClassCards/Icicle/icicle.png new file mode 100644 index 0000000..f19037b Binary files /dev/null and b/PCs/Universal/ClassCards/Icicle/icicle.png differ diff --git a/PCs/Universal/ClassCards/Icicle/icicle.png.import b/PCs/Universal/ClassCards/Icicle/icicle.png.import new file mode 100644 index 0000000..6a6800d --- /dev/null +++ b/PCs/Universal/ClassCards/Icicle/icicle.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://mqo5qcghfit8" +path="res://.godot/imported/icicle.png-4a9f91664a318bc31fc04d1f1adfb245.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://PCs/Universal/ClassCards/Icicle/icicle.png" +dest_files=["res://.godot/imported/icicle.png-4a9f91664a318bc31fc04d1f1adfb245.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/PCs/Universal/ClassCards/Icicle/icicle.tscn b/PCs/Universal/ClassCards/Icicle/icicle.tscn deleted file mode 100644 index ceadb36..0000000 --- a/PCs/Universal/ClassCards/Icicle/icicle.tscn +++ /dev/null @@ -1,30 +0,0 @@ -[gd_scene load_steps=5 format=3 uid="uid://cdme5v2sq7u3p"] - -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Icicle/icicle.gd" id="1_qlswm"] -[ext_resource type="Texture2D" uid="uid://b54d5dc4jmlau" path="res://Assets/Textures/bomb.png" id="2_8pdfq"] - -[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_whkhx"] -bounce = 0.6 - -[sub_resource type="SphereShape3D" id="SphereShape3D_mi0in"] -radius = 0.2 - -[node name="RigidBody3D" type="RigidBody3D"] -collision_layer = 0 -collision_mask = 5 -physics_material_override = SubResource("PhysicsMaterial_whkhx") -gravity_scale = 0.0 -max_contacts_reported = 1 -contact_monitor = true -script = ExtResource("1_qlswm") - -[node name="Node3D" type="Sprite3D" parent="."] -transform = Transform3D(1.4, 0, 0, 0, 1.4, 0, 0, 0, 1.4, 0, 0, 0) -billboard = 1 -texture_filter = 0 -texture = ExtResource("2_8pdfq") - -[node name="CollisionShape3D" type="CollisionShape3D" parent="."] -shape = SubResource("SphereShape3D_mi0in") - -[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/PCs/Universal/ClassCards/Icicle/icicle_projectile.gd b/PCs/Universal/ClassCards/Icicle/icicle_projectile.gd new file mode 100644 index 0000000..5644831 --- /dev/null +++ b/PCs/Universal/ClassCards/Icicle/icicle_projectile.gd @@ -0,0 +1,8 @@ +extends StatusApplyingProjectile +class_name IcicleProjectile + + +func build_status_object() -> StatusEffect: + var status = StatusSlow.new() + status.stats = status_stats + return status diff --git a/PCs/Universal/ClassCards/Icicle/icicle_projectile.png b/PCs/Universal/ClassCards/Icicle/icicle_projectile.png new file mode 100644 index 0000000..9f8216d Binary files /dev/null and b/PCs/Universal/ClassCards/Icicle/icicle_projectile.png differ diff --git a/Assets/Textures/8directionplayer.png.import b/PCs/Universal/ClassCards/Icicle/icicle_projectile.png.import similarity index 64% rename from Assets/Textures/8directionplayer.png.import rename to PCs/Universal/ClassCards/Icicle/icicle_projectile.png.import index e5cc001..e86daea 100644 --- a/Assets/Textures/8directionplayer.png.import +++ b/PCs/Universal/ClassCards/Icicle/icicle_projectile.png.import @@ -2,16 +2,16 @@ importer="texture" type="CompressedTexture2D" -uid="uid://cwqifoaxbsbio" -path="res://.godot/imported/8directionplayer.png-9f1d9c7387ae05b7b8a30ff9aa0fac65.ctex" +uid="uid://cqmt5m0grnppx" +path="res://.godot/imported/icicle_projectile.png-1514e55b32fb404fd33060409a1662b1.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://Assets/Textures/8directionplayer.png" -dest_files=["res://.godot/imported/8directionplayer.png-9f1d9c7387ae05b7b8a30ff9aa0fac65.ctex"] +source_file="res://PCs/Universal/ClassCards/Icicle/icicle_projectile.png" +dest_files=["res://.godot/imported/icicle_projectile.png-1514e55b32fb404fd33060409a1662b1.ctex"] [params] diff --git a/PCs/Universal/ClassCards/Icicle/icicle_projectile.tscn b/PCs/Universal/ClassCards/Icicle/icicle_projectile.tscn new file mode 100644 index 0000000..ab092f8 --- /dev/null +++ b/PCs/Universal/ClassCards/Icicle/icicle_projectile.tscn @@ -0,0 +1,13 @@ +[gd_scene load_steps=5 format=3 uid="uid://dyurjxotdkf1u"] + +[ext_resource type="PackedScene" uid="uid://beq6rn0babncg" path="res://Scenes/Projectiles/status_applying_projectile.tscn" id="1_mmk8p"] +[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Icicle/icicle_projectile.gd" id="2_nukn5"] +[ext_resource type="Resource" uid="uid://fed6kimfbcwv" path="res://Resources/StatusEffects/cold.tres" id="3_ruu1t"] +[ext_resource type="Texture2D" uid="uid://cqmt5m0grnppx" path="res://PCs/Universal/ClassCards/Icicle/icicle_projectile.png" id="4_ycq5n"] + +[node name="Icicle" instance=ExtResource("1_mmk8p")] +script = ExtResource("2_nukn5") +status_stats = ExtResource("3_ruu1t") + +[node name="Sprite3D" parent="." index="1"] +texture = ExtResource("4_ycq5n") diff --git a/PCs/Universal/ClassCards/Icicle/icicleweapon.gd b/PCs/Universal/ClassCards/Icicle/icicleweapon.gd deleted file mode 100644 index d3e685a..0000000 --- a/PCs/Universal/ClassCards/Icicle/icicleweapon.gd +++ /dev/null @@ -1,16 +0,0 @@ -extends Weapon -class_name IcicleWeapon - -@export var icicle_scene : PackedScene -@export var status_stats : StatusStats - - -func shoot(): - if other_cooldown <= 0 and stats != null: - other_cooldown = cooldown - $AnimationPlayer.play("shoot") - var icicle = icicle_scene.instantiate() as Icicle - icicle.position = $RayCast3D.global_position - icicle.status_stats = status_stats - get_tree().root.add_child(icicle) - icicle.direction = -global_transform.basis.z diff --git a/PCs/Universal/ClassCards/Icicle/weapon_icicle.gd b/PCs/Universal/ClassCards/Icicle/weapon_icicle.gd new file mode 100644 index 0000000..c2e43c0 --- /dev/null +++ b/PCs/Universal/ClassCards/Icicle/weapon_icicle.gd @@ -0,0 +1,2 @@ +extends ProjectileWeapon +class_name IcicleWeapon diff --git a/PCs/Universal/ClassCards/Icicle/weapon_icicle.tscn b/PCs/Universal/ClassCards/Icicle/weapon_icicle.tscn index 1d4e464..6285c77 100644 --- a/PCs/Universal/ClassCards/Icicle/weapon_icicle.tscn +++ b/PCs/Universal/ClassCards/Icicle/weapon_icicle.tscn @@ -1,79 +1,19 @@ -[gd_scene load_steps=10 format=3 uid="uid://dvfpqrrmjfco4"] +[gd_scene load_steps=7 format=3 uid="uid://v3iuf4lt2iff"] -[ext_resource type="Texture2D" uid="uid://clr6kfyci5jqb" path="res://Assets/TextureAtlases/g_rocket_launcher.tres" id="1_23r2a"] -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Icicle/icicleweapon.gd" id="2_j3c63"] -[ext_resource type="PackedScene" uid="uid://cdme5v2sq7u3p" path="res://PCs/Universal/ClassCards/Icicle/icicle.tscn" id="3_hgb5e"] -[ext_resource type="Resource" uid="uid://fed6kimfbcwv" path="res://Resources/StatusEffects/cold.tres" id="4_hsh8q"] -[ext_resource type="Resource" uid="uid://dsmlqik586soo" path="res://Resources/WeaponStats/icicle.tres" id="5_wivww"] -[ext_resource type="Texture2D" uid="uid://bgeu8dnqaxq7v" path="res://Assets/TextureAtlases/target_list.tres" id="6_mqgqx"] +[ext_resource type="PackedScene" uid="uid://bqdllitxbbpyp" path="res://Scenes/Weapons/projectile_weapon.tscn" id="1_oi7x1"] +[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Icicle/weapon_icicle.gd" id="2_6wbx0"] +[ext_resource type="PackedScene" uid="uid://dyurjxotdkf1u" path="res://PCs/Universal/ClassCards/Icicle/icicle_projectile.tscn" id="3_cwl2u"] +[ext_resource type="Resource" uid="uid://ckjmym1ofww4" path="res://PCs/Universal/ClassCards/Icicle/weapon_stats.tres" id="4_r8ss5"] +[ext_resource type="Texture2D" uid="uid://mqo5qcghfit8" path="res://PCs/Universal/ClassCards/Icicle/icicle.png" id="5_iremk"] -[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_7uf3s"] +atlas = ExtResource("5_iremk") +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="IcicleWeapon" instance=ExtResource("1_oi7x1")] +script = ExtResource("2_6wbx0") +projectile_scene = ExtResource("3_cwl2u") +stats = ExtResource("4_r8ss5") -[sub_resource type="AnimationLibrary" id="AnimationLibrary_ntl6p"] -_data = { -"RESET": SubResource("Animation_n8b32"), -"shoot": SubResource("Animation_g0h8q") -} - -[node name="Weapon" type="Sprite3D"] -layers = 2 -billboard = 1 -texture_filter = 0 -texture = ExtResource("1_23r2a") -script = ExtResource("2_j3c63") -icicle_scene = ExtResource("3_hgb5e") -status_stats = ExtResource("4_hsh8q") -stats = ExtResource("5_wivww") - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -libraries = { -"": SubResource("AnimationLibrary_ntl6p") -} - -[node name="RayCast3D" type="RayCast3D" parent="."] -collision_mask = 4 - -[node name="TextureRect" type="TextureRect" parent="."] -visible = false -texture_filter = 1 -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = -20.0 -offset_top = -20.0 -offset_right = 20.0 -offset_bottom = 20.0 -grow_horizontal = 2 -grow_vertical = 2 -texture = ExtResource("6_mqgqx") +[node name="Sprite3D" parent="." index="0"] +texture = SubResource("AtlasTexture_7uf3s") diff --git a/PCs/Universal/ClassCards/Icicle/weapon_stats.tres b/PCs/Universal/ClassCards/Icicle/weapon_stats.tres new file mode 100644 index 0000000..03f1629 --- /dev/null +++ b/PCs/Universal/ClassCards/Icicle/weapon_stats.tres @@ -0,0 +1,8 @@ +[gd_resource type="Resource" script_class="CardText" load_steps=2 format=3 uid="uid://ckjmym1ofww4"] + +[ext_resource type="Script" path="res://Scripts/Resources/card_text.gd" id="1_fpi27"] + +[resource] +script = ExtResource("1_fpi27") +attributes = Array[Resource("res://Scripts/Resources/stat_attribute.gd")]([]) +text = "" diff --git a/PCs/Universal/ClassCards/Lightning/card_lightning.tres b/PCs/Universal/ClassCards/Lightning/card_lightning.tres index d83a5ab..3198dc7 100644 --- a/PCs/Universal/ClassCards/Lightning/card_lightning.tres +++ b/PCs/Universal/ClassCards/Lightning/card_lightning.tres @@ -1,7 +1,7 @@ [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://Assets/TextureAtlases/g_assault.tres" id="2_eyg7w"] +[ext_resource type="Texture2D" uid="uid://ca4lwwd3e0y73" path="res://PCs/Universal/ClassCards/Assault/g_assault.tres" id="2_eyg7w"] [resource] script = ExtResource("1_oj1u6") diff --git a/PCs/Universal/ClassCards/Reactor/card_reactor.tres b/PCs/Universal/ClassCards/Reactor/card_reactor.tres index 8c7258a..56a55cc 100644 --- a/PCs/Universal/ClassCards/Reactor/card_reactor.tres +++ b/PCs/Universal/ClassCards/Reactor/card_reactor.tres @@ -1,7 +1,7 @@ [gd_resource type="Resource" script_class="Card" load_steps=7 format=3 uid="uid://dra640am6ykri"] [ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_7065k"] -[ext_resource type="Texture2D" uid="uid://ca4lwwd3e0y73" path="res://Assets/TextureAtlases/g_assault.tres" id="2_8hvde"] +[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"] diff --git a/PCs/Universal/ClassCards/Refridgerator/card_refridgerator.tres b/PCs/Universal/ClassCards/Refridgerator/card_refridgerator.tres index 20caf0f..4b683b4 100644 --- a/PCs/Universal/ClassCards/Refridgerator/card_refridgerator.tres +++ b/PCs/Universal/ClassCards/Refridgerator/card_refridgerator.tres @@ -1,7 +1,7 @@ [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://Assets/TextureAtlases/g_assault.tres" id="2_fgsd3"] +[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"] diff --git a/PCs/Universal/ClassCards/RocketLauncher/card_rocket_launcher.tres b/PCs/Universal/ClassCards/RocketLauncher/card_rocket_launcher.tres index 3a6a70f..20e4281 100644 --- a/PCs/Universal/ClassCards/RocketLauncher/card_rocket_launcher.tres +++ b/PCs/Universal/ClassCards/RocketLauncher/card_rocket_launcher.tres @@ -1,19 +1,23 @@ -[gd_resource type="Resource" script_class="Card" load_steps=7 format=3 uid="uid://dh5fjnbp8auw1"] +[gd_resource type="Resource" script_class="Card" load_steps=8 format=3 uid="uid://b37r54q84vqoi"] -[ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_dg0td"] -[ext_resource type="Texture2D" uid="uid://clr6kfyci5jqb" path="res://Assets/TextureAtlases/g_rocket_launcher.tres" id="2_duef5"] -[ext_resource type="Resource" uid="uid://duofn25nuu84q" path="res://Resources/TurretStats/rocketlauncher.tres" id="3_tj17y"] -[ext_resource type="Resource" uid="uid://dtfgyt85mp1ar" path="res://Resources/WeaponStats/rocketlauncher.tres" id="4_hwkrq"] -[ext_resource type="PackedScene" uid="uid://cbmoi73hquaer" path="res://PCs/Universal/ClassCards/RocketLauncher/weapon_rocket_launcher.tscn" id="4_ioexd"] -[ext_resource type="PackedScene" uid="uid://br3bd1jmi235x" path="res://PCs/Universal/ClassCards/RocketLauncher/tower_rocket_launcher.tscn" id="4_mvvp4"] +[ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_ly0o5"] +[ext_resource type="Texture2D" uid="uid://by1y15lm0bppe" path="res://PCs/Universal/ClassCards/RocketLauncher/rocket_launcher.png" id="2_iqnic"] +[ext_resource type="Resource" uid="uid://c65rq455ma8f6" path="res://PCs/Universal/ClassCards/RocketLauncher/tower_stats.tres" id="3_06my6"] +[ext_resource type="PackedScene" uid="uid://bdp7icdejayvr" path="res://PCs/Universal/ClassCards/RocketLauncher/weapon_rocket_launcher.tscn" id="3_qo5gv"] +[ext_resource type="Resource" uid="uid://d2yo07m2mp2mp" path="res://PCs/Universal/ClassCards/RocketLauncher/weapon_stats.tres" id="4_cmvfg"] +[ext_resource type="PackedScene" uid="uid://b3q0f6w30nwsh" path="res://PCs/Universal/ClassCards/RocketLauncher/tower_rocket_launcher.tscn" id="4_hff2k"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_u80vk"] +atlas = ExtResource("2_iqnic") +region = Rect2(0, 0, 64, 64) [resource] -script = ExtResource("1_dg0td") +script = ExtResource("1_ly0o5") title = "Rocket Launcher" rarity = 0 faction = 0 -sprite = ExtResource("2_duef5") -turret = ExtResource("4_mvvp4") -weapon = ExtResource("4_ioexd") -weapon_stats = ExtResource("4_hwkrq") -tower_stats = ExtResource("3_tj17y") +sprite = SubResource("AtlasTexture_u80vk") +turret_scene = ExtResource("4_hff2k") +weapon_scene = ExtResource("3_qo5gv") +weapon_stats = ExtResource("4_cmvfg") +tower_stats = ExtResource("3_06my6") diff --git a/PCs/Universal/ClassCards/RocketLauncher/rocket.gd b/PCs/Universal/ClassCards/RocketLauncher/rocket.gd deleted file mode 100644 index 4f67b5d..0000000 --- a/PCs/Universal/ClassCards/RocketLauncher/rocket.gd +++ /dev/null @@ -1,33 +0,0 @@ -extends RigidBody3D -class_name Rocket - -@export var damage := 10.0 -@export var explosion_range := 6.0 -var target : Node3D -var acceleration := 15.0 -var direction -var lifetime := 15.0 -var time_alive := 0.0 - - -func _process(delta: float) -> void: - time_alive += delta - if time_alive >= lifetime: - explode() - - -func _physics_process(_delta: float) -> void: - if is_instance_valid(target): - direction = global_position.direction_to(target.global_position) - apply_central_force(direction * acceleration) - - -func _on_body_entered(_body: Node) -> void: - explode() - - -func explode(): - for enemy in get_tree().get_nodes_in_group("Enemies"): - if global_position.distance_to(enemy.global_position) <= explosion_range: - enemy.damage(damage) - queue_free() diff --git a/PCs/Universal/ClassCards/RocketLauncher/rocket.png b/PCs/Universal/ClassCards/RocketLauncher/rocket.png new file mode 100644 index 0000000..a7d80b0 Binary files /dev/null and b/PCs/Universal/ClassCards/RocketLauncher/rocket.png differ diff --git a/PCs/Universal/ClassCards/RocketLauncher/rocket.png.import b/PCs/Universal/ClassCards/RocketLauncher/rocket.png.import new file mode 100644 index 0000000..3b6c3be --- /dev/null +++ b/PCs/Universal/ClassCards/RocketLauncher/rocket.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bode8mfmr3r1h" +path="res://.godot/imported/rocket.png-351afd78a91fe9f7469af30003adbe29.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://PCs/Universal/ClassCards/RocketLauncher/rocket.png" +dest_files=["res://.godot/imported/rocket.png-351afd78a91fe9f7469af30003adbe29.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/PCs/Universal/ClassCards/RocketLauncher/rocket.png.kra b/PCs/Universal/ClassCards/RocketLauncher/rocket.png.kra new file mode 100644 index 0000000..2ac94f7 Binary files /dev/null and b/PCs/Universal/ClassCards/RocketLauncher/rocket.png.kra differ diff --git a/PCs/Universal/ClassCards/RocketLauncher/rocket.tscn b/PCs/Universal/ClassCards/RocketLauncher/rocket.tscn deleted file mode 100644 index 6a41aee..0000000 --- a/PCs/Universal/ClassCards/RocketLauncher/rocket.tscn +++ /dev/null @@ -1,30 +0,0 @@ -[gd_scene load_steps=5 format=3 uid="uid://hr0dw2533tsl"] - -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/RocketLauncher/rocket.gd" id="1_7il2o"] -[ext_resource type="Texture2D" uid="uid://b54d5dc4jmlau" path="res://Assets/Textures/bomb.png" id="2_moh5p"] - -[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_whkhx"] -bounce = 0.6 - -[sub_resource type="SphereShape3D" id="SphereShape3D_mi0in"] -radius = 0.2 - -[node name="RigidBody3D" type="RigidBody3D"] -collision_layer = 0 -collision_mask = 5 -physics_material_override = SubResource("PhysicsMaterial_whkhx") -gravity_scale = 0.0 -max_contacts_reported = 1 -contact_monitor = true -script = ExtResource("1_7il2o") - -[node name="Node3D" type="Sprite3D" parent="."] -transform = Transform3D(1.4, 0, 0, 0, 1.4, 0, 0, 0, 1.4, 0, 0, 0) -billboard = 1 -texture_filter = 0 -texture = ExtResource("2_moh5p") - -[node name="CollisionShape3D" type="CollisionShape3D" parent="."] -shape = SubResource("SphereShape3D_mi0in") - -[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/Assets/Textures/rocket_launcher.png b/PCs/Universal/ClassCards/RocketLauncher/rocket_launcher.png similarity index 100% rename from Assets/Textures/rocket_launcher.png rename to PCs/Universal/ClassCards/RocketLauncher/rocket_launcher.png diff --git a/Assets/Textures/rocket_launcher.png.import b/PCs/Universal/ClassCards/RocketLauncher/rocket_launcher.png.import similarity index 70% rename from Assets/Textures/rocket_launcher.png.import rename to PCs/Universal/ClassCards/RocketLauncher/rocket_launcher.png.import index 64dfcd2..8865693 100644 --- a/Assets/Textures/rocket_launcher.png.import +++ b/PCs/Universal/ClassCards/RocketLauncher/rocket_launcher.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://by1y15lm0bppe" -path="res://.godot/imported/rocket_launcher.png-b3967e10fe92066919e91518c35aac06.ctex" +path="res://.godot/imported/rocket_launcher.png-2d44107b7f14206d86d0c1171ba425e8.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://Assets/Textures/rocket_launcher.png" -dest_files=["res://.godot/imported/rocket_launcher.png-b3967e10fe92066919e91518c35aac06.ctex"] +source_file="res://PCs/Universal/ClassCards/RocketLauncher/rocket_launcher.png" +dest_files=["res://.godot/imported/rocket_launcher.png-2d44107b7f14206d86d0c1171ba425e8.ctex"] [params] diff --git a/PCs/Universal/ClassCards/RocketLauncher/rocket_projectile.gd b/PCs/Universal/ClassCards/RocketLauncher/rocket_projectile.gd new file mode 100644 index 0000000..a529462 --- /dev/null +++ b/PCs/Universal/ClassCards/RocketLauncher/rocket_projectile.gd @@ -0,0 +1,2 @@ +extends HomingProjectile +class_name RocketProjectile diff --git a/PCs/Universal/ClassCards/RocketLauncher/rocket_projectile.tscn b/PCs/Universal/ClassCards/RocketLauncher/rocket_projectile.tscn new file mode 100644 index 0000000..82ca005 --- /dev/null +++ b/PCs/Universal/ClassCards/RocketLauncher/rocket_projectile.tscn @@ -0,0 +1,14 @@ +[gd_scene load_steps=4 format=3 uid="uid://p2vwo8ivben6"] + +[ext_resource type="PackedScene" uid="uid://di2wwvkv4wov1" path="res://Scenes/Projectiles/homing_projectile.tscn" id="1_fnn4i"] +[ext_resource type="Script" path="res://PCs/Universal/ClassCards/RocketLauncher/rocket_projectile.gd" id="2_86up0"] +[ext_resource type="Texture2D" uid="uid://bode8mfmr3r1h" path="res://PCs/Universal/ClassCards/RocketLauncher/rocket.png" id="3_aonkx"] + +[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 +texture = ExtResource("3_aonkx") diff --git a/PCs/Universal/ClassCards/RocketLauncher/rocket_weapon.gd b/PCs/Universal/ClassCards/RocketLauncher/rocket_weapon.gd deleted file mode 100644 index c7709a3..0000000 --- a/PCs/Universal/ClassCards/RocketLauncher/rocket_weapon.gd +++ /dev/null @@ -1,66 +0,0 @@ -extends Weapon -class_name RocketWeapon - -@export var rocket_scene : PackedScene -@export var target_icon_scene : PackedScene -var rocket_speed = 20.0 -var target_max := 3 -var targets = [] -var target_icons = [] - - -func _ready() -> void: - super._ready() - for x in target_max: - var icon = target_icon_scene.instantiate() - add_child(icon) - icon.set_visible(false) - target_icons.append(icon) - - -func _process(delta: float) -> void: - super._process(delta) - if !trigger_held or other_cooldown > 0: - return - var target_list = targets.duplicate() - for target in target_list: - if !is_instance_valid(target): - targets.erase(target) - continue - for x in target_icons.size(): - if x < targets.size(): - target_icons[x].global_position = targets[x].global_position - target_icons[x].set_visible(true) - else: - target_icons[x].set_visible(false) - $TextureRect.set_visible(true) - $TextureRect.texture.region = Rect2(128 * targets.size(), 0, 128, 128) - if targets.size() < target_max and $RayCast3D.is_colliding() and !targets.has($RayCast3D.get_collider()): - targets.append($RayCast3D.get_collider()) - - -func _physics_process(_delta: float) -> void: - pass - - -func release_trigger(): - if trigger_held: - super.release_trigger() - shoot() - - -func shoot(): - if other_cooldown <= 0 and stats != null: - other_cooldown = cooldown - $AnimationPlayer.play("shoot") - for target in targets: - var rocket = rocket_scene.instantiate() as Rocket - rocket.position = $RayCast3D.global_position - rocket.damage = stats.damage - rocket.target = target - get_tree().root.add_child(rocket) - rocket.apply_central_impulse(Vector3.UP * 3.0) - targets.clear() - $TextureRect.set_visible(false) - for icon in target_icons: - icon.set_visible(false) diff --git a/Assets/Textures/target_icon.png b/PCs/Universal/ClassCards/RocketLauncher/target_icon.png similarity index 100% rename from Assets/Textures/target_icon.png rename to PCs/Universal/ClassCards/RocketLauncher/target_icon.png diff --git a/Assets/Textures/target_icon.png.import b/PCs/Universal/ClassCards/RocketLauncher/target_icon.png.import similarity index 68% rename from Assets/Textures/target_icon.png.import rename to PCs/Universal/ClassCards/RocketLauncher/target_icon.png.import index 04885c0..3596f2a 100644 --- a/Assets/Textures/target_icon.png.import +++ b/PCs/Universal/ClassCards/RocketLauncher/target_icon.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://hnfa76d6tdi" -path="res://.godot/imported/target_icon.png-52b48b3583774442e6ace899a7e119fd.ctex" +path="res://.godot/imported/target_icon.png-62861a4f843a005c647a8233c54d7a2c.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://Assets/Textures/target_icon.png" -dest_files=["res://.godot/imported/target_icon.png-52b48b3583774442e6ace899a7e119fd.ctex"] +source_file="res://PCs/Universal/ClassCards/RocketLauncher/target_icon.png" +dest_files=["res://.godot/imported/target_icon.png-62861a4f843a005c647a8233c54d7a2c.ctex"] [params] diff --git a/Scenes/target_icon.tscn b/PCs/Universal/ClassCards/RocketLauncher/target_icon.tscn similarity index 75% rename from Scenes/target_icon.tscn rename to PCs/Universal/ClassCards/RocketLauncher/target_icon.tscn index fd6d151..40ce3e4 100644 --- a/Scenes/target_icon.tscn +++ b/PCs/Universal/ClassCards/RocketLauncher/target_icon.tscn @@ -1,10 +1,10 @@ [gd_scene load_steps=2 format=3 uid="uid://csufsbi64asau"] -[ext_resource type="Texture2D" uid="uid://hnfa76d6tdi" path="res://Assets/Textures/target_icon.png" id="1_r4a3f"] +[ext_resource type="Texture2D" uid="uid://hnfa76d6tdi" path="res://PCs/Universal/ClassCards/RocketLauncher/target_icon.png" id="1_r4a3f"] [node name="Node3D" type="Sprite3D"] sorting_offset = 20.0 -pixel_size = 0.003 +pixel_size = 0.002 billboard = 1 no_depth_test = true fixed_size = true diff --git a/Assets/Textures/target_list.png b/PCs/Universal/ClassCards/RocketLauncher/target_list.png similarity index 100% rename from Assets/Textures/target_list.png rename to PCs/Universal/ClassCards/RocketLauncher/target_list.png diff --git a/Assets/Textures/target_list.png.import b/PCs/Universal/ClassCards/RocketLauncher/target_list.png.import similarity index 69% rename from Assets/Textures/target_list.png.import rename to PCs/Universal/ClassCards/RocketLauncher/target_list.png.import index 31b5e01..59b35da 100644 --- a/Assets/Textures/target_list.png.import +++ b/PCs/Universal/ClassCards/RocketLauncher/target_list.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://cc2umukpibmx1" -path="res://.godot/imported/target_list.png-22999316bc250bbe67cd788be5f870a7.ctex" +path="res://.godot/imported/target_list.png-65d3525b52a0ccfc6d97382117363a29.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://Assets/Textures/target_list.png" -dest_files=["res://.godot/imported/target_list.png-22999316bc250bbe67cd788be5f870a7.ctex"] +source_file="res://PCs/Universal/ClassCards/RocketLauncher/target_list.png" +dest_files=["res://.godot/imported/target_list.png-65d3525b52a0ccfc6d97382117363a29.ctex"] [params] diff --git a/PCs/Universal/ClassCards/RocketLauncher/tower_rocket_launcher.gd b/PCs/Universal/ClassCards/RocketLauncher/tower_rocket_launcher.gd new file mode 100644 index 0000000..136b9b9 --- /dev/null +++ b/PCs/Universal/ClassCards/RocketLauncher/tower_rocket_launcher.gd @@ -0,0 +1,75 @@ +extends ProjectileTower +class_name RocketLauncherTower + +var target_max := 3 +var targets = [] + + +func _ready() -> void: + super._ready() + target_max = floori(stats.get_attribute("Target Limit")) + + +func _physics_process(_delta: float) -> void: + if !is_multiplayer_authority(): + #only doing the graphical sort of stuff but not shoot logic + if targeted_enemy and is_instance_valid(targeted_enemy): + if !targeted_enemy.alive or global_position.distance_to(targeted_enemy.global_position) > target_range: + targeted_enemy = null + else: + aim() + return + if targets.size() < target_max: + acquire_target() + if targets.size() > 0: + var target_list = targets.duplicate() + for target in target_list: + if !is_instance_valid(target) or !target.alive: + targets.erase(target) + continue + if global_position.distance_to(target.global_position) > target_range: + targets.erase(target) + if targets.size() > 0: + targeted_enemy = targets[0] + networked_acquire_target.rpc(get_tree().root.get_path_to(targeted_enemy)) + aim() + if time_since_firing >= time_between_shots: + time_since_firing -= time_between_shots + shoot() + + +func acquire_target(): + var possible_enemies = [] + for enemy in get_tree().get_nodes_in_group("Enemies"): + if global_position.distance_to(enemy.global_position) > target_range: + continue + if !(enemy.stats.target_type & stats.target_type): + continue + if targets.has(enemy): + continue + possible_enemies.append(enemy) + + for x in target_max - targets.size(): + if possible_enemies.size() == 0: + return + var chosen = possible_enemies.pick_random() + possible_enemies.erase(chosen) + targets.append(chosen) + + +func shoot(): + for target in targets: + networked_spawn_rocket.rpc(get_tree().root.get_path_to(target), multiplayer.get_unique_id()) + + +@rpc("reliable", "call_local") +func networked_spawn_rocket(target_node_path, peer_id): + var target = get_tree().root.get_node(target_node_path) + var projectile = projectile_scene.instantiate() as RocketProjectile + projectile.position = global_position + Vector3.UP + projectile.damage = damage + projectile.target = target + projectile.name = base_name + str(peer_id) + str(projectile_id) + get_tree().root.add_child(projectile) + projectile.apply_central_impulse(Vector3.UP * 3.0) + projectile_id += 1 diff --git a/PCs/Universal/ClassCards/RocketLauncher/tower_rocket_launcher.tscn b/PCs/Universal/ClassCards/RocketLauncher/tower_rocket_launcher.tscn index 36c9d49..e9ff1d4 100644 --- a/PCs/Universal/ClassCards/RocketLauncher/tower_rocket_launcher.tscn +++ b/PCs/Universal/ClassCards/RocketLauncher/tower_rocket_launcher.tscn @@ -1,43 +1,9 @@ -[gd_scene load_steps=5 format=3 uid="uid://br3bd1jmi235x"] +[gd_scene load_steps=4 format=3 uid="uid://b3q0f6w30nwsh"] -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/RocketLauncher/rockettower.gd" id="1_8hb2v"] -[ext_resource type="PackedScene" uid="uid://hr0dw2533tsl" path="res://PCs/Universal/ClassCards/RocketLauncher/rocket.tscn" id="2_by0gu"] -[ext_resource type="Resource" uid="uid://duofn25nuu84q" path="res://Resources/TurretStats/rocketlauncher.tres" id="3_ynh7l"] +[ext_resource type="PackedScene" uid="uid://t0b32qb8eub2" path="res://Scenes/Towers/projectile_tower.tscn" id="1_su4lx"] +[ext_resource type="Script" path="res://PCs/Universal/ClassCards/RocketLauncher/tower_rocket_launcher.gd" id="2_33124"] +[ext_resource type="PackedScene" uid="uid://p2vwo8ivben6" path="res://PCs/Universal/ClassCards/RocketLauncher/rocket_projectile.tscn" id="3_8kvhb"] -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_fouf8"] -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("model", "range_sphere", "minimap_range_sphere")] -script = ExtResource("1_8hb2v") -rocket_scene = ExtResource("2_by0gu") -stats = ExtResource("3_ynh7l") -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, 1.97939, 0) - -[node name="CSGBox3D" type="CSGBox3D" parent="Model"] - -[node name="CSGBox3D2" type="CSGBox3D" parent="Model"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.65) -size = Vector3(0.805859, 0.771887, 1.04243) - -[node name="CSGBox3D3" type="CSGBox3D" parent="Model"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -1.20204) -size = Vector3(0.597715, 0.561942, 0.242169) - -[node name="CSGSphere3D" type="CSGSphere3D" parent="Model"] -visible = false -radius = 7.5 -material = SubResource("StandardMaterial3D_fouf8") - -[node name="CSGSphere3D2" type="CSGSphere3D" parent="Model"] -visible = false -layers = 4 -radius = 7.5 -material = SubResource("StandardMaterial3D_fouf8") +[node name="RocketLauncherTower" instance=ExtResource("1_su4lx")] +script = ExtResource("2_33124") +projectile_scene = ExtResource("3_8kvhb") diff --git a/PCs/Universal/ClassCards/RocketLauncher/tower_stats.tres b/PCs/Universal/ClassCards/RocketLauncher/tower_stats.tres new file mode 100644 index 0000000..52f7410 --- /dev/null +++ b/PCs/Universal/ClassCards/RocketLauncher/tower_stats.tres @@ -0,0 +1,30 @@ +[gd_resource type="Resource" script_class="CardText" load_steps=7 format=3 uid="uid://c65rq455ma8f6"] + +[ext_resource type="Script" path="res://Scripts/Resources/stat_attribute.gd" id="1_3kswp"] +[ext_resource type="Script" path="res://Scripts/Resources/card_text.gd" id="1_k606l"] + +[sub_resource type="Resource" id="Resource_4fjm2"] +script = ExtResource("1_3kswp") +key = "Fire Delay" +value = 5.0 + +[sub_resource type="Resource" id="Resource_uwj4j"] +script = ExtResource("1_3kswp") +key = "Target Limit" +value = 3.0 + +[sub_resource type="Resource" id="Resource_6qv5v"] +script = ExtResource("1_3kswp") +key = "Damage" +value = 8.0 + +[sub_resource type="Resource" id="Resource_y1rtq"] +script = ExtResource("1_3kswp") +key = "Range" +value = 20.0 + +[resource] +script = ExtResource("1_k606l") +target_type = 2 +attributes = Array[ExtResource("1_3kswp")]([SubResource("Resource_4fjm2"), SubResource("Resource_uwj4j"), SubResource("Resource_6qv5v"), SubResource("Resource_y1rtq")]) +text = "Every /Fire Delay\\s, fires a homing rocket at up to /Target Limit\\ flying enemies up to /Range\\m away that deal /Damage\\ damage" diff --git a/PCs/Universal/ClassCards/RocketLauncher/weapon_rocket_launcher.gd b/PCs/Universal/ClassCards/RocketLauncher/weapon_rocket_launcher.gd new file mode 100644 index 0000000..b399597 --- /dev/null +++ b/PCs/Universal/ClassCards/RocketLauncher/weapon_rocket_launcher.gd @@ -0,0 +1,76 @@ +extends ProjectileWeapon +class_name RocketLauncherWeapon + +@export var target_icon_scene : PackedScene +@export var targeting_raycast : RayCast3D +@export var targeting_ui_rect : TextureRect +var target_max := 3 +var targets = [] +var target_icons = [] + + +func _ready() -> void: + super._ready() + targeting_raycast.global_position = hero.camera.global_position + + target_max = floori(stats.get_attribute("Target Limit")) + for x in target_max: + var icon = target_icon_scene.instantiate() + add_child(icon) + icon.set_visible(false) + target_icons.append(icon) + + +func _process(delta: float) -> void: + super._process(delta) + if !trigger_held or time_since_firing < time_between_shots: + return + var target_list = targets.duplicate() + for target in target_list: + if !is_instance_valid(target): + targets.erase(target) + continue + for x in target_icons.size(): + if x < targets.size(): + target_icons[x].global_position = targets[x].sprite.global_position + target_icons[x].set_visible(true) + else: + target_icons[x].set_visible(false) + targeting_ui_rect.set_visible(true) + targeting_ui_rect.texture.region = Rect2(128 * targets.size(), 0, 128, 128) + if targets.size() < target_max and targeting_raycast.is_colliding() and !targets.has(targeting_raycast.get_collider()): + targets.append(targeting_raycast.get_collider()) + + +func release_trigger(): + super.release_trigger() + if targets.size() > 0 and time_since_firing >= time_between_shots: + time_since_firing -= time_between_shots + shoot() + + +func shoot(): + animator.play("shoot") + for target in targets: + networked_spawn_rocket.rpc(get_tree().root.get_path_to(target), multiplayer.get_unique_id()) + targets.clear() + targeting_ui_rect.set_visible(false) + for icon in target_icons: + icon.set_visible(false) + + +@rpc("reliable", "call_local") +func networked_spawn_rocket(target_node_path, peer_id): + var target = get_tree().root.get_node(target_node_path) + var projectile = projectile_scene.instantiate() as RocketProjectile + projectile.position = global_position + projectile.damage = damage + projectile.target = target + projectile.name = str(peer_id) + str(projectile_id) + get_tree().root.add_child(projectile) + projectile.apply_central_impulse(Vector3.UP * 3.0) + projectile_id += 1 + + +func _physics_process(_delta: float) -> void: + pass diff --git a/PCs/Universal/ClassCards/RocketLauncher/weapon_rocket_launcher.tscn b/PCs/Universal/ClassCards/RocketLauncher/weapon_rocket_launcher.tscn index 98affaa..06718b6 100644 --- a/PCs/Universal/ClassCards/RocketLauncher/weapon_rocket_launcher.tscn +++ b/PCs/Universal/ClassCards/RocketLauncher/weapon_rocket_launcher.tscn @@ -1,70 +1,37 @@ -[gd_scene load_steps=10 format=3 uid="uid://cbmoi73hquaer"] +[gd_scene load_steps=10 format=3 uid="uid://bdp7icdejayvr"] -[ext_resource type="Texture2D" uid="uid://clr6kfyci5jqb" path="res://Assets/TextureAtlases/g_rocket_launcher.tres" id="1_67vj1"] -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/RocketLauncher/rocket_weapon.gd" id="2_rfuq6"] -[ext_resource type="Resource" uid="uid://dtfgyt85mp1ar" path="res://Resources/WeaponStats/rocketlauncher.tres" id="3_7mndo"] -[ext_resource type="PackedScene" uid="uid://hr0dw2533tsl" path="res://PCs/Universal/ClassCards/RocketLauncher/rocket.tscn" id="3_xn783"] -[ext_resource type="PackedScene" uid="uid://csufsbi64asau" path="res://Scenes/target_icon.tscn" id="4_ptwpb"] -[ext_resource type="Texture2D" uid="uid://bgeu8dnqaxq7v" path="res://Assets/TextureAtlases/target_list.tres" id="5_nbrvn"] +[ext_resource type="PackedScene" uid="uid://bqdllitxbbpyp" path="res://Scenes/Weapons/projectile_weapon.tscn" id="1_gxaua"] +[ext_resource type="Script" path="res://PCs/Universal/ClassCards/RocketLauncher/weapon_rocket_launcher.gd" id="2_8x1tf"] +[ext_resource type="PackedScene" uid="uid://p2vwo8ivben6" path="res://PCs/Universal/ClassCards/RocketLauncher/rocket_projectile.tscn" id="2_lfuvh"] +[ext_resource type="PackedScene" uid="uid://csufsbi64asau" path="res://PCs/Universal/ClassCards/RocketLauncher/target_icon.tscn" id="3_2x5va"] +[ext_resource type="Resource" uid="uid://d2yo07m2mp2mp" path="res://PCs/Universal/ClassCards/RocketLauncher/weapon_stats.tres" id="3_i1hxj"] +[ext_resource type="Texture2D" uid="uid://by1y15lm0bppe" path="res://PCs/Universal/ClassCards/RocketLauncher/rocket_launcher.png" id="4_iygkf"] +[ext_resource type="Texture2D" uid="uid://cc2umukpibmx1" path="res://PCs/Universal/ClassCards/RocketLauncher/target_list.png" id="6_jlv88"] -[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_f4p4w"] +atlas = ExtResource("4_iygkf") +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="AtlasTexture" id="AtlasTexture_ewxon"] +atlas = ExtResource("6_jlv88") +region = Rect2(0, 0, 128, 128) -[sub_resource type="AnimationLibrary" id="AnimationLibrary_ntl6p"] -_data = { -"RESET": SubResource("Animation_n8b32"), -"shoot": SubResource("Animation_g0h8q") -} +[node name="RocketLauncher" node_paths=PackedStringArray("targeting_raycast", "targeting_ui_rect") instance=ExtResource("1_gxaua")] +script = ExtResource("2_8x1tf") +target_icon_scene = ExtResource("3_2x5va") +targeting_raycast = NodePath("RayCast3D") +targeting_ui_rect = NodePath("TextureRect") +projectile_scene = ExtResource("2_lfuvh") +stats = ExtResource("3_i1hxj") -[node name="Weapon" type="Sprite3D"] -layers = 2 -billboard = 1 -texture_filter = 0 -texture = ExtResource("1_67vj1") -script = ExtResource("2_rfuq6") -rocket_scene = ExtResource("3_xn783") -target_icon_scene = ExtResource("4_ptwpb") -stats = ExtResource("3_7mndo") +[node name="Sprite3D" parent="." index="0"] +texture = SubResource("AtlasTexture_f4p4w") -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -libraries = { -"": SubResource("AnimationLibrary_ntl6p") -} - -[node name="RayCast3D" type="RayCast3D" parent="."] +[node name="RayCast3D" type="RayCast3D" parent="." index="2"] +target_position = Vector3(0, 0, -100) collision_mask = 4 -[node name="TextureRect" type="TextureRect" parent="."] -visible = false -texture_filter = 1 +[node name="TextureRect" type="TextureRect" parent="." index="3"] anchors_preset = 8 anchor_left = 0.5 anchor_top = 0.5 @@ -76,4 +43,4 @@ offset_right = 20.0 offset_bottom = 20.0 grow_horizontal = 2 grow_vertical = 2 -texture = ExtResource("5_nbrvn") +texture = SubResource("AtlasTexture_ewxon") diff --git a/PCs/Universal/ClassCards/RocketLauncher/weapon_stats.tres b/PCs/Universal/ClassCards/RocketLauncher/weapon_stats.tres new file mode 100644 index 0000000..bfe4ea8 --- /dev/null +++ b/PCs/Universal/ClassCards/RocketLauncher/weapon_stats.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="CardText" load_steps=6 format=3 uid="uid://d2yo07m2mp2mp"] + +[ext_resource type="Script" path="res://Scripts/Resources/stat_attribute.gd" id="1_1le4i"] +[ext_resource type="Script" path="res://Scripts/Resources/card_text.gd" id="2_0trth"] + +[sub_resource type="Resource" id="Resource_4fjm2"] +script = ExtResource("1_1le4i") +key = "Fire Delay" +value = 2.0 + +[sub_resource type="Resource" id="Resource_uwj4j"] +script = ExtResource("1_1le4i") +key = "Target Limit" +value = 3.0 + +[sub_resource type="Resource" id="Resource_6qv5v"] +script = ExtResource("1_1le4i") +key = "Damage" +value = 8.0 + +[resource] +script = ExtResource("2_0trth") +target_type = 0 +attributes = Array[ExtResource("1_1le4i")]([SubResource("Resource_4fjm2"), SubResource("Resource_uwj4j"), SubResource("Resource_6qv5v")]) +text = "Every /Fire Delay\\s, hold to target up to /Target Limit\\ enemies and release to fire homing rockets that deal /Damage\\ damage" diff --git a/PCs/Universal/ClassCards/Sniper/card_sniper.tres b/PCs/Universal/ClassCards/Sniper/card_sniper.tres index 345c409..49678c6 100644 --- a/PCs/Universal/ClassCards/Sniper/card_sniper.tres +++ b/PCs/Universal/ClassCards/Sniper/card_sniper.tres @@ -1,19 +1,23 @@ -[gd_resource type="Resource" script_class="Card" load_steps=7 format=3 uid="uid://cvf5bxtu6er17"] +[gd_resource type="Resource" script_class="Card" load_steps=8 format=3 uid="uid://ckm88acryitl4"] [ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_5vmtk"] -[ext_resource type="Texture2D" uid="uid://fmqq24n7rwvm" path="res://Assets/TextureAtlases/g_sniper.tres" id="2_skiu7"] -[ext_resource type="Resource" uid="uid://85iany3x0uv2" path="res://Resources/WeaponStats/sniper.tres" id="3_acfmb"] -[ext_resource type="PackedScene" uid="uid://v21rc7vtqp8l" path="res://Scenes/Weapons/scopedweapon.tscn" id="3_i0e3w"] -[ext_resource type="Resource" uid="uid://ddw7pj1ckwmp8" path="res://Resources/TurretStats/sniper.tres" id="3_tfyul"] -[ext_resource type="PackedScene" uid="uid://ryhc48vl36fc" path="res://Scenes/Towers/snipertower.tscn" id="4_kbb6b"] +[ext_resource type="Texture2D" uid="uid://cv2eycs1j0ho7" path="res://PCs/Universal/ClassCards/Sniper/g_sniper.png" id="2_go86x"] +[ext_resource type="Resource" uid="uid://eb0by6ba1d43" path="res://PCs/Universal/ClassCards/Sniper/tower_stats.tres" id="3_6i55t"] +[ext_resource type="PackedScene" uid="uid://bd65e03fscyxr" path="res://PCs/Universal/ClassCards/Sniper/weapon_sniper.tscn" id="3_qfpvu"] +[ext_resource type="Resource" uid="uid://3y7n1vdvf822" path="res://PCs/Universal/ClassCards/Sniper/weapon_stats.tres" id="4_7kvq1"] +[ext_resource type="PackedScene" uid="uid://bt4qbc5lp4nhr" path="res://PCs/Universal/ClassCards/Sniper/tower_sniper.tscn" id="4_k5nhs"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_fckie"] +atlas = ExtResource("2_go86x") +region = Rect2(0, 0, 64, 64) [resource] script = ExtResource("1_5vmtk") title = "Sniper" rarity = 4 faction = 0 -sprite = ExtResource("2_skiu7") -turret = ExtResource("4_kbb6b") -weapon = ExtResource("3_i0e3w") -weapon_stats = ExtResource("3_acfmb") -tower_stats = ExtResource("3_tfyul") +sprite = SubResource("AtlasTexture_fckie") +turret_scene = ExtResource("4_k5nhs") +weapon_scene = ExtResource("3_qfpvu") +weapon_stats = ExtResource("4_7kvq1") +tower_stats = ExtResource("3_6i55t") diff --git a/Assets/Textures/g_sniper.png b/PCs/Universal/ClassCards/Sniper/g_sniper.png similarity index 100% rename from Assets/Textures/g_sniper.png rename to PCs/Universal/ClassCards/Sniper/g_sniper.png diff --git a/Assets/Textures/g_sniper.png.import b/PCs/Universal/ClassCards/Sniper/g_sniper.png.import similarity index 70% rename from Assets/Textures/g_sniper.png.import rename to PCs/Universal/ClassCards/Sniper/g_sniper.png.import index 5200106..cb614d7 100644 --- a/Assets/Textures/g_sniper.png.import +++ b/PCs/Universal/ClassCards/Sniper/g_sniper.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://cv2eycs1j0ho7" -path="res://.godot/imported/g_sniper.png-540afb6cf2bb7c1448f9a3771f0c56fe.ctex" +path="res://.godot/imported/g_sniper.png-60dd6bed4ee309636ac895a2e167e09c.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://Assets/Textures/g_sniper.png" -dest_files=["res://.godot/imported/g_sniper.png-540afb6cf2bb7c1448f9a3771f0c56fe.ctex"] +source_file="res://PCs/Universal/ClassCards/Sniper/g_sniper.png" +dest_files=["res://.godot/imported/g_sniper.png-60dd6bed4ee309636ac895a2e167e09c.ctex"] [params] diff --git a/Assets/Textures/scopetest.png b/PCs/Universal/ClassCards/Sniper/scopetest.png similarity index 100% rename from Assets/Textures/scopetest.png rename to PCs/Universal/ClassCards/Sniper/scopetest.png diff --git a/Assets/Textures/scopetest.png.import b/PCs/Universal/ClassCards/Sniper/scopetest.png.import similarity index 70% rename from Assets/Textures/scopetest.png.import rename to PCs/Universal/ClassCards/Sniper/scopetest.png.import index ad19e53..4cbbd7d 100644 --- a/Assets/Textures/scopetest.png.import +++ b/PCs/Universal/ClassCards/Sniper/scopetest.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://bepgxu7wtcl1i" -path="res://.godot/imported/scopetest.png-67622c4a1fb91662a6422da2eebebaa6.ctex" +path="res://.godot/imported/scopetest.png-6eaf83096c5e4493d2c0b323ec8f5877.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://Assets/Textures/scopetest.png" -dest_files=["res://.godot/imported/scopetest.png-67622c4a1fb91662a6422da2eebebaa6.ctex"] +source_file="res://PCs/Universal/ClassCards/Sniper/scopetest.png" +dest_files=["res://.godot/imported/scopetest.png-6eaf83096c5e4493d2c0b323ec8f5877.ctex"] [params] diff --git a/PCs/Universal/ClassCards/Sniper/tower_sniper.gd b/PCs/Universal/ClassCards/Sniper/tower_sniper.gd new file mode 100644 index 0000000..83ea726 --- /dev/null +++ b/PCs/Universal/ClassCards/Sniper/tower_sniper.gd @@ -0,0 +1,2 @@ +extends HitscanTower +class_name SniperTower diff --git a/PCs/Universal/ClassCards/Sniper/tower_sniper.tscn b/PCs/Universal/ClassCards/Sniper/tower_sniper.tscn index d16f549..5087da1 100644 --- a/PCs/Universal/ClassCards/Sniper/tower_sniper.tscn +++ b/PCs/Universal/ClassCards/Sniper/tower_sniper.tscn @@ -1,37 +1,10 @@ -[gd_scene load_steps=4 format=3 uid="uid://ryhc48vl36fc"] +[gd_scene load_steps=4 format=3 uid="uid://bt4qbc5lp4nhr"] -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Assault/tower.gd" id="1_tmpm5"] -[ext_resource type="Resource" uid="uid://ddw7pj1ckwmp8" path="res://Resources/TurretStats/sniper.tres" id="2_opda8"] +[ext_resource type="PackedScene" uid="uid://dumiyjlnea4gq" path="res://Scenes/Towers/hitscan_tower.tscn" id="1_x1nem"] +[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Sniper/tower_sniper.gd" id="2_v5fr7"] +[ext_resource type="Resource" uid="uid://eb0by6ba1d43" path="res://PCs/Universal/ClassCards/Sniper/tower_stats.tres" id="3_a0vis"] -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_mt54a"] -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("model", "range_sphere", "minimap_range_sphere")] -script = ExtResource("1_tmpm5") -stats = ExtResource("2_opda8") -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"] - -[node name="CSGBox3D3" type="CSGBox3D" parent="Model"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.776406) -size = Vector3(0.481654, 0.427749, 1.38438) - -[node name="CSGSphere3D" type="CSGSphere3D" parent="Model"] -visible = false -radius = 7.5 -material = SubResource("StandardMaterial3D_mt54a") - -[node name="CSGSphere3D2" type="CSGSphere3D" parent="Model"] -visible = false -layers = 4 -radius = 7.5 -material = SubResource("StandardMaterial3D_mt54a") +[node name="HitscanTower" instance=ExtResource("1_x1nem")] +script = ExtResource("2_v5fr7") +target_type = 3 +stats = ExtResource("3_a0vis") diff --git a/PCs/Universal/ClassCards/Sniper/tower_stats.tres b/PCs/Universal/ClassCards/Sniper/tower_stats.tres new file mode 100644 index 0000000..1c68601 --- /dev/null +++ b/PCs/Universal/ClassCards/Sniper/tower_stats.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="CardText" load_steps=6 format=3 uid="uid://eb0by6ba1d43"] + +[ext_resource type="Script" path="res://Scripts/Resources/stat_attribute.gd" id="1_ihl3s"] +[ext_resource type="Script" path="res://Scripts/Resources/card_text.gd" id="1_otwn2"] + +[sub_resource type="Resource" id="Resource_1ct8q"] +script = ExtResource("1_ihl3s") +key = "Fire Delay" +value = 2.0 + +[sub_resource type="Resource" id="Resource_erx05"] +script = ExtResource("1_ihl3s") +key = "Damage" +value = 20.0 + +[sub_resource type="Resource" id="Resource_vfpmb"] +script = ExtResource("1_ihl3s") +key = "Range" +value = 50.0 + +[resource] +script = ExtResource("1_otwn2") +target_type = 3 +attributes = Array[ExtResource("1_ihl3s")]([SubResource("Resource_1ct8q"), SubResource("Resource_erx05"), SubResource("Resource_vfpmb")]) +text = "Fires a shot every /Fire Delay\\ seconds dealing /Damage\\ damage at a range of /Range\\m" diff --git a/PCs/Universal/ClassCards/Sniper/scopedweapon.gd b/PCs/Universal/ClassCards/Sniper/weapon_sniper.gd similarity index 51% rename from PCs/Universal/ClassCards/Sniper/scopedweapon.gd rename to PCs/Universal/ClassCards/Sniper/weapon_sniper.gd index 1145fc7..261c604 100644 --- a/PCs/Universal/ClassCards/Sniper/scopedweapon.gd +++ b/PCs/Universal/ClassCards/Sniper/weapon_sniper.gd @@ -1,15 +1,15 @@ -extends Weapon -class_name ScopedWeapon +extends HitscanWeapon +class_name SniperWeapon -var scope_mask : Texture +@export var scope_mask : CanvasLayer func hold_second_trigger(): super.hold_second_trigger() - $CanvasLayer.set_visible(true) + scope_mask.set_visible(true) hero.set_zoom_factor(3.0) func release_second_trigger(): super.release_second_trigger() - $CanvasLayer.set_visible(false) + scope_mask.set_visible(false) diff --git a/PCs/Universal/ClassCards/Sniper/weapon_sniper.tscn b/PCs/Universal/ClassCards/Sniper/weapon_sniper.tscn index 4518bbf..e54d42c 100644 --- a/PCs/Universal/ClassCards/Sniper/weapon_sniper.tscn +++ b/PCs/Universal/ClassCards/Sniper/weapon_sniper.tscn @@ -1,85 +1,30 @@ -[gd_scene load_steps=8 format=3 uid="uid://v21rc7vtqp8l"] +[gd_scene load_steps=7 format=3 uid="uid://bd65e03fscyxr"] -[ext_resource type="Texture2D" uid="uid://fmqq24n7rwvm" path="res://Assets/TextureAtlases/g_sniper.tres" id="1_6a01i"] -[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Sniper/scopedweapon.gd" id="2_qemq6"] -[ext_resource type="Resource" uid="uid://85iany3x0uv2" path="res://Resources/WeaponStats/sniper.tres" id="3_3c36k"] -[ext_resource type="Texture2D" uid="uid://bepgxu7wtcl1i" path="res://Assets/Textures/scopetest.png" id="3_pyugo"] +[ext_resource type="PackedScene" uid="uid://difwo7wlyqr3h" path="res://Scenes/Weapons/hitscan_weapon.tscn" id="1_6ph0d"] +[ext_resource type="Script" path="res://PCs/Universal/ClassCards/Sniper/weapon_sniper.gd" id="2_r0w4v"] +[ext_resource type="Texture2D" uid="uid://bepgxu7wtcl1i" path="res://PCs/Universal/ClassCards/Sniper/scopetest.png" id="3_fhx8q"] +[ext_resource type="Resource" uid="uid://3y7n1vdvf822" path="res://PCs/Universal/ClassCards/Sniper/weapon_stats.tres" id="3_mmfq3"] +[ext_resource type="Texture2D" uid="uid://cv2eycs1j0ho7" path="res://PCs/Universal/ClassCards/Sniper/g_sniper.png" id="4_ub37g"] -[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_cussn"] +atlas = ExtResource("4_ub37g") +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="HitscanWeapon" node_paths=PackedStringArray("scope_mask") instance=ExtResource("1_6ph0d")] +script = ExtResource("2_r0w4v") +scope_mask = NodePath("CanvasLayer") +stats = ExtResource("3_mmfq3") -[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_cussn") -[node name="Weapon" type="Sprite3D"] -layers = 2 -billboard = 1 -texture_filter = 0 -texture = ExtResource("1_6a01i") -script = ExtResource("2_qemq6") -stats = ExtResource("3_3c36k") - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -libraries = { -"": SubResource("AnimationLibrary_ntl6p") -} - -[node name="RayCast3D" type="RayCast3D" parent="."] -collision_mask = 4 - -[node name="CanvasLayer" type="CanvasLayer" parent="."] -layer = 2 +[node name="CanvasLayer" type="CanvasLayer" parent="." index="4"] visible = false -[node name="TextureRect" type="TextureRect" parent="CanvasLayer"] -clip_children = 1 -visibility_layer = 2 -texture_filter = 1 +[node name="TextureRect" type="TextureRect" parent="CanvasLayer" index="0"] anchors_preset = 15 anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -mouse_filter = 2 -texture = ExtResource("3_pyugo") - -[node name="ColorRect" type="ColorRect" parent="CanvasLayer/TextureRect"] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -mouse_filter = 2 -color = Color(0, 0, 0, 1) +texture = ExtResource("3_fhx8q") diff --git a/PCs/Universal/ClassCards/Sniper/weapon_stats.tres b/PCs/Universal/ClassCards/Sniper/weapon_stats.tres new file mode 100644 index 0000000..3e9b884 --- /dev/null +++ b/PCs/Universal/ClassCards/Sniper/weapon_stats.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="CardText" load_steps=6 format=3 uid="uid://3y7n1vdvf822"] + +[ext_resource type="Script" path="res://Scripts/Resources/stat_attribute.gd" id="1_7xbx2"] +[ext_resource type="Script" path="res://Scripts/Resources/card_text.gd" id="1_t3oy2"] + +[sub_resource type="Resource" id="Resource_58kde"] +script = ExtResource("1_7xbx2") +key = "Fire Delay" +value = 1.2 + +[sub_resource type="Resource" id="Resource_jl4jv"] +script = ExtResource("1_7xbx2") +key = "Damage" +value = 30.0 + +[sub_resource type="Resource" id="Resource_28kyj"] +script = ExtResource("1_7xbx2") +key = "Range" +value = 50.0 + +[resource] +script = ExtResource("1_t3oy2") +target_type = 0 +attributes = Array[ExtResource("1_7xbx2")]([SubResource("Resource_58kde"), SubResource("Resource_jl4jv"), SubResource("Resource_28kyj")]) +text = "Fires a shot every /Fire Delay\\ seconds dealing /Damage\\ damage at a range of /Range\\m" diff --git a/PCs/Universal/ClassCards/SpeedEnhancer/card_speed_enhancer.tres b/PCs/Universal/ClassCards/SpeedEnhancer/card_speed_enhancer.tres deleted file mode 100644 index 396a94c..0000000 --- a/PCs/Universal/ClassCards/SpeedEnhancer/card_speed_enhancer.tres +++ /dev/null @@ -1,11 +0,0 @@ -[gd_resource type="Resource" script_class="Card" load_steps=3 format=3 uid="uid://bkhbxi82sd3y4"] - -[ext_resource type="Script" path="res://Scripts/Resources/card.gd" id="1_lii00"] -[ext_resource type="Texture2D" uid="uid://ca4lwwd3e0y73" path="res://Assets/TextureAtlases/g_assault.tres" id="2_npyaf"] - -[resource] -script = ExtResource("1_lii00") -title = "Speed Enhancer" -rarity = 2 -faction = 0 -sprite = ExtResource("2_npyaf") diff --git a/PCs/hero.gd b/PCs/hero.gd index 92fd4ab..8b6423d 100644 --- a/PCs/hero.gd +++ b/PCs/hero.gd @@ -16,15 +16,14 @@ signal died @export var sprite : EightDirectionSprite3D @export var interaction_raycast : RayCast3D @export var inventory : Inventory -@export var weapon : Weapon @export var card : CardInHand @export var pause_menu_scene : PackedScene -@export var weapon_scene : PackedScene @export var hud : HUD @export var movement : PlayerMovement @export var sprint_zoom_speed := 0.2 var equipped_card : Card +var weapon : Weapon var paused := false var editing_mode := true var profile: PlayerProfile @@ -206,15 +205,14 @@ func equip_weapon(): unequip_weapon() return if inventory.contents.size() > 0: - networked_equip_weapon.rpc() equipped_card = inventory.remove() - weapon = equipped_card.weapon.instantiate() + networked_equip_weapon.rpc(Data.cards.find(equipped_card)) + weapon = equipped_card.weapon_scene.instantiate() weapon.name = "weapon" weapon.set_multiplayer_authority(multiplayer.get_unique_id()) - right_hand.add_child(weapon) gauntlet_sprite.set_visible(false) - weapon.set_raycast_origin(camera) weapon.set_hero(self) + right_hand.add_child(weapon) check_left_hand_valid() @@ -234,14 +232,13 @@ func networked_set_ready_state(state: bool): @rpc("reliable") -func networked_equip_weapon(): - equipped_card = inventory.remove() - weapon = equipped_card.weapon.instantiate() +func networked_equip_weapon(card_index): + equipped_card = Data.cards[card_index] + weapon = equipped_card.weapon_scene.instantiate() weapon.set_multiplayer_authority(multiplayer.get_remote_sender_id()) weapon.name = "weapon" - right_hand.add_child(weapon) - weapon.set_raycast_origin(camera) weapon.set_hero(self) + right_hand.add_child(weapon) @rpc("reliable") diff --git a/PCs/hero.tscn b/PCs/hero.tscn index 34cc91a..a5dbe10 100644 --- a/PCs/hero.tscn +++ b/PCs/hero.tscn @@ -1,11 +1,10 @@ -[gd_scene load_steps=29 format=3 uid="uid://dxgxbtf68lcv5"] +[gd_scene load_steps=28 format=3 uid="uid://dxgxbtf68lcv5"] [ext_resource type="Script" path="res://PCs/hero.gd" id="1_pihpe"] [ext_resource type="Resource" uid="uid://b5pc3frhx467q" path="res://PCs/Red/red.tres" id="2_dbyo0"] [ext_resource type="PackedScene" uid="uid://ri8r03wqy80t" path="res://Scenes/8_direction_sprite.tscn" id="2_ib0t5"] [ext_resource type="Texture2D" uid="uid://dkbkam81k355s" path="res://Assets/TextureAtlases/gauntlet.tres" id="3_5myy0"] [ext_resource type="PackedScene" uid="uid://buvgdem68wtev" path="res://Scenes/Menus/pause_menu.tscn" id="3_avnsx"] -[ext_resource type="PackedScene" uid="uid://d1xe6hsq05110" path="res://PCs/Universal/ClassCards/Assault/weapon_assault.tscn" id="4_b0lpv"] [ext_resource type="PackedScene" uid="uid://dixtx38u4jhd7" path="res://Scenes/UI/card_hand.tscn" id="4_mwtvp"] [ext_resource type="PackedScene" uid="uid://dqt1ggtkpkuhs" path="res://Scenes/gauntlet.tscn" id="5_jlxb3"] [ext_resource type="Script" path="res://Scripts/inventory.gd" id="6_cf5ap"] @@ -72,7 +71,6 @@ interaction_raycast = NodePath("Head/RayCast3D") inventory = NodePath("Inventory") card = NodePath("SubViewport/Head2/LeftHand/SubViewport/Node2D") pause_menu_scene = ExtResource("3_avnsx") -weapon_scene = ExtResource("4_b0lpv") hud = NodePath("HUD") movement = NodePath("PlayerMovement") diff --git a/Resources/TurretStats/accelerator.tres b/Resources/TurretStats/accelerator.tres deleted file mode 100644 index 77969f0..0000000 --- a/Resources/TurretStats/accelerator.tres +++ /dev/null @@ -1,10 +0,0 @@ -[gd_resource type="Resource" script_class="TowerStats" load_steps=2 format=3 uid="uid://cc20tomywj0jm"] - -[ext_resource type="Script" path="res://Scripts/Resources/TowerStats.gd" id="1_jhska"] - -[resource] -script = ExtResource("1_jhska") -can_target = 1 -damage = 1.0 -fire_range = 8.0 -fire_rate = 4.0 diff --git a/Resources/TurretStats/assault.tres b/Resources/TurretStats/assault.tres deleted file mode 100644 index 4df20d6..0000000 --- a/Resources/TurretStats/assault.tres +++ /dev/null @@ -1,10 +0,0 @@ -[gd_resource type="Resource" script_class="TowerStats" load_steps=2 format=3 uid="uid://cktq4o3yuxgsa"] - -[ext_resource type="Script" path="res://Scripts/Resources/TowerStats.gd" id="1_ujduk"] - -[resource] -script = ExtResource("1_ujduk") -can_target = 1 -damage = 1.0 -fire_range = 8.0 -fire_rate = 5.0 diff --git a/Resources/TurretStats/blowdart.tres b/Resources/TurretStats/blowdart.tres deleted file mode 100644 index d5fb20c..0000000 --- a/Resources/TurretStats/blowdart.tres +++ /dev/null @@ -1,10 +0,0 @@ -[gd_resource type="Resource" script_class="TowerStats" load_steps=2 format=3 uid="uid://by1gyra5a4aks"] - -[ext_resource type="Script" path="res://Scripts/Resources/TowerStats.gd" id="1_cofk4"] - -[resource] -script = ExtResource("1_cofk4") -can_target = 3 -damage = 10.0 -fire_range = 20.0 -fire_rate = 1.0 diff --git a/Resources/TurretStats/bomblauncher.tres b/Resources/TurretStats/bomblauncher.tres deleted file mode 100644 index 213f30f..0000000 --- a/Resources/TurretStats/bomblauncher.tres +++ /dev/null @@ -1,10 +0,0 @@ -[gd_resource type="Resource" script_class="TowerStats" load_steps=2 format=3 uid="uid://crmsk6lvp5i4e"] - -[ext_resource type="Script" path="res://Scripts/Resources/TowerStats.gd" id="1_2a4i2"] - -[resource] -script = ExtResource("1_2a4i2") -can_target = 1 -damage = 30.0 -fire_range = 10.0 -fire_rate = 0.2 diff --git a/Resources/TurretStats/fireball.tres b/Resources/TurretStats/fireball.tres deleted file mode 100644 index 5b79927..0000000 --- a/Resources/TurretStats/fireball.tres +++ /dev/null @@ -1,10 +0,0 @@ -[gd_resource type="Resource" script_class="TowerStats" load_steps=2 format=3 uid="uid://b8a635kajtq6"] - -[ext_resource type="Script" path="res://Scripts/Resources/TowerStats.gd" id="1_3jfph"] - -[resource] -script = ExtResource("1_3jfph") -can_target = 3 -damage = 10.0 -fire_range = 20.0 -fire_rate = 1.0 diff --git a/Resources/TurretStats/flametower.tres b/Resources/TurretStats/flametower.tres deleted file mode 100644 index 142a0c8..0000000 --- a/Resources/TurretStats/flametower.tres +++ /dev/null @@ -1,10 +0,0 @@ -[gd_resource type="Resource" script_class="TowerStats" load_steps=2 format=3 uid="uid://5ywipj3632u8"] - -[ext_resource type="Script" path="res://Scripts/Resources/TowerStats.gd" id="1_h37p4"] - -[resource] -script = ExtResource("1_h37p4") -can_target = 1 -damage = 0.0 -fire_range = 5.0 -fire_rate = 1.0 diff --git a/Resources/TurretStats/glue.tres b/Resources/TurretStats/glue.tres deleted file mode 100644 index ba435d6..0000000 --- a/Resources/TurretStats/glue.tres +++ /dev/null @@ -1,10 +0,0 @@ -[gd_resource type="Resource" script_class="TowerStats" load_steps=2 format=3 uid="uid://dhcukj44khkd7"] - -[ext_resource type="Script" path="res://Scripts/Resources/TowerStats.gd" id="1_ntl50"] - -[resource] -script = ExtResource("1_ntl50") -can_target = 1 -damage = 0.0 -fire_range = 20.0 -fire_rate = 1.0 diff --git a/Resources/TurretStats/icicle.tres b/Resources/TurretStats/icicle.tres deleted file mode 100644 index 3ac28b4..0000000 --- a/Resources/TurretStats/icicle.tres +++ /dev/null @@ -1,10 +0,0 @@ -[gd_resource type="Resource" script_class="TowerStats" load_steps=2 format=3 uid="uid://cdmkajdgfpk6h"] - -[ext_resource type="Script" path="res://Scripts/Resources/TowerStats.gd" id="1_sxyf1"] - -[resource] -script = ExtResource("1_sxyf1") -can_target = 3 -damage = 10.0 -fire_range = 20.0 -fire_rate = 1.0 diff --git a/Resources/TurretStats/reactor.tres b/Resources/TurretStats/reactor.tres deleted file mode 100644 index c87c437..0000000 --- a/Resources/TurretStats/reactor.tres +++ /dev/null @@ -1,10 +0,0 @@ -[gd_resource type="Resource" script_class="TowerStats" load_steps=2 format=3 uid="uid://baa8sauri4218"] - -[ext_resource type="Script" path="res://Scripts/Resources/TowerStats.gd" id="1_uugt6"] - -[resource] -script = ExtResource("1_uugt6") -can_target = 1 -damage = 10.0 -fire_range = 20.0 -fire_rate = 1.0 diff --git a/Resources/TurretStats/refridgerator.tres b/Resources/TurretStats/refridgerator.tres deleted file mode 100644 index 65f67a1..0000000 --- a/Resources/TurretStats/refridgerator.tres +++ /dev/null @@ -1,10 +0,0 @@ -[gd_resource type="Resource" script_class="TowerStats" load_steps=2 format=3 uid="uid://ugpxwdjfvssu"] - -[ext_resource type="Script" path="res://Scripts/Resources/TowerStats.gd" id="1_71ewu"] - -[resource] -script = ExtResource("1_71ewu") -can_target = 1 -damage = 10.0 -fire_range = 4.0 -fire_rate = 2.0 diff --git a/Resources/TurretStats/rocketlauncher.tres b/Resources/TurretStats/rocketlauncher.tres deleted file mode 100644 index e1d1c24..0000000 --- a/Resources/TurretStats/rocketlauncher.tres +++ /dev/null @@ -1,10 +0,0 @@ -[gd_resource type="Resource" script_class="TowerStats" load_steps=2 format=3 uid="uid://duofn25nuu84q"] - -[ext_resource type="Script" path="res://Scripts/Resources/TowerStats.gd" id="1_g11ny"] - -[resource] -script = ExtResource("1_g11ny") -can_target = 2 -damage = 6.0 -fire_range = 20.0 -fire_rate = 0.15 diff --git a/Resources/TurretStats/sniper.tres b/Resources/TurretStats/sniper.tres deleted file mode 100644 index 2cc921c..0000000 --- a/Resources/TurretStats/sniper.tres +++ /dev/null @@ -1,10 +0,0 @@ -[gd_resource type="Resource" script_class="TowerStats" load_steps=2 format=3 uid="uid://ddw7pj1ckwmp8"] - -[ext_resource type="Script" path="res://Scripts/Resources/TowerStats.gd" id="1_xsq5r"] - -[resource] -script = ExtResource("1_xsq5r") -can_target = 3 -damage = 20.0 -fire_range = 20.0 -fire_rate = 0.6 diff --git a/Resources/WeaponStats/accelerator.tres b/Resources/WeaponStats/accelerator.tres deleted file mode 100644 index 4cb4e70..0000000 --- a/Resources/WeaponStats/accelerator.tres +++ /dev/null @@ -1,9 +0,0 @@ -[gd_resource type="Resource" script_class="WeaponStats" load_steps=2 format=3 uid="uid://ouwge5etb4me"] - -[ext_resource type="Script" path="res://Scripts/Resources/WeaponStats.gd" id="1_lgw1t"] - -[resource] -script = ExtResource("1_lgw1t") -damage = 1 -fire_rate = 12.0 -fire_range = 25.0 diff --git a/Resources/WeaponStats/assault.tres b/Resources/WeaponStats/assault.tres deleted file mode 100644 index fbb9b22..0000000 --- a/Resources/WeaponStats/assault.tres +++ /dev/null @@ -1,9 +0,0 @@ -[gd_resource type="Resource" script_class="WeaponStats" load_steps=2 format=3 uid="uid://w15ojqyxd72q"] - -[ext_resource type="Script" path="res://Scripts/Resources/WeaponStats.gd" id="1_ttw2m"] - -[resource] -script = ExtResource("1_ttw2m") -damage = 3 -fire_rate = 10.0 -fire_range = 25.0 diff --git a/Resources/WeaponStats/blowdart.tres b/Resources/WeaponStats/blowdart.tres deleted file mode 100644 index b8af080..0000000 --- a/Resources/WeaponStats/blowdart.tres +++ /dev/null @@ -1,9 +0,0 @@ -[gd_resource type="Resource" script_class="WeaponStats" load_steps=2 format=3 uid="uid://dhegsd45xi7na"] - -[ext_resource type="Script" path="res://Scripts/Resources/WeaponStats.gd" id="1_xkaiy"] - -[resource] -script = ExtResource("1_xkaiy") -damage = 0 -fire_rate = 1.0 -fire_range = 30.0 diff --git a/Resources/WeaponStats/bomblauncher.tres b/Resources/WeaponStats/bomblauncher.tres deleted file mode 100644 index c86aec3..0000000 --- a/Resources/WeaponStats/bomblauncher.tres +++ /dev/null @@ -1,9 +0,0 @@ -[gd_resource type="Resource" script_class="WeaponStats" load_steps=2 format=3 uid="uid://kbaiy5u6imtu"] - -[ext_resource type="Script" path="res://Scripts/Resources/WeaponStats.gd" id="1_xiddx"] - -[resource] -script = ExtResource("1_xiddx") -damage = 10 -fire_rate = 1.0 -fire_range = 6.0 diff --git a/Resources/WeaponStats/fireball.tres b/Resources/WeaponStats/fireball.tres deleted file mode 100644 index 3b9b63a..0000000 --- a/Resources/WeaponStats/fireball.tres +++ /dev/null @@ -1,9 +0,0 @@ -[gd_resource type="Resource" script_class="WeaponStats" load_steps=2 format=3 uid="uid://c473xvhm2g6m0"] - -[ext_resource type="Script" path="res://Scripts/Resources/WeaponStats.gd" id="1_4kg7u"] - -[resource] -script = ExtResource("1_4kg7u") -damage = 0 -fire_rate = 1.0 -fire_range = 0.0 diff --git a/Resources/WeaponStats/flamethrower.tres b/Resources/WeaponStats/flamethrower.tres deleted file mode 100644 index bff4ee3..0000000 --- a/Resources/WeaponStats/flamethrower.tres +++ /dev/null @@ -1,9 +0,0 @@ -[gd_resource type="Resource" script_class="WeaponStats" load_steps=2 format=3 uid="uid://c4ihsd13o1esd"] - -[ext_resource type="Script" path="res://Scripts/Resources/WeaponStats.gd" id="1_kt5ga"] - -[resource] -script = ExtResource("1_kt5ga") -damage = 0 -fire_rate = 2.0 -fire_range = 3.0 diff --git a/Resources/WeaponStats/glue.tres b/Resources/WeaponStats/glue.tres deleted file mode 100644 index 22d1e79..0000000 --- a/Resources/WeaponStats/glue.tres +++ /dev/null @@ -1,9 +0,0 @@ -[gd_resource type="Resource" script_class="WeaponStats" load_steps=2 format=3 uid="uid://dnucn65m12dmq"] - -[ext_resource type="Script" path="res://Scripts/Resources/WeaponStats.gd" id="1_s171y"] - -[resource] -script = ExtResource("1_s171y") -damage = 0 -fire_rate = 2.0 -fire_range = 20.0 diff --git a/Resources/WeaponStats/icicle.tres b/Resources/WeaponStats/icicle.tres deleted file mode 100644 index 60c8d9f..0000000 --- a/Resources/WeaponStats/icicle.tres +++ /dev/null @@ -1,9 +0,0 @@ -[gd_resource type="Resource" script_class="WeaponStats" load_steps=2 format=3 uid="uid://dsmlqik586soo"] - -[ext_resource type="Script" path="res://Scripts/Resources/WeaponStats.gd" id="1_irad3"] - -[resource] -script = ExtResource("1_irad3") -damage = 0 -fire_rate = 0.5 -fire_range = 20.0 diff --git a/Resources/WeaponStats/reactor.tres b/Resources/WeaponStats/reactor.tres deleted file mode 100644 index 8c0a8dc..0000000 --- a/Resources/WeaponStats/reactor.tres +++ /dev/null @@ -1,9 +0,0 @@ -[gd_resource type="Resource" script_class="WeaponStats" load_steps=2 format=3 uid="uid://b5eakeawu3gle"] - -[ext_resource type="Script" path="res://Scripts/Resources/WeaponStats.gd" id="1_np134"] - -[resource] -script = ExtResource("1_np134") -damage = 0 -fire_rate = 2.0 -fire_range = 10.0 diff --git a/Resources/WeaponStats/refridgerator.tres b/Resources/WeaponStats/refridgerator.tres deleted file mode 100644 index e69cdcd..0000000 --- a/Resources/WeaponStats/refridgerator.tres +++ /dev/null @@ -1,9 +0,0 @@ -[gd_resource type="Resource" script_class="WeaponStats" load_steps=2 format=3 uid="uid://cpyrdja71sboe"] - -[ext_resource type="Script" path="res://Scripts/Resources/WeaponStats.gd" id="1_uybdl"] - -[resource] -script = ExtResource("1_uybdl") -damage = 0 -fire_rate = 0.5 -fire_range = 5.0 diff --git a/Resources/WeaponStats/rocketlauncher.tres b/Resources/WeaponStats/rocketlauncher.tres deleted file mode 100644 index 3603a23..0000000 --- a/Resources/WeaponStats/rocketlauncher.tres +++ /dev/null @@ -1,9 +0,0 @@ -[gd_resource type="Resource" script_class="WeaponStats" load_steps=2 format=3 uid="uid://dtfgyt85mp1ar"] - -[ext_resource type="Script" path="res://Scripts/Resources/WeaponStats.gd" id="1_sg2a6"] - -[resource] -script = ExtResource("1_sg2a6") -damage = 8 -fire_rate = 0.5 -fire_range = 80.0 diff --git a/Resources/WeaponStats/sniper.tres b/Resources/WeaponStats/sniper.tres deleted file mode 100644 index 9a29f13..0000000 --- a/Resources/WeaponStats/sniper.tres +++ /dev/null @@ -1,9 +0,0 @@ -[gd_resource type="Resource" script_class="WeaponStats" load_steps=2 format=3 uid="uid://85iany3x0uv2"] - -[ext_resource type="Script" path="res://Scripts/Resources/WeaponStats.gd" id="1_idnx0"] - -[resource] -script = ExtResource("1_idnx0") -damage = 30 -fire_rate = 1.2 -fire_range = 80.0 diff --git a/Scenes/Projectiles/explosive_projectile.tscn b/Scenes/Projectiles/explosive_projectile.tscn new file mode 100644 index 0000000..8000dd6 --- /dev/null +++ b/Scenes/Projectiles/explosive_projectile.tscn @@ -0,0 +1,8 @@ +[gd_scene load_steps=3 format=3 uid="uid://7f4dfphgiswr"] + +[ext_resource type="PackedScene" uid="uid://c8qjlgam6wuo0" path="res://Scenes/Projectiles/projectile.tscn" id="1_136w8"] +[ext_resource type="Script" path="res://Scripts/Projectiles/explosive_projectile.gd" id="2_3adg2"] + +[node name="ExplosiveProjectile" instance=ExtResource("1_136w8")] +script = ExtResource("2_3adg2") +explosion_range = 3.0 diff --git a/Scenes/Projectiles/homing_projectile.tscn b/Scenes/Projectiles/homing_projectile.tscn new file mode 100644 index 0000000..60af3b2 --- /dev/null +++ b/Scenes/Projectiles/homing_projectile.tscn @@ -0,0 +1,10 @@ +[gd_scene load_steps=3 format=3 uid="uid://di2wwvkv4wov1"] + +[ext_resource type="PackedScene" uid="uid://7f4dfphgiswr" path="res://Scenes/Projectiles/explosive_projectile.tscn" id="1_it3tw"] +[ext_resource type="Script" path="res://Scripts/Projectiles/homing_projectile.gd" id="2_etdxg"] + +[node name="HomingProjectile" instance=ExtResource("1_it3tw")] +script = ExtResource("2_etdxg") +acceleration = 30.0 +max_speed = 15.0 +explosion_range = 6.0 diff --git a/Scenes/Projectiles/projectile.tscn b/Scenes/Projectiles/projectile.tscn new file mode 100644 index 0000000..1404b21 --- /dev/null +++ b/Scenes/Projectiles/projectile.tscn @@ -0,0 +1,24 @@ +[gd_scene load_steps=3 format=3 uid="uid://c8qjlgam6wuo0"] + +[ext_resource type="Script" path="res://Scripts/Projectiles/projectile.gd" id="1_k4v4y"] + +[sub_resource type="SphereShape3D" id="SphereShape3D_fgj4t"] +radius = 0.2 + +[node name="Projectile" type="RigidBody3D" node_paths=PackedStringArray("collision_shape")] +collision_layer = 0 +collision_mask = 5 +gravity_scale = 0.0 +max_contacts_reported = 1 +contact_monitor = true +script = ExtResource("1_k4v4y") +collision_shape = NodePath("CollisionShape3D") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +shape = SubResource("SphereShape3D_fgj4t") + +[node name="Sprite3D" type="Sprite3D" parent="."] +billboard = 1 +texture_filter = 0 + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/Scenes/Projectiles/status_applying_projectile.tscn b/Scenes/Projectiles/status_applying_projectile.tscn new file mode 100644 index 0000000..2bb9760 --- /dev/null +++ b/Scenes/Projectiles/status_applying_projectile.tscn @@ -0,0 +1,9 @@ +[gd_scene load_steps=3 format=3 uid="uid://beq6rn0babncg"] + +[ext_resource type="PackedScene" uid="uid://7f4dfphgiswr" path="res://Scenes/Projectiles/explosive_projectile.tscn" id="1_atrjq"] +[ext_resource type="Script" path="res://Scripts/Projectiles/status_applying_projectile.gd" id="2_4p44n"] + +[node name="StatusApplyingProjectile" instance=ExtResource("1_atrjq")] +max_contacts_reported = 0 +script = ExtResource("2_4p44n") +status_stats = null diff --git a/Scenes/Towers/hitscan_tower.tscn b/Scenes/Towers/hitscan_tower.tscn new file mode 100644 index 0000000..0ab3f86 --- /dev/null +++ b/Scenes/Towers/hitscan_tower.tscn @@ -0,0 +1,7 @@ +[gd_scene load_steps=3 format=3 uid="uid://dumiyjlnea4gq"] + +[ext_resource type="PackedScene" uid="uid://bvqu1heobgboe" path="res://Scenes/Towers/tower.tscn" id="1_60g1i"] +[ext_resource type="Script" path="res://Scripts/Towers/hitscan_tower.gd" id="2_t6bcd"] + +[node name="HitscanTower" instance=ExtResource("1_60g1i")] +script = ExtResource("2_t6bcd") diff --git a/Scenes/Towers/projectile_tower.tscn b/Scenes/Towers/projectile_tower.tscn new file mode 100644 index 0000000..7dc253f --- /dev/null +++ b/Scenes/Towers/projectile_tower.tscn @@ -0,0 +1,8 @@ +[gd_scene load_steps=3 format=3 uid="uid://t0b32qb8eub2"] + +[ext_resource type="PackedScene" uid="uid://bvqu1heobgboe" path="res://Scenes/Towers/tower.tscn" id="1_yagdr"] +[ext_resource type="Script" path="res://Scripts/Towers/projectile_tower.gd" id="2_fqi5p"] + +[node name="ProjectileTower" instance=ExtResource("1_yagdr")] +script = ExtResource("2_fqi5p") +projectile_scene = null diff --git a/Scenes/Towers/tower.tscn b/Scenes/Towers/tower.tscn new file mode 100644 index 0000000..ce379bb --- /dev/null +++ b/Scenes/Towers/tower.tscn @@ -0,0 +1,48 @@ +[gd_scene load_steps=6 format=3 uid="uid://bvqu1heobgboe"] + +[ext_resource type="Script" path="res://Scripts/Towers/tower.gd" id="1_u8bfo"] + +[sub_resource type="Animation" id="Animation_vk4a8"] +resource_name = "shoot" + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_cebsq"] +_data = { +"shoot": SubResource("Animation_vk4a8") +} + +[sub_resource type="BoxMesh" id="BoxMesh_42byu"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_1ucq4"] +transparency = 1 +cull_mode = 1 +shading_mode = 0 +albedo_color = Color(1, 0, 0.415686, 0.223529) + +[node name="Tower" type="Node3D" node_paths=PackedStringArray("animator", "pitch_model", "yaw_model", "range_indicator")] +script = ExtResource("1_u8bfo") +animator = NodePath("AnimationPlayer") +pitch_model = NodePath("Pitch") +yaw_model = NodePath("Yaw") +range_indicator = NodePath("CSGSphere3D") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_cebsq") +} + +[node name="Pitch" type="MeshInstance3D" parent="."] +mesh = SubResource("BoxMesh_42byu") + +[node name="Yaw" type="MeshInstance3D" parent="."] +mesh = SubResource("BoxMesh_42byu") + +[node name="MinimapIcon" type="Sprite3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0) +layers = 4 + +[node name="CSGSphere3D" type="CSGSphere3D" parent="."] +visible = false +radius = 10.0 +radial_segments = 16 +rings = 16 +material = SubResource("StandardMaterial3D_1ucq4") diff --git a/Scenes/UI/card_hand.tscn b/Scenes/UI/card_hand.tscn index 0eb253b..1113419 100644 --- a/Scenes/UI/card_hand.tscn +++ b/Scenes/UI/card_hand.tscn @@ -4,16 +4,11 @@ [ext_resource type="Texture2D" uid="uid://dlqnhs8or4ik2" path="res://Assets/Textures/cardhand.png" id="1_d5oo3"] [ext_resource type="Texture2D" uid="uid://buf8t5gc7iw3a" path="res://Assets/TextureAtlases/rarityborders.tres" id="3_pclfx"] -[node name="Node2D" type="Node2D" node_paths=PackedStringArray("rarity_sprite", "title_text", "damage_text_text", "damage_text", "fire_rate_text_text", "fire_rate_text", "range_text_text", "range_text")] +[node name="Node2D" type="Node2D" node_paths=PackedStringArray("rarity_sprite", "title_text", "description")] script = ExtResource("1_2cfmh") rarity_sprite = NodePath("Sprite2D2") title_text = NodePath("Title") -damage_text_text = NodePath("DamageText") -damage_text = NodePath("Damage") -fire_rate_text_text = NodePath("FireRateText") -fire_rate_text = NodePath("FireRate") -range_text_text = NodePath("RangeText") -range_text = NodePath("Range") +description = NodePath("Description") [node name="Sprite2D" type="Sprite2D" parent="."] texture_filter = 1 @@ -38,56 +33,13 @@ theme_override_colors/font_color = Color(0, 0, 0, 1) text = "spider queen" horizontal_alignment = 1 -[node name="DamageText" type="Label" parent="."] -offset_left = 30.0 -offset_top = 65.0 -offset_right = 132.0 -offset_bottom = 91.0 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "Damage: " -horizontal_alignment = 1 - -[node name="Damage" type="Label" parent="."] -offset_left = 78.0 -offset_top = 65.0 -offset_right = 180.0 -offset_bottom = 91.0 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "45" -horizontal_alignment = 1 - -[node name="FireRateText" type="Label" parent="."] -offset_left = 31.0 -offset_top = 89.0 -offset_right = 133.0 -offset_bottom = 115.0 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "Fire Rate: " -horizontal_alignment = 1 - -[node name="FireRate" type="Label" parent="."] -offset_left = 77.0 -offset_top = 90.0 -offset_right = 179.0 -offset_bottom = 116.0 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "3" -horizontal_alignment = 1 - -[node name="RangeText" type="Label" parent="."] -offset_left = 44.0 -offset_top = 111.0 -offset_right = 146.0 -offset_bottom = 137.0 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "Range: " -horizontal_alignment = 1 - -[node name="Range" type="Label" parent="."] -offset_left = 87.0 -offset_top = 111.0 -offset_right = 189.0 -offset_bottom = 137.0 -theme_override_colors/font_color = Color(0, 0, 0, 1) -text = "55" -horizontal_alignment = 1 +[node name="Description" type="RichTextLabel" parent="."] +offset_left = 66.0 +offset_top = 42.0 +offset_right = 167.0 +offset_bottom = 178.0 +theme_override_colors/default_color = Color(0, 0, 0, 1) +theme_override_font_sizes/normal_font_size = 11 +bbcode_enabled = true +text = "In here goes some card text that really be quite long sometimes if you're not really really careful to describe the card's effects concisely" +fit_content = true diff --git a/Scenes/Weapons/hitscan_weapon.tscn b/Scenes/Weapons/hitscan_weapon.tscn new file mode 100644 index 0000000..efb28be --- /dev/null +++ b/Scenes/Weapons/hitscan_weapon.tscn @@ -0,0 +1,26 @@ +[gd_scene load_steps=4 format=3 uid="uid://difwo7wlyqr3h"] + +[ext_resource type="PackedScene" uid="uid://b7nargdyg28fj" path="res://Scenes/Weapons/weapon.tscn" id="1_s865l"] +[ext_resource type="Script" path="res://Scripts/Weapons/hitscan_weapon.gd" id="2_nyich"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_1ucq4"] +transparency = 1 +cull_mode = 1 +shading_mode = 0 +albedo_color = Color(1, 0, 0.415686, 0.223529) + +[node name="HitscanWeapon" node_paths=PackedStringArray("raycast", "range_debug_indicator") instance=ExtResource("1_s865l")] +script = ExtResource("2_nyich") +raycast = NodePath("RayCast3D") +range_debug_indicator = NodePath("CSGSphere3D") + +[node name="RayCast3D" type="RayCast3D" parent="." index="2"] +target_position = Vector3(0, 0, -1) +collision_mask = 4 + +[node name="CSGSphere3D" type="CSGSphere3D" parent="." index="3"] +visible = false +radius = 4.104 +radial_segments = 16 +rings = 16 +material = SubResource("StandardMaterial3D_1ucq4") diff --git a/Scenes/Weapons/projectile_weapon.tscn b/Scenes/Weapons/projectile_weapon.tscn new file mode 100644 index 0000000..e0f92a2 --- /dev/null +++ b/Scenes/Weapons/projectile_weapon.tscn @@ -0,0 +1,8 @@ +[gd_scene load_steps=3 format=3 uid="uid://bqdllitxbbpyp"] + +[ext_resource type="PackedScene" uid="uid://b7nargdyg28fj" path="res://Scenes/Weapons/weapon.tscn" id="1_nbhwa"] +[ext_resource type="Script" path="res://Scripts/Weapons/projectile_weapon.gd" id="2_5ekyi"] + +[node name="ProjectileWeapon" instance=ExtResource("1_nbhwa")] +script = ExtResource("2_5ekyi") +projectile_scene = null diff --git a/Scenes/Weapons/status_applying_weapon.tscn b/Scenes/Weapons/status_applying_weapon.tscn new file mode 100644 index 0000000..c29da4d --- /dev/null +++ b/Scenes/Weapons/status_applying_weapon.tscn @@ -0,0 +1,8 @@ +[gd_scene load_steps=3 format=3 uid="uid://nrdexcyatika"] + +[ext_resource type="PackedScene" uid="uid://difwo7wlyqr3h" path="res://Scenes/Weapons/hitscan_weapon.tscn" id="1_uolyx"] +[ext_resource type="Script" path="res://Scripts/Weapons/status_applying_weapon.gd" id="2_iq7bw"] + +[node name="StatusApplyingWeapon" instance=ExtResource("1_uolyx")] +script = ExtResource("2_iq7bw") +status_stats = null diff --git a/Scenes/Weapons/weapon.tscn b/Scenes/Weapons/weapon.tscn new file mode 100644 index 0000000..a35b1ab --- /dev/null +++ b/Scenes/Weapons/weapon.tscn @@ -0,0 +1,54 @@ +[gd_scene load_steps=5 format=3 uid="uid://b7nargdyg28fj"] + +[ext_resource type="Script" path="res://Scripts/Weapons/weapon.gd" id="1_yo2gh"] + +[sub_resource type="Animation" id="Animation_5krlx"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite3D: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_0rgpe"] +resource_name = "shoot" +length = 0.15 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite3D: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_fs82p"] +_data = { +"RESET": SubResource("Animation_5krlx"), +"shoot": SubResource("Animation_0rgpe") +} + +[node name="Weapon" type="Node3D" node_paths=PackedStringArray("animator")] +script = ExtResource("1_yo2gh") +animator = NodePath("AnimationPlayer") + +[node name="Sprite3D" type="Sprite3D" parent="."] +layers = 2 +billboard = 1 +texture_filter = 0 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_fs82p") +} diff --git a/Scripts/AStarGraph3D.gd b/Scripts/AStarGraph3D.gd index 23847aa..cc564a8 100644 --- a/Scripts/AStarGraph3D.gd +++ b/Scripts/AStarGraph3D.gd @@ -1,7 +1,7 @@ extends Node3D class_name AStarGraph3D -@export var grid_size := Vector2(21, 13) +@export var grid_size := Vector2i(21, 13) @export var point_gap := 1.2 var non_build_locations = [] var astar := AStar3D.new() diff --git a/Scripts/beelining_controller.gd b/Scripts/EnemyAI/beelining_controller.gd similarity index 100% rename from Scripts/beelining_controller.gd rename to Scripts/EnemyAI/beelining_controller.gd diff --git a/Scripts/enemy_movement.gd b/Scripts/EnemyAI/enemy_movement.gd similarity index 100% rename from Scripts/enemy_movement.gd rename to Scripts/EnemyAI/enemy_movement.gd diff --git a/Scripts/pathing_controller.gd b/Scripts/EnemyAI/pathing_controller.gd similarity index 100% rename from Scripts/pathing_controller.gd rename to Scripts/EnemyAI/pathing_controller.gd diff --git a/Scripts/Projectiles/explosive_projectile.gd b/Scripts/Projectiles/explosive_projectile.gd new file mode 100644 index 0000000..01d3970 --- /dev/null +++ b/Scripts/Projectiles/explosive_projectile.gd @@ -0,0 +1,34 @@ +extends Projectile +class_name ExplosiveProjectile + +@export var explosion_range := 3.0 + + +func _process(delta: float) -> void: + super._process(delta) + if time_alive >= lifetime: + explode() + + +func _on_body_entered(_body: Node) -> void: + explode() + + +func explode(): + if is_multiplayer_authority(): + for enemy in get_tree().get_nodes_in_group("Enemies"): + if global_position.distance_to(enemy.global_position) <= explosion_range: + hit(enemy) + networked_hit.rpc(get_tree().root.get_path_to(enemy)) + networked_kill.rpc() + queue_free() + + +func hit(target): + target.damage(damage) + + +@rpc("reliable") +func networked_hit(target_node_path): + var target = get_tree().root.get_node(target_node_path) + hit(target) diff --git a/Scripts/Projectiles/homing_projectile.gd b/Scripts/Projectiles/homing_projectile.gd new file mode 100644 index 0000000..6a5d099 --- /dev/null +++ b/Scripts/Projectiles/homing_projectile.gd @@ -0,0 +1,17 @@ +extends ExplosiveProjectile +class_name HomingProjectile + +var target : Node3D +@export var acceleration := 40.0 +@export var max_speed := 14.0 + + +func _physics_process(_delta: float) -> void: + if is_instance_valid(target): + direction = global_position.direction_to(target.global_position) + #apply_central_force(direction * acceleration) + + +func _integrate_forces(state: PhysicsDirectBodyState3D) -> void: + 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 new file mode 100644 index 0000000..f99c693 --- /dev/null +++ b/Scripts/Projectiles/projectile.gd @@ -0,0 +1,23 @@ +extends RigidBody3D +class_name Projectile + +@export var collision_shape : CollisionShape3D + +var direction := Vector3.FORWARD +var force := 2.0 +var damage := 0.0 +var lifetime := 10.0 +var time_alive := 0.0 + + +func _process(delta: float) -> void: + time_alive += delta + + +func _on_body_entered(_body: Node) -> void: + pass # Replace with function body. + + +@rpc("reliable") +func networked_kill(): + queue_free() diff --git a/Scripts/Projectiles/status_applying_projectile.gd b/Scripts/Projectiles/status_applying_projectile.gd new file mode 100644 index 0000000..d979366 --- /dev/null +++ b/Scripts/Projectiles/status_applying_projectile.gd @@ -0,0 +1,15 @@ +extends ExplosiveProjectile +class_name StatusApplyingProjectile + +@export var status_stats : StatusStats + + +func hit(target): + super.hit(target) + target.status_manager.add_effect(build_status_object()) + + +func build_status_object() -> StatusEffect: + var status = StatusEffect.new() + status.stats = status_stats + return status diff --git a/Scripts/Resources/TowerStats.gd b/Scripts/Resources/TowerStats.gd deleted file mode 100644 index 93d0a47..0000000 --- a/Scripts/Resources/TowerStats.gd +++ /dev/null @@ -1,7 +0,0 @@ -extends Resource -class_name TowerStats - -@export var can_target : Data.TargetType -@export var damage := 10.0 -@export var fire_range := 20.0 -@export var fire_rate := 1.0 diff --git a/Scripts/Resources/WeaponStats.gd b/Scripts/Resources/WeaponStats.gd deleted file mode 100644 index 53835b0..0000000 --- a/Scripts/Resources/WeaponStats.gd +++ /dev/null @@ -1,6 +0,0 @@ -extends Resource -class_name WeaponStats - -@export var damage : int -@export var fire_rate : float -@export var fire_range : float diff --git a/Scripts/Resources/card.gd b/Scripts/Resources/card.gd index 26d9ffc..3f70e01 100644 --- a/Scripts/Resources/card.gd +++ b/Scripts/Resources/card.gd @@ -1,13 +1,13 @@ extends Resource class_name Card -enum Faction {GENERIC} +enum Faction {GENERIC = 0} @export var title : String @export var rarity : Data.Rarity -@export var faction : Faction +@export var faction : Faction @export var sprite : AtlasTexture -@export var turret : PackedScene -@export var weapon : PackedScene -@export var weapon_stats : WeaponStats -@export var tower_stats : TowerStats +@export var turret_scene : PackedScene +@export var weapon_scene : PackedScene +@export var weapon_stats : CardText +@export var tower_stats : CardText diff --git a/Scripts/Resources/card_text.gd b/Scripts/Resources/card_text.gd new file mode 100644 index 0000000..fb61c82 --- /dev/null +++ b/Scripts/Resources/card_text.gd @@ -0,0 +1,13 @@ +extends Resource +class_name CardText + +@export var target_type : Data.TargetType +@export var attributes : Array[StatAttribute] +@export_multiline var text : String + + +func get_attribute(attribute : String) -> float: + for stat in attributes: + if stat.key == attribute: + return stat.value + return 0.0 diff --git a/Scripts/Resources/stat_attribute.gd b/Scripts/Resources/stat_attribute.gd new file mode 100644 index 0000000..d60b12a --- /dev/null +++ b/Scripts/Resources/stat_attribute.gd @@ -0,0 +1,5 @@ +extends Resource +class_name StatAttribute + +@export var key : String +@export var value : float diff --git a/Scripts/StatusEffects/StatusOnFire.gd b/Scripts/StatusEffects/StatusOnFire.gd deleted file mode 100644 index 19123ba..0000000 --- a/Scripts/StatusEffects/StatusOnFire.gd +++ /dev/null @@ -1,6 +0,0 @@ -extends StatusEffect -class_name StatusOnFire - - -func proc(affected, stacks, _existing_effects): - affected.damage(stats.potency * stacks) diff --git a/Scripts/StatusEffects/status_poison.gd b/Scripts/StatusEffects/status_dot.gd similarity index 82% rename from Scripts/StatusEffects/status_poison.gd rename to Scripts/StatusEffects/status_dot.gd index d44dc9e..0d01f44 100644 --- a/Scripts/StatusEffects/status_poison.gd +++ b/Scripts/StatusEffects/status_dot.gd @@ -1,5 +1,5 @@ extends StatusEffect -class_name StatusPoison +class_name StatusDoT func proc(affected, stacks, _existing_effects): diff --git a/Scripts/StatusEffects/status_radioactive.gd b/Scripts/StatusEffects/status_radioactive.gd deleted file mode 100644 index 70a3b85..0000000 --- a/Scripts/StatusEffects/status_radioactive.gd +++ /dev/null @@ -1,5 +0,0 @@ -extends StatusEffect -class_name StatusRadioactive - -func proc(affected, stacks, _existing_effects): - affected.damage(stats.potency * stacks) diff --git a/Scripts/StatusEffects/status_cold.gd b/Scripts/StatusEffects/status_slow.gd similarity index 90% rename from Scripts/StatusEffects/status_cold.gd rename to Scripts/StatusEffects/status_slow.gd index 20bdee8..0fd68d2 100644 --- a/Scripts/StatusEffects/status_cold.gd +++ b/Scripts/StatusEffects/status_slow.gd @@ -1,5 +1,6 @@ extends StatusEffect -class_name StatusCold +class_name StatusSlow + func on_attached(affected, _existing_effects): affected.movement_speed_penalty -= stats.potency diff --git a/Scripts/StatusEffects/status_sticky.gd b/Scripts/StatusEffects/status_sticky.gd deleted file mode 100644 index fe37159..0000000 --- a/Scripts/StatusEffects/status_sticky.gd +++ /dev/null @@ -1,10 +0,0 @@ -extends StatusEffect -class_name StatusSticky - - -func on_attached(affected, _existing_effects): - affected.movement_speed_penalty -= stats.potency - - -func on_removed(affected, _existing_effects): - affected.movement_speed_penalty += stats.potency diff --git a/Scripts/Towers/hitscan_tower.gd b/Scripts/Towers/hitscan_tower.gd new file mode 100644 index 0000000..45b5d51 --- /dev/null +++ b/Scripts/Towers/hitscan_tower.gd @@ -0,0 +1,13 @@ +extends Tower +class_name HitscanTower + + +func shoot(): + super.shoot() + if targeted_enemy and is_instance_valid(targeted_enemy) and targeted_enemy.alive: + targeted_enemy.damage(damage) + + +@rpc("reliable") +func networked_shoot(): + super.networked_shoot() diff --git a/Scripts/Towers/projectile_tower.gd b/Scripts/Towers/projectile_tower.gd new file mode 100644 index 0000000..5c05677 --- /dev/null +++ b/Scripts/Towers/projectile_tower.gd @@ -0,0 +1,30 @@ +extends Tower +class_name ProjectileTower + +@export var projectile_scene : PackedScene + +var force := 2.0 +var projectile_id := 0 + + +func shoot(): + if is_multiplayer_authority(): + networked_spawn_projectile.rpc(multiplayer.get_unique_id()) + + +@rpc("reliable") +func networked_shoot(): + super.networked_shoot() + shoot() + + +@rpc("reliable", "call_local") +func networked_spawn_projectile(peer_id): + var projectile = projectile_scene.instantiate() as Projectile + projectile.position = global_position + Vector3.UP + projectile.damage = damage + projectile.direction = -yaw_model.global_transform.basis.z + projectile.force = force + projectile.name = base_name + str(peer_id) + str(projectile_id) + get_tree().root.add_child(projectile) + projectile_id += 1 diff --git a/Scripts/Towers/tower.gd b/Scripts/Towers/tower.gd new file mode 100644 index 0000000..3a2167f --- /dev/null +++ b/Scripts/Towers/tower.gd @@ -0,0 +1,92 @@ +extends Node3D +class_name Tower + +@export var stats : CardText +@export var animator : AnimationPlayer +@export var pitch_model : MeshInstance3D +@export var yaw_model : MeshInstance3D +@export var range_indicator : CSGSphere3D + +var base_name +var targeted_enemy +var time_since_firing := 0.0 +var time_between_shots := 0.0 +var damage := 0.0 +var target_range := 0.0 + + +func _ready() -> void: + time_between_shots = stats.get_attribute("Fire Delay") + damage = stats.get_attribute("Damage") + target_range = stats.get_attribute("Range") + range_indicator.radius = target_range + + +func preview_range(value): + range_indicator.set_visible(value) + + +func _process(delta: float) -> void: + if !is_multiplayer_authority(): + return + if time_since_firing < time_between_shots: + time_since_firing += delta + + +func _physics_process(_delta: float) -> void: + if !is_multiplayer_authority(): + #only doing the graphical sort of stuff but not shoot logic + if targeted_enemy: + if !is_instance_valid(targeted_enemy) or !targeted_enemy.alive or global_position.distance_to(targeted_enemy.global_position) > target_range: + targeted_enemy = null + else: + aim() + return + if !targeted_enemy: + acquire_target() + else: + if !is_instance_valid(targeted_enemy) or !targeted_enemy.alive or global_position.distance_to(targeted_enemy.global_position) > target_range: + targeted_enemy = null + if targeted_enemy: + aim() + if time_since_firing >= time_between_shots: + time_since_firing -= time_between_shots + shoot() + + +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 acquire_target(): + var most_progressed_enemy = null + for enemy in get_tree().get_nodes_in_group("Enemies"): + if global_position.distance_to(enemy.global_position) > target_range: + continue + var em_1 = enemy.movement_controller as EnemyMovement + var em_2 : EnemyMovement + if most_progressed_enemy != null: + em_2 = most_progressed_enemy.movement_controller as EnemyMovement + if (most_progressed_enemy == null or em_1.distance_remaining < em_2.distance_remaining) and enemy.stats.target_type & stats.target_type: + most_progressed_enemy = enemy + if most_progressed_enemy != null: + targeted_enemy = most_progressed_enemy + networked_acquire_target.rpc(get_tree().root.get_path_to(most_progressed_enemy)) + + +func shoot(): + animator.play("shoot") + if is_multiplayer_authority(): + networked_shoot.rpc() + + +@rpc("reliable") +func networked_shoot(): + shoot() + + +@rpc("reliable") +func networked_acquire_target(target_node_path): + targeted_enemy = get_tree().root.get_node(target_node_path) diff --git a/Scripts/Weapons/hitscan_weapon.gd b/Scripts/Weapons/hitscan_weapon.gd new file mode 100644 index 0000000..624e75a --- /dev/null +++ b/Scripts/Weapons/hitscan_weapon.gd @@ -0,0 +1,37 @@ +extends Weapon +class_name HitscanWeapon + +@export var raycast : RayCast3D +@export var range_debug_indicator : CSGSphere3D + +var attack_range := 0.0 + + +func _ready() -> void: + super._ready() + attack_range = stats.get_attribute("Range") + raycast.target_position = Vector3(0, 0, -attack_range) + range_debug_indicator.radius = attack_range + raycast.global_position = hero.camera.global_position + + +func shoot(): + super.shoot() + if raycast.is_colliding(): + var target = raycast.get_collider() + if target != null: + var target_hitbox = target.shape_owner_get_owner(raycast.get_collider_shape()) + if target_hitbox is Hitbox: + hit(target, target_hitbox) + networked_hit.rpc(get_tree().root.get_path_to(target), get_tree().root.get_path_to(target_hitbox)) + + +func hit(_target, target_hitbox : Hitbox): + target_hitbox.damage(damage) + + +@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) diff --git a/Scripts/Weapons/projectile_weapon.gd b/Scripts/Weapons/projectile_weapon.gd new file mode 100644 index 0000000..577a81c --- /dev/null +++ b/Scripts/Weapons/projectile_weapon.gd @@ -0,0 +1,25 @@ +extends Weapon +class_name ProjectileWeapon + +@export var projectile_scene : PackedScene + +var force := 2.0 +var projectile_id := 0 + + +func shoot(): + super.shoot() + var projectile = projectile_scene.instantiate() as Projectile + projectile.position = global_position + projectile.damage = damage + projectile.direction = -global_transform.basis.z + projectile.force = force + projectile.name = str(multiplayer.get_unique_id()) + str(projectile_id) + get_tree().root.add_child(projectile) + projectile_id += 1 + + +@rpc("reliable") +func networked_shoot(): + super.networked_shoot() + shoot() diff --git a/Scripts/Weapons/status_applying_weapon.gd b/Scripts/Weapons/status_applying_weapon.gd new file mode 100644 index 0000000..b2adf8a --- /dev/null +++ b/Scripts/Weapons/status_applying_weapon.gd @@ -0,0 +1,15 @@ +extends HitscanWeapon +class_name StatusApplyingWeapon + +@export var status_stats : StatusStats + + +func hit(target, target_hitbox : Hitbox): + super.hit(target, target_hitbox) + target.status_manager.add_effect(build_status_object()) + + +func build_status_object() -> StatusEffect: + var status = StatusEffect.new() + status.stats = status_stats + return status diff --git a/Scripts/Weapons/weapon.gd b/Scripts/Weapons/weapon.gd new file mode 100644 index 0000000..5e10fbd --- /dev/null +++ b/Scripts/Weapons/weapon.gd @@ -0,0 +1,58 @@ +extends Node3D +class_name Weapon + +@export var stats : CardText +@export var animator : AnimationPlayer + +var hero : Hero +var trigger_held := false +var second_trigger_held := false +var time_since_firing := 0.0 +var time_between_shots := 0.0 +var damage := 0.0 + + +func _ready() -> void: + time_between_shots = stats.get_attribute("Fire Delay") + damage = stats.get_attribute("Damage") + + +func set_hero(value): + hero = value + + +func _process(delta: float) -> void: + if time_since_firing < time_between_shots: + time_since_firing += delta + + +func _physics_process(_delta: float) -> void: + if trigger_held and time_since_firing >= time_between_shots: + time_since_firing -= time_between_shots + shoot() + networked_shoot.rpc() + + +func hold_trigger(): + trigger_held = true + + +func release_trigger(): + trigger_held = false + + +func hold_second_trigger(): + second_trigger_held = true + + +func release_second_trigger(): + second_trigger_held = false + + +func shoot(): + animator.play("shoot") + + +@rpc +func networked_shoot(): + animator.play("shoot") diff --git a/Scripts/card_hand.gd b/Scripts/card_hand.gd index 1147189..5e5edb5 100644 --- a/Scripts/card_hand.gd +++ b/Scripts/card_hand.gd @@ -3,28 +3,27 @@ class_name CardInHand var stats : Card @export var rarity_sprite : Sprite2D -@export var title_text: Label -@export var damage_text_text: Label -@export var damage_text: Label -@export var fire_rate_text_text: Label -@export var fire_rate_text: Label -@export var range_text_text: Label -@export var range_text: Label +@export var title_text : Label +@export var description : RichTextLabel func set_card(value): stats = value title_text.text = stats.title rarity_sprite.region_rect = Rect2(64 * stats.rarity, 0, 64, 64) - view_weapon() + + +func process_card_text(card_text : CardText) -> String: + var processed_string = card_text.text + for stat in card_text.attributes: + processed_string = processed_string.replace(stat.key, str(stat.value)) + processed_string = processed_string.replace("/", "[color=red]") + processed_string = processed_string.replace("\\", "[color=black]") + return processed_string func view_weapon(): - damage_text.text = str(stats.weapon_stats.damage) - fire_rate_text.text = str(stats.weapon_stats.fire_rate) - range_text.text = str(stats.weapon_stats.fire_rate) + description.text = process_card_text(stats.weapon_stats) func view_tower(): - damage_text.text = str(stats.tower_stats.damage) - fire_rate_text.text = str(stats.tower_stats.fire_rate) - range_text.text = str(stats.tower_stats.fire_rate) + description.text = process_card_text(stats.tower_stats) diff --git a/Scripts/data.gd b/Scripts/data.gd index 4a66f97..b52086c 100644 --- a/Scripts/data.gd +++ b/Scripts/data.gd @@ -10,9 +10,9 @@ var player_keymap : PlayerKeymap var wall_cost := 4 var printer_cost := 10 -enum TargetType {LAND = 1, AIR = 2, BOTH = 3} -enum EnemyType {LAND = 1, AIR = 2} -enum Rarity {COMMON, UNCOMMON, RARE, EPIC, LEGENDARY} +enum TargetType {UNDEFINED = 0, LAND = 1, AIR = 2, BOTH = 3} +enum EnemyType {UNDEFINED = 0, LAND = 1, AIR = 2} +enum Rarity {COMMON = 0, UNCOMMON = 1, RARE = 2, EPIC = 3, LEGENDARY = 4} var rarity_weights = { "COMMON" = 50, "UNCOMMON" = 30, @@ -32,18 +32,27 @@ func _ready() -> void: characters.append(preload("res://PCs/Green/green.tres")) characters.append(preload("res://PCs/Blue/blue.tres")) + #Common cards.append(preload("res://PCs/Universal/ClassCards/Assault/card_assault.tres")) - cards.append(preload("res://PCs/Universal/ClassCards/BombLauncher/card_grenade_launcher.tres")) - cards.append(preload("res://PCs/Universal/ClassCards/Sniper/card_sniper.tres")) + cards.append(preload("res://PCs/Universal/ClassCards/BombLauncher/card_bomb_launcher.tres")) cards.append(preload("res://PCs/Universal/ClassCards/Gatling/card_gatling.tres")) - cards.append(preload("res://PCs/Universal/ClassCards/GlueLauncher/card_glue_launcher.tres")) cards.append(preload("res://PCs/Universal/ClassCards/RocketLauncher/card_rocket_launcher.tres")) - cards.append(preload("res://PCs/Universal/ClassCards/Flamethrower/card_flamethrower.tres")) - cards.append(preload("res://PCs/Universal/ClassCards/Blowdart/card_blowdart.tres")) - cards.append(preload("res://PCs/Universal/ClassCards/Fireball/card_fireball.tres")) - cards.append(preload("res://PCs/Universal/ClassCards/Icicle/card_icicle.tres")) - cards.append(preload("res://PCs/Universal/ClassCards/Reactor/card_reactor.tres")) - cards.append(preload("res://PCs/Universal/ClassCards/Refridgerator/card_refridgerator.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/GlueLauncher/card_glue_launcher.tres")) + #Rare + #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 + #cards.append(preload("res://PCs/Universal/ClassCards/Icicle/card_icicle.tres")) + #cards.append(preload("res://PCs/Universal/ClassCards/Fireball/card_fireball.tres")) + #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/Lightning/card_lightning.tres")) enemies.append(preload("res://Worlds/GreenPlanet/Enemies/dog.tres")) enemies.append(preload("res://Worlds/GreenPlanet/Enemies/dog_fast.tres")) diff --git a/Scripts/edit_tool.gd b/Scripts/edit_tool.gd index 0c977a6..06beb90 100644 --- a/Scripts/edit_tool.gd +++ b/Scripts/edit_tool.gd @@ -93,7 +93,7 @@ func spawn_tower_preview(): last_tower_base = ray_collider var card = inventory.selected_item last_card = card - tower_preview = card.turret.instantiate() as Tower + tower_preview = card.turret_scene.instantiate() as Tower tower_preview.stats = card.tower_stats tower_preview.preview_range(true) ray_collider.add_child(tower_preview) diff --git a/Scripts/game.gd b/Scripts/game.gd index 178e593..e7b1143 100644 --- a/Scripts/game.gd +++ b/Scripts/game.gd @@ -23,7 +23,7 @@ var enemies := 0 var objective_health := 120 var wave := 0 var upcoming_wave -var pot : int +var pot : float var UILayer : CanvasLayer @@ -97,7 +97,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 + (spawn_power / 100)) + networked_set_upcoming_wave.rpc(new_wave, 6 + floori(spawn_power / 100)) @rpc("reliable", "call_local") @@ -158,6 +158,9 @@ func remove_player(peer_id): func start_game(): game_active = true + enemies = 0 + objective_health = 100 + wave = 0 level.a_star_graph_3d.make_grid() level.a_star_graph_3d.find_path() set_upcoming_wave() diff --git a/Scripts/ground_enemy_controller.gd b/Scripts/ground_enemy_controller.gd deleted file mode 100644 index 5ac802d..0000000 --- a/Scripts/ground_enemy_controller.gd +++ /dev/null @@ -1,2 +0,0 @@ -extends Node3D -class_name GroundEnemyController diff --git a/PCs/Universal/ClassCards/Assault/tower.gd b/Scripts/tower.gd similarity index 97% rename from PCs/Universal/ClassCards/Assault/tower.gd rename to Scripts/tower.gd index 8bb20e9..e181d19 100644 --- a/PCs/Universal/ClassCards/Assault/tower.gd +++ b/Scripts/tower.gd @@ -1,7 +1,6 @@ extends Node3D -class_name Tower +class_name OldTower -@export var stats : TowerStats @export var model : Node3D @export var range_sphere : CSGSphere3D @export var minimap_range_sphere : CSGSphere3D diff --git a/Scripts/tower_base.gd b/Scripts/tower_base.gd index b99cf61..dcac602 100644 --- a/Scripts/tower_base.gd +++ b/Scripts/tower_base.gd @@ -36,9 +36,11 @@ func toggle_collision(): @rpc("reliable", "call_local", "any_peer") func networked_spawn_tower(): - tower = inventory.selected_item.turret.instantiate() as Tower + tower = inventory.selected_item.turret_scene.instantiate() as Tower tower.stats = inventory.selected_item.tower_stats tower.name = "tower" + tower.base_name = name + tower.position = Vector3.UP minimap_icon.modulate = Color.RED add_child(tower) diff --git a/Scripts/wave_manager.gd b/Scripts/wave_manager.gd index 8330f27..fe5168b 100644 --- a/Scripts/wave_manager.gd +++ b/Scripts/wave_manager.gd @@ -7,15 +7,15 @@ func calculate_spawn_power(wave_number : int, number_of_players : int) -> int: func generate_wave(spawn_power : int, spawn_pool : Array[Enemy]) -> Dictionary: var wave = {} - #var sp_used = 0 + var sp_used = 0 var enemy_types = randi_range(1, 5) var enemy_choices = spawn_pool.duplicate() - var sp_allotment = spawn_power / enemy_types + var sp_allotment = floori(spawn_power / enemy_types) for x in enemy_types: var choice = enemy_choices.pick_random() enemy_choices.erase(choice) if sp_allotment / choice.spawn_power > 0: wave[Data.enemies.find(choice)] = sp_allotment / choice.spawn_power - #sp_used += wave[choice] * choice.spawn_power - #print("tried to generate wave with " + str(spawn_power) + " spawn power, used " + str(sp_used)) + sp_used += wave[Data.enemies.find(choice)] * choice.spawn_power + print("tried to generate wave with " + str(spawn_power) + " spawn power, used " + str(sp_used)) return wave diff --git a/Worlds/GreenPlanet/Enemies/air_enemy.tscn b/Worlds/GreenPlanet/Enemies/air_enemy.tscn index e9b0d7b..62ae9ad 100644 --- a/Worlds/GreenPlanet/Enemies/air_enemy.tscn +++ b/Worlds/GreenPlanet/Enemies/air_enemy.tscn @@ -8,14 +8,14 @@ [ext_resource type="Texture2D" uid="uid://r202vo47jw1q" path="res://Assets/Textures/enemyhealth.png" id="8_77uyi"] [ext_resource type="Script" path="res://Scripts/StatusEffector.gd" id="9_7hati"] [ext_resource type="Texture2D" uid="uid://b1fn60m6xfcsq" path="res://Assets/Textures/minimap_enemy.png" id="9_7yfyh"] -[ext_resource type="Script" path="res://Scripts/beelining_controller.gd" id="9_cx8mv"] +[ext_resource type="Script" path="res://Scripts/EnemyAI/beelining_controller.gd" id="9_cx8mv"] [sub_resource type="SphereShape3D" id="SphereShape3D_21dgw"] [sub_resource type="ViewportTexture" id="ViewportTexture_ss5ir"] viewport_path = NodePath("SubViewport") -[node name="Dog" type="CharacterBody3D" node_paths=PackedStringArray("status_manager", "movement_controller", "health") groups=["Enemies"]] +[node name="Dog" type="CharacterBody3D" node_paths=PackedStringArray("status_manager", "movement_controller", "health", "sprite") groups=["Enemies"]] collision_layer = 4 collision_mask = 3 motion_mode = 1 @@ -23,6 +23,7 @@ script = ExtResource("1_m83kr") status_manager = NodePath("StatusEffector") movement_controller = NodePath("BeeliningController") health = NodePath("Health") +sprite = NodePath("DirectionSprite") [node name="Health" type="Node" parent="."] script = ExtResource("3_wiose") diff --git a/Worlds/GreenPlanet/Enemies/enemy_controller.gd b/Worlds/GreenPlanet/Enemies/enemy_controller.gd index d04fd25..5b06599 100644 --- a/Worlds/GreenPlanet/Enemies/enemy_controller.gd +++ b/Worlds/GreenPlanet/Enemies/enemy_controller.gd @@ -8,6 +8,7 @@ signal died(enemy) @export var status_manager : StatusEffector @export var movement_controller : EnemyMovement @export var health : Health +@export var sprite : Sprite3D var movement_speed var movement_speed_penalty := 1.0 @@ -19,7 +20,7 @@ func _ready() -> void: health.current_health = stats.health $SubViewport/ProgressBar.max_value = stats.health $SubViewport/ProgressBar.value = stats.health - $DirectionSprite.texture = stats.sprite.duplicate() + sprite.texture = stats.sprite.duplicate() movement_speed = stats.movement_speed diff --git a/Worlds/GreenPlanet/Enemies/land_enemy.tscn b/Worlds/GreenPlanet/Enemies/land_enemy.tscn index 4e1c8a9..30c62a2 100644 --- a/Worlds/GreenPlanet/Enemies/land_enemy.tscn +++ b/Worlds/GreenPlanet/Enemies/land_enemy.tscn @@ -8,12 +8,12 @@ [ext_resource type="PackedScene" uid="uid://cqtew0t8sttpm" path="res://Scenes/damage_particle.tscn" id="4_tn1tu"] [ext_resource type="Texture2D" uid="uid://r202vo47jw1q" path="res://Assets/Textures/enemyhealth.png" id="8_5ba7s"] [ext_resource type="Texture2D" uid="uid://b1fn60m6xfcsq" path="res://Assets/Textures/minimap_enemy.png" id="9_f8btv"] -[ext_resource type="Script" path="res://Scripts/pathing_controller.gd" id="10_gljle"] +[ext_resource type="Script" path="res://Scripts/EnemyAI/pathing_controller.gd" id="10_gljle"] [ext_resource type="Script" path="res://Scripts/StatusEffector.gd" id="10_txouh"] [sub_resource type="SphereShape3D" id="SphereShape3D_21dgw"] -[sub_resource type="AtlasTexture" id="AtlasTexture_ln1wo"] +[sub_resource type="AtlasTexture" id="AtlasTexture_sn7du"] resource_local_to_scene = true atlas = ExtResource("3_naknq") region = Rect2(0, 0, 32, 32) @@ -21,13 +21,14 @@ region = Rect2(0, 0, 32, 32) [sub_resource type="ViewportTexture" id="ViewportTexture_4tj6k"] viewport_path = NodePath("SubViewport") -[node name="Dog" type="CharacterBody3D" node_paths=PackedStringArray("status_manager", "movement_controller", "health") groups=["Enemies"]] +[node name="Dog" type="CharacterBody3D" node_paths=PackedStringArray("status_manager", "movement_controller", "health", "sprite") groups=["Enemies"]] collision_layer = 4 collision_mask = 3 script = ExtResource("1_fwsjt") status_manager = NodePath("StatusEffector") movement_controller = NodePath("PathingController") health = NodePath("Health") +sprite = NodePath("DirectionSprite") [node name="Health" type="Node" parent="."] script = ExtResource("2_swu53") @@ -41,7 +42,7 @@ script = ExtResource("2_j8yin") [node name="DirectionSprite" parent="." instance=ExtResource("2_o7jmg")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.642479, 0) pixel_size = 0.04 -texture = SubResource("AtlasTexture_ln1wo") +texture = SubResource("AtlasTexture_sn7du") [node name="Sprite3D" type="Sprite3D" parent="."] transform = Transform3D(0.2, 0, 0, 0, 0.2, 0, 0, 0, 0.2, 0, 1.20821, 0) diff --git a/Worlds/GreenPlanet/tilemap.tres b/Worlds/GreenPlanet/tilemap.tres index 3c6c8ce..e426bc4 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_0ow0h"] +[sub_resource type="Image" id="Image_jqni1"] 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_0ow0h") +image = SubResource("Image_jqni1") [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_s3wf2"] +[sub_resource type="Image" id="Image_6qi5f"] 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_s3wf2") +image = SubResource("Image_6qi5f") [sub_resource type="BoxShape3D" id="BoxShape3D_d3j6k"]