From 1500c22ccc9a572f6d625b3469f0c3d01b90ed46 Mon Sep 17 00:00:00 2001 From: Lexi Quinn Date: Wed, 15 Nov 2023 15:19:40 +1100 Subject: [PATCH] inching towards better class inheritence and multiplayer compatibility --- Assets/TextureAtlases/g_accelerator.tres | 7 -- Assets/TextureAtlases/g_assault.tres | 7 -- Assets/TextureAtlases/g_glue_gun.tres | 7 -- Assets/TextureAtlases/g_grenade_launcher.tres | 7 -- Assets/TextureAtlases/g_rocket_launcher.tres | 7 -- Assets/TextureAtlases/g_sniper.tres | 7 -- Assets/TextureAtlases/gun.tres | 8 -- Assets/TextureAtlases/target_list.tres | 2 +- Assets/Textures/8directionplayer.png | Bin 1552 -> 0 bytes PCs/Blue/blue.tres | 6 +- PCs/Green/green.tres | 8 +- PCs/Red/red.tres | 8 +- .../ClassCards/Assault/card_assault.tres | 26 ++--- .../ClassCards/Assault}/g_assault.png | Bin .../ClassCards/Assault}/g_assault.png.import | 6 +- .../ClassCards/Assault/tower_assault.gd | 2 + .../ClassCards/Assault/tower_assault.tscn | 46 ++------- .../ClassCards/Assault/tower_stats.tres | 25 +++++ PCs/Universal/ClassCards/Assault/weapon.gd | 73 -------------- .../ClassCards/Assault/weapon_assault.gd | 2 + .../ClassCards/Assault/weapon_assault.tscn | 65 +++---------- .../ClassCards/Assault/weapon_stats.tres | 25 +++++ .../ClassCards/Blowdart/blowdart.png | Bin 0 -> 1777 bytes .../ClassCards/Blowdart/blowdart.png.import | 35 +++++++ .../ClassCards/Blowdart/blowdartweapon.gd | 17 ---- .../ClassCards/Blowdart/card_blowdart.tres | 18 +--- .../ClassCards/Blowdart/weapon_blowdart.gd | 8 ++ .../ClassCards/Blowdart/weapon_blowdart.tscn | 73 ++++---------- .../ClassCards/Blowdart/weapon_stats.tres | 24 +++++ PCs/Universal/ClassCards/BombLauncher/bomb.gd | 20 ---- .../ClassCards/BombLauncher}/bomb.png | Bin .../ClassCards/BombLauncher}/bomb.png.import | 6 +- .../ClassCards/BombLauncher/bomb.tscn | 29 ------ .../BombLauncher/bomb_projectile.gd | 16 +++ .../BombLauncher/bomb_projectile.tscn | 17 ++++ .../ClassCards/BombLauncher/bombweapon.gd | 21 ---- .../BombLauncher/card_bomb_launcher.tres | 23 +++++ .../BombLauncher/card_grenade_launcher.tres | 19 ---- .../BombLauncher}/grenade_launcher.png | Bin .../BombLauncher}/grenade_launcher.png.import | 6 +- .../BombLauncher/tower_bomb_launcher.gd | 20 ++++ .../BombLauncher/tower_bomb_launcher.tscn | 46 ++------- .../ClassCards/BombLauncher/tower_stats.tres | 25 +++++ .../BombLauncher/weapon_bomb_launcher.gd | 8 ++ .../BombLauncher/weapon_bomb_launcher.tscn | 66 ++----------- .../ClassCards/BombLauncher/weapon_stats.tres | 25 +++++ .../DamageEnhancer/card_damage_enhancer.tres | 2 +- .../ClassCards/Fireball/card_fireball.tres | 26 ++--- PCs/Universal/ClassCards/Fireball/fireball.gd | 32 ------ .../ClassCards/Fireball/fireball.png | Bin 0 -> 2736 bytes .../ClassCards/Fireball/fireball.png.import | 34 +++++++ .../ClassCards/Fireball/fireball.tscn | 30 ------ .../Fireball/fireball_projectile.gd | 8 ++ .../Fireball/fireball_projectile.png | Bin 0 -> 1181 bytes .../Fireball/fireball_projectile.png.import | 34 +++++++ .../Fireball/fireball_projectile.tscn | 13 +++ .../ClassCards/Fireball/fireballweapon.gd | 16 --- .../ClassCards/Fireball/weapon_fireball.gd | 2 + .../ClassCards/Fireball/weapon_fireball.tscn | 90 +++-------------- .../ClassCards/Fireball/weapon_stats.tres | 8 ++ .../GammaLaser/card_gamma_laser.tres | 2 +- .../ClassCards/Gatling/card_gatling.tres | 26 ++--- .../Universal/ClassCards/Gatling/gatling.png | Bin .../ClassCards/Gatling/gatling.png.import | 6 +- .../ClassCards/Gatling/speedytower.gd | 32 ------ .../ClassCards/Gatling/speedyweapon.gd | 60 ------------ .../ClassCards/Gatling/tower_gatling.gd | 38 ++++++++ .../ClassCards/Gatling/tower_gatling.tscn | 62 ++---------- .../ClassCards/Gatling/tower_stats.tres | 37 +++++++ .../ClassCards/Gatling/weapon_gatling.gd | 36 +++++++ .../ClassCards/Gatling/weapon_gatling.tscn | 65 +++---------- .../ClassCards/Gatling/weapon_stats.tres | 37 +++++++ .../GlueLauncher/card_glue_launcher.tres | 20 +--- .../ClassCards/GlueLauncher}/glue_gun.png | Bin .../GlueLauncher}/glue_gun.png.import | 6 +- .../ClassCards/GlueLauncher/stickyweapon.gd | 17 ---- .../GlueLauncher/weapon_glue_launcher.gd | 7 ++ .../GlueLauncher/weapon_glue_launcher.tscn | 71 +++----------- .../ClassCards/GlueLauncher/weapon_stats.tres | 24 +++++ .../ClassCards/Icicle/card_icicle.tres | 26 ++--- PCs/Universal/ClassCards/Icicle/icicle.gd | 32 ------ PCs/Universal/ClassCards/Icicle/icicle.png | Bin 0 -> 2588 bytes .../ClassCards/Icicle/icicle.png.import | 34 +++++++ PCs/Universal/ClassCards/Icicle/icicle.tscn | 30 ------ .../ClassCards/Icicle/icicle_projectile.gd | 8 ++ .../ClassCards/Icicle/icicle_projectile.png | Bin 0 -> 969 bytes .../Icicle/icicle_projectile.png.import | 8 +- .../ClassCards/Icicle/icicle_projectile.tscn | 13 +++ .../ClassCards/Icicle/icicleweapon.gd | 16 --- .../ClassCards/Icicle/weapon_icicle.gd | 2 + .../ClassCards/Icicle/weapon_icicle.tscn | 90 +++-------------- .../ClassCards/Icicle/weapon_stats.tres | 8 ++ .../ClassCards/Lightning/card_lightning.tres | 2 +- .../ClassCards/Reactor/card_reactor.tres | 2 +- .../Refridgerator/card_refridgerator.tres | 2 +- .../RocketLauncher/card_rocket_launcher.tres | 30 +++--- .../ClassCards/RocketLauncher/rocket.gd | 33 ------- .../ClassCards/RocketLauncher/rocket.png | Bin 0 -> 835 bytes .../RocketLauncher/rocket.png.import | 34 +++++++ .../ClassCards/RocketLauncher/rocket.png.kra | Bin 0 -> 7619 bytes .../ClassCards/RocketLauncher/rocket.tscn | 30 ------ .../RocketLauncher}/rocket_launcher.png | Bin .../rocket_launcher.png.import | 6 +- .../RocketLauncher/rocket_projectile.gd | 2 + .../RocketLauncher/rocket_projectile.tscn | 14 +++ .../RocketLauncher/rocket_weapon.gd | 66 ------------- .../RocketLauncher}/target_icon.png | Bin .../RocketLauncher}/target_icon.png.import | 6 +- .../RocketLauncher}/target_icon.tscn | 4 +- .../RocketLauncher}/target_list.png | Bin .../RocketLauncher}/target_list.png.import | 6 +- .../RocketLauncher/tower_rocket_launcher.gd | 75 ++++++++++++++ .../RocketLauncher/tower_rocket_launcher.tscn | 48 ++------- .../RocketLauncher/tower_stats.tres | 30 ++++++ .../RocketLauncher/weapon_rocket_launcher.gd | 76 +++++++++++++++ .../weapon_rocket_launcher.tscn | 87 +++++------------ .../RocketLauncher/weapon_stats.tres | 25 +++++ .../ClassCards/Sniper/card_sniper.tres | 26 ++--- .../Universal/ClassCards/Sniper}/g_sniper.png | Bin .../ClassCards/Sniper}/g_sniper.png.import | 6 +- .../ClassCards/Sniper}/scopetest.png | Bin .../ClassCards/Sniper}/scopetest.png.import | 6 +- .../ClassCards/Sniper/tower_sniper.gd | 2 + .../ClassCards/Sniper/tower_sniper.tscn | 43 ++------ .../ClassCards/Sniper/tower_stats.tres | 25 +++++ .../{scopedweapon.gd => weapon_sniper.gd} | 10 +- .../ClassCards/Sniper/weapon_sniper.tscn | 91 ++++------------- .../ClassCards/Sniper/weapon_stats.tres | 25 +++++ .../SpeedEnhancer/card_speed_enhancer.tres | 11 --- PCs/hero.gd | 19 ++-- PCs/hero.tscn | 4 +- Resources/TurretStats/accelerator.tres | 10 -- Resources/TurretStats/assault.tres | 10 -- Resources/TurretStats/blowdart.tres | 10 -- Resources/TurretStats/bomblauncher.tres | 10 -- Resources/TurretStats/fireball.tres | 10 -- Resources/TurretStats/flametower.tres | 10 -- Resources/TurretStats/glue.tres | 10 -- Resources/TurretStats/icicle.tres | 10 -- Resources/TurretStats/reactor.tres | 10 -- Resources/TurretStats/refridgerator.tres | 10 -- Resources/TurretStats/rocketlauncher.tres | 10 -- Resources/TurretStats/sniper.tres | 10 -- Resources/WeaponStats/accelerator.tres | 9 -- Resources/WeaponStats/assault.tres | 9 -- Resources/WeaponStats/blowdart.tres | 9 -- Resources/WeaponStats/bomblauncher.tres | 9 -- Resources/WeaponStats/fireball.tres | 9 -- Resources/WeaponStats/flamethrower.tres | 9 -- Resources/WeaponStats/glue.tres | 9 -- Resources/WeaponStats/icicle.tres | 9 -- Resources/WeaponStats/reactor.tres | 9 -- Resources/WeaponStats/refridgerator.tres | 9 -- Resources/WeaponStats/rocketlauncher.tres | 9 -- Resources/WeaponStats/sniper.tres | 9 -- Scenes/Projectiles/explosive_projectile.tscn | 8 ++ Scenes/Projectiles/homing_projectile.tscn | 10 ++ Scenes/Projectiles/projectile.tscn | 24 +++++ .../status_applying_projectile.tscn | 9 ++ Scenes/Towers/hitscan_tower.tscn | 7 ++ Scenes/Towers/projectile_tower.tscn | 8 ++ Scenes/Towers/tower.tscn | 48 +++++++++ Scenes/UI/card_hand.tscn | 72 +++----------- Scenes/Weapons/hitscan_weapon.tscn | 26 +++++ Scenes/Weapons/projectile_weapon.tscn | 8 ++ Scenes/Weapons/status_applying_weapon.tscn | 8 ++ Scenes/Weapons/weapon.tscn | 54 ++++++++++ Scripts/AStarGraph3D.gd | 2 +- Scripts/{ => EnemyAI}/beelining_controller.gd | 0 Scripts/{ => EnemyAI}/enemy_movement.gd | 0 Scripts/{ => EnemyAI}/pathing_controller.gd | 0 Scripts/Projectiles/explosive_projectile.gd | 34 +++++++ Scripts/Projectiles/homing_projectile.gd | 17 ++++ Scripts/Projectiles/projectile.gd | 23 +++++ .../Projectiles/status_applying_projectile.gd | 15 +++ Scripts/Resources/TowerStats.gd | 7 -- Scripts/Resources/WeaponStats.gd | 6 -- Scripts/Resources/card.gd | 12 +-- Scripts/Resources/card_text.gd | 13 +++ Scripts/Resources/stat_attribute.gd | 5 + Scripts/StatusEffects/StatusOnFire.gd | 6 -- .../{status_poison.gd => status_dot.gd} | 2 +- Scripts/StatusEffects/status_radioactive.gd | 5 - .../{status_cold.gd => status_slow.gd} | 3 +- Scripts/StatusEffects/status_sticky.gd | 10 -- Scripts/Towers/hitscan_tower.gd | 13 +++ Scripts/Towers/projectile_tower.gd | 30 ++++++ Scripts/Towers/tower.gd | 92 ++++++++++++++++++ Scripts/Weapons/hitscan_weapon.gd | 37 +++++++ Scripts/Weapons/projectile_weapon.gd | 25 +++++ Scripts/Weapons/status_applying_weapon.gd | 15 +++ Scripts/Weapons/weapon.gd | 58 +++++++++++ Scripts/card_hand.gd | 27 +++-- Scripts/data.gd | 33 ++++--- Scripts/edit_tool.gd | 2 +- Scripts/game.gd | 7 +- Scripts/ground_enemy_controller.gd | 2 - .../ClassCards/Assault => Scripts}/tower.gd | 3 +- Scripts/tower_base.gd | 4 +- Scripts/wave_manager.gd | 8 +- Worlds/GreenPlanet/Enemies/air_enemy.tscn | 5 +- .../GreenPlanet/Enemies/enemy_controller.gd | 3 +- Worlds/GreenPlanet/Enemies/land_enemy.tscn | 9 +- Worlds/GreenPlanet/tilemap.tres | 8 +- 204 files changed, 1920 insertions(+), 1951 deletions(-) delete mode 100644 Assets/TextureAtlases/g_accelerator.tres delete mode 100644 Assets/TextureAtlases/g_assault.tres delete mode 100644 Assets/TextureAtlases/g_glue_gun.tres delete mode 100644 Assets/TextureAtlases/g_grenade_launcher.tres delete mode 100644 Assets/TextureAtlases/g_rocket_launcher.tres delete mode 100644 Assets/TextureAtlases/g_sniper.tres delete mode 100644 Assets/TextureAtlases/gun.tres delete mode 100644 Assets/Textures/8directionplayer.png rename {Assets/Textures => PCs/Universal/ClassCards/Assault}/g_assault.png (100%) rename {Assets/Textures => PCs/Universal/ClassCards/Assault}/g_assault.png.import (70%) create mode 100644 PCs/Universal/ClassCards/Assault/tower_assault.gd create mode 100644 PCs/Universal/ClassCards/Assault/tower_stats.tres delete mode 100644 PCs/Universal/ClassCards/Assault/weapon.gd create mode 100644 PCs/Universal/ClassCards/Assault/weapon_assault.gd create mode 100644 PCs/Universal/ClassCards/Assault/weapon_stats.tres create mode 100644 PCs/Universal/ClassCards/Blowdart/blowdart.png create mode 100644 PCs/Universal/ClassCards/Blowdart/blowdart.png.import delete mode 100644 PCs/Universal/ClassCards/Blowdart/blowdartweapon.gd create mode 100644 PCs/Universal/ClassCards/Blowdart/weapon_blowdart.gd create mode 100644 PCs/Universal/ClassCards/Blowdart/weapon_stats.tres delete mode 100644 PCs/Universal/ClassCards/BombLauncher/bomb.gd rename {Assets/Textures => PCs/Universal/ClassCards/BombLauncher}/bomb.png (100%) rename {Assets/Textures => PCs/Universal/ClassCards/BombLauncher}/bomb.png.import (71%) delete mode 100644 PCs/Universal/ClassCards/BombLauncher/bomb.tscn create mode 100644 PCs/Universal/ClassCards/BombLauncher/bomb_projectile.gd create mode 100644 PCs/Universal/ClassCards/BombLauncher/bomb_projectile.tscn delete mode 100644 PCs/Universal/ClassCards/BombLauncher/bombweapon.gd create mode 100644 PCs/Universal/ClassCards/BombLauncher/card_bomb_launcher.tres delete mode 100644 PCs/Universal/ClassCards/BombLauncher/card_grenade_launcher.tres rename {Assets/Textures => PCs/Universal/ClassCards/BombLauncher}/grenade_launcher.png (100%) rename {Assets/Textures => PCs/Universal/ClassCards/BombLauncher}/grenade_launcher.png.import (67%) create mode 100644 PCs/Universal/ClassCards/BombLauncher/tower_bomb_launcher.gd create mode 100644 PCs/Universal/ClassCards/BombLauncher/tower_stats.tres create mode 100644 PCs/Universal/ClassCards/BombLauncher/weapon_bomb_launcher.gd create mode 100644 PCs/Universal/ClassCards/BombLauncher/weapon_stats.tres delete mode 100644 PCs/Universal/ClassCards/Fireball/fireball.gd create mode 100644 PCs/Universal/ClassCards/Fireball/fireball.png create mode 100644 PCs/Universal/ClassCards/Fireball/fireball.png.import delete mode 100644 PCs/Universal/ClassCards/Fireball/fireball.tscn create mode 100644 PCs/Universal/ClassCards/Fireball/fireball_projectile.gd create mode 100644 PCs/Universal/ClassCards/Fireball/fireball_projectile.png create mode 100644 PCs/Universal/ClassCards/Fireball/fireball_projectile.png.import create mode 100644 PCs/Universal/ClassCards/Fireball/fireball_projectile.tscn delete mode 100644 PCs/Universal/ClassCards/Fireball/fireballweapon.gd create mode 100644 PCs/Universal/ClassCards/Fireball/weapon_fireball.gd create mode 100644 PCs/Universal/ClassCards/Fireball/weapon_stats.tres rename Assets/Textures/accelerator.png => PCs/Universal/ClassCards/Gatling/gatling.png (100%) rename Assets/Textures/accelerator.png.import => PCs/Universal/ClassCards/Gatling/gatling.png.import (70%) delete mode 100644 PCs/Universal/ClassCards/Gatling/speedytower.gd delete mode 100644 PCs/Universal/ClassCards/Gatling/speedyweapon.gd create mode 100644 PCs/Universal/ClassCards/Gatling/tower_gatling.gd create mode 100644 PCs/Universal/ClassCards/Gatling/tower_stats.tres create mode 100644 PCs/Universal/ClassCards/Gatling/weapon_gatling.gd create mode 100644 PCs/Universal/ClassCards/Gatling/weapon_stats.tres rename {Assets/Textures => PCs/Universal/ClassCards/GlueLauncher}/glue_gun.png (100%) rename {Assets/Textures => PCs/Universal/ClassCards/GlueLauncher}/glue_gun.png.import (69%) delete mode 100644 PCs/Universal/ClassCards/GlueLauncher/stickyweapon.gd create mode 100644 PCs/Universal/ClassCards/GlueLauncher/weapon_glue_launcher.gd create mode 100644 PCs/Universal/ClassCards/GlueLauncher/weapon_stats.tres delete mode 100644 PCs/Universal/ClassCards/Icicle/icicle.gd create mode 100644 PCs/Universal/ClassCards/Icicle/icicle.png create mode 100644 PCs/Universal/ClassCards/Icicle/icicle.png.import delete mode 100644 PCs/Universal/ClassCards/Icicle/icicle.tscn create mode 100644 PCs/Universal/ClassCards/Icicle/icicle_projectile.gd create mode 100644 PCs/Universal/ClassCards/Icicle/icicle_projectile.png rename Assets/Textures/8directionplayer.png.import => PCs/Universal/ClassCards/Icicle/icicle_projectile.png.import (64%) create mode 100644 PCs/Universal/ClassCards/Icicle/icicle_projectile.tscn delete mode 100644 PCs/Universal/ClassCards/Icicle/icicleweapon.gd create mode 100644 PCs/Universal/ClassCards/Icicle/weapon_icicle.gd create mode 100644 PCs/Universal/ClassCards/Icicle/weapon_stats.tres delete mode 100644 PCs/Universal/ClassCards/RocketLauncher/rocket.gd create mode 100644 PCs/Universal/ClassCards/RocketLauncher/rocket.png create mode 100644 PCs/Universal/ClassCards/RocketLauncher/rocket.png.import create mode 100644 PCs/Universal/ClassCards/RocketLauncher/rocket.png.kra delete mode 100644 PCs/Universal/ClassCards/RocketLauncher/rocket.tscn rename {Assets/Textures => PCs/Universal/ClassCards/RocketLauncher}/rocket_launcher.png (100%) rename {Assets/Textures => PCs/Universal/ClassCards/RocketLauncher}/rocket_launcher.png.import (70%) create mode 100644 PCs/Universal/ClassCards/RocketLauncher/rocket_projectile.gd create mode 100644 PCs/Universal/ClassCards/RocketLauncher/rocket_projectile.tscn delete mode 100644 PCs/Universal/ClassCards/RocketLauncher/rocket_weapon.gd rename {Assets/Textures => PCs/Universal/ClassCards/RocketLauncher}/target_icon.png (100%) rename {Assets/Textures => PCs/Universal/ClassCards/RocketLauncher}/target_icon.png.import (68%) rename {Scenes => PCs/Universal/ClassCards/RocketLauncher}/target_icon.tscn (75%) rename {Assets/Textures => PCs/Universal/ClassCards/RocketLauncher}/target_list.png (100%) rename {Assets/Textures => PCs/Universal/ClassCards/RocketLauncher}/target_list.png.import (69%) create mode 100644 PCs/Universal/ClassCards/RocketLauncher/tower_rocket_launcher.gd create mode 100644 PCs/Universal/ClassCards/RocketLauncher/tower_stats.tres create mode 100644 PCs/Universal/ClassCards/RocketLauncher/weapon_rocket_launcher.gd create mode 100644 PCs/Universal/ClassCards/RocketLauncher/weapon_stats.tres rename {Assets/Textures => PCs/Universal/ClassCards/Sniper}/g_sniper.png (100%) rename {Assets/Textures => PCs/Universal/ClassCards/Sniper}/g_sniper.png.import (70%) rename {Assets/Textures => PCs/Universal/ClassCards/Sniper}/scopetest.png (100%) rename {Assets/Textures => PCs/Universal/ClassCards/Sniper}/scopetest.png.import (70%) create mode 100644 PCs/Universal/ClassCards/Sniper/tower_sniper.gd create mode 100644 PCs/Universal/ClassCards/Sniper/tower_stats.tres rename PCs/Universal/ClassCards/Sniper/{scopedweapon.gd => weapon_sniper.gd} (51%) create mode 100644 PCs/Universal/ClassCards/Sniper/weapon_stats.tres delete mode 100644 PCs/Universal/ClassCards/SpeedEnhancer/card_speed_enhancer.tres delete mode 100644 Resources/TurretStats/accelerator.tres delete mode 100644 Resources/TurretStats/assault.tres delete mode 100644 Resources/TurretStats/blowdart.tres delete mode 100644 Resources/TurretStats/bomblauncher.tres delete mode 100644 Resources/TurretStats/fireball.tres delete mode 100644 Resources/TurretStats/flametower.tres delete mode 100644 Resources/TurretStats/glue.tres delete mode 100644 Resources/TurretStats/icicle.tres delete mode 100644 Resources/TurretStats/reactor.tres delete mode 100644 Resources/TurretStats/refridgerator.tres delete mode 100644 Resources/TurretStats/rocketlauncher.tres delete mode 100644 Resources/TurretStats/sniper.tres delete mode 100644 Resources/WeaponStats/accelerator.tres delete mode 100644 Resources/WeaponStats/assault.tres delete mode 100644 Resources/WeaponStats/blowdart.tres delete mode 100644 Resources/WeaponStats/bomblauncher.tres delete mode 100644 Resources/WeaponStats/fireball.tres delete mode 100644 Resources/WeaponStats/flamethrower.tres delete mode 100644 Resources/WeaponStats/glue.tres delete mode 100644 Resources/WeaponStats/icicle.tres delete mode 100644 Resources/WeaponStats/reactor.tres delete mode 100644 Resources/WeaponStats/refridgerator.tres delete mode 100644 Resources/WeaponStats/rocketlauncher.tres delete mode 100644 Resources/WeaponStats/sniper.tres create mode 100644 Scenes/Projectiles/explosive_projectile.tscn create mode 100644 Scenes/Projectiles/homing_projectile.tscn create mode 100644 Scenes/Projectiles/projectile.tscn create mode 100644 Scenes/Projectiles/status_applying_projectile.tscn create mode 100644 Scenes/Towers/hitscan_tower.tscn create mode 100644 Scenes/Towers/projectile_tower.tscn create mode 100644 Scenes/Towers/tower.tscn create mode 100644 Scenes/Weapons/hitscan_weapon.tscn create mode 100644 Scenes/Weapons/projectile_weapon.tscn create mode 100644 Scenes/Weapons/status_applying_weapon.tscn create mode 100644 Scenes/Weapons/weapon.tscn rename Scripts/{ => EnemyAI}/beelining_controller.gd (100%) rename Scripts/{ => EnemyAI}/enemy_movement.gd (100%) rename Scripts/{ => EnemyAI}/pathing_controller.gd (100%) create mode 100644 Scripts/Projectiles/explosive_projectile.gd create mode 100644 Scripts/Projectiles/homing_projectile.gd create mode 100644 Scripts/Projectiles/projectile.gd create mode 100644 Scripts/Projectiles/status_applying_projectile.gd delete mode 100644 Scripts/Resources/TowerStats.gd delete mode 100644 Scripts/Resources/WeaponStats.gd create mode 100644 Scripts/Resources/card_text.gd create mode 100644 Scripts/Resources/stat_attribute.gd delete mode 100644 Scripts/StatusEffects/StatusOnFire.gd rename Scripts/StatusEffects/{status_poison.gd => status_dot.gd} (82%) delete mode 100644 Scripts/StatusEffects/status_radioactive.gd rename Scripts/StatusEffects/{status_cold.gd => status_slow.gd} (90%) delete mode 100644 Scripts/StatusEffects/status_sticky.gd create mode 100644 Scripts/Towers/hitscan_tower.gd create mode 100644 Scripts/Towers/projectile_tower.gd create mode 100644 Scripts/Towers/tower.gd create mode 100644 Scripts/Weapons/hitscan_weapon.gd create mode 100644 Scripts/Weapons/projectile_weapon.gd create mode 100644 Scripts/Weapons/status_applying_weapon.gd create mode 100644 Scripts/Weapons/weapon.gd delete mode 100644 Scripts/ground_enemy_controller.gd rename {PCs/Universal/ClassCards/Assault => Scripts}/tower.gd (97%) 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 8766948cf5988cc743c57e995a0cb039a53548ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1552 zcmV+r2JiWaP)Jp*K@mjk?A;m(<9$gWL6SGTxgY1fbGdT{?4gX7HCv`3n=2UMV8F8+S@AgE zX{Qe--AqI^Q=gfi57Bh}JYrMz!LNEXzt?be#uKInwl?8OO*aa{G7X`Pg06U1xK~R@ zbsVc>Ep23lM})oEOi`=OqrSwI$So~M z9gsbUNthr3Jj5unPKE-0sX584v2V2OnYffV{mW7?9$0b)wy;NBh7%xh zA|y`0We|JVat5{_gDiQ{IPo)S`+F9XHnIIZl6wA*M)34hU*$kK@URZN@GAfE_QM~j z@$tu3cP$H-v*1(itG(Fa!46FH_zc*{1;#7yx9Oq94WK5_>lKD@99CeXR*nO#ui(Mq zXJK=A=tmYV*5~lEacB6jzJf!BepLhD2%tf9%rs=iBNH1n?&h!>e};#?z?k9x3_k;t zYJ%&X9I~)qwjz7?06rto=4s>GeC|H0E{Au<`PCk1@gQEC|C5t-t-k1{KL5U&Lj>M)1<&s!enfMinA~|smRfA{Cjd$W!D}oB z%7JS+U}^yM@Ly|_i)}f;IWTPi+K&_*P|ZJ{19f)Jzvt5iaDEBJupB4{tPZ3$fasq9 z(t6T3i)op)C48j#(zqFBRGk^lXkE%d8aKl7u4QnL)|AFkjiLrX3v=)P^f&MnAoH4X zS&2{m=;@=swe77x!raWGD|#^7*A<%SIj85}>Zhmy%!C7YOD4mN5swz%YKSy1L!ShD z>B}Eo3maH%8a%VVr$#mj}CWE&FjL zt`>c>9IgIg1At=Mf|Q^qm)6l6XlbKgT*^bPL$RjcBX!|0a!pa zpAdRNxj8A9EPRgF%6X{=D>+HAR&!sCC-uP_Cq3U9{cHnh$x6Z7JPnyP*K?nRE3GSy z^JtvqdO3LWXZ$4VXW#%lr97l@673pXX}vbC+W2xa(s!#PH5GMh<1w$sb2*^hM{WF0wW0=~?LOLg&VZ4TBaG1+ zhc%lYahc_M)_380IG-hVr+1Oqqw_pklW-6<0PluMh-ffIqBV6YmUkd}&v>L-@jBpn z9u5tl-FQ!NudvF$mjmtDx|h0ZsyQ@(C>d?zSiSizew409sIz*n9>G(q#_V&P)&Q)6 zC3*Dkp(XJAoNP3j61I9xmAcB-{G^*U#xccP6O=G2TPq&6o0Q<5vBBdW#!* zzf*&E-@N(YW8^vR?aQG7>@>Vbkel;#J+5ZW=Q?nevz6;YY<2H*aA*Lr^zKou4(>hn zakYvooSSX~$RKX1X~}_2&iL45<>EbbR$OZy@b%RgJwPw+j^cQ9ER`7 z@D5}BEhKz2kr0rW%DqeVxLM7T@PHVO%P2p>2Muln9@V44rg?ZB#Ye+q2WGThtcT;f z*Khv)Kb&|EBlijrrJrKebvaNDlmq2JIZzJV#eu&-@B$K8rnHj)0000 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 0000000000000000000000000000000000000000..ea13f58f16dce7125fc3a6fa52c459c3884a47e4 GIT binary patch literal 1777 zcmVZLC2kN;62}a^!kY7lFNvt;$}-gv z+M}?MMG8qsP*A}pbT~**H7T>szNv<931#vyIxSSe$x%d!ym3-1)K#Ubk*?CCqbhR$ zpQo+OOncoUNucM|bw9^|&^}PFx$f_&>(3CL~JFS-K`kAQKyAKmx^-m7Q& zc8vIw00009a7bBm001QD001QD0fJ)%8~^|XCrLy>RCodHm|cz>Hw=W=Mu7Mp_BE4- zoHGaUThd%?EeL^>iuxZc8(2t9Q6%dVM>F=@TRur32_%6ekOY!I5=a6`APFRaB#;D> zKoUp-UxL85FQIa?$p4QKfgcc%;Y48?@WO; z9}S`AXRVFwwc_ox&8&T9tep(rr0^Nf)}kjRvvmLb>reUh|NdvKw``M23x(oeK}yI6EJz^>wY;oq{)YXbIW*ulB00agOuA$n!~Wo+F9a`5coBhG3be<0C{ zQHuo#CXa}I_ICe3WpbSIiEu!T!b9dOm@K~mAUJxS5Df^gK7zxDjulLnH-HF+_-uml ze>u-?g05?pEdmE_H2`ePCt}6b$K=$MOb%Kub_m^i56h z)ZX>=sW~777|A-?TR9^vWPdM@;RdjZuh~3dfZ?rMF?&T@u|{pZO(1zo&6-8IR;yEZ z$W!wv*Qif#xygEG6GM?wmdUgRkfaguH9L9~>$~!LCQf zNBhe>3ccJv^PS_!ZA%+Kif9RE#4tXr;FEqW7O0KU z%lIH(Z46yawLq=4r{Ly)P~cPUxwh8J8d%`vz8&u@503?E6ecYn_{vx^S$+c`d6^h? zJwk|xvYys@x##h3HeI=A*E_>QYVla;IvF4BujktuK$0?|ab}(YaJGk<6i+*QM%}_IA@s1 zLCc>!`tao)cA2-H<2L{be2Sia6EGl=|Hd)G1WllIXrvyCYZ^cbj|kR6t+^-I^1a@4`wCh(vLOnN) z5jHh0S2utL?g_4m)BAIt1d>1!NCHV92_%6ekOY!I5=a6`APFRaB#;EYG=cvC;_l^Q TUxaJ(00000NkvXXu0mjfSeiPg literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a9a2fcb719cabd96ab3ac4fc35dee08cf7b66e34 GIT binary patch literal 2736 zcmV;h3QzTkP)w3ATcbMZiL| z@m2T_v=wX>1VIr*?CgCt64pB=5D_!W?EN@1=W_QfxFUJIV7Jde!6;d=a44{pSPpn! z=%N=7en{%JIU9{eXt_S`XjAoeO!aDg@88vxO4~ZLbqG)Crd1M_X^5IpP_I;57hmx8s-p@87qw{Q9T+sekD(Q}axNaLbfY{bp-*`CK{| zi=EOCm!F)H?Sw8ksSm)Ba)V<5BhN0IlamaqOM!zZ$J)eu!%d2A4 zKAL2O1s|BOXI5Rf4~6eX`*@A|Ii5%8H1!qW;6@2ndFrF5iao23ce20Bxjgy&1qX7; z!_SJJJp8PW&}jG*;2vP;`G`qJ)RmQsQmyZ0>+;ekzaIRalb4K)d(JNn;~=nP_ATy-&AsP}5+Du;Y>us!CzTKjtr!R`QXIW2H!`tM0}6esUiE^VaF zFSeIYZ-$GtS3~Sx+H`*dv@Smh%k~$bSJu{}6LXVyNV$AASLy;9co^w8n>{>eY%L)kS*f zsm^TqZU&&0B)`Co0(64DSD&=yJMzpDo;|CD7d*V+<= zoFqX$D|ugGO)mGuj6P?bIr8Qh8UO$}K=ylrsFwOFcl+Mb-@tEPRbJ0GLbO+(u|3S0 zf2KXE>*$$#+U))n!f?KohCqM;GwfL>ibqi>%?61M7)rIDzrqAu(aQGQ3dpIR#`H87-i&yK+ z>?b?>wQA4wZ#tGg4sWKylK=@|h@^i7q94UdT z?2M66+vrmn>1CWgcE`@U7?6VHr$>H-A!bwto_oYpb zB!|DZ`T!`ehq1@6SJyk=V`z&GiY0H)_r2%2zuLP_yFUWC^lSv!^!IE8Y>6cjPTqUT zKSR=MNA~apW2>fxy_JuDL@)1Mam9y5Zl{lP_txeofC^I#2MD3e;Xnj+n>{t&k64R{ z4*)r;K?JM6;e@}pZavB$NWGfbSdVk|a;_P}MgxaFQfKuSox1-EAXyicmxawru2y_n z*;jG*v3ElFa`ha9AZLqBU*^_hdT2N=S1vmJ=+KI1z98kxbD){f)ApKb|AF|5fRGYN z_IX$(0KUu>2?!EPA2x)G{14pd)mvBidq4QMxb4Ngm+w0~Z?r-eudVi5-bJ4eBCQGl zu{^9Aik3L4T_M^c4avl`XRm5NU)Q4IO1z5EqgpGTsaKWL=v5DZl8*{d9XRT15lFw= z+UwbH-yE~~KMeRyLdQ5mgWg5=Vl7zEDR^GFlcOG)=Y7$p6zB}{I?Tav_ztK`T9u<- z?%%UH52DyJ>lr$%Tyzg(@>Xv8Wb?RY__U%+`6G~^7tHPfAppGI4lY}HekKr0|Gn)q zbl_v2LAW<&`g8Gn+LZ&KCTEZb#3-oDr%r1x=6Si_>TbUmGGWJ-4tjRdy5X~iU>3#* z_2vMG(NW@+Du9BFR`ykX6-!^*RiC52?TnjewjV<k>s2`~P{j=$nfENe#Xp#e~{?Vzbo0>G-QRqEtN0cT#Tcjn#0-p-!V#4(@` zKI~RY;^h0Dy_e{;1xoE+9v^RXVe%Ds`t`6H&vGk>F*ah#O#0}l&h`s#q*P_6`wk6&(6k8dAx#19CBiDcJ^VBA z9tMW@9{lOu!+LlC)VxQqcer9X2z&WoH7|=X+b&T!S;<)33$&)B)g-7CGX* z6~Hs(XL5UIKRPCz^yInHz;!56vSiu*aQJekM&U+e>Cdr{?v<0Hqcd-d-JM&5@{+r! z6I7Dp=s~KlYNgS`MCuW25dj|Hu|1!d`yR>5&po>DX$1F*@7}qp%{nxC*Z=^sN0J<0 zA&xJJ;Ae#x_E%c>v_XqK4U)6!vIdQa*w;|El}L6!;$&oj#yvq(1`y0000 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 0000000000000000000000000000000000000000..a3540a80cdebc2881a7ba99c9249c7577a16ed54 GIT binary patch literal 1181 zcmV;O1Y-M%P)w3ATcbMZiL| z@m2T_v=wX>1VIr*?CgCt64pB=5D_!W?EN@1=W_QfxFUJIV7Jde!6;d=a44{pSPpn! z=%N=7en{%JIU9{eXt_S`XjAoeO!aDg@88vxO4~ZLbqG)Crd1M_X^5^BjT)vomd3$W@xLAvTcbaB*spJ^Ms0TUM9+=VN%&x#6 zdS$G=(=@qA`opK=!;(0|TMa4C<@L(?rSBHX49XX9h}9j7Rs`&-Hss`1v9Gar#Kh;bA@n(dj{A zhP*1*MFNPP;JjlP&=Ek!Q!y3iIvOH+20e5D&X9pfGF#Z!y1=L3q+Fn&rax()r+tkS zM09{mv%VP~$vU@S4njI1g#yi1`YmPv64rofg*ylE{Q6Tx{xg3%x30jsc1i3GZy@U; zfl~T4?EseOF_>=M@I#`$TOjMW1|?8RKS}VO4VY;ssGIdl(4K5T)<`7eY>F8$IUS&w zWFW;PVme`gF1cE~YJs8~tRsRRw?zV|cCC0xojPGeOfjuHW)^6xmV!PquLS%H#a1J8 zEhIcXk_FZQ{2&uP8-A^FDN?quT}dE-t+k<-0o<6&(`t`Tqhw&Xn&x2wIkX@HNR#{u z=4ZV9Z|DQIEAWQ|2XkNTtr`$;$aCLkW@^{e3!dxJ6YOzd_3OU?5itEw(1Ma#`<_J! zfsCSF)26D>v>%B?aOfBTwjxv5x&~;n09}MQE{*_9ohku>Q&Ce%Kpx7>i2W5gu`VI2 z65QS9Qbf&+q vKw4K&1Bwpd*q;%oW{-2~_tEY0vvt`wp;J>G2DlhA00000NkvXXu0mjfk*pCa literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f19037b90d4c3f5ef2c6e6d9d3692a37de465abe GIT binary patch literal 2588 zcmV+%3gh*OP)w3ATcbMZiL| z@m2T_v=wX>1VIr*?CgCt64pB=5D_!W?EN@1=W_QfxFUJIV7Jde!6;d=a44{pSPpn! z=%N=7en{%JIU9{eXt_S`XjAoeO!aDg@88vxO4~ZLbqG)Crd1M_X^5f_F8Oc=p041Fg5IA1Md+TUXp{f^?e{}_ z=yUra$PUl)Y4EGzdLJta^ftI>AUJf79)$N-K&9d8>S=yYjhJ}Gs!d&ODC_msQ9M`ZH1rjq z;8d{DJ?h{Y&3i<=4#Uj-ny>qwT32Y)JpgBbK}|e8V!T3(zst4Zx*y?kwmw}0a5f0k z$1@_#m9ewUbBsP9?$6F=YSSEmGcR|-SKj4!>p5!F=n!~(R8#M4?a$JtIsj)~S|j_2 zJ0m<%!@Q|c9&EKZ_-g*FChX7#Pc3HDR~>-SV!Psh(){`Fu9`D-W`-bYuGZ203?}64 z9D;NJc3v_|lw>&&D|LEvy@64~Jf>DV%8zWd8j){Tf5HLSRXhT|VtW*>sA16%M79;a zt=t`YgntR#QMd(u#lQ0pB%@qMn#{q8a_C#pfw?Psd>MdIK?vgNb%nHIo#7ibRBQI^ zcMbsWo6%(WPrNj1mS-Jy-@2+aJ`~vTmksuuhxC;kKV-|v-7O@YjqKq z#k$?ktgG5)F^rAYmNrWR5CMv81O^}dY&v`e<=5JILTRU(O&gYKWegW zZ!OKQ4Z)V*0K6;$2jFTa5i}Q#&mQ>kFotKf-2y)UDgFZ&_0{$@aiTos0)NKO;~2}D z@KX!guxei9*Vxg0q|wqRKo5Y3klL~u-gum8%W`(wBaD%)=T0_K^J(*Z*y+=FkDED1 z!+vohV>>hj&?s=%>y6xW&07%%8N}x-BEjn#qH#(cIu$Ek$tIo z(CBa&5yLN45!@G@RY3ZQ%}K(pHa|=Lfe-DqwU@K=Q~c^vJMX1G@-aqN>HwSb);Qg3 zoZ6#(sejjL=_`Q5a0$ru5Y#x$M~xZ@!Hm#{K0Q1YAmg2{#`qpuxE^lPGxV9!=spPm zPzvV1${eAcl^h7`*+Q#>LJ|%IcG?(&y0r0*;yZAny|$JbRo=>l&GdSV$^0H)J1f^L zjx-f|Paf-)*qcsEp8zaI@;FBVxDD}|!#Y@%klJ;xF%*LS;;S~3ak^3rwQ--}q0PAh{Qays(f-T3Wk$fLFoo0RN46*zBuJ2cxA9EELHrkPtW{f`KQJqYEH{el z<=Yci;d#)Cx@0(MFLC=m0az4kL`H2bF-cTw*7n|b#(E=ZZ>kdAt%OVYn1P? zjH%Vkc%s&*W_o}4E}0ci3(xLBCL-&0JyQVBEB26I54N*3V3XN&#ZvPjj&uT^cg+}s zc#ngP54G9y8-PW91sH#MjGh&|+FSdK=t>hQQ0wkdKO4_xYktj#xQwUP(3l=Q!vWYq zo|gjyf{U`&=n|5@t}9U^SCM%R2%t;|LpTiR7WB1@6sU(^JIi=%V`a$gpY zdXdjnFS2=_o-Z2!TncamSQ9`2_U?Dr>%BLN!ysfn z)gTK~t+F~TdsbWXmIk0kQZMm+j{u%iJF{Lb<`F*VgD1LM8=QnhY1?f}0{}D`!4^^% z;4Bel@wM=e_-hzAyl3!d?HbnQ0YLE@!P@2U`5?67U)2wd@I?68D7cf5C~b>v%K!jL zMy?m7iqM<$igC~hk7GacjSyUSzkb^QpyG{L?Y8^1@n-iB08f0=AkD_nnvUv@on9UT+gFM zmkj_x)<`l&R}!bqiO|lK#CU$CwWSTUXldY_k>@$o>GA;}xE5K)jjSX!lJjh_EnP;3 zAc|L=9yS0je2cip`&mi3@0HFyIz&x%j*Nl5)V#Z0r>7Z!JHnrU|3j>fVDE&2ke4&f z41qSBgthUoMOr=O0Fc0UU3&)Lv!Mrxyy5DMnt!XILGS(ZD9}3uJ&3dBBlrCY(4*i3 yV^#;D*8KMXJg~8|SN9G?tMRk 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 0000000000000000000000000000000000000000..9f8216dc39cd4fcb4c1a4a95181d906104fcbe9c GIT binary patch literal 969 zcmV;)12+7LP)w3ATcbMZiL| z@m2T_v=wX>1VIr*?CgCt64pB=5D_!W?EN@1=W_QfxFUJIV7Jde!6;d=a44{pSPpn! z=%N=7en{%JIU9{eXt_S`XjAoeO!aDg@88vxO4~ZLbqG)Crd1M_X^5CKTauDxv#ppg7P{3$k38DeiSD42ANKEr2)mZA)Q0NXdKq)7$%! zy1PF%5OOuaaA*uL@5Mbs6lWb*)HA2Xl!vcpKXX&v5QVs^2x1gx9;=FLe6NRU4-+FJ zs2^d-L)?L*Krvi0fwOkPE|KqbgIucV;h`}-0VP(GAmO7J#zyOU2@@&0R#NUcjf$KY z@7~YN2L%WLNMH&; zG6B(%k&&@zpeN>JdY(0sCIb`YU%@Q78cIT%_x))p{1$IQ;~GomRs*~c919X8(ZU%*uhp8Q6TcCGL<`jf_UV5K rja9YIwcG*iTmk10X&v^dHtGBTEiq26r)QdD00000NkvXXu0mjfPNAs{ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a7d80b02c2b5ed0a3eb9c2de17c0297e3c6be998 GIT binary patch literal 835 zcmV-J1HAl+P)eth?Shm$X$B@2e-HH?8}`)(=`kIc<4L_$xr z(2hnk;k4m7<5N>f{$1}k)Tw$MQ@#Gb_vdQKn4ST3O~NCFp$4YyO!{PaIaM;8Q=4$FKIRH*=ecW zvU~7IkswY4of69w@QF#aC9}VMgI~T$isCWk?NG)QM~=LBqoS6it0^@rx+zbAvdaB; zo?do%sM@_X4vh~%@X`mNEvRe;!N)-mR1Ts39?tBVzbHA4zKOnB(|Y%yV+~HuYnr|d zr|S^DbJA}5ORATxWwY>n3~lq!c?Hdj)vUhHIl6_JRry7iu(J#Oa=&Bg6Su!-=oe>4 z3;+NC32;bRa{vG?BLDy{BLR4&KXw2B0eneBK~z`?&5}V*#4rp+Tet;c1$USmutwsb zNUXU5cYxK1Tc9$(VC&m;+@zf_M5>xN_Wv(VhT)%%>BNPv`xu?WnyJrs=Mx1%O5f;myU2A*B7-t9gW?;s1a)2Vip;imCj)0MQpTAcDGR>>D>MT|J`4$wdGF N002ovPDHLkV1f~8gB<_> literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2ac94f739e46ea8cfbce9fe126eb6fd34242c136 GIT binary patch literal 7619 zcmeHMd010Pwy!_{Wp$$wM7;zM5JX8;gS+ezvHuo3}2`?V@yn< z=swVK=e!I6QE~t%Nfa4uZg@->F@Y1k$uA_Pl{_Q)WkK)I<(sc*&8gdj$2a-=SE+D> z&2x5jiME8fml|cVN0Y5pv-Sp+dR(ggTU(c)A=Y7}ya1mV(aO^oXb_=t zSZ7jP)lr{qQ8lMb?#dty*{a` z%IT)5#=Wj-y0r8Zg9kh1+!TB)=yOfhS9FTAZ{%-5cC8^7HA)wEif)87&Fr)ML^EnB%8 zOS)Cn-aT?2bn@C=Q;s_m#Vlv$Hk|jXBph#{7z78s{WTE9;jv>_YDJ>{CA6sHLKne< zv)iR?h3dX`y&X%J>}j4A;rc|McBy*mHbRW;{8g1EP99prwr1Ro8G)YupqU19S)>W0P!}|kPEI+c> zbBl9&@Lo@n>6JU4=H{={Txm5qCbS<(L&YI1ePzNrq+ zy>DEv*Nak_r9iqG6gwjPwm1sELpLrYLCat3ZGI=^cklu^U|{JZD$cOyRWJ6 z>{5F`Bw<;Icgqru4UIwm4dgu0qM30ogn0}0#o-Rc$ZR?4lWf;j7h=V$lH=8cgbvAl zIA$Ue>r@Xti#S*?2==* zdj2lEs4Ct!Cvufiw%wfJj8AwpG%O0MifeUUR_plEagIiv^~>y?BdfzU1?0`tFS6;} z{vtSMm3mB(eXnk<&h(_cj`>AYpTmZ~oSk36M{{a+XOvRcj|RCf1s%ziVsd@6g~GQ} zHXh!>woH!gDco3?-@S3Mkt-we_@b$aSdPNqGW6mH?ljIOJ?qc?eg4S1Z_N(59PAN3 zt=?KV-J74%@nV)ogQ-O)mXy%AWqnpu-s8}QBL%|wzLiA{O(IgpFE2Q8gF~-7O)07w z*6YreT&MK-WiFg-kb}R)`>j}KMc*mmIkE!@Z_!9uDo1ypSD`=YiiNqQ?P5Nk(rcMX z^O$Y$=0Or}ip;O(&O7weNd*y(oE*HT#a)(s=$hO7)tfr*PfOSHcXi#tJ5m!}P7i({ zUv?uD_j?a$xlvP!>)-zadfPmKD!iz}sarX-+wP_Y@7Miri~2UGcprOvHMz1r!Z~xT z)`@msYNT=N^V>Hg@`-AGv#%5fEUNOe&X?&acpKh zk;i3qEB6YXKTYjiMW>yX){Rfjg#LmT`T=NljD!w z3;}+MW>Fv~lJbmy%V=ue_LdmUw8z+^HxcJooU405ctq?-qun(#!pOF@+_^r(-tuyD zm4%y0;*$6Co*&kZ+i)89s$IBhCjL%gmgVl$jo7oF>Z^A(n)Lk43J;6D7x7HNF(&ZY z(Qu|m_~p&5+W8*5hmPS&%djS7~x(N`Var8e45}-xYi1r5`xc(9~GA zyd1D1Cq2>IVPL#!*MT;z^In|Ijn<i$6ZI*)zDR-)l`%xo_RiTQ|K(pTD`Q)bs!a z`Qb`M*PXR%21?TfMHkyc-xWBgF*eKzD6*1uzK!nmZ0)_-=ri|NXvzAafwf78uZTkq zj{J6k+hh{9$~t-f{L@L#PVH%MTl{FGihj36Gl0xYWY!mit})0Myk+^#r3}k(wI7}q zHdL*CU%cyZ{m|g$Kxh0`y+ds)LmxczGac|WSR6Vkz`s*oO?pY{{{Ct1n}Y)}ihX{w zi`HA#oL#s#EQL^Nm~=0fcdEBLMdM{{c5E#*GU*hbsSse%PIl1_ntIIdZR}{@<1*IO z5nIazywUHU5YI-5b8a=AyJTZ-bXCu@Yx2Eciz3QbW8dD#Id0xsaX+PJ^U#fR?7W_b zC(p_5Uzm}+B`+|7YZbOI)I$VUELE`!4iCq*;XF!_QHnK|x+Z17Nk z>yo83A8*85(U0ckx{T)H=Yd#Rj(vEz(%e1#BwxO?Kv%D&v>;c+Qqjf9&j~S8B%6>; zyn@_JY^*F4A?;xU0ILRI6akpUHN+8S=1vF&X4WWXPNj=63##OUDv=uiA|PXBWhI(~ znF7QSr=^9N+M)0tlpv$1J2@P0 z4A_a_fS@8POa@@{oG=+%D5j5QT4J&Q(?c;?n>v8$qIDJ+9$*9%!&^%fSD_dXU~&M{ z5o2;=B?v4r!{h;$fMSR!buBgtAQ~6~ut^T^g}@nskYE|Af$6|9$EOC%5Hh9!4J4xg zlc%85uz3K(J7M$eMF6vLLeLa7kq<@&9R|rz?Q0VR0so!fT(~y>=>vU{)Y8^&chQ*) zOQDAX1em_Kw29%&2u5tQkjGA7M&s~ca1=^P8FF?{7OsLz*9+F6`Bg*gu&~&@Ri0OT zXZ*b0ExS|Dl(p4aL4C_NE>7Adsv+Aw{Ci6**{zC;v{Gjn<)`e}fFYHC(;89}st2p% zou;}xdX#Lsq_ZL*XKNczur8^8-Ijf%Ons%zPZ#VIGY7fzr+$B{p5(I7r?_din?*-) zhi%u=rL>Wdm)3XAB+g!1Gjg&2dDQiT8MxR*mvuLHy}xX(a$UWBakb7P=93o9j^vIU zV_C&e!;pg4Cpv@ohpJauoSEF@*XYrs&`rI6ttzco#4GSO)NFr~Lt-!Z;{p53;|pth zJ@z8r_@mQq&gk7nE732yn7kphmbSgq?8zU#KdZa%u1+{{Jndwj(E{U2BOmdF8^iG# zE8`M!T5A@l?oxB=ZC1!K&54%3bk%8!pK8{~oQB`iFB;nJs@+z*yd|+eGfc(1;k)!& zmDAl*Y6Z>Q_nx^2&M}L6lax7cn%2nG@3?!mw$Zk7(;@!>*8_z`O2hn%VK1hCO5UkM z-qpE~xU>HWd0XJJWrO|=+&1kfizx|K0DwxT=G0cHT#9Q-gw?U2cc z8!89a7O+C8A`76FsetJLget~iX6q3<%pBmXtT1y23{K5aZ1OZrA7DZhH#&-}Lu4=# z5K%ER6rmyx@QXOcw6-YXgvesV+B$&s|HChQnYN+JXaqo;ejn(K1Ju@zo&cz=t^F~; z=rMqLp974J{s8a~>q;yZB|$GB7Euvri0A(WtQi9H8wb|h+&%%Uxw-jcVC`eT{5}WP z-u`C*+tIzV9Gedi8&nojp(zywsO_ReiSKlvQ%w5CV4&1YG6s7BI7%EY6%Hf-h$@@{ z7?AM00R@wH#0-Bz#u!;ojLAz%bx}H5!qCv06HrWkO(tYt5wrt~2B_Fv&>?RFi{?@~ zCl84LG82}F$P$j9YmWj<&Q>HLZv=?UC7uA0l;LgZ09D5bfNp_7??JGG>M{;px@*5S zAO1UJ{dui_5`A0zyXf13_!oWu$LafHzp4Qy95jQ=jS-H;#ss9lhUGs#EJI5U1gSxf zstA)B92O3f&titNISdw4a=gbW%JvOy^YwODQPh$II#p;ME=ypJNYW&E_!cB4z6Ais zVLLnf!tn#ZaPMC`qd$9RRCbZ|s|L$m8TS8Vp2u;KZF(FxWG_@=>tAeERS}UB~lb-6N&O zMYvb~ovq?4ue5+|TSigxBBfhpv!XNiUy0dr(+*8Y0>|aSJB{Zl0lS^q3rc{A3(Y>? zVO@W)3ph3dExCGQt>(1``J=C!lRFOKdV(Eh6&;;yc<6x5@HwJ+i!E>#dnptL4hclx zxLQ)WRIE)xC?io%$HMzGS8td6h4hq9ccg}kZakO^j|o~Z&4NQQe&%3s;rbbi_QNnf zGeHvP#A(Sq9d@9?e@Gk*HNcwy3c-v>CLm01SWGyZ%c2nc{oG7#2vkQ!2OSq5XTRmX zuE_rwGKCijjBtjKf%y6_^rAT<2BsvEr;96zDDvO$AIL3@5V$uo}ccz+4>*yOin1j%NBYgpps=AFE|Tb|FK+ z^oEW2S7d2iwvf$;c9S&PJC?JG$^W93so95?kUqocK>EDH9Tj~&aWZpczkZVhC)e1c zCzfR6_evkMzJ84)k;TEJC$^PnOOsu9)f^*U)q>ud*CX(Pq+W3O}#Kb4NNNIZ??@}bE|M5pp{L@$M zL9ZumM*6HeVP>Vumtk2*oA`Rm?5BRk#Q(8n8^3Dr3oZM&gCyIy@kdWQ8(w>kcevE1 xPP%Q 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"]