just reorganised files thats it
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
[gd_scene load_steps=14 format=4 uid="uid://dq8v5e11rvyi6"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bj7oafusrrsk" path="res://card_item.gd" id="2_kobsv"]
|
||||
[ext_resource type="Script" uid="uid://bj7oafusrrsk" path="res://Scripts/card_item.gd" id="2_kobsv"]
|
||||
[ext_resource type="Script" uid="uid://cl2mi4bnpatwk" path="res://Scripts/float_and_spin.gd" id="3_b2a1t"]
|
||||
[ext_resource type="Texture2D" uid="uid://dds48gjgiyjp6" path="res://Classes/Engineer/plan_plan_tex.png" id="4_75s6s"]
|
||||
[ext_resource type="Material" uid="uid://dq30v3hgyi4da" path="res://Classes/Engineer/mouse_hover_material.tres" id="5_2u312"]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[gd_scene load_steps=12 format=4 uid="uid://bfxgtf1v1okat"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bj7oafusrrsk" path="res://card_item.gd" id="1_rlle2"]
|
||||
[ext_resource type="Script" uid="uid://bj7oafusrrsk" path="res://Scripts/card_item.gd" id="1_rlle2"]
|
||||
[ext_resource type="PackedScene" uid="uid://dixtx38u4jhd7" path="res://Scenes/UI/card_hand.tscn" id="2_aiko0"]
|
||||
[ext_resource type="Script" uid="uid://cl2mi4bnpatwk" path="res://Scripts/float_and_spin.gd" id="3_jjaja"]
|
||||
[ext_resource type="Texture2D" uid="uid://b0sl2tvwle1m7" path="res://Classes/Mage/scroll2_paper.png" id="4_aiko0"]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://dylmoyx1tasat"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://c5bffujq0l70k" path="res://jitter.gdshader" id="1_4cwdh"]
|
||||
[ext_resource type="Shader" uid="uid://c5bffujq0l70k" path="res://Shaders/jitter.gdshader" id="1_4cwdh"]
|
||||
[ext_resource type="Texture2D" uid="uid://d01y8kogfuayr" path="res://Enemies/Crystalisk/crystal_enemy.png" id="2_l5awy"]
|
||||
|
||||
[resource]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://bo82o88d7vo1x"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://c5bffujq0l70k" path="res://jitter.gdshader" id="1_crvh7"]
|
||||
[ext_resource type="Shader" uid="uid://c5bffujq0l70k" path="res://Shaders/jitter.gdshader" id="1_crvh7"]
|
||||
[ext_resource type="Texture2D" uid="uid://wx4d2upch81n" path="res://Enemies/EyeDog/eyedog_eyedog_tex.png" id="2_j3hec"]
|
||||
|
||||
[resource]
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name PathEditTool extends Node3D
|
||||
class_name PathEditTool
|
||||
extends Node3D
|
||||
|
||||
@export var hero: Hero
|
||||
@export var inventory: Inventory
|
||||
@@ -16,7 +17,6 @@ var ray_collider: Object
|
||||
var ray_point: Vector3
|
||||
var last_point: FlowNode
|
||||
var last_tower_base: TowerBase
|
||||
|
||||
var interact_key_held: bool = false
|
||||
var interacted_once: bool = false
|
||||
var interact_held_time: float = 0.0
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name Hero extends CharacterBody3D
|
||||
class_name Hero
|
||||
extends CharacterBody3D
|
||||
|
||||
signal ready_state_changed(state: bool)
|
||||
|
||||
@@ -39,13 +40,9 @@ var game_manager: GameManager
|
||||
var hovering_item: InteractButton = null
|
||||
var weapons_spawn_count: int = 0 #Used to prevent node name collisions for multiplayer
|
||||
var inventory_selected_index: int = 0
|
||||
#var equipped_card: Card
|
||||
#var offhand_card: Card
|
||||
var equipped_weapon: int = 0
|
||||
var weapons: Array[Weapon] = [null, null]
|
||||
var cards: Array[Card] = [null, null]
|
||||
#var weapon: Weapon
|
||||
#var offhand_weapon: Weapon
|
||||
var weapons_active: bool = false
|
||||
var paused: bool = false
|
||||
var editing_mode: bool = true
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
[ext_resource type="Texture2D" uid="uid://bs2mskoyvyehv" path="res://Assets/Textures/crosshair159.png" id="25_l7gpx"]
|
||||
[ext_resource type="AudioStream" uid="uid://bxripx3suub1v" path="res://Audio/cardPlace3.ogg" id="26_7tm07"]
|
||||
[ext_resource type="Texture2D" uid="uid://0x80ptif1diq" path="res://Assets/Textures/hand_small_point.png" id="26_dfkac"]
|
||||
[ext_resource type="PackedScene" uid="uid://c2id8hjico4w8" path="res://energy_bar.tscn" id="27_14ugt"]
|
||||
[ext_resource type="PackedScene" uid="uid://c2id8hjico4w8" path="res://UI/EnergyBar/energy_bar.tscn" id="27_14ugt"]
|
||||
[ext_resource type="AudioStream" uid="uid://k1lsqkvohjpa" path="res://Audio/cardPlace4.ogg" id="27_xvxs8"]
|
||||
[ext_resource type="AudioStream" uid="uid://bn8lkvy5wibvo" path="res://Audio/cardSlide1.ogg" id="28_1thk8"]
|
||||
[ext_resource type="AudioStream" uid="uid://d32gpcu8w1yvn" path="res://Audio/cardSlide2.ogg" id="29_s0a0l"]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
class_name HUD extends CanvasLayer
|
||||
class_name HUD
|
||||
extends CanvasLayer
|
||||
|
||||
var last_lives_count: int = 120
|
||||
@export var player: Hero
|
||||
@export var wave_count: Label
|
||||
@export var lives_count: Label
|
||||
@@ -12,7 +12,6 @@ var last_lives_count: int = 120
|
||||
@export var minimap_viewport: SubViewport
|
||||
@export var fps_label: Label
|
||||
@export var hover_text: RichTextLabel
|
||||
var enemy_names: Array[String]
|
||||
@export var enemy_sprites: Array[TextureRect]
|
||||
@export var enemy_counts: Array[Label]
|
||||
@export var pickup_notif_scene: PackedScene
|
||||
@@ -24,6 +23,8 @@ var enemy_names: Array[String]
|
||||
@export var enemy_card_scene: PackedScene
|
||||
@export var new_energy_bar: EnergyBar
|
||||
|
||||
var last_lives_count: int = 120
|
||||
var enemy_names: Array[String]
|
||||
var map_anchor: Node3D
|
||||
var audio_guard: bool = false
|
||||
var cards: Array[EnemyCardUI] = []
|
||||
@@ -155,6 +156,7 @@ func set_crosshair_visible(value: bool) -> void:
|
||||
crosshair.set_visible(value)
|
||||
|
||||
#TODO: the fuck is audio_guard for?
|
||||
@warning_ignore("unused_parameter")
|
||||
func set_weapon_energy(value: int, energy_type: Data.EnergyType) -> void:
|
||||
#weapon_energy_bar.value = value
|
||||
if player.editing_mode:
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name PlayerMovement extends Node
|
||||
class_name PlayerMovement
|
||||
extends Node
|
||||
|
||||
@export var player: CharacterBody3D
|
||||
@export var head: Node3D
|
||||
@@ -58,7 +59,6 @@ var is_in_climb_zone: bool = false
|
||||
var hold_climb: bool = false
|
||||
var ragdoll_grace_period_length: float = 0.5
|
||||
var ragdoll_grace_period_elapsed: float = 0.0
|
||||
|
||||
var crouching: bool = false
|
||||
var prev_crouch_height: float = 0.0
|
||||
var new_crouch_height: float = 0.0
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name ViewMovement extends Node3D
|
||||
class_name ViewMovement
|
||||
extends Node3D
|
||||
|
||||
@export var player: CharacterBody3D
|
||||
|
||||
@@ -19,7 +20,6 @@ class_name ViewMovement extends Node3D
|
||||
|
||||
var sample_point: float = 0.0
|
||||
var speed_factor: float = 0.0
|
||||
|
||||
var trauma: float = 0.0
|
||||
var trauma_recovery_speed: float = 0.7
|
||||
var camera_shake: float = 0.0
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name BombProjectile extends ExplosiveProjectile
|
||||
class_name BombProjectile
|
||||
extends ExplosiveProjectile
|
||||
|
||||
var max_bounces: int = 1
|
||||
var bounces: int = 0
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name FireballProjectile extends StatusApplyingProjectile
|
||||
class_name FireballProjectile
|
||||
extends StatusApplyingProjectile
|
||||
|
||||
|
||||
func build_status_object() -> StatusEffect:
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name IcicleProjectile extends StatusApplyingProjectile
|
||||
class_name IcicleProjectile
|
||||
extends StatusApplyingProjectile
|
||||
|
||||
|
||||
func build_status_object() -> StatusEffect:
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
class_name RocketProjectile extends HomingProjectile
|
||||
class_name RocketProjectile
|
||||
extends HomingProjectile
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
[ext_resource type="Script" uid="uid://bivtfdl3p1brv" path="res://Scenes/CardPrinter/card_printer.gd" id="1_qft15"]
|
||||
[ext_resource type="Script" uid="uid://dkfswql8ui0bt" path="res://Scripts/interact_button.gd" id="4_eavi1"]
|
||||
[ext_resource type="PackedScene" uid="uid://b6i5w3mowcfcs" path="res://drafting_table.glb" id="4_kpujb"]
|
||||
[ext_resource type="PackedScene" uid="uid://b6i5w3mowcfcs" path="res://Scenes/DraftingTable/drafting_table.glb" id="4_kpujb"]
|
||||
[ext_resource type="AudioStream" uid="uid://dknygn5eyuhxt" path="res://Audio/shot1.wav" id="5_m033a"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_0ebt5"]
|
||||
|
||||
@@ -4,12 +4,12 @@ importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://b6i5w3mowcfcs"
|
||||
path="res://.godot/imported/drafting_table.glb-6807c68da9d7f556812db63743d38b57.scn"
|
||||
path="res://.godot/imported/drafting_table.glb-9a5f41e6bf4edcc8c042380f52a70575.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://drafting_table.glb"
|
||||
dest_files=["res://.godot/imported/drafting_table.glb-6807c68da9d7f556812db63743d38b57.scn"]
|
||||
source_file="res://Scenes/DraftingTable/drafting_table.glb"
|
||||
dest_files=["res://.godot/imported/drafting_table.glb-9a5f41e6bf4edcc8c042380f52a70575.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB |
@@ -3,7 +3,7 @@
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cx3u2fj5cniac"
|
||||
path.s3tc="res://.godot/imported/drafting_table_plan_tex.png-1699462a730246cc6031e19c5449ed7d.s3tc.ctex"
|
||||
path.s3tc="res://.godot/imported/drafting_table_plan_tex.png-7b1786af0562d78c6bd0327df564d184.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
@@ -14,8 +14,8 @@ generator_parameters={
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://drafting_table_plan_tex.png"
|
||||
dest_files=["res://.godot/imported/drafting_table_plan_tex.png-1699462a730246cc6031e19c5449ed7d.s3tc.ctex"]
|
||||
source_file="res://Scenes/DraftingTable/drafting_table_plan_tex.png"
|
||||
dest_files=["res://.godot/imported/drafting_table_plan_tex.png-7b1786af0562d78c6bd0327df564d184.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
@@ -3,13 +3,13 @@
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://bvoygakisxw4i"
|
||||
path="res://.godot/imported/cube.glb-ec927bc01951d93b2130ba52799eca7c.scn"
|
||||
uid="uid://bkokjrjns7l6j"
|
||||
path="res://.godot/imported/cube.glb-8c7fddad925be67dc400ce95d4de5b99.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://cube.glb"
|
||||
dest_files=["res://.godot/imported/cube.glb-ec927bc01951d93b2130ba52799eca7c.scn"]
|
||||
source_file="res://Scenes/FlowField/cube.glb"
|
||||
dest_files=["res://.godot/imported/cube.glb-8c7fddad925be67dc400ce95d4de5b99.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://ravcalfsha76"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://bvoygakisxw4i" path="res://cube.glb" id="1_7p7qy"]
|
||||
[ext_resource type="PackedScene" uid="uid://bkokjrjns7l6j" path="res://Scenes/FlowField/cube.glb" id="1_7p7qy"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_d8upr"]
|
||||
resource_local_to_scene = true
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name FlowField extends Node3D
|
||||
class_name FlowField
|
||||
extends Node3D
|
||||
|
||||
signal path_updated()
|
||||
|
||||
@@ -15,6 +16,7 @@ func _ready() -> void:
|
||||
node.visible = false
|
||||
|
||||
|
||||
@warning_ignore("unused_parameter")
|
||||
func _process(delta: float) -> void:
|
||||
if !nodes_visible:
|
||||
return
|
||||
@@ -1,8 +1,8 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://b7dwsqfmdqr8"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://r4nmfr8jfcjx" path="res://flow_field.gd" id="1_l46ob"]
|
||||
[ext_resource type="PackedScene" uid="uid://bssfvyxv5uo1f" path="res://flow_node.tscn" id="2_d6vkn"]
|
||||
[ext_resource type="PackedScene" uid="uid://cccowrgelgswj" path="res://flow_field_tool.tscn" id="3_apokv"]
|
||||
[ext_resource type="Script" uid="uid://r4nmfr8jfcjx" path="res://Scenes/FlowField/flow_field.gd" id="1_l46ob"]
|
||||
[ext_resource type="PackedScene" uid="uid://bssfvyxv5uo1f" path="res://Scenes/FlowField/flow_node.tscn" id="2_d6vkn"]
|
||||
[ext_resource type="PackedScene" uid="uid://cccowrgelgswj" path="res://Scenes/FlowField/flow_field_tool.tscn" id="3_apokv"]
|
||||
|
||||
[node name="FlowField" type="Node3D"]
|
||||
script = ExtResource("1_l46ob")
|
||||
@@ -1,7 +1,7 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://2vv6mrxiwibf"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://r4nmfr8jfcjx" path="res://flow_field.gd" id="1_ca7vt"]
|
||||
[ext_resource type="PackedScene" uid="uid://bssfvyxv5uo1f" path="res://flow_node.tscn" id="2_s6hwk"]
|
||||
[ext_resource type="Script" uid="uid://r4nmfr8jfcjx" path="res://Scenes/FlowField/flow_field.gd" id="1_ca7vt"]
|
||||
[ext_resource type="PackedScene" uid="uid://bssfvyxv5uo1f" path="res://Scenes/FlowField/flow_node.tscn" id="2_s6hwk"]
|
||||
|
||||
[node name="FlowField" type="Node3D" node_paths=PackedStringArray("nodes", "goals")]
|
||||
script = ExtResource("1_ca7vt")
|
||||
@@ -4,12 +4,12 @@ importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://bs4en6twugqjl"
|
||||
path="res://.godot/imported/flow_node.glb-590e85013ddaf9dde846990416b040e0.scn"
|
||||
path="res://.godot/imported/flow_node.glb-6ba2ba2afb1294cefafdb385a7532688.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://flow_node.glb"
|
||||
dest_files=["res://.godot/imported/flow_node.glb-590e85013ddaf9dde846990416b040e0.scn"]
|
||||
source_file="res://Scenes/FlowField/flow_node.glb"
|
||||
dest_files=["res://.godot/imported/flow_node.glb-6ba2ba2afb1294cefafdb385a7532688.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://bssfvyxv5uo1f"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c86ygtor5tksd" path="res://Scripts/flow_node.gd" id="1_ng65h"]
|
||||
[ext_resource type="PackedScene" uid="uid://h7el2c2awv6" path="res://flow_node2.tscn" id="2_bmgs5"]
|
||||
[ext_resource type="PackedScene" uid="uid://h7el2c2awv6" path="res://Scenes/FlowField/flow_node2.tscn" id="2_bmgs5"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_bmgs5"]
|
||||
radius = 0.4
|
||||
@@ -1,6 +1,6 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://h7el2c2awv6"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://bs4en6twugqjl" path="res://flow_node.glb" id="1_tnepb"]
|
||||
[ext_resource type="PackedScene" uid="uid://bs4en6twugqjl" path="res://Scenes/FlowField/flow_node.glb" id="1_tnepb"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_16gtg"]
|
||||
resource_local_to_scene = true
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name Ladder extends Area3D
|
||||
class_name Ladder
|
||||
extends Area3D
|
||||
|
||||
|
||||
func _on_body_entered(body: Node3D) -> void:
|
||||
@@ -1,6 +1,6 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://cx8f6tsipvmls"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://7pd2edvb845w" path="res://ladder.gd" id="1_cq4ai"]
|
||||
[ext_resource type="Script" uid="uid://7pd2edvb845w" path="res://Scenes/Ladder/ladder.gd" id="1_cq4ai"]
|
||||
|
||||
[node name="Ladder" type="Area3D"]
|
||||
collision_mask = 2
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
[ext_resource type="Theme" uid="uid://b6a0ip4p72tgx" path="res://UI/new_theme.tres" id="1_p1cib"]
|
||||
[ext_resource type="Script" uid="uid://ci8vq73u23viy" path="res://Scenes/Menus/MainMenu/main_menu.gd" id="2_ivytu"]
|
||||
[ext_resource type="PackedScene" uid="uid://y1qa1g3ic8sp" path="res://Worlds/GreenPlanet/Levels/first_level.tscn" id="3_l8r4a"]
|
||||
[ext_resource type="PackedScene" uid="uid://y1qa1g3ic8sp" path="res://Worlds/GreenPlanet/Levels/Bridge/bridge.tscn" id="3_l8r4a"]
|
||||
[ext_resource type="AudioStream" uid="uid://cp6ph4ra7u5rk" path="res://Scenes/UI/drop_003.ogg" id="5_cwn2i"]
|
||||
[ext_resource type="Script" uid="uid://cbwxa2a4hfcy4" path="res://Scripts/Resources/enemy.gd" id="5_u514r"]
|
||||
[ext_resource type="Texture2D" uid="uid://cdnhe2mi5c5ln" path="res://Assets/Textures/dead_eye_dog.png" id="6_rsxwm"]
|
||||
@@ -17,7 +17,7 @@
|
||||
[ext_resource type="Script" uid="uid://cjr0pbqisd51v" path="res://Scenes/Menus/MainMenu/achievements_menu.gd" id="15_sv1gy"]
|
||||
[ext_resource type="Texture2D" uid="uid://cpa1hl36xfplg" path="res://Assets/Textures/first_scroll_seen.png" id="16_sv1gy"]
|
||||
[ext_resource type="Texture2D" uid="uid://ctbi3gm1me1t5" path="res://Assets/Textures/unlock_mage_achievement.png" id="17_6t4jd"]
|
||||
[ext_resource type="Script" uid="uid://cxrm2naq75jo1" path="res://mod_menu.gd" id="19_6t4jd"]
|
||||
[ext_resource type="Script" uid="uid://cxrm2naq75jo1" path="res://Scripts/mod_menu.gd" id="19_6t4jd"]
|
||||
[ext_resource type="FontFile" uid="uid://c3hwdjscf2hnk" path="res://Assets/Fonts/OpenType (.otf)/Kaph-Regular.otf" id="20_y5bw6"]
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_5u75i"]
|
||||
|
||||
Binary file not shown.
@@ -3,7 +3,7 @@
|
||||
[ext_resource type="Script" uid="uid://si58bm4r7r2i" path="res://Scenes/TowerBase/tower_base.gd" id="1_kalmg"]
|
||||
[ext_resource type="Script" uid="uid://do24iuot0j7d7" path="res://Scripts/inventory.gd" id="2_m0oxx"]
|
||||
[ext_resource type="Material" uid="uid://bi0grduhgdma4" path="res://Scenes/TowerBase/new_shader_material.tres" id="3_ueedj"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://cm5xjp442ew0y" path="res://textmesh.res" id="4_8j8ue"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://cr83c74ys8rll" path="res://Scenes/TowerBase/textmesh.res" id="4_8j8ue"]
|
||||
[ext_resource type="Texture2D" uid="uid://ba85u6i558x4w" path="res://Assets/Textures/minimap_node.png" id="4_lbvtm"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_lc72v"]
|
||||
|
||||
@@ -1,20 +1,14 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://d2yv447trxkwt"]
|
||||
[gd_scene load_steps=4 format=3 uid="uid://d2yv447trxkwt"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dkuxg6ek5us4f" path="res://Scripts/enemy_spawner.gd" id="1_23wuv"]
|
||||
[ext_resource type="PackedScene" uid="uid://b0nady5xm88bo" path="res://Worlds/GreenPlanet/Enemies/land_enemy.tscn" id="2_muaoj"]
|
||||
[ext_resource type="PackedScene" uid="uid://bjo2q6vca5qlv" path="res://Worlds/GreenPlanet/Enemies/air_enemy.tscn" id="3_nh55v"]
|
||||
[ext_resource type="Script" uid="uid://cd500cyj1tdyw" path="res://Scripts/visualized_path.gd" id="4_tdwud"]
|
||||
|
||||
[node name="Node3D" type="Node3D" node_paths=PackedStringArray("path")]
|
||||
[node name="Node3D" type="Node3D"]
|
||||
script = ExtResource("1_23wuv")
|
||||
land_enemy_scene = ExtResource("2_muaoj")
|
||||
air_enemy_scene = ExtResource("3_nh55v")
|
||||
path = NodePath("VisualizedPath")
|
||||
|
||||
[node name="CSGBox3D" type="CSGBox3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
visible = false
|
||||
|
||||
[node name="VisualizedPath" type="Path3D" parent="."]
|
||||
script = ExtResource("4_tdwud")
|
||||
metadata/_custom_type_script = "uid://cd500cyj1tdyw"
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://clbw3osqy2ww2"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cr3sfjjo6l6n2" path="res://Scripts/path_visual_thing.gd" id="1_pgun7"]
|
||||
[ext_resource type="Texture2D" uid="uid://cy786nrpcdr5o" path="res://Assets/Textures/minimap_path_visual.png" id="2_0gsds"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_lutld"]
|
||||
albedo_color = Color(0.0509804, 0.337255, 0.709804, 1)
|
||||
|
||||
[node name="PathFollow3D" type="PathFollow3D" node_paths=PackedStringArray("world_model", "minimap_model")]
|
||||
use_model_front = true
|
||||
script = ExtResource("1_pgun7")
|
||||
world_model = NodePath("CSGSphere3D")
|
||||
minimap_model = NodePath("Sprite3D")
|
||||
|
||||
[node name="CSGSphere3D" type="CSGSphere3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.401382, 0)
|
||||
radius = 0.05
|
||||
material = SubResource("StandardMaterial3D_lutld")
|
||||
|
||||
[node name="Sprite3D" type="Sprite3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0.620933, 0)
|
||||
layers = 4
|
||||
texture_filter = 0
|
||||
texture = ExtResource("2_0gsds")
|
||||
@@ -1,14 +0,0 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://dtfw0tefhb6qq"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cd500cyj1tdyw" path="res://Scripts/visualized_path.gd" id="1_34oex"]
|
||||
|
||||
[sub_resource type="Curve3D" id="Curve3D_tcut2"]
|
||||
_data = {
|
||||
"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, -0.894202, 0.687927, -2.77275, 0, 0, -2),
|
||||
"tilts": PackedFloat32Array(0, 0)
|
||||
}
|
||||
point_count = 2
|
||||
|
||||
[node name="Node3D" type="Path3D"]
|
||||
curve = SubResource("Curve3D_tcut2")
|
||||
script = ExtResource("1_34oex")
|
||||
@@ -1,8 +1,10 @@
|
||||
class_name Affector extends Node
|
||||
class_name Affector
|
||||
extends Node
|
||||
|
||||
var damage_particle_scene: PackedScene = preload("res://Scenes/damage_particle.tscn")
|
||||
|
||||
|
||||
@warning_ignore("unused_parameter")
|
||||
func apply_effect(effect: Effect, targets: Array[EnemyController]) -> void:
|
||||
pass
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name AreaAffector extends Affector
|
||||
class_name AreaAffector
|
||||
extends Affector
|
||||
|
||||
@export var shapecast: ShapeCast3D
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name DirectAffect extends Affector
|
||||
class_name DirectAffect
|
||||
extends Affector
|
||||
|
||||
|
||||
func apply_effect(effect: Effect, targets: Array[EnemyController]) -> void:
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name SpawnAffect extends Affector
|
||||
class_name SpawnAffect
|
||||
extends Affector
|
||||
|
||||
@export var spawn_scene: PackedScene
|
||||
@export var tower: Tower
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name BeeliningController extends EnemyMovement
|
||||
class_name BeeliningController
|
||||
extends EnemyMovement
|
||||
|
||||
var goal: Node3D
|
||||
var direction: Vector3
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name EnemyMovement extends Node
|
||||
class_name EnemyMovement
|
||||
extends Node
|
||||
|
||||
@export var character: EnemyController
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name LeapingController extends PathingController
|
||||
class_name LeapingController
|
||||
extends PathingController
|
||||
|
||||
@export var eastl: Label
|
||||
@export var westl: Label
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name PathingController extends EnemyMovement
|
||||
class_name PathingController
|
||||
extends EnemyMovement
|
||||
|
||||
#var path: Curve3D
|
||||
#var path_progress: float = 0.0
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name ExplosiveProjectile extends Projectile
|
||||
class_name ExplosiveProjectile
|
||||
extends Projectile
|
||||
|
||||
@export var explosion_range: float = 3.0
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name HomingProjectile extends ExplosiveProjectile
|
||||
class_name HomingProjectile
|
||||
extends ExplosiveProjectile
|
||||
|
||||
var target: Node3D
|
||||
var acceleration: float = 50.0
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name Projectile extends RigidBody3D
|
||||
class_name Projectile
|
||||
extends RigidBody3D
|
||||
|
||||
@export var collision_shape: CollisionShape3D
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name StatusApplyingProjectile extends ExplosiveProjectile
|
||||
class_name StatusApplyingProjectile
|
||||
extends ExplosiveProjectile
|
||||
|
||||
@export var status_stats: StatusStats
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name Card extends Item
|
||||
class_name Card
|
||||
extends Item
|
||||
|
||||
enum Faction {
|
||||
GENERIC = 0,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name CardText extends Resource
|
||||
class_name CardText
|
||||
extends Resource
|
||||
|
||||
@export var target_type: Data.TargetType
|
||||
@export var energy_type: Data.EnergyType
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name Enemy extends Resource
|
||||
class_name Enemy
|
||||
extends Resource
|
||||
|
||||
@export var title: String = "dog"
|
||||
@export var target_type: Data.EnemyType
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name HeroClass extends Resource
|
||||
class_name HeroClass
|
||||
extends Resource
|
||||
|
||||
@export var hero_name: String = "Default"
|
||||
@export var texture: Texture
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name Item extends Resource
|
||||
class_name Item
|
||||
extends Resource
|
||||
|
||||
@export var display_name: String
|
||||
@export var icon: Texture
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name PlayerAudioSettings extends Resource
|
||||
class_name PlayerAudioSettings
|
||||
extends Resource
|
||||
|
||||
const SAVE_PATH: String = "user://audio_settings.tres"
|
||||
|
||||
@@ -19,4 +20,3 @@ static func load_profile_from_disk() -> PlayerAudioSettings:
|
||||
if ResourceLoader.exists(SAVE_PATH):
|
||||
return ResourceLoader.load(SAVE_PATH)
|
||||
return PlayerAudioSettings.new()
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name PlayerGraphicsSettings extends Resource
|
||||
class_name PlayerGraphicsSettings
|
||||
extends Resource
|
||||
|
||||
const SAVE_PATH: String = "user://graphics_settings.tres"
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name PlayerPreferences extends Resource
|
||||
class_name PlayerPreferences
|
||||
extends Resource
|
||||
|
||||
const SAVE_PATH: String = "user://preferences.tres"
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name PlayerProfile extends Resource
|
||||
class_name PlayerProfile
|
||||
extends Resource
|
||||
|
||||
signal display_name_changed(old_name: String, new_name: String)
|
||||
signal preferred_class_changed(old_class: int, new_class: int)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name SaveData extends RefCounted
|
||||
class_name SaveData
|
||||
extends RefCounted
|
||||
|
||||
var save_slot: int = 0
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name StatAttribute extends Resource
|
||||
class_name StatAttribute
|
||||
extends Resource
|
||||
|
||||
@export var key: String
|
||||
@export var value: float
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name StatusStats extends Resource
|
||||
class_name StatusStats
|
||||
extends Resource
|
||||
|
||||
@export var name: String
|
||||
@export var max_stacks: int = 0
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name StatusDoT extends StatusEffect
|
||||
class_name StatusDoT
|
||||
extends StatusEffect
|
||||
|
||||
|
||||
func proc(affected: EnemyController, stacks: int, _existing_effects: Dictionary) -> void:
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name StatusEffect extends Resource
|
||||
class_name StatusEffect
|
||||
extends Resource
|
||||
|
||||
@export var stats: StatusStats
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name StatusSlow extends StatusEffect
|
||||
class_name StatusSlow
|
||||
extends StatusEffect
|
||||
|
||||
|
||||
func on_attached(affected: EnemyController, _existing_effects: Dictionary) -> void:
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name HitscanWeapon extends Weapon
|
||||
class_name HitscanWeapon
|
||||
extends Weapon
|
||||
|
||||
@export var raycast: RayCast3D
|
||||
@export var range_debug_indicator: CSGSphere3D
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name ProjectileWeapon extends Weapon
|
||||
class_name ProjectileWeapon
|
||||
extends Weapon
|
||||
|
||||
@export var projectile_scene: PackedScene
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name ShapecastWeapon extends Weapon
|
||||
class_name ShapecastWeapon
|
||||
extends Weapon
|
||||
|
||||
@export var shapecast: ShapeCast3D
|
||||
@export var range_debug_indicator: CSGSphere3D
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name StatusApplyingWeapon extends HitscanWeapon
|
||||
class_name StatusApplyingWeapon
|
||||
extends HitscanWeapon
|
||||
|
||||
@export var status_stats: StatusStats
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name Weapon extends Node3D
|
||||
class_name Weapon
|
||||
extends Node3D
|
||||
|
||||
signal energy_spent(energy: int, type: Data.EnergyType)
|
||||
signal energy_recharged(energy: int, type: Data.EnergyType)
|
||||
@@ -54,6 +55,7 @@ func _process(delta: float) -> void:
|
||||
energy_spent.emit(delta, stats.energy_type)
|
||||
|
||||
|
||||
@warning_ignore("unused_parameter")
|
||||
func _physics_process(delta: float) -> void:
|
||||
if trigger_held and current_energy >= energy_cost and time_since_firing >= time_between_shots:
|
||||
if stats.energy_type == Data.EnergyType.DISCRETE:
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name AlertPopup extends PanelContainer
|
||||
class_name AlertPopup
|
||||
extends PanelContainer
|
||||
|
||||
signal completed()
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name AudioOptions extends VBoxContainer
|
||||
class_name AudioOptions
|
||||
extends VBoxContainer
|
||||
|
||||
@export var master_input: SpinBox
|
||||
@export var master_slider: HSlider
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
class_name BindButton extends Button
|
||||
class_name BindButton
|
||||
extends Button
|
||||
|
||||
var trigger_event: InputEvent
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name BootLogo extends TextureRect
|
||||
class_name BootLogo
|
||||
extends TextureRect
|
||||
|
||||
signal animation_finished()
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name CardInHand extends Node2D
|
||||
class_name CardInHand
|
||||
extends Node2D
|
||||
|
||||
var stats: Card
|
||||
@export var rarity_sprite: Sprite2D
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name CardItem extends InteractButton
|
||||
class_name CardItem
|
||||
extends InteractButton
|
||||
|
||||
signal pressed(card_item: CardItem)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name Chatbox extends Control
|
||||
class_name Chatbox
|
||||
extends Control
|
||||
|
||||
signal opened
|
||||
signal closed
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name CinematicCamManager extends Node3D
|
||||
class_name CinematicCamManager
|
||||
extends Node3D
|
||||
|
||||
@export var path_follows: Array[PathFollow3D]
|
||||
@export var cameras: Array[Camera3D]
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name ConfirmationPopup extends PanelContainer
|
||||
class_name ConfirmationPopup
|
||||
extends PanelContainer
|
||||
|
||||
signal completed(outcome: bool)
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name Corpse extends RigidBody3D
|
||||
class_name Corpse
|
||||
extends RigidBody3D
|
||||
|
||||
|
||||
func set_sprite(tex: Texture) -> void:
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name DamageParticle extends Sprite3D
|
||||
class_name DamageParticle
|
||||
extends Sprite3D
|
||||
|
||||
@onready var label: Label = $SubViewport/Label
|
||||
var time_alive: float = 0.0
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name Effect extends Resource
|
||||
class_name Effect
|
||||
extends Resource
|
||||
|
||||
|
||||
@export var damage: int = 0
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name EightDirectionSprite3D extends Sprite3D
|
||||
class_name EightDirectionSprite3D
|
||||
extends Sprite3D
|
||||
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name EnemyCard extends RefCounted
|
||||
class_name EnemyCard
|
||||
extends RefCounted
|
||||
|
||||
|
||||
var enemy: Enemy = null
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name EnemyGoal extends Node3D
|
||||
class_name EnemyGoal
|
||||
extends Node3D
|
||||
|
||||
@export var audio_player: AudioStreamPlayer3D
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
class_name EnemySpawner extends Node3D
|
||||
class_name EnemySpawner
|
||||
extends Node3D
|
||||
|
||||
signal enemy_spawned()
|
||||
|
||||
@export var land_enemy_scene: PackedScene
|
||||
@export var leap_enemy_scene: PackedScene
|
||||
@export var air_enemy_scene: PackedScene
|
||||
@export var path: VisualizedPath
|
||||
@export var flow_field: FlowField
|
||||
@export var own_id: int = 0
|
||||
@export var type: Data.EnemyType
|
||||
@@ -21,7 +21,7 @@ var enemies_spawned: Dictionary = {}
|
||||
var enemies_to_spawn: int = 0
|
||||
var done_spawning: bool = true
|
||||
var enemy_id: int = 0
|
||||
var new_path: Path3D
|
||||
var path: Path3D
|
||||
var path_polygon: PackedScene = preload("res://path_polygon.tscn")
|
||||
var game_manager: GameManager
|
||||
|
||||
@@ -82,14 +82,14 @@ func networked_spawn_land_enemy(enemy_stats: String, id1: int, id2: int) -> void
|
||||
func create_path() -> void:
|
||||
if type != Data.EnemyType.LAND:
|
||||
return
|
||||
new_path = Path3D.new()
|
||||
new_path.curve = Curve3D.new()
|
||||
add_child(new_path)
|
||||
path = Path3D.new()
|
||||
path.curve = Curve3D.new()
|
||||
add_child(path)
|
||||
var polygon: CSGPolygon3D = path_polygon.instantiate()
|
||||
new_path.add_child(polygon)
|
||||
path.add_child(polygon)
|
||||
polygon.mode = CSGPolygon3D.MODE_PATH
|
||||
polygon.path_node = new_path.get_path()
|
||||
new_path.global_position = Vector3.ZERO
|
||||
polygon.path_node = path.get_path()
|
||||
path.global_position = Vector3.ZERO
|
||||
update_path()
|
||||
|
||||
|
||||
@@ -97,13 +97,13 @@ func create_path() -> void:
|
||||
func update_path() -> void:
|
||||
if type != Data.EnemyType.LAND:
|
||||
return
|
||||
new_path.curve.add_point(global_position + Vector3(0, 0.5, 0))
|
||||
new_path.curve = Curve3D.new()
|
||||
path.curve.add_point(global_position + Vector3(0, 0.5, 0))
|
||||
path.curve = Curve3D.new()
|
||||
var node: FlowNode = flow_field.get_closest_traversable_point(global_position)
|
||||
new_path.curve.add_point(node.global_position + Vector3(0, 0.5, 0))
|
||||
path.curve.add_point(node.global_position + Vector3(0, 0.5, 0))
|
||||
while node.best_path:
|
||||
node = node.best_path
|
||||
new_path.curve.add_point(node.global_position + Vector3(0, 0.5, 0))
|
||||
path.curve.add_point(node.global_position + Vector3(0, 0.5, 0))
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name FloatAndSpin extends RayCast3D
|
||||
class_name FloatAndSpin
|
||||
extends RayCast3D
|
||||
|
||||
@export_range(0.0, 3.0) var float_height: float = 1.5
|
||||
@export_range(0.0, 2.0) var bounce_dist: float = 0.5
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name FlowFieldTool extends Node
|
||||
class_name FlowFieldTool
|
||||
extends Node
|
||||
|
||||
@export var flow_field: FlowField
|
||||
@export var raycast: RayCast3D
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
class_name FlowNode extends StaticBody3D
|
||||
class_name FlowNode
|
||||
extends StaticBody3D
|
||||
|
||||
@export var connections: Array[FlowNode]
|
||||
@export var visualisers: Array[Node3D]
|
||||
var visual_scene: PackedScene = preload("res://cube2.tscn")
|
||||
var visual_scene: PackedScene = preload("res://Scenes/FlowField/cube2.tscn")
|
||||
@export var traversable: bool = true
|
||||
@export var buildable: bool = true
|
||||
var best_path: FlowNode :
|
||||
@@ -24,6 +25,7 @@ func _ready() -> void:
|
||||
set_connector_color(node, Color.WEB_GRAY)
|
||||
|
||||
|
||||
@warning_ignore("unused_parameter")
|
||||
func _process(delta: float) -> void:
|
||||
if visible:
|
||||
for i: int in connections.size():
|
||||
|
||||
@@ -13,7 +13,7 @@ signal switch_to_single_player
|
||||
signal switch_to_multi_player
|
||||
signal switch_to_main_menu
|
||||
|
||||
var level_scene: PackedScene = load("res://Worlds/GreenPlanet/Levels/first_level.tscn")
|
||||
var level_scene: PackedScene = load("res://Worlds/GreenPlanet/Levels/Bridge/bridge.tscn")
|
||||
var player_scene: PackedScene = load("res://PCs/hero.tscn")
|
||||
var game_end_scene: PackedScene = load("res://Scenes/Menus/GameEndScreen/game_end_screen.tscn")
|
||||
var connected_players_nodes: Dictionary = {}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name GameMode extends RefCounted
|
||||
class_name GameMode
|
||||
extends RefCounted
|
||||
|
||||
var multiplayer: bool = false
|
||||
var seeded: bool = false
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name GameplayOptionsMenu extends VBoxContainer
|
||||
class_name GameplayOptionsMenu
|
||||
extends VBoxContainer
|
||||
|
||||
@export var look_sens_slider: HSlider
|
||||
@export var look_sens_input: SpinBox
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name GraphicsOptionsMenu extends VBoxContainer
|
||||
class_name GraphicsOptionsMenu
|
||||
extends VBoxContainer
|
||||
|
||||
@export var fov_input: SpinBox
|
||||
@export var fov_slider: HSlider
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name Health extends Node
|
||||
class_name Health
|
||||
extends Node
|
||||
|
||||
signal health_depleted
|
||||
signal health_changed(health: int)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name HealthBar extends TextureProgressBar
|
||||
class_name HealthBar
|
||||
extends TextureProgressBar
|
||||
|
||||
@export var health_bar_gradient: Gradient
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
class_name Hitbox extends CollisionShape3D
|
||||
class_name Hitbox
|
||||
extends CollisionShape3D
|
||||
|
||||
@export var critical_zone: bool = false
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user