Compare commits
27 Commits
afca70e6c6
...
master
Author | SHA1 | Date | |
---|---|---|---|
bc3108ea37 | |||
7257242fce | |||
03abf91f59 | |||
e6f8989d16 | |||
db2a090acc | |||
dfc9201f62 | |||
46553a351a | |||
a8ff492aed | |||
aa73e54b3e | |||
98b3202361 | |||
6e2bdcdf95 | |||
f229ff5b7d | |||
f9cb59d182 | |||
ead52f6d51 | |||
bd40c797d4 | |||
2d520a708f | |||
257a492f72 | |||
fd10e566b3 | |||
021e984877 | |||
4b7c38397c | |||
6d0e337bd6 | |||
51aecf7da5 | |||
604520cad5 | |||
36d1cac284 | |||
53b5f968fd | |||
88c7a0a055 | |||
d786ef4c22 |
2
.gitattributes
vendored
2
.gitattributes
vendored
@@ -1,2 +1,4 @@
|
||||
# Normalize EOL for all files that Git considers text files.
|
||||
* text=auto eol=lf
|
||||
addons/* linguist-vendored
|
||||
*.gd linguist-vendored
|
||||
|
105
Autoloads/AchievementManager.cs
Normal file
105
Autoloads/AchievementManager.cs
Normal file
@@ -0,0 +1,105 @@
|
||||
using Godot;
|
||||
using Godot.Collections;
|
||||
using Mr.BrickAdventures.scripts.Resources;
|
||||
|
||||
namespace Mr.BrickAdventures.Autoloads;
|
||||
|
||||
public partial class AchievementManager : Node
|
||||
{
|
||||
[Export] private string AchievementsFolderPath = "res://achievements/";
|
||||
[Export] private PackedScene AchievementPopupScene { get; set; }
|
||||
|
||||
private System.Collections.Generic.Dictionary<string, AchievementResource> _achievements = new();
|
||||
private Array<string> _unlockedAchievementIds = [];
|
||||
private GameManager _gameManager;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
_gameManager = GetNode<GameManager>("/root/GameManager");
|
||||
LoadAchievementsFromFolder();
|
||||
LoadUnlockedAchievements();
|
||||
}
|
||||
|
||||
private void LoadAchievementsFromFolder()
|
||||
{
|
||||
using var dir = DirAccess.Open(AchievementsFolderPath);
|
||||
if (dir == null)
|
||||
{
|
||||
GD.PrintErr($"AchievementManager: Could not open achievements folder at '{AchievementsFolderPath}'");
|
||||
return;
|
||||
}
|
||||
|
||||
dir.ListDirBegin();
|
||||
var fileName = dir.GetNext();
|
||||
while (fileName != "")
|
||||
{
|
||||
if (!dir.CurrentIsDir() && fileName.EndsWith(".tres"))
|
||||
{
|
||||
var achievement = GD.Load<AchievementResource>(AchievementsFolderPath + fileName);
|
||||
if (achievement != null)
|
||||
{
|
||||
_achievements.TryAdd(achievement.Id, achievement);
|
||||
}
|
||||
}
|
||||
fileName = dir.GetNext();
|
||||
}
|
||||
}
|
||||
|
||||
public void UnlockAchievement(string achievementId)
|
||||
{
|
||||
if (!_achievements.TryGetValue(achievementId, out var achievement))
|
||||
{
|
||||
GD.PrintErr($"Attempted to unlock non-existent achievement: '{achievementId}'");
|
||||
return;
|
||||
}
|
||||
|
||||
if (_unlockedAchievementIds.Contains(achievementId))
|
||||
{
|
||||
return; // Already unlocked
|
||||
}
|
||||
|
||||
// 1. Mark as unlocked internally
|
||||
_unlockedAchievementIds.Add(achievementId);
|
||||
GD.Print($"Achievement Unlocked: {achievement.DisplayName}");
|
||||
|
||||
// 2. Show the UI popup
|
||||
if (AchievementPopupScene != null)
|
||||
{
|
||||
var popup = AchievementPopupScene.Instantiate<scripts.UI.AchievementPopup>();
|
||||
GetTree().Root.AddChild(popup);
|
||||
_ = popup.ShowAchievement(achievement);
|
||||
}
|
||||
|
||||
// 3. Call SteamManager if it's available
|
||||
if (SteamManager.IsSteamInitialized)
|
||||
{
|
||||
SteamManager.UnlockAchievement(achievement.Id);
|
||||
}
|
||||
|
||||
// 4. Save progress
|
||||
SaveUnlockedAchievements();
|
||||
}
|
||||
|
||||
public void LockAchievement(string achievementId)
|
||||
{
|
||||
if (_unlockedAchievementIds.Contains(achievementId))
|
||||
{
|
||||
_unlockedAchievementIds.Remove(achievementId);
|
||||
SaveUnlockedAchievements();
|
||||
}
|
||||
}
|
||||
|
||||
private void SaveUnlockedAchievements()
|
||||
{
|
||||
_gameManager.PlayerState["unlocked_achievements"] = _unlockedAchievementIds;
|
||||
// You might want to trigger a save game here, depending on your SaveSystem
|
||||
}
|
||||
|
||||
private void LoadUnlockedAchievements()
|
||||
{
|
||||
if (_gameManager.PlayerState.TryGetValue("unlocked_achievements", out var unlocked))
|
||||
{
|
||||
_unlockedAchievementIds = (Array<string>)unlocked;
|
||||
}
|
||||
}
|
||||
}
|
1
Autoloads/AchievementManager.cs.uid
Normal file
1
Autoloads/AchievementManager.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://c4vvuqnx5y33u
|
@@ -10,10 +10,13 @@ public partial class ConsoleManager : Node
|
||||
private GameManager _gameManager;
|
||||
private SkillManager _skillManager;
|
||||
private SkillUnlockerComponent _skillUnlockerComponent;
|
||||
private AchievementManager _achievementManager;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
_gameManager = GetNode<GameManager>("/root/GameManager");
|
||||
_achievementManager = GetNode<AchievementManager>("/root/AchievementManager");
|
||||
_skillManager = GetNode<SkillManager>("/root/SkillManager");
|
||||
|
||||
RegisterConsoleCommands();
|
||||
}
|
||||
@@ -94,13 +97,12 @@ public partial class ConsoleManager : Node
|
||||
private bool GetSkillManagement()
|
||||
{
|
||||
var player = _gameManager.Player;
|
||||
if (player == null)
|
||||
if (player == null || !IsInstanceValid(player))
|
||||
{
|
||||
LimboConsole.Warn("Player node not found.");
|
||||
LimboConsole.Warn("Player node not found or is invalid.");
|
||||
return false;
|
||||
}
|
||||
|
||||
_skillManager ??= player.GetNode<SkillManager>("SkillManager");
|
||||
_skillUnlockerComponent ??= player.GetNode<SkillUnlockerComponent>("SkillUnlockerComponent");
|
||||
|
||||
if (_skillManager != null && _skillUnlockerComponent != null) return true;
|
||||
@@ -155,4 +157,17 @@ public partial class ConsoleManager : Node
|
||||
_gameManager.OnLevelComplete();
|
||||
}
|
||||
|
||||
[ConsoleCommand("unlock_achievement", "Unlocks an achievement by its ID.")]
|
||||
private void UnlockAchievementCommand(string achievementId)
|
||||
{
|
||||
_achievementManager.UnlockAchievement(achievementId);
|
||||
LimboConsole.Info($"Attempted to unlock achievement '{achievementId}'.");
|
||||
}
|
||||
|
||||
[ConsoleCommand("reset_achievement", "Resets (locks) an achievement by its ID.")]
|
||||
private void ResetAchievementCommand(string achievementId)
|
||||
{
|
||||
_achievementManager.LockAchievement(achievementId);
|
||||
}
|
||||
|
||||
}
|
9
Autoloads/EventBus.cs
Normal file
9
Autoloads/EventBus.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
using Godot;
|
||||
|
||||
namespace Mr.BrickAdventures.Autoloads;
|
||||
|
||||
public partial class EventBus : Node
|
||||
{
|
||||
[Signal] public delegate void LevelStartedEventHandler(int levelIndex, Node currentScene);
|
||||
[Signal] public delegate void LevelCompletedEventHandler(int levelIndex, Node currentScene, double completionTime);
|
||||
}
|
1
Autoloads/EventBus.cs.uid
Normal file
1
Autoloads/EventBus.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bb2yq5wggdw3w
|
52
Autoloads/FloatingTextManager.cs
Normal file
52
Autoloads/FloatingTextManager.cs
Normal file
@@ -0,0 +1,52 @@
|
||||
using System.Globalization;
|
||||
using Godot;
|
||||
using Mr.BrickAdventures.scripts.UI;
|
||||
|
||||
namespace Mr.BrickAdventures.Autoloads;
|
||||
|
||||
public partial class FloatingTextManager : Node
|
||||
{
|
||||
[Export] public PackedScene FloatingTextScene { get; set; }
|
||||
|
||||
[ExportGroup("Colors")]
|
||||
[Export] public Color DamageColor { get; set; } = new Color("#b21030"); // Red
|
||||
[Export] public Color HealColor { get; set; } = new Color("#71f341"); // Green
|
||||
[Export] public Color CoinColor { get; set; } = new Color("#ebd320"); // Gold
|
||||
[Export] public Color MessageColor { get; set; } = new Color("#ffffff"); // White
|
||||
|
||||
public void ShowDamage(float amount, Vector2 position)
|
||||
{
|
||||
var text = Mathf.Round(amount * 100f).ToString(CultureInfo.InvariantCulture);
|
||||
CreateFloatingText(text, position, DamageColor);
|
||||
}
|
||||
|
||||
public void ShowHeal(float amount, Vector2 position)
|
||||
{
|
||||
var text = $"+{Mathf.Round(amount)}";
|
||||
CreateFloatingText(text, position, HealColor);
|
||||
}
|
||||
|
||||
public void ShowCoin(int amount, Vector2 position)
|
||||
{
|
||||
var text = $"+{amount}";
|
||||
CreateFloatingText(text, position, CoinColor);
|
||||
}
|
||||
|
||||
public void ShowMessage(string message, Vector2 position)
|
||||
{
|
||||
CreateFloatingText(message, position, MessageColor);
|
||||
}
|
||||
|
||||
private void CreateFloatingText(string text, Vector2 position, Color color)
|
||||
{
|
||||
if (FloatingTextScene == null)
|
||||
{
|
||||
GD.PushError("FloatingTextManager: FloatingTextScene is not set!");
|
||||
return;
|
||||
}
|
||||
|
||||
var popup = FloatingTextScene.Instantiate<FloatingText>();
|
||||
GetTree().CurrentScene.AddChild(popup);
|
||||
popup.Show(text, position, color);
|
||||
}
|
||||
}
|
1
Autoloads/FloatingTextManager.cs.uid
Normal file
1
Autoloads/FloatingTextManager.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://cobgfsr3gw7cn
|
@@ -1,9 +1,9 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Godot;
|
||||
using Godot.Collections;
|
||||
using Mr.BrickAdventures.scripts.components;
|
||||
using Mr.BrickAdventures.scripts.Resources;
|
||||
using Double = System.Double;
|
||||
|
||||
namespace Mr.BrickAdventures.Autoloads;
|
||||
|
||||
@@ -18,6 +18,8 @@ public partial class GameManager : Node
|
||||
|
||||
private List<Node> _sceneNodes = [];
|
||||
private PlayerController _player;
|
||||
private SpeedRunManager _speedRunManager;
|
||||
private EventBus _eventBus;
|
||||
|
||||
[Export]
|
||||
public Dictionary PlayerState { get; set; } = new()
|
||||
@@ -50,6 +52,12 @@ public partial class GameManager : Node
|
||||
_sceneNodes.Clear();
|
||||
}
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
_speedRunManager = GetNode<SpeedRunManager>("/root/SpeedRunManager");
|
||||
_eventBus = GetNode<EventBus>("/root/EventBus");
|
||||
}
|
||||
|
||||
private void OnNodeAdded(Node node)
|
||||
{
|
||||
_sceneNodes.Add(node);
|
||||
@@ -58,6 +66,10 @@ public partial class GameManager : Node
|
||||
private void OnNodeRemoved(Node node)
|
||||
{
|
||||
_sceneNodes.Remove(node);
|
||||
if (node == _player)
|
||||
{
|
||||
_player = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void AddCoins(int amount)
|
||||
@@ -129,7 +141,8 @@ public partial class GameManager : Node
|
||||
{ "current_level", 0 },
|
||||
{ "completed_levels", new Array<int>() },
|
||||
{ "unlocked_levels", new Array<int>() {0}},
|
||||
{ "unlocked_skills", new Array<SkillData>() }
|
||||
{ "unlocked_skills", new Array<SkillData>() },
|
||||
{ "statistics", new Godot.Collections.Dictionary<string, Variant>()}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -147,6 +160,7 @@ public partial class GameManager : Node
|
||||
{
|
||||
PlayerState["current_level"] = next;
|
||||
GetTree().ChangeSceneToPacked(LevelScenes[next]);
|
||||
_eventBus.EmitSignal(EventBus.SignalName.LevelStarted, next, GetTree().CurrentScene);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -183,6 +197,9 @@ public partial class GameManager : Node
|
||||
{
|
||||
ResetPlayerState();
|
||||
ResetCurrentSessionState();
|
||||
|
||||
_speedRunManager?.StartTimer();
|
||||
|
||||
GetTree().ChangeSceneToPacked(LevelScenes[0]);
|
||||
GetNode<SaveSystem>("/root/SaveSystem").SaveGame();
|
||||
}
|
||||
@@ -208,10 +225,14 @@ public partial class GameManager : Node
|
||||
{
|
||||
var levelIndex = (int)PlayerState["current_level"];
|
||||
MarkLevelComplete(levelIndex);
|
||||
|
||||
AddCoins((int)CurrentSessionState["coins_collected"]);
|
||||
foreach (var s in (Array)CurrentSessionState["skills_unlocked"])
|
||||
UnlockSkill((SkillData)s);
|
||||
|
||||
var completionTime = _speedRunManager?.GetCurrentLevelTime() ?? 0.0;
|
||||
_eventBus.EmitSignal(EventBus.SignalName.LevelCompleted, levelIndex, GetTree().CurrentScene, completionTime);
|
||||
|
||||
ResetCurrentSessionState();
|
||||
TryToGoToNextLevel();
|
||||
GetNode<SaveSystem>("/root/SaveSystem").SaveGame();
|
||||
@@ -231,7 +252,9 @@ public partial class GameManager : Node
|
||||
|
||||
public PlayerController GetPlayer()
|
||||
{
|
||||
if (_player != null) return _player;
|
||||
if (_player != null && IsInstanceValid(_player)) return _player;
|
||||
|
||||
_player = null;
|
||||
|
||||
foreach (var node in _sceneNodes)
|
||||
{
|
||||
|
112
Autoloads/GhostManager.cs
Normal file
112
Autoloads/GhostManager.cs
Normal file
@@ -0,0 +1,112 @@
|
||||
using System.Collections.Generic;
|
||||
using Godot;
|
||||
using Godot.Collections;
|
||||
using Mr.BrickAdventures.scripts;
|
||||
|
||||
namespace Mr.BrickAdventures.Autoloads;
|
||||
|
||||
public partial class GhostManager : Node
|
||||
{
|
||||
[Export] private PackedScene GhostPlayerScene { get; set; }
|
||||
|
||||
public bool IsRecording { get; private set; } = false;
|
||||
public bool IsPlaybackEnabled { get; private set; } = true;
|
||||
|
||||
private List<GhostFrame> _currentRecording = [];
|
||||
private double _startTime = 0.0;
|
||||
private int _currentLevelIndex = -1;
|
||||
|
||||
public void StartRecording(int levelIndex)
|
||||
{
|
||||
if (!IsPlaybackEnabled) return;
|
||||
|
||||
_currentLevelIndex = levelIndex;
|
||||
_currentRecording.Clear();
|
||||
_startTime = Time.GetTicksMsec() / 1000.0;
|
||||
IsRecording = true;
|
||||
GD.Print("Ghost recording started.");
|
||||
}
|
||||
|
||||
public void StopRecording(bool levelCompleted, double finalTime)
|
||||
{
|
||||
if (!IsRecording) return;
|
||||
IsRecording = false;
|
||||
|
||||
if (levelCompleted)
|
||||
{
|
||||
var bestTime = LoadBestTime(_currentLevelIndex);
|
||||
if (finalTime < bestTime)
|
||||
{
|
||||
SaveGhostData(_currentLevelIndex, finalTime);
|
||||
GD.Print($"New best ghost saved for level {_currentLevelIndex}. Time: {finalTime}");
|
||||
}
|
||||
}
|
||||
_currentRecording.Clear();
|
||||
}
|
||||
|
||||
public void RecordFrame(Vector2 position)
|
||||
{
|
||||
if (!IsRecording) return;
|
||||
|
||||
var frame = new GhostFrame
|
||||
{
|
||||
Timestamp = (Time.GetTicksMsec() / 1000.0) - _startTime,
|
||||
Position = position
|
||||
};
|
||||
_currentRecording.Add(frame);
|
||||
}
|
||||
|
||||
public void SpawnGhostPlayer(int levelIndex, Node parent)
|
||||
{
|
||||
if (!IsPlaybackEnabled || GhostPlayerScene == null) return;
|
||||
|
||||
var ghostData = LoadGhostData(levelIndex);
|
||||
if (ghostData.Count > 0)
|
||||
{
|
||||
var ghostPlayer = GhostPlayerScene.Instantiate<GhostPlayer>();
|
||||
parent.AddChild(ghostPlayer);
|
||||
ghostPlayer.StartPlayback(ghostData);
|
||||
GD.Print($"Ghost player spawned for level {levelIndex}.");
|
||||
}
|
||||
}
|
||||
|
||||
private void SaveGhostData(int levelIndex, double time)
|
||||
{
|
||||
var path = $"user://ghost_level_{levelIndex}.dat";
|
||||
using var file = FileAccess.Open(path, FileAccess.ModeFlags.Write);
|
||||
|
||||
var dataToSave = new Godot.Collections.Dictionary
|
||||
{
|
||||
{ "time", time },
|
||||
{ "frames", _currentRecording.ToArray() }
|
||||
};
|
||||
file.StoreVar(dataToSave);
|
||||
}
|
||||
|
||||
private List<GhostFrame> LoadGhostData(int levelIndex)
|
||||
{
|
||||
var path = $"user://ghost_level_{levelIndex}.dat";
|
||||
if (!FileAccess.FileExists(path)) return [];
|
||||
|
||||
using var file = FileAccess.Open(path, FileAccess.ModeFlags.Read);
|
||||
var savedData = (Dictionary)file.GetVar();
|
||||
var framesArray = (Array)savedData["frames"];
|
||||
|
||||
var frames = new List<GhostFrame>();
|
||||
foreach (var obj in framesArray)
|
||||
{
|
||||
frames.Add((GhostFrame)obj);
|
||||
}
|
||||
return frames;
|
||||
}
|
||||
|
||||
private double LoadBestTime(int levelIndex)
|
||||
{
|
||||
var path = $"user://ghost_level_{levelIndex}.dat";
|
||||
if (!FileAccess.FileExists(path)) return double.MaxValue;
|
||||
|
||||
using var file = FileAccess.Open(path, FileAccess.ModeFlags.Read);
|
||||
var data = (Dictionary)file.GetVar();
|
||||
return (double)data["time"];
|
||||
}
|
||||
}
|
1
Autoloads/GhostManager.cs.uid
Normal file
1
Autoloads/GhostManager.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://cgmuod4p2hg5h
|
@@ -1,26 +1,76 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Godot;
|
||||
using Godot.Collections;
|
||||
using Mr.BrickAdventures.Autoloads;
|
||||
using Mr.BrickAdventures.scripts.components;
|
||||
using Mr.BrickAdventures.scripts.interfaces;
|
||||
using Mr.BrickAdventures.scripts.Resources;
|
||||
|
||||
namespace Mr.BrickAdventures.scripts;
|
||||
namespace Mr.BrickAdventures.Autoloads;
|
||||
|
||||
public partial class SkillManager : Node
|
||||
{
|
||||
private GameManager _gameManager;
|
||||
private PlayerController _player;
|
||||
|
||||
[Export] public Array<SkillData> AvailableSkills { get; set; } = [];
|
||||
|
||||
public Dictionary ActiveComponents { get; private set; } = new();
|
||||
|
||||
[Signal]
|
||||
public delegate void ActiveThrowSkillChangedEventHandler(BrickThrowComponent throwComponent);
|
||||
[Signal]
|
||||
public delegate void SkillRemovedEventHandler(SkillData skillData);
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
_gameManager = GetNode<GameManager>("/root/GameManager");
|
||||
ApplyUnlockedSkills();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called by the PlayerController from its _Ready method to register itself with the manager.
|
||||
/// </summary>
|
||||
public void RegisterPlayer(PlayerController player)
|
||||
{
|
||||
if (_player == player) return;
|
||||
|
||||
// If a player is already registered (e.g., from a previous scene), unregister it first.
|
||||
if (_player != null && IsInstanceValid(_player))
|
||||
{
|
||||
UnregisterPlayer();
|
||||
}
|
||||
|
||||
_player = player;
|
||||
if (_player != null)
|
||||
{
|
||||
// Automatically unregister when the player node is removed from the scene.
|
||||
_player.TreeExiting += UnregisterPlayer;
|
||||
ApplyUnlockedSkills();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Cleans up skills and references related to the current player.
|
||||
/// </summary>
|
||||
private void UnregisterPlayer()
|
||||
{
|
||||
if (_player != null && IsInstanceValid(_player))
|
||||
{
|
||||
_player.TreeExiting -= UnregisterPlayer;
|
||||
RemoveAllActiveSkills();
|
||||
}
|
||||
_player = null;
|
||||
}
|
||||
|
||||
public void AddSkill(SkillData skillData)
|
||||
{
|
||||
// Ensure a valid player is registered before adding a skill.
|
||||
if (_player == null || !IsInstanceValid(_player))
|
||||
{
|
||||
GD.Print("SkillManager: Player not available to add skill.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (ActiveComponents.ContainsKey(skillData.Name))
|
||||
return;
|
||||
|
||||
@@ -38,6 +88,7 @@ public partial class SkillManager : Node
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Remove other throw skills if a new one is added
|
||||
if (data is { Type: SkillType.Throw })
|
||||
RemoveSkill(data.Name);
|
||||
}
|
||||
@@ -46,7 +97,8 @@ public partial class SkillManager : Node
|
||||
var instance = skillData.Node.Instantiate();
|
||||
if (instance is ISkill skill)
|
||||
{
|
||||
skill.Initialize(Owner);
|
||||
// Initialize the skill with the registered player instance.
|
||||
skill.Initialize(_player, skillData);
|
||||
skill.Activate();
|
||||
}
|
||||
else
|
||||
@@ -56,8 +108,14 @@ public partial class SkillManager : Node
|
||||
return;
|
||||
}
|
||||
|
||||
Owner.AddChild(instance);
|
||||
// Add the skill node as a child of the player.
|
||||
_player.AddChild(instance);
|
||||
ActiveComponents[skillData.Name] = instance;
|
||||
|
||||
if (instance is BrickThrowComponent btc)
|
||||
{
|
||||
EmitSignalActiveThrowSkillChanged(btc);
|
||||
}
|
||||
}
|
||||
|
||||
public void RemoveSkill(string skillName)
|
||||
@@ -65,6 +123,11 @@ public partial class SkillManager : Node
|
||||
if (!ActiveComponents.TryGetValue(skillName, out var component))
|
||||
return;
|
||||
|
||||
if (component.AsGodotObject() is BrickThrowComponent)
|
||||
{
|
||||
EmitSignalActiveThrowSkillChanged(null);
|
||||
}
|
||||
|
||||
var inst = (Node)component;
|
||||
if (inst is ISkill skill)
|
||||
{
|
||||
@@ -75,7 +138,7 @@ public partial class SkillManager : Node
|
||||
inst.QueueFree();
|
||||
|
||||
var skills = _gameManager.GetUnlockedSkills();
|
||||
foreach (SkillData s in skills)
|
||||
foreach (var s in skills)
|
||||
{
|
||||
if (s.Name == skillName)
|
||||
{
|
||||
@@ -84,10 +147,26 @@ public partial class SkillManager : Node
|
||||
}
|
||||
}
|
||||
ActiveComponents.Remove(skillName);
|
||||
var sd = GetSkillByName(skillName);
|
||||
if (sd != null) EmitSignalSkillRemoved(sd);
|
||||
}
|
||||
|
||||
private void RemoveAllActiveSkills()
|
||||
{
|
||||
// Create a copy of keys to avoid modification during iteration
|
||||
var keys = ActiveComponents.Keys.ToArray();
|
||||
var skillNames = keys.Select(key => key.ToString()).ToList();
|
||||
|
||||
foreach (var skillName in skillNames)
|
||||
{
|
||||
RemoveSkill(skillName);
|
||||
}
|
||||
}
|
||||
|
||||
public void ApplyUnlockedSkills()
|
||||
{
|
||||
if (_player == null || !IsInstanceValid(_player)) return;
|
||||
|
||||
foreach (var sd in AvailableSkills)
|
||||
{
|
||||
if (_gameManager.IsSkillUnlocked(sd))
|
1
Autoloads/SkillManager.cs.uid
Normal file
1
Autoloads/SkillManager.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dru77vj07e18s
|
62
Autoloads/SpeedRunManager.cs
Normal file
62
Autoloads/SpeedRunManager.cs
Normal file
@@ -0,0 +1,62 @@
|
||||
using System.Collections.Generic;
|
||||
using Godot;
|
||||
|
||||
namespace Mr.BrickAdventures.Autoloads;
|
||||
|
||||
public partial class SpeedRunManager : Node
|
||||
{
|
||||
public bool IsRunning { get; private set; } = false;
|
||||
public bool IsVisible { get; private set; } = false;
|
||||
|
||||
private double _startTime;
|
||||
private double _levelStartTime;
|
||||
private List<double> _splits = [];
|
||||
|
||||
[Signal] public delegate void TimeUpdatedEventHandler(double totalTime, double levelTime);
|
||||
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
if (!IsRunning || !IsVisible) return;
|
||||
|
||||
EmitSignalTimeUpdated(GetCurrentTotalTime(), GetCurrentLevelTime());
|
||||
}
|
||||
|
||||
public void StartTimer()
|
||||
{
|
||||
_startTime = Time.GetTicksMsec() / 1000.0;
|
||||
_levelStartTime = _startTime;
|
||||
_splits.Clear();
|
||||
IsRunning = true;
|
||||
GD.Print("Speedrun timer started.");
|
||||
}
|
||||
|
||||
public void StopTimer()
|
||||
{
|
||||
if (!IsRunning) return;
|
||||
IsRunning = false;
|
||||
var finalTime = GetCurrentTotalTime();
|
||||
GD.Print($"Speedrun finished. Final time: {FormatTime(finalTime)}");
|
||||
|
||||
// Save personal best if applicable
|
||||
}
|
||||
|
||||
public void Split()
|
||||
{
|
||||
if (!IsRunning) return;
|
||||
|
||||
var now = Time.GetTicksMsec() / 1000.0;
|
||||
var splitTime = now - _levelStartTime;
|
||||
_splits.Add(splitTime);
|
||||
_levelStartTime = now;
|
||||
GD.Print($"Split recorded: {FormatTime(splitTime)}");
|
||||
}
|
||||
|
||||
public double GetCurrentTotalTime() => IsRunning ? (Time.GetTicksMsec() / 1000.0) - _startTime : 0;
|
||||
public double GetCurrentLevelTime() => IsRunning ? (Time.GetTicksMsec() / 1000.0) - _levelStartTime : 0;
|
||||
|
||||
public static string FormatTime(double time)
|
||||
{
|
||||
var span = System.TimeSpan.FromSeconds(time);
|
||||
return $"{(int)span.TotalMinutes:00}:{span.Seconds:00}.{span.Milliseconds:000}";
|
||||
}
|
||||
}
|
1
Autoloads/SpeedRunManager.cs.uid
Normal file
1
Autoloads/SpeedRunManager.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://c6ohe36xw1h21
|
78
Autoloads/StatisticsManager.cs
Normal file
78
Autoloads/StatisticsManager.cs
Normal file
@@ -0,0 +1,78 @@
|
||||
using Godot;
|
||||
using Godot.Collections;
|
||||
|
||||
namespace Mr.BrickAdventures.Autoloads;
|
||||
|
||||
public partial class StatisticsManager : Node
|
||||
{
|
||||
private GameManager _gameManager;
|
||||
private AchievementManager _achievementManager;
|
||||
private Dictionary<string, Variant> _stats = new();
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
_gameManager = GetNode<GameManager>("/root/GameManager");
|
||||
_achievementManager = GetNode<AchievementManager>("/root/AchievementManager");
|
||||
LoadStatistics();
|
||||
}
|
||||
|
||||
private void LoadStatistics()
|
||||
{
|
||||
if (_gameManager.PlayerState.TryGetValue("statistics", out var statsObj))
|
||||
{
|
||||
_stats = (Dictionary<string, Variant>)statsObj;
|
||||
}
|
||||
else
|
||||
{
|
||||
_stats = new Dictionary<string, Variant>();
|
||||
_gameManager.PlayerState["statistics"] = _stats;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Increases a numerical statistic by a given amount.
|
||||
/// </summary>
|
||||
public void IncrementStat(string statName, int amount = 1)
|
||||
{
|
||||
if (_stats.TryGetValue(statName, out var currentValue))
|
||||
{
|
||||
_stats[statName] = (int)currentValue + amount;
|
||||
}
|
||||
else
|
||||
{
|
||||
_stats[statName] = amount;
|
||||
}
|
||||
GD.Print($"Stat '{statName}' updated to: {_stats[statName]}");
|
||||
CheckAchievementsForStat(statName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the value of a statistic.
|
||||
/// </summary>
|
||||
public Variant GetStat(string statName, Variant defaultValue = default)
|
||||
{
|
||||
return _stats.TryGetValue(statName, out var value) ? value : defaultValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks if the updated stat meets the criteria for any achievements.
|
||||
/// </summary>
|
||||
private void CheckAchievementsForStat(string statName)
|
||||
{
|
||||
switch (statName)
|
||||
{
|
||||
case "enemies_defeated":
|
||||
if ((int)GetStat(statName, 0) >= 100)
|
||||
{
|
||||
_achievementManager.UnlockAchievement("slayer_100_enemies");
|
||||
}
|
||||
break;
|
||||
case "jumps_made":
|
||||
if ((int)GetStat(statName, 0) >= 1000)
|
||||
{
|
||||
_achievementManager.UnlockAchievement("super_jumper");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
1
Autoloads/StatisticsManager.cs.uid
Normal file
1
Autoloads/StatisticsManager.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://c5p3l2mhkw0p4
|
77
Autoloads/SteamManager.cs
Normal file
77
Autoloads/SteamManager.cs
Normal file
@@ -0,0 +1,77 @@
|
||||
using System;
|
||||
using Godot;
|
||||
using Steamworks;
|
||||
using Steamworks.Data;
|
||||
|
||||
namespace Mr.BrickAdventures.Autoloads;
|
||||
|
||||
public partial class SteamManager : Node
|
||||
{
|
||||
private const uint AppId = 3575090;
|
||||
|
||||
public static string PlayerName { get; private set; } = "Player";
|
||||
public static bool IsSteamInitialized { get; private set; } = false;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
try
|
||||
{
|
||||
SteamClient.Init(AppId);
|
||||
IsSteamInitialized = true;
|
||||
|
||||
PlayerName = SteamClient.Name;
|
||||
|
||||
GD.Print($"Steam initialized successfully for user: {PlayerName}");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
GD.PushError("Failed to initialize Steamworks. Is Steam running?");
|
||||
GD.PushError(e.Message);
|
||||
IsSteamInitialized = false;
|
||||
}
|
||||
}
|
||||
|
||||
public override void _Process(double delta)
|
||||
{
|
||||
if (IsSteamInitialized) SteamClient.RunCallbacks();
|
||||
}
|
||||
|
||||
public override void _Notification(int what)
|
||||
{
|
||||
if (what == NotificationWMCloseRequest)
|
||||
{
|
||||
if (IsSteamInitialized)
|
||||
{
|
||||
SteamClient.Shutdown();
|
||||
}
|
||||
GetTree().Quit();
|
||||
}
|
||||
}
|
||||
|
||||
public static void UnlockAchievement(string achievementId)
|
||||
{
|
||||
if (!IsSteamInitialized)
|
||||
{
|
||||
GD.Print($"Steam not initialized. Cannot unlock achievement '{achievementId}'.");
|
||||
return;
|
||||
}
|
||||
|
||||
var ach = new Achievement(achievementId);
|
||||
|
||||
if (ach.State)
|
||||
{
|
||||
GD.Print($"Achievement '{achievementId}' is already unlocked.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (ach.Trigger())
|
||||
{
|
||||
SteamUserStats.StoreStats();
|
||||
GD.Print($"Successfully triggered achievement: {ach.Name} ({ach.Identifier})");
|
||||
}
|
||||
else
|
||||
{
|
||||
GD.PrintErr($"Failed to trigger achievement: {achievementId}");
|
||||
}
|
||||
}
|
||||
}
|
1
Autoloads/SteamManager.cs.uid
Normal file
1
Autoloads/SteamManager.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://b5abjlnbia63q
|
@@ -5,6 +5,9 @@
|
||||
<RootNamespace>Mr.BrickAdventures</RootNamespace>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Facepunch.Steamworks" Version="2.3.3" />
|
||||
<PackageReference Include="Facepunch.Steamworks.Dlls" Version="2.3.2" />
|
||||
<PackageReference Include="Facepunch.Steamworks.Library" Version="2.3.3" />
|
||||
<PackageReference Include="LimboConsole.Sharp" Version="0.0.1-beta-008" />
|
||||
</ItemGroup>
|
||||
</Project>
|
@@ -1,9 +1,13 @@
|
||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACamera2D_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fa2e12a1a67ad701a97608de6be85250e3e353951ecf8058a02c703490c753_003FCamera2D_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACanvasItem_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003Fef7b819b226fab796d1dfe66d415dd7510bcac87675020ddb8f03a828e763_003FCanvasItem_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACecovym_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003Ftmp_003FJetBrainsPerUserTemp_002D1000_002D1_003FSandboxFiles_003FSadijuw_003FCecovym_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACharacterBody2D_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fbba0bbd7a98ee58286e9484fbe86e01afff6232283f6efd3556eb7116453_003FCharacterBody2D_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACollisionShape2D_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F2ca9b7334678f5c97c7c2a9fbe4837be71cae11b6a30408dd4791b18f997e4a_003FCollisionShape2D_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACSharpInstanceBridge_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F94701b444afa4c3d9a7a53ebcaa35fd1583c00_003F14_003F4b4ade3f_003FCSharpInstanceBridge_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADelegateUtils_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F94701b444afa4c3d9a7a53ebcaa35fd1583c00_003F08_003F45f75e10_003FDelegateUtils_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADictionary_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F94701b444afa4c3d9a7a53ebcaa35fd1583c00_003F47_003Fda1d8d31_003FDictionary_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AList_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fe747192abb38e2df82cbdb37e721567726f559914a7b81f8b26ba537de632f4_003FList_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMr_002EBrickAdventures_002Escripts_002Ecomponents_002ECollectableComponent_005FScriptSignals_002Egenerated_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E2_003Fresharper_002Dhost_003FSourcesCache_003F80d9408eb7280c15eb4a12b61cdf8f7f1b0c5a2_003FMr_002EBrickAdventures_002Escripts_002Ecomponents_002ECollectableComponent_005FScriptSignals_002Egenerated_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ANode2D_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F86db9cd834346aad02d74c1b66dd9c64d6ef3147435dd9c9c9477b48f7_003FNode2D_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARectangleShape2D_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003Fa1cc98873548652da0c14ecefa4737431426fcbb24a7f0641e3d9c266c3_003FRectangleShape2D_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||
|
13
achievements/level_complete_1.tres
Normal file
13
achievements/level_complete_1.tres
Normal file
@@ -0,0 +1,13 @@
|
||||
[gd_resource type="Resource" script_class="AchievementResource" load_steps=3 format=3 uid="uid://3odfkm1ig5"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://cebeyr4wnibvk" path="res://sprites/achievement.png" id="1_usw25"]
|
||||
[ext_resource type="Script" uid="uid://duib5phrmpro5" path="res://scripts/Resources/AchievementResource.cs" id="2_n7ktn"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("2_n7ktn")
|
||||
Id = "level_complete_1"
|
||||
DisplayName = "Complete level 1"
|
||||
Description = ""
|
||||
Icon = ExtResource("1_usw25")
|
||||
IsSecret = false
|
||||
metadata/_custom_type_script = "uid://duib5phrmpro5"
|
@@ -1,22 +0,0 @@
|
||||
[configuration]
|
||||
entry_symbol = "godotsteam_init"
|
||||
compatibility_minimum = "4.4"
|
||||
|
||||
[libraries]
|
||||
macos.debug = "res://addons/godotsteam/osx/libgodotsteam.macos.template_debug.framework"
|
||||
macos.release = "res://addons/godotsteam/osx/libgodotsteam.macos.template_release.framework"
|
||||
windows.debug.x86_64 = "res://addons/godotsteam/win64/libgodotsteam.windows.template_debug.x86_64.dll"
|
||||
windows.debug.x86_32 = "res://addons/godotsteam/win32/libgodotsteam.windows.template_debug.x86_32.dll"
|
||||
windows.release.x86_64 = "res://addons/godotsteam/win64/libgodotsteam.windows.template_release.x86_64.dll"
|
||||
windows.release.x86_32 = "res://addons/godotsteam/win32/libgodotsteam.windows.template_release.x86_32.dll"
|
||||
linux.debug.x86_64 = "res://addons/godotsteam/linux64/libgodotsteam.linux.template_debug.x86_64.so"
|
||||
linux.debug.x86_32 = "res://addons/godotsteam/linux32/libgodotsteam.linux.template_debug.x86_32.so"
|
||||
linux.release.x86_64 = "res://addons/godotsteam/linux64/libgodotsteam.linux.template_release.x86_64.so"
|
||||
linux.release.x86_32 = "res://addons/godotsteam/linux32/libgodotsteam.linux.template_release.x86_32.so"
|
||||
|
||||
[dependencies]
|
||||
macos.universal = { "res://addons/godotsteam/osx/libsteam_api.dylib": "" }
|
||||
windows.x86_64 = { "res://addons/godotsteam/win64/steam_api64.dll": "" }
|
||||
windows.x86_32 = { "res://addons/godotsteam/win32/steam_api.dll": "" }
|
||||
linux.x86_64 = { "res://addons/godotsteam/linux64/libsteam_api.so": "" }
|
||||
linux.x86_32 = { "res://addons/godotsteam/linux32/libsteam_api.so": "" }
|
@@ -1 +0,0 @@
|
||||
uid://cbt61wgh4qe5l
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,26 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>libgodotsteam.debug</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>org.godotsteam.godotsteam</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>libgodotsteam.debug</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>4.15</string>
|
||||
<key>CFBundleSupportedPlatforms</key>
|
||||
<array>
|
||||
<string>MacOSX</string>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>4.15</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.12</string>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
Binary file not shown.
@@ -1,26 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>libgodotsteam</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>org.godotsteam.godotsteam</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>libgodotsteam</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>4.15</string>
|
||||
<key>CFBundleSupportedPlatforms</key>
|
||||
<array>
|
||||
<string>MacOSX</string>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>4.15</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>10.12</string>
|
||||
</dict>
|
||||
</plist>
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -6,11 +6,10 @@ runnable=true
|
||||
advanced_options=true
|
||||
dedicated_server=false
|
||||
custom_features=""
|
||||
export_filter="scenes"
|
||||
export_files=PackedStringArray("res://scenes/test.tscn", "res://objects/game_manager.tscn")
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
export_path="builds/optimized_for_size/Mr. Brick Adventures.exe"
|
||||
export_path="builds/windows/Mr. Brick Adventures.exe"
|
||||
patches=PackedStringArray()
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
@@ -22,7 +21,7 @@ script_export_mode=2
|
||||
[preset.0.options]
|
||||
|
||||
custom_template/debug=""
|
||||
custom_template/release="D:/Dev/godot/bin/godot.windows.template_release.x86_64.exe"
|
||||
custom_template/release=""
|
||||
debug/export_console_wrapper=1
|
||||
binary_format/embed_pck=true
|
||||
texture_format/s3tc_bptc=true
|
||||
@@ -65,6 +64,9 @@ Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorActi
|
||||
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
|
||||
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
|
||||
Remove-Item -Recurse -Force '{temp_dir}'"
|
||||
dotnet/include_scripts_content=false
|
||||
dotnet/include_debug_symbols=true
|
||||
dotnet/embed_build_outputs=false
|
||||
|
||||
[preset.1]
|
||||
|
||||
@@ -109,6 +111,9 @@ progressive_web_app/icon_144x144=""
|
||||
progressive_web_app/icon_180x180=""
|
||||
progressive_web_app/icon_512x512=""
|
||||
progressive_web_app/background_color=Color(0, 0, 0, 1)
|
||||
dotnet/include_scripts_content=false
|
||||
dotnet/include_debug_symbols=true
|
||||
dotnet/embed_build_outputs=false
|
||||
|
||||
[preset.2]
|
||||
|
||||
@@ -151,3 +156,6 @@ unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
|
||||
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
|
||||
kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
|
||||
rm -rf \"{temp_dir}\""
|
||||
dotnet/include_scripts_content=false
|
||||
dotnet/include_debug_symbols=true
|
||||
dotnet/embed_build_outputs=false
|
||||
|
8
objects/achievement_manager.tscn
Normal file
8
objects/achievement_manager.tscn
Normal file
@@ -0,0 +1,8 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://bjdhgdolcxxbq"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c4vvuqnx5y33u" path="res://Autoloads/AchievementManager.cs" id="1_lomle"]
|
||||
[ext_resource type="PackedScene" uid="uid://tgaadui3lvdc" path="res://objects/ui/achievement_popup.tscn" id="2_k3wdv"]
|
||||
|
||||
[node name="AchievementManager" type="Node"]
|
||||
script = ExtResource("1_lomle")
|
||||
AchievementPopupScene = ExtResource("2_k3wdv")
|
@@ -1,6 +0,0 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://rnpsa2u74nio"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://deguukal87gcb" path="res://scripts/achievements.gd" id="1_1itsx"]
|
||||
|
||||
[node name="Achievements" type="Node"]
|
||||
script = ExtResource("1_1itsx")
|
179
objects/entities/basic_enemy.tscn
Normal file
179
objects/entities/basic_enemy.tscn
Normal file
@@ -0,0 +1,179 @@
|
||||
[gd_scene load_steps=26 format=3 uid="uid://bockkmyn8il4c"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://bs4xvm4qkurpr" path="res://shaders/hit_flash.tres" id="1_hh6y0"]
|
||||
[ext_resource type="Texture2D" uid="uid://duxx56wxmjoxd" path="res://sprites/basic_enemy.png" id="2_laaj3"]
|
||||
[ext_resource type="Script" uid="uid://dgb8bqcri7nsj" path="res://scripts/components/HealthComponent.cs" id="3_n6phc"]
|
||||
[ext_resource type="Script" uid="uid://2i7p7v135u7c" path="res://scripts/components/DamageComponent.cs" id="4_t0yic"]
|
||||
[ext_resource type="Script" uid="uid://d2hrr8fruho1d" path="res://scripts/components/SideToSideMovementComponent.cs" id="5_h333r"]
|
||||
[ext_resource type="Script" uid="uid://cfdugoeduudar" path="res://scripts/components/EnemyDeathComponent.cs" id="8_dbywb"]
|
||||
[ext_resource type="Script" uid="uid://dvyd26ricriql" path="res://scripts/components/FlashingComponent.cs" id="9_bph85"]
|
||||
[ext_resource type="Script" uid="uid://bo506l4x0808e" path="res://scripts/components/HitComponent.cs" id="10_4upf6"]
|
||||
[ext_resource type="Script" uid="uid://t8rsvwdwt8ea" path="res://scripts/components/StatusEffectComponent.cs" id="11_28moq"]
|
||||
[ext_resource type="Script" uid="uid://cxuig4xh8nfov" path="res://scripts/components/FireEffectComponent.cs" id="12_dgcex"]
|
||||
[ext_resource type="Script" uid="uid://d1388lhp2gpgr" path="res://scripts/components/IceEffectComponent.cs" id="13_kga14"]
|
||||
[ext_resource type="AudioStream" uid="uid://b3tsqhr06pbrs" path="res://sfx/enemy_hurt.wav" id="14_ndloc"]
|
||||
[ext_resource type="AudioStream" uid="uid://dyev46uqusimi" path="res://sfx/shoot.wav" id="15_cg63s"]
|
||||
[ext_resource type="PackedScene" uid="uid://dx80ivlvuuew4" path="res://objects/fxs/fire_fx.tscn" id="16_jqaq6"]
|
||||
[ext_resource type="Script" uid="uid://cgfynrn68lp12" path="res://scripts/components/KnockbackComponent.cs" id="17_ih01d"]
|
||||
[ext_resource type="PackedScene" uid="uid://ck6nml06tm6ue" path="res://objects/fxs/ice_fx.tscn" id="17_o7qsb"]
|
||||
[ext_resource type="PackedScene" uid="uid://b12tppjkkqpt4" path="res://objects/fxs/hit_particles.tscn" id="18_v861c"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_pwwji"]
|
||||
size = Vector2(25, 31)
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_j18j0"]
|
||||
shader = ExtResource("1_hh6y0")
|
||||
shader_parameter/enabled = false
|
||||
shader_parameter/tint = Color(1, 1, 1, 1)
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_ejbqt"]
|
||||
size = Vector2(34, 31)
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_qb72p"]
|
||||
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0)
|
||||
|
||||
[sub_resource type="GradientTexture1D" id="GradientTexture1D_lvsna"]
|
||||
gradient = SubResource("Gradient_qb72p")
|
||||
|
||||
[sub_resource type="Curve" id="Curve_82d6e"]
|
||||
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||
point_count = 2
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_pxaaa"]
|
||||
curve = SubResource("Curve_82d6e")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_pxaaa"]
|
||||
resource_local_to_scene = true
|
||||
lifetime_randomness = 1.0
|
||||
particle_flag_disable_z = true
|
||||
emission_shape = 1
|
||||
emission_sphere_radius = 8.0
|
||||
direction = Vector3(0.1, -0.5, 0)
|
||||
initial_velocity_min = 200.0
|
||||
initial_velocity_max = 400.0
|
||||
gravity = Vector3(0, 80, 0)
|
||||
damping_min = 400.0
|
||||
damping_max = 800.0
|
||||
scale_max = 3.0
|
||||
scale_curve = SubResource("CurveTexture_pxaaa")
|
||||
color = Color(0.635294, 1, 0.952941, 1)
|
||||
color_ramp = SubResource("GradientTexture1D_lvsna")
|
||||
|
||||
[node name="Enemy" type="CharacterBody2D"]
|
||||
collision_layer = 8
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
visible = false
|
||||
position = Vector2(-1.5, 0.5)
|
||||
shape = SubResource("RectangleShape2D_pwwji")
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
material = SubResource("ShaderMaterial_j18j0")
|
||||
texture = ExtResource("2_laaj3")
|
||||
|
||||
[node name="right bullet spawn" type="Node2D" parent="Sprite2D"]
|
||||
position = Vector2(16, 7)
|
||||
|
||||
[node name="left bullet spawn" type="Node2D" parent="Sprite2D"]
|
||||
position = Vector2(-17, 7)
|
||||
|
||||
[node name="HealthComponent" type="Node2D" parent="." node_paths=PackedStringArray("HurtSfx")]
|
||||
script = ExtResource("3_n6phc")
|
||||
HurtSfx = NodePath("../sfx_hurt")
|
||||
|
||||
[node name="DamageComponent" type="Node" parent="." node_paths=PackedStringArray("Area")]
|
||||
script = ExtResource("4_t0yic")
|
||||
Area = NodePath("../Hitbox")
|
||||
|
||||
[node name="SideToSideMovement" type="Node" parent="." node_paths=PackedStringArray("Sprite", "LeftRay", "RightRay", "LeftWallRay", "RightWallRay")]
|
||||
script = ExtResource("5_h333r")
|
||||
Sprite = NodePath("../Sprite2D")
|
||||
Speed = 60.0
|
||||
WaitTime = 0.5
|
||||
LeftRay = NodePath("../Left Ray")
|
||||
RightRay = NodePath("../Right Ray")
|
||||
LeftWallRay = NodePath("../Left Wall Ray")
|
||||
RightWallRay = NodePath("../Right Wall Ray")
|
||||
|
||||
[node name="EnemyDeathComponent" type="Node" parent="." node_paths=PackedStringArray("CollisionShape", "Health")]
|
||||
script = ExtResource("8_dbywb")
|
||||
TweenDuration = 0.1
|
||||
CollisionShape = NodePath("../Hitbox/CollisionShape2D")
|
||||
Health = NodePath("../HealthComponent")
|
||||
|
||||
[node name="Hitbox" type="Area2D" parent="."]
|
||||
collision_layer = 8
|
||||
collision_mask = 4
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
|
||||
visible = false
|
||||
position = Vector2(-2, 0.5)
|
||||
shape = SubResource("RectangleShape2D_ejbqt")
|
||||
debug_color = Color(0.913521, 0.265052, 0.323172, 0.42)
|
||||
|
||||
[node name="Left Ray" type="RayCast2D" parent="."]
|
||||
position = Vector2(-16, 13)
|
||||
target_position = Vector2(0, 8)
|
||||
|
||||
[node name="Left Wall Ray" type="RayCast2D" parent="."]
|
||||
position = Vector2(-16, 0)
|
||||
target_position = Vector2(-8, 0)
|
||||
|
||||
[node name="Right Ray" type="RayCast2D" parent="."]
|
||||
position = Vector2(16, 13)
|
||||
target_position = Vector2(0, 8)
|
||||
|
||||
[node name="Right Wall Ray" type="RayCast2D" parent="."]
|
||||
position = Vector2(16, 0)
|
||||
target_position = Vector2(8, 0)
|
||||
|
||||
[node name="FlashingComponent" type="Node" parent="." node_paths=PackedStringArray("Sprite", "HealthComponent")]
|
||||
process_mode = 3
|
||||
script = ExtResource("9_bph85")
|
||||
Sprite = NodePath("../Sprite2D")
|
||||
HealthComponent = NodePath("../HealthComponent")
|
||||
|
||||
[node name="HitComponent" type="Node" parent="." node_paths=PackedStringArray("Sprite", "Health", "HitFx")]
|
||||
script = ExtResource("10_4upf6")
|
||||
Sprite = NodePath("../Sprite2D")
|
||||
Health = NodePath("../HealthComponent")
|
||||
HitFx = NodePath("../HitParticles")
|
||||
|
||||
[node name="StatusEffectComponent" type="Node" parent="."]
|
||||
script = ExtResource("11_28moq")
|
||||
|
||||
[node name="FireEffectComponent" type="Node" parent="." node_paths=PackedStringArray("Health", "StatusEffectComponent", "FireFX")]
|
||||
script = ExtResource("12_dgcex")
|
||||
Health = NodePath("../HealthComponent")
|
||||
StatusEffectComponent = NodePath("../StatusEffectComponent")
|
||||
FireFX = NodePath("../FireFX")
|
||||
|
||||
[node name="IceEffectComponent" type="Node" parent="." node_paths=PackedStringArray("ComponentsToDisable", "StatusEffectComponent", "IceFx")]
|
||||
script = ExtResource("13_kga14")
|
||||
ComponentsToDisable = [NodePath("../SideToSideMovement"), null, NodePath("../DamageComponent")]
|
||||
StatusEffectComponent = NodePath("../StatusEffectComponent")
|
||||
IceFx = NodePath("../Ice FX")
|
||||
|
||||
[node name="sfx_hurt" type="AudioStreamPlayer2D" parent="."]
|
||||
stream = ExtResource("14_ndloc")
|
||||
bus = &"sfx"
|
||||
|
||||
[node name="sfx_shoot" type="AudioStreamPlayer2D" parent="."]
|
||||
stream = ExtResource("15_cg63s")
|
||||
bus = &"sfx"
|
||||
|
||||
[node name="FireFX" parent="." instance=ExtResource("16_jqaq6")]
|
||||
position = Vector2(0, 9)
|
||||
emitting = false
|
||||
amount = 2048
|
||||
|
||||
[node name="Ice FX" parent="." instance=ExtResource("17_o7qsb")]
|
||||
visible = false
|
||||
|
||||
[node name="HitParticles" parent="." instance=ExtResource("18_v861c")]
|
||||
position = Vector2(0, 1)
|
||||
process_material = SubResource("ParticleProcessMaterial_pxaaa")
|
||||
|
||||
[node name="KnockbackComponent" type="Node" parent="."]
|
||||
script = ExtResource("17_ih01d")
|
||||
metadata/_custom_type_script = "uid://cgfynrn68lp12"
|
31
objects/entities/bouncing_mushroom.tscn
Normal file
31
objects/entities/bouncing_mushroom.tscn
Normal file
@@ -0,0 +1,31 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://c0j1yun5s7kns"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://bu0yv6rktj221" path="res://sprites/bouncing_mushroom.png" id="1_t1exj"]
|
||||
[ext_resource type="Script" uid="uid://bgbnof7aeydmq" path="res://scripts/components/JumpPadComponent.cs" id="2_w2gbr"]
|
||||
[ext_resource type="PackedScene" uid="uid://qo2ngbnkix85" path="res://objects/fxs/bounce_gfx.tscn" id="3_w2gbr"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_ci3ij"]
|
||||
size = Vector2(22, 10)
|
||||
|
||||
[node name="Bouncing Mushrrom" type="Area2D"]
|
||||
modulate = Color(1.1, 1.1, 1.1, 1)
|
||||
collision_layer = 0
|
||||
collision_mask = 4
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(0, -13)
|
||||
shape = SubResource("RectangleShape2D_ci3ij")
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
position = Vector2(0, -8)
|
||||
texture = ExtResource("1_t1exj")
|
||||
hframes = 2
|
||||
|
||||
[node name="JumpPadComponent" type="Node" parent="." node_paths=PackedStringArray("Area", "Sprite", "Particles")]
|
||||
script = ExtResource("2_w2gbr")
|
||||
JumpForce = 600.0
|
||||
Area = NodePath("..")
|
||||
Sprite = NodePath("../Sprite2D")
|
||||
Particles = NodePath("../BounceGFX")
|
||||
|
||||
[node name="BounceGFX" parent="." instance=ExtResource("3_w2gbr")]
|
@@ -1,32 +1,33 @@
|
||||
[gd_scene load_steps=48 format=3 uid="uid://bqi5s710xb1ju"]
|
||||
[gd_scene load_steps=58 format=3 uid="uid://bqi5s710xb1ju"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://csel4s0e4g5uf" path="res://scripts/components/PlayerController.cs" id="1_yysbb"]
|
||||
[ext_resource type="Shader" uid="uid://bs4xvm4qkurpr" path="res://shaders/hit_flash.tres" id="2_lgb3u"]
|
||||
[ext_resource type="Script" uid="uid://btlm1f3l70il" path="res://scripts/components/PlatformMovementComponent.cs" id="2_o1ihh"]
|
||||
[ext_resource type="PackedScene" uid="uid://bcv8kx6bc7u5e" path="res://objects/movement_abilities/ground_ability.tscn" id="2_oefns"]
|
||||
[ext_resource type="Texture2D" uid="uid://jl1gwqchhpdc" path="res://sprites/left_eye.png" id="3_2srrh"]
|
||||
[ext_resource type="Script" uid="uid://cty54itmnudfm" path="res://scripts/components/ShipMovementComponent.cs" id="3_ur2y5"]
|
||||
[ext_resource type="PackedScene" uid="uid://d0r5edxnx5jqx" path="res://objects/movement_abilities/variable_jump_ability.tscn" id="3_bnap0"]
|
||||
[ext_resource type="Script" uid="uid://bf4yclropol43" path="res://scripts/components/Movement/GroundMovementAbility.cs" id="4_7til7"]
|
||||
[ext_resource type="Texture2D" uid="uid://iiawtnwmeny3" path="res://sprites/right_eye.png" id="4_ccn81"]
|
||||
[ext_resource type="PackedScene" uid="uid://cala7bpo1v4no" path="res://objects/movement_abilities/gravity_ability.tscn" id="4_qec3q"]
|
||||
[ext_resource type="PackedScene" uid="uid://bty3jq8u0pxkf" path="res://objects/movement_abilities/one_way_platform_ability.tscn" id="5_dhjci"]
|
||||
[ext_resource type="Texture2D" uid="uid://0l454rfplmqg" path="res://sprites/MrBrick_base-sheet.png" id="5_yysbb"]
|
||||
[ext_resource type="PackedScene" uid="uid://bu3vuxlrvoo1t" path="res://objects/movement_abilities/spaceship_ability.tscn" id="6_721q0"]
|
||||
[ext_resource type="Script" uid="uid://chgw53qwt7rt8" path="res://scripts/components/Movement/GravityAbility.cs" id="6_xuhvf"]
|
||||
[ext_resource type="Script" uid="uid://ccksp2e76s7sr" path="res://scripts/components/Movement/VariableJumpAbility.cs" id="7_bl1gx"]
|
||||
[ext_resource type="PackedScene" uid="uid://chjbi5mgtwhsh" path="res://objects/movement_abilities/wall_jump_ability.tscn" id="7_bnap0"]
|
||||
[ext_resource type="Script" uid="uid://ck6kmnbwhsttt" path="res://scripts/components/Movement/OneWayPlatformAbility.cs" id="7_uno3u"]
|
||||
[ext_resource type="Texture2D" uid="uid://dhkwyv6ayb5qb" path="res://sprites/flying_ship.png" id="8_6lsog"]
|
||||
[ext_resource type="PackedScene" uid="uid://dre1vit1m4d2n" path="res://objects/movement_abilities/grid_movement_ability.tscn" id="8_xuhvf"]
|
||||
[ext_resource type="Script" uid="uid://dy78ak8eykw6e" path="res://scripts/components/FlipComponent.cs" id="9_yysbb"]
|
||||
[ext_resource type="Script" uid="uid://mnjg3p0aw1ow" path="res://scripts/components/CanPickUpComponent.cs" id="10_yysbb"]
|
||||
[ext_resource type="Script" uid="uid://ccqb8kd5m0eh7" path="res://scripts/components/ScoreComponent.cs" id="11_o1ihh"]
|
||||
[ext_resource type="Script" uid="uid://dgb8bqcri7nsj" path="res://scripts/components/HealthComponent.cs" id="12_ur2y5"]
|
||||
[ext_resource type="Script" uid="uid://byw1legrv1ep2" path="res://scripts/components/PlayerDeathComponent.cs" id="13_7til7"]
|
||||
[ext_resource type="Script" uid="uid://cgfynrn68lp12" path="res://scripts/components/KnockbackComponent.cs" id="14_e5pae"]
|
||||
[ext_resource type="Script" uid="uid://cecelixl41t3j" path="res://scripts/components/InvulnerabilityComponent.cs" id="15_xuhvf"]
|
||||
[ext_resource type="Script" uid="uid://dvyd26ricriql" path="res://scripts/components/FlashingComponent.cs" id="16_uno3u"]
|
||||
[ext_resource type="Script" uid="uid://dtg6115je7b5s" path="res://scripts/components/StompDamageComponent.cs" id="17_bl1gx"]
|
||||
[ext_resource type="Script" uid="uid://di572axt0c3s8" path="res://scripts/SkillManager.cs" id="18_6lsog"]
|
||||
[ext_resource type="AudioStream" uid="uid://duj2q0rqytaxg" path="res://sfx/jump.wav" id="18_pysae"]
|
||||
[ext_resource type="AudioStream" uid="uid://bmfn6p88gy575" path="res://sfx/player_hurt.wav" id="19_7anly"]
|
||||
[ext_resource type="Script" uid="uid://d4crrfmbgxnqf" path="res://scripts/Resources/SkillData.cs" id="19_yysbb"]
|
||||
[ext_resource type="AudioStream" uid="uid://ycgtf6wj7mto" path="res://sfx/heal.wav" id="20_bptj5"]
|
||||
[ext_resource type="Resource" uid="uid://dw5ee2lpeypnb" path="res://resources/skills/brick_throw.tres" id="20_o1ihh"]
|
||||
[ext_resource type="Resource" uid="uid://cdp8sex36vdq2" path="res://resources/skills/explosive_brick.tres" id="21_ur2y5"]
|
||||
[ext_resource type="Resource" uid="uid://cr5lo4h8wm0jc" path="res://resources/skills/fire_brick.tres" id="22_7til7"]
|
||||
[ext_resource type="Resource" uid="uid://ceakv6oqob6m7" path="res://resources/skills/ice_brick.tres" id="23_e5pae"]
|
||||
[ext_resource type="Resource" uid="uid://d3bjre2etov1n" path="res://resources/skills/magnetic.tres" id="24_xuhvf"]
|
||||
[ext_resource type="Script" uid="uid://dlh5xcv2sy82s" path="res://scripts/components/SkillUnlockerComponent.cs" id="25_yysbb"]
|
||||
[ext_resource type="Script" uid="uid://bo506l4x0808e" path="res://scripts/components/HitComponent.cs" id="26_6n1ss"]
|
||||
[ext_resource type="Script" uid="uid://cjcc7fia15wu3" path="res://scripts/components/CanBeLaunchedComponent.cs" id="27_oefns"]
|
||||
@@ -36,8 +37,17 @@
|
||||
[ext_resource type="Script" uid="uid://dr3uv0j7n75s" path="res://scripts/components/ShipShooterComponent.cs" id="30_usc1p"]
|
||||
[ext_resource type="AudioStream" uid="uid://dyev46uqusimi" path="res://sfx/shoot.wav" id="32_x2b7c"]
|
||||
[ext_resource type="PackedScene" uid="uid://dtem8jgcyoqar" path="res://objects/entities/green_laser.tscn" id="36_oxudy"]
|
||||
[ext_resource type="Script" uid="uid://diw6opv6yutgi" path="res://scripts/components/KillPlayerOutOfScreenComponent.cs" id="37_qec3q"]
|
||||
[ext_resource type="Script" uid="uid://3qy7rm28q66a" path="res://scripts/components/ProgressiveDamageComponent.cs" id="38_dhjci"]
|
||||
[ext_resource type="Script" uid="uid://dupnaark1f7gm" path="res://scripts/components/ProgressiveDamageComponent.cs" id="38_dhjci"]
|
||||
[ext_resource type="Script" uid="uid://dssa2taiwktis" path="res://scripts/components/Movement/PlayerInputHandler.cs" id="42_e5pae"]
|
||||
[ext_resource type="Script" uid="uid://c00siqtssccr6" path="res://scripts/components/PacXonGridInteractor.cs" id="42_xuhvf"]
|
||||
[ext_resource type="Script" uid="uid://ceoxet1nqws8w" path="res://scripts/components/SpriteTilterComponent.cs" id="43_xuhvf"]
|
||||
[ext_resource type="Script" uid="uid://cmk4m7mplqnrm" path="res://scripts/components/PacXonTrailComponent.cs" id="44_uno3u"]
|
||||
[ext_resource type="PackedScene" uid="uid://de5emerpbiknb" path="res://objects/fxs/foot_step_gfx.tscn" id="45_bl1gx"]
|
||||
[ext_resource type="Script" uid="uid://d3ksrjt1ek4gi" path="res://scripts/components/FootstepGfx.cs" id="46_6n1ss"]
|
||||
[ext_resource type="Script" uid="uid://bpopfy6m4a0br" path="res://scripts/components/JumpGfxComponent.cs" id="47_oefns"]
|
||||
[ext_resource type="PackedScene" uid="uid://bqhondao5bm6k" path="res://objects/fxs/jump_cloud_fx.tscn" id="48_bnap0"]
|
||||
[ext_resource type="Script" uid="uid://b1h8r5irryxcx" path="res://scripts/components/PlayerSfxComponent.cs" id="49_qec3q"]
|
||||
[ext_resource type="Script" uid="uid://b2aanqykvdnev" path="res://scripts/components/PlayerGraphicsComponent.cs" id="50_dhjci"]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_xoue7"]
|
||||
shader = ExtResource("2_lgb3u")
|
||||
@@ -83,30 +93,40 @@ scale_curve = SubResource("CurveTexture_xoue7")
|
||||
color = Color(0.764706, 0.443137, 0, 1)
|
||||
color_ramp = SubResource("GradientTexture1D_lgb3u")
|
||||
|
||||
[node name="Brick Player" type="CharacterBody2D" node_paths=PackedStringArray("ShipSprite") groups=["player"]]
|
||||
[node name="Brick Player" type="CharacterBody2D" node_paths=PackedStringArray("MovementAbilitiesContainer") groups=["player"]]
|
||||
collision_layer = 4
|
||||
collision_mask = 43
|
||||
collision_mask = 107
|
||||
script = ExtResource("1_yysbb")
|
||||
MovementTypes = Dictionary[String, NodePath]({
|
||||
"platform": NodePath("Movements/PlatformMovement"),
|
||||
"ship": NodePath("Movements/ShipMovement")
|
||||
})
|
||||
ShipSprite = NodePath("Graphics/Ship")
|
||||
MovementAbilitiesContainer = NodePath("Movements")
|
||||
GroundMovementScene = ExtResource("2_oefns")
|
||||
JumpMovementScene = ExtResource("3_bnap0")
|
||||
GravityScene = ExtResource("4_qec3q")
|
||||
OneWayPlatformScene = ExtResource("5_dhjci")
|
||||
SpaceshipMovementScene = ExtResource("6_721q0")
|
||||
WallJumpScene = ExtResource("7_bnap0")
|
||||
GridMovementScene = ExtResource("8_xuhvf")
|
||||
metadata/_custom_type_script = "uid://csel4s0e4g5uf"
|
||||
|
||||
[node name="Movements" type="Node" parent="."]
|
||||
|
||||
[node name="PlatformMovement" type="Node2D" parent="Movements" node_paths=PackedStringArray("JumpSfx", "RotationTarget", "Body")]
|
||||
script = ExtResource("2_o1ihh")
|
||||
JumpSfx = NodePath("../../sfx_jump")
|
||||
RotationTarget = NodePath("../../Graphics/Root/Base")
|
||||
Body = NodePath("../..")
|
||||
[node name="GroundMovementAbility" type="Node" parent="Movements"]
|
||||
script = ExtResource("4_7til7")
|
||||
MaxSpeed = 376.0
|
||||
Friction = 2500.0
|
||||
metadata/_custom_type_script = "uid://bf4yclropol43"
|
||||
|
||||
[node name="ShipMovement" type="Node2D" parent="Movements" node_paths=PackedStringArray("Body")]
|
||||
script = ExtResource("3_ur2y5")
|
||||
MaxSpeed = 360.0
|
||||
Acceleration = 1200.0
|
||||
Friction = 800.0
|
||||
Body = NodePath("../..")
|
||||
[node name="GravityAbility" type="Node" parent="Movements"]
|
||||
script = ExtResource("6_xuhvf")
|
||||
metadata/_custom_type_script = "uid://chgw53qwt7rt8"
|
||||
|
||||
[node name="VariableJumpAbility" type="Node" parent="Movements"]
|
||||
script = ExtResource("7_bl1gx")
|
||||
JumpCutMultiplier = 0.507
|
||||
metadata/_custom_type_script = "uid://ccksp2e76s7sr"
|
||||
|
||||
[node name="OneWayPlatformAbility" type="Node" parent="Movements"]
|
||||
script = ExtResource("7_uno3u")
|
||||
metadata/_custom_type_script = "uid://ck6kmnbwhsttt"
|
||||
|
||||
[node name="Graphics" type="Node2D" parent="."]
|
||||
|
||||
@@ -137,11 +157,11 @@ visible = false
|
||||
position = Vector2(0, 0.5)
|
||||
shape = SubResource("RectangleShape2D_hdsg1")
|
||||
|
||||
[node name="FlipPlayerComponent" type="Node2D" parent="." node_paths=PackedStringArray("LeftEye", "RightEye", "PlatformMovement")]
|
||||
[node name="FlipPlayerComponent" type="Node2D" parent="." node_paths=PackedStringArray("LeftEye", "RightEye", "PlayerController")]
|
||||
script = ExtResource("9_yysbb")
|
||||
LeftEye = NodePath("../Graphics/Root/Left Eye")
|
||||
RightEye = NodePath("../Graphics/Root/Right Eye")
|
||||
PlatformMovement = NodePath("../Movements/PlatformMovement")
|
||||
PlayerController = NodePath("..")
|
||||
|
||||
[node name="StompDamageArea" type="Area2D" parent="."]
|
||||
collision_layer = 0
|
||||
@@ -169,12 +189,6 @@ script = ExtResource("13_7til7")
|
||||
DeathSfx = NodePath("../sfx_hurt")
|
||||
HealthComponent = NodePath("../HealthComponent")
|
||||
|
||||
[node name="KnockbackComponent" type="Node" parent="." node_paths=PackedStringArray("Body", "HealthComponent")]
|
||||
script = ExtResource("14_e5pae")
|
||||
Body = NodePath("..")
|
||||
KnockbackForce = 1250.0
|
||||
HealthComponent = NodePath("../HealthComponent")
|
||||
|
||||
[node name="InvulnerabilityComponent" type="Node" parent="." node_paths=PackedStringArray("FlashingComponent")]
|
||||
script = ExtResource("15_xuhvf")
|
||||
FlashingComponent = NodePath("../FlashingComponent Base")
|
||||
@@ -203,13 +217,8 @@ Damage = 4.0
|
||||
Area = NodePath("../StompDamageArea")
|
||||
Root = NodePath("..")
|
||||
|
||||
[node name="SkillManager" type="Node" parent="."]
|
||||
script = ExtResource("18_6lsog")
|
||||
AvailableSkills = Array[ExtResource("19_yysbb")]([ExtResource("20_o1ihh"), ExtResource("21_ur2y5"), ExtResource("22_7til7"), ExtResource("23_e5pae"), ExtResource("24_xuhvf")])
|
||||
|
||||
[node name="SkillUnlockerComponent" type="Node" parent="." node_paths=PackedStringArray("SkillManager")]
|
||||
[node name="SkillUnlockerComponent" type="Node" parent="."]
|
||||
script = ExtResource("25_yysbb")
|
||||
SkillManager = NodePath("../SkillManager")
|
||||
|
||||
[node name="HitComponent" type="Node" parent="." node_paths=PackedStringArray("Sprite", "Health", "HitFx")]
|
||||
script = ExtResource("26_6n1ss")
|
||||
@@ -270,14 +279,56 @@ gizmo_extents = 1.0
|
||||
position = Vector2(0, 3)
|
||||
scale = Vector2(0.8, 1.9)
|
||||
|
||||
[node name="KillPlayerOutOfScreen" type="Node" parent="." node_paths=PackedStringArray("ScreenNotifier", "HealthComponent")]
|
||||
script = ExtResource("37_qec3q")
|
||||
ScreenNotifier = NodePath("../VisibleOnScreenNotifier2D")
|
||||
HealthComponent = NodePath("../HealthComponent")
|
||||
[node name="PlayerInputHandler" type="Node" parent="."]
|
||||
script = ExtResource("42_e5pae")
|
||||
metadata/_custom_type_script = "uid://dssa2taiwktis"
|
||||
|
||||
[node name="ProgressiveDamageComponent" type="Node" parent="." node_paths=PackedStringArray("HealthComponent", "Sprite", "PlatformMovement")]
|
||||
process_mode = 4
|
||||
[node name="SpriteTilterComponent" type="Node" parent="." node_paths=PackedStringArray("RotationTarget")]
|
||||
script = ExtResource("43_xuhvf")
|
||||
RotationTarget = NodePath("../Graphics/Root/Base")
|
||||
metadata/_custom_type_script = "uid://ceoxet1nqws8w"
|
||||
|
||||
[node name="PlayerSfxComponent" type="Node" parent="." node_paths=PackedStringArray("JumpSfx")]
|
||||
script = ExtResource("49_qec3q")
|
||||
JumpSfx = NodePath("../sfx_jump")
|
||||
metadata/_custom_type_script = "uid://b1h8r5irryxcx"
|
||||
|
||||
[node name="PlayerGraphicsComponent" type="Node" parent="." node_paths=PackedStringArray("DefaultSprite", "SpaceshipSprite")]
|
||||
script = ExtResource("50_dhjci")
|
||||
DefaultSprite = NodePath("../Graphics/Root")
|
||||
SpaceshipSprite = NodePath("../Graphics/Ship")
|
||||
metadata/_custom_type_script = "uid://b2aanqykvdnev"
|
||||
|
||||
[node name="ProgressiveDamageComponent" type="Node" parent="." node_paths=PackedStringArray("HealthComponent", "Sprite")]
|
||||
script = ExtResource("38_dhjci")
|
||||
HealthComponent = NodePath("../HealthComponent")
|
||||
Sprite = NodePath("../Graphics/Root/Base")
|
||||
PlatformMovement = NodePath("../Movements/PlatformMovement")
|
||||
metadata/_custom_type_script = "uid://dupnaark1f7gm"
|
||||
|
||||
[node name="PacXonGridInteractor" type="Node" parent="."]
|
||||
script = ExtResource("42_xuhvf")
|
||||
metadata/_custom_type_script = "uid://c00siqtssccr6"
|
||||
|
||||
[node name="PacXonTrailComponent" type="Line2D" parent="."]
|
||||
script = ExtResource("44_uno3u")
|
||||
metadata/_custom_type_script = "uid://cmk4m7mplqnrm"
|
||||
|
||||
[node name="Feet" type="Marker2D" parent="."]
|
||||
position = Vector2(0, 16)
|
||||
|
||||
[node name="FootstepGfx" type="Node2D" parent="." node_paths=PackedStringArray("_controller", "_marker")]
|
||||
script = ExtResource("46_6n1ss")
|
||||
_particles = ExtResource("45_bl1gx")
|
||||
_controller = NodePath("..")
|
||||
_marker = NodePath("../Feet")
|
||||
_stepInterval = 0.4
|
||||
_stepIntervalRandomness = 0.15
|
||||
_minMoveSpeed = 4.0
|
||||
_randomOffsetRange = 0.3
|
||||
metadata/_custom_type_script = "uid://d3ksrjt1ek4gi"
|
||||
|
||||
[node name="JumpGfxComponent" type="Node2D" parent="." node_paths=PackedStringArray("Controller")]
|
||||
script = ExtResource("47_oefns")
|
||||
ParticleScene = ExtResource("48_bnap0")
|
||||
Controller = NodePath("..")
|
||||
metadata/_custom_type_script = "uid://bpopfy6m4a0br"
|
||||
|
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=10 format=3 uid="uid://bhc7y4xugu4q7"]
|
||||
[gd_scene load_steps=11 format=3 uid="uid://bhc7y4xugu4q7"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_w543f"]
|
||||
[ext_resource type="Script" uid="uid://2i7p7v135u7c" path="res://scripts/components/DamageComponent.cs" id="2_6th6w"]
|
||||
@@ -8,12 +8,13 @@
|
||||
[ext_resource type="Script" uid="uid://c7p06t0eax8am" path="res://scripts/components/StraightMotionComponent.cs" id="6_lycw2"]
|
||||
[ext_resource type="Script" uid="uid://cfw8nbrarex0i" path="res://scripts/components/BulletComponent.cs" id="7_2aweg"]
|
||||
[ext_resource type="PackedScene" uid="uid://c1iorglk708g0" path="res://objects/fxs/terrain_hit_fx.tscn" id="8_6th6w"]
|
||||
[ext_resource type="Script" uid="uid://dgb8bqcri7nsj" path="res://scripts/components/HealthComponent.cs" id="9_e0mqp"]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_txsw8"]
|
||||
radius = 4.0
|
||||
|
||||
[node name="Bullet" type="Area2D"]
|
||||
collision_layer = 8
|
||||
collision_layer = 64
|
||||
collision_mask = 21
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
@@ -50,7 +51,6 @@ LifeTime = 10.0
|
||||
[node name="LaunchComponent" type="Node2D" parent="."]
|
||||
script = ExtResource("5_7bijt")
|
||||
Speed = 120.0
|
||||
metadata/_custom_type_script = "uid://873un8agkyja"
|
||||
|
||||
[node name="StraightMotionComponent" type="Node" parent="." node_paths=PackedStringArray("LaunchComponent")]
|
||||
script = ExtResource("6_lycw2")
|
||||
@@ -61,7 +61,11 @@ script = ExtResource("7_2aweg")
|
||||
Area = NodePath("..")
|
||||
TerrainHitFx = NodePath("../TerrainHitFX")
|
||||
BulletSprite = NodePath("../Sprite2D")
|
||||
metadata/_custom_type_script = "uid://cdnwrn8v05qhi"
|
||||
|
||||
[node name="TerrainHitFX" parent="." instance=ExtResource("8_6th6w")]
|
||||
z_index = 3
|
||||
|
||||
[node name="HealthComponent" type="Node2D" parent="."]
|
||||
script = ExtResource("9_e0mqp")
|
||||
Health = 0.1
|
||||
metadata/_custom_type_script = "uid://dgb8bqcri7nsj"
|
||||
|
41
objects/entities/cactus.tscn
Normal file
41
objects/entities/cactus.tscn
Normal file
@@ -0,0 +1,41 @@
|
||||
[gd_scene load_steps=6 format=3 uid="uid://un55bdc2cg2q"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_1nndd"]
|
||||
[ext_resource type="Script" uid="uid://cgfynrn68lp12" path="res://scripts/components/KnockbackComponent.cs" id="2_bljtt"]
|
||||
[ext_resource type="Script" uid="uid://nhu2xd8611fk" path="res://scripts/components/HazardComponent.cs" id="3_bljtt"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_14ml2"]
|
||||
size = Vector2(14, 15)
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_4q8oh"]
|
||||
size = Vector2(16, 16)
|
||||
|
||||
[node name="Cactus" type="StaticBody2D"]
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(0, 0.5)
|
||||
shape = SubResource("RectangleShape2D_14ml2")
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
texture = ExtResource("1_1nndd")
|
||||
hframes = 12
|
||||
vframes = 12
|
||||
frame = 71
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="."]
|
||||
collision_mask = 12
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
|
||||
position = Vector2(-0.5, 0)
|
||||
shape = SubResource("RectangleShape2D_4q8oh")
|
||||
debug_color = Color(0.285572, 0.422655, 0.118384, 0.42)
|
||||
|
||||
[node name="KnockbackComponent" type="Node" parent="."]
|
||||
script = ExtResource("2_bljtt")
|
||||
metadata/_custom_type_script = "uid://cgfynrn68lp12"
|
||||
|
||||
[node name="HazardComponent" type="Node2D" parent="." node_paths=PackedStringArray("KnockbackComponent", "HazardArea")]
|
||||
script = ExtResource("3_bljtt")
|
||||
KnockbackComponent = NodePath("../KnockbackComponent")
|
||||
HazardArea = NodePath("../Area2D")
|
||||
metadata/_custom_type_script = "uid://nhu2xd8611fk"
|
@@ -1,13 +1,17 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://dstko446qydsc"]
|
||||
[gd_scene load_steps=7 format=3 uid="uid://dstko446qydsc"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_6gptm"]
|
||||
[ext_resource type="Script" uid="uid://ctfrbj52ejay4" path="res://scripts/components/DestroyableComponent.cs" id="2_q37h7"]
|
||||
[ext_resource type="Script" uid="uid://dgb8bqcri7nsj" path="res://scripts/components/HealthComponent.cs" id="3_bhwy3"]
|
||||
[ext_resource type="Script" uid="uid://bnaxy8cw3wrko" path="res://scripts/components/PeriodicShootingComponent.cs" id="2_q37h7"]
|
||||
[ext_resource type="PackedScene" uid="uid://chetx6gmnwbxi" path="res://objects/entities/cannon_bullet.tscn" id="3_ww0hb"]
|
||||
[ext_resource type="Script" uid="uid://b3j23e7b7x8ro" path="res://scripts/components/RecoilComponent.cs" id="4_bhwy3"]
|
||||
[ext_resource type="Script" uid="uid://c707c53k7c5ae" path="res://scripts/components/SquashAndStretchComponent.cs" id="5_ww0hb"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_j5sus"]
|
||||
size = Vector2(16, 16)
|
||||
|
||||
[node name="Cannon" type="StaticBody2D"]
|
||||
collision_layer = 0
|
||||
collision_mask = 0
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
texture = ExtResource("1_6gptm")
|
||||
@@ -15,12 +19,29 @@ hframes = 12
|
||||
vframes = 12
|
||||
frame = 42
|
||||
|
||||
[node name="DestroyableComponent" type="Node" parent="." node_paths=PackedStringArray("Health")]
|
||||
script = ExtResource("2_q37h7")
|
||||
Health = NodePath("../HealthComponent")
|
||||
|
||||
[node name="HealthComponent" type="Node2D" parent="."]
|
||||
script = ExtResource("3_bhwy3")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource("RectangleShape2D_j5sus")
|
||||
|
||||
[node name="PeriodicShootingComponent" type="Node" parent="." node_paths=PackedStringArray("BulletSpawnPointRight")]
|
||||
script = ExtResource("2_q37h7")
|
||||
BulletScene = ExtResource("3_ww0hb")
|
||||
ShootInterval = 3.0
|
||||
ShootDirection = Vector2(0, -1)
|
||||
BulletSpawnPointRight = NodePath("../Bullet spawn")
|
||||
ShootingIntervalVariation = 0.61
|
||||
metadata/_custom_type_script = "uid://bnaxy8cw3wrko"
|
||||
|
||||
[node name="Bullet spawn" type="Marker2D" parent="."]
|
||||
position = Vector2(0, -16)
|
||||
|
||||
[node name="RecoilComponent" type="Node" parent="." node_paths=PackedStringArray("RecoilTarget")]
|
||||
script = ExtResource("4_bhwy3")
|
||||
RecoilTarget = NodePath("../Sprite2D")
|
||||
RecoilDistance = 4.0
|
||||
RecoilDuration = 0.12
|
||||
metadata/_custom_type_script = "uid://b3j23e7b7x8ro"
|
||||
|
||||
[node name="SquashAndStretchComponent" type="Node" parent="." node_paths=PackedStringArray("TargetNode")]
|
||||
script = ExtResource("5_ww0hb")
|
||||
TargetNode = NodePath("../Sprite2D")
|
||||
metadata/_custom_type_script = "uid://c707c53k7c5ae"
|
||||
|
72
objects/entities/cannon_bullet.tscn
Normal file
72
objects/entities/cannon_bullet.tscn
Normal file
@@ -0,0 +1,72 @@
|
||||
[gd_scene load_steps=11 format=3 uid="uid://chetx6gmnwbxi"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_alaj6"]
|
||||
[ext_resource type="Script" uid="uid://2i7p7v135u7c" path="res://scripts/components/DamageComponent.cs" id="2_xmjlg"]
|
||||
[ext_resource type="Script" uid="uid://cs6u3sh68f43j" path="res://scripts/components/OutOfScreenComponent.cs" id="3_jege3"]
|
||||
[ext_resource type="Script" uid="uid://oyf25mpc5etr" path="res://scripts/components/LifetimeComponent.cs" id="4_aniyw"]
|
||||
[ext_resource type="Script" uid="uid://cbexrnnj47f87" path="res://scripts/components/LaunchComponent.cs" id="5_3ks47"]
|
||||
[ext_resource type="Script" uid="uid://c7p06t0eax8am" path="res://scripts/components/StraightMotionComponent.cs" id="6_4cg6n"]
|
||||
[ext_resource type="Script" uid="uid://cfw8nbrarex0i" path="res://scripts/components/BulletComponent.cs" id="7_cr5p0"]
|
||||
[ext_resource type="PackedScene" uid="uid://c1iorglk708g0" path="res://objects/fxs/terrain_hit_fx.tscn" id="8_ivkeb"]
|
||||
[ext_resource type="Script" uid="uid://dgb8bqcri7nsj" path="res://scripts/components/HealthComponent.cs" id="9_gx2e5"]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_txsw8"]
|
||||
radius = 4.0
|
||||
|
||||
[node name="Bullet" type="Area2D"]
|
||||
collision_layer = 64
|
||||
collision_mask = 21
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource("CircleShape2D_txsw8")
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
modulate = Color(1.5, 1, 1, 1)
|
||||
scale = Vector2(0.5, 0.5)
|
||||
texture = ExtResource("1_alaj6")
|
||||
hframes = 12
|
||||
vframes = 12
|
||||
frame = 79
|
||||
|
||||
[node name="VisibleOnScreenNotifier2D" type="VisibleOnScreenNotifier2D" parent="."]
|
||||
position = Vector2(2.38419e-07, 2.38419e-07)
|
||||
scale = Vector2(0.4, 0.4)
|
||||
|
||||
[node name="DamageComponent" type="Node" parent="." node_paths=PackedStringArray("Area", "DamageTimer")]
|
||||
script = ExtResource("2_xmjlg")
|
||||
Area = NodePath("..")
|
||||
DamageTimer = NodePath("../Timer")
|
||||
|
||||
[node name="Timer" type="Timer" parent="."]
|
||||
wait_time = 5.0
|
||||
autostart = true
|
||||
|
||||
[node name="OutOfScreenComponent" type="Node" parent="." node_paths=PackedStringArray("VisibilityNotifier")]
|
||||
script = ExtResource("3_jege3")
|
||||
VisibilityNotifier = NodePath("../VisibleOnScreenNotifier2D")
|
||||
|
||||
[node name="LifetimeComponent" type="Node" parent="."]
|
||||
script = ExtResource("4_aniyw")
|
||||
LifeTime = 10.0
|
||||
|
||||
[node name="LaunchComponent" type="Node2D" parent="."]
|
||||
script = ExtResource("5_3ks47")
|
||||
Speed = 160.0
|
||||
|
||||
[node name="StraightMotionComponent" type="Node" parent="." node_paths=PackedStringArray("LaunchComponent")]
|
||||
script = ExtResource("6_4cg6n")
|
||||
LaunchComponent = NodePath("../LaunchComponent")
|
||||
|
||||
[node name="BulletComponent" type="Node" parent="." node_paths=PackedStringArray("Area", "TerrainHitFx", "BulletSprite")]
|
||||
script = ExtResource("7_cr5p0")
|
||||
Area = NodePath("..")
|
||||
TerrainHitFx = NodePath("../TerrainHitFX")
|
||||
BulletSprite = NodePath("../Sprite2D")
|
||||
|
||||
[node name="TerrainHitFX" parent="." instance=ExtResource("8_ivkeb")]
|
||||
z_index = 3
|
||||
|
||||
[node name="HealthComponent" type="Node2D" parent="."]
|
||||
script = ExtResource("9_gx2e5")
|
||||
Health = 0.1
|
||||
metadata/_custom_type_script = "uid://dgb8bqcri7nsj"
|
@@ -1,33 +0,0 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://dfwpha0d18dmn"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_rwgpm"]
|
||||
[ext_resource type="Script" uid="uid://2i7p7v135u7c" path="res://scripts/components/DamageComponent.cs" id="2_hrj61"]
|
||||
[ext_resource type="Script" uid="uid://df1llrbm80e02" path="res://scripts/components/BeamComponent.cs" id="3_hrj61"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_ptfn7"]
|
||||
size = Vector2(8, 16)
|
||||
|
||||
[node name="Cannon Ray" type="Area2D"]
|
||||
collision_layer = 0
|
||||
collision_mask = 5
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
texture_repeat = 2
|
||||
texture = ExtResource("1_rwgpm")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(176, 64, 16, 16)
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource("RectangleShape2D_ptfn7")
|
||||
|
||||
[node name="DamageComponent" type="Node" parent="." node_paths=PackedStringArray("Area")]
|
||||
script = ExtResource("2_hrj61")
|
||||
Area = NodePath("..")
|
||||
|
||||
[node name="BeamComponent" type="Node2D" parent="." node_paths=PackedStringArray("Root", "Sprite", "CollisionShape")]
|
||||
position = Vector2(0, -8)
|
||||
script = ExtResource("3_hrj61")
|
||||
ExpansionSpeed = 16.0
|
||||
Root = NodePath(".")
|
||||
Sprite = NodePath("../Sprite2D")
|
||||
CollisionShape = NodePath("../CollisionShape2D")
|
@@ -1,35 +0,0 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://d3lt4rhxduv44"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="1_l5x2w"]
|
||||
[ext_resource type="Script" uid="uid://2i7p7v135u7c" path="res://scripts/components/DamageComponent.cs" id="2_0kbpg"]
|
||||
[ext_resource type="Script" uid="uid://df1llrbm80e02" path="res://scripts/components/BeamComponent.cs" id="3_0kbpg"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_ptfn7"]
|
||||
size = Vector2(16, 8)
|
||||
|
||||
[node name="Cannon Ray" type="Area2D"]
|
||||
collision_layer = 0
|
||||
collision_mask = 5
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
texture_repeat = 2
|
||||
rotation = 1.5708
|
||||
texture = ExtResource("1_l5x2w")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(176, 64, 16, 16)
|
||||
region_filter_clip_enabled = true
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource("RectangleShape2D_ptfn7")
|
||||
|
||||
[node name="DamageComponent" type="Node" parent="." node_paths=PackedStringArray("Area")]
|
||||
script = ExtResource("2_0kbpg")
|
||||
Area = NodePath("..")
|
||||
|
||||
[node name="BeamComponent" type="Node2D" parent="." node_paths=PackedStringArray("Root", "Sprite", "CollisionShape")]
|
||||
position = Vector2(8, 0)
|
||||
script = ExtResource("3_0kbpg")
|
||||
ExpansionSpeed = 16.0
|
||||
Root = NodePath("..")
|
||||
Sprite = NodePath("../Sprite2D")
|
||||
CollisionShape = NodePath("../CollisionShape2D")
|
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=27 format=3 uid="uid://bwdlmualj6xbw"]
|
||||
[gd_scene load_steps=29 format=3 uid="uid://bwdlmualj6xbw"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://bs4xvm4qkurpr" path="res://shaders/hit_flash.tres" id="1_ep4yr"]
|
||||
[ext_resource type="Texture2D" uid="uid://cu72810eyk4dx" path="res://sprites/enemy-robot.png" id="2_hjtwe"]
|
||||
@@ -18,6 +18,8 @@
|
||||
[ext_resource type="PackedScene" uid="uid://dx80ivlvuuew4" path="res://objects/fxs/fire_fx.tscn" id="15_mc6rj"]
|
||||
[ext_resource type="PackedScene" uid="uid://ck6nml06tm6ue" path="res://objects/fxs/ice_fx.tscn" id="16_68hnm"]
|
||||
[ext_resource type="PackedScene" uid="uid://b12tppjkkqpt4" path="res://objects/fxs/hit_particles.tscn" id="18_pxaaa"]
|
||||
[ext_resource type="Script" uid="uid://cgfynrn68lp12" path="res://scripts/components/KnockbackComponent.cs" id="19_xku20"]
|
||||
[ext_resource type="Script" uid="uid://bhbgjr8ty2n85" path="res://scripts/components/EnemyControllerComponent.cs" id="20_5lji2"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_pwwji"]
|
||||
size = Vector2(25, 31)
|
||||
@@ -96,13 +98,12 @@ RightRay = NodePath("../Right Ray")
|
||||
LeftWallRay = NodePath("../Left Wall Ray")
|
||||
RightWallRay = NodePath("../Right Wall Ray")
|
||||
|
||||
[node name="PeriodicShootingComponent" type="Node" parent="." node_paths=PackedStringArray("SideToSideMovement", "BulletSpawnRight", "BulletSpawnLeft")]
|
||||
[node name="PeriodicShootingComponent" type="Node" parent="." node_paths=PackedStringArray("BulletSpawnPointRight", "BulletSpawnPointLeft")]
|
||||
script = ExtResource("6_lgbyy")
|
||||
BulletScene = ExtResource("7_r48kf")
|
||||
SideToSideMovement = NodePath("../SideToSideMovement")
|
||||
BulletSpawnRight = NodePath("../Sprite2D/right bullet spawn")
|
||||
BulletSpawnLeft = NodePath("../Sprite2D/left bullet spawn")
|
||||
ShootingIntervalVariation = 0.1
|
||||
BulletSpawnPointRight = NodePath("../Sprite2D/right bullet spawn")
|
||||
BulletSpawnPointLeft = NodePath("../Sprite2D/left bullet spawn")
|
||||
ShootingIntervalVariation = 0.3
|
||||
|
||||
[node name="EnemyDeathComponent" type="Node" parent="." node_paths=PackedStringArray("CollisionShape", "Health")]
|
||||
script = ExtResource("8_pxaaa")
|
||||
@@ -182,3 +183,13 @@ visible = false
|
||||
[node name="HitParticles" parent="." instance=ExtResource("18_pxaaa")]
|
||||
position = Vector2(0, 1)
|
||||
process_material = SubResource("ParticleProcessMaterial_pxaaa")
|
||||
|
||||
[node name="KnockbackComponent" type="Node" parent="."]
|
||||
script = ExtResource("19_xku20")
|
||||
metadata/_custom_type_script = "uid://cgfynrn68lp12"
|
||||
|
||||
[node name="EnemyControllerComponent" type="Node" parent="." node_paths=PackedStringArray("MovementComponent", "ShootingComponent")]
|
||||
script = ExtResource("20_5lji2")
|
||||
MovementComponent = NodePath("../SideToSideMovement")
|
||||
ShootingComponent = NodePath("../PeriodicShootingComponent")
|
||||
metadata/_custom_type_script = "uid://bhbgjr8ty2n85"
|
||||
|
@@ -8,9 +8,12 @@
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_yfu6m"]
|
||||
size = Vector2(28, 32)
|
||||
|
||||
[node name="ExitLevel" type="Area2D"]
|
||||
[node name="ExitLevel" type="Area2D" node_paths=PackedStringArray("DoorSprite")]
|
||||
collision_layer = 0
|
||||
collision_mask = 4
|
||||
script = ExtResource("4_06sog")
|
||||
DoorSprite = NodePath("Sprite2D")
|
||||
OpenedDoorFrame = 88
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
position = Vector2(0, -8)
|
||||
@@ -27,17 +30,8 @@ shape = SubResource("RectangleShape2D_yfu6m")
|
||||
[node name="RequirementComponent" type="Node" parent="."]
|
||||
script = ExtResource("2_ed7mh")
|
||||
RequirementType = 1
|
||||
metadata/_custom_type_script = "uid://cmh8k0rdsyh7j"
|
||||
|
||||
[node name="UnlockOnRequirementComponent" type="Node" parent="." node_paths=PackedStringArray("RequirementComponent", "UnlockTarget")]
|
||||
script = ExtResource("3_ed7mh")
|
||||
RequirementComponent = NodePath("../RequirementComponent")
|
||||
UnlockTarget = NodePath("../ExitDoorComponent")
|
||||
metadata/_custom_type_script = "uid://c8xhgkg8gcqu6"
|
||||
|
||||
[node name="ExitDoorComponent" type="Node" parent="." node_paths=PackedStringArray("ExitArea", "DoorSprite")]
|
||||
script = ExtResource("4_06sog")
|
||||
ExitArea = NodePath("..")
|
||||
DoorSprite = NodePath("../Sprite2D")
|
||||
OpenedDoorFrame = 88
|
||||
metadata/_custom_type_script = "uid://bwamqffvpa452"
|
||||
UnlockTarget = NodePath("..")
|
||||
|
@@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=29 format=3 uid="uid://xp4njljog0x2"]
|
||||
[gd_scene load_steps=30 format=3 uid="uid://xp4njljog0x2"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://22k1u37j6k8y" path="res://sprites/flying_enemy.png" id="1_30hhw"]
|
||||
[ext_resource type="Shader" uid="uid://bs4xvm4qkurpr" path="res://shaders/hit_flash.tres" id="1_uyhuj"]
|
||||
@@ -17,6 +17,7 @@
|
||||
[ext_resource type="PackedScene" uid="uid://dx80ivlvuuew4" path="res://objects/fxs/fire_fx.tscn" id="14_mrjm6"]
|
||||
[ext_resource type="Script" uid="uid://d1388lhp2gpgr" path="res://scripts/components/IceEffectComponent.cs" id="14_pkino"]
|
||||
[ext_resource type="PackedScene" uid="uid://ck6nml06tm6ue" path="res://objects/fxs/ice_fx.tscn" id="15_pkino"]
|
||||
[ext_resource type="Script" uid="uid://b4hvq2i66fjhi" path="res://scripts/components/PathFollowerComponent.cs" id="18_q78ru"]
|
||||
|
||||
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_hil2i"]
|
||||
radius = 6.0
|
||||
@@ -122,12 +123,12 @@ bus = &"sfx"
|
||||
script = ExtResource("6_q78ru")
|
||||
Area = NodePath("../Hitbox")
|
||||
|
||||
[node name="PeriodicShootingComponent" type="Node" parent="." node_paths=PackedStringArray("BulletSpawnRight", "BulletSpawnLeft")]
|
||||
[node name="PeriodicShootingComponent" type="Node" parent="." node_paths=PackedStringArray("BulletSpawnPointRight", "BulletSpawnPointLeft")]
|
||||
script = ExtResource("7_weo6b")
|
||||
BulletScene = ExtResource("7_4ajjm")
|
||||
ShootInterval = 2.0
|
||||
BulletSpawnRight = NodePath("../laser spawn point right")
|
||||
BulletSpawnLeft = NodePath("../laser spawn point left")
|
||||
BulletSpawnPointRight = NodePath("../laser spawn point right")
|
||||
BulletSpawnPointLeft = NodePath("../laser spawn point left")
|
||||
ShootingIntervalVariation = 0.5
|
||||
|
||||
[node name="EnemyDeathComponent" type="Node" parent="." node_paths=PackedStringArray("CollisionShape", "Health")]
|
||||
@@ -190,3 +191,8 @@ collision_mask = 20
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Hitbox"]
|
||||
position = Vector2(0, 2)
|
||||
shape = SubResource("RectangleShape2D_cmp1h")
|
||||
|
||||
[node name="PathFollowerComponent" type="Node2D" parent="."]
|
||||
script = ExtResource("18_q78ru")
|
||||
ShouldRotate = false
|
||||
metadata/_custom_type_script = "uid://b4hvq2i66fjhi"
|
||||
|
31
objects/entities/ghost.tscn
Normal file
31
objects/entities/ghost.tscn
Normal file
@@ -0,0 +1,31 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://b3877xt5upsj2"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://dpbpjffbdbovp" path="res://sprites/cap.png" id="1_ksysq"]
|
||||
[ext_resource type="Script" uid="uid://7i20oc4cyabl" path="res://scripts/components/GhostMovementComponent.cs" id="2_0qila"]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_0xbgb"]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_ksysq"]
|
||||
|
||||
[node name="Ghost" type="CharacterBody2D"]
|
||||
collision_layer = 8
|
||||
collision_mask = 5
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource("CircleShape2D_0xbgb")
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
position = Vector2(2.98023e-08, 0)
|
||||
scale = Vector2(0.609375, 0.78125)
|
||||
texture = ExtResource("1_ksysq")
|
||||
|
||||
[node name="GhostMovementComponent" type="Node2D" parent="."]
|
||||
script = ExtResource("2_0qila")
|
||||
metadata/_custom_type_script = "uid://7i20oc4cyabl"
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="."]
|
||||
collision_layer = 0
|
||||
collision_mask = 4
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
|
||||
shape = SubResource("CircleShape2D_ksysq")
|
39
objects/entities/ghost_player.tscn
Normal file
39
objects/entities/ghost_player.tscn
Normal file
@@ -0,0 +1,39 @@
|
||||
[gd_scene load_steps=7 format=3 uid="uid://gknrmek1jmjx"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://bs4xvm4qkurpr" path="res://shaders/hit_flash.tres" id="13_uybbp"]
|
||||
[ext_resource type="Texture2D" uid="uid://0l454rfplmqg" path="res://sprites/MrBrick_base-sheet.png" id="14_4rwar"]
|
||||
[ext_resource type="Texture2D" uid="uid://jl1gwqchhpdc" path="res://sprites/left_eye.png" id="15_qkwlh"]
|
||||
[ext_resource type="Texture2D" uid="uid://iiawtnwmeny3" path="res://sprites/right_eye.png" id="16_kt5il"]
|
||||
[ext_resource type="Texture2D" uid="uid://dhkwyv6ayb5qb" path="res://sprites/flying_ship.png" id="17_i5nnv"]
|
||||
|
||||
[sub_resource type="ShaderMaterial" id="ShaderMaterial_xoue7"]
|
||||
shader = ExtResource("13_uybbp")
|
||||
shader_parameter/enabled = false
|
||||
shader_parameter/tint = Color(1, 1, 1, 1)
|
||||
|
||||
[node name="Brick Player" type="Node2D"]
|
||||
|
||||
[node name="Graphics" type="Node2D" parent="."]
|
||||
modulate = Color(1, 1, 1, 0.443137)
|
||||
|
||||
[node name="Root" type="Node2D" parent="Graphics"]
|
||||
|
||||
[node name="Base" type="Sprite2D" parent="Graphics/Root"]
|
||||
material = SubResource("ShaderMaterial_xoue7")
|
||||
texture = ExtResource("14_4rwar")
|
||||
hframes = 5
|
||||
|
||||
[node name="Left Eye" type="Sprite2D" parent="Graphics/Root"]
|
||||
position = Vector2(-7, -6)
|
||||
texture = ExtResource("15_qkwlh")
|
||||
hframes = 2
|
||||
|
||||
[node name="Right Eye" type="Sprite2D" parent="Graphics/Root"]
|
||||
position = Vector2(6, -5)
|
||||
texture = ExtResource("16_kt5il")
|
||||
hframes = 2
|
||||
|
||||
[node name="Ship" type="Sprite2D" parent="Graphics"]
|
||||
visible = false
|
||||
position = Vector2(1, 7)
|
||||
texture = ExtResource("17_i5nnv")
|
8
objects/floating_text_manager.tscn
Normal file
8
objects/floating_text_manager.tscn
Normal file
@@ -0,0 +1,8 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://dpibw6s3dcggr"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cobgfsr3gw7cn" path="res://Autoloads/FloatingTextManager.cs" id="1_ak38b"]
|
||||
[ext_resource type="PackedScene" uid="uid://c7mp0o2goauyy" path="res://objects/ui/floating_text.tscn" id="2_sdx3u"]
|
||||
|
||||
[node name="FloatingTextManager" type="Node"]
|
||||
script = ExtResource("1_ak38b")
|
||||
FloatingTextScene = ExtResource("2_sdx3u")
|
39
objects/fxs/bounce_gfx.tscn
Normal file
39
objects/fxs/bounce_gfx.tscn
Normal file
@@ -0,0 +1,39 @@
|
||||
[gd_scene load_steps=6 format=3 uid="uid://qo2ngbnkix85"]
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_qxp43"]
|
||||
offsets = PackedFloat32Array(0, 0.289256, 0.790634)
|
||||
colors = PackedColorArray(0.635294, 1, 0.952941, 1, 0.380392, 0.827451, 0.890196, 1, 0.188235, 0.317647, 0.509804, 1)
|
||||
|
||||
[sub_resource type="GradientTexture1D" id="GradientTexture1D_1jx8o"]
|
||||
gradient = SubResource("Gradient_qxp43")
|
||||
use_hdr = true
|
||||
|
||||
[sub_resource type="Curve" id="Curve_8fwqm"]
|
||||
_data = [Vector2(0.251928, 1), 0.0, -3.43942, 0, 0, Vector2(1, 0.340954), 0.0, 0.0, 0, 0]
|
||||
point_count = 2
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_365fl"]
|
||||
curve = SubResource("Curve_8fwqm")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_wfuta"]
|
||||
particle_flag_disable_z = true
|
||||
emission_shape = 3
|
||||
emission_box_extents = Vector3(10, 1, 1)
|
||||
angle_min = -45.0
|
||||
angle_max = 45.0
|
||||
direction = Vector3(0, 1, 0)
|
||||
spread = 15.0
|
||||
initial_velocity_min = 5.0
|
||||
initial_velocity_max = 10.0
|
||||
gravity = Vector3(0, 98, 0)
|
||||
scale_curve = SubResource("CurveTexture_365fl")
|
||||
color_ramp = SubResource("GradientTexture1D_1jx8o")
|
||||
|
||||
[node name="BounceGFX" type="GPUParticles2D"]
|
||||
emitting = false
|
||||
amount = 52
|
||||
one_shot = true
|
||||
explosiveness = 1.0
|
||||
fixed_fps = 24
|
||||
collision_base_size = 3.32
|
||||
process_material = SubResource("ParticleProcessMaterial_wfuta")
|
52
objects/fxs/foot_step_gfx.tscn
Normal file
52
objects/fxs/foot_step_gfx.tscn
Normal file
@@ -0,0 +1,52 @@
|
||||
[gd_scene load_steps=7 format=3 uid="uid://de5emerpbiknb"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://v7tt4w6bejux" path="res://scripts/components/CleanupComponent.cs" id="1_lnlfk"]
|
||||
|
||||
[sub_resource type="Curve" id="Curve_lnlfk"]
|
||||
_data = [Vector2(0.00771208, 1), 0.0, 0.0, 0, 0, Vector2(0.347044, 0.89662), -1.20644, -1.20644, 0, 0, Vector2(1, 0.0114315), 0.0, 0.0, 0, 0]
|
||||
point_count = 3
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_a3r26"]
|
||||
curve = SubResource("Curve_lnlfk")
|
||||
|
||||
[sub_resource type="Curve" id="Curve_et0te"]
|
||||
_data = [Vector2(0, 1), 0.0, -2.46687, 0, 0, Vector2(0.192802, 0.6834), 0.0, 0.0, 0, 0, Vector2(0.449871, 1), -0.471266, -0.471266, 0, 0, Vector2(1, 0), -3.06444, 0.0, 0, 0]
|
||||
point_count = 4
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_lnlfk"]
|
||||
width = 2048
|
||||
curve = SubResource("Curve_et0te")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_a3r26"]
|
||||
particle_flag_disable_z = true
|
||||
emission_shape = 1
|
||||
emission_sphere_radius = 1.0
|
||||
direction = Vector3(0, -1, 0)
|
||||
spread = 0.93
|
||||
flatness = 1.0
|
||||
initial_velocity_min = 11.0
|
||||
initial_velocity_max = 11.0
|
||||
angular_velocity_min = -80.0
|
||||
angular_velocity_max = -80.0
|
||||
gravity = Vector3(0, 0, 0)
|
||||
scale_min = 1.25
|
||||
scale_max = 1.75
|
||||
scale_curve = SubResource("CurveTexture_lnlfk")
|
||||
color = Color(0.47451, 0.47451, 0.47451, 1)
|
||||
alpha_curve = SubResource("CurveTexture_a3r26")
|
||||
|
||||
[node name="FootStepGfx" type="GPUParticles2D"]
|
||||
emitting = false
|
||||
amount = 42
|
||||
lifetime = 2.0
|
||||
one_shot = true
|
||||
speed_scale = 2.0
|
||||
explosiveness = 1.0
|
||||
fixed_fps = 24
|
||||
process_material = SubResource("ParticleProcessMaterial_a3r26")
|
||||
|
||||
[node name="CleanupComponent" type="Node" parent="."]
|
||||
script = ExtResource("1_lnlfk")
|
||||
metadata/_custom_type_script = "uid://v7tt4w6bejux"
|
||||
|
||||
[connection signal="finished" from="." to="CleanupComponent" method="CleanUp"]
|
52
objects/fxs/jump_cloud_fx.tscn
Normal file
52
objects/fxs/jump_cloud_fx.tscn
Normal file
@@ -0,0 +1,52 @@
|
||||
[gd_scene load_steps=7 format=3 uid="uid://bqhondao5bm6k"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://v7tt4w6bejux" path="res://scripts/components/CleanupComponent.cs" id="1_0051n"]
|
||||
|
||||
[sub_resource type="Curve" id="Curve_0051n"]
|
||||
_data = [Vector2(0.00771208, 1), 0.0, 0.0, 0, 0, Vector2(0.347044, 0.89662), -1.20644, -1.20644, 0, 0, Vector2(1, 0.0114315), 0.0, 0.0, 0, 0]
|
||||
point_count = 3
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_oxugj"]
|
||||
curve = SubResource("Curve_0051n")
|
||||
|
||||
[sub_resource type="Curve" id="Curve_cc2b5"]
|
||||
_data = [Vector2(0, 1), 0.0, -2.46687, 0, 0, Vector2(0.192802, 0.6834), 0.0, 0.0, 0, 0, Vector2(0.449871, 1), -0.471266, -0.471266, 0, 0, Vector2(1, 0), -3.06444, 0.0, 0, 0]
|
||||
point_count = 4
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_qdic5"]
|
||||
width = 2048
|
||||
curve = SubResource("Curve_cc2b5")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_vwfwg"]
|
||||
particle_flag_disable_z = true
|
||||
emission_shape = 1
|
||||
emission_sphere_radius = 2.25
|
||||
angle_min = 23.1
|
||||
angle_max = 107.8
|
||||
direction = Vector3(0, 1, 0)
|
||||
spread = 4.0
|
||||
initial_velocity_min = 8.0
|
||||
initial_velocity_max = 8.0
|
||||
angular_velocity_min = -80.0
|
||||
angular_velocity_max = -80.0
|
||||
gravity = Vector3(0, 0, 0)
|
||||
scale_min = 3.0
|
||||
scale_max = 4.0
|
||||
scale_curve = SubResource("CurveTexture_qdic5")
|
||||
alpha_curve = SubResource("CurveTexture_oxugj")
|
||||
|
||||
[node name="FootStepGfx" type="GPUParticles2D"]
|
||||
emitting = false
|
||||
amount = 64
|
||||
lifetime = 2.0
|
||||
one_shot = true
|
||||
speed_scale = 4.0
|
||||
explosiveness = 1.0
|
||||
fixed_fps = 24
|
||||
process_material = SubResource("ParticleProcessMaterial_vwfwg")
|
||||
|
||||
[node name="CleanupComponent" type="Node" parent="."]
|
||||
script = ExtResource("1_0051n")
|
||||
metadata/_custom_type_script = "uid://v7tt4w6bejux"
|
||||
|
||||
[connection signal="finished" from="." to="CleanupComponent" method="CleanUp"]
|
23
objects/fxs/shockwave.tscn
Normal file
23
objects/fxs/shockwave.tscn
Normal file
@@ -0,0 +1,23 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://d0074by8ith81"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://2i7p7v135u7c" path="res://scripts/components/DamageComponent.cs" id="1_dkcj7"]
|
||||
[ext_resource type="Script" uid="uid://oyf25mpc5etr" path="res://scripts/components/LifetimeComponent.cs" id="2_mcqxt"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_jwgyp"]
|
||||
size = Vector2(128, 32)
|
||||
|
||||
[node name="Shockwave" type="Area2D"]
|
||||
collision_layer = 20
|
||||
collision_mask = 72
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource("RectangleShape2D_jwgyp")
|
||||
|
||||
[node name="DamageComponent" type="Node" parent="." node_paths=PackedStringArray("Area")]
|
||||
script = ExtResource("1_dkcj7")
|
||||
Area = NodePath("..")
|
||||
metadata/_custom_type_script = "uid://2i7p7v135u7c"
|
||||
|
||||
[node name="LifetimeComponent" type="Node" parent="."]
|
||||
script = ExtResource("2_mcqxt")
|
||||
LifeTime = 0.2
|
8
objects/ghost_manager.tscn
Normal file
8
objects/ghost_manager.tscn
Normal file
@@ -0,0 +1,8 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://ckeu2eddl5b3m"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cgmuod4p2hg5h" path="res://Autoloads/GhostManager.cs" id="1_u0u02"]
|
||||
[ext_resource type="PackedScene" uid="uid://gknrmek1jmjx" path="res://objects/entities/ghost_player.tscn" id="2_jnk6u"]
|
||||
|
||||
[node name="GhostManager" type="Node"]
|
||||
script = ExtResource("1_u0u02")
|
||||
GhostPlayerScene = ExtResource("2_jnk6u")
|
38
objects/items/shield.tscn
Normal file
38
objects/items/shield.tscn
Normal file
@@ -0,0 +1,38 @@
|
||||
[gd_scene load_steps=6 format=3 uid="uid://c6rgh0qn4jqlc"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://c0xtjfpmkfolk" path="res://sprites/explosive_brick_skill_icon.png" id="1_n5wbm"]
|
||||
[ext_resource type="Script" uid="uid://dgb8bqcri7nsj" path="res://scripts/components/HealthComponent.cs" id="2_yw7rl"]
|
||||
[ext_resource type="Script" uid="uid://ctfrbj52ejay4" path="res://scripts/components/DestroyableComponent.cs" id="3_6t8cd"]
|
||||
[ext_resource type="Script" uid="uid://2i7p7v135u7c" path="res://scripts/components/DamageComponent.cs" id="4_yw7rl"]
|
||||
|
||||
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_n5wbm"]
|
||||
radius = 26.0
|
||||
height = 60.0
|
||||
|
||||
[node name="Shield" type="Sprite2D"]
|
||||
modulate = Color(0.00784314, 1, 1, 1)
|
||||
texture = ExtResource("1_n5wbm")
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="."]
|
||||
collision_layer = 4
|
||||
collision_mask = 64
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
|
||||
position = Vector2(1, -3)
|
||||
shape = SubResource("CapsuleShape2D_n5wbm")
|
||||
|
||||
[node name="HealthComponent" type="Node2D" parent="."]
|
||||
script = ExtResource("2_yw7rl")
|
||||
Health = 0.5
|
||||
MaxHealth = 0.5
|
||||
metadata/_custom_type_script = "uid://dgb8bqcri7nsj"
|
||||
|
||||
[node name="DestroyableComponent" type="Node2D" parent="." node_paths=PackedStringArray("Health")]
|
||||
script = ExtResource("3_6t8cd")
|
||||
Health = NodePath("../HealthComponent")
|
||||
metadata/_custom_type_script = "uid://ctfrbj52ejay4"
|
||||
|
||||
[node name="DamageComponent" type="Node" parent="." node_paths=PackedStringArray("Area")]
|
||||
script = ExtResource("4_yw7rl")
|
||||
Area = NodePath("../Area2D")
|
||||
metadata/_custom_type_script = "uid://2i7p7v135u7c"
|
@@ -45,28 +45,33 @@ color_ramp = SubResource("GradientTexture1D_f1fvy")
|
||||
|
||||
[sub_resource type="Resource" id="Resource_0nwt7"]
|
||||
script = ExtResource("7_kl81p")
|
||||
duration = 1.0
|
||||
transition = 0
|
||||
duration = 0.25
|
||||
transition = 3
|
||||
ease = 2
|
||||
|
||||
[node name="World" type="Node2D"]
|
||||
|
||||
[node name="Brick Player" parent="." instance=ExtResource("1_lbnsn")]
|
||||
|
||||
[node name="HitParticles" parent="Brick Player" index="26"]
|
||||
[node name="HitParticles" parent="Brick Player" index="24"]
|
||||
process_material = SubResource("ParticleProcessMaterial_lgb3u")
|
||||
|
||||
[node name="WorldEnvironment" parent="." instance=ExtResource("1_hb5r3")]
|
||||
|
||||
[node name="UI Layer" parent="." instance=ExtResource("2_lbnsn")]
|
||||
|
||||
[node name="Marketplace" parent="UI Layer" index="3" node_paths=PackedStringArray("SkillUnlockerComponent")]
|
||||
[node name="HUD" parent="UI Layer" index="0" node_paths=PackedStringArray("Health")]
|
||||
Health = NodePath("../../Brick Player/HealthComponent")
|
||||
|
||||
[node name="Marketplace" parent="UI Layer" index="3" node_paths=PackedStringArray("SkillUnlockerComponent", "ComponentsToDisable")]
|
||||
SkillUnlockerComponent = NodePath("../../Brick Player/SkillUnlockerComponent")
|
||||
ComponentsToDisable = [NodePath("../../Brick Player")]
|
||||
|
||||
[node name="Global Light" parent="." instance=ExtResource("3_3732a")]
|
||||
|
||||
[node name="Camera2D" parent="." instance=ExtResource("5_517ha")]
|
||||
physics_interpolation_mode = 1
|
||||
position = Vector2(32, -16)
|
||||
process_callback = 0
|
||||
limit_left = -10000000
|
||||
limit_top = -10000000
|
||||
@@ -76,11 +81,17 @@ limit_bottom = 10000000
|
||||
[node name="PhantomCamera" type="Node2D" parent="." node_paths=PackedStringArray("follow_target")]
|
||||
unique_name_in_owner = true
|
||||
top_level = true
|
||||
position = Vector2(32, -16)
|
||||
script = ExtResource("6_6imqp")
|
||||
follow_mode = 2
|
||||
follow_mode = 5
|
||||
follow_target = NodePath("../Brick Player")
|
||||
snap_to_pixel = true
|
||||
tween_resource = SubResource("Resource_0nwt7")
|
||||
follow_offset = Vector2(32, -16)
|
||||
follow_damping = true
|
||||
follow_damping_value = Vector2(0.15, 0.1)
|
||||
dead_zone_width = 0.18
|
||||
dead_zone_height = 0.15
|
||||
draw_limits = true
|
||||
metadata/_custom_type_script = "uid://d23haq52m7ulv"
|
||||
|
||||
|
40
objects/level/moving_platform.tscn
Normal file
40
objects/level/moving_platform.tscn
Normal file
@@ -0,0 +1,40 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://dt6rnh7v6dcmd"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://g4ryqvpelmvl" path="res://scripts/components/MovingPlatformComponent.cs" id="1_hd47u"]
|
||||
[ext_resource type="Texture2D" uid="uid://djifxc5x0dyrw" path="res://sprites/ppc_tileset.png" id="2_6wunj"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_1avbh"]
|
||||
size = Vector2(48, 4)
|
||||
|
||||
[node name="MovingPlatformComponent" type="AnimatableBody2D"]
|
||||
script = ExtResource("1_hd47u")
|
||||
metadata/_custom_type_script = "uid://g4ryqvpelmvl"
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
shape = SubResource("RectangleShape2D_1avbh")
|
||||
|
||||
[node name="Gfx" type="Node2D" parent="."]
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="Gfx"]
|
||||
position = Vector2(-16, 6)
|
||||
texture = ExtResource("2_6wunj")
|
||||
hframes = 12
|
||||
vframes = 12
|
||||
frame = 81
|
||||
|
||||
[node name="Sprite2D2" type="Sprite2D" parent="Gfx"]
|
||||
position = Vector2(0, 6)
|
||||
texture = ExtResource("2_6wunj")
|
||||
hframes = 12
|
||||
vframes = 12
|
||||
frame = 82
|
||||
|
||||
[node name="Sprite2D3" type="Sprite2D" parent="Gfx"]
|
||||
position = Vector2(16, 6)
|
||||
texture = ExtResource("2_6wunj")
|
||||
hframes = 12
|
||||
vframes = 12
|
||||
frame = 83
|
||||
|
||||
[node name="VisibleOnScreenEnabler2D" type="VisibleOnScreenEnabler2D" parent="."]
|
||||
scale = Vector2(1, 0.2)
|
7
objects/movement_abilities/double_jump.tscn
Normal file
7
objects/movement_abilities/double_jump.tscn
Normal file
@@ -0,0 +1,7 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://bktuhojquwesl"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://xc0j26e88np7" path="res://scripts/components/Movement/DoubleJumpAbility.cs" id="1_vu3oa"]
|
||||
|
||||
[node name="DoubleJump" type="Node"]
|
||||
script = ExtResource("1_vu3oa")
|
||||
metadata/_custom_type_script = "uid://xc0j26e88np7"
|
7
objects/movement_abilities/gravity_ability.tscn
Normal file
7
objects/movement_abilities/gravity_ability.tscn
Normal file
@@ -0,0 +1,7 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://cala7bpo1v4no"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://chgw53qwt7rt8" path="res://scripts/components/Movement/GravityAbility.cs" id="1_tn5sj"]
|
||||
|
||||
[node name="GravityAbility" type="Node"]
|
||||
script = ExtResource("1_tn5sj")
|
||||
metadata/_custom_type_script = "uid://chgw53qwt7rt8"
|
7
objects/movement_abilities/grid_movement_ability.tscn
Normal file
7
objects/movement_abilities/grid_movement_ability.tscn
Normal file
@@ -0,0 +1,7 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://dre1vit1m4d2n"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://ctm5glmeu502l" path="res://scripts/components/Movement/GridMovementAbility.cs" id="1_xeoy8"]
|
||||
|
||||
[node name="GridMovementAbility" type="Node"]
|
||||
script = ExtResource("1_xeoy8")
|
||||
metadata/_custom_type_script = "uid://ctm5glmeu502l"
|
9
objects/movement_abilities/ground_ability.tscn
Normal file
9
objects/movement_abilities/ground_ability.tscn
Normal file
@@ -0,0 +1,9 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://bcv8kx6bc7u5e"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bf4yclropol43" path="res://scripts/components/Movement/GroundMovementAbility.cs" id="1_7efrb"]
|
||||
|
||||
[node name="GroundAbility" type="Node"]
|
||||
script = ExtResource("1_7efrb")
|
||||
MaxSpeed = 376.0
|
||||
Friction = 2500.0
|
||||
metadata/_custom_type_script = "uid://bf4yclropol43"
|
7
objects/movement_abilities/one_way_platform_ability.tscn
Normal file
7
objects/movement_abilities/one_way_platform_ability.tscn
Normal file
@@ -0,0 +1,7 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://bty3jq8u0pxkf"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://ck6kmnbwhsttt" path="res://scripts/components/Movement/OneWayPlatformAbility.cs" id="1_i0f5i"]
|
||||
|
||||
[node name="OneWayPlatformAbility" type="Node"]
|
||||
script = ExtResource("1_i0f5i")
|
||||
metadata/_custom_type_script = "uid://ck6kmnbwhsttt"
|
7
objects/movement_abilities/spaceship_ability.tscn
Normal file
7
objects/movement_abilities/spaceship_ability.tscn
Normal file
@@ -0,0 +1,7 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://bu3vuxlrvoo1t"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://drgwa5q5k2tbm" path="res://scripts/components/Movement/SpaceshipMovementAbility.cs" id="1_u3vpp"]
|
||||
|
||||
[node name="SpaceshipAbility" type="Node"]
|
||||
script = ExtResource("1_u3vpp")
|
||||
metadata/_custom_type_script = "uid://drgwa5q5k2tbm"
|
8
objects/movement_abilities/variable_jump_ability.tscn
Normal file
8
objects/movement_abilities/variable_jump_ability.tscn
Normal file
@@ -0,0 +1,8 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://d0r5edxnx5jqx"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://ccksp2e76s7sr" path="res://scripts/components/Movement/VariableJumpAbility.cs" id="1_y30i5"]
|
||||
|
||||
[node name="VariableJumpAbility" type="Node"]
|
||||
script = ExtResource("1_y30i5")
|
||||
JumpCutMultiplier = 0.507
|
||||
metadata/_custom_type_script = "uid://ccksp2e76s7sr"
|
7
objects/movement_abilities/wall_jump_ability.tscn
Normal file
7
objects/movement_abilities/wall_jump_ability.tscn
Normal file
@@ -0,0 +1,7 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://chjbi5mgtwhsh"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://6foetukqmyoe" path="res://scripts/components/Movement/WallJumpAbility.cs" id="1_jjesg"]
|
||||
|
||||
[node name="WallJumpAbility" type="Node"]
|
||||
script = ExtResource("1_jjesg")
|
||||
metadata/_custom_type_script = "uid://6foetukqmyoe"
|
7
objects/player_skills/brick_armor_skill_component.tscn
Normal file
7
objects/player_skills/brick_armor_skill_component.tscn
Normal file
@@ -0,0 +1,7 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://cdeh7wfc62fr4"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://5fyepa666cc8" path="res://scripts/components/BrickArmorSkillComponent.cs" id="1_i7tox"]
|
||||
|
||||
[node name="BrickArmorSkillComponent" type="Node"]
|
||||
script = ExtResource("1_i7tox")
|
||||
metadata/_custom_type_script = "uid://5fyepa666cc8"
|
9
objects/player_skills/brick_shield_skill_component.tscn
Normal file
9
objects/player_skills/brick_shield_skill_component.tscn
Normal file
@@ -0,0 +1,9 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://blwk5qduvdnxv"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dbiu2qrr8sprx" path="res://scripts/components/BrickShieldSkillComponent.cs" id="1_gjjt4"]
|
||||
[ext_resource type="PackedScene" uid="uid://c6rgh0qn4jqlc" path="res://objects/items/shield.tscn" id="2_wjvuq"]
|
||||
|
||||
[node name="BrickShieldSkillComponent" type="Node"]
|
||||
script = ExtResource("1_gjjt4")
|
||||
ShieldScene = ExtResource("2_wjvuq")
|
||||
metadata/_custom_type_script = "uid://dbiu2qrr8sprx"
|
9
objects/player_skills/double_jump_skill.tscn
Normal file
9
objects/player_skills/double_jump_skill.tscn
Normal file
@@ -0,0 +1,9 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://dwaxbojb44a6l"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c61jxwtgiuqsy" path="res://scripts/components/DoubleJumpSkillComponent.cs" id="1_d8v8j"]
|
||||
[ext_resource type="PackedScene" uid="uid://bktuhojquwesl" path="res://objects/movement_abilities/double_jump.tscn" id="2_romvo"]
|
||||
|
||||
[node name="DoubleJumpSkill" type="Node"]
|
||||
script = ExtResource("1_d8v8j")
|
||||
_doubleJumpAbilityScene = ExtResource("2_romvo")
|
||||
metadata/_custom_type_script = "uid://c61jxwtgiuqsy"
|
9
objects/player_skills/ground_pound_skill_component.tscn
Normal file
9
objects/player_skills/ground_pound_skill_component.tscn
Normal file
@@ -0,0 +1,9 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://lu3wvpqefekn"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://3sclg5kdjg13" path="res://scripts/components/GroundPoundSkillComponent.cs" id="1_gx4wb"]
|
||||
[ext_resource type="PackedScene" uid="uid://d0074by8ith81" path="res://objects/fxs/shockwave.tscn" id="2_3vdwu"]
|
||||
|
||||
[node name="GroundPoundSkillComponent" type="Node"]
|
||||
script = ExtResource("1_gx4wb")
|
||||
ShockwaveScene = ExtResource("2_3vdwu")
|
||||
metadata/_custom_type_script = "uid://3sclg5kdjg13"
|
8
objects/player_skills/x_ray_vision_skill_component.tscn
Normal file
8
objects/player_skills/x_ray_vision_skill_component.tscn
Normal file
@@ -0,0 +1,8 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://dtxkjif7prm70"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dl7vthhurirwc" path="res://scripts/components/XRayVisionSkillComponent.cs" id="1_ebn6n"]
|
||||
|
||||
[node name="XRayVisionSkillComponent" type="Node"]
|
||||
script = ExtResource("1_ebn6n")
|
||||
SecretLayer = 2
|
||||
metadata/_custom_type_script = "uid://dl7vthhurirwc"
|
18
objects/skill_manager.tscn
Normal file
18
objects/skill_manager.tscn
Normal file
@@ -0,0 +1,18 @@
|
||||
[gd_scene load_steps=13 format=3 uid="uid://bi6v7u17vg1ww"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dru77vj07e18s" path="res://Autoloads/SkillManager.cs" id="1_31033"]
|
||||
[ext_resource type="Script" uid="uid://d4crrfmbgxnqf" path="res://scripts/Resources/SkillData.cs" id="2_87da4"]
|
||||
[ext_resource type="Resource" uid="uid://dw5ee2lpeypnb" path="res://resources/skills/brick_throw.tres" id="3_shjvi"]
|
||||
[ext_resource type="Resource" uid="uid://cdp8sex36vdq2" path="res://resources/skills/explosive_brick.tres" id="4_53vnv"]
|
||||
[ext_resource type="Resource" uid="uid://cr5lo4h8wm0jc" path="res://resources/skills/fire_brick.tres" id="5_77gav"]
|
||||
[ext_resource type="Resource" uid="uid://ceakv6oqob6m7" path="res://resources/skills/ice_brick.tres" id="6_gib8v"]
|
||||
[ext_resource type="Resource" uid="uid://d3bjre2etov1n" path="res://resources/skills/magnetic.tres" id="7_6wy8o"]
|
||||
[ext_resource type="Resource" uid="uid://bxsgq8703qx4u" path="res://resources/skills/double_jump.tres" id="8_87da4"]
|
||||
[ext_resource type="Resource" uid="uid://cseilsspimw1n" path="res://resources/skills/ground_pound_skill.tres" id="9_77gav"]
|
||||
[ext_resource type="Resource" uid="uid://c5dj06l86winx" path="res://resources/skills/xray_vision.tres" id="10_gib8v"]
|
||||
[ext_resource type="Resource" uid="uid://d12defdtmlk0u" path="res://resources/skills/brick_shield.tres" id="11_6wy8o"]
|
||||
[ext_resource type="Resource" uid="uid://dghnl301o1aiy" path="res://resources/skills/brick_armor.tres" id="12_gib8v"]
|
||||
|
||||
[node name="SkillManager" type="Node"]
|
||||
script = ExtResource("1_31033")
|
||||
AvailableSkills = Array[ExtResource("2_87da4")]([ExtResource("3_shjvi"), ExtResource("4_53vnv"), ExtResource("5_77gav"), ExtResource("6_gib8v"), ExtResource("7_6wy8o"), ExtResource("8_87da4"), ExtResource("9_77gav"), ExtResource("10_gib8v"), ExtResource("11_6wy8o"), ExtResource("12_gib8v")])
|
@@ -1,6 +0,0 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://cyvcg2re4qifd"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://f4y8evisxgnc" path="res://scripts/steam_integration.gd" id="1_ds8p3"]
|
||||
|
||||
[node name="SteamIntegration" type="Node"]
|
||||
script = ExtResource("1_ds8p3")
|
85
objects/ui/achievement_popup.tscn
Normal file
85
objects/ui/achievement_popup.tscn
Normal file
@@ -0,0 +1,85 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://tgaadui3lvdc"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cejjan582nhfn" path="res://scripts/UI/AchievementPopup.cs" id="1_8pd1y"]
|
||||
[ext_resource type="Texture2D" uid="uid://cebeyr4wnibvk" path="res://sprites/achievement.png" id="2_1wq1d"]
|
||||
[ext_resource type="Texture2D" uid="uid://fvgvlqh7vv1l" path="res://sprites/achievement_panel.png" id="2_enx8n"]
|
||||
|
||||
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_enx8n"]
|
||||
texture = ExtResource("2_enx8n")
|
||||
|
||||
[node name="AchievementPopup" type="CanvasLayer" node_paths=PackedStringArray("TitleLabel", "DescriptionLabel", "IconRect")]
|
||||
script = ExtResource("1_8pd1y")
|
||||
TitleLabel = NodePath("Container/Panel/MarginContainer/VBoxContainer/Title")
|
||||
DescriptionLabel = NodePath("Container/Panel/MarginContainer/VBoxContainer/Description")
|
||||
IconRect = NodePath("Container/Panel/MarginContainer/VBoxContainer/TextureRect")
|
||||
metadata/_custom_type_script = "uid://cejjan582nhfn"
|
||||
|
||||
[node name="Container" type="Control" parent="."]
|
||||
custom_minimum_size = Vector2(200, 120)
|
||||
layout_mode = 3
|
||||
anchors_preset = 3
|
||||
anchor_left = 1.0
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -200.0
|
||||
offset_top = -120.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 0
|
||||
|
||||
[node name="Panel" type="Panel" parent="Container"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_styles/panel = SubResource("StyleBoxTexture_enx8n")
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="Container/Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme_override_constants/margin_left = 10
|
||||
theme_override_constants/margin_top = 10
|
||||
theme_override_constants/margin_right = 10
|
||||
theme_override_constants/margin_bottom = 10
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="Container/Panel/MarginContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 4
|
||||
|
||||
[node name="Title" type="Label" parent="Container/Panel/MarginContainer/VBoxContainer"]
|
||||
custom_minimum_size = Vector2(120, 30)
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/font_size = 16
|
||||
text = "saaaaaaaaaaaaaaaaaaa"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
autowrap_mode = 3
|
||||
|
||||
[node name="Description" type="Label" parent="Container/Panel/MarginContainer/VBoxContainer"]
|
||||
visible = false
|
||||
custom_minimum_size = Vector2(120, 40)
|
||||
layout_mode = 2
|
||||
theme_override_colors/font_color = Color(0.7, 0.7, 0.7, 1)
|
||||
text = "aaaaaaaaaaaaaaaaa"
|
||||
autowrap_mode = 3
|
||||
|
||||
[node name="Control" type="Control" parent="Container/Panel/MarginContainer/VBoxContainer"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="Container/Panel/MarginContainer/VBoxContainer"]
|
||||
visible = false
|
||||
custom_minimum_size = Vector2(128, 32)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 4
|
||||
size_flags_vertical = 8
|
||||
texture = ExtResource("2_1wq1d")
|
||||
expand_mode = 4
|
||||
stretch_mode = 5
|
15
objects/ui/floating_text.tscn
Normal file
15
objects/ui/floating_text.tscn
Normal file
@@ -0,0 +1,15 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://c7mp0o2goauyy"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bgh1dilc82oat" path="res://scripts/UI/FloatingText.cs" id="1_721jx"]
|
||||
|
||||
[node name="FloatingText" type="Label"]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 8.0
|
||||
theme_override_constants/outline_size = 1
|
||||
theme_override_constants/shadow_outline_size = 3
|
||||
theme_override_font_sizes/font_size = 8
|
||||
text = "23"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
script = ExtResource("1_721jx")
|
||||
metadata/_custom_type_script = "uid://bbupymh6krrgx"
|
@@ -12,6 +12,8 @@ anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
focus_neighbor_bottom = NodePath("PanelContainer/MarginContainer/VBoxContainer/ContinueButton")
|
||||
focus_next = NodePath("PanelContainer/MarginContainer/VBoxContainer/ContinueButton")
|
||||
script = ExtResource("1_epxpl")
|
||||
MainMenuControl = NodePath(".")
|
||||
NewGameButton = NodePath("PanelContainer/MarginContainer/VBoxContainer/NewGameButton")
|
||||
@@ -54,26 +56,42 @@ size_flags_vertical = 3
|
||||
|
||||
[node name="ContinueButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
focus_neighbor_bottom = NodePath("../NewGameButton")
|
||||
focus_next = NodePath("../NewGameButton")
|
||||
text = "CONTINUE_BUTTON"
|
||||
flat = true
|
||||
|
||||
[node name="NewGameButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
focus_neighbor_top = NodePath("../ContinueButton")
|
||||
focus_neighbor_bottom = NodePath("../SettingsButton")
|
||||
focus_next = NodePath("../SettingsButton")
|
||||
focus_previous = NodePath("../ContinueButton")
|
||||
text = "NEW_GAME_BUTTON"
|
||||
flat = true
|
||||
|
||||
[node name="SettingsButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
focus_neighbor_top = NodePath("../NewGameButton")
|
||||
focus_neighbor_bottom = NodePath("../CreditsButton")
|
||||
focus_next = NodePath("../CreditsButton")
|
||||
focus_previous = NodePath("../NewGameButton")
|
||||
text = "SETTINGS_BUTTON"
|
||||
flat = true
|
||||
|
||||
[node name="CreditsButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
focus_neighbor_top = NodePath("../SettingsButton")
|
||||
focus_neighbor_bottom = NodePath("../QuitButton")
|
||||
focus_next = NodePath("../QuitButton")
|
||||
focus_previous = NodePath("../SettingsButton")
|
||||
text = "CREDITS_BUTTON"
|
||||
flat = true
|
||||
|
||||
[node name="QuitButton" type="Button" parent="PanelContainer/MarginContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
focus_neighbor_top = NodePath("../CreditsButton")
|
||||
focus_previous = NodePath("../CreditsButton")
|
||||
text = "QUIT_BUTTON"
|
||||
flat = true
|
||||
|
||||
|
26
objects/ui/speed_run_hud.tscn
Normal file
26
objects/ui/speed_run_hud.tscn
Normal file
@@ -0,0 +1,26 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://kh85xqo6j848"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://0jfdx0hufs55" path="res://scripts/UI/SpeedRunHud.cs" id="1_uwqm0"]
|
||||
|
||||
[node name="SpeedRunHud" type="Control" node_paths=PackedStringArray("_timerLabel")]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_uwqm0")
|
||||
_timerLabel = NodePath("Label")
|
||||
metadata/_custom_type_script = "uid://0jfdx0hufs55"
|
||||
|
||||
[node name="Label" type="Label" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
text = "00:00:00"
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
uppercase = true
|
@@ -38,6 +38,14 @@ SaveSystem="*res://Autoloads/SaveSystem.cs"
|
||||
ConsoleManager="*res://Autoloads/ConsoleManager.cs"
|
||||
LimboConsole="*res://addons/limbo_console/limbo_console.gd"
|
||||
DialogueManager="*res://addons/dialogue_manager/dialogue_manager.gd"
|
||||
SteamManager="*res://Autoloads/SteamManager.cs"
|
||||
AchievementManager="*res://objects/achievement_manager.tscn"
|
||||
SkillManager="*res://objects/skill_manager.tscn"
|
||||
FloatingTextManager="*res://objects/floating_text_manager.tscn"
|
||||
EventBus="*res://Autoloads/EventBus.cs"
|
||||
StatisticsManager="*res://Autoloads/StatisticsManager.cs"
|
||||
SpeedRunManager="res://Autoloads/SpeedRunManager.cs"
|
||||
GhostManager="res://objects/ghost_manager.tscn"
|
||||
|
||||
[debug]
|
||||
|
||||
@@ -95,6 +103,12 @@ ui_accept={
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":true,"script":null)
|
||||
]
|
||||
}
|
||||
ui_cancel={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194305,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":true,"script":null)
|
||||
]
|
||||
}
|
||||
left={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null)
|
||||
@@ -114,7 +128,6 @@ jump={
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":11,"pressure":0.0,"pressed":true,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":true,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":-1.0,"script":null)
|
||||
]
|
||||
}
|
||||
up={
|
||||
@@ -189,12 +202,14 @@ locale/translations=PackedStringArray("res://translations.en.translation", "res:
|
||||
|
||||
[layer_names]
|
||||
|
||||
2d_render/layer_2="SECRET"
|
||||
2d_physics/layer_1="Terrain"
|
||||
2d_physics/layer_2="Collectible Entities"
|
||||
2d_physics/layer_3="Player"
|
||||
2d_physics/layer_4="Enemy"
|
||||
2d_physics/layer_5="player projectiles"
|
||||
2d_physics/layer_6="Environment"
|
||||
2d_physics/layer_7="Enemy Projectiles"
|
||||
|
||||
[physics]
|
||||
|
||||
|
25
resources/skills/brick_armor.tres
Normal file
25
resources/skills/brick_armor.tres
Normal file
@@ -0,0 +1,25 @@
|
||||
[gd_resource type="Resource" script_class="SkillData" load_steps=5 format=3 uid="uid://dghnl301o1aiy"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cdeh7wfc62fr4" path="res://objects/player_skills/brick_armor_skill_component.tscn" id="1_aqcna"]
|
||||
[ext_resource type="Script" uid="uid://d4crrfmbgxnqf" path="res://scripts/Resources/SkillData.cs" id="1_unqwr"]
|
||||
[ext_resource type="Script" uid="uid://dwb0e05pewcsn" path="res://scripts/Resources/SkillUpgrade.cs" id="2_kqsqd"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_xwv1u"]
|
||||
script = ExtResource("2_kqsqd")
|
||||
Cost = 120
|
||||
Description = ""
|
||||
Properties = Dictionary[String, Variant]({
|
||||
"health_bonus": 1.0
|
||||
})
|
||||
metadata/_custom_type_script = "uid://dwb0e05pewcsn"
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_unqwr")
|
||||
Name = "BRICK_ARMOR"
|
||||
Description = "BRICK_ARMOR_DESCRIPTION"
|
||||
IsActive = false
|
||||
Level = 1
|
||||
Type = 1
|
||||
Node = ExtResource("1_aqcna")
|
||||
Upgrades = Array[ExtResource("2_kqsqd")]([SubResource("Resource_xwv1u"), SubResource("Resource_xwv1u")])
|
||||
metadata/_custom_type_script = "uid://d4crrfmbgxnqf"
|
34
resources/skills/brick_shield.tres
Normal file
34
resources/skills/brick_shield.tres
Normal file
@@ -0,0 +1,34 @@
|
||||
[gd_resource type="Resource" script_class="SkillData" load_steps=6 format=3 uid="uid://d12defdtmlk0u"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://d4crrfmbgxnqf" path="res://scripts/Resources/SkillData.cs" id="1_m360g"]
|
||||
[ext_resource type="PackedScene" uid="uid://blwk5qduvdnxv" path="res://objects/player_skills/brick_shield_skill_component.tscn" id="1_xjknp"]
|
||||
[ext_resource type="Script" uid="uid://dwb0e05pewcsn" path="res://scripts/Resources/SkillUpgrade.cs" id="2_lr0w4"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_mu2sy"]
|
||||
script = ExtResource("2_lr0w4")
|
||||
Cost = 100
|
||||
Description = ""
|
||||
Properties = Dictionary[String, Variant]({
|
||||
"health": 0.25
|
||||
})
|
||||
metadata/_custom_type_script = "uid://dwb0e05pewcsn"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_5ab4a"]
|
||||
script = ExtResource("2_lr0w4")
|
||||
Cost = 150
|
||||
Description = ""
|
||||
Properties = Dictionary[String, Variant]({
|
||||
"health": 0.5
|
||||
})
|
||||
metadata/_custom_type_script = "uid://dwb0e05pewcsn"
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_m360g")
|
||||
Name = "BRICK_SHIELD"
|
||||
Description = "BRICK_SHIELD_DESCRIPTION"
|
||||
IsActive = false
|
||||
Level = 1
|
||||
Type = 2
|
||||
Node = ExtResource("1_xjknp")
|
||||
Upgrades = Array[ExtResource("2_lr0w4")]([SubResource("Resource_mu2sy"), SubResource("Resource_5ab4a")])
|
||||
metadata/_custom_type_script = "uid://d4crrfmbgxnqf"
|
@@ -1,17 +1,18 @@
|
||||
[gd_resource type="Resource" load_steps=4 format=3 uid="uid://dw5ee2lpeypnb"]
|
||||
[gd_resource type="Resource" script_class="SkillData" load_steps=6 format=3 uid="uid://dw5ee2lpeypnb"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://coayig4dxelo2" path="res://objects/player_skills/brick_throw_skill.tscn" id="1_5gnea"]
|
||||
[ext_resource type="Texture2D" uid="uid://dxtdwgg3po0eg" path="res://sprites/brick_power_Skill_icon.png" id="2_yimbq"]
|
||||
[ext_resource type="Script" uid="uid://dwb0e05pewcsn" path="res://scripts/Resources/SkillUpgrade.cs" id="3_lt17o"]
|
||||
[ext_resource type="Script" uid="uid://d4crrfmbgxnqf" path="res://scripts/Resources/SkillData.cs" id="3_yimbq"]
|
||||
[ext_resource type="Resource" uid="uid://d0qk7kh47b4pu" path="res://resources/skills/upgrades/brick_throw/upgrade_1.tres" id="4_nhovl"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("3_yimbq")
|
||||
Name = "BRICK_POWER"
|
||||
Description = "BRICK_POWER_DESCRIPTION"
|
||||
Cost = 50
|
||||
Icon = ExtResource("2_yimbq")
|
||||
IsActive = false
|
||||
Level = 1
|
||||
MaxLevel = 3
|
||||
Type = 1
|
||||
Node = ExtResource("1_5gnea")
|
||||
Upgrades = Array[ExtResource("3_lt17o")]([ExtResource("4_nhovl")])
|
||||
|
23
resources/skills/double_jump.tres
Normal file
23
resources/skills/double_jump.tres
Normal file
@@ -0,0 +1,23 @@
|
||||
[gd_resource type="Resource" script_class="SkillData" load_steps=5 format=3 uid="uid://bxsgq8703qx4u"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://d4crrfmbgxnqf" path="res://scripts/Resources/SkillData.cs" id="1_p5qvt"]
|
||||
[ext_resource type="PackedScene" uid="uid://dwaxbojb44a6l" path="res://objects/player_skills/double_jump_skill.tscn" id="1_t7o84"]
|
||||
[ext_resource type="Script" uid="uid://dwb0e05pewcsn" path="res://scripts/Resources/SkillUpgrade.cs" id="2_kywbf"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_0fn2n"]
|
||||
script = ExtResource("2_kywbf")
|
||||
Cost = 80
|
||||
Description = ""
|
||||
Properties = Dictionary[String, Variant]({})
|
||||
metadata/_custom_type_script = "uid://dwb0e05pewcsn"
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_p5qvt")
|
||||
Name = "DOUBLE_JUMP"
|
||||
Description = "DOUBLE_JUMP_DESCRIPTION"
|
||||
IsActive = false
|
||||
Level = 1
|
||||
Type = 2
|
||||
Node = ExtResource("1_t7o84")
|
||||
Upgrades = Array[ExtResource("2_kywbf")]([SubResource("Resource_0fn2n")])
|
||||
metadata/_custom_type_script = "uid://d4crrfmbgxnqf"
|
@@ -1,17 +1,18 @@
|
||||
[gd_resource type="Resource" load_steps=4 format=3 uid="uid://cdp8sex36vdq2"]
|
||||
[gd_resource type="Resource" script_class="SkillData" load_steps=6 format=3 uid="uid://cdp8sex36vdq2"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cfses3kn3y8qw" path="res://objects/player_skills/exploding_brick_throw_skill.tscn" id="2_gt8f6"]
|
||||
[ext_resource type="Script" uid="uid://dwb0e05pewcsn" path="res://scripts/Resources/SkillUpgrade.cs" id="3_txev8"]
|
||||
[ext_resource type="Texture2D" uid="uid://c0xtjfpmkfolk" path="res://sprites/explosive_brick_skill_icon.png" id="3_wkqmb"]
|
||||
[ext_resource type="Resource" uid="uid://c50advf65oi8c" path="res://resources/skills/upgrades/explosive_brick/upgrade_1.tres" id="4_1x338"]
|
||||
[ext_resource type="Script" uid="uid://d4crrfmbgxnqf" path="res://scripts/Resources/SkillData.cs" id="5_wkqmb"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("5_wkqmb")
|
||||
Name = "EXPLOSIVE_BRICK"
|
||||
Description = "EXPLOSIVE_BRICK_DESCRIPTION"
|
||||
Cost = 180
|
||||
Icon = ExtResource("3_wkqmb")
|
||||
IsActive = false
|
||||
Level = 0
|
||||
MaxLevel = 1
|
||||
Type = 1
|
||||
Node = ExtResource("2_gt8f6")
|
||||
Upgrades = Array[ExtResource("3_txev8")]([ExtResource("4_1x338")])
|
||||
|
@@ -1,17 +1,18 @@
|
||||
[gd_resource type="Resource" load_steps=4 format=3 uid="uid://cr5lo4h8wm0jc"]
|
||||
[gd_resource type="Resource" script_class="SkillData" load_steps=6 format=3 uid="uid://cr5lo4h8wm0jc"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://dfm2you3v5ap4" path="res://objects/player_skills/fire_brick_throw_skill.tscn" id="2_d6y6i"]
|
||||
[ext_resource type="Script" uid="uid://dwb0e05pewcsn" path="res://scripts/Resources/SkillUpgrade.cs" id="3_1ooyb"]
|
||||
[ext_resource type="Texture2D" uid="uid://cocbnr38qsikt" path="res://sprites/fire_brick_skill_icon.png" id="3_w87qb"]
|
||||
[ext_resource type="Resource" uid="uid://dmfiqqjmfa7m3" path="res://resources/skills/upgrades/fire_brick/upgrade_1.tres" id="4_aj7vs"]
|
||||
[ext_resource type="Script" uid="uid://d4crrfmbgxnqf" path="res://scripts/Resources/SkillData.cs" id="5_us7vb"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("5_us7vb")
|
||||
Name = "FIRE_BRICK"
|
||||
Description = "FIRE_BIRCK_DESCRIPTION"
|
||||
Cost = 150
|
||||
Icon = ExtResource("3_w87qb")
|
||||
IsActive = false
|
||||
Level = 0
|
||||
MaxLevel = 3
|
||||
Type = 1
|
||||
Node = ExtResource("2_d6y6i")
|
||||
Upgrades = Array[ExtResource("3_1ooyb")]([ExtResource("4_aj7vs")])
|
||||
|
23
resources/skills/ground_pound_skill.tres
Normal file
23
resources/skills/ground_pound_skill.tres
Normal file
@@ -0,0 +1,23 @@
|
||||
[gd_resource type="Resource" script_class="SkillData" load_steps=5 format=3 uid="uid://cseilsspimw1n"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://lu3wvpqefekn" path="res://objects/player_skills/ground_pound_skill_component.tscn" id="1_auljr"]
|
||||
[ext_resource type="Script" uid="uid://d4crrfmbgxnqf" path="res://scripts/Resources/SkillData.cs" id="1_i1qac"]
|
||||
[ext_resource type="Script" uid="uid://dwb0e05pewcsn" path="res://scripts/Resources/SkillUpgrade.cs" id="2_tkhf7"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_upxa7"]
|
||||
script = ExtResource("2_tkhf7")
|
||||
Cost = 300
|
||||
Description = ""
|
||||
Properties = Dictionary[String, Variant]({})
|
||||
metadata/_custom_type_script = "uid://dwb0e05pewcsn"
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_i1qac")
|
||||
Name = "GROUND_POUND_SKILL"
|
||||
Description = "GROUND_POUND_SKILL_DESCRIPTION"
|
||||
IsActive = false
|
||||
Level = 1
|
||||
Type = 2
|
||||
Node = ExtResource("1_auljr")
|
||||
Upgrades = Array[ExtResource("2_tkhf7")]([SubResource("Resource_upxa7")])
|
||||
metadata/_custom_type_script = "uid://d4crrfmbgxnqf"
|
@@ -1,17 +1,18 @@
|
||||
[gd_resource type="Resource" load_steps=4 format=3 uid="uid://ceakv6oqob6m7"]
|
||||
[gd_resource type="Resource" script_class="SkillData" load_steps=6 format=3 uid="uid://ceakv6oqob6m7"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://dpmmacva7qf8j" path="res://objects/player_skills/ice_brick_throw_skill.tscn" id="2_gm1ka"]
|
||||
[ext_resource type="Texture2D" uid="uid://c1qaxspv8aemf" path="res://sprites/ice_brick_skill_icon.png" id="3_6btth"]
|
||||
[ext_resource type="Script" uid="uid://dwb0e05pewcsn" path="res://scripts/Resources/SkillUpgrade.cs" id="3_e3cb0"]
|
||||
[ext_resource type="Resource" uid="uid://myr57ylobqkn" path="res://resources/skills/upgrades/ice_brick/upgrade_1.tres" id="4_3pbub"]
|
||||
[ext_resource type="Script" uid="uid://d4crrfmbgxnqf" path="res://scripts/Resources/SkillData.cs" id="5_57pl3"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("5_57pl3")
|
||||
Name = "ICE_BRICK"
|
||||
Description = "ICE_BRICK_DESCRIPTION"
|
||||
Cost = 180
|
||||
Icon = ExtResource("3_6btth")
|
||||
IsActive = false
|
||||
Level = 0
|
||||
MaxLevel = 3
|
||||
Type = 1
|
||||
Node = ExtResource("2_gm1ka")
|
||||
Upgrades = Array[ExtResource("3_e3cb0")]([ExtResource("4_3pbub")])
|
||||
|
@@ -1,22 +1,18 @@
|
||||
[gd_resource type="Resource" load_steps=4 format=3 uid="uid://d3bjre2etov1n"]
|
||||
[gd_resource type="Resource" script_class="SkillData" load_steps=6 format=3 uid="uid://d3bjre2etov1n"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://cvhoq7aubxlmq" path="res://sprites/ui/magnetic_skill_icon.png" id="1_16qcg"]
|
||||
[ext_resource type="PackedScene" uid="uid://cunyndudjh2he" path="res://objects/player_skills/magnetic_skill.tscn" id="1_er41s"]
|
||||
[ext_resource type="Script" uid="uid://dwb0e05pewcsn" path="res://scripts/Resources/SkillUpgrade.cs" id="3_0j4wg"]
|
||||
[ext_resource type="Script" uid="uid://d4crrfmbgxnqf" path="res://scripts/Resources/SkillData.cs" id="3_htb6q"]
|
||||
[ext_resource type="Resource" uid="uid://dte14sxesjm3y" path="res://resources/skills/upgrades/magnetic/upgrade_1.tres" id="4_0hjrs"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("3_htb6q")
|
||||
Name = "MAGNETIC"
|
||||
Description = "MAGNETIC_DESCRIPTION"
|
||||
Config = Dictionary[String, Variant]({
|
||||
"magnetic_area": NodePath("MagneticArea"),
|
||||
"magnetic_move_duration": 1.25,
|
||||
"root": NodePath(".")
|
||||
})
|
||||
Cost = 70
|
||||
Icon = ExtResource("1_16qcg")
|
||||
IsActive = false
|
||||
Level = 1
|
||||
MaxLevel = 1
|
||||
Type = 2
|
||||
Node = ExtResource("1_er41s")
|
||||
Upgrades = Array[ExtResource("3_0j4wg")]([ExtResource("4_0hjrs")])
|
||||
|
12
resources/skills/upgrades/brick_throw/upgrade_1.tres
Normal file
12
resources/skills/upgrades/brick_throw/upgrade_1.tres
Normal file
@@ -0,0 +1,12 @@
|
||||
[gd_resource type="Resource" script_class="SkillUpgrade" load_steps=2 format=3 uid="uid://d0qk7kh47b4pu"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dwb0e05pewcsn" path="res://scripts/Resources/SkillUpgrade.cs" id="1_1l84l"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_1l84l")
|
||||
Cost = 50
|
||||
Description = "Upgrade Description"
|
||||
Properties = Dictionary[String, Variant]({
|
||||
"FireRate": 0.6
|
||||
})
|
||||
metadata/_custom_type_script = "uid://dwb0e05pewcsn"
|
12
resources/skills/upgrades/explosive_brick/upgrade_1.tres
Normal file
12
resources/skills/upgrades/explosive_brick/upgrade_1.tres
Normal file
@@ -0,0 +1,12 @@
|
||||
[gd_resource type="Resource" script_class="SkillUpgrade" load_steps=2 format=3 uid="uid://c50advf65oi8c"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dwb0e05pewcsn" path="res://scripts/Resources/SkillUpgrade.cs" id="1_0hsac"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_0hsac")
|
||||
Cost = 240
|
||||
Description = "Upgrade Description"
|
||||
Properties = Dictionary[String, Variant]({
|
||||
"FireRate": 0.6
|
||||
})
|
||||
metadata/_custom_type_script = "uid://dwb0e05pewcsn"
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user