made visual updates
This commit is contained in:
BIN
Assets/TextureAtlases/puppyfruit.png
Normal file
BIN
Assets/TextureAtlases/puppyfruit.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 228 KiB |
34
Assets/TextureAtlases/puppyfruit.png.import
Normal file
34
Assets/TextureAtlases/puppyfruit.png.import
Normal file
@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://6frn8lcwwehv"
|
||||
path="res://.godot/imported/puppyfruit.png-4202c2b53b1e609128620576392b70df.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/TextureAtlases/puppyfruit.png"
|
||||
dest_files=["res://.godot/imported/puppyfruit.png-4202c2b53b1e609128620576392b70df.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=false
|
||||
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=1
|
@ -3,7 +3,7 @@
|
||||
[ext_resource type="Texture2D" uid="uid://b1lwaxw62yp3p" path="res://Assets/Textures/dead_spike.png" id="1_1js8q"]
|
||||
[ext_resource type="Texture2D" uid="uid://duywsy7jmh4u" path="res://Assets/Textures/spike.png" id="1_22o7e"]
|
||||
[ext_resource type="Script" uid="uid://cbwxa2a4hfcy4" path="res://Scripts/Resources/enemy.gd" id="1_q5r05"]
|
||||
[ext_resource type="PackedScene" uid="uid://bjo2q6vca5qlv" path="res://Worlds/GreenPlanet/Enemies/air_enemy.tscn" id="3_b3axe"]
|
||||
[ext_resource type="PackedScene" uid="uid://cveiaa0y66gln" path="res://crystal_enemy.tscn" id="3_b3axe"]
|
||||
[ext_resource type="Texture2D" uid="uid://sybn6bjbj5fh" path="res://Assets/TextureAtlases/spike.tres" id="3_tbb38"]
|
||||
|
||||
[resource]
|
||||
|
@ -112,15 +112,15 @@ defense"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="MainControls" type="VBoxContainer" parent="."]
|
||||
[node name="MainControls" type="HBoxContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = -1
|
||||
anchor_top = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 130.0
|
||||
offset_top = -188.0
|
||||
offset_right = 143.0
|
||||
offset_bottom = -80.0
|
||||
anchor_left = 0.05
|
||||
anchor_top = 0.95
|
||||
anchor_right = 0.95
|
||||
anchor_bottom = 0.95
|
||||
offset_top = -60.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 0
|
||||
|
||||
[node name="PlayButton" type="Button" parent="MainControls"]
|
||||
@ -149,14 +149,12 @@ text = "Quit
|
||||
[node name="ProfileEditor" type="PanelContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = -1
|
||||
anchor_left = 1.0
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -429.0
|
||||
offset_top = -140.0
|
||||
offset_right = -55.0
|
||||
offset_bottom = -40.0
|
||||
anchor_left = 0.97
|
||||
anchor_top = 0.95
|
||||
anchor_right = 0.97
|
||||
anchor_bottom = 0.95
|
||||
offset_left = -421.0
|
||||
offset_top = -150.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
|
||||
|
@ -1,6 +1,14 @@
|
||||
class_name EnemyMovement extends Node
|
||||
|
||||
@export var character: CharacterBody3D
|
||||
@export var character: EnemyController
|
||||
|
||||
var astar: AStarGraph3D
|
||||
var distance_remaining: float = 0.0
|
||||
var speed: float = 0.0
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
#TODO: make deterministic random
|
||||
var variance: float = randf_range(-1.0, 1.0)
|
||||
var variance_max: float = 0.03 # Enemy speed can vary by 3% from their base speed
|
||||
speed = character.stats.movement_speed + (variance * variance_max)
|
||||
|
@ -3,10 +3,24 @@ class_name PathingController extends EnemyMovement
|
||||
#var path: Curve3D
|
||||
#var path_progress: float = 0.0
|
||||
var flow_field: FlowField
|
||||
var next_node: FlowNode
|
||||
var next_node: FlowNode :
|
||||
get():
|
||||
return next_node
|
||||
set(value):
|
||||
next_node = value
|
||||
var found_point: bool = false
|
||||
while !found_point:
|
||||
#TODO: make deterministic random
|
||||
var x: float = randf_range(-1, 1)
|
||||
var y: float = randf_range(-1, 1)
|
||||
if Vector3(next_node.global_position.x + x, next_node.global_position.y, next_node.global_position.z + y).distance_to(next_node.global_position) <= 1.0:
|
||||
found_point = true
|
||||
next_pos = Vector3(next_node.global_position.x + x, next_node.global_position.y, next_node.global_position.z + y)
|
||||
var next_pos: Vector3
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
super._ready()
|
||||
#if path:
|
||||
# distance_remaining = path.get_baked_length()
|
||||
next_node = flow_field.get_closest_traversable_point(character.global_position)
|
||||
@ -26,11 +40,11 @@ func calculate_distance_to_goal(node: FlowNode) -> float:
|
||||
|
||||
|
||||
func walk(delta: float) -> void:
|
||||
var distance_travelled: float = (character.stats.movement_speed * clampf(character.movement_speed_penalty, 0.0, 1.0)) * delta
|
||||
var distance_travelled: float = (speed * clampf(speed, 0.0, 1.0)) * delta
|
||||
distance_remaining -= distance_travelled
|
||||
character.global_position = character.global_position.move_toward(next_node.global_position, distance_travelled)
|
||||
character.look_at(next_node.global_position)
|
||||
if character.global_position.distance_to(next_node.global_position) <= 0.05:
|
||||
character.global_position = character.global_position.move_toward(next_pos, distance_travelled)
|
||||
character.look_at(next_pos)
|
||||
if character.global_position.distance_to(next_pos) <= 0.05:
|
||||
next_node = next_node.best_path
|
||||
|
||||
|
||||
|
@ -8,12 +8,12 @@ signal game_setup
|
||||
signal game_started
|
||||
signal lost_game
|
||||
signal won_game
|
||||
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 player_scene: PackedScene = load("res://PCs/hero.tscn")
|
||||
var main_menu_scene_path: String = "res://Scenes/Menus/MainMenu/main_menu.tscn"
|
||||
var multiplayer_lobby_scene_path: String = "res://Scenes/Menus/multiplayer_lobby.tscn"
|
||||
var singleplayer_lobby_scene_path: String = "res://Scenes/Menus/singleplayer_lobby.tscn"
|
||||
var game_end_scene: PackedScene = load("res://Scenes/Menus/GameEndScreen/game_end_screen.tscn")
|
||||
var connected_players_nodes: Dictionary = {}
|
||||
var game_active: bool = false
|
||||
@ -262,12 +262,13 @@ func end_wave() -> void:
|
||||
for spawn: EnemySpawner in level.enemy_spawns:
|
||||
spawn.path.enable_visualization()
|
||||
#level.a_star_graph_3d.enable_non_path_tower_frames()
|
||||
level.enable_non_path_tower_frames()
|
||||
if is_multiplayer_authority():
|
||||
if randf_in_range(23 * wave, 0.0, 1.0) <= shop_chance:
|
||||
networked_spawn_shop.rpc()
|
||||
shop_chance = 0.0
|
||||
else:
|
||||
shop_chance += 0.07
|
||||
shop_chance += 0.09
|
||||
wave_finished.emit(wave)
|
||||
set_upcoming_wave()
|
||||
|
||||
@ -365,12 +366,15 @@ func scene_switch_main_menu() -> void:
|
||||
connected_players_nodes.clear()
|
||||
multiplayer.multiplayer_peer.close()
|
||||
multiplayer.multiplayer_peer = null
|
||||
get_tree().change_scene_to_file(main_menu_scene_path)
|
||||
switch_to_main_menu.emit()
|
||||
#get_tree().change_scene_to_file(main_menu_scene_path)
|
||||
|
||||
|
||||
func scene_switch_to_multiplayer_lobby() -> void:
|
||||
get_tree().change_scene_to_file(multiplayer_lobby_scene_path)
|
||||
switch_to_multi_player.emit()
|
||||
#get_tree().change_scene_to_file(multiplayer_lobby_scene_path)
|
||||
|
||||
|
||||
func scene_switch_to_singleplayer_lobby() -> void:
|
||||
get_tree().change_scene_to_file(singleplayer_lobby_scene_path)
|
||||
switch_to_single_player.emit()
|
||||
#get_tree().change_scene_to_file(singleplayer_lobby_scene_path)
|
||||
|
@ -1,7 +1,9 @@
|
||||
class_name Hitbox extends CollisionShape3D
|
||||
|
||||
@export var critical_zone: bool = false
|
||||
|
||||
signal took_damage(amount: int)
|
||||
|
||||
|
||||
func damage(amount: int) -> void:
|
||||
took_damage.emit(amount)
|
||||
took_damage.emit(amount * 1.5 if critical_zone else amount)
|
||||
|
@ -12,7 +12,7 @@ class_name WaveManager extends Object
|
||||
## Takes in wave number and number of players and returns a spawn power value
|
||||
## intended for passing into the generate_wave method
|
||||
static func calculate_spawn_power(wave_number: int, number_of_players: int) -> int:
|
||||
return (20 * number_of_players) + (5 * wave_number)
|
||||
return (40 * number_of_players) + (6 * wave_number)
|
||||
|
||||
|
||||
## Takes in wave number and number of players and returns the amount of coins
|
||||
|
@ -1,17 +1,13 @@
|
||||
[gd_scene load_steps=13 format=3 uid="uid://bjo2q6vca5qlv"]
|
||||
[gd_scene load_steps=10 format=3 uid="uid://bjo2q6vca5qlv"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://ejqql2660u6h" path="res://Worlds/GreenPlanet/Enemies/enemy_controller.gd" id="1_m83kr"]
|
||||
[ext_resource type="PackedScene" uid="uid://canrxnpxcugc2" path="res://Scenes/corpse.tscn" id="2_aed6c"]
|
||||
[ext_resource type="Script" uid="uid://bamhci3kawuyt" path="res://Scripts/health.gd" id="3_wiose"]
|
||||
[ext_resource type="PackedScene" uid="uid://cqtew0t8sttpm" path="res://Scenes/damage_particle.tscn" id="4_mhq3m"]
|
||||
[ext_resource type="Texture2D" uid="uid://chhmkmlfrobhu" path="res://Assets/Textures/bubble.png" id="6_ke2c8"]
|
||||
[ext_resource type="PackedScene" uid="uid://hjq3nrnumklp" path="res://Scenes/health_bar.tscn" id="9_4xla1"]
|
||||
[ext_resource type="Script" uid="uid://cojjgevmbhwal" path="res://Scripts/status_effector.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" uid="uid://d147vuqksqhis" path="res://Scripts/EnemyAI/beelining_controller.gd" id="9_cx8mv"]
|
||||
[ext_resource type="Script" uid="uid://cummt2be3r1gq" path="res://Scripts/hitbox.gd" id="10_4ayno"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_yxqm6"]
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_ss5ir"]
|
||||
viewport_path = NodePath("SubViewport")
|
||||
@ -31,17 +27,6 @@ corpse_scene = ExtResource("2_aed6c")
|
||||
script = ExtResource("3_wiose")
|
||||
damage_particle_scene = ExtResource("4_mhq3m")
|
||||
|
||||
[node name="Hitbox" type="CollisionShape3D" parent="."]
|
||||
shape = SubResource("SphereShape3D_yxqm6")
|
||||
script = ExtResource("10_4ayno")
|
||||
metadata/_custom_type_script = "uid://cummt2be3r1gq"
|
||||
|
||||
[node name="DirectionSprite" type="Sprite3D" parent="."]
|
||||
transform = Transform3D(1.56, 0, 0, 0, 1.56, 0, 0, 0, 1.56, 0, 0.0251125, 0)
|
||||
billboard = 1
|
||||
texture_filter = 0
|
||||
texture = ExtResource("6_ke2c8")
|
||||
|
||||
[node name="Sprite3D" type="Sprite3D" parent="."]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 0.2, 0, 0, 0, 0.2, 0, 0.637873, 0)
|
||||
sorting_offset = 1.0
|
||||
@ -86,4 +71,3 @@ metadata/_custom_type_script = "uid://cojjgevmbhwal"
|
||||
|
||||
[connection signal="health_changed" from="Health" to="SubViewport/HealthBar" method="on_health_changed"]
|
||||
[connection signal="health_depleted" from="Health" to="." method="die"]
|
||||
[connection signal="took_damage" from="Hitbox" to="Health" method="take_damage"]
|
||||
|
File diff suppressed because one or more lines are too long
BIN
blk-nx64-1x.png
Normal file
BIN
blk-nx64-1x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 305 B |
34
blk-nx64-1x.png.import
Normal file
34
blk-nx64-1x.png.import
Normal file
@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bpo5fu2a26mr7"
|
||||
path="res://.godot/imported/blk-nx64-1x.png-073bb5194bda50a3dbca3434c8427284.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://blk-nx64-1x.png"
|
||||
dest_files=["res://.godot/imported/blk-nx64-1x.png-073bb5194bda50a3dbca3434c8427284.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=false
|
||||
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=1
|
BIN
bridge.glb
BIN
bridge.glb
Binary file not shown.
BIN
crystal_enemy.glb
Normal file
BIN
crystal_enemy.glb
Normal file
Binary file not shown.
1845
crystal_enemy.glb.import
Normal file
1845
crystal_enemy.glb.import
Normal file
File diff suppressed because it is too large
Load Diff
BIN
crystal_enemy.png
Normal file
BIN
crystal_enemy.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 354 B |
34
crystal_enemy.png.import
Normal file
34
crystal_enemy.png.import
Normal file
@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://d01y8kogfuayr"
|
||||
path="res://.godot/imported/crystal_enemy.png-1a076fb76b0382c8c7482178fe2aaa81.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://crystal_enemy.png"
|
||||
dest_files=["res://.godot/imported/crystal_enemy.png-1a076fb76b0382c8c7482178fe2aaa81.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
|
58
crystal_enemy.tscn
Normal file
58
crystal_enemy.tscn
Normal file
@ -0,0 +1,58 @@
|
||||
[gd_scene load_steps=7 format=3 uid="uid://cveiaa0y66gln"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://bjo2q6vca5qlv" path="res://Worlds/GreenPlanet/Enemies/air_enemy.tscn" id="1_aormu"]
|
||||
[ext_resource type="PackedScene" uid="uid://o6whohcbalui" path="res://crystal_enemy.glb" id="2_myjng"]
|
||||
[ext_resource type="Script" uid="uid://cummt2be3r1gq" path="res://Scripts/hitbox.gd" id="3_myjng"]
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_c5uwa"]
|
||||
viewport_path = NodePath("SubViewport")
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_c5uwa"]
|
||||
radius = 0.332871
|
||||
height = 1.415
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_d7aub"]
|
||||
radius = 0.133503
|
||||
height = 0.56
|
||||
|
||||
[node name="Dog" instance=ExtResource("1_aormu")]
|
||||
|
||||
[node name="Sprite3D" parent="." index="1"]
|
||||
texture = SubResource("ViewportTexture_c5uwa")
|
||||
|
||||
[node name="crystal_enemy" parent="." index="7" instance=ExtResource("2_myjng")]
|
||||
|
||||
[node name="RemoteTransform3D" type="RemoteTransform3D" parent="crystal_enemy/Cube_001" index="0"]
|
||||
remote_path = NodePath("../../../MiniHitbox2")
|
||||
|
||||
[node name="RemoteTransform3D" type="RemoteTransform3D" parent="crystal_enemy/Cube_002" index="0"]
|
||||
remote_path = NodePath("../../../MiniHitbox")
|
||||
|
||||
[node name="AnimationPlayer" parent="crystal_enemy" index="3"]
|
||||
autoplay = "Spin"
|
||||
speed_scale = 2.0
|
||||
|
||||
[node name="MainHitbox" type="CollisionShape3D" parent="." index="8"]
|
||||
shape = SubResource("CapsuleShape3D_c5uwa")
|
||||
script = ExtResource("3_myjng")
|
||||
metadata/_custom_type_script = "uid://cummt2be3r1gq"
|
||||
|
||||
[node name="MiniHitbox" type="CollisionShape3D" parent="." index="9"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.601335, 0.59523, 0)
|
||||
shape = SubResource("CapsuleShape3D_d7aub")
|
||||
script = ExtResource("3_myjng")
|
||||
critical_zone = true
|
||||
metadata/_custom_type_script = "uid://cummt2be3r1gq"
|
||||
|
||||
[node name="MiniHitbox2" type="CollisionShape3D" parent="." index="10"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.599804, -0.600394, 0)
|
||||
shape = SubResource("CapsuleShape3D_d7aub")
|
||||
script = ExtResource("3_myjng")
|
||||
critical_zone = true
|
||||
metadata/_custom_type_script = "uid://cummt2be3r1gq"
|
||||
|
||||
[connection signal="took_damage" from="MainHitbox" to="Health" method="take_damage"]
|
||||
[connection signal="took_damage" from="MiniHitbox" to="Health" method="take_damage"]
|
||||
[connection signal="took_damage" from="MiniHitbox2" to="Health" method="take_damage"]
|
||||
|
||||
[editable path="crystal_enemy"]
|
13
crystal_enemy_mat.tres
Normal file
13
crystal_enemy_mat.tres
Normal file
@ -0,0 +1,13 @@
|
||||
[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="Texture2D" uid="uid://d01y8kogfuayr" path="res://crystal_enemy.png" id="2_l5awy"]
|
||||
|
||||
[resource]
|
||||
render_priority = 0
|
||||
shader = ExtResource("1_4cwdh")
|
||||
shader_parameter/affine_mapping = true
|
||||
shader_parameter/albedo = ExtResource("2_l5awy")
|
||||
shader_parameter/alpha_scissor = 0.5
|
||||
shader_parameter/jitter = 0.25
|
||||
shader_parameter/resolution = Vector2i(320, 240)
|
110
eye_dog.tscn
110
eye_dog.tscn
@ -1,92 +1,21 @@
|
||||
[gd_scene load_steps=17 format=4 uid="uid://bvq6tbkuv2mfp"]
|
||||
[gd_scene load_steps=14 format=3 uid="uid://bvq6tbkuv2mfp"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://ejqql2660u6h" path="res://Worlds/GreenPlanet/Enemies/enemy_controller.gd" id="1_1dh2f"]
|
||||
[ext_resource type="PackedScene" uid="uid://canrxnpxcugc2" path="res://Scenes/corpse.tscn" id="2_1dh2f"]
|
||||
[ext_resource type="Script" uid="uid://bamhci3kawuyt" path="res://Scripts/health.gd" id="2_bckix"]
|
||||
[ext_resource type="Material" uid="uid://bquvikft4xp1v" path="res://eye_dog_mat.tres" id="2_h25mw"]
|
||||
[ext_resource type="PackedScene" uid="uid://cqtew0t8sttpm" path="res://Scenes/damage_particle.tscn" id="3_wnwjl"]
|
||||
[ext_resource type="Script" uid="uid://cummt2be3r1gq" path="res://Scripts/hitbox.gd" id="6_3v8fr"]
|
||||
[ext_resource type="Texture2D" uid="uid://b1fn60m6xfcsq" path="res://Assets/Textures/minimap_enemy.png" id="7_bkkhh"]
|
||||
[ext_resource type="PackedScene" uid="uid://hjq3nrnumklp" path="res://Scenes/health_bar.tscn" id="8_k2835"]
|
||||
[ext_resource type="Script" uid="uid://b62xnsbki8axa" path="res://Scripts/EnemyAI/pathing_controller.gd" id="9_t4oco"]
|
||||
[ext_resource type="PackedScene" uid="uid://dlhx6r23m5ceg" path="res://eyedog.glb" id="10_h25mw"]
|
||||
[ext_resource type="Script" uid="uid://cojjgevmbhwal" path="res://Scripts/status_effector.gd" id="11_kpdsm"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_t16cj"]
|
||||
resource_name = "Material"
|
||||
cull_mode = 2
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_1dh2f"]
|
||||
resource_name = "eyedog_Cube"
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-3.41696, -4.69348, -5.98271, 6.83392, 9.43436, 13.2972),
|
||||
"attribute_data": PackedByteArray("WDHcPiSVHz5Oyvg+KMFTPqz3xT6qac8++rX1Pvgryz2YyfM+qEnXPaz3xT6qac8+b5G1Ph7qij5l/QY9XPIaPxjEpj7YyD8+OrkDP/xJSj9vkbU+HuqKPnaWBT8MPAM++rX1Pvgryz2YyfM+qEnXPQUDmT6wFX0+xo/0PeCzpj4tQ6I+phyUPvzLkz4QSic/KNoIPgScBD+v/gs/fJzcPijaCD4EnAQ/AdUVPUyk4D4W34A+ij7gPi1Doj6mHJQ+Tsr4PijBUz67+hU/0AUFPseexT7s1oM+7cy3PgYPoz57ObQ+dJWPPgmGtj5o/Yw+SK+yPngojz6FbQA/OI60PVgx3D4klR8+dpYFPww8Az6wq/M++EXJPbCr8z74Rck9/rj0PsgNzz2KQ/M+ANTbPSwx9D6o0NE9nBb0Pqij1j2slOs+bMcTPv649D7IDc89LDH0PqjQ0T2KQ/M+ANTbPZwW9D6oo9Y9x57FPuzWgz7tzLc+Bg+jPgmGtj5o/Yw+ezm0PnSVjz5Ir7I+eCiPPnithz46xjE/Rfz/PjANWT+a9A8+7a5QP2kjHz08hSk/sdQSPwBmeD7mb+g+FGKEPnfREj98SiA+Pa8VP0YzlT7mb+g+FGKEPvzE9T7gst49NJwKP/CP8T0rqxQ/ABmnPeDSCT/gyo89NJwKP/CP8T3KhfM+QG3bPSD07z5Ybac9/MT1PuCy3j0AyfY+CDi3Pe4zyT4IgfY9rJTrPmzHEz7KhfM+QG3bPQDJ9j4IOLc9pd6/PlSOXT7ya/Q+oCDXPYqE9D4oCtI9+h31PkBszj0WKvQ+iOvVPbQitz4E/oU+SvWxPmQMAz8ZqhU/1WgQP0r1sT5kDAM//MuTPhBKJz/zKMM8KrcPPyjKwTzaAAg/UnQaPsq95j7fOpw+uIa7PlJ0Gj7KveY+wIQOPfiw7T6DdEg+CBHZPoRK6j3WSNE+m40cPYggtT6ESuo91kjRPpxtdT7GnZ0+g3RIPggR2T4W34A+ij7gPt86nD64hrs+eMiVPjLYjz6yGYs+StaIPnjIlT4y2I8+GjmuPsw3kT4RD7o+Cl6LPo+6sz4CuJI+dcy1PkJcjT68YLM+fNOOPpwYtD7WI48+fxy1Po5rjD6l3r8+VI5dPo+6sz4CuJI+EQ+6Pgpeiz60Irc+BP6FPho5rj7MN5E+vGCzPnzTjj51zLU+QlyNPn8ctT6Oa4w+nBi0PtYjjz7ya/Q+oCDXPRYq9D6I69U9+h31PkBszj2KhPQ+KArSPQZFUj4eJX0/P8EIPXxxVT+a9A8+7a5QP3ithz46xjE/ZAuYPhucYT8H6cw+sEN0P2QLmD4bnGE/"),
|
||||
"bone_aabbs": [AABB(-2.28318, -0.738707, 3.26614, 4.56636, 3.36441, 3.98988), AABB(0, 0, 0, -1, -1, -1), AABB(-2.28318, -1.73489, 0.363099, 4.56636, 5.14132, 4.84409), AABB(-3.22906, -4.63345, -2.12683, 6.45813, 6.16832, 7.06441), AABB(-3.40993, -4.68297, 0.722066, 6.81985, 4.5502, 4.95126), AABB(-2.28318, -1.04081, 0.150798, 4.56636, 5.78168, 7.16369), AABB(-2.35386, -1.78388, -5.89924, 4.70773, 5.19031, 8.70491), AABB(-3.41142, -4.66082, -5.98271, 6.82284, 7.24109, 6.93371), AABB(-3.41696, -4.69348, -5.98271, 6.83392, 3.6559, 3.64776)],
|
||||
"format": 34359745559,
|
||||
"index_count": 720,
|
||||
"index_data": PackedByteArray("NgA3AAEAOAA2AAEANgA5ADcAOAABACEAOAAYADYANgA6ADkANgAYADoAOAALABgAIQAZADgACwA4ABkAKAAhAAEAIAABADcAAQAgACgAKAA7ACEAIQA8ABkAPQAZADwAPAA+AD0APQA/ABkAPwA9AD4ACwAZAD8AHwA+ADwAHwA/AD4AHwA8ACEAHwALAD8AOwAiACEAIgAfACEAKQA7ACgAIgA7ACkAKQAoAEAAIABAACgAKgApAEAAIwALAB8AIwAfAEEAIgBBAB8AQgALACMAIgApAEMAQwApACoAIAAiAEMARABBACIARAAiACAARAAjAEEARQALAEIARQAYAAsAIwAkAEIAJABFAEIAGABFAAAARAAAACMAJABGAEUAAABFAEYAIwBHACQAAABHACMARwAmACQAJgBGACQAAAA6ABgARwADACYAAABEAAgAIAAIAEQAAAAlAEcAJQADAEcAAABGACUAAABIADoAAAAIAEgAJQBGAA0AJgANAEYAJQBJAAMAJQANAEkAAwBKACYASgANACYAAwBLAEoASQBLAAMASgAnAA0ASQANACcASwAnAEoASQAnAEwASwBMACcASQBMAEsAOgBIABoAGgAFADoAOQA6AAUATQAaAEgAOQAFABMAOQATAAIAOQACADcAEwAFAE4AEwBOAE8AEwBPAFAAEwBQAAIACQBPAE4ACQBQAE8ACQBOAFEACQARAFAATgAUAFEAUAARABIATgAWABQABQAWAE4AFABSAFEAEgARAFIABwBRAFIABwBSABEAEgBSAFMAFABTAFIAFgBUABQAVABTABQABQBVABYAVgASAFMAVABXAFMAVgBTAFcAFgBYAFQAVQBYABYAFQBXAFQAFQBWAFcAWABZAFQAFQBUAFkAFQBZAFoAWAAPAFkAWQAPAFoAFQBaAFsAFQBbAFYAWwBaAA8AWABcAA8AVQBcAFgAXQBbAA8AXQBWAFsAXQAPAFwAXgBWAF0AXgASAFYAUAASAF4AAgBQAF4AXwBeAF0AAgBeAF8AXwBdAFwAEAACAF8AYABfAFwAEABfAGAAYABcAGEAYgBhAFwAYgBcAFUAYABhAA4AYgAOAGEAYAAOABAAFwBiAFUAYgAXAA4AFwBVAAUACAAQAA4ACAAOABcACAAXAEgABQAbABcAGgAbAAUASAAXAGMAZAAbABoAFwAbAGUAZABlABsAFwBlAGMATQBkABoASABjAE0AHQBlAGQAYwBlABwAHQAcAGUATQBjAB4AYwAcAB4ABgBkAE0ABgAdAGQATQAeAAYAZgAcAB0ABgAeAGcAHgAcAGgAZgBoABwAHgBoAGcAaQBmAB0AaQAdAAYAaQBoAGYABgBnAGkAaQBnAGgAIABqAAgACABqABAAIAA3AGoANwAtAGoALQA3AAIAAgAQAC4ALQACAC4AEABrAC4AbAAtAC4AbAAuAGsAbQBqAC0AbQAtAGwAagBuABAAagBtAG4AEABuAGsACgBtAGwAbQAxAG4AbQAKADEAbgAwAGsAbgAxADAALwBsAGsACgBsAC8ALwBrADAACgBvADEAcAAvADAAcQAKAC8AcQAvAHAACgBxAG8AcAAwAHIAMQByADAAcQBwAHIAMQBvAHIAcQByAG8AcwAsAAQAcwB0ACwAdQAsAHQAcwB1AHQAdQB2ACwAdgAEACwAcwAMAHUADAB2AHUAdgAqAAQADAAqAHYAKgBAAAQAQwAqAAwAKwAEAEAAKwBzAAQAKwAMAHMAKwBDAAwAIAArAEAAIABDACsANAB3AHgANQA0AHgAMgA0ADUANQB4AHkAeQB4AHcAegA1AHkAMgB7ADQANAB7AHcAMwB7ADIAewB8AHcAMwB8AHsAeQB3AH0AegB5AH0AfQB3AHwAMwB6AH0AMwB9AHwA"),
|
||||
"lods": [1.65628, PackedByteArray("EAACAAcAAgAJAAcABQAHAAkACQACABMACQATAAUAFwAHAAUAFwAQAAcAEwALAAUAEwACAAEACwATAAEALQABAAIAAgAQAC0ABQAaABcAGgAFAAsAFwAaABwAFwAcAAYABgAcABoAGgAXAAYACAAXABoAFwAIABAACAAtABAAAAAIABoAAAAtAAgAAAAaAAsALQAKABAAEAAKADAACgAtADAAEAAwAC0AAAABAC0AAQAfAAsAAAAEAAEAKQABAAQADAApAAQAAAAMAAQAKQAiAAEAIgApAAwAIgAfAAEAAAAiAAwAAAAfACIAIwALAB8AAAAjAB8AJAALACMAAAALACQAIwADACQAAAADACMAAwANACQAJAANAAAAAAANAAMA"), 1.99253, PackedByteArray("DgACAA8AEAACAA4AAgARAA8AEQASAA8ABwASABEABwAJABIACQARABMAEwARAAIAFAASAAkAFAAVABIAFQAPABIAFQAUABYAFgAPABUABQAWABQABQAUAAkABQAPABYACQATAAUAFwAPAAUAFwAOAA8AEwAYAAUAEwACAAEAGQAYABMAGQATAAEAGQALABgAGgAFABgADgAXABoABQAbABcAGgAbAAUAFwAbABwAHQAcABsAHQAbABoAFwAcAB4ABgAcAB0ABgAeABwABgAXAB4ABgAdABoAGgAXAAYAAAAaABgAAAAOABoAAAAYAAsACwAZAB8AAAAgAA4AIQAfABkAGQABACEAIgAfACEAIAAfACIAIwALAB8AIAAjAB8AIAAAACMAAAALACQAJAALACMAAAAlACMAJAANAAAAAAANACUAIwAmACQAJgANACQAJQADACMAIwADACYAJQANAAMAJgAnAA0AAwANACcAAwAnACYAKAAhAAEAAQAgACgAKAApACEAKQAiACEAKQAoAAQAIAAEACgAIgApACoAKgApAAQAIAAiACsAIAArAAQAKwAiAAwAIgAqAAwAKwAMAAQADAAqACwAKgAEACwADAAsAAQAIAABAC0AIAAtAA4ALQABAAIADgAtABAALQACAC4AAgAQAC4ALwAtAC4ALQAKABAACgAtAC8ALwAuADAAEAAwAC4ACgAvADAAEAAxADAACgAwADEACgAxABAAMgAzADQANQA0ADMAMgA0ADUA"), 2.15688, PackedByteArray("CAACAAcAAgAJAAcABQAHAAkACAAHAAUACQACAAUACAAFAAYABQAIAAYAAgAKAAgACAAKAAIAAAAIAAUAAAACAAgAAgALAAUAAAAFAAsAAAABAAIACwACAAEAAAAEAAEABAAMAAEADAALAAEAAAAMAAQAAAALAAwAAAADAAsADQALAAMAAAALAA0AAAANAAMA"), 2.76915, PackedByteArray("AAABAAIAAAABAAMAAAADAAEAAAAEAAEAAAABAAQAAAAFAAEAAgABAAUAAAACAAUABgACAAUAAgAGAAUABQACAAcABwACAAUA")],
|
||||
"material": SubResource("StandardMaterial3D_t16cj"),
|
||||
"name": "Material",
|
||||
"primitive": 3,
|
||||
"skin_data": PackedByteArray("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"),
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 126,
|
||||
"vertex_data": PackedByteArray("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")
|
||||
}]
|
||||
blend_shape_mode = 0
|
||||
|
||||
[sub_resource type="Skin" id="Skin_bckix"]
|
||||
resource_name = "Skin"
|
||||
bind_count = 9
|
||||
bind/0/name = &"Bone.005"
|
||||
bind/0/bone = -1
|
||||
bind/0/pose = Transform3D(-0.640916, -0.646869, -0.413264, -0.392779, -0.186192, 0.900587, -0.659508, 0.739522, -0.134744, 2.02247, -4.61441, 0.217656)
|
||||
bind/1/name = &"Bone.006"
|
||||
bind/1/bone = -1
|
||||
bind/1/pose = Transform3D(-0.634558, -0.635373, -0.440043, -0.374525, -0.245251, 0.894194, -0.676067, 0.732225, -0.0823369, 2.18085, -5.42181, -0.0971631)
|
||||
bind/2/name = &"Bone.004"
|
||||
bind/2/bone = -1
|
||||
bind/2/pose = Transform3D(1, 2.32525e-07, -5.26812e-08, -6.03962e-14, 0.220961, 0.975283, 2.38419e-07, -0.975284, 0.220961, -1.84507e-07, -1.50289, 0.773879)
|
||||
bind/3/name = &"Bone"
|
||||
bind/3/bone = -1
|
||||
bind/3/pose = Transform3D(0.959145, -0.257365, 0.117493, -0.282714, -0.856223, 0.432386, -0.0106809, -0.447938, -0.894001, 1.02412, -1.16217, 1.63304)
|
||||
bind/4/name = &"Bone.003"
|
||||
bind/4/bone = -1
|
||||
bind/4/pose = Transform3D(0.977532, -0.196746, 0.0756499, -0.210725, -0.920949, 0.327795, 0.0051773, -0.336371, -0.941715, 1.3022, -3.20924, 2.02577)
|
||||
bind/5/name = &"Bone.007"
|
||||
bind/5/bone = -1
|
||||
bind/5/pose = Transform3D(1, 2.08089e-07, -1.16372e-07, -1.98952e-13, 0.4881, 0.872788, 2.38419e-07, -0.872789, 0.4881, 1.34921e-08, -2.92444, -0.05659)
|
||||
bind/6/name = &"Bone.008"
|
||||
bind/6/bone = -1
|
||||
bind/6/pose = Transform3D(1, 0, 0, 0, -0.00700919, -0.999975, 0, 0.999975, -0.00700919, 0, 1.30233, -1.07773)
|
||||
bind/7/name = &"Bone.001"
|
||||
bind/7/bone = -1
|
||||
bind/7/pose = Transform3D(0.898798, -0.347512, -0.267202, -0.438357, -0.715641, -0.543784, -0.00224915, 0.605882, -0.795551, -0.269272, -1.92535, -2.46093)
|
||||
bind/8/name = &"Bone.002"
|
||||
bind/8/bone = -1
|
||||
bind/8/pose = Transform3D(0.989485, -0.13865, 0.041188, -0.144576, -0.939744, 0.309806, -0.00424831, -0.312503, -0.949907, 1.99111, -1.12023, -5.53977)
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_wnwjl"]
|
||||
resource_name = "eyedog_Cube_002"
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-1.21143, -0.192761, 4.6902, 1.24364, 0.68767, 2.28712),
|
||||
"attribute_data": PackedByteArray("gBFgP2zgIz+AEWA/2IJAP4ARYD/YgkA/Fm9DP9iCQD+AEWA/rsd5PxZvQz/YgkA/qswmP2zgIz8Wb0M/bOAjPxZvQz9DJV0/gBFgP0MlXT+AEWA/QyVdPxZvQz9DJV0/7LN8P9iCQD/ss3w/2IJAP6rMJj/YgkA/qswmP9iCQD8="),
|
||||
"bone_aabbs": [AABB(-1.18232, -0.108765, 4.6902, 1.21453, 0.603684, 1.48705), AABB(-1.21143, -0.192761, 4.6902, 1.24364, 0.68767, 2.28713)],
|
||||
"format": 34359745559,
|
||||
"index_count": 42,
|
||||
"index_data": PackedByteArray("BAAIAAkACAAKAAkACAALAAoACwABAAoACwADAAEADAANAAEADAABAAIAAgABAAMAAgAAAAwAAgADAAUABQAHAAIABQADAA4ABQAOAA8ADwAGAAUA"),
|
||||
"lods": [0.68984, PackedByteArray("AAABAAIAAgABAAMABAADAAEAAgADAAUABQADAAYABQAHAAIA")],
|
||||
"material": SubResource("StandardMaterial3D_t16cj"),
|
||||
"name": "Material",
|
||||
"primitive": 3,
|
||||
"skin_data": PackedByteArray("AQAAAAAAAAD//wAAAAAAAAAAAQAAAAAAR/W3CgAAAAABAAAAAAAAAED+vgEAAAAAAAABAAAAAAAD9vsJAAAAAAEAAAAAAAAA//8AAAAAAAABAAAAAAAAAAL//AAAAAAAAQAAAAAAAAD//wAAAAAAAAEAAAAAAAAA//8AAAAAAAABAAAAAAAAAC//zwAAAAAAAQAAAAAAAAAr+9MEAAAAAAAAAQAAAAAAqfNVDAAAAAAAAAEAAAAAAMnwNQ8AAAAAAQAAAAAAAAAr+9MEAAAAAAAAAQAAAAAAqfNVDAAAAAAAAAEAAAAAAMnwNQ8AAAAAAQAAAAAAAAAv/88AAAAAAA=="),
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 16,
|
||||
"vertex_data": PackedByteArray("DxCbvwljRb4tRt9AVNK6vMlk/T450p9ADokHvxrakz65p8VA1vADPR1Lcz6P1p9ADxCbvwljRb4tRt9A2ebyvh3XAD0PrMVADxCbvwljRb4tRt9ADxCbvwljRb4tRt9AZkuQv+6/3r3z77tAN1aXv3ceGD6e67tA8vksv+uZtT4cFpZAUeQev8hqxz1zGpZAN1aXv3ceGD6e67tA8vksv+uZtT4cFpZAUeQev8hqxz1zGpZAZkuQv+6/3r3z77tAlGHjaVsQE6ZixefP0kXO2hqe0rvYLK/hxuAGSNmud/GUYeNpPWaM60y6f1cLpFXilGHjaSfMLMiUYeNpPWaM63lBHiyFL0zg1Sx/tLKsN+b8J8ngI4QC5d4xOQ3wOy7y1Sx/tOA6jI/8J8ng////v94xOQ3///+/eUEeLCG3gKk=")
|
||||
}]
|
||||
blend_shape_mode = 0
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_cavbv"]
|
||||
radius = 0.42
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_h25mw"]
|
||||
radius = 0.151085
|
||||
|
||||
[sub_resource type="ViewportTexture" id="ViewportTexture_1kwxq"]
|
||||
viewport_path = NodePath("SubViewport")
|
||||
@ -102,30 +31,23 @@ d_n = NodePath("Node3D")
|
||||
corpse_scene = ExtResource("2_1dh2f")
|
||||
metadata/_custom_type_script = "uid://ejqql2660u6h"
|
||||
|
||||
[node name="Cube" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(-0.065, 0, -5.68248e-09, 0, 0.065, 0, 5.68248e-09, 0, -0.065, 0, 0.400893, 0)
|
||||
mesh = SubResource("ArrayMesh_1dh2f")
|
||||
skin = SubResource("Skin_bckix")
|
||||
skeleton = NodePath("")
|
||||
surface_material_override/0 = ExtResource("2_h25mw")
|
||||
|
||||
[node name="Cube_001" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(-0.065, 0, -5.68248e-09, 0, 0.065, 0, 5.68248e-09, 0, -0.065, 0, 0.400893, 0)
|
||||
mesh = SubResource("ArrayMesh_wnwjl")
|
||||
skin = SubResource("Skin_bckix")
|
||||
skeleton = NodePath("")
|
||||
surface_material_override/0 = ExtResource("2_h25mw")
|
||||
|
||||
[node name="Health" type="Node" parent="."]
|
||||
script = ExtResource("2_bckix")
|
||||
damage_particle_scene = ExtResource("3_wnwjl")
|
||||
|
||||
[node name="Hitbox" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.441355, 0)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.33811, 0.0832841)
|
||||
shape = SubResource("SphereShape3D_cavbv")
|
||||
script = ExtResource("6_3v8fr")
|
||||
metadata/_custom_type_script = "uid://cummt2be3r1gq"
|
||||
|
||||
[node name="Hitbox2" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.601201, -0.436369)
|
||||
shape = SubResource("SphereShape3D_h25mw")
|
||||
script = ExtResource("6_3v8fr")
|
||||
critical_zone = true
|
||||
metadata/_custom_type_script = "uid://cummt2be3r1gq"
|
||||
|
||||
[node name="HealthBar" type="Sprite3D" parent="."]
|
||||
transform = Transform3D(0.2, 0, 0, 0, 0.2, 0, 0, 0, 0.2, 0, 1.20821, 0)
|
||||
sorting_offset = 1.0
|
||||
@ -169,6 +91,10 @@ metadata/_custom_type_script = "uid://cojjgevmbhwal"
|
||||
[node name="Node3D" type="Node3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.39813, 0)
|
||||
|
||||
[node name="eyedog" parent="." instance=ExtResource("10_h25mw")]
|
||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0.3764, 0)
|
||||
|
||||
[connection signal="health_changed" from="Health" to="SubViewport/HealthBar" method="on_health_changed"]
|
||||
[connection signal="health_depleted" from="Health" to="." method="die"]
|
||||
[connection signal="took_damage" from="Hitbox" to="Health" method="take_damage"]
|
||||
[connection signal="took_damage" from="Hitbox2" to="Health" method="take_damage"]
|
||||
|
@ -1,8 +0,0 @@
|
||||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://bquvikft4xp1v"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://wx4d2upch81n" path="res://eyedog_eyedog_tex.png" id="1_l4rje"]
|
||||
|
||||
[resource]
|
||||
shading_mode = 0
|
||||
albedo_texture = ExtResource("1_l4rje")
|
||||
texture_filter = 2
|
@ -16,7 +16,7 @@ dest_files=["res://.godot/imported/eyedog.glb-e332c2bd7f518d74bf3d38e536e40139.s
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/root_scale=0.08
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
@ -32,6 +32,13 @@ animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
_subresources={
|
||||
"materials": {
|
||||
"Material": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "uid://bo82o88d7vo1x"
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
||||
|
33
gif_animation.gd
Normal file
33
gif_animation.gd
Normal file
@ -0,0 +1,33 @@
|
||||
class_name BootLogo extends TextureRect
|
||||
|
||||
signal animation_finished()
|
||||
|
||||
var time: float = 0.0
|
||||
var x: int = 0
|
||||
var y: int = 0
|
||||
var loops: int = 0
|
||||
var signalled: bool = false
|
||||
@export var color_rect: ColorRect
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
time += delta
|
||||
if time >= (1.0 / 24.0):
|
||||
time -= (1.0 / 24.0)
|
||||
x += 1
|
||||
if x >= 10:
|
||||
x = 0
|
||||
y += 1
|
||||
if y == 4 and x == 4:
|
||||
var tween: Tween = create_tween()
|
||||
tween.set_ease(Tween.EASE_OUT)
|
||||
tween.set_trans(Tween.TRANS_CUBIC)
|
||||
tween.tween_property(color_rect, "offset_top", 155.0, 1.5)
|
||||
if y == 8 and x == 4:
|
||||
y = 7
|
||||
x = 5
|
||||
loops += 1
|
||||
if !signalled and loops >= 3:
|
||||
signalled = true
|
||||
animation_finished.emit()
|
||||
texture.region = Rect2(256.0 * x, 256.0 * y, 256.0, 256.0)
|
1
gif_animation.gd.uid
Normal file
1
gif_animation.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://p1ugbcmjuwxg
|
50
jitter.gdshader
Normal file
50
jitter.gdshader
Normal file
@ -0,0 +1,50 @@
|
||||
shader_type spatial;
|
||||
render_mode blend_mix,
|
||||
cull_disabled,
|
||||
depth_prepass_alpha,
|
||||
shadows_disabled,
|
||||
specular_disabled,
|
||||
vertex_lighting;
|
||||
|
||||
uniform bool affine_mapping = false;
|
||||
uniform sampler2D albedo : source_color, filter_nearest;
|
||||
uniform float alpha_scissor : hint_range(0, 1) = 0.5;
|
||||
uniform float jitter: hint_range(0, 1) = 0.25;
|
||||
uniform ivec2 resolution = ivec2(320, 240);
|
||||
|
||||
vec4 snap_to_position(vec4 base_position)
|
||||
{
|
||||
vec4 snapped_position = base_position;
|
||||
snapped_position.xyz = base_position.xyz / base_position.w;
|
||||
|
||||
vec2 snap_resulotion = floor(vec2(resolution) * (1.0 - jitter));
|
||||
snapped_position.x = floor(snap_resulotion.x * snapped_position.x) / snap_resulotion.x;
|
||||
snapped_position.y = floor(snap_resulotion.y * snapped_position.y) / snap_resulotion.y;
|
||||
|
||||
snapped_position.xyz *= base_position.w;
|
||||
return snapped_position;
|
||||
}
|
||||
|
||||
void vertex()
|
||||
{
|
||||
vec4 snapped_position = snap_to_position(PROJECTION_MATRIX * MODELVIEW_MATRIX * vec4(VERTEX, 1.0));
|
||||
if (affine_mapping)
|
||||
{
|
||||
POSITION = snapped_position;
|
||||
POSITION /= abs(POSITION.w);
|
||||
}
|
||||
else
|
||||
{
|
||||
POSITION = snapped_position;
|
||||
}
|
||||
}
|
||||
|
||||
void fragment()
|
||||
{
|
||||
vec4 color_base = COLOR;
|
||||
vec4 texture_color = texture(albedo, UV);
|
||||
|
||||
ALBEDO = (color_base * texture_color).rgb;
|
||||
ALPHA = texture_color.a * color_base.a;
|
||||
ALPHA_SCISSOR_THRESHOLD = alpha_scissor;
|
||||
}
|
1
jitter.gdshader.uid
Normal file
1
jitter.gdshader.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://c5bffujq0l70k
|
BIN
lost-century-1x.png
Normal file
BIN
lost-century-1x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 133 B |
34
lost-century-1x.png.import
Normal file
34
lost-century-1x.png.import
Normal file
@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://jy150d2odqk2"
|
||||
path="res://.godot/imported/lost-century-1x.png-1c6cec7524286e83e291b7e7de05b077.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://lost-century-1x.png"
|
||||
dest_files=["res://.godot/imported/lost-century-1x.png-1c6cec7524286e83e291b7e7de05b077.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=false
|
||||
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=1
|
47
main.gd
47
main.gd
@ -1,19 +1,44 @@
|
||||
class_name Main
|
||||
extends SubViewportContainer
|
||||
extends Node
|
||||
|
||||
@export var scene: Node
|
||||
@export var movies: Node
|
||||
|
||||
var loaded: bool = false
|
||||
var main_menu_scene_path: String = "res://Scenes/Menus/MainMenu/main_menu.tscn"
|
||||
var multiplayer_lobby_scene_path: String = "res://Scenes/Menus/multiplayer_lobby.tscn"
|
||||
var singleplayer_lobby_scene_path: String = "res://Scenes/Menus/singleplayer_lobby.tscn"
|
||||
|
||||
func _ready() -> void:
|
||||
ResourceLoader.load_threaded_request("res://Scenes/Menus/MainMenu/main_menu.tscn")
|
||||
Game.switch_to_main_menu.connect(load_main_menu)
|
||||
Game.switch_to_single_player.connect(load_singleplayer)
|
||||
Game.switch_to_multi_player.connect(load_multiplayer)
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if !loaded:
|
||||
var progress: Array = []
|
||||
ResourceLoader.load_threaded_get_status("res://Scenes/Menus/MainMenu/main_menu.tscn", progress)
|
||||
$SubViewport/ProgressBar.value = progress[0] * 100.0
|
||||
func load_main_menu() -> void:
|
||||
load_scene(main_menu_scene_path)
|
||||
|
||||
|
||||
func load_singleplayer() -> void:
|
||||
load_scene(singleplayer_lobby_scene_path)
|
||||
|
||||
|
||||
func load_multiplayer() -> void:
|
||||
load_scene(multiplayer_lobby_scene_path)
|
||||
|
||||
|
||||
func load_scene(scene_path: String) -> void:
|
||||
ResourceLoader.load_threaded_request(scene_path)
|
||||
for node: Node in scene.get_children():
|
||||
node.queue_free()
|
||||
var progress: Array = [0.0]
|
||||
while progress[0] < 1.0:
|
||||
await get_tree().process_frame
|
||||
ResourceLoader.load_threaded_get_status(scene_path, progress)
|
||||
if progress[0] >= 1.0:
|
||||
$SubViewport/ProgressBar.queue_free()
|
||||
var main_menu: PackedScene = ResourceLoader.load_threaded_get("res://Scenes/Menus/MainMenu/main_menu.tscn")
|
||||
$SubViewport/Node.add_child(main_menu.instantiate())
|
||||
loaded = true
|
||||
var new_scene: PackedScene = ResourceLoader.load_threaded_get(scene_path)
|
||||
if movies:
|
||||
movies.queue_free()
|
||||
movies = null
|
||||
$CanvasLayer.visible = true
|
||||
scene.add_child(new_scene.instantiate())
|
||||
|
105
main.tscn
105
main.tscn
@ -1,36 +1,101 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://d2k8y13qfvch0"]
|
||||
[gd_scene load_steps=8 format=3 uid="uid://d2k8y13qfvch0"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://y78cbva8erip" path="res://psx.gdshader" id="1_0xm2m"]
|
||||
[ext_resource type="Shader" uid="uid://diugvmtoos1ti" path="res://pixeldither.gdshader" id="2_1bvp3"]
|
||||
[ext_resource type="Script" uid="uid://cx1xj7esl03ui" path="res://main.gd" id="2_h2yge"]
|
||||
[ext_resource type="Texture2D" uid="uid://6frn8lcwwehv" path="res://Assets/TextureAtlases/puppyfruit.png" id="2_lquwl"]
|
||||
[ext_resource type="Script" uid="uid://p1ugbcmjuwxg" path="res://gif_animation.gd" id="3_7mycd"]
|
||||
[ext_resource type="Texture2D" uid="uid://bpo5fu2a26mr7" path="res://blk-nx64-1x.png" id="3_h2yge"]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_1bvp3"]
|
||||
shader = ExtResource("1_0xm2m")
|
||||
shader_parameter/enabled = true
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_272bh"]
|
||||
atlas = ExtResource("2_lquwl")
|
||||
region = Rect2(0, 0, 256, 256)
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_7mycd"]
|
||||
shader = ExtResource("2_1bvp3")
|
||||
shader_parameter/shader_enabled = true
|
||||
shader_parameter/palette = ExtResource("3_h2yge")
|
||||
shader_parameter/dithering = true
|
||||
shader_parameter/colors = 12
|
||||
shader_parameter/dither_size = 1
|
||||
shader_parameter/dithering_size = 4
|
||||
shader_parameter/resolution_scale = 1
|
||||
shader_parameter/quantization_level = 8
|
||||
|
||||
[node name="SubViewportContainer" type="SubViewportContainer"]
|
||||
material = SubResource("ShaderMaterial_1bvp3")
|
||||
[node name="Main" type="Node" node_paths=PackedStringArray("scene", "movies")]
|
||||
script = ExtResource("2_h2yge")
|
||||
scene = NodePath("Scene")
|
||||
movies = NodePath("Movies")
|
||||
metadata/_custom_type_script = "uid://cx1xj7esl03ui"
|
||||
|
||||
[node name="Movies" type="ColorRect" parent="."]
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("2_h2yge")
|
||||
color = Color(0.193592, 0.4164, 0.224909, 1)
|
||||
|
||||
[node name="SubViewport" type="SubViewport" parent="."]
|
||||
size = Vector2i(1920, 1080)
|
||||
|
||||
[node name="ProgressBar" type="ProgressBar" parent="SubViewport"]
|
||||
anchors_preset = 14
|
||||
[node name="TextureRect" type="TextureRect" parent="Movies" node_paths=PackedStringArray("color_rect")]
|
||||
layout_mode = 1
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_top = -13.5
|
||||
offset_bottom = 13.5
|
||||
offset_left = -128.0
|
||||
offset_top = -128.0
|
||||
offset_right = 128.0
|
||||
offset_bottom = 128.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
show_percentage = false
|
||||
texture = SubResource("AtlasTexture_272bh")
|
||||
script = ExtResource("3_7mycd")
|
||||
color_rect = NodePath("../ColorRect")
|
||||
|
||||
[node name="Node" type="Node" parent="SubViewport"]
|
||||
[node name="Label" type="Label" parent="Movies"]
|
||||
layout_mode = 1
|
||||
anchors_preset = -1
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -52.0
|
||||
offset_top = 205.0
|
||||
offset_right = 52.0
|
||||
offset_bottom = 20.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_font_sizes/font_size = 91
|
||||
text = "puppyfruit"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="Movies"]
|
||||
layout_mode = 1
|
||||
anchors_preset = -1
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -165.0
|
||||
offset_top = 85.0
|
||||
offset_right = 190.0
|
||||
offset_bottom = 170.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0.192157, 0.415686, 0.223529, 1)
|
||||
|
||||
[node name="Scene" type="Node" parent="."]
|
||||
|
||||
[node name="CanvasLayer" type="CanvasLayer" parent="."]
|
||||
layer = 2
|
||||
visible = false
|
||||
|
||||
[node name="ColorRect" type="ColorRect" parent="CanvasLayer"]
|
||||
material = SubResource("ShaderMaterial_7mycd")
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
|
||||
[connection signal="animation_finished" from="Movies/TextureRect" to="." method="load_main_menu"]
|
||||
|
15
pixelate.gdshader
Normal file
15
pixelate.gdshader
Normal file
@ -0,0 +1,15 @@
|
||||
shader_type canvas_item;
|
||||
|
||||
uniform sampler2D SCREEN_TEXTURE: hint_screen_texture, filter_linear_mipmap;
|
||||
|
||||
uniform int pixel_size : hint_range(1, 64) = 4; // Pixel size
|
||||
uniform vec2 screen_size = vec2(1920.0, 1080.0); // Screen size (set manually)
|
||||
|
||||
void fragment() {
|
||||
//Pixel coordinates in screen space
|
||||
vec2 pixel_coords = floor(FRAGCOORD.xy / float(pixel_size)) * float(pixel_size);
|
||||
// Convert pixel coordinates to UVs for screen texture
|
||||
vec2 uv = pixel_coords / screen_size;
|
||||
// Get color from texture screen
|
||||
COLOR = texture(SCREEN_TEXTURE, uv);
|
||||
}
|
1
pixelate.gdshader.uid
Normal file
1
pixelate.gdshader.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://dio8pftmnf0l0
|
75
pixeldither.gdshader
Normal file
75
pixeldither.gdshader
Normal file
@ -0,0 +1,75 @@
|
||||
shader_type canvas_item;
|
||||
|
||||
uniform bool shader_enabled = true;
|
||||
|
||||
uniform sampler2D palette;
|
||||
uniform sampler2D SCREEN_TEXTURE: hint_screen_texture, filter_linear_mipmap;
|
||||
uniform bool dithering = false;
|
||||
uniform int dithering_size : hint_range(1, 16) = 2;
|
||||
uniform int resolution_scale : hint_range(1, 64) = 2;
|
||||
uniform int quantization_level : hint_range(2, 64) = 64;
|
||||
|
||||
int dithering_pattern(ivec2 fragcoord) {
|
||||
const int pattern[] = {
|
||||
-4, +0, -3, +1,
|
||||
+2, -2, +3, -1,
|
||||
-3, +1, -4, +0,
|
||||
+3, -1, +2, -2
|
||||
};
|
||||
int x = fragcoord.x % 4;
|
||||
int y = fragcoord.y % 4;
|
||||
return pattern[y * 4 + x] * dithering_size;
|
||||
}
|
||||
|
||||
float color_distance(vec3 a, vec3 b) {
|
||||
vec3 diff = a - b;
|
||||
return dot(diff, diff);
|
||||
}
|
||||
|
||||
vec3 quantize_color(vec3 color, int levels) {
|
||||
if (levels <= 1) return vec3(0.0);
|
||||
float step = 1.0 / float(levels - 1);
|
||||
return round(color / step) * step;
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
vec4 final_color;
|
||||
|
||||
if (!shader_enabled) {
|
||||
final_color = texture(SCREEN_TEXTURE, UV);
|
||||
} else {
|
||||
vec2 tex_size = vec2(textureSize(SCREEN_TEXTURE, 0));
|
||||
|
||||
if (tex_size.x <= 0.0 || tex_size.y <= 0.0) {
|
||||
final_color = vec4(0.0);
|
||||
} else {
|
||||
ivec2 texel_coord = ivec2(floor(UV * tex_size / float(resolution_scale)));
|
||||
vec3 color = texelFetch(SCREEN_TEXTURE, texel_coord * resolution_scale, 0).rgb;
|
||||
|
||||
if (dithering) {
|
||||
int dither = dithering_pattern(texel_coord);
|
||||
color += vec3(float(dither) / 255.0);
|
||||
}
|
||||
color = clamp(color, 0.0, 1.0);
|
||||
color = quantize_color(color, quantization_level);
|
||||
|
||||
int palette_size = 64;
|
||||
float closest_distance = 9999.0;
|
||||
vec4 closest_color = vec4(0.0);
|
||||
|
||||
for (int i = 0; i < palette_size; i++) {
|
||||
float u = float(i) / float(palette_size - 1);
|
||||
vec3 palette_color = texture(palette, vec2(u, 0.0)).rgb;
|
||||
float dist = color_distance(color, palette_color);
|
||||
if (dist < closest_distance) {
|
||||
closest_distance = dist;
|
||||
closest_color = vec4(palette_color, 1.0);
|
||||
}
|
||||
}
|
||||
|
||||
final_color = closest_color;
|
||||
}
|
||||
}
|
||||
|
||||
COLOR = final_color;
|
||||
}
|
1
pixeldither.gdshader.uid
Normal file
1
pixeldither.gdshader.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://diugvmtoos1ti
|
35
playstation.gdshader
Normal file
35
playstation.gdshader
Normal file
@ -0,0 +1,35 @@
|
||||
shader_type canvas_item;
|
||||
|
||||
uniform sampler2D SCREEN_TEXTURE: hint_screen_texture, filter_linear_mipmap;
|
||||
uniform int resolution_scale : hint_range(1, 64) = 1;
|
||||
|
||||
uniform float dither_spread = 1.0;
|
||||
uniform float dither_gamma = 1.0;
|
||||
|
||||
|
||||
void fragment() {
|
||||
vec2 tex_size = vec2(textureSize(SCREEN_TEXTURE, 0));
|
||||
ivec2 texel_coord = ivec2(floor(UV * tex_size / float(resolution_scale)));
|
||||
vec3 color = texelFetch(SCREEN_TEXTURE, texel_coord * resolution_scale, 0).rgb;
|
||||
|
||||
int ps1_dither_matrix[16] = {
|
||||
-4, 0, -3, 1,
|
||||
2, -2, 3, -1,
|
||||
-3, 1, -4, 0,
|
||||
3, -1, 2, -2
|
||||
};
|
||||
|
||||
// Index 1D dither matrix based on 2D screen coordinates
|
||||
float noise = float(ps1_dither_matrix[(int(texel_coord.x) % 4) + (int(texel_coord.y) % 4) * 4]);
|
||||
|
||||
// Apply dithering and quantize 24 bit srgb to 15 bit srgb according to https://psx-spx.consoledev.net/graphicsprocessingunitgpu/
|
||||
color = pow(color, vec3(1.0 / dither_gamma)); // Convert to srgb cause it imo looks better and is probably correct idk looks more correct than linear quantization
|
||||
color = round(color * 255.0 + noise); // Convert to 0-255 and add dither noise
|
||||
color = clamp(round(color), vec3(0), vec3(255)); // Clamp to 0-255 in case of overflow
|
||||
color = clamp(color / 8.0, vec3(0), vec3(31)); // Convert to 0-31 range
|
||||
color /= 31.0; // Convert back to 0-1 range
|
||||
|
||||
color = pow(color, vec3(dither_gamma)); // Convert back to linear
|
||||
|
||||
COLOR = vec4(color, 1.0);
|
||||
}
|
1
playstation.gdshader.uid
Normal file
1
playstation.gdshader.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://dsn7gkhdg1xbb
|
@ -14,6 +14,7 @@ config/name="Decked Out Defense"
|
||||
config/version="0.2.0"
|
||||
run/main_scene="uid://d2k8y13qfvch0"
|
||||
config/features=PackedStringArray("4.4", "Forward Plus")
|
||||
boot_splash/show_image=false
|
||||
config/icon="res://Assets/Textures/icon.svg"
|
||||
|
||||
[autoload]
|
||||
@ -30,6 +31,7 @@ gdscript/warnings/inferred_declaration=2
|
||||
|
||||
window/size/viewport_width=1920
|
||||
window/size/viewport_height=1080
|
||||
window/stretch/mode="canvas_items"
|
||||
|
||||
[editor]
|
||||
|
||||
|
13
psx_model_material.tres
Normal file
13
psx_model_material.tres
Normal file
@ -0,0 +1,13 @@
|
||||
[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="Texture2D" uid="uid://wx4d2upch81n" path="res://eyedog_eyedog_tex.png" id="2_j3hec"]
|
||||
|
||||
[resource]
|
||||
render_priority = 0
|
||||
shader = ExtResource("1_crvh7")
|
||||
shader_parameter/affine_mapping = true
|
||||
shader_parameter/albedo = ExtResource("2_j3hec")
|
||||
shader_parameter/alpha_scissor = 0.5
|
||||
shader_parameter/jitter = 0.25
|
||||
shader_parameter/resolution = Vector2i(320, 240)
|
BIN
resurrect-64-1x.png
Normal file
BIN
resurrect-64-1x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 312 B |
34
resurrect-64-1x.png.import
Normal file
34
resurrect-64-1x.png.import
Normal file
@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cfbvrwy0x72e6"
|
||||
path="res://.godot/imported/resurrect-64-1x.png-19790abf6f86dfef7c9c0ca4ad1888b4.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://resurrect-64-1x.png"
|
||||
dest_files=["res://.godot/imported/resurrect-64-1x.png-19790abf6f86dfef7c9c0ca4ad1888b4.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=false
|
||||
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=1
|
Reference in New Issue
Block a user