Attempt to bring in other branch

This commit is contained in:
2024-09-18 16:51:27 -07:00
1389 changed files with 64824 additions and 2665 deletions

View File

@@ -28,8 +28,6 @@ namespace GameJamDungeon
[Node] public ISubViewport GameWindow { get; set; } = default!;
[Node] public IAnimationPlayer AnimationPlayer { get; set; } = default!;
public void Initialize()
{
Instantiator = new Instantiator(GetTree());
@@ -38,17 +36,10 @@ namespace GameJamDungeon
AppLogic.Set(AppRepo);
Menu.NewGame += OnNewGame;
Menu.Quit += OnQuit;
AppRepo.ShowLoadingScreen += AppRepo_ShowLoadingScreen;
AnimationPlayer.AnimationFinished += AnimationPlayer_AnimationFinished;
Input.MouseMode = Input.MouseModeEnum.Captured;
this.Provide();
}
private void AppRepo_ShowLoadingScreen()
{
AnimationPlayer.Play("wait_and_load");
}
public void OnReady()
{
AppBinding = AppLogic.Bind();
@@ -57,7 +48,6 @@ namespace GameJamDungeon
.Handle((in AppLogic.Output.ShowLoadingScreen _) =>
{
Menu.Hide();
AnimationPlayer.Play("load");
})
.Handle((in AppLogic.Output.SetupGameScene _) =>
{
@@ -76,12 +66,6 @@ namespace GameJamDungeon
AppLogic.Start();
}
private void AnimationPlayer_AnimationFinished(StringName animName)
{
Instantiator.SceneTree.Paused = false;
//AppLogic.Input(new AppLogic.Input.LoadGameFinished());
}
public void OnNewGame() => AppLogic.Input(new AppLogic.Input.NewGame());
public void OnQuit() => AppLogic.Input(new AppLogic.Input.QuitGame());

140
src/app/App.gdshader Normal file
View File

@@ -0,0 +1,140 @@
shader_type canvas_item;
// Handles the resolution changes, color depth, and dithering
group_uniforms resolution_and_colors;
uniform bool change_color_depth = false;
uniform int target_color_depth : hint_range(1, 8) = 5;
uniform bool dithering = false;
uniform bool scale_resolution = false;
uniform int target_resolution_scale = 3;
// Handles the LUTish recoloring
group_uniforms gradient_recoloring;
uniform bool enable_recolor = false;
uniform sampler2D to_gradient: hint_default_black;
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];
}
vec3 rgb2hsv(vec3 rgb) { //Converts RGB values to HSV
float r = rgb.r;
float g = rgb.g;
float b = rgb.b;
float cmax = max(r,max(g,b));
float cmin = min(r,min(g,b));
float delta = cmax - cmin;
float h = 0.f; //hue
if (delta > 0.f){
if (cmax == r){
h = (g-b)/delta;
h = mod(h,6.f);
} else if (cmax == g){
h = ((b - r) / delta) + 2.f;
} else {
h = ((r-g)/delta) + 4.f;
}
h = h * 60.f;
}
float s = 0.f; //saturation
if (cmax > 0.f){
s = delta / cmax;
}
return vec3(h,s,cmax); // Keep original alpha value
}
vec3 hsv2rgb(vec3 hsv) { //Converts HSV values to RGB
float h = hsv.r;
float s = hsv.g;
float v = hsv.b;
float c = v * s;
//X = C × (1 - |(H / 60°) mod 2 - 1|)
float x = h / 60.f;
x = mod(x,2.f);
x = abs(x - 1.f);
x = c * (1.f - x);
float m = v - c;
vec3 rgb = vec3(0.f,0.f,0.f);
if (h < 60.f) {
rgb = vec3(c,x,0.f);
} else if (h < 120.f){
rgb = vec3(x,c,0.f);
} else if (h < 180.f){
rgb = vec3(0.f,c,x);
} else if (h < 240.f){
rgb = vec3(0.f,x,c);
} else if (h < 300.f){
rgb = vec3(x,0.f,c);
} else if (h < 360.f){
rgb = vec3(c,0.f,x);
}
rgb[0] = rgb[0] + m;
rgb[1] = rgb[1] + m;
rgb[2] = rgb[2] + m;
return rgb;
}
void fragment() {
ivec2 uv;
vec3 color;
if(scale_resolution){
uv = ivec2(FRAGCOORD.xy / float(target_resolution_scale));
color = texelFetch(TEXTURE, uv * target_resolution_scale, 0).rgb;
} else {
uv = ivec2(FRAGCOORD.xy);
color = texelFetch(TEXTURE, uv, 0).rgb;
}
if(enable_recolor){
vec3 hsv = rgb2hsv(color);
float color_pos = (hsv.x / 360.0);
vec3 new_color = texture(to_gradient, vec2((color_pos), 0.5)).rgb;
vec3 new_hsv = rgb2hsv(new_color);
hsv.x = new_hsv.x;
vec3 final_rgb = hsv2rgb(hsv);
color.rgb = final_rgb;
}
// Convert from [0.0, 1.0] range to [0, 255] range
ivec3 c = ivec3(round(color * 255.0));
// Apply the dithering pattern
if (dithering) {
c += ivec3(dithering_pattern(uv));
}
vec3 final_color;
if(change_color_depth){
// Truncate from 8 bits to color_depth bits
c >>= (8 - target_color_depth);
final_color = vec3(c) / float(1 << target_color_depth);
} else {
final_color = vec3(c) / float(1 << 8);
}
// Convert back to [0.0, 1.0] range
COLOR.rgb = final_color;
}

View File

