Attempt to bring in other branch
@@ -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
@@ -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;
|
||||
}
|
||||
101
src/app/App.tscn
@@ -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")
|
||||
}
|
||||
|
||||
@@ -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
|
||||
58
src/audio/DimmableAudioStreamPlayer.cs
Normal 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
@@ -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();
|
||||
}
|
||||
}
|
||||
93
src/audio/InGameAudio.tscn
Normal 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
|
||||
BIN
src/audio/music/crossing-the-gate.mp3
Normal file
19
src/audio/music/crossing-the-gate.mp3.import
Normal 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
19
src/audio/music/droney.mp3.import
Normal 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
|
||||
BIN
src/audio/music/tar-winds.mp3
Normal file
19
src/audio/music/tar-winds.mp3.import
Normal 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
|
||||
BIN
src/audio/music/useless immune system-1.mp3
Normal file
19
src/audio/music/useless immune system-1.mp3.import
Normal 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
|
||||
BIN
src/audio/music/useless immune system.wav
Normal file
24
src/audio/music/useless immune system.wav.import
Normal 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
|
||||
@@ -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]
|
||||
|
||||
BIN
src/audio/sfx/TempFFVII/junction.ogg
Normal file
19
src/audio/sfx/TempFFVII/junction.ogg.import
Normal 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
|
||||
BIN
src/audio/sfx/TempFFVII/menu-back.ogg
Normal file
19
src/audio/sfx/TempFFVII/menu-back.ogg.import
Normal 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
|
||||
BIN
src/audio/sfx/TempFFVII/menu-move.ogg
Normal file
19
src/audio/sfx/TempFFVII/menu-move.ogg.import
Normal 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
|
||||
BIN
src/audio/sfx/TempFFVII/menu.wav
Normal file
24
src/audio/sfx/TempFFVII/menu.wav.import
Normal 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
|
||||
BIN
src/audio/sfx/TempFFVII/something-earned.ogg
Normal file
19
src/audio/sfx/TempFFVII/something-earned.ogg.import
Normal 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
|
||||
BIN
src/audio/sfx/TempFFVII/sort.ogg
Normal file
19
src/audio/sfx/TempFFVII/sort.ogg.import
Normal 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
|
||||
BIN
src/audio/sfx/TempFFVII/teleport.ogg
Normal file
19
src/audio/sfx/TempFFVII/teleport.ogg.import
Normal 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
|
||||
34
src/audio/state/InGameAudioLogic.Output.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
13
src/audio/state/InGameAudioLogic.State.cs
Normal 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>
|
||||
{
|
||||
}
|
||||
}
|
||||
13
src/audio/state/InGameAudioLogic.cs
Normal 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>();
|
||||
}
|
||||
12
src/audio/state/states/InGameAudioLogic.State.Disabled.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using Chickensoft.Introspection;
|
||||
using Chickensoft.LogicBlocks;
|
||||
|
||||
namespace GameJamDungeon;
|
||||
|
||||
public partial class InGameAudioLogic
|
||||
{
|
||||
[Meta]
|
||||
public partial record Disabled : State
|
||||
{
|
||||
}
|
||||
}
|
||||
59
src/audio/state/states/InGameAudioLogic.State.Enabled.cs
Normal 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
@@ -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
@@ -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")
|
||||
3
src/dialog/Dialogue.dialogue
Normal file
@@ -0,0 +1,3 @@
|
||||
~ start
|
||||
Hi...
|
||||
=> END
|
||||
15
src/dialog/Dialogue.dialogue.import
Normal 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
|
||||
3
src/enemy/AnimationNodeStateMachine.tres
Normal file
@@ -0,0 +1,3 @@
|
||||
[gd_resource type="AnimationNodeStateMachinePlayback" format=3 uid="uid://5olovmdoiwt3"]
|
||||
|
||||
[resource]
|
||||
@@ -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
@@ -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
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
@@ -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
@@ -0,0 +1,9 @@
|
||||
namespace GameJamDungeon;
|
||||
|
||||
public enum WeaponTag
|
||||
{
|
||||
SelfDamage,
|
||||
IgnoreAffinity,
|
||||
Knockback,
|
||||
BreaksOnChange
|
||||
}
|
||||
BIN
src/enemy/defeated.res
Normal file
14
src/enemy/enemy_types/michael/Michael.gdshader
Normal 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.
|
||||
//}
|
||||
@@ -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")
|
||||
670
src/enemy/enemy_types/michael/Michael.tscn
Normal 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")
|
||||
|
After Width: | Height: | Size: 10 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 9.4 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 10 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 10 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 10 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 10 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 11 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 10 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 10 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 9.8 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 8.1 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 10 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 8.0 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 9.1 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 9.8 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 9.9 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 10 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 10 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 9.8 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 9.7 KiB |
@@ -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
|
||||
|
After Width: | Height: | Size: 9.6 KiB |
@@ -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
|
||||