Compare commits

..

3 Commits

Author SHA1 Message Date
Pal
35a625f636 merge 2026-02-03 21:06:28 -08:00
Pal
d5de5f7379 player anim changes 2026-02-03 21:05:20 -08:00
Pal
4a2d131276 Boss floor changes minor 2026-02-03 19:54:05 -08:00
5 changed files with 7041 additions and 6873 deletions

View File

@@ -1,9 +1,10 @@
[gd_scene load_steps=79 format=4 uid="uid://jnplnfouybo8"] [gd_scene load_steps=134 format=4 uid="uid://jnplnfouybo8"]
[ext_resource type="Script" uid="uid://tqyybt313web" path="res://src/map/dungeon/code/BossRoomA.cs" id="1_0h3lb"] [ext_resource type="Script" uid="uid://tqyybt313web" path="res://src/map/dungeon/code/BossRoomA.cs" id="1_0h3lb"]
[ext_resource type="Texture2D" uid="uid://clc5f6yyc7sdw" path="res://src/map/assets/Jomon Bells/BELL ANIMATIONS_concrete_0003_color_1k.png" id="2_lqw6r"] [ext_resource type="Texture2D" uid="uid://clc5f6yyc7sdw" path="res://src/map/assets/Jomon Bells/BELL ANIMATIONS_concrete_0003_color_1k.png" id="2_lqw6r"]
[ext_resource type="PackedScene" uid="uid://j7xsk4fv6f4q" path="res://src/map/dungeon/models/Special Floors & Rooms/Boss Floor A/15_A1_BOSS FLOOR A_VER.2.glb" id="2_r3w6s"] [ext_resource type="PackedScene" uid="uid://j7xsk4fv6f4q" path="res://src/map/dungeon/models/Special Floors & Rooms/Boss Floor A/15_A1_BOSS FLOOR A_VER.2.glb" id="2_r3w6s"]
[ext_resource type="PackedScene" uid="uid://btkyaimv28kjk" path="res://src/map/dungeon/special collision models/BOSS LEVEL 1 Collision.glb" id="3_gshnr"] [ext_resource type="PackedScene" uid="uid://btkyaimv28kjk" path="res://src/map/dungeon/special collision models/BOSS LEVEL 1 Collision.glb" id="3_gshnr"]
[ext_resource type="PackedScene" uid="uid://cxwyge2s1yswu" path="res://src/map/Placeables/A1-Socket.tscn" id="3_hjlh5"]
[ext_resource type="Texture2D" uid="uid://dipyrtjclqae1" path="res://src/map/assets/Jomon Bells/BELL ANIMATIONS_COLUMN.jpg" id="3_ucaw1"] [ext_resource type="Texture2D" uid="uid://dipyrtjclqae1" path="res://src/map/assets/Jomon Bells/BELL ANIMATIONS_COLUMN.jpg" id="3_ucaw1"]
[ext_resource type="Texture2D" uid="uid://d1xdvf8awh4bi" path="res://src/map/assets/Jomon Bells/BELL ANIMATIONS_CHAIN_TEX.png" id="4_i4jo4"] [ext_resource type="Texture2D" uid="uid://d1xdvf8awh4bi" path="res://src/map/assets/Jomon Bells/BELL ANIMATIONS_CHAIN_TEX.png" id="4_i4jo4"]
[ext_resource type="Texture2D" uid="uid://d3e37dca0j8r4" path="res://src/map/dungeon/models/Special Floors & Rooms/Boss Floor A/15_A1_BOSS FLOOR A_VER_CEILING_1.jpg" id="11_1hwdv"] [ext_resource type="Texture2D" uid="uid://d3e37dca0j8r4" path="res://src/map/dungeon/models/Special Floors & Rooms/Boss Floor A/15_A1_BOSS FLOOR A_VER_CEILING_1.jpg" id="11_1hwdv"]
@@ -13,6 +14,9 @@
[ext_resource type="Texture2D" uid="uid://q0t7xbu3i7ji" path="res://src/map/dungeon/models/Area 1/Antechamber/antechamberfix_COLUMN3.jpg" id="17_hjlh5"] [ext_resource type="Texture2D" uid="uid://q0t7xbu3i7ji" path="res://src/map/dungeon/models/Area 1/Antechamber/antechamberfix_COLUMN3.jpg" id="17_hjlh5"]
[ext_resource type="Texture2D" uid="uid://n23prpei1vj5" path="res://src/map/dungeon/models/Area 1/Antechamber/antechamberfix_COLUM6N.png" id="18_55jke"] [ext_resource type="Texture2D" uid="uid://n23prpei1vj5" path="res://src/map/dungeon/models/Area 1/Antechamber/antechamberfix_COLUM6N.png" id="18_55jke"]
[ext_resource type="PackedScene" uid="uid://cn13lho2so7sr" path="res://src/map/Placeables/Stele E.tscn" id="19_g5dtd"] [ext_resource type="PackedScene" uid="uid://cn13lho2so7sr" path="res://src/map/Placeables/Stele E.tscn" id="19_g5dtd"]
[ext_resource type="Texture2D" uid="uid://dw50ys561j8no" path="res://src/map/assets/DUST_1.png" id="21_uhy5k"]
[ext_resource type="Texture2D" uid="uid://b7kj1pxt7wx1g" path="res://src/vfx/World/BLUE_FLAME.png" id="22_khpud"]
[ext_resource type="AudioStream" uid="uid://b306wov6yfaan" path="res://src/audio/sfx/amb_flame_burning.ogg" id="23_fbuno"]
[ext_resource type="PackedScene" uid="uid://bvv5giqyrhtl1" path="res://src/enemy/enemy_types/15. ox_face/OxFaceStatue.tscn" id="26_futcf"] [ext_resource type="PackedScene" uid="uid://bvv5giqyrhtl1" path="res://src/enemy/enemy_types/15. ox_face/OxFaceStatue.tscn" id="26_futcf"]
[ext_resource type="PackedScene" uid="uid://6dnsw37d1uw4" path="res://src/enemy/enemy_types/15. ox_face/OxFace.tscn" id="27_g6y6v"] [ext_resource type="PackedScene" uid="uid://6dnsw37d1uw4" path="res://src/enemy/enemy_types/15. ox_face/OxFace.tscn" id="27_g6y6v"]
[ext_resource type="Shader" uid="uid://dr68ani6ouefm" path="res://src/map/map shaders/B1 Cloud Roll.gdshader" id="30_lmjp4"] [ext_resource type="Shader" uid="uid://dr68ani6ouefm" path="res://src/map/map shaders/B1 Cloud Roll.gdshader" id="30_lmjp4"]
@@ -23,8 +27,15 @@
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_qckvl"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_qckvl"]
resource_name = "Material.018" resource_name = "Material.018"
cull_mode = 2 cull_mode = 2
albedo_color = Color(0.69789, 1, 0.797429, 1)
albedo_texture = ExtResource("2_lqw6r") albedo_texture = ExtResource("2_lqw6r")
texture_filter = 2 metallic = 0.28
metallic_specular = 0.74
roughness = 0.85
emission = Color(1, 1, 1, 1)
emission_energy_multiplier = 0.0
ao_light_affect = 0.01
texture_filter = 1
[sub_resource type="ArrayMesh" id="ArrayMesh_k62tt"] [sub_resource type="ArrayMesh" id="ArrayMesh_k62tt"]
_surfaces = [{ _surfaces = [{
@@ -632,23 +643,23 @@ shader_parameter/night_bottom_color = Color(0.1, 0, 0.2, 1)
shader_parameter/horizon_color = Color(1, 0.501333, 0.12, 1) shader_parameter/horizon_color = Color(1, 0.501333, 0.12, 1)
shader_parameter/horizon_blur = 0.05 shader_parameter/horizon_blur = 0.05
shader_parameter/sun_color = Color(10, 8, 1, 1) shader_parameter/sun_color = Color(10, 8, 1, 1)
shader_parameter/sun_sunset_color = Color(0.998927, 0, 0.0816148, 1) shader_parameter/sun_sunset_color = Color(0.986849, 0.106258, 3.85046e-07, 1)
shader_parameter/sun_size = 0.238 shader_parameter/sun_size = 0.186
shader_parameter/sun_blur = 5.27 shader_parameter/sun_blur = 4.086
shader_parameter/moon_color = Color(1, 0.95, 0.7, 1) shader_parameter/moon_color = Color(1, 0.95, 0.7, 1)
shader_parameter/moon_size = 0.06 shader_parameter/moon_size = 0.06
shader_parameter/moon_blur = 0.1 shader_parameter/moon_blur = 0.1
shader_parameter/clouds_edge_color = Color(0, 0.92549, 0.996468, 1) shader_parameter/clouds_edge_color = Color(0, 0.92549, 0.996468, 1)
shader_parameter/clouds_top_color = Color(1, 1, 1, 1) shader_parameter/clouds_top_color = Color(1, 1, 1, 1)
shader_parameter/clouds_middle_color = Color(0.92, 0.92, 0.98, 1) shader_parameter/clouds_middle_color = Color(0.92, 0.92, 0.98, 1)
shader_parameter/clouds_bottom_color = Color(0.83, 0.83, 0.94, 1) shader_parameter/clouds_bottom_color = Color(0.676182, 0.763121, 0.797244, 1)
shader_parameter/clouds_speed = 8.06 shader_parameter/clouds_speed = 7.89
shader_parameter/clouds_direction = 0.2 shader_parameter/clouds_direction = -0.0236842
shader_parameter/clouds_scale = 2.34 shader_parameter/clouds_scale = 0.66
shader_parameter/clouds_cutoff = 0.37 shader_parameter/clouds_cutoff = 0.26
shader_parameter/clouds_fuzziness = 0.57 shader_parameter/clouds_fuzziness = 0.8
shader_parameter/clouds_weight = 0.0 shader_parameter/clouds_weight = 0.0
shader_parameter/clouds_blur = 0.04 shader_parameter/clouds_blur = 0.03
shader_parameter/stars_speed = 1.0 shader_parameter/stars_speed = 1.0
shader_parameter/overwritten_time = 0.0 shader_parameter/overwritten_time = 0.0
@@ -761,6 +772,418 @@ _surfaces = [{
blend_shape_mode = 0 blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_cg3hc") shadow_mesh = SubResource("ArrayMesh_cg3hc")
[sub_resource type="Curve" id="Curve_3rjuj"]
_limits = [-2.0, 2.0, 0.0, 1.0]
_data = [Vector2(0.00358423, 0.230769), 0.0, 0.0, 0, 0, Vector2(0.982079, -1.03846), 0.0, 0.0, 0, 0]
point_count = 2
[sub_resource type="CurveTexture" id="CurveTexture_xbcfg"]
curve = SubResource("Curve_3rjuj")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_nky7n"]
lifetime_randomness = 0.05
emission_shape = 3
emission_box_extents = Vector3(22.2, 22.505, 22)
angle_min = -245.3
angle_max = 417.9
orbit_velocity_min = -0.0269999
orbit_velocity_max = 0.0400001
orbit_velocity_curve = SubResource("CurveTexture_xbcfg")
gravity = Vector3(0, -0.07, 0)
scale_min = 0.0
scale_max = 0.0
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ecy5p"]
transparency = 1
cull_mode = 2
shading_mode = 0
albedo_color = Color(1, 1, 1, 0.0862745)
albedo_texture = ExtResource("21_uhy5k")
billboard_mode = 2
[sub_resource type="QuadMesh" id="QuadMesh_i6yjj"]
material = SubResource("StandardMaterial3D_ecy5p")
size = Vector2(0.1, 0.1)
subdivide_width = 1
subdivide_depth = 1
[sub_resource type="Animation" id="Animation_k6ywg"]
resource_name = "Flame Flicker"
length = 2.62501
loop_mode = 1
step = 0.0625
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 2.5625),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0, 41]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../Flame2:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 2.5625),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0, 41]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("OmniLight3D2:light_energy")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1, 1.125, 1.25, 1.375, 1.5, 1.625, 1.75, 1.875, 2, 2.125, 2.25, 2.375, 2.5),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 0,
"values": [6.436, 6.0, 6.9, 5.6, 6.2, 5.5, 6.0, 6.436, 6.0, 6.9, 5.6, 6.2, 5.5, 6.0, 6.436, 6.0, 6.9, 5.6, 6.2, 5.5, 6.0]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("../Flame2/OmniLight3D2:light_energy")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1, 1.125, 1.25, 1.375, 1.5, 1.625, 1.75, 1.875, 2, 2.125, 2.25, 2.375, 2.5),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 0,
"values": [6.436, 6.0, 6.9, 5.6, 6.2, 5.5, 6.0, 6.436, 6.0, 6.9, 5.6, 6.2, 5.5, 6.0, 6.436, 6.0, 6.9, 5.6, 6.2, 5.5, 6.0]
}
[sub_resource type="Animation" id="Animation_54fgm"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_ljhl3"]
_data = {
&"Flame Flicker": SubResource("Animation_k6ywg"),
&"RESET": SubResource("Animation_54fgm")
}
[sub_resource type="AtlasTexture" id="AtlasTexture_fa0yd"]
atlas = ExtResource("22_khpud")
region = Rect2(1024, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_xvxtm"]
atlas = ExtResource("22_khpud")
region = Rect2(1536, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_yckbp"]
atlas = ExtResource("22_khpud")
region = Rect2(2048, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_k3wb6"]
atlas = ExtResource("22_khpud")
region = Rect2(2560, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_lvx8f"]
atlas = ExtResource("22_khpud")
region = Rect2(3072, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_5jf3f"]
atlas = ExtResource("22_khpud")
region = Rect2(3584, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_yaek2"]
atlas = ExtResource("22_khpud")
region = Rect2(4096, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_m7ked"]
atlas = ExtResource("22_khpud")
region = Rect2(4608, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_tgauh"]
atlas = ExtResource("22_khpud")
region = Rect2(5120, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_23ip1"]
atlas = ExtResource("22_khpud")
region = Rect2(5632, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_xwq6u"]
atlas = ExtResource("22_khpud")
region = Rect2(6144, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_dvh5e"]
atlas = ExtResource("22_khpud")
region = Rect2(6656, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_oryp2"]
atlas = ExtResource("22_khpud")
region = Rect2(7168, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_vnvpj"]
atlas = ExtResource("22_khpud")
region = Rect2(7680, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_huh6d"]
atlas = ExtResource("22_khpud")
region = Rect2(8192, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_vwdtx"]
atlas = ExtResource("22_khpud")
region = Rect2(8704, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_wj4rl"]
atlas = ExtResource("22_khpud")
region = Rect2(9216, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_ufqel"]
atlas = ExtResource("22_khpud")
region = Rect2(9728, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_gm2xs"]
atlas = ExtResource("22_khpud")
region = Rect2(10240, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_6qdtc"]
atlas = ExtResource("22_khpud")
region = Rect2(10752, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_7doc0"]
atlas = ExtResource("22_khpud")
region = Rect2(11264, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_bastv"]
atlas = ExtResource("22_khpud")
region = Rect2(11776, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_7wx2a"]
atlas = ExtResource("22_khpud")
region = Rect2(12288, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_2oybq"]
atlas = ExtResource("22_khpud")
region = Rect2(12800, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_ajic6"]
atlas = ExtResource("22_khpud")
region = Rect2(13312, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_york4"]
atlas = ExtResource("22_khpud")
region = Rect2(13824, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_en15j"]
atlas = ExtResource("22_khpud")
region = Rect2(14336, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_18mqb"]
atlas = ExtResource("22_khpud")
region = Rect2(14848, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_2fevs"]
atlas = ExtResource("22_khpud")
region = Rect2(15360, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_r4nju"]
atlas = ExtResource("22_khpud")
region = Rect2(15872, 0, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_fia20"]
atlas = ExtResource("22_khpud")
region = Rect2(0, 502, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_nhfcs"]
atlas = ExtResource("22_khpud")
region = Rect2(512, 502, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_8btat"]
atlas = ExtResource("22_khpud")
region = Rect2(1024, 502, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_62cid"]
atlas = ExtResource("22_khpud")
region = Rect2(1536, 502, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_f43j4"]
atlas = ExtResource("22_khpud")
region = Rect2(2048, 502, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_8almt"]
atlas = ExtResource("22_khpud")
region = Rect2(2560, 502, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_8nqox"]
atlas = ExtResource("22_khpud")
region = Rect2(3072, 502, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_7fvd3"]
atlas = ExtResource("22_khpud")
region = Rect2(3584, 502, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_44yh0"]
atlas = ExtResource("22_khpud")
region = Rect2(4096, 502, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_76xwn"]
atlas = ExtResource("22_khpud")
region = Rect2(4608, 502, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_wep0j"]
atlas = ExtResource("22_khpud")
region = Rect2(5120, 502, 512, 502)
[sub_resource type="AtlasTexture" id="AtlasTexture_i6qdo"]
atlas = ExtResource("22_khpud")
region = Rect2(5632, 502, 512, 502)
[sub_resource type="SpriteFrames" id="SpriteFrames_ypixh"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_fa0yd")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_xvxtm")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_yckbp")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_k3wb6")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_lvx8f")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_5jf3f")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_yaek2")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_m7ked")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_tgauh")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_23ip1")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_xwq6u")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_dvh5e")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_oryp2")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_vnvpj")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_huh6d")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_vwdtx")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_wj4rl")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ufqel")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_gm2xs")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_6qdtc")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_7doc0")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_bastv")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_7wx2a")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_2oybq")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ajic6")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_york4")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_en15j")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_18mqb")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_2fevs")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_r4nju")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_fia20")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_nhfcs")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_8btat")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_62cid")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_f43j4")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_8almt")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_8nqox")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_7fvd3")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_44yh0")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_76xwn")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_wep0j")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_i6qdo")
}],
"loop": true,
"name": &"default",
"speed": 16.0
}]
[node name="Boss Floor A" type="Node3D"] [node name="Boss Floor A" type="Node3D"]
script = ExtResource("1_0h3lb") script = ExtResource("1_0h3lb")
@@ -769,8 +1192,8 @@ script = ExtResource("1_0h3lb")
[node name="15_A1_BOSS FLOOR A_VER_3" parent="Model" instance=ExtResource("2_r3w6s")] [node name="15_A1_BOSS FLOOR A_VER_3" parent="Model" instance=ExtResource("2_r3w6s")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -157.601, -16.1094, 21.8408) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -157.601, -16.1094, 21.8408)
[node name="LOCKED GATE" parent="Model/15_A1_BOSS FLOOR A_VER_3" index="0"] [node name="Socket" parent="Model/15_A1_BOSS FLOOR A_VER_3" instance=ExtResource("3_hjlh5")]
visible = false transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 12.6001, 13.3617, -4.17398)
[node name="sarco altar" parent="Model" instance=ExtResource("58_lqw6r")] [node name="sarco altar" parent="Model" instance=ExtResource("58_lqw6r")]
transform = Transform3D(0.565, 0, 0, 0, 0.565, 0, 0, 0, 0.565, -92.0811, -2.7728, 3.95434) transform = Transform3D(0.565, 0, 0, 0, 0.565, 0, 0, 0, 0.565, -92.0811, -2.7728, 3.95434)
@@ -876,6 +1299,7 @@ shape = SubResource("BoxShape3D_gshnr")
[node name="LOCKED GATE2" type="MeshInstance3D" parent="Collision/NavigationRegion3D/BossDoor"] [node name="LOCKED GATE2" type="MeshInstance3D" parent="Collision/NavigationRegion3D/BossDoor"]
transform = Transform3D(0.816274, 0, 0, 0, 1.99383, 0, 0, 0, 1.99383, -144.771, -0.74227, 17.6053) transform = Transform3D(0.816274, 0, 0, 0, 1.99383, 0, 0, 0, 1.99383, -144.771, -0.74227, 17.6053)
visible = false
mesh = SubResource("ArrayMesh_i5h1f") mesh = SubResource("ArrayMesh_i5h1f")
skeleton = NodePath("") skeleton = NodePath("")
@@ -1013,7 +1437,7 @@ transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -101.6
[node name="Outside Sun" type="DirectionalLight3D" parent="Lights"] [node name="Outside Sun" type="DirectionalLight3D" parent="Lights"]
transform = Transform3D(-0.892586, 0.182669, -0.412217, 0, 0.914254, 0.405142, 0.450878, 0.361624, -0.81605, 0, 0, 0) transform = Transform3D(-0.892586, 0.182669, -0.412217, 0, 0.914254, 0.405142, 0.450878, 0.361624, -0.81605, 0, 0, 0)
light_color = Color(1, 0.660652, 0.278384, 1) light_color = Color(1, 0.717333, 0.47, 1)
light_energy = 0.805 light_energy = 0.805
light_indirect_energy = 0.0 light_indirect_energy = 0.0
light_volumetric_fog_energy = 0.662 light_volumetric_fog_energy = 0.662
@@ -1080,6 +1504,10 @@ spot_attenuation = 0.32
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -157.591, 10.1268, 25.1817) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -157.591, 10.1268, 25.1817)
mesh = SubResource("BoxMesh_wm2sp") mesh = SubResource("BoxMesh_wm2sp")
[node name="MeshInstance3D3" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -292.504, 17.1742, 20.0457)
mesh = SubResource("BoxMesh_wm2sp")
[node name="MeshInstance3D2" type="MeshInstance3D" parent="."] [node name="MeshInstance3D2" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -32.1617, 4.95632, 25.1817) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -32.1617, 4.95632, 25.1817)
mesh = SubResource("BoxMesh_wm2sp") mesh = SubResource("BoxMesh_wm2sp")
@@ -1097,5 +1525,78 @@ skeleton = NodePath("")
[node name="SteleA" parent="." instance=ExtResource("19_g5dtd")] [node name="SteleA" parent="." instance=ExtResource("19_g5dtd")]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, -51.7632, -2.62564, 12.5236) transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, -51.7632, -2.62564, 12.5236)
[node name="Lights2" type="Node3D" parent="."]
transform = Transform3D(0.000244335, 0, 1, 0, 1, 0, -1, 0, 0.000244335, -252.95, 0, 17.599)
[node name="VFX" type="Node3D" parent="."]
transform = Transform3D(0.000244335, 0, 1, 0, 1, 0, -1, 0, 0.000244335, -252.95, 0, 17.599)
[node name="GPUParticles3D2" type="GPUParticles3D" parent="VFX"]
transform = Transform3D(0.464, 0, 0, 0, 0.227, 0, 0, 0, 0.462, -0.5361, 5.40841, 6.92556)
amount = 20
lifetime = 41.19
local_coords = true
process_material = SubResource("ParticleProcessMaterial_nky7n")
draw_pass_1 = SubResource("QuadMesh_i6yjj")
[node name="FogVolume" type="FogVolume" parent="VFX"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 20.4756, -12.6989)
size = Vector3(30.7642, 22.5825, 24.915)
[node name="AnimationPlayer" type="AnimationPlayer" parent="VFX"]
root_node = NodePath("../Flame1")
libraries = {
&"": SubResource("AnimationLibrary_ljhl3")
}
autoplay = "Flame Flicker"
[node name="Flame1" type="AnimatedSprite3D" parent="VFX"]
transform = Transform3D(0.387, 0, 0, 0, 0.28, 0, -2.91038e-11, 0, 0.28, -5.60455, 1.51387, 2.65553)
modulate = Color(0.693732, 0.869818, 0, 1)
billboard = 2
sprite_frames = SubResource("SpriteFrames_ypixh")
autoplay = "default"
[node name="FLAME1" type="AudioStreamPlayer3D" parent="VFX/Flame1"]
transform = Transform3D(1.62602, 0, 0, 0, 2.24719, 0, 0, 0, 2.24719, -0.237626, -1.0051, -0.623936)
stream = ExtResource("23_fbuno")
autoplay = true
max_distance = 25.0
bus = &"AMBIENT"
parameters/looping = true
[node name="OmniLight3D2" type="OmniLight3D" parent="VFX/Flame1"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.180455, -0.538921, -0.0176468)
light_color = Color(1.68458e-07, 0.522039, 0.285089, 1)
light_energy = 6.436
shadow_enabled = true
shadow_blur = 10.0
omni_range = 19.166
omni_attenuation = 1.106
[node name="Flame2" type="AnimatedSprite3D" parent="VFX"]
transform = Transform3D(0.38, 0, 0, 0, 0.275, 0, 0, 0, 0.275, 5.37493, 1.40263, 2.73187)
modulate = Color(0.617812, 0.873417, 3.85046e-07, 1)
billboard = 2
sprite_frames = SubResource("SpriteFrames_ypixh")
autoplay = "default"
[node name="FLAME2" type="AudioStreamPlayer3D" parent="VFX/Flame2"]
transform = Transform3D(1.62602, 0, 0, 0, 2.24719, 0, 0, 0, 2.24719, -0.237626, -1.0051, -0.623936)
stream = ExtResource("23_fbuno")
autoplay = true
max_distance = 25.0
bus = &"AMBIENT"
parameters/looping = true
[node name="OmniLight3D2" type="OmniLight3D" parent="VFX/Flame2"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.180455, -0.538921, -0.0176468)
light_color = Color(1.68458e-07, 0.522039, 0.285089, 1)
light_energy = 6.436
shadow_enabled = true
shadow_blur = 10.0
omni_range = 19.166
omni_attenuation = 1.106
[editable path="Model/15_A1_BOSS FLOOR A_VER_3"] [editable path="Model/15_A1_BOSS FLOOR A_VER_3"]
[editable path="Collision/NavigationRegion3D/BOSS LEVEL 1 Collision"] [editable path="Collision/NavigationRegion3D/BOSS LEVEL 1 Collision"]

View File

@@ -108,190 +108,189 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
public void Initialize() public void Initialize()
{ {
var container = new SimpleInjector.Container(); var container = new SimpleInjector.Container();
container.Register<IPlayerLogic, PlayerLogic>(Lifestyle.Singleton); container.Register<IPlayerLogic, PlayerLogic>(Lifestyle.Singleton);
PlayerLogic = container.GetInstance<IPlayerLogic>(); PlayerLogic = container.GetInstance<IPlayerLogic>();
PlayerLogic.Set(this as IPlayer); PlayerLogic.Set(this as IPlayer);
PlayerLogic.Set(Settings); PlayerLogic.Set(Settings);
Inventory = new Inventory(); Inventory = new Inventory();
HealthComponent = new HealthComponent(InitialHP); HealthComponent = new HealthComponent(InitialHP);
VTComponent = new VTComponent(InitialVT); VTComponent = new VTComponent(InitialVT);
AttackComponent = new AttackComponent(InitialAttack); AttackComponent = new AttackComponent(InitialAttack);
DefenseComponent = new DefenseComponent(InitialDefense); DefenseComponent = new DefenseComponent(InitialDefense);
ExperiencePointsComponent = new ExperiencePointsComponent(); ExperiencePointsComponent = new ExperiencePointsComponent();
LuckComponent = new LuckComponent(InitialLuck); LuckComponent = new LuckComponent(InitialLuck);
EquipmentComponent = new EquipmentComponent(); EquipmentComponent = new EquipmentComponent();
_itemReroller = new ItemReroller(ItemDatabase.Instance); _itemReroller = new ItemReroller(ItemDatabase.Instance);
Settings = new PlayerLogic.Settings() { RotationSpeed = RotationSpeed, MoveSpeed = MoveSpeed, Acceleration = Acceleration }; Settings = new PlayerLogic.Settings() { RotationSpeed = RotationSpeed, MoveSpeed = MoveSpeed, Acceleration = Acceleration };
PlayerBinding = PlayerLogic.Bind(); PlayerBinding = PlayerLogic.Bind();
PlayerBinding PlayerBinding
.Handle((in PlayerLogic.Output.ThrowItem output) => .Handle((in PlayerLogic.Output.ThrowItem output) =>
{ {
}) })
.Handle((in PlayerLogic.Output.Move output) => .Handle((in PlayerLogic.Output.Move output) =>
{ {
Move(output.delta); Move(output.delta);
}); });
PlayerLogic.Start(); PlayerLogic.Start();
this.Provide(); this.Provide();
} }
public void ResetPlayerData() public void ResetPlayerData()
{ {
PlayerFXAnimations.Play("RESET"); PlayerFXAnimations.Play("RESET");
foreach (var item in Inventory.Items) foreach (var item in Inventory.Items)
Inventory.Remove(item); Inventory.Remove(item);
HealthComponent.Reset(); HealthComponent.Reset();
VTComponent.Reset(); VTComponent.Reset();
AttackComponent.Reset(); AttackComponent.Reset();
DefenseComponent.Reset(); DefenseComponent.Reset();
ExperiencePointsComponent.Reset(); ExperiencePointsComponent.Reset();
LuckComponent.Reset(); LuckComponent.Reset();
EquipmentComponent.Reset(); EquipmentComponent.Reset();
HealthTimer.Timeout += OnHealthTimerTimeout; HealthTimer.Timeout += OnHealthTimerTimeout;
} }
#region Initialization #region Initialization
public void OnReady() public void OnReady()
{ {
Hitbox.AreaEntered += Hitbox_AreaEntered; Hitbox.AreaEntered += Hitbox_AreaEntered;
CollisionDetector.AreaEntered += CollisionDetector_AreaEntered; CollisionDetector.AreaEntered += CollisionDetector_AreaEntered;
HealthComponent.HealthReachedZero += Die; HealthComponent.HealthReachedZero += Die;
PlayerFXAnimations.AnimationFinished += PlayerFXAnimations_AnimationFinished; PlayerFXAnimations.AnimationFinished += PlayerFXAnimations_AnimationFinished;
HealthTimer.WaitTime = _healthTimerWaitTime; HealthTimer.WaitTime = _healthTimerWaitTime;
SetProcessInput(false); SetProcessInput(false);
SetPhysicsProcess(false); SetPhysicsProcess(false);
} }
#endregion #endregion
public void Activate() public void Activate()
{ {
SetProcessInput(true); SetProcessInput(true);
SetPhysicsProcess(true); SetPhysicsProcess(true);
SetHealthTimerStatus(HealthTimerIsActive); SetHealthTimerStatus(HealthTimerIsActive);
} }
public void Deactivate() public void Deactivate()
{ {
Velocity = Vector3.Zero; Velocity = Vector3.Zero;
SetProcessInput(false); SetProcessInput(false);
SetPhysicsProcess(false); SetPhysicsProcess(false);
SetHealthTimerStatus(false); SetHealthTimerStatus(false);
} }
public void SetHealthTimerStatus(bool isActive) public void SetHealthTimerStatus(bool isActive)
{ {
if (isActive) if (isActive)
HealthTimer.Start(); HealthTimer.Start();
else else
HealthTimer.Stop(); HealthTimer.Stop();
} }
public void TeleportPlayer((Vector3 Rotation, Vector3 Position) newTransform) public void TeleportPlayer(Transform3D newTransform)
{ {
Position = newTransform.Position; Transform = newTransform;
Rotation = newTransform.Rotation;
} }
public void TakeDamage(AttackData damage) public void TakeDamage(AttackData damage)
{ {
_camera3D.AddShake(1.0f); _camera3D.AddShake(1.0f);
TakeDamageAnimationPlayer.Play("take_damage"); TakeDamageAnimationPlayer.Play("take_damage");
var damageReceived = DamageCalculator.CalculateDamage(damage, DefenseComponent.CurrentDefense.Value + EquipmentComponent.BonusDefense, EquipmentComponent.ElementalResistance); var damageReceived = DamageCalculator.CalculateDamage(damage, DefenseComponent.CurrentDefense.Value + EquipmentComponent.BonusDefense, EquipmentComponent.ElementalResistance);
HealthComponent.Damage(damageReceived); HealthComponent.Damage(damageReceived);
SfxDatabase.Instance.Play(SoundEffect.TakeDamage); SfxDatabase.Instance.Play(SoundEffect.TakeDamage);
} }
public void Knockback(float impulse) public void Knockback(float impulse)
{ {
_knockbackStrength = impulse; _knockbackStrength = impulse;
_knockbackDirection = GlobalBasis.Z.Normalized(); _knockbackDirection = GlobalBasis.Z.Normalized();
} }
public void LevelUp() public void LevelUp()
{ {
var rng = new RandomNumberGenerator(); var rng = new RandomNumberGenerator();
rng.Randomize(); rng.Randomize();
var hpIncrease = rng.RandiRange(3, 6); var hpIncrease = rng.RandiRange(3, 6);
HealthComponent.RaiseMaximumHP(hpIncrease); HealthComponent.RaiseMaximumHP(hpIncrease);
ExperiencePointsComponent.LevelUp(); ExperiencePointsComponent.LevelUp();
} }
public void Die() public void Die()
{ {
PlayerFXAnimations.Play("death"); PlayerFXAnimations.Play("death");
HealthTimer.WaitTime = _healthTimerWaitTime; HealthTimer.WaitTime = _healthTimerWaitTime;
HealthTimer.Timeout -= OnHealthTimerTimeout; HealthTimer.Timeout -= OnHealthTimerTimeout;
SetProcessInput(false); SetProcessInput(false);
SetPhysicsProcess(false); SetPhysicsProcess(false);
} }
public override void _Input(InputEvent @event) public override void _Input(InputEvent @event)
{ {
if (@event.IsActionPressed(GameInputs.Attack)) if (@event.IsActionPressed(GameInputs.Attack))
Attack(); Attack();
if (@event.IsActionPressed(GameInputs.Sprint)) if (@event.IsActionPressed(GameInputs.Sprint))
Settings.MoveSpeed *= 2; Settings.MoveSpeed *= 2;
if (@event.IsActionReleased(GameInputs.Sprint)) if (@event.IsActionReleased(GameInputs.Sprint))
Settings.MoveSpeed /= 2; Settings.MoveSpeed /= 2;
} }
public void PlayTestAnimation() public void PlayTestAnimation()
{ {
PlayerFXAnimations.Play("test_animation"); PlayerFXAnimations.Play("test_animation");
} }
public void OnPhysicsProcess(double delta) public void OnPhysicsProcess(double delta)
{ {
PlayerLogic.Input(new PlayerLogic.Input.PhysicsTick(delta)); PlayerLogic.Input(new PlayerLogic.Input.PhysicsTick(delta));
PlayerLogic.Input(new PlayerLogic.Input.Moved(GlobalPosition, GlobalTransform)); PlayerLogic.Input(new PlayerLogic.Input.Moved(GlobalPosition, GlobalTransform));
} }
public void Equip(EquipableItem equipable) public void Equip(EquipableItem equipable)
{ {
if (equipable.ItemTag == ItemTag.MysteryItem) if (equipable.ItemTag == ItemTag.MysteryItem)
{ {
var rerolledItem = _itemReroller.RerollItem(equipable, Inventory); var rerolledItem = _itemReroller.RerollItem(equipable, Inventory);
Equip(rerolledItem); Equip(rerolledItem);
return; return;
} }
HealthComponent.RaiseMaximumHP(equipable.BonusHP, false); HealthComponent.RaiseMaximumHP(equipable.BonusHP, false);
VTComponent.RaiseMaximumVT(equipable.BonusVT, false); VTComponent.RaiseMaximumVT(equipable.BonusVT, false);
EquipmentComponent.Equip(equipable); EquipmentComponent.Equip(equipable);
} }
public void Unequip(EquipableItem equipable) public void Unequip(EquipableItem equipable)
{ {
HealthComponent.SetMaximumHealth(HealthComponent.MaximumHP.Value - equipable.BonusHP); HealthComponent.SetMaximumHealth(HealthComponent.MaximumHP.Value - equipable.BonusHP);
VTComponent.SetMaximumVT(VTComponent.MaximumVT.Value - equipable.BonusVT); VTComponent.SetMaximumVT(VTComponent.MaximumVT.Value - equipable.BonusVT);
EquipmentComponent.Unequip(equipable); EquipmentComponent.Unequip(equipable);
} }
private static Vector3 GlobalInputVector private static Vector3 GlobalInputVector
{ {
get get
{ {
var rawInput = Input.GetVector(GameInputs.MoveLeft, GameInputs.MoveRight, GameInputs.MoveUp, GameInputs.MoveDown); var rawInput = Input.GetVector(GameInputs.MoveLeft, GameInputs.MoveRight, GameInputs.MoveUp, GameInputs.MoveDown);
var input = new Vector3 var input = new Vector3
{ {
X = rawInput.X, X = rawInput.X,
Z = rawInput.Y Z = rawInput.Y
}; };
return input with { Y = 0f }; return input with { Y = 0f };
} }
} }
private static float LeftStrafeInputVector => Input.GetActionStrength(GameInputs.StrafeLeft); private static float LeftStrafeInputVector => Input.GetActionStrength(GameInputs.StrafeLeft);
@@ -300,149 +299,149 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide<IPlayer>
private void Attack() private void Attack()
{ {
if (PlayerIsHittingGeometry()) if (PlayerIsHittingGeometry())
AnimationPlayer.Play("hit_wall"); AnimationPlayer.Play("hit_wall");
else if (!AnimationPlayer.IsPlaying()) else if (!AnimationPlayer.IsPlaying())
PlayAttackAnimation(); PlayAttackAnimation();
} }
private void ThrowItem() private void ThrowItem()
{ {
var itemScene = GD.Load<PackedScene>("res://src/items/throwable/ThrowableItem.tscn"); var itemScene = GD.Load<PackedScene>("res://src/items/throwable/ThrowableItem.tscn");
var throwItem = itemScene.Instantiate<ThrowableItem>(); var throwItem = itemScene.Instantiate<ThrowableItem>();
GetTree().Root.AddChildEx(throwItem); GetTree().Root.AddChildEx(throwItem);
throwItem.GlobalPosition = CurrentPosition + new Vector3(0, 3.5f, 0); throwItem.GlobalPosition = CurrentPosition + new Vector3(0, 3.5f, 0);
throwItem.GlobalRotation = GlobalRotation; throwItem.GlobalRotation = GlobalRotation;
} }
private void PlayAttackAnimation() private void PlayAttackAnimation()
{ {
SfxDatabase.Instance.Play(((Weapon)EquipmentComponent.EquippedWeapon.Value).SoundEffect); SfxDatabase.Instance.Play(((Weapon)EquipmentComponent.EquippedWeapon.Value).SoundEffect);
var attackSpeed = ((Weapon)EquipmentComponent.EquippedWeapon.Value).AttackSpeed; var attackSpeed = ((Weapon)EquipmentComponent.EquippedWeapon.Value).AttackSpeed;
AnimationPlayer.SetSpeedScale((float)attackSpeed); AnimationPlayer.SetSpeedScale((float)attackSpeed);
AnimationPlayer.Play("attack"); AnimationPlayer.Play("attack");
} }
private void PlayerFXAnimations_AnimationFinished(StringName animName) private void PlayerFXAnimations_AnimationFinished(StringName animName)
{ {
if (animName == "death") if (animName == "death")
PlayerDied?.Invoke(); PlayerDied?.Invoke();
} }
private void OnExitTree() private void OnExitTree()
{ {
PlayerLogic.Stop(); PlayerLogic.Stop();
PlayerBinding.Dispose(); PlayerBinding.Dispose();
Hitbox.AreaEntered -= Hitbox_AreaEntered; Hitbox.AreaEntered -= Hitbox_AreaEntered;
CollisionDetector.AreaEntered -= CollisionDetector_AreaEntered; CollisionDetector.AreaEntered -= CollisionDetector_AreaEntered;
HealthComponent.HealthReachedZero -= Die; HealthComponent.HealthReachedZero -= Die;
HealthTimer.Timeout -= OnHealthTimerTimeout; HealthTimer.Timeout -= OnHealthTimerTimeout;
} }
private void Move(float delta) private void Move(float delta)
{ {
var rawInput = GlobalInputVector; var rawInput = GlobalInputVector;
var strafeLeftInput = LeftStrafeInputVector; var strafeLeftInput = LeftStrafeInputVector;
var strafeRightInput = RightStrafeInputVector; var strafeRightInput = RightStrafeInputVector;
var transform = Transform; var transform = Transform;
transform.Basis = new Basis(Vector3.Up, Settings.RotationSpeed * -rawInput.X * delta) * transform.Basis; transform.Basis = new Basis(Vector3.Up, Settings.RotationSpeed * -rawInput.X * delta) * transform.Basis;
var moveDirection = new Vector3(strafeRightInput - strafeLeftInput, 0, rawInput.Z).Normalized(); var moveDirection = new Vector3(strafeRightInput - strafeLeftInput, 0, rawInput.Z).Normalized();
var velocity = Basis * moveDirection * Settings.MoveSpeed * Settings.Acceleration; var velocity = Basis * moveDirection * Settings.MoveSpeed * Settings.Acceleration;
_knockbackStrength *= 0.9f; _knockbackStrength *= 0.9f;
Transform = Transform with { Basis = transform.Basis }; Transform = Transform with { Basis = transform.Basis };
Velocity = velocity + (_knockbackDirection * _knockbackStrength); Velocity = velocity + (_knockbackDirection * _knockbackStrength);
if (!WalkSFX.Playing && !Velocity.IsZeroApprox()) if (!WalkSFX.Playing && !Velocity.IsZeroApprox())
WalkSFX.Play(); WalkSFX.Play();
else if (Velocity.IsZeroApprox()) else if (Velocity.IsZeroApprox())
WalkSFX.Stop(); WalkSFX.Stop();
MoveAndSlide(); MoveAndSlide();
} }
private void OnPlayerPositionUpdated(Vector3 globalPosition) => GlobalPosition = globalPosition; private void OnPlayerPositionUpdated(Vector3 globalPosition) => GlobalPosition = globalPosition;
private void OnHealthTimerTimeout() private void OnHealthTimerTimeout()
{ {
if (VTComponent.CurrentVT.Value > 0) if (VTComponent.CurrentVT.Value > 0)
{ {
if (((Accessory)EquipmentComponent.EquippedAccessory.Value).AccessoryTag == AccessoryTag.HalfVTConsumption) if (((Accessory)EquipmentComponent.EquippedAccessory.Value).AccessoryTag == AccessoryTag.HalfVTConsumption)
_healthTimerActive = !_healthTimerActive; _healthTimerActive = !_healthTimerActive;
HealthComponent.Heal(1); HealthComponent.Heal(1);
if (_healthTimerActive) if (_healthTimerActive)
VTComponent.Reduce(1); VTComponent.Reduce(1);
} }
else else
HealthComponent.Damage(1); HealthComponent.Damage(1);
} }
private void Hitbox_AreaEntered(Area3D area) private void Hitbox_AreaEntered(Area3D area)
{ {
var target = area.GetOwner(); var target = area.GetOwner();
if (target is IEnemy enemy) if (target is IEnemy enemy)
HitEnemy(enemy); HitEnemy(enemy);
} }
private void HitEnemy(IEnemy enemy) private void HitEnemy(IEnemy enemy)
{ {
var ignoreElementalResistance = (EquipmentComponent.EquippedWeapon.Value as Weapon).WeaponTag == WeaponTag.IgnoreAffinity; var ignoreElementalResistance = (EquipmentComponent.EquippedWeapon.Value as Weapon).WeaponTag == WeaponTag.IgnoreAffinity;
var ignoreDefense = (EquipmentComponent.EquippedWeapon.Value as Weapon).WeaponTag == WeaponTag.IgnoreDefense; var ignoreDefense = (EquipmentComponent.EquippedWeapon.Value as Weapon).WeaponTag == WeaponTag.IgnoreDefense;
var isCriticalHit = BattleExtensions.IsCriticalHit(LuckComponent.Luck.Value + EquipmentComponent.BonusLuck); var isCriticalHit = BattleExtensions.IsCriticalHit(LuckComponent.Luck.Value + EquipmentComponent.BonusLuck);
var totalDamage = AttackComponent.CurrentAttack.Value + EquipmentComponent.BonusAttack; var totalDamage = AttackComponent.CurrentAttack.Value + EquipmentComponent.BonusAttack;
var element = (EquipmentComponent.EquippedWeapon.Value as Weapon).WeaponElement; var element = (EquipmentComponent.EquippedWeapon.Value as Weapon).WeaponElement;
if (isCriticalHit) if (isCriticalHit)
{ {
totalDamage += (int)(totalDamage * 0.5f); totalDamage += (int)(totalDamage * 0.5f);
SfxDatabase.Instance.Play(SoundEffect.Crit); SfxDatabase.Instance.Play(SoundEffect.Crit);
} }
var baseAttack = new AttackData(totalDamage, element, ignoreDefense, ignoreElementalResistance); var baseAttack = new AttackData(totalDamage, element, ignoreDefense, ignoreElementalResistance);
var damageDealt = DamageCalculator.CalculateDamage(baseAttack, enemy.DefenseComponent.CurrentDefense.Value, enemy.ElementalResistanceSet); var damageDealt = DamageCalculator.CalculateDamage(baseAttack, enemy.DefenseComponent.CurrentDefense.Value, enemy.ElementalResistanceSet);
enemy.HealthComponent.Damage(damageDealt); enemy.HealthComponent.Damage(damageDealt);
if (((Weapon)EquipmentComponent.EquippedWeapon.Value).WeaponTag == WeaponTag.Knockback && enemy is IKnockbackable knockbackable) if (((Weapon)EquipmentComponent.EquippedWeapon.Value).WeaponTag == WeaponTag.Knockback && enemy is IKnockbackable knockbackable)
knockbackable.Knockback(0.3f, -CurrentBasis.Z.Normalized()); knockbackable.Knockback(0.3f, -CurrentBasis.Z.Normalized());
if (((Weapon)EquipmentComponent.EquippedWeapon.Value).WeaponTag == WeaponTag.SelfDamage) if (((Weapon)EquipmentComponent.EquippedWeapon.Value).WeaponTag == WeaponTag.SelfDamage)
HealthComponent.Damage(5); HealthComponent.Damage(5);
} }
private void CollisionDetector_AreaEntered(Area3D area) private void CollisionDetector_AreaEntered(Area3D area)
{ {
if (area.GetParent() is InventoryItem inventoryItem) if (area.GetParent() is InventoryItem inventoryItem)
{ {
var isAdded = Inventory.PickUpItem(inventoryItem); var isAdded = Inventory.PickUpItem(inventoryItem);
if (isAdded) if (isAdded)
inventoryItem.QueueFree(); inventoryItem.QueueFree();
} }
if (area.GetParent() is DroppedItem droppedItem) if (area.GetParent() is DroppedItem droppedItem)
{ {
var isAdded = Inventory.PickUpItem(droppedItem.Item); var isAdded = Inventory.PickUpItem(droppedItem.Item);
if (isAdded) if (isAdded)
droppedItem.QueueFree(); droppedItem.QueueFree();
} }
if (area.GetParent() is ThrownItem thrownItem) if (area.GetParent() is ThrownItem thrownItem)
{ {
var isAdded = Inventory.PickUpItem(thrownItem.ItemThatIsThrown); var isAdded = Inventory.PickUpItem(thrownItem.ItemThatIsThrown);
if (isAdded) if (isAdded)
thrownItem.QueueFree(); thrownItem.QueueFree();
} }
if (area.GetParent() is Restorative restorative) if (area.GetParent() is Restorative restorative)
{ {
restorative.QueueFree(); restorative.QueueFree();
} }
} }
private bool PlayerIsHittingGeometry() private bool PlayerIsHittingGeometry()
{ {
var collisions = WallCheck.GetCollidingBodies(); var collisions = WallCheck.GetCollidingBodies();
return collisions.Count > 0; return collisions.Count > 0;
} }
private void WallCheck_BodyEntered(Node body) private void WallCheck_BodyEntered(Node body)
{ {
GD.Print("Hit wall"); GD.Print("Hit wall");
AnimationPlayer.Stop(); AnimationPlayer.Stop();
} }
} }

File diff suppressed because it is too large Load Diff