@@ -1,86 +1,8 @@
[gd_scene load_steps=7 format=3 uid="uid://cagfc5ridmteu"]
[gd_scene load_steps=3 format=3 uid="uid://cagfc5ridmteu"]
[ext_resource type="Script" path="res://src/app/App.cs" id="1_rt73h"]
[ext_resource type="PackedScene" uid="uid://rfvnddfqufho" path="res://src/menu/Menu.tscn" id="2_kvwo1"]
[sub_resource type="Animation" id="Animation_mbxap"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("LoadScreen:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("SubViewportContainer:visible")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
[sub_resource type="Animation" id="Animation_fa8xf"]
resource_name = "load"
length = 5.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("LoadScreen:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 1.93333, 4.03333, 5),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 0,
"values": [Color(0, 0, 0, 0), Color(0, 0, 0, 1), Color(0, 0, 0, 1), Color(0, 0, 0, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("SubViewportContainer:visible")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 4.03333),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
[sub_resource type="Animation" id="Animation_bvk81"]
resource_name = "wait_and_load"
length = 5.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("LoadScreen:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(1.03333, 1.93333, 4.03333, 5),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 0,
"values": [Color(0, 0, 0, 0), Color(0, 0, 0, 1), Color(0, 0, 0, 1), Color(0, 0, 0, 0)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_vkd35"]
_data = {
"RESET": SubResource("Animation_mbxap"),
"load": SubResource("Animation_fa8xf"),
"wait_and_load": SubResource("Animation_bvk81")
}
[node name="App" type="CanvasLayer"]
process_mode = 3
script = ExtResource("1_rt73h")
@@ -91,30 +13,15 @@ anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
stretch = true
[node name="GameWindow" type="SubViewport" parent="SubViewportContainer"]
unique_name_in_owner = true
transparent_bg = true
handle_input_locally = false
audio_listener_enable_2d = true
audio_listener_enable_3d = true
size = Vector2i(1920, 1080)
render_target_update_mode = 0
size = Vector2i(1280, 960)
render_target_update_mode = 4
[node name="Menu" parent="." instance=ExtResource("2_kvwo1")]
unique_name_in_owner = true
[node name="LoadScreen" type="ColorRect" parent="."]
modulate = Color(1, 1, 1, 0)
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0.235294, 0.235294, 0.784314, 1)
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
unique_name_in_owner = true
libraries = {
"": SubResource("AnimationLibrary_vkd35")
}

View File

@@ -1,25 +1,25 @@
@startuml AppLogic
state "AppLogic State" as GameJam2024Practice_AppLogic_State {
state "InGame" as GameJam2024Practice_AppLogic_State_InGame
state "MainMenu" as GameJam2024Practice_AppLogic_State_MainMenu
state "SplashScreen" as GameJam2024Practice_AppLogic_State_SplashScreen
state "LeavingMenu" as GameJam2024Practice_AppLogic_State_LeavingMenu
state "AppLogic State" as GameJamDungeon_AppLogic_State {
state "SetupGameScene" as GameJamDungeon_AppLogic_State_SetupGameScene
state "InGame" as GameJamDungeon_AppLogic_State_InGame
state "LoadingScreen" as GameJamDungeon_AppLogic_State_LoadingScreen
state "MainMenu" as GameJamDungeon_AppLogic_State_MainMenu
}
GameJam2024Practice_AppLogic_State_InGame --> GameJam2024Practice_AppLogic_State_MainMenu : GameOver
GameJam2024Practice_AppLogic_State_LeavingMenu --> GameJam2024Practice_AppLogic_State_InGame : FadeOutFinished
GameJam2024Practice_AppLogic_State_MainMenu --> GameJam2024Practice_AppLogic_State_LeavingMenu : NewGame
GameJam2024Practice_AppLogic_State_MainMenu --> GameJam2024Practice_AppLogic_State_MainMenu : QuitGame
GameJam2024Practice_AppLogic_State_SplashScreen --> GameJam2024Practice_AppLogic_State_MainMenu : FadeOutFinished
GameJamDungeon_AppLogic_State_InGame --> GameJamDungeon_AppLogic_State_MainMenu : GameOver
GameJamDungeon_AppLogic_State_LoadingScreen --> GameJamDungeon_AppLogic_State_InGame : LoadGameFinished
GameJamDungeon_AppLogic_State_MainMenu --> GameJamDungeon_AppLogic_State_LoadingScreen : NewGame
GameJamDungeon_AppLogic_State_MainMenu --> GameJamDungeon_AppLogic_State_MainMenu : QuitGame
GameJamDungeon_AppLogic_State_SetupGameScene --> GameJamDungeon_AppLogic_State_InGame : LoadGameFinished
GameJam2024Practice_AppLogic_State_InGame : OnEnter → ShowGame
GameJam2024Practice_AppLogic_State_InGame : OnExit → HideGame
GameJam2024Practice_AppLogic_State_InGame : OnGameOver → RemoveExistingGame
GameJam2024Practice_AppLogic_State_LeavingMenu : OnEnter → FadeToBlack
GameJam2024Practice_AppLogic_State_MainMenu : OnEnter → SetupGameScene, ShowMainMenu
GameJam2024Practice_AppLogic_State_MainMenu : OnQuitGame → ExitGame
GameJam2024Practice_AppLogic_State_SplashScreen : OnEnter → ShowSplashScreen
GameJam2024Practice_AppLogic_State_SplashScreen : OnSplashScreenSkipped() → HideSplashScreen
GameJamDungeon_AppLogic_State_InGame : OnEnter → ShowGame
GameJamDungeon_AppLogic_State_InGame : OnExit → HideGame
GameJamDungeon_AppLogic_State_InGame : OnGameOver → RemoveExistingGame
GameJamDungeon_AppLogic_State_LoadingScreen : OnEnter → ShowLoadingScreen
GameJamDungeon_AppLogic_State_MainMenu : OnEnter → ShowMainMenu
GameJamDungeon_AppLogic_State_MainMenu : OnNewGame → SetupGameScene
GameJamDungeon_AppLogic_State_MainMenu : OnQuitGame → ExitGame
GameJamDungeon_AppLogic_State_SetupGameScene : OnEnter → SetupGameScene, ShowGame
[*] --> GameJam2024Practice_AppLogic_State_SplashScreen
[*] --> GameJamDungeon_AppLogic_State_SetupGameScene
@enduml

View File

@@ -0,0 +1,58 @@
namespace GameJamDungeon;
using Chickensoft.GodotNodeInterfaces;
using Godot;
public interface IDimmableAudioStreamPlayer : IAudioStreamPlayer
{
/// <summary>Fade this dimmable audio stream track in.</summary>
public void FadeIn();
/// <summary>Fade this dimmable audio stream track out.</summary>
public void FadeOut();
}
public partial class DimmableAudioStreamPlayer :
AudioStreamPlayer, IDimmableAudioStreamPlayer
{
#region Constants
// -60 to -80 is considered inaudible for decibels.
public const float VOLUME_DB_INAUDIBLE = -80f;
public const double FADE_DURATION = 3d; // seconds
#endregion Constants
public ITween? FadeTween { get; set; }
public float InitialVolumeDb;
public override void _Ready()
{
InitialVolumeDb = VolumeDb;
VolumeDb = VOLUME_DB_INAUDIBLE;
}
public void FadeIn()
{
SetupFade(InitialVolumeDb, Tween.EaseType.Out);
Play();
}
public void FadeOut()
{
SetupFade(VOLUME_DB_INAUDIBLE, Tween.EaseType.In);
FadeTween!.TweenCallback(Callable.From(Stop));
}
public void SetupFade(float volumeDb, Tween.EaseType ease)
{
FadeTween?.Kill();
FadeTween = GodotInterfaces.Adapt<ITween>(CreateTween());
FadeTween.TweenProperty(
this,
"volume_db",
volumeDb,
FADE_DURATION
).SetTrans(Tween.TransitionType.Circ).SetEase(ease);
}
}

130
src/audio/InGameAudio.cs Normal file
View File

@@ -0,0 +1,130 @@
using Chickensoft.AutoInject;
using Chickensoft.GodotNodeInterfaces;
using Chickensoft.Introspection;
using Godot;
namespace GameJamDungeon;
[Meta(typeof(IAutoNode))]
public partial class InGameAudio : Node
{
public override void _Notification(int what) => this.Notify(what);
[Dependency] public IAppRepo AppRepo => this.DependOn<IAppRepo>();
[Dependency] public IGameRepo GameRepo => this.DependOn<IGameRepo>();
[Dependency] public IGameEventDepot GameEventDepot => this.DependOn<IGameEventDepot>();
#region BGM Nodes
[Node] public IDimmableAudioStreamPlayer MenuBgm { get; set; } = default!;
[Node] public IDimmableAudioStreamPlayer OverworldBgm { get; set; } = default!;
[Node] public IDimmableAudioStreamPlayer DungeonThemeABgm { get; set; } = default!;
[Node] public IDimmableAudioStreamPlayer DungeonThemeBBgm { get; set; } = default!;
[Node] public IDimmableAudioStreamPlayer DungeonThemeCBgm { get; set; } = default!;
#endregion
#region SFX Nodes
[Node] public IAudioStreamPlayer PlayerAttackSFX { get; set; } = default!;
[Node] public IAudioStreamPlayer MenuScrollSFX { get; set; } = default!;
[Node] public IAudioStreamPlayer EquipSFX { get; set; } = default!;
[Node] public IAudioStreamPlayer MenuBackSFX { get; set; } = default!;
[Node] public IAudioStreamPlayer InventorySortedSFX { get; set; } = default!;
[Node] public IAudioStreamPlayer HealingItemSFX { get; set; } = default!;
[Node] public IAudioStreamPlayer TeleportSFX { get; set; } = default!;
#endregion
public IInGameAudioLogic InGameAudioLogic { get; set; } = default!;
public InGameAudioLogic.IBinding InGameAudioBinding { get; set; } = default!;
public void Setup()
{
InGameAudioLogic = new InGameAudioLogic();
}
public void OnResolved()
{
InGameAudioLogic.Set(AppRepo);
InGameAudioLogic.Set(GameRepo);
InGameAudioLogic.Set(GameEventDepot);
InGameAudioBinding = InGameAudioLogic.Bind();
InGameAudioBinding
.Handle((in InGameAudioLogic.Output.PlayOverworldMusic _) => StartOverworldMusic())
.Handle((in InGameAudioLogic.Output.PlayDungeonThemeAMusic _) => StartDungeonThemeA())
.Handle((in InGameAudioLogic.Output.PlayMenuScrollSound _) => PlayMenuScrollSound())
.Handle((in InGameAudioLogic.Output.PlayEquipSound _) => PlayEquipSound())
.Handle((in InGameAudioLogic.Output.PlayMenuBackSound _) => PlayMenuBackSound())
.Handle((in InGameAudioLogic.Output.PlayInventorySortedSound _) => PlayInventorySortedSound())
.Handle((in InGameAudioLogic.Output.PlayHealingItemSound _) => PlayHealingItemSound())
.Handle((in InGameAudioLogic.Output.PlayTeleportSound _) => PlayTeleportSound());
InGameAudioLogic.Start();
}
public void OnExitTree()
{
InGameAudioLogic.Stop();
InGameAudioBinding.Dispose();
}
private void StartOverworldMusic()
{
OverworldBgm.Stop();
OverworldBgm.FadeIn();
}
private void StartDungeonThemeA()
{
OverworldBgm.FadeOut();
DungeonThemeABgm.Stop();
DungeonThemeABgm.FadeIn();
}
private void PlayMenuScrollSound()
{
MenuScrollSFX.Stop();
MenuScrollSFX.Play();
}
private void PlayEquipSound()
{
EquipSFX.Stop();
EquipSFX.Play();
}
private void PlayMenuBackSound()
{
MenuBackSFX.Stop();
MenuBackSFX.Play();
}
private void PlayInventorySortedSound()
{
InventorySortedSFX.Stop();
InventorySortedSFX.Play();
}
private void PlayHealingItemSound()
{
HealingItemSFX.Stop();
HealingItemSFX.Play();
}
private void PlayTeleportSound()
{
TeleportSFX.Stop();
TeleportSFX.Play();
}
}

View File

@@ -0,0 +1,93 @@
[gd_scene load_steps=13 format=3 uid="uid://b16ejcwanod72"]
[ext_resource type="Script" path="res://src/audio/InGameAudio.cs" id="1_gpmcr"]
[ext_resource type="AudioStream" uid="uid://dfu0fksb6slhx" path="res://src/audio/music/droney.mp3" id="2_8hfyr"]
[ext_resource type="Script" path="res://src/audio/DimmableAudioStreamPlayer.cs" id="2_857rw"]
[ext_resource type="AudioStream" uid="uid://d2jrktp06xsba" path="res://src/audio/music/crossing-the-gate.mp3" id="3_wbmd6"]
[ext_resource type="AudioStream" uid="uid://dn2e2hqujlia1" path="res://src/audio/music/tar-winds.mp3" id="4_surnl"]
[ext_resource type="AudioStream" uid="uid://t3g04u722f2k" path="res://src/audio/music/useless immune system-1.mp3" id="6_agr3r"]
[ext_resource type="AudioStream" uid="uid://dor0in0x2fg48" path="res://src/audio/sfx/TempFFVII/menu-move.ogg" id="7_777nl"]
[ext_resource type="AudioStream" uid="uid://r1tryiit38i8" path="res://src/audio/sfx/TempFFVII/menu-back.ogg" id="8_1xcgo"]
[ext_resource type="AudioStream" uid="uid://bjj61s8q2gwb8" path="res://src/audio/sfx/TempFFVII/junction.ogg" id="8_kwybb"]
[ext_resource type="AudioStream" uid="uid://myx4s8lmarc2" path="res://src/audio/sfx/TempFFVII/something-earned.ogg" id="10_3lcw5"]
[ext_resource type="AudioStream" uid="uid://dci08kmwsu6k1" path="res://src/audio/sfx/TempFFVII/teleport.ogg" id="11_offhc"]
[ext_resource type="AudioStream" uid="uid://d3sn7c614uj2n" path="res://src/audio/sfx/TempFFVII/sort.ogg" id="12_wprjr"]
[node name="InGameAudio" type="Node"]
process_mode = 3
script = ExtResource("1_gpmcr")
[node name="MenuBgm" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource("2_8hfyr")
parameters/looping = true
script = ExtResource("2_857rw")
[node name="OverworldBgm" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource("3_wbmd6")
volume_db = -15.0
parameters/looping = true
script = ExtResource("2_857rw")
[node name="DungeonThemeABgm" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource("4_surnl")
volume_db = -15.0
parameters/looping = true
script = ExtResource("2_857rw")
[node name="DungeonThemeBBgm" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource("6_agr3r")
volume_db = -15.0
parameters/looping = true
script = ExtResource("2_857rw")
[node name="DungeonThemeCBgm" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
volume_db = -15.0
script = ExtResource("2_857rw")
[node name="Title_Bgm" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
volume_db = -15.0
script = ExtResource("2_857rw")
[node name="PlayerAttackSFX" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
[node name="MenuScrollSFX" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource("7_777nl")
volume_db = -10.0
[node name="MenuBackSFX" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource("8_1xcgo")
volume_db = -10.0
[node name="EquipSFX" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource("8_kwybb")
volume_db = -10.0
[node name="HealSFX" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource("10_3lcw5")
volume_db = -10.0
[node name="TeleportSFX" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource("11_offhc")
volume_db = -18.0
[node name="InventorySortedSFX" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource("12_wprjr")
volume_db = -15.0
[node name="HealingItemSFX" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource("10_3lcw5")
volume_db = -15.0

Binary file not shown.

View File

@@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://d2jrktp06xsba"
path="res://.godot/imported/crossing-the-gate.mp3-f062dfcb3f59739ce7e55970f8091d25.mp3str"
[deps]
source_file="res://src/audio/music/crossing-the-gate.mp3"
dest_files=["res://.godot/imported/crossing-the-gate.mp3-f062dfcb3f59739ce7e55970f8091d25.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

BIN
src/audio/music/droney.mp3 Normal file

Binary file not shown.

View File

@@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://dfu0fksb6slhx"
path="res://.godot/imported/droney.mp3-a35fe85a5df08f09cd4cf965e60dc611.mp3str"
[deps]
source_file="res://src/audio/music/droney.mp3"
dest_files=["res://.godot/imported/droney.mp3-a35fe85a5df08f09cd4cf965e60dc611.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

View File

@@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://dn2e2hqujlia1"
path="res://.godot/imported/tar-winds.mp3-7ac6ab80e2c96dfbcd5e5c27c1154ff2.mp3str"
[deps]
source_file="res://src/audio/music/tar-winds.mp3"
dest_files=["res://.godot/imported/tar-winds.mp3-7ac6ab80e2c96dfbcd5e5c27c1154ff2.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

View File

@@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://t3g04u722f2k"
path="res://.godot/imported/useless immune system-1.mp3-e40a7d02f05bda566c0eac2b33f080a0.mp3str"
[deps]
source_file="res://src/audio/music/useless immune system-1.mp3"
dest_files=["res://.godot/imported/useless immune system-1.mp3-e40a7d02f05bda566c0eac2b33f080a0.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

View File

@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://6002a12ecfo5"
path="res://.godot/imported/useless immune system.wav-90ff2c5c12784f54b1b15c7a7e4603b8.sample"
[deps]
source_file="res://src/audio/music/useless immune system.wav"
dest_files=["res://.godot/imported/useless immune system.wav-90ff2c5c12784f54b1b15c7a7e4603b8.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0

View File

@@ -2,13 +2,12 @@
importer="wav"
type="AudioStreamWAV"
uid="uid://d2pubs2jbnkn5"
path="res://.godot/imported/swish-7.wav-68bc23f9c7120de3e54b25a21082a686.sample"
uid="uid://t28qhjuibv3f"
valid=false
[deps]
source_file="res://src/sfx/swish-7.wav"
dest_files=["res://.godot/imported/swish-7.wav-68bc23f9c7120de3e54b25a21082a686.sample"]
source_file="res://src/audio/sfx/TempFFVII/Equip.wav"
[params]

Binary file not shown.

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://bjj61s8q2gwb8"
path="res://.godot/imported/junction.ogg-f4350086a08e048d3008edcdc25abf96.oggvorbisstr"
[deps]
source_file="res://src/audio/sfx/TempFFVII/junction.ogg"
dest_files=["res://.godot/imported/junction.ogg-f4350086a08e048d3008edcdc25abf96.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://r1tryiit38i8"
path="res://.godot/imported/menu-back.ogg-3ec385c1a9cfaaa1be4ba85197708f0c.oggvorbisstr"
[deps]
source_file="res://src/audio/sfx/TempFFVII/menu-back.ogg"
dest_files=["res://.godot/imported/menu-back.ogg-3ec385c1a9cfaaa1be4ba85197708f0c.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://dor0in0x2fg48"
path="res://.godot/imported/menu-move.ogg-d71b0989e00dd1d4488a72c7dde3d41d.oggvorbisstr"
[deps]
source_file="res://src/audio/sfx/TempFFVII/menu-move.ogg"
dest_files=["res://.godot/imported/menu-move.ogg-d71b0989e00dd1d4488a72c7dde3d41d.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

View File

@@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://tce7m18vkgao"
path="res://.godot/imported/menu.wav-3931712b8a8483f269018c4a880368b2.sample"
[deps]
source_file="res://src/audio/sfx/TempFFVII/menu.wav"
dest_files=["res://.godot/imported/menu.wav-3931712b8a8483f269018c4a880368b2.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=0

Binary file not shown.

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://myx4s8lmarc2"
path="res://.godot/imported/something-earned.ogg-150627e4deb45db30e8dd2f98ddcc5a8.oggvorbisstr"
[deps]
source_file="res://src/audio/sfx/TempFFVII/something-earned.ogg"
dest_files=["res://.godot/imported/something-earned.ogg-150627e4deb45db30e8dd2f98ddcc5a8.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://d3sn7c614uj2n"
path="res://.godot/imported/sort.ogg-cb2a2c4769c8e6574221a3c313e75bcf.oggvorbisstr"
[deps]
source_file="res://src/audio/sfx/TempFFVII/sort.ogg"
dest_files=["res://.godot/imported/sort.ogg-cb2a2c4769c8e6574221a3c313e75bcf.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

View File

@@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://dci08kmwsu6k1"
path="res://.godot/imported/teleport.ogg-9024f7b675b201a391dee183da020b1d.oggvorbisstr"
[deps]
source_file="res://src/audio/sfx/TempFFVII/teleport.ogg"
dest_files=["res://.godot/imported/teleport.ogg-9024f7b675b201a391dee183da020b1d.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

View File

@@ -0,0 +1,34 @@
namespace GameJamDungeon
{
public partial class InGameAudioLogic
{
public static class Output
{
#region BGM
public readonly record struct PlayOverworldMusic;
public readonly record struct PlayDungeonThemeAMusic;
#endregion
#region SFX
public readonly record struct PlayPlayerAttackSound;
public readonly record struct PlayMenuScrollSound;
public readonly record struct PlayEquipSound;
public readonly record struct PlayInventorySortedSound;
public readonly record struct PlayMenuBackSound;
public readonly record struct PlayHealingItemSound;
public readonly record struct PlayTeleportSound;
#endregion
public readonly record struct PlayGameMusic;
public readonly record struct StopGameMusic;
}
}
}

View File

@@ -0,0 +1,13 @@
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
using System;
namespace GameJamDungeon;
public partial class InGameAudioLogic
{
[Meta]
public partial record State : StateLogic<State>
{
}
}

View File

@@ -0,0 +1,13 @@
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
namespace GameJamDungeon;
public interface IInGameAudioLogic : ILogicBlock<InGameAudioLogic.State>;
[Meta]
[LogicBlock(typeof(State))]
public partial class InGameAudioLogic :
LogicBlock<InGameAudioLogic.State>, IInGameAudioLogic
{
public override Transition GetInitialState() => To<Enabled>();
}

View File

@@ -0,0 +1,12 @@
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
namespace GameJamDungeon;
public partial class InGameAudioLogic
{
[Meta]
public partial record Disabled : State
{
}
}

View File

@@ -0,0 +1,59 @@
using Chickensoft.Introspection;
using Chickensoft.LogicBlocks;
using System;
namespace GameJamDungeon;
public partial class InGameAudioLogic
{
[Meta]
public partial record Enabled : State
{
public Enabled()
{
OnAttach(() =>
{
OnOverworldEntered();
var gameEventDepot = Get<IGameEventDepot>();
gameEventDepot.OverworldEntered += OnOverworldEntered;
gameEventDepot.DungeonAThemeAreaEntered += OnDungeonAThemeEntered;
gameEventDepot.MenuScrolled += OnMenuScrolled;
gameEventDepot.MenuBackedOut += OnMenuBackedOut;
gameEventDepot.EquippedItem += OnEquippedItem;
gameEventDepot.InventorySorted += OnInventorySorted;
gameEventDepot.HealingItemConsumed += OnHealingItemConsumed;
gameEventDepot.RestorativePickedUp += OnRestorativePickedUp;
gameEventDepot.TeleportEntered += OnTeleportEntered;
});
OnDetach(() =>
{
var gameEventDepot = Get<IGameEventDepot>();
gameEventDepot.OverworldEntered -= OnOverworldEntered;
gameEventDepot.DungeonAThemeAreaEntered -= OnDungeonAThemeEntered;
gameEventDepot.MenuScrolled -= OnMenuScrolled;
gameEventDepot.MenuBackedOut -= OnMenuBackedOut;
gameEventDepot.EquippedItem -= OnEquippedItem;
gameEventDepot.InventorySorted -= OnInventorySorted;
gameEventDepot.TeleportEntered -= OnTeleportEntered;
});
}
private void OnRestorativePickedUp(Restorative restorative) => Output(new Output.PlayHealingItemSound());
private void OnMenuBackedOut() => Output(new Output.PlayMenuBackSound());
private void OnHealingItemConsumed(ConsumableItemStats stats) => Output(new Output.PlayHealingItemSound());
private void OnInventorySorted() => Output(new Output.PlayInventorySortedSound());
private void OnEquippedItem() => Output(new Output.PlayEquipSound());
private void OnOverworldEntered() => Output(new Output.PlayOverworldMusic());
private void OnDungeonAThemeEntered() => Output(new Output.PlayDungeonThemeAMusic());
private void OnMenuScrolled() => Output(new Output.PlayMenuScrollSound());
private void OnTeleportEntered() => Output(new Output.PlayTeleportSound());
}
}

12
src/dialog/Dialog.tres Normal file
View File

@@ -0,0 +1,12 @@
[gd_resource type="Resource" script_class="DialogueResource" load_steps=2 format=3 uid="uid://dlbsw423e12au"]
[ext_resource type="Script" path="res://addons/dialogue_manager/dialogue_resource.gd" id="1_p1wx7"]
[resource]
script = ExtResource("1_p1wx7")
using_states = PackedStringArray()
titles = {}
character_names = PackedStringArray()
first_title = ""
lines = {}
raw_text = ""

12
src/dialog/Dialog.tscn Normal file
View File

@@ -0,0 +1,12 @@
[gd_scene load_steps=2 format=3 uid="uid://kt5fg0it26cf"]
[ext_resource type="Script" path="res://addons/dialogue_manager/dialogue_label.gd" id="1_bkcfu"]
[node name="Dialog" type="RichTextLabel"]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_bkcfu")
skip_pause_at_abbreviations = PackedStringArray("Mr", "Mrs", "Ms", "Dr", "etc", "eg", "ex")

View File

@@ -0,0 +1,3 @@
~ start
Hi...
=> END

View File

@@ -0,0 +1,15 @@
[remap]
importer="dialogue_manager_compiler_12"
type="Resource"
uid="uid://lao0opxww3ib"
path="res://.godot/imported/Dialogue.dialogue-176033575bc12c347010f3a30b2e302a.tres"
[deps]
source_file="res://src/dialog/Dialogue.dialogue"
dest_files=["res://.godot/imported/Dialogue.dialogue-176033575bc12c347010f3a30b2e302a.tres"]
[params]
defaults=true

View File

@@ -0,0 +1,3 @@
[gd_resource type="AnimationNodeStateMachinePlayback" format=3 uid="uid://5olovmdoiwt3"]
[resource]

View File

@@ -5,8 +5,8 @@
[node name="CollisionDetector" type="Area3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.500351, 0)
disable_mode = 2
collision_layer = 16
collision_mask = 16
collision_layer = 18
collision_mask = 18
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.633259, 0)

11
src/enemy/DamageHit.tres Normal file
View File

@@ -0,0 +1,11 @@
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://hbmd7rft6ejc"]
[ext_resource type="Shader" path="res://src/vfx/shaders/DamageHit.gdshader" id="1_kqs86"]
[resource]
resource_local_to_scene = true
shader = ExtResource("1_kqs86")
shader_parameter/shock_color = Color(1, 0, 0, 1)
shader_parameter/amplitude = 30.0
shader_parameter/progress = -1.0
shader_parameter/frequecy = 10.0

View File

@@ -3,30 +3,26 @@ using Chickensoft.Collections;
using Chickensoft.GodotNodeInterfaces;
using Chickensoft.Introspection;
using Godot;
using System;
using System.Linq;
namespace GameJamDungeon;
public interface IEnemy : ICharacterBody3D
public interface IEnemy : IRigidBody3D
{
public IEnemyLogic EnemyLogic { get; }
public AutoProp<double> CurrentHP { get; set; }
public EnemyStatInfo EnemyStatInfo { get; set; }
public EnemyStatResource EnemyStatResource { get; set; }
public NavigationAgent3D NavAgent { get; set; }
public Area3D LineOfSight { get; set; }
public AnimationPlayer AnimationPlayer { get; set; }
public Timer AttackTimer { get; set; }
}
[Meta(typeof(IAutoNode))]
public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
public partial class Enemy : RigidBody3D, IEnemy, IProvide<IEnemyLogic>
{
public override void _Notification(int what) => this.Notify(what);
@@ -38,8 +34,10 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
[Dependency] IGameRepo GameRepo => this.DependOn<IGameRepo>();
[Dependency] IGameEventDepot GameEventDepot => this.DependOn<IGameEventDepot>();
[Export]
public EnemyStatInfo EnemyStatInfo { get; set; } = default!;
public EnemyStatResource EnemyStatResource { get; set; } = default!;
public static PackedScene CollisionDetectorScene => GD.Load<PackedScene>("res://src/enemy/CollisionDetector.tscn");
@@ -55,67 +53,73 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
[Node] public Timer AttackTimer { get; set; } = default!;
[Node] public AnimationPlayer AnimationPlayer { get; set; } = default!;
[Node] public AnimatedSprite2D AnimatedSprite { get; set; } = default!;
[Node] public RayCast3D Raycast { get; set; } = default!;
[Node] public AnimationPlayer AnimationPlayer { get; set; } = default!;
[Node] public AnimationTree AnimationTree { get; set; } = default!;
[Node] public IHitbox Hitbox { get; set; } = default!;
private const string IDLE_FORWARD = "idle_front_walk";
private const string IDLE_LEFT = "idle_left_walk";
private const string IDLE_BACK = "idle_back_walk";
private const string ATTACK_FORWARD = "attack";
private float _knockbackStrength = 0.0f;
private Vector3 _knockbackDirection = Vector3.Zero;
public void Setup()
{
EnemyLogic = new EnemyLogic();
EnemyLogic.Set(EnemyStatInfo);
EnemyLogic.Set(EnemyStatResource);
EnemyLogic.Set(this as IEnemy);
EnemyLogic.Set(GameRepo);
AnimationTree.AnimationFinished += AnimationTree_AnimationFinished;
AnimationTree.Get("parameters/playback").As<AnimationNodeStateMachinePlayback>().Start(IDLE_FORWARD);
}
public void Initialize()
private void AnimationTree_AnimationFinished(StringName animName)
{
CurrentHP = new AutoProp<double>(EnemyStatInfo.MaximumHP);
CurrentHP.Sync += OnHPChanged;
LineOfSight.BodyEntered += LineOfSight_BodyEntered;
PatrolTimer.Timeout += OnPatrolTimeout;
AttackTimer.Timeout += OnAttackTimeout;
var rng = new RandomNumberGenerator();
rng.Randomize();
PatrolTimer.WaitTime = rng.RandfRange(7.0f, 15.0f);
if (animName == "attack")
AnimationTree.Get("parameters/playback").As<AnimationNodeStateMachinePlayback>().Travel(IDLE_FORWARD);
}
private void OnPatrolTimeout()
private void DeathAnimationPlayer_AnimationFinished(StringName animName)
{
var rng = new RandomNumberGenerator();
rng.Randomize();
var randomizedSpot = new Vector3(rng.RandfRange(-3.0f, 3.0f), 0, rng.RandfRange(-3.0f, 3.0f));
EnemyLogic.Input(new EnemyLogic.Input.PatrolToRandomSpot(GlobalPosition + randomizedSpot));
PatrolTimer.WaitTime = rng.RandfRange(7.0f, 15.0f);
GameEventDepot.OnEnemyDefeated(GlobalPosition, EnemyStatResource);
QueueFree();
}
private void OnAttackTimeout()
public void OnReady()
{
if (GlobalPosition.DistanceTo(GameRepo.PlayerGlobalPosition.Value) > 2.5f)
return;
var rng = new RandomNumberGenerator();
rng.Randomize();
EnemyLogic.Input(new EnemyLogic.Input.AttackTimer());
AttackTimer.WaitTime = rng.RandfRange(2f, 3.0f);
SetPhysicsProcess(true);
CollisionDetector = CollisionDetectorScene.Instantiate<Area3D>();
CollisionDetector.AreaEntered += OnPlayerHitboxEntered;
AddChild(CollisionDetector);
Hitbox.AreaEntered += Hitbox_AreaEntered;
}
private void LineOfSight_BodyEntered(Node3D body)
private void Hitbox_AreaEntered(Area3D area)
{
var overlappingBodies = LineOfSight.GetOverlappingBodies();
foreach (var overlap in overlappingBodies)
if (area.GetParent().GetParent() is IPlayer player)
{
Raycast.LookAt(GameRepo.PlayerGlobalPosition.Value, Vector3.Up);
Raycast.ForceRaycastUpdate();
if (Raycast.IsColliding())
{
var collider = Raycast.GetCollider();
if (collider is IPlayer player)
{
Raycast.DebugShapeCustomColor = Color.FromString("Purple", Colors.Purple);
EnemyLogic.Input(new EnemyLogic.Input.Alerted());
}
}
var isCriticalHit = false;
var rng = new RandomNumberGenerator();
rng.Randomize();
var roll = rng.Randf();
if (roll <= EnemyStatResource.Luck)
isCriticalHit = true;
var damage = DamageCalculator.CalculateEnemyDamage(
GameRepo.PlayerData.CurrentDefense.Value + GameRepo.PlayerData.BonusDefense,
EnemyStatResource,
GameRepo.PlayerData.Inventory.EquippedArmor.Value.ArmorStats,
isCriticalHit);
GameRepo.PlayerData.SetCurrentHP(GameRepo.PlayerData.CurrentHP.Value - Mathf.RoundToInt(damage));
GD.Print($"Player hit for {Mathf.Abs(damage)} damage.");
}
}
@@ -126,45 +130,73 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
EnemyBinding
.Handle((in EnemyLogic.Output.MovementComputed output) =>
{
var spriteNode = GetChildren().OfType<AnimatedSprite3D>();
if (spriteNode.Any())
PlayMovementAnimations(spriteNode.Single(), Velocity);
MoveAndCollide(output.Velocity);
})
.Handle((in EnemyLogic.Output.Die output) =>
{
QueueFree();
RotateEnemy(-GameRepo.PlayerGlobalTransform.Value.Basis.Z);
_knockbackStrength = _knockbackStrength * 0.9f;
MoveAndCollide(output.LinearVelocity + (_knockbackDirection * _knockbackStrength));
})
.Handle((in EnemyLogic.Output.HitByPlayer output) =>
{
LoadShader("res://src/vfx/shaders/DamageHit.gdshader");
var tweener = GetTree().CreateTween();
tweener.TweenMethod(Callable.From((float x) => SetShaderValue(x)), 0.0f, 1.0f, 1.0f);
// TODO: Make this an event to notify game that player hit someone
if (GameRepo.PlayerData.Inventory.EquippedWeapon.Value.WeaponStats.WeaponTags.Contains(WeaponTag.SelfDamage))
GameRepo.PlayerData.SetCurrentHP(GameRepo.PlayerData.CurrentHP.Value - 5);
if (GameRepo.PlayerData.Inventory.EquippedWeapon.Value.WeaponStats.WeaponTags.Contains(WeaponTag.Knockback))
{
_knockbackDirection = -GameRepo.PlayerGlobalTransform.Value.Basis.Z.Normalized();
_knockbackStrength = 0.3f;
}
})
.Handle((in EnemyLogic.Output.Attack _) =>
{
AnimationTree.Get("parameters/playback").As<AnimationNodeStateMachinePlayback>().Travel("attack");
})
.Handle((in EnemyLogic.Output.Defeated output) =>
{
LoadShader("res://src/vfx/shaders/PixelMelt.gdshader");
var tweener = GetTree().CreateTween();
tweener.TweenMethod(Callable.From((float x) => SetShaderValue(x)), 0.0f, 1.0f, 0.8f);
GameEventDepot.OnEnemyDefeated(GlobalPosition, EnemyStatResource);
tweener.TweenCallback(Callable.From(QueueFree));
});
this.Provide();
EnemyLogic.Start();
CurrentHP = new AutoProp<double>(EnemyStatResource.MaximumHP);
CurrentHP.Sync += OnHPChanged;
LineOfSight.BodyEntered += LineOfSight_BodyEntered;
PatrolTimer.Timeout += OnPatrolTimeout;
AttackTimer.Timeout += OnAttackTimeout;
var rng = new RandomNumberGenerator();
rng.Randomize();
PatrolTimer.WaitTime = rng.RandfRange(7.0f, 15.0f);
}
public void PlayMovementAnimations(AnimatedSprite3D sprite, Vector3 velocity)
private void LoadShader(string shaderPath)
{
if (sprite != null && velocity.Length() > 0.2f)
{
var lookdir = (GlobalPosition).Normalized();
var sign = lookdir.Sign();
if (lookdir.MaxAxisIndex() == Vector3.Axis.X && sign.X == 1)
sprite.Play("walk_right");
if (lookdir.MaxAxisIndex() == Vector3.Axis.X && sign.X == -1)
sprite.Play("walk_left");
if (lookdir.MaxAxisIndex() == Vector3.Axis.Z && sign.Z == 1)
sprite.Play("walk_forward");
if (lookdir.MaxAxisIndex() == Vector3.Axis.Z && sign.Z == -1)
sprite.Play("walk_backward");
}
if (sprite != null && velocity.IsZeroApprox())
sprite.Stop();
var shader = GD.Load<Shader>(shaderPath);
AnimatedSprite.Material = new ShaderMaterial();
var shaderMaterial = (ShaderMaterial)AnimatedSprite.Material;
shaderMaterial.Shader = shader;
}
public void OnExitTree()
{
EnemyLogic.Stop();
EnemyBinding.Dispose();
}
private void OnPatrolTimeout()
{
var rng = new RandomNumberGenerator();
rng.Randomize();
var randomizedSpot = new Vector3(rng.RandfRange(-7.0f, 7.0f), 0, rng.RandfRange(-7.0f, 7.0f));
EnemyLogic.Input(new EnemyLogic.Input.PatrolToRandomSpot(GlobalPosition + randomizedSpot));
PatrolTimer.WaitTime = rng.RandfRange(5.0f, 10.0f);
}
public void OnPhysicsProcess(double delta)
{
@@ -177,30 +209,88 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
{
if (CurrentHP.Value > 0)
{
var damage = DamageCalculator.CalculatePlayerDamage(hitBox.Damage, hitBox.GetParent<IPlayer>().PlayerStatInfo, EnemyStatInfo, GameRepo.EquippedWeapon);
var isCriticalHit = false;
var rng = new RandomNumberGenerator();
rng.Randomize();
var roll = rng.Randf();
if (roll <= GameRepo.PlayerData.Inventory.EquippedWeapon.Value.WeaponStats.Luck)
isCriticalHit = true;
var damage = DamageCalculator.CalculatePlayerDamage(GameRepo.PlayerData.CurrentAttack.Value + GameRepo.PlayerData.BonusAttack, EnemyStatResource, GameRepo.PlayerData.Inventory.EquippedWeapon.Value.WeaponStats, isCriticalHit);
GD.Print($"Enemy Hit for {damage} damage.");
EnemyLogic.Input(new EnemyLogic.Input.HitByPlayer(damage));
}
}
}
private void OnAttackTimeout()
{
if (GlobalPosition.DistanceTo(GameRepo.PlayerGlobalPosition.Value) > 2.5f)
return;
var rng = new RandomNumberGenerator();
rng.Randomize();
EnemyLogic.Input(new EnemyLogic.Input.AttackTimer());
AttackTimer.Stop();
AttackTimer.WaitTime = rng.RandfRange(2f, 5.0f);
AttackTimer.Start();
}
private void LineOfSight_BodyEntered(Node3D body)
{
var overlappingBodies = LineOfSight.GetOverlappingBodies();
foreach (var overlap in overlappingBodies)
{
if (Raycast.GlobalPosition != GameRepo.PlayerGlobalPosition.Value)
Raycast.LookAt(GameRepo.PlayerGlobalPosition.Value, Vector3.Up);
Raycast.ForceRaycastUpdate();
if (Raycast.IsColliding())
{
var collider = Raycast.GetCollider();
if (collider is IPlayer player)
{
Raycast.DebugShapeCustomColor = Color.FromString("Purple", Colors.Purple);
EnemyLogic.Input(new EnemyLogic.Input.Alerted());
}
}
}
}
private void RotateEnemy(Vector3 cameraDirection)
{
var rotateUpperThreshold = 0.85f;
var rotateLowerThreshold = 0.3f;
var enemyForwardDirection = GlobalTransform.Basis.Z;
var enemyLeftDirection = GlobalTransform.Basis.X;
var leftDotProduct = enemyLeftDirection.Dot(cameraDirection);
var forwardDotProduct = enemyForwardDirection.Dot(cameraDirection);
// Check if forward facing. If the dot product is -1, the enemy is facing the camera.
if (forwardDotProduct < -rotateUpperThreshold)
AnimationTree.Get("parameters/playback").As<AnimationNodeStateMachinePlayback>().Travel("idle_front_walk");
// Check if backward facing. If the dot product is 1, the enemy is facing the same direction as the camera.
else if (forwardDotProduct > rotateUpperThreshold)
AnimationTree.Get("parameters/playback").As<AnimationNodeStateMachinePlayback>().Travel("idle_back_walk");
else
{
// If the dot product of the perpendicular direction is positive (up to 1), the enemy is facing to the left (since it's mirrored).
AnimatedSprite.FlipH = leftDotProduct > 0;
// Check if side facing. If the dot product is close to zero in the positive or negative direction, its close to the threshold for turning.
if (Mathf.Abs(forwardDotProduct) < rotateLowerThreshold)
AnimationTree.Get("parameters/playback").As<AnimationNodeStateMachinePlayback>().Travel("idle_left_walk");
}
}
private void OnHPChanged(double newHP)
{
if (newHP <= 0)
EnemyLogic.Input(new EnemyLogic.Input.Killed());
EnemyLogic.Input(new EnemyLogic.Input.EnemyDefeated());
}
public void OnReady()
private void SetShaderValue(float shaderValue)
{
SetPhysicsProcess(true);
CollisionDetector = CollisionDetectorScene.Instantiate<Area3D>();
CollisionDetector.AreaEntered += OnPlayerHitboxEntered;
AddChild(CollisionDetector);
}
public void OnExitTree()
{
EnemyLogic.Stop();
EnemyBinding.Dispose();
var shaderMaterial = (ShaderMaterial)AnimatedSprite.Material;
shaderMaterial.SetShaderParameter("progress", shaderValue);
}
}

View File

@@ -1,9 +1,10 @@
[gd_scene load_steps=3 format=3 uid="uid://dbvr8ewajja6a"]
[gd_scene load_steps=4 format=3 uid="uid://dbvr8ewajja6a"]
[ext_resource type="Script" path="res://src/enemy/EnemyDatabase.cs" id="1_ywy58"]
[ext_resource type="PackedScene" uid="uid://dcgj5i52i76gj" path="res://src/enemy/enemy_types/floating_enemy/FloatingEnemy.tscn" id="2_8cbrh"]
[ext_resource type="PackedScene" uid="uid://b0gwivt7cw7nd" path="res://src/enemy/enemy_types/michael/Michael.tscn" id="2_tja3j"]
[ext_resource type="PackedScene" uid="uid://bksq62muhk3h5" path="res://src/enemy/enemy_types/sproingy/Sproingy.tscn" id="3_cpupr"]
[node name="EnemyDatabase" type="Node"]
script = ExtResource("1_ywy58")
EnemyList = Array[PackedScene]([ExtResource("2_8cbrh")])
SpawnRate = PackedFloat32Array(1)
EnemyList = Array[PackedScene]([ExtResource("2_tja3j"), ExtResource("3_cpupr")])
SpawnRate = PackedFloat32Array(0.5, 0.5)

View File

@@ -3,16 +3,28 @@
namespace GameJamDungeon
{
[GlobalClass]
public partial class EnemyStatInfo : Resource, ICharacterStats
public partial class EnemyStatResource : Resource
{
[Export]
public double CurrentHP { get; set; }
[Export]
public double MaximumHP { get; set; }
[Export]
public int BaseAttack { get; set; }
public int CurrentAttack { get; set; }
[Export]
public int BaseDefense { get; set; }
public int CurrentDefense { get; set; }
[Export]
public int MaxAttack { get; set; }
[Export]
public int MaxDefense { get; set; }
[Export]
public double Luck { get; set; } = 0.05f;
[Export]
public double TelluricResistance { get; set; }
@@ -26,6 +38,9 @@ namespace GameJamDungeon
[Export]
public double IgneousResistance { get; set; }
[Export]
public double FerrumResistance { get; set; }
[Export]
public double TelluricDamageBonus { get; set; }
@@ -37,5 +52,11 @@ namespace GameJamDungeon
[Export]
public double IgneousDamageBonus { get; set; }
[Export]
public double FerrumDamageBonus { get; set; }
[Export]
public float DropsSoulGemChance { get; set; } = 0.75f;
}
}

8
src/enemy/PixelMelt.tres Normal file
View File

@@ -0,0 +1,8 @@
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://x2bv1q51mcjq"]
[ext_resource type="Shader" path="res://src/vfx/shaders/PixelMelt.gdshader" id="1_fbp5a"]
[resource]
shader = ExtResource("1_fbp5a")
shader_parameter/progress = 0.0
shader_parameter/meltiness = 1.0

9
src/enemy/WeaponTag.cs Normal file
View File

@@ -0,0 +1,9 @@
namespace GameJamDungeon;
public enum WeaponTag
{
SelfDamage,
IgnoreAffinity,
Knockback,
BreaksOnChange
}

Binary file not shown.

Binary file not shown.

BIN
src/enemy/defeated.res Normal file

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,14 @@
shader_type canvas_item;
void vertex() {
// Called for every vertex the material is visible on.
}
void fragment() {
// Called for every pixel the material is visible on.
}
//void light() {
// Called for every pixel for every light affecting the CanvasItem.
// Uncomment to replace the default light processing function with this one.
//}

View File

@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="EnemyStatInfo" load_steps=2 format=3 uid="uid://c08wbuumw6dk5"]
[ext_resource type="Script" path="res://src/enemy/EnemyStatInfo.cs" id="1_2i74g"]
[ext_resource type="Script" path="res://src/enemy/EnemyStatResource.cs" id="1_2i74g"]
[resource]
script = ExtResource("1_2i74g")

View File

@@ -0,0 +1,670 @@
[gd_scene load_steps=104 format=3 uid="uid://b0gwivt7cw7nd"]
[ext_resource type="Script" path="res://src/enemy/Enemy.cs" id="1_a6wro"]
[ext_resource type="Script" path="res://src/enemy/EnemyStatResource.cs" id="2_x4pjh"]
[ext_resource type="Script" path="res://src/hitbox/Hitbox.cs" id="3_aiftp"]
[ext_resource type="Texture2D" uid="uid://clpqh2pyqljkn" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (1).png" id="4_7kurm"]
[ext_resource type="Texture2D" uid="uid://b0dec8ak2bo5t" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (2).png" id="5_1a1hr"]
[ext_resource type="Texture2D" uid="uid://tnmyksd68vmv" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (3).png" id="6_p47tl"]
[ext_resource type="Texture2D" uid="uid://duwipvc2kl6xa" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (4).png" id="7_efmib"]
[ext_resource type="Texture2D" uid="uid://dcd4v7jjxr8x2" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (5).png" id="8_ujyav"]
[ext_resource type="Texture2D" uid="uid://bxq0f45xooiqr" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (6).png" id="9_hft6g"]
[ext_resource type="Texture2D" uid="uid://bw8vkfmtcu5g0" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (7).png" id="10_idqta"]
[ext_resource type="Texture2D" uid="uid://gbit1q52jmqj" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (8).png" id="11_q3ktd"]
[ext_resource type="Texture2D" uid="uid://c41kok75k64ej" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (9).png" id="12_uvwho"]
[ext_resource type="Texture2D" uid="uid://dhiv7v5yhswom" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (10).png" id="13_jtb3t"]
[ext_resource type="Texture2D" uid="uid://dex3f0i2ubpj" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (11).png" id="14_v7ka5"]
[ext_resource type="Texture2D" uid="uid://d0hdrusbvmkec" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (12).png" id="15_hayam"]
[ext_resource type="Texture2D" uid="uid://ocftoaoswly6" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (13).png" id="16_lbciq"]
[ext_resource type="Texture2D" uid="uid://bkf1xqquqgjjq" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (14).png" id="17_veqcb"]
[ext_resource type="Texture2D" uid="uid://dtpxfmxxov8q5" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (15).png" id="18_h8egq"]
[ext_resource type="Texture2D" uid="uid://dv7ol6gqs1ijb" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (16).png" id="19_a4qa5"]
[ext_resource type="Texture2D" uid="uid://cydgp2acfm14k" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (17).png" id="20_oorfu"]
[ext_resource type="Texture2D" uid="uid://e2hjjnjqpmp7" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (18).png" id="21_n7px3"]
[ext_resource type="Texture2D" uid="uid://dpptqse5mh1ko" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (19).png" id="22_n70k4"]
[ext_resource type="Texture2D" uid="uid://b8g604p1a2ljl" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (20).png" id="23_qcoa4"]
[ext_resource type="Texture2D" uid="uid://ddfq7tecw83fx" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (21).png" id="24_f7cjx"]
[ext_resource type="Texture2D" uid="uid://btrf3scsac37s" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (22).png" id="25_qpubw"]
[ext_resource type="Texture2D" uid="uid://dmypmwghesupr" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (23).png" id="26_n0ais"]
[ext_resource type="Texture2D" uid="uid://bvu44f4fitum4" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (1).png" id="27_uib7b"]
[ext_resource type="Texture2D" uid="uid://blf4gmnjt20y3" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (2).png" id="28_jg00w"]
[ext_resource type="Texture2D" uid="uid://cul5jw68t1b3y" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (3).png" id="29_mqu6a"]
[ext_resource type="Texture2D" uid="uid://bwklw2qs8ufon" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (4).png" id="30_ry5jb"]
[ext_resource type="Texture2D" uid="uid://dhh2rs4s844nk" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (5).png" id="31_2g8kb"]
[ext_resource type="Texture2D" uid="uid://dxjc5xyh51tnn" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (6).png" id="32_m1dac"]
[ext_resource type="Texture2D" uid="uid://8oafxlrdhplr" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (7).png" id="33_kfyq1"]
[ext_resource type="Texture2D" uid="uid://civrqoexjyvm7" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (8).png" id="34_h6mq5"]
[ext_resource type="Texture2D" uid="uid://diadkmfrm56h0" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (9).png" id="35_mlsep"]
[ext_resource type="Texture2D" uid="uid://dhljaesglhg2y" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (10).png" id="36_54yk5"]
[ext_resource type="Texture2D" uid="uid://7k0l056mju3w" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (11).png" id="37_5aaoh"]
[ext_resource type="Texture2D" uid="uid://cfmq8b3kw5wh3" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (12).png" id="38_oyy4x"]
[ext_resource type="Texture2D" uid="uid://dus64avhcu6d7" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (13).png" id="39_25inv"]
[ext_resource type="Texture2D" uid="uid://4gx00xgaupf5" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (14).png" id="40_nuosk"]
[ext_resource type="Texture2D" uid="uid://27cawg74fw6" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (15).png" id="41_bc0t3"]
[ext_resource type="Texture2D" uid="uid://wwqv33fco246" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (16).png" id="42_ornx6"]
[ext_resource type="Texture2D" uid="uid://dnub88o6vcla" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (17).png" id="43_l4fbt"]
[ext_resource type="Texture2D" uid="uid://2qe16sypi6hn" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (18).png" id="44_1nh2b"]
[ext_resource type="Texture2D" uid="uid://c3qeyxovf28nj" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (19).png" id="45_oda4m"]
[ext_resource type="Texture2D" uid="uid://cqhy68310vab8" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (20).png" id="46_od0c8"]
[ext_resource type="Texture2D" uid="uid://c8733bu8i3eaf" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (21).png" id="47_ce5i7"]
[ext_resource type="Texture2D" uid="uid://hpsbpgrphbii" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (22).png" id="48_f62td"]
[ext_resource type="Texture2D" uid="uid://bcynrwxieuq0" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/FRONT/Michael_Front_ Walk_Idle (23).png" id="49_5vb8v"]
[ext_resource type="Texture2D" uid="uid://y4tp8m3dcfw7" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (1).png" id="50_doj3b"]
[ext_resource type="Texture2D" uid="uid://c7cvmoa8lhrvi" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (2).png" id="51_3v356"]
[ext_resource type="Texture2D" uid="uid://b4nyonn3b4xof" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (3).png" id="52_xb1vo"]
[ext_resource type="Texture2D" uid="uid://ce7pw41xbkcvc" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (4).png" id="53_icnc1"]
[ext_resource type="Texture2D" uid="uid://nt64es5vcys0" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (5).png" id="54_5isob"]
[ext_resource type="Texture2D" uid="uid://b4bljbfm1ka7b" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (6).png" id="55_vjhm7"]
[ext_resource type="Texture2D" uid="uid://c8y604q1oewjf" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (7).png" id="56_hkxac"]
[ext_resource type="Texture2D" uid="uid://dx8105gg3sg2j" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (8).png" id="57_a587j"]
[ext_resource type="Texture2D" uid="uid://d0xsacm4b3iu7" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (9).png" id="58_w3j1s"]
[ext_resource type="Texture2D" uid="uid://juj86cge7rwy" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (10).png" id="59_uxmwh"]
[ext_resource type="Texture2D" uid="uid://b3h4s6223r2vq" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (11).png" id="60_b1x6b"]
[ext_resource type="Texture2D" uid="uid://dqleuddk7hacs" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (12).png" id="61_6jdsb"]
[ext_resource type="Texture2D" uid="uid://dj1gi4clmp25d" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (13).png" id="62_g67yy"]
[ext_resource type="Texture2D" uid="uid://cjkeeqx8hgars" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (14).png" id="63_nwvwy"]
[ext_resource type="Texture2D" uid="uid://cr0anqdsluigu" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (15).png" id="64_j2a2k"]
[ext_resource type="Texture2D" uid="uid://bp1jcbuamvnfr" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (16).png" id="65_yl8j2"]
[ext_resource type="Texture2D" uid="uid://k17pedht8d3k" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (17).png" id="66_v1ewt"]
[ext_resource type="Texture2D" uid="uid://dpbcbr11h5ax6" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (18).png" id="67_imbdg"]
[ext_resource type="Texture2D" uid="uid://d32qheseggy67" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (19).png" id="68_l685l"]
[ext_resource type="Texture2D" uid="uid://byqihscem8bk3" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (20).png" id="69_05v5q"]
[ext_resource type="Texture2D" uid="uid://vxphbifafq0q" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (21).png" id="70_mo3hn"]
[ext_resource type="Texture2D" uid="uid://7r30bjydumon" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (22).png" id="71_m1srp"]
[ext_resource type="Texture2D" uid="uid://djspx2smexhme" path="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/LEFT SIDE/Michael_IdleWalk_Left (23).png" id="72_6s3ro"]
[sub_resource type="Resource" id="Resource_k2g1o"]
script = ExtResource("2_x4pjh")
CurrentHP = 45.0
MaximumHP = 45.0
CurrentAttack = 20
CurrentDefense = 11
MaxAttack = 20
MaxDefense = 11
Luck = 0.05
TelluricResistance = 0.0
AeolicResistance = 0.0
HydricResistance = 0.0
IgneousResistance = 0.0
FerrumResistance = 0.0
TelluricDamageBonus = 0.0
AeolicDamageBonus = 0.0
BaseHydricDamageBonus = 0.0
IgneousDamageBonus = 0.0
FerrumDamageBonus = 0.0
DropsSoulGemChance = 0.75
[sub_resource type="CylinderShape3D" id="CylinderShape3D_jbgmx"]
height = 5.0
radius = 1.0
[sub_resource type="BoxShape3D" id="BoxShape3D_0yire"]
size = Vector3(1, 0.565, 2)
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_0h5s2"]
radius = 1.0
[sub_resource type="ViewportTexture" id="ViewportTexture_57rcc"]
viewport_path = NodePath("Sprite/SubViewport")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_1fhn0"]
[sub_resource type="SpriteFrames" id="SpriteFrames_artt5"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("4_7kurm")
}, {
"duration": 1.0,
"texture": ExtResource("5_1a1hr")
}, {
"duration": 1.0,
"texture": ExtResource("6_p47tl")
}, {
"duration": 1.0,
"texture": ExtResource("7_efmib")
}, {
"duration": 1.0,
"texture": ExtResource("8_ujyav")
}, {
"duration": 1.0,
"texture": ExtResource("9_hft6g")
}, {
"duration": 1.0,
"texture": ExtResource("10_idqta")
}, {
"duration": 1.0,
"texture": ExtResource("11_q3ktd")
}, {
"duration": 1.0,
"texture": ExtResource("12_uvwho")
}, {
"duration": 1.0,
"texture": ExtResource("13_jtb3t")
}, {
"duration": 1.0,
"texture": ExtResource("14_v7ka5")
}, {
"duration": 1.0,
"texture": ExtResource("15_hayam")
}, {
"duration": 1.0,
"texture": ExtResource("16_lbciq")
}, {
"duration": 1.0,
"texture": ExtResource("17_veqcb")
}, {
"duration": 1.0,
"texture": ExtResource("18_h8egq")
}, {
"duration": 1.0,
"texture": ExtResource("19_a4qa5")
}, {
"duration": 1.0,
"texture": ExtResource("20_oorfu")
}, {
"duration": 1.0,
"texture": ExtResource("21_n7px3")
}, {
"duration": 1.0,
"texture": ExtResource("22_n70k4")
}, {
"duration": 1.0,
"texture": ExtResource("23_qcoa4")
}, {
"duration": 1.0,
"texture": ExtResource("24_f7cjx")
}, {
"duration": 1.0,
"texture": ExtResource("25_qpubw")
}, {
"duration": 1.0,
"texture": ExtResource("26_n0ais")
}],
"loop": true,
"name": &"idle_back_walk",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("27_uib7b")
}, {
"duration": 1.0,
"texture": ExtResource("28_jg00w")
}, {
"duration": 1.0,
"texture": ExtResource("29_mqu6a")
}, {
"duration": 1.0,
"texture": ExtResource("30_ry5jb")
}, {
"duration": 1.0,
"texture": ExtResource("31_2g8kb")
}, {
"duration": 1.0,
"texture": ExtResource("32_m1dac")
}, {
"duration": 1.0,
"texture": ExtResource("33_kfyq1")
}, {
"duration": 1.0,
"texture": ExtResource("34_h6mq5")
}, {
"duration": 1.0,
"texture": ExtResource("35_mlsep")
}, {
"duration": 1.0,
"texture": ExtResource("36_54yk5")
}, {
"duration": 1.0,
"texture": ExtResource("37_5aaoh")
}, {
"duration": 1.0,
"texture": ExtResource("38_oyy4x")
}, {
"duration": 1.0,
"texture": ExtResource("39_25inv")
}, {
"duration": 1.0,
"texture": ExtResource("40_nuosk")
}, {
"duration": 1.0,
"texture": ExtResource("41_bc0t3")
}, {
"duration": 1.0,
"texture": ExtResource("42_ornx6")
}, {
"duration": 1.0,
"texture": ExtResource("43_l4fbt")
}, {
"duration": 1.0,
"texture": ExtResource("44_1nh2b")
}, {
"duration": 1.0,
"texture": ExtResource("45_oda4m")
}, {
"duration": 1.0,
"texture": ExtResource("46_od0c8")
}, {
"duration": 1.0,
"texture": ExtResource("47_ce5i7")
}, {
"duration": 1.0,
"texture": ExtResource("48_f62td")
}, {
"duration": 1.0,
"texture": ExtResource("49_5vb8v")
}],
"loop": true,
"name": &"idle_front_walk",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("50_doj3b")
}, {
"duration": 1.0,
"texture": ExtResource("51_3v356")
}, {
"duration": 1.0,
"texture": ExtResource("52_xb1vo")
}, {
"duration": 1.0,
"texture": ExtResource("53_icnc1")
}, {
"duration": 1.0,
"texture": ExtResource("54_5isob")
}, {
"duration": 1.0,
"texture": ExtResource("55_vjhm7")
}, {
"duration": 1.0,
"texture": ExtResource("56_hkxac")
}, {
"duration": 1.0,
"texture": ExtResource("57_a587j")
}, {
"duration": 1.0,
"texture": ExtResource("58_w3j1s")
}, {
"duration": 1.0,
"texture": ExtResource("59_uxmwh")
}, {
"duration": 1.0,
"texture": ExtResource("60_b1x6b")
}, {
"duration": 1.0,
"texture": ExtResource("61_6jdsb")
}, {
"duration": 1.0,
"texture": ExtResource("62_g67yy")
}, {
"duration": 1.0,
"texture": ExtResource("63_nwvwy")
}, {
"duration": 1.0,
"texture": ExtResource("64_j2a2k")
}, {
"duration": 1.0,
"texture": ExtResource("65_yl8j2")
}, {
"duration": 1.0,
"texture": ExtResource("66_v1ewt")
}, {
"duration": 1.0,
"texture": ExtResource("67_imbdg")
}, {
"duration": 1.0,
"texture": ExtResource("68_l685l")
}, {
"duration": 1.0,
"texture": ExtResource("69_05v5q")
}, {
"duration": 1.0,
"texture": ExtResource("70_mo3hn")
}, {
"duration": 1.0,
"texture": ExtResource("71_m1srp")
}, {
"duration": 1.0,
"texture": ExtResource("72_6s3ro")
}],
"loop": true,
"name": &"idle_left_walk",
"speed": 12.0
}]
[sub_resource type="Animation" id="Animation_41ppy"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite/SubViewport/AnimatedSprite:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite/SubViewport/AnimatedSprite:animation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"idle_back_walk"]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Hitbox/CollisionShape3D:disabled")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
[sub_resource type="Animation" id="Animation_0k3e8"]
resource_name = "attack"
length = 0.416668
step = 0.0166667
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite/SubViewport/AnimatedSprite:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"idle_front_walk"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite/SubViewport/AnimatedSprite:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.0166667, 0.0333333, 0.05, 0.0666667, 0.0833333, 0.1, 0.116667, 0.133333, 0.15, 0.166667, 0.183333, 0.2, 0.216667, 0.233333, 0.283333, 0.3, 0.316667, 0.333333, 0.35, 0.366667, 0.383333, 0.4),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Hitbox/CollisionShape3D:disabled")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.0333333, 0.3),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 1,
"values": [true, false, true]
}
[sub_resource type="Animation" id="Animation_ppbeh"]
resource_name = "idle_back_walk"
length = 1.91667
loop_mode = 1
step = 0.0833333
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite/SubViewport/AnimatedSprite:frame")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.0833333, 0.166667, 0.25, 0.333333, 0.416667, 0.5, 0.583333, 0.666666, 0.75, 0.833333, 0.916666, 1, 1.08333, 1.16667, 1.25, 1.33333, 1.41667, 1.5, 1.58333, 1.66667, 1.75, 1.83333),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite/SubViewport/AnimatedSprite:animation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"idle_back_walk"]
}
[sub_resource type="Animation" id="Animation_3dffb"]
resource_name = "idle_front_walk"
length = 1.91667
loop_mode = 1
step = 0.0833333
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite/SubViewport/AnimatedSprite:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"idle_front_walk"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite/SubViewport/AnimatedSprite:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.0833333, 0.166667, 0.25, 0.333333, 0.416667, 0.5, 0.583333, 0.666666, 0.75, 0.833333, 0.916666, 1, 1.08333, 1.16667, 1.25, 1.33333, 1.41667, 1.5, 1.58333, 1.66667, 1.75, 1.83333),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
}
[sub_resource type="Animation" id="Animation_0qxqf"]
resource_name = "idle_left_walk"
length = 1.91667
loop_mode = 1
step = 0.0833333
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Sprite/SubViewport/AnimatedSprite:animation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [&"idle_left_walk"]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Sprite/SubViewport/AnimatedSprite:frame")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.0833333, 0.166667, 0.25, 0.333333, 0.416667, 0.5, 0.583333, 0.666666, 0.75, 0.833333, 0.916666, 1, 1.08333, 1.16667, 1.25, 1.33333, 1.41667, 1.5, 1.58333, 1.66667, 1.75, 1.83333),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_346xs"]
_data = {
"RESET": SubResource("Animation_41ppy"),
"attack": SubResource("Animation_0k3e8"),
"idle_back_walk": SubResource("Animation_ppbeh"),
"idle_front_walk": SubResource("Animation_3dffb"),
"idle_left_walk": SubResource("Animation_0qxqf")
}
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_erbrx"]
animation = &"attack"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_o0tmb"]
animation = &"idle_back_walk"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_a6s5c"]
animation = &"idle_front_walk"
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_dvj10"]
animation = &"idle_left_walk"
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_vljb2"]
advance_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_3xv6a"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_0h1op"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_361b7"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_wftla"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_gqqkl"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_5cj36"]
switch_mode = 1
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_4t05h"]
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_8hgxu"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_fq2yw"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_yqm0k"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_bmy1k"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_mxl7w"]
switch_mode = 2
[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_7gios"]
states/End/position = Vector2(1464, 100)
states/attack/node = SubResource("AnimationNodeAnimation_erbrx")
states/attack/position = Vector2(1151, 86.9474)
states/idle_back_walk/node = SubResource("AnimationNodeAnimation_o0tmb")
states/idle_back_walk/position = Vector2(490, 92.9474)
states/idle_front_walk/node = SubResource("AnimationNodeAnimation_a6s5c")
states/idle_front_walk/position = Vector2(331, -12)
states/idle_left_walk/node = SubResource("AnimationNodeAnimation_dvj10")
states/idle_left_walk/position = Vector2(331, 196.947)
transitions = ["Start", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_vljb2"), "idle_front_walk", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_3xv6a"), "idle_left_walk", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_0h1op"), "idle_front_walk", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_361b7"), "idle_back_walk", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_wftla"), "idle_back_walk", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_gqqkl"), "idle_left_walk", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_5cj36"), "idle_front_walk", "attack", SubResource("AnimationNodeStateMachineTransition_4t05h"), "attack", "idle_front_walk", SubResource("AnimationNodeStateMachineTransition_8hgxu"), "attack", "idle_back_walk", SubResource("AnimationNodeStateMachineTransition_fq2yw"), "attack", "idle_left_walk", SubResource("AnimationNodeStateMachineTransition_yqm0k"), "idle_back_walk", "attack", SubResource("AnimationNodeStateMachineTransition_bmy1k"), "idle_left_walk", "attack", SubResource("AnimationNodeStateMachineTransition_mxl7w")]
graph_offset = Vector2(-190, -62.0526)
[node name="Michael" type="RigidBody3D"]
process_mode = 1
collision_layer = 10
collision_mask = 11
axis_lock_linear_y = true
axis_lock_angular_x = true
script = ExtResource("1_a6wro")
EnemyStatResource = SubResource("Resource_k2g1o")
[node name="LineOfSight" type="Area3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0)
collision_layer = 2
collision_mask = 2
[node name="CollisionShape3D" type="CollisionShape3D" parent="LineOfSight"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, -2)
shape = SubResource("CylinderShape3D_jbgmx")
[node name="PatrolTimer" type="Timer" parent="."]
unique_name_in_owner = true
wait_time = 10.0
autostart = true
[node name="AttackTimer" type="Timer" parent="."]
unique_name_in_owner = true
wait_time = 1.8
autostart = true
[node name="Hitbox" type="Area3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -0.152949, 0, 0)
collision_layer = 64
collision_mask = 64
script = ExtResource("3_aiftp")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Hitbox"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.189337, 0.217529, -1.29986)
shape = SubResource("BoxShape3D_0yire")
disabled = true
[node name="Raycast" type="RayCast3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0)
target_position = Vector3(0, 0, -5)
collision_mask = 3
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0)
shape = SubResource("CapsuleShape3D_0h5s2")
[node name="NavAgent" type="NavigationAgent3D" parent="."]
unique_name_in_owner = true
avoidance_enabled = true
debug_path_custom_color = Color(1, 0, 0, 1)
[node name="Sprite" type="Sprite3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.209741, 0)
billboard = 2
shaded = true
double_sided = false
texture_filter = 0
render_priority = 100
texture = SubResource("ViewportTexture_57rcc")
[node name="SubViewport" type="SubViewport" parent="Sprite"]
disable_3d = true
transparent_bg = true
handle_input_locally = false
size = Vector2i(200, 200)
[node name="AnimatedSprite" type="AnimatedSprite2D" parent="Sprite/SubViewport"]
unique_name_in_owner = true
texture_filter = 1
texture_repeat = 1
material = SubResource("ShaderMaterial_1fhn0")
position = Vector2(45, 45)
sprite_frames = SubResource("SpriteFrames_artt5")
animation = &"idle_back_walk"
offset = Vector2(45, 45)
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
unique_name_in_owner = true
libraries = {
"": SubResource("AnimationLibrary_346xs")
}
[node name="AnimationTree" type="AnimationTree" parent="."]
unique_name_in_owner = true
root_node = NodePath("%AnimationTree/..")
tree_root = SubResource("AnimationNodeStateMachine_7gios")
anim_player = NodePath("../AnimationPlayer")

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://clpqh2pyqljkn"
path="res://.godot/imported/Michael_Walk_Idle_Back (1).png-7070d9760c2fd1a18f0bd89739fbfd49.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (1).png"
dest_files=["res://.godot/imported/Michael_Walk_Idle_Back (1).png-7070d9760c2fd1a18f0bd89739fbfd49.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=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dhiv7v5yhswom"
path="res://.godot/imported/Michael_Walk_Idle_Back (10).png-2d7e4cbaa5359d2310776ad2c9a73ea2.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (10).png"
dest_files=["res://.godot/imported/Michael_Walk_Idle_Back (10).png-2d7e4cbaa5359d2310776ad2c9a73ea2.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=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dex3f0i2ubpj"
path="res://.godot/imported/Michael_Walk_Idle_Back (11).png-6042e96b58e5b7d64548730b87d73c52.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (11).png"
dest_files=["res://.godot/imported/Michael_Walk_Idle_Back (11).png-6042e96b58e5b7d64548730b87d73c52.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=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d0hdrusbvmkec"
path="res://.godot/imported/Michael_Walk_Idle_Back (12).png-160a943fe714d01a3cb1708e8a81e8fe.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (12).png"
dest_files=["res://.godot/imported/Michael_Walk_Idle_Back (12).png-160a943fe714d01a3cb1708e8a81e8fe.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=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ocftoaoswly6"
path="res://.godot/imported/Michael_Walk_Idle_Back (13).png-32fcc78cc8786189aac72410f480be40.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (13).png"
dest_files=["res://.godot/imported/Michael_Walk_Idle_Back (13).png-32fcc78cc8786189aac72410f480be40.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=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bkf1xqquqgjjq"
path="res://.godot/imported/Michael_Walk_Idle_Back (14).png-8804af2f6fbe29ca160f0dfe228a6ae5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (14).png"
dest_files=["res://.godot/imported/Michael_Walk_Idle_Back (14).png-8804af2f6fbe29ca160f0dfe228a6ae5.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=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dtpxfmxxov8q5"
path="res://.godot/imported/Michael_Walk_Idle_Back (15).png-cb458bc7bd5faf362ee87b6aabab15c2.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (15).png"
dest_files=["res://.godot/imported/Michael_Walk_Idle_Back (15).png-cb458bc7bd5faf362ee87b6aabab15c2.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=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dv7ol6gqs1ijb"
path="res://.godot/imported/Michael_Walk_Idle_Back (16).png-c6924c7eeed75d56679b7df95cecabf4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (16).png"
dest_files=["res://.godot/imported/Michael_Walk_Idle_Back (16).png-c6924c7eeed75d56679b7df95cecabf4.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=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cydgp2acfm14k"
path="res://.godot/imported/Michael_Walk_Idle_Back (17).png-7391b1d377abd124d16c43cd9e05575c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (17).png"
dest_files=["res://.godot/imported/Michael_Walk_Idle_Back (17).png-7391b1d377abd124d16c43cd9e05575c.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=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://e2hjjnjqpmp7"
path="res://.godot/imported/Michael_Walk_Idle_Back (18).png-be9d0b07c32cfd971006c9fee8c8fe2b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (18).png"
dest_files=["res://.godot/imported/Michael_Walk_Idle_Back (18).png-be9d0b07c32cfd971006c9fee8c8fe2b.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=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dpptqse5mh1ko"
path="res://.godot/imported/Michael_Walk_Idle_Back (19).png-533ae14f4b217a77c6ed9835fb5bfcee.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (19).png"
dest_files=["res://.godot/imported/Michael_Walk_Idle_Back (19).png-533ae14f4b217a77c6ed9835fb5bfcee.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=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b0dec8ak2bo5t"
path="res://.godot/imported/Michael_Walk_Idle_Back (2).png-f656c3a2373fdf69e8b20054382b0ebe.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (2).png"
dest_files=["res://.godot/imported/Michael_Walk_Idle_Back (2).png-f656c3a2373fdf69e8b20054382b0ebe.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=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b8g604p1a2ljl"
path="res://.godot/imported/Michael_Walk_Idle_Back (20).png-8e99a58cf5fe39c59ab601ecb955e932.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (20).png"
dest_files=["res://.godot/imported/Michael_Walk_Idle_Back (20).png-8e99a58cf5fe39c59ab601ecb955e932.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=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ddfq7tecw83fx"
path="res://.godot/imported/Michael_Walk_Idle_Back (21).png-6df2ff13fbee070b343016db2a3da3f4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (21).png"
dest_files=["res://.godot/imported/Michael_Walk_Idle_Back (21).png-6df2ff13fbee070b343016db2a3da3f4.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=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://btrf3scsac37s"
path="res://.godot/imported/Michael_Walk_Idle_Back (22).png-ba76908bef9d806626b1afa752102943.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (22).png"
dest_files=["res://.godot/imported/Michael_Walk_Idle_Back (22).png-ba76908bef9d806626b1afa752102943.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=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dmypmwghesupr"
path="res://.godot/imported/Michael_Walk_Idle_Back (23).png-a12592aaaaa29d077e1a4262d42a4823.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (23).png"
dest_files=["res://.godot/imported/Michael_Walk_Idle_Back (23).png-a12592aaaaa29d077e1a4262d42a4823.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=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://tnmyksd68vmv"
path="res://.godot/imported/Michael_Walk_Idle_Back (3).png-97a62b1e5a6ba44798e2b1f0450a7d6c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (3).png"
dest_files=["res://.godot/imported/Michael_Walk_Idle_Back (3).png-97a62b1e5a6ba44798e2b1f0450a7d6c.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=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://duwipvc2kl6xa"
path="res://.godot/imported/Michael_Walk_Idle_Back (4).png-7d9025a85dd80fd84e67ddba9fba51d3.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (4).png"
dest_files=["res://.godot/imported/Michael_Walk_Idle_Back (4).png-7d9025a85dd80fd84e67ddba9fba51d3.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=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dcd4v7jjxr8x2"
path="res://.godot/imported/Michael_Walk_Idle_Back (5).png-e1298de6507ce5a4d5ddadc680e86bce.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (5).png"
dest_files=["res://.godot/imported/Michael_Walk_Idle_Back (5).png-e1298de6507ce5a4d5ddadc680e86bce.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=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bxq0f45xooiqr"
path="res://.godot/imported/Michael_Walk_Idle_Back (6).png-469ef2774100b94a2939412a137cb0f1.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (6).png"
dest_files=["res://.godot/imported/Michael_Walk_Idle_Back (6).png-469ef2774100b94a2939412a137cb0f1.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=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bw8vkfmtcu5g0"
path="res://.godot/imported/Michael_Walk_Idle_Back (7).png-7934ee61d8f61774e879a494b56e28b9.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://src/enemy/enemy_types/michael/animations/IDLE_WALK/BACK/Michael_Walk_Idle_Back (7).png"
dest_files=["res://.godot/imported/Michael_Walk_Idle_Back (7).png-7934ee61d8f61774e879a494b56e28b9.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=0

Some files were not shown because too many files have changed in this diff Show More