made visual updates

This commit is contained in:
2025-06-23 16:55:07 +10:00
parent c6763afd62
commit 20cde0a778
41 changed files with 2522 additions and 188 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

View 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

View File

@ -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]

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 305 B

34
blk-nx64-1x.png.import Normal file
View 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

Binary file not shown.

BIN
crystal_enemy.glb Normal file

Binary file not shown.

1845
crystal_enemy.glb.import Normal file

File diff suppressed because it is too large Load Diff

BIN
crystal_enemy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 354 B

34
crystal_enemy.png.import Normal file
View 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
View 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
View 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)

View File

@ -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"]

View File

@ -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

View File

@ -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
View 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
View File

@ -0,0 +1 @@
uid://p1ugbcmjuwxg

50
jitter.gdshader Normal file
View 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
View File

@ -0,0 +1 @@
uid://c5bffujq0l70k

BIN
lost-century-1x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 B

View 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
View File

@ -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
View File

@ -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
View 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
View File

@ -0,0 +1 @@
uid://dio8pftmnf0l0

75
pixeldither.gdshader Normal file
View 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
View File

@ -0,0 +1 @@
uid://diugvmtoos1ti

35
playstation.gdshader Normal file
View 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
View File

@ -0,0 +1 @@
uid://dsn7gkhdg1xbb

View File

@ -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
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 B

View 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