commit bba82f64fdb299e29b90ab88ab0e246deee33322 Author: Gabriel Kaszewski Date: Sat Jan 24 02:47:23 2026 +0100 add initial project files and configurations, including EventBus, systems, and resources diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..f28239b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,4 @@ +root = true + +[*] +charset = utf-8 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8ad74f7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0af181c --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# Godot 4+ specific ignores +.godot/ +/android/ diff --git a/Code/Core/EventBus.cs b/Code/Core/EventBus.cs new file mode 100644 index 0000000..9ebf2a8 --- /dev/null +++ b/Code/Core/EventBus.cs @@ -0,0 +1,30 @@ +using System; +using MaxEffort.Code.Data; + +namespace MaxEffort.Code.Core; + +public static class EventBus +{ + public static event Action OnLiftEffortApplied; // Player pressed space + public static event Action OnFocusRelease; // Player stopped to look around + + public static event Action OnFocusChanged; // 0.0 to 1.0 (Tunnel Intensity) + public static event Action OnLiftCompleted; // true = Success, false = Fail + public static event Action OnLiftProgress; // 0.0 to 1.0 (Lift Progress) + public static event Action OnLiftVisualHeight; + public static event Action OnCameraTrauma; + + public static event Action OnHazardSpawned; + public static event Action OnHazardResolved; + + public static void PublishLiftEffortApplied(float strength) => OnLiftEffortApplied?.Invoke(strength); + public static void PublishFocusChanged(float intensity) => OnFocusChanged?.Invoke(intensity); + public static void PublishLiftCompleted(bool success) => OnLiftCompleted?.Invoke(success); + public static void PublishLiftProgress(float progress) => OnLiftProgress?.Invoke(progress); + + public static void PublishFocusRelease() => OnFocusRelease?.Invoke(); + public static void PublishHazardSpawned(HazardType type) => OnHazardSpawned?.Invoke(type); + public static void PublishHazardResolved(HazardType type) => OnHazardResolved?.Invoke(type); + public static void PublishLiftVisualHeight(float height) => OnLiftVisualHeight?.Invoke(height); + public static void PublishCameraTrauma(float trauma) => OnCameraTrauma?.Invoke(trauma); +} \ No newline at end of file diff --git a/Code/Core/EventBus.cs.uid b/Code/Core/EventBus.cs.uid new file mode 100644 index 0000000..ce6a0eb --- /dev/null +++ b/Code/Core/EventBus.cs.uid @@ -0,0 +1 @@ +uid://c2v0ppfl3wy8a diff --git a/Code/Data/DayConfig.cs b/Code/Data/DayConfig.cs new file mode 100644 index 0000000..4f04592 --- /dev/null +++ b/Code/Data/DayConfig.cs @@ -0,0 +1,18 @@ +using Godot; +using Godot.Collections; + +namespace MaxEffort.Code.Data; + +[GlobalClass] +public partial class DayConfig : Resource +{ + [Export] public int DayNumber; + [Export] public string DayTitle = "Day 1: Light Weight"; + [Export] public float TargetWeight = 100f; // Total Lift Distance + [Export] public float Gravity = 2.0f; // Difficulty multiplier + + [Export] public PackedScene MiniGameScene; + + // Hazards available on this specific day + [Export] public Array AvailableHazards; +} \ No newline at end of file diff --git a/Code/Data/DayConfig.cs.uid b/Code/Data/DayConfig.cs.uid new file mode 100644 index 0000000..e17890b --- /dev/null +++ b/Code/Data/DayConfig.cs.uid @@ -0,0 +1 @@ +uid://bkj0pcknqvjco diff --git a/Code/Data/HazardDef.cs b/Code/Data/HazardDef.cs new file mode 100644 index 0000000..572156b --- /dev/null +++ b/Code/Data/HazardDef.cs @@ -0,0 +1,17 @@ +using Godot; + +namespace MaxEffort.Code.Data; + +[GlobalClass] +public partial class HazardDef : Resource +{ + [Export] public HazardType Type; + [Export] public string DisplayName; + [Export] public SpriteFrames Animations; + [Export] public string IdleAnimName = "default"; + [Export] public string WalkAnimName = "walk"; // Optional, if they walk in + [Export] public float TimeToFail = 3.0f; // How long before Game Over if ignored + [Export] public float SpawnWeight = 1.0f; // Rarity chance + [Export] public float MinFocusToSpawn = 0.3f; // Won't spawn if you aren't somewhat focused + [Export] public int ClicksToResolve = 1; +} \ No newline at end of file diff --git a/Code/Data/HazardDef.cs.uid b/Code/Data/HazardDef.cs.uid new file mode 100644 index 0000000..095144c --- /dev/null +++ b/Code/Data/HazardDef.cs.uid @@ -0,0 +1 @@ +uid://ck1vtdnok31dq diff --git a/Code/Data/HazardType.cs b/Code/Data/HazardType.cs new file mode 100644 index 0000000..7e14507 --- /dev/null +++ b/Code/Data/HazardType.cs @@ -0,0 +1,10 @@ +namespace MaxEffort.Code.Data; + +public enum HazardType +{ + None, + GymBro, + LoosePlate, + PhoneDistraction, + Manager +} \ No newline at end of file diff --git a/Code/Data/HazardType.cs.uid b/Code/Data/HazardType.cs.uid new file mode 100644 index 0000000..571ea0b --- /dev/null +++ b/Code/Data/HazardType.cs.uid @@ -0,0 +1 @@ +uid://b7dpyd82o2xlp diff --git a/Code/Data/SoundBank.cs b/Code/Data/SoundBank.cs new file mode 100644 index 0000000..4f5c444 --- /dev/null +++ b/Code/Data/SoundBank.cs @@ -0,0 +1,23 @@ +using Godot; + +namespace MaxEffort.Code.Data; + +[GlobalClass] +public partial class SoundBank : Resource +{ + [ExportGroup("Player")] + [Export] public AudioStream StrainLoop; // Looping sound for lifting + [Export] public AudioStream EffortExhale; // "Hnnng!" + [Export] public AudioStream WinStinger; // "Light Weight!" + [Export] public AudioStream FailStinger; // "Fail..." + [Export] public AudioStream HeartbeatLoop; + + [ExportGroup("Hazards")] + [Export] public AudioStream HazardSpawn; // Warning beep + [Export] public AudioStream HazardClear; // Success ding + [Export] public AudioStream CameraTrauma; // Heavy impact thud + + [ExportGroup("Music")] + [Export] public AudioStream MenuMusic; + [Export] public AudioStream GameMusic; +} \ No newline at end of file diff --git a/Code/Data/SoundBank.cs.uid b/Code/Data/SoundBank.cs.uid new file mode 100644 index 0000000..684492e --- /dev/null +++ b/Code/Data/SoundBank.cs.uid @@ -0,0 +1 @@ +uid://c7iph3wg80lv5 diff --git a/Code/Data/TunnelConfig.cs b/Code/Data/TunnelConfig.cs new file mode 100644 index 0000000..2e146c9 --- /dev/null +++ b/Code/Data/TunnelConfig.cs @@ -0,0 +1,12 @@ +using Godot; + +namespace MaxEffort.Code.Data; + +[GlobalClass] +public partial class TunnelConfig : Resource +{ + [Export] public float VisionNarrowRate = 0.5f; // How fast it closes per sec + [Export] public float VisionRecoverRate = 2.0f; // How fast it opens when released + [Export] public float MaxTunnelIntensity = 0.95f; // 95% black screen + [Export] public Curve VisionCurve; // Non-linear progression! +} \ No newline at end of file diff --git a/Code/Data/TunnelConfig.cs.uid b/Code/Data/TunnelConfig.cs.uid new file mode 100644 index 0000000..a55a358 --- /dev/null +++ b/Code/Data/TunnelConfig.cs.uid @@ -0,0 +1 @@ +uid://c4bnx8w383o4e diff --git a/Code/Systems/BaseLiftSystem.cs b/Code/Systems/BaseLiftSystem.cs new file mode 100644 index 0000000..6c69d1e --- /dev/null +++ b/Code/Systems/BaseLiftSystem.cs @@ -0,0 +1,66 @@ +using Godot; +using MaxEffort.Code.Core; +using MaxEffort.Code.Data; + +namespace MaxEffort.Code.Systems; + +public abstract partial class BaseLiftSystem : Node +{ + [Export] protected float PowerPerClick = 5f; + [Export] protected float Gravity = 2f; + [Export] protected float TargetValue = 100f; // Distance OR Time + + protected float CurrentProgress = 0f; + protected bool IsLiftComplete = false; + protected int ActiveHazardCount = 0; + + public override void _Ready() + { + EventBus.OnLiftEffortApplied += ApplyPower; + EventBus.OnHazardSpawned += OnHazardSpawned; + EventBus.OnHazardResolved += OnHazardResolved; + EventBus.OnLiftCompleted += OnLiftCompleted; + } + + public override void _ExitTree() + { + EventBus.OnLiftEffortApplied -= ApplyPower; + EventBus.OnHazardSpawned -= OnHazardSpawned; + EventBus.OnHazardResolved -= OnHazardResolved; + EventBus.OnLiftCompleted -= OnLiftCompleted; + } + + public virtual void Initialize(float target, float gravity) + { + TargetValue = target; + Gravity = gravity; + CurrentProgress = 0f; + IsLiftComplete = false; + ActiveHazardCount = 0; + } + + private void OnLiftCompleted(bool success) + { + IsLiftComplete = true; + } + + private void OnHazardResolved(HazardType _) + { + ActiveHazardCount--; + if (ActiveHazardCount < 0) ActiveHazardCount = 0; + } + + private void OnHazardSpawned(HazardType _) + { + ActiveHazardCount++; + } + + private void ApplyPower(float effortDelta) + { + if (IsLiftComplete || ActiveHazardCount > 0) return; + HandleEffort(effortDelta); + } + + protected abstract void HandleEffort(float effortDelta); + public abstract override void _Process(double delta); +} \ No newline at end of file diff --git a/Code/Systems/BaseLiftSystem.cs.uid b/Code/Systems/BaseLiftSystem.cs.uid new file mode 100644 index 0000000..45384b2 --- /dev/null +++ b/Code/Systems/BaseLiftSystem.cs.uid @@ -0,0 +1 @@ +uid://whef7x61oogl diff --git a/Code/Systems/BenchPressSystem.cs b/Code/Systems/BenchPressSystem.cs new file mode 100644 index 0000000..25abfe1 --- /dev/null +++ b/Code/Systems/BenchPressSystem.cs @@ -0,0 +1,38 @@ +using Godot; +using MaxEffort.Code.Core; + +namespace MaxEffort.Code.Systems; + +[GlobalClass] +public partial class BenchPressSystem : BaseLiftSystem +{ + protected override void HandleEffort(float effortDelta) + { + CurrentProgress += PowerPerClick * effortDelta; + CheckWin(); + } + + public override void _Process(double delta) + { + if (IsLiftComplete) return; + + if (CurrentProgress > 0) + { + CurrentProgress -= Gravity * (float)delta; + CurrentProgress = Mathf.Max(0, CurrentProgress); + } + + var ratio = CurrentProgress / TargetValue; + + EventBus.PublishLiftProgress(ratio); + EventBus.PublishLiftVisualHeight(ratio); + } + + private void CheckWin() + { + if (CurrentProgress >= TargetValue) + { + EventBus.PublishLiftCompleted(true); + } + } +} \ No newline at end of file diff --git a/Code/Systems/BenchPressSystem.cs.uid b/Code/Systems/BenchPressSystem.cs.uid new file mode 100644 index 0000000..90d2bc7 --- /dev/null +++ b/Code/Systems/BenchPressSystem.cs.uid @@ -0,0 +1 @@ +uid://dg5h252kyse6b diff --git a/Code/Systems/CameraShakeSystem.cs b/Code/Systems/CameraShakeSystem.cs new file mode 100644 index 0000000..ba856ea --- /dev/null +++ b/Code/Systems/CameraShakeSystem.cs @@ -0,0 +1,72 @@ +using Godot; +using MaxEffort.Code.Core; + +namespace MaxEffort.Code.Systems; + +[GlobalClass] +public partial class CameraShakeSystem : Node +{ + [Export] private Camera2D _camera; + [Export] private float _decayRate = 0.8f; // How fast shaking stops + [Export] private float _maxOffset = 20.0f; // Max pixels to shake + [Export] private float _maxRoll = 0.1f; // Max rotation (radians) + + private float _trauma = 0f; // Current shake intensity (0 to 1) + private float _currentFocus = 0f; + private RandomNumberGenerator _rng = new(); + + public override void _Ready() + { + EventBus.OnCameraTrauma += AddTrauma; + EventBus.OnFocusChanged += OnFocusChanged; + } + + public override void _ExitTree() + { + EventBus.OnCameraTrauma -= AddTrauma; + EventBus.OnFocusChanged -= OnFocusChanged; + } + + public override void _Process(double delta) + { + if (_camera == null) return; + + if (_currentFocus > 0.75f) + { + AddTrauma(1.5f * (float)delta); + } + + if (_trauma > 0) + { + _trauma -= _decayRate * (float)delta; + _trauma = Mathf.Max(0, _trauma); + + var shake = _trauma * _trauma; + + var offsetX = _maxOffset * shake * _rng.RandfRange(-1, 1); + var offsetY = _maxOffset * shake * _rng.RandfRange(-1, 1); + var rotation = _maxRoll * shake * _rng.RandfRange(-1, 1); + + _camera.Offset = new Vector2(offsetX, offsetY); + _camera.Rotation = rotation; + } + else + { + if (_camera.Offset != Vector2.Zero) + { + _camera.Offset = _camera.Offset.Lerp(Vector2.Zero, (float)delta * 5f); + _camera.Rotation = Mathf.Lerp(_camera.Rotation, 0, (float)delta * 5f); + } + } + } + + private void OnFocusChanged(float focus) + { + _currentFocus = focus; + } + + private void AddTrauma(float amount) + { + _trauma = Mathf.Clamp(_trauma + amount, 0f, 1f); + } +} \ No newline at end of file diff --git a/Code/Systems/CameraShakeSystem.cs.uid b/Code/Systems/CameraShakeSystem.cs.uid new file mode 100644 index 0000000..8f2faf1 --- /dev/null +++ b/Code/Systems/CameraShakeSystem.cs.uid @@ -0,0 +1 @@ +uid://cvrn2apa0djla diff --git a/Code/Systems/DeadliftSystem.cs b/Code/Systems/DeadliftSystem.cs new file mode 100644 index 0000000..128e711 --- /dev/null +++ b/Code/Systems/DeadliftSystem.cs @@ -0,0 +1,64 @@ +using Godot; +using MaxEffort.Code.Core; + +namespace MaxEffort.Code.Systems; + +[GlobalClass] +public partial class DeadliftSystem : BaseLiftSystem +{ + [Export] private float _barHeight = 100f; // Visual height of the lift + [Export] private float _holdZoneThreshold = 0.8f; // Must be above 80% to count + [Export] private Node2D _barVisual; + [Export] private Vector2 _startPos; + [Export] private Vector2 _endPos; + + private float _currentBarHeight = 0f; + private float _holdTimer = 0f; + + public override void Initialize(float targetTime, float gravity) + { + base.Initialize(targetTime, gravity); + _holdTimer = 0f; + } + + protected override void HandleEffort(float effortDelta) + { + _currentBarHeight += PowerPerClick * effortDelta; + _currentBarHeight = Mathf.Min(_currentBarHeight, _barHeight); + } + + public override void _Process(double delta) + { + if (IsLiftComplete) return; + + var dt = (float)delta; + + if (_currentBarHeight > 0) + { + _currentBarHeight -= Gravity * dt; + _currentBarHeight = Mathf.Max(0, _currentBarHeight); + } + + var visualRatio = _currentBarHeight / _barHeight; // 0.0 to 1.0 (Height) + + if (visualRatio >= _holdZoneThreshold && ActiveHazardCount == 0) + { + _holdTimer += dt; + EventBus.PublishCameraTrauma(0.15f * dt); + } + + EventBus.PublishLiftVisualHeight(visualRatio); + EventBus.PublishLiftProgress(_holdTimer / TargetValue); + + if (_barVisual != null) + { + _barVisual.Position = _startPos.Lerp(_endPos, visualRatio); + } + + if (_holdTimer >= TargetValue) + { + EventBus.PublishCameraTrauma(1.0f); + EventBus.PublishLiftCompleted(true); + } + } +} \ No newline at end of file diff --git a/Code/Systems/DeadliftSystem.cs.uid b/Code/Systems/DeadliftSystem.cs.uid new file mode 100644 index 0000000..cb058b6 --- /dev/null +++ b/Code/Systems/DeadliftSystem.cs.uid @@ -0,0 +1 @@ +uid://dpes80ppxqppv diff --git a/Code/Systems/GameManager.cs b/Code/Systems/GameManager.cs new file mode 100644 index 0000000..9773227 --- /dev/null +++ b/Code/Systems/GameManager.cs @@ -0,0 +1,96 @@ +using Godot; +using MaxEffort.Code.Core; +using MaxEffort.Code.Data; + +namespace MaxEffort.Code.Systems; + +[GlobalClass] +public partial class GameManager : Node +{ + [Export] private Godot.Collections.Array _days; + [Export] private HazardSystem _hazardSystem; + [Export] private Node _minigameContainer; + + [Export] private Control _winScreen; + [Export] private Control _loseScreen; + [Export] private Label _dayLabel; + + private int _currentDayIndex = 0; + private Node _currentMiniGame; + + public override void _Ready() + { + EventBus.OnLiftCompleted += HandleLiftResult; + StartDay(_currentDayIndex); + } + + public override void _ExitTree() + { + EventBus.OnLiftCompleted -= HandleLiftResult; + } + + private void StartDay(int index) + { + if (index >= _days.Count) + { + GD.Print("YOU BEAT THE GYM! ALL DAYS COMPLETE."); + // TODO: Show "Game Complete" screen + return; + } + + var config = _days[index]; + + _currentMiniGame?.QueueFree(); + _hazardSystem.ClearHazards(); + + if (config.MiniGameScene != null) + { + _currentMiniGame = config.MiniGameScene.Instantiate(); + _minigameContainer.AddChild(_currentMiniGame); + + var liftSystem = _currentMiniGame.GetNode("System"); + liftSystem?.Initialize(config.TargetWeight, config.Gravity); + } + + _hazardSystem.SetAvailableHazards(config.AvailableHazards); + + if (_dayLabel != null) _dayLabel.Text = config.DayTitle; + + if (_winScreen != null) _winScreen.Visible = false; + if (_loseScreen != null) _loseScreen.Visible = false; + + GD.Print($"Started {config.DayTitle}"); + } + + private void HandleLiftResult(bool success) + { + if (success) + { + GD.Print("Day Complete! Next day loading..."); + if (_winScreen != null) _winScreen.Visible = true; + + // Wait for player input to proceed, or auto-load after delay + // For now, let's auto-advance after 3 seconds for the prototype + GetTree().CreateTimer(3.0f).Timeout += () => NextDay(); + } + else + { + GD.Print("FAIL! Go home."); + if (_loseScreen != null) _loseScreen.Visible = true; + + // Restart day after delay + GetTree().CreateTimer(3.0f).Timeout += () => RestartDay(); + } + } + + private void NextDay() + { + _currentDayIndex++; + StartDay(_currentDayIndex); + } + + private void RestartDay() + { + GetTree().ReloadCurrentScene(); + } +} \ No newline at end of file diff --git a/Code/Systems/GameManager.cs.uid b/Code/Systems/GameManager.cs.uid new file mode 100644 index 0000000..86db4c6 --- /dev/null +++ b/Code/Systems/GameManager.cs.uid @@ -0,0 +1 @@ +uid://cmiktfrffb3pc diff --git a/Code/Systems/HazardController.cs b/Code/Systems/HazardController.cs new file mode 100644 index 0000000..e6cfc57 --- /dev/null +++ b/Code/Systems/HazardController.cs @@ -0,0 +1,115 @@ +using Godot; +using MaxEffort.Code.Core; +using MaxEffort.Code.Data; + +namespace MaxEffort.Code.Systems; + +[GlobalClass] +public partial class HazardController : Node2D +{ + [Export] private AnimatedSprite2D _animSprite; + [Export] private Area2D _clickArea; + [Export] private CollisionShape2D _clickShape; // Reference to resize it + [Export] private Label _nameLabel; // Can still use UI nodes inside Node2D + + private HazardDef _data; + private float _timeActive = 0f; + private bool _isResolved = false; + private int _currentHealth = 1; + + public void Initialize(HazardDef data) + { + _data = data; + _currentHealth = data.ClicksToResolve; + + if (_animSprite != null && data.Animations != null) + { + _animSprite.SpriteFrames = data.Animations; + + var texture = data.Animations.GetFrameTexture(data.IdleAnimName, 0); + if (texture != null && _clickShape != null) + { + var rect = new RectangleShape2D(); + rect.Size = texture.GetSize(); + _clickShape.Shape = rect; + } + + _animSprite.Play(data.IdleAnimName); + } + + if (_nameLabel != null) _nameLabel.Text = data.DisplayName; + + if (_clickArea != null) + { + _clickArea.InputEvent += OnInputEvent; + } + + Scale = Vector2.Zero; + var tween = CreateTween(); + tween.SetTrans(Tween.TransitionType.Back).SetEase(Tween.EaseType.Out); + tween.TweenProperty(this, "scale", Vector2.One, 0.4f); + + if (!string.IsNullOrEmpty(data.WalkAnimName)) + { + _animSprite?.Play(data.WalkAnimName); + tween.TweenCallback(Callable.From(() => _animSprite?.Play(data.IdleAnimName))); + } + } + + public override void _Process(double delta) + { + if (_isResolved) return; + _timeActive += (float)delta; + + if (_timeActive >= _data.TimeToFail) + { + EventBus.PublishLiftCompleted(false); + QueueFree(); + } + } + + public override void _ExitTree() + { + if (_clickArea != null) _clickArea.InputEvent -= OnInputEvent; + } + + private void OnInputEvent(Node viewport, InputEvent @event, long shapeIdx) + { + if (_isResolved) return; + + if (@event is InputEventMouseButton mouseEvent && mouseEvent.Pressed && mouseEvent.ButtonIndex == MouseButton.Left) + { + TakeDamage(); + } + } + + private void TakeDamage() + { + _currentHealth--; + + var tween = CreateTween(); + tween.TweenProperty(this, "scale", new Vector2(1.2f, 0.8f), 0.05f); + tween.TweenProperty(this, "scale", Vector2.One, 0.05f); + + if (_animSprite != null) + { + _animSprite.Modulate = Colors.Red; + tween.Parallel().TweenProperty(_animSprite, "modulate", Colors.White, 0.1f); + } + + if (_currentHealth <= 0) + { + Resolve(); + } + } + + private void Resolve() + { + _isResolved = true; + EventBus.PublishHazardResolved(_data.Type); + + var tween = CreateTween(); + tween.TweenProperty(this, "scale", Vector2.Zero, 0.2f); + tween.TweenCallback(Callable.From(QueueFree)); + } +} \ No newline at end of file diff --git a/Code/Systems/HazardController.cs.uid b/Code/Systems/HazardController.cs.uid new file mode 100644 index 0000000..ca509ba --- /dev/null +++ b/Code/Systems/HazardController.cs.uid @@ -0,0 +1 @@ +uid://cfpdfb8fnym2y diff --git a/Code/Systems/HazardSystem.cs b/Code/Systems/HazardSystem.cs new file mode 100644 index 0000000..6b7bb06 --- /dev/null +++ b/Code/Systems/HazardSystem.cs @@ -0,0 +1,114 @@ +using System.Linq; +using Godot; +using MaxEffort.Code.Core; +using MaxEffort.Code.Data; + +namespace MaxEffort.Code.Systems; + +[GlobalClass] +public partial class HazardSystem : Node +{ + [Export] private Godot.Collections.Array _possibleHazards; + [Export] private Godot.Collections.Array _spawnLocations; + [Export] private PackedScene _hazardPrefab; // The visual object to spawn + [Export] private float _checkInterval = 1.0f; // How often to try spawning + + private float _currentFocus = 0f; + private double _timer = 0; + private RandomNumberGenerator _rng = new(); + + public override void _Ready() + { + EventBus.OnFocusChanged += OnFocusChanged; + EventBus.OnHazardResolved += OnHazardResolved; + } + + public override void _ExitTree() + { + EventBus.OnFocusChanged -= OnFocusChanged; + EventBus.OnHazardResolved -= OnHazardResolved; + } + + public override void _Process(double delta) + { + _timer += delta; + if (_timer >= _checkInterval) + { + _timer = 0; + TrySpawnHazard(); + } + } + + public void SetAvailableHazards(Godot.Collections.Array hazards) + { + if (_possibleHazards == null) _possibleHazards = []; + + _possibleHazards.Clear(); + foreach(var h in hazards) _possibleHazards.Add(h); + } + + public void ClearHazards() + { + if (_spawnLocations == null) return; + + // Loop through all locations and destroy active hazards + foreach (var loc in _spawnLocations) + { + foreach (Node child in loc.GetChildren()) + { + child.QueueFree(); + } + } + _timer = 0; + } + + private void OnFocusChanged(float focus) + { + _currentFocus = focus; + } + + private void TrySpawnHazard() + { + if (_currentFocus < 0.2f) return; + + var spawnChance = _currentFocus * 0.5f; + + if (_rng.Randf() < spawnChance) + { + SpawnRandomHazard(); + } + } + + private void SpawnRandomHazard() + { + if (_possibleHazards.Count == 0 || _hazardPrefab == null || _spawnLocations.Count == 0) return; + + var emptyLocations = _spawnLocations.Where(loc => loc.GetChildCount() == 0).ToArray(); + + if (emptyLocations.Length == 0) return; + + var targetLoc = emptyLocations[_rng.Randi() % emptyLocations.Length]; + + var validHazards = _possibleHazards + .Where(h => h.MinFocusToSpawn <= _currentFocus) + .ToArray(); + + if (validHazards.Length == 0) return; + + var selected = validHazards[_rng.Randi() % validHazards.Length]; + + if (_hazardPrefab.Instantiate() is HazardController instance) + { + instance.Position = Vector2.Zero; + targetLoc.AddChild(instance); + + instance.Initialize(selected); + EventBus.PublishHazardSpawned(selected.Type); + } + } + + private void OnHazardResolved(HazardType type) + { + GD.Print($"Resolved {type}!"); + } +} \ No newline at end of file diff --git a/Code/Systems/HazardSystem.cs.uid b/Code/Systems/HazardSystem.cs.uid new file mode 100644 index 0000000..010b791 --- /dev/null +++ b/Code/Systems/HazardSystem.cs.uid @@ -0,0 +1 @@ +uid://bwtppr4djfdwf diff --git a/Code/Systems/PlayerInputSystem.cs b/Code/Systems/PlayerInputSystem.cs new file mode 100644 index 0000000..58ea90c --- /dev/null +++ b/Code/Systems/PlayerInputSystem.cs @@ -0,0 +1,23 @@ +using Godot; +using MaxEffort.Code.Core; + +namespace MaxEffort.Code.Systems; + +[GlobalClass] +public partial class PlayerInputSystem : Node +{ + private const string LiftAction = "lift_action"; + + public override void _Process(double delta) + { + if (Input.IsActionPressed(LiftAction)) + { + EventBus.PublishLiftEffortApplied((float)delta); + } + + if (Input.IsActionJustReleased(LiftAction)) + { + EventBus.PublishFocusRelease(); + } + } +} \ No newline at end of file diff --git a/Code/Systems/PlayerInputSystem.cs.uid b/Code/Systems/PlayerInputSystem.cs.uid new file mode 100644 index 0000000..775e8f0 --- /dev/null +++ b/Code/Systems/PlayerInputSystem.cs.uid @@ -0,0 +1 @@ +uid://dorbq313ggc7e diff --git a/Code/Systems/SoundManager.cs b/Code/Systems/SoundManager.cs new file mode 100644 index 0000000..5c884f4 --- /dev/null +++ b/Code/Systems/SoundManager.cs @@ -0,0 +1,195 @@ +using Godot; +using MaxEffort.Code.Core; +using MaxEffort.Code.Data; + +namespace MaxEffort.Code.Systems; + +[GlobalClass] +public partial class SoundManager : Node +{ + [Export] private SoundBank _bank; + [Export] private int _poolSize = 8; + + private AudioStreamPlayer[] _sfxPool; + private AudioStreamPlayer _strainPlayer; + private AudioStreamPlayer _heartbeatPlayer; + private AudioStreamPlayer _musicPlayer; + private bool _isLifting = false; + private float _currentLiftProgress = 0f; + + private int _masterBus; + private int _musicBus; + private int _sfxBus; + + public override void _Ready() + { + _masterBus = AudioServer.GetBusIndex("Master"); + _musicBus = AudioServer.GetBusIndex("Music"); + _sfxBus = AudioServer.GetBusIndex("Sfx"); + + InitializePool(); + + EventBus.OnLiftEffortApplied += HandleLiftEffort; + EventBus.OnFocusRelease += HandleFocusRelease; + EventBus.OnFocusChanged += OnFocusChanged; + EventBus.OnLiftCompleted += HandleLiftComplete; + EventBus.OnLiftProgress += OnLiftProgress; + EventBus.OnHazardSpawned += OnOnHazardSpawned; + EventBus.OnHazardResolved += OnHazardResolved; + EventBus.OnCameraTrauma += OnCameraTrauma; + + PlayMusic(_bank.GameMusic); + } + + public override void _ExitTree() + { + EventBus.OnLiftEffortApplied -= HandleLiftEffort; + EventBus.OnFocusRelease -= HandleFocusRelease; + EventBus.OnLiftCompleted -= HandleLiftComplete; + EventBus.OnLiftProgress -= OnLiftProgress; + EventBus.OnHazardSpawned -= OnOnHazardSpawned; + EventBus.OnHazardResolved -= OnHazardResolved; + EventBus.OnCameraTrauma -= OnCameraTrauma; + } + + public void PlayMusic(AudioStream clip) + { + if (clip == null || _musicPlayer.Stream == clip) return; + _musicPlayer.Stream = clip; + _musicPlayer.Play(); + } + + public void ToggleMasterMute(bool isMuted) + { + AudioServer.SetBusMute(_masterBus, isMuted); + } + + public void ToggleMusicMute(bool isMuted) + { + AudioServer.SetBusMute(_musicBus, isMuted); + } + + private void InitializePool() + { + _sfxPool = new AudioStreamPlayer[_poolSize]; + for (var i = 0; i < _poolSize; i++) + { + var p = new AudioStreamPlayer(); + p.Bus = "Sfx"; + AddChild(p); + _sfxPool[i] = p; + } + + _strainPlayer = new AudioStreamPlayer { Bus = "Sfx" }; + AddChild(_strainPlayer); + + _heartbeatPlayer = new AudioStreamPlayer { Bus = "Sfx" }; + AddChild(_heartbeatPlayer); + + _musicPlayer = new AudioStreamPlayer { Bus = "Music" }; + AddChild(_musicPlayer); + + if (_bank != null && _bank.HeartbeatLoop != null) + { + _heartbeatPlayer.Stream = _bank.HeartbeatLoop; + _heartbeatPlayer.VolumeDb = -80f; + _heartbeatPlayer.Play(); + } + } + + private void PlaySfx(AudioStream clip, float pitch = 1.0f) + { + if (clip == null) return; + + AudioStreamPlayer bestCandidate = null; + var longestPlaybackPosition = -1f; + + foreach (var player in _sfxPool) + { + if (!player.Playing) + { + bestCandidate = player; + break; + } + + if (player.GetPlaybackPosition() > longestPlaybackPosition) + { + longestPlaybackPosition = player.GetPlaybackPosition(); + bestCandidate = player; + } + } + + if (bestCandidate != null) + { + bestCandidate.Stream = clip; + bestCandidate.PitchScale = pitch; + bestCandidate.Play(); + } + } + + private void HandleLiftEffort(float _) + { + if (!_isLifting) + { + _isLifting = true; + if (_bank.StrainLoop != null) + { + _strainPlayer.Stream = _bank.StrainLoop; + _strainPlayer.Play(); + } + } + + _strainPlayer.PitchScale = 1.0f + (_currentLiftProgress * 0.3f); + } + + private void HandleFocusRelease() + { + if (_isLifting) + { + _isLifting = false; + _strainPlayer.Stop(); + PlaySfx(_bank.EffortExhale); + } + } + + private void HandleLiftComplete(bool success) + { + _strainPlayer.Stop(); + PlaySfx(success ? _bank.WinStinger : _bank.FailStinger); + } + + private void OnCameraTrauma(float amount) + { + if (amount > 0.5f) PlaySfx(_bank.CameraTrauma); + } + + private void OnHazardResolved(HazardType _) + { + PlaySfx(_bank.HazardClear); + } + + private void OnOnHazardSpawned(HazardType _) + { + PlaySfx(_bank.HazardSpawn); + } + + private void OnLiftProgress(float progress) + { + _currentLiftProgress = progress; + } + + private void OnFocusChanged(float focus) + { + if (focus < 0.1f) + { + _heartbeatPlayer.VolumeDb = -80f; + } + else + { + var t = (focus - 0.1f) / 0.9f; + _heartbeatPlayer.VolumeDb = Mathf.Lerp(-30f, 5f, t); + + _heartbeatPlayer.PitchScale = Mathf.Lerp(1.0f, 1.4f, t); + } + } +} \ No newline at end of file diff --git a/Code/Systems/SoundManager.cs.uid b/Code/Systems/SoundManager.cs.uid new file mode 100644 index 0000000..3ebf7fa --- /dev/null +++ b/Code/Systems/SoundManager.cs.uid @@ -0,0 +1 @@ +uid://khh8yy66oq36 diff --git a/Code/Systems/TunnelSystem.cs b/Code/Systems/TunnelSystem.cs new file mode 100644 index 0000000..fd464ed --- /dev/null +++ b/Code/Systems/TunnelSystem.cs @@ -0,0 +1,65 @@ +using Godot; +using MaxEffort.Code.Core; +using MaxEffort.Code.Data; + +namespace MaxEffort.Code.Systems; + +[GlobalClass] +public partial class TunnelSystem : Node +{ + [Export] private TunnelConfig _config; + [Export] private ColorRect _vignetteOverlay; + + private float _currentFocus = 0f; + private bool _isEfforting = false; + + public override void _Ready() + { + EventBus.OnLiftEffortApplied += HandleEffort; + EventBus.OnFocusRelease += HandleRelease; + } + + public override void _ExitTree() + { + EventBus.OnLiftEffortApplied -= HandleEffort; + EventBus.OnFocusRelease -= HandleRelease; + } + + public override void _Process(double delta) + { + var dt = (float)delta; + + if (_isEfforting) + { + _currentFocus += _config.VisionNarrowRate * dt; + } + else + { + _currentFocus -= _config.VisionRecoverRate * dt; + } + + _currentFocus = Mathf.Clamp(_currentFocus, 0f, _config.MaxTunnelIntensity); + + var visualValue = _config.VisionCurve?.Sample(_currentFocus) ?? _currentFocus; + + if (_vignetteOverlay != null) + { + var mat = _vignetteOverlay.Material as ShaderMaterial; + mat?.SetShaderParameter("vignette_intensity", visualValue); + } + + EventBus.PublishFocusChanged(_currentFocus); + + _isEfforting = false; + } + + private void HandleRelease() + { + _isEfforting = false; + } + + private void HandleEffort(float effortDelta) + { + _isEfforting = true; + } +} \ No newline at end of file diff --git a/Code/Systems/TunnelSystem.cs.uid b/Code/Systems/TunnelSystem.cs.uid new file mode 100644 index 0000000..eb7acbf --- /dev/null +++ b/Code/Systems/TunnelSystem.cs.uid @@ -0,0 +1 @@ +uid://dnmsuw3knxhp0 diff --git a/Code/UI/LiftProgressBar.cs b/Code/UI/LiftProgressBar.cs new file mode 100644 index 0000000..b50f46c --- /dev/null +++ b/Code/UI/LiftProgressBar.cs @@ -0,0 +1,27 @@ +using Godot; +using MaxEffort.Code.Core; + +namespace MaxEffort.Code.UI; + +[GlobalClass] +public partial class LiftProgressBar : ProgressBar +{ + public override void _Ready() + { + EventBus.OnLiftProgress += UpdateProgress; + + MinValue = 0; + MaxValue = 1; + Value = 0; + } + + public override void _ExitTree() + { + EventBus.OnLiftProgress -= UpdateProgress; + } + + private void UpdateProgress(float progress) + { + Value = progress; + } +} \ No newline at end of file diff --git a/Code/UI/LiftProgressBar.cs.uid b/Code/UI/LiftProgressBar.cs.uid new file mode 100644 index 0000000..3ac6861 --- /dev/null +++ b/Code/UI/LiftProgressBar.cs.uid @@ -0,0 +1 @@ +uid://bsdan2qixddeg diff --git a/Code/UI/MainMenu.cs b/Code/UI/MainMenu.cs new file mode 100644 index 0000000..528bed2 --- /dev/null +++ b/Code/UI/MainMenu.cs @@ -0,0 +1,34 @@ +using Godot; + +namespace MaxEffort.Code.UI; + +[GlobalClass] +public partial class MainMenu : Control +{ + [Export] private PackedScene _gameScene; + [Export] private CheckButton _muteButton; + + public override void _Ready() + { + AudioServer.SetBusMute(AudioServer.GetBusIndex("Master"), false); + } + + public void OnPlayPressed() + { + if (_gameScene != null) + { + GetTree().ChangeSceneToPacked(_gameScene); + } + } + + public void OnQuitPressed() + { + GetTree().Quit(); + } + + public void OnMuteToggled(bool toggledOn) + { + var masterBus = AudioServer.GetBusIndex("Master"); + AudioServer.SetBusMute(masterBus, toggledOn); + } +} \ No newline at end of file diff --git a/Code/UI/MainMenu.cs.uid b/Code/UI/MainMenu.cs.uid new file mode 100644 index 0000000..61bbca8 --- /dev/null +++ b/Code/UI/MainMenu.cs.uid @@ -0,0 +1 @@ +uid://b17j8o46gnc0e diff --git a/Code/Visuals/LiftSyncController.cs b/Code/Visuals/LiftSyncController.cs new file mode 100644 index 0000000..2672679 --- /dev/null +++ b/Code/Visuals/LiftSyncController.cs @@ -0,0 +1,98 @@ +using Godot; +using MaxEffort.Code.Core; + +namespace MaxEffort.Code.Visuals; + +[GlobalClass] +public partial class LiftSyncController : Node +{ + [ExportGroup("References")] + [Export] private AnimatedSprite2D _playerAnim; + [Export] private Sprite2D _barbell; + + [ExportGroup("Configuration")] + [Export] private string _animationName = "lift"; + + [Export] private Godot.Collections.Array _barPositions; + + [ExportGroup("Rep Settings")] + [Export] private bool _simulateReps = true; // TOGGLE THIS ON FOR BENCH PRESS + [Export] private float _repSpeed = 2.0f; // How fast you do reps visualy + + private float _currentRepProgress = 0f; // 0.0 to 1.0 (internal visual cycle) + private bool _isLifting = false; + + public override void _Ready() + { + EventBus.OnLiftVisualHeight += HandleDirectSync; + EventBus.OnLiftEffortApplied += HandleEffort; + EventBus.OnFocusRelease += OnFocusRelease; + } + + public override void _ExitTree() + { + EventBus.OnLiftVisualHeight -= HandleDirectSync; + EventBus.OnLiftEffortApplied -= HandleEffort; + } + + public override void _Process(double delta) + { + if (!_simulateReps) return; + + var dt = (float)delta; + + if (_isLifting) + { + _currentRepProgress += _repSpeed * dt; + } + else + { + if (_currentRepProgress > 0) + { + _currentRepProgress -= _repSpeed * dt; + _currentRepProgress = Mathf.Max(0, _currentRepProgress); + } + } + + + var pingPongValue = Mathf.PingPong(_currentRepProgress, 1.0f); + + UpdateVisuals(pingPongValue); + + _isLifting = false; + } + + private void UpdateVisuals(float normalizedHeight) + { + if (_playerAnim == null || _barbell == null || _barPositions.Count == 0) return; + + var totalFrames = _barPositions.Count; + + var frameIndex = Mathf.FloorToInt(normalizedHeight * (totalFrames - 0.01f)); + frameIndex = Mathf.Clamp(frameIndex, 0, totalFrames - 1); + + _playerAnim.Frame = frameIndex; + if (_playerAnim.Animation != _animationName) + _playerAnim.Play(_animationName); + + _barbell.Position = _barPositions[frameIndex]; + } + + private void OnFocusRelease() + { + _isLifting = false; + } + + private void HandleDirectSync(float height) + { + if (!_simulateReps) + { + UpdateVisuals(height); + } + } + + private void HandleEffort(float delta) + { + _isLifting = true; + } +} \ No newline at end of file diff --git a/Code/Visuals/LiftSyncController.cs.uid b/Code/Visuals/LiftSyncController.cs.uid new file mode 100644 index 0000000..ed8f981 --- /dev/null +++ b/Code/Visuals/LiftSyncController.cs.uid @@ -0,0 +1 @@ +uid://ck4dtxhknj8di diff --git a/Objects/bench_press.tscn b/Objects/bench_press.tscn new file mode 100644 index 0000000..95d7771 --- /dev/null +++ b/Objects/bench_press.tscn @@ -0,0 +1,36 @@ +[gd_scene load_steps=6 format=3 uid="uid://dxq2510ywj1hy"] + +[ext_resource type="Script" uid="uid://dg5h252kyse6b" path="res://Code/Systems/BenchPressSystem.cs" id="1_0c1tm"] +[ext_resource type="Texture2D" uid="uid://dsovna2tmb4o3" path="res://Sprites/bench.png" id="2_ky8t4"] +[ext_resource type="PackedScene" uid="uid://dn8y3bgovnh4a" path="res://Objects/bench_press_stickman.tscn" id="3_uh874"] +[ext_resource type="Texture2D" uid="uid://cbgn8aspf7oi0" path="res://Sprites/barbell.png" id="4_tssew"] +[ext_resource type="Script" uid="uid://ck4dtxhknj8di" path="res://Code/Visuals/LiftSyncController.cs" id="5_ky8t4"] + +[node name="BenchPress" type="Node"] + +[node name="System" type="Node" parent="."] +script = ExtResource("1_0c1tm") +metadata/_custom_type_script = "uid://dg5h252kyse6b" + +[node name="Bench" type="Sprite2D" parent="."] +position = Vector2(11, 1) +scale = Vector2(2.0859375, 2.0859375) +texture = ExtResource("2_ky8t4") + +[node name="BenchPressStickman" parent="." instance=ExtResource("3_uh874")] +frame = 0 +frame_progress = 0.0 +metadata/_edit_lock_ = true + +[node name="Barbell" type="Sprite2D" parent="."] +position = Vector2(22, -4.9999995) +scale = Vector2(2.4322035, 2.4322033) +texture = ExtResource("4_tssew") + +[node name="LiftSyncController" type="Node" parent="." node_paths=PackedStringArray("_playerAnim", "_barbell")] +script = ExtResource("5_ky8t4") +_playerAnim = NodePath("../BenchPressStickman") +_barbell = NodePath("../Barbell") +_animationName = "default" +_barPositions = Array[Vector2]([Vector2(19, -5.000004), Vector2(19, -19), Vector2(21, -36), Vector2(21, -15.000002), Vector2(23, 2.9999962), Vector2(22, 10.999999), Vector2(22, -0.9999981), Vector2(22, -0.9999981)]) +metadata/_custom_type_script = "uid://ck4dtxhknj8di" diff --git a/Objects/bench_press_stickman.tscn b/Objects/bench_press_stickman.tscn new file mode 100644 index 0000000..7463c3c --- /dev/null +++ b/Objects/bench_press_stickman.tscn @@ -0,0 +1,48 @@ +[gd_scene load_steps=10 format=3 uid="uid://dn8y3bgovnh4a"] + +[ext_resource type="Texture2D" uid="uid://dci4cuavfc4la" path="res://Sprites/bench_press0.png" id="1_8snp0"] +[ext_resource type="Texture2D" uid="uid://dya801bkqxdpa" path="res://Sprites/bench_press1.png" id="2_ckjrk"] +[ext_resource type="Texture2D" uid="uid://bbxviq4c0pyju" path="res://Sprites/bench_press2.png" id="3_s2d21"] +[ext_resource type="Texture2D" uid="uid://biu7q8mfw62be" path="res://Sprites/bench_press3.png" id="4_e1c5r"] +[ext_resource type="Texture2D" uid="uid://bg06qtcl207do" path="res://Sprites/bench_press4.png" id="5_pwixy"] +[ext_resource type="Texture2D" uid="uid://bkypgv8rfcd8k" path="res://Sprites/bench_press5.png" id="6_6piga"] +[ext_resource type="Texture2D" uid="uid://warnmdoebwht" path="res://Sprites/bench_press6.png" id="7_ex7t0"] +[ext_resource type="Texture2D" uid="uid://yrorih7pbt0q" path="res://Sprites/bench_press7.png" id="8_as8xi"] + +[sub_resource type="SpriteFrames" id="SpriteFrames_edqll"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": ExtResource("1_8snp0") +}, { +"duration": 1.0, +"texture": ExtResource("2_ckjrk") +}, { +"duration": 1.0, +"texture": ExtResource("3_s2d21") +}, { +"duration": 1.0, +"texture": ExtResource("4_e1c5r") +}, { +"duration": 1.0, +"texture": ExtResource("5_pwixy") +}, { +"duration": 1.0, +"texture": ExtResource("6_6piga") +}, { +"duration": 1.0, +"texture": ExtResource("7_ex7t0") +}, { +"duration": 1.0, +"texture": ExtResource("8_as8xi") +}], +"loop": true, +"name": &"default", +"speed": 12.0 +}] + +[node name="BenchPressStickman" type="AnimatedSprite2D"] +sprite_frames = SubResource("SpriteFrames_edqll") +frame = 5 +frame_progress = 0.922402 +speed_scale = 0.0 diff --git a/Objects/deadlift.tscn b/Objects/deadlift.tscn new file mode 100644 index 0000000..2f9a3e2 --- /dev/null +++ b/Objects/deadlift.tscn @@ -0,0 +1,16 @@ +[gd_scene load_steps=3 format=3 uid="uid://dx1k40qfioaas"] + +[ext_resource type="Script" uid="uid://dpes80ppxqppv" path="res://Code/Systems/DeadliftSystem.cs" id="1_n6ace"] +[ext_resource type="Texture2D" uid="uid://cbgn8aspf7oi0" path="res://Sprites/barbell.png" id="2_ltxro"] + +[node name="Deadlift" type="Node"] + +[node name="System" type="Node" parent="." node_paths=PackedStringArray("_barVisual")] +script = ExtResource("1_n6ace") +_barHeight = 7.0 +_barVisual = NodePath("../Bar") +_endPos = Vector2(0, -30) +metadata/_custom_type_script = "uid://dpes80ppxqppv" + +[node name="Bar" type="Sprite2D" parent="."] +texture = ExtResource("2_ltxro") diff --git a/Objects/hazard_animated.tscn b/Objects/hazard_animated.tscn new file mode 100644 index 0000000..b491410 --- /dev/null +++ b/Objects/hazard_animated.tscn @@ -0,0 +1,15 @@ +[gd_scene load_steps=2 format=3 uid="uid://btslndkq4qgcb"] + +[ext_resource type="Script" uid="uid://cfpdfb8fnym2y" path="res://Code/Systems/HazardController.cs" id="1_strkh"] + +[node name="HazardAnimated" type="Node2D" node_paths=PackedStringArray("_animSprite", "_clickArea", "_clickShape")] +script = ExtResource("1_strkh") +_animSprite = NodePath("AnimatedSprite2D") +_clickArea = NodePath("Area2D") +_clickShape = NodePath("Area2D/CollisionShape2D") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] + +[node name="Area2D" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] diff --git a/Objects/hazard_generic.tscn b/Objects/hazard_generic.tscn new file mode 100644 index 0000000..795a5ee --- /dev/null +++ b/Objects/hazard_generic.tscn @@ -0,0 +1,41 @@ +[gd_scene load_steps=2 format=3 uid="uid://c1rp504isupmo"] + +[ext_resource type="Script" uid="uid://cfpdfb8fnym2y" path="res://Code/Systems/HazardController.cs" id="1_u12lg"] + +[node name="Hazard_Generic" type="Control" node_paths=PackedStringArray("_iconDisplay", "_nameLabel", "_interactionButton")] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_u12lg") +_iconDisplay = NodePath("TextureRect") +_nameLabel = NodePath("Label") +_interactionButton = NodePath("Button") + +[node name="Button" type="Button" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="TextureRect" type="TextureRect" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Label" type="Label" parent="."] +layout_mode = 1 +anchors_preset = 10 +anchor_right = 1.0 +offset_bottom = 89.0 +grow_horizontal = 2 +horizontal_alignment = 1 +vertical_alignment = 1 diff --git a/Resources/Day_Day1.tres b/Resources/Day_Day1.tres new file mode 100644 index 0000000..506090e --- /dev/null +++ b/Resources/Day_Day1.tres @@ -0,0 +1,12 @@ +[gd_resource type="Resource" script_class="DayConfig" load_steps=4 format=3 uid="uid://dhtyc6ivhkbr5"] + +[ext_resource type="PackedScene" uid="uid://dxq2510ywj1hy" path="res://Objects/bench_press.tscn" id="1_ilyy2"] +[ext_resource type="Script" uid="uid://bkj0pcknqvjco" path="res://Code/Data/DayConfig.cs" id="1_qov1i"] +[ext_resource type="Resource" uid="uid://dvtj8fd5nnjcc" path="res://Resources/Hazard_GymBro.tres" id="1_wpt7a"] + +[resource] +script = ExtResource("1_qov1i") +TargetWeight = 25.0 +MiniGameScene = ExtResource("1_ilyy2") +AvailableHazards = Array[Object]([ExtResource("1_wpt7a")]) +metadata/_custom_type_script = "uid://bkj0pcknqvjco" diff --git a/Resources/Day_Day2.tres b/Resources/Day_Day2.tres new file mode 100644 index 0000000..e680806 --- /dev/null +++ b/Resources/Day_Day2.tres @@ -0,0 +1,13 @@ +[gd_resource type="Resource" script_class="DayConfig" load_steps=3 format=3 uid="uid://b0j1f8h6tioaf"] + +[ext_resource type="Script" uid="uid://bkj0pcknqvjco" path="res://Code/Data/DayConfig.cs" id="1_2ovco"] +[ext_resource type="Resource" uid="uid://dvtj8fd5nnjcc" path="res://Resources/Hazard_GymBro.tres" id="1_x1txs"] + +[resource] +script = ExtResource("1_2ovco") +DayNumber = 1 +DayTitle = "Day 2: Light Weight" +TargetWeight = 200.0 +Gravity = 3.0 +AvailableHazards = Array[Object]([ExtResource("1_x1txs")]) +metadata/_custom_type_script = "uid://bkj0pcknqvjco" diff --git a/Resources/Day_Day3.tres b/Resources/Day_Day3.tres new file mode 100644 index 0000000..2a02b03 --- /dev/null +++ b/Resources/Day_Day3.tres @@ -0,0 +1,11 @@ +[gd_resource type="Resource" script_class="DayConfig" load_steps=3 format=3 uid="uid://dynnmhq1bxcen"] + +[ext_resource type="Resource" uid="uid://dvtj8fd5nnjcc" path="res://Resources/Hazard_GymBro.tres" id="1_tndor"] +[ext_resource type="Script" uid="uid://bkj0pcknqvjco" path="res://Code/Data/DayConfig.cs" id="1_uqo26"] + +[resource] +script = ExtResource("1_uqo26") +TargetWeight = 400.0 +Gravity = 4.0 +AvailableHazards = Array[Object]([ExtResource("1_tndor")]) +metadata/_custom_type_script = "uid://bkj0pcknqvjco" diff --git a/Resources/Hazard_GymBro.tres b/Resources/Hazard_GymBro.tres new file mode 100644 index 0000000..ed0bfe6 --- /dev/null +++ b/Resources/Hazard_GymBro.tres @@ -0,0 +1,73 @@ +[gd_resource type="Resource" script_class="HazardDef" load_steps=15 format=3 uid="uid://dvtj8fd5nnjcc"] + +[ext_resource type="Texture2D" uid="uid://c43wo6u2c0d43" path="res://Sprites/chad_walk0.png" id="1_xcd3t"] +[ext_resource type="Script" uid="uid://ck1vtdnok31dq" path="res://Code/Data/HazardDef.cs" id="1_y5osd"] +[ext_resource type="Texture2D" uid="uid://dt5i4j2gvqso" path="res://Sprites/chad_walk1.png" id="2_57x2g"] +[ext_resource type="Texture2D" uid="uid://by265t6kx8us4" path="res://Sprites/chad_walk2.png" id="3_s8hf6"] +[ext_resource type="Texture2D" uid="uid://dway2w8pbk5lp" path="res://Sprites/chad_walk3.png" id="4_tdncn"] +[ext_resource type="Texture2D" uid="uid://bunfddn1pa8pj" path="res://Sprites/chad_walk4.png" id="5_twq7w"] +[ext_resource type="Texture2D" uid="uid://664m2cxtmmur" path="res://Sprites/chad_wave0.png" id="6_jshom"] +[ext_resource type="Texture2D" uid="uid://tu8ph6cjdwhv" path="res://Sprites/chad_wave1.png" id="7_hejui"] +[ext_resource type="Texture2D" uid="uid://b28aaketyf0t1" path="res://Sprites/chad_wave2.png" id="8_envil"] +[ext_resource type="Texture2D" uid="uid://jyr4f2p7jbk8" path="res://Sprites/chad_wave3.png" id="9_tcjtc"] +[ext_resource type="Texture2D" uid="uid://f013utfdsqqe" path="res://Sprites/chad_wave4.png" id="10_i0i8i"] +[ext_resource type="Texture2D" uid="uid://duryxgc54alp5" path="res://Sprites/chad_wave5.png" id="11_seh7d"] +[ext_resource type="Texture2D" uid="uid://yy2yrm4gq6w4" path="res://Sprites/chad_wave6.png" id="12_44y3n"] + +[sub_resource type="SpriteFrames" id="SpriteFrames_lo7sg"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": ExtResource("1_xcd3t") +}, { +"duration": 1.0, +"texture": ExtResource("2_57x2g") +}, { +"duration": 1.0, +"texture": ExtResource("3_s8hf6") +}, { +"duration": 1.0, +"texture": ExtResource("4_tdncn") +}, { +"duration": 1.0, +"texture": ExtResource("5_twq7w") +}], +"loop": true, +"name": &"walking", +"speed": 12.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": ExtResource("6_jshom") +}, { +"duration": 1.0, +"texture": ExtResource("7_hejui") +}, { +"duration": 1.0, +"texture": ExtResource("8_envil") +}, { +"duration": 1.0, +"texture": ExtResource("9_tcjtc") +}, { +"duration": 1.0, +"texture": ExtResource("10_i0i8i") +}, { +"duration": 1.0, +"texture": ExtResource("11_seh7d") +}, { +"duration": 1.0, +"texture": ExtResource("12_44y3n") +}], +"loop": true, +"name": &"waving", +"speed": 12.0 +}] + +[resource] +script = ExtResource("1_y5osd") +Type = 1 +DisplayName = "Chad" +Animations = SubResource("SpriteFrames_lo7sg") +IdleAnimName = "waving" +WalkAnimName = "walking" +metadata/_custom_type_script = "uid://ck1vtdnok31dq" diff --git a/Resources/SoundBank.tres b/Resources/SoundBank.tres new file mode 100644 index 0000000..9bf3aef --- /dev/null +++ b/Resources/SoundBank.tres @@ -0,0 +1,7 @@ +[gd_resource type="Resource" script_class="SoundBank" load_steps=2 format=3 uid="uid://b8ouri8tqw8vp"] + +[ext_resource type="Script" uid="uid://c7iph3wg80lv5" path="res://Code/Data/SoundBank.cs" id="1_t7wpv"] + +[resource] +script = ExtResource("1_t7wpv") +metadata/_custom_type_script = "uid://c7iph3wg80lv5" diff --git a/Scenes/main.tscn b/Scenes/main.tscn new file mode 100644 index 0000000..aa52b16 --- /dev/null +++ b/Scenes/main.tscn @@ -0,0 +1,150 @@ +[gd_scene load_steps=19 format=3 uid="uid://xtm08af0e82g"] + +[ext_resource type="Script" uid="uid://dnmsuw3knxhp0" path="res://Code/Systems/TunnelSystem.cs" id="2_jjvhh"] +[ext_resource type="Script" uid="uid://c4bnx8w383o4e" path="res://Code/Data/TunnelConfig.cs" id="3_21xkr"] +[ext_resource type="Script" uid="uid://dorbq313ggc7e" path="res://Code/Systems/PlayerInputSystem.cs" id="3_kry3j"] +[ext_resource type="Shader" uid="uid://bnx36sl78tvt5" path="res://Shaders/TunnelVision.gdshader" id="4_jjvhh"] +[ext_resource type="Script" uid="uid://bwtppr4djfdwf" path="res://Code/Systems/HazardSystem.cs" id="5_ynf5e"] +[ext_resource type="Script" uid="uid://bsdan2qixddeg" path="res://Code/UI/LiftProgressBar.cs" id="6_21xkr"] +[ext_resource type="Resource" uid="uid://dvtj8fd5nnjcc" path="res://Resources/Hazard_GymBro.tres" id="6_hptm8"] +[ext_resource type="Script" uid="uid://cmiktfrffb3pc" path="res://Code/Systems/GameManager.cs" id="8_fdnlq"] +[ext_resource type="PackedScene" uid="uid://btslndkq4qgcb" path="res://Objects/hazard_animated.tscn" id="8_wsu2k"] +[ext_resource type="Resource" uid="uid://dhtyc6ivhkbr5" path="res://Resources/Day_Day1.tres" id="9_jkdf5"] +[ext_resource type="Resource" uid="uid://b0j1f8h6tioaf" path="res://Resources/Day_Day2.tres" id="10_wsu2k"] +[ext_resource type="Script" uid="uid://cvrn2apa0djla" path="res://Code/Systems/CameraShakeSystem.cs" id="11_fdnlq"] +[ext_resource type="Resource" uid="uid://dynnmhq1bxcen" path="res://Resources/Day_Day3.tres" id="11_k12tt"] +[ext_resource type="Script" uid="uid://khh8yy66oq36" path="res://Code/Systems/SoundManager.cs" id="14_wsu2k"] +[ext_resource type="Resource" uid="uid://b8ouri8tqw8vp" path="res://Resources/SoundBank.tres" id="15_k12tt"] + +[sub_resource type="Curve" id="Curve_6bp64"] +_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(1, 1), 1.4, 0.0, 0, 0] +point_count = 2 + +[sub_resource type="Resource" id="Resource_344ge"] +script = ExtResource("3_21xkr") +MaxTunnelIntensity = 0.8 +VisionCurve = SubResource("Curve_6bp64") +metadata/_custom_type_script = "uid://c4bnx8w383o4e" + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_kry3j"] +shader = ExtResource("4_jjvhh") +shader_parameter/vignette_intensity = 0.0 +shader_parameter/vignette_color = Color(0, 0, 0, 1) + +[node name="Main" type="Node"] + +[node name="Systems" type="Node" parent="."] + +[node name="SoundManager" type="Node" parent="Systems"] +script = ExtResource("14_wsu2k") +_bank = ExtResource("15_k12tt") +metadata/_custom_type_script = "uid://khh8yy66oq36" + +[node name="TunnelSystem" type="Node" parent="Systems" node_paths=PackedStringArray("_vignetteOverlay")] +script = ExtResource("2_jjvhh") +_config = SubResource("Resource_344ge") +_vignetteOverlay = NodePath("../../UI/Vignette") +metadata/_custom_type_script = "uid://dnmsuw3knxhp0" + +[node name="PlayerInputSystem" type="Node" parent="Systems"] +script = ExtResource("3_kry3j") +metadata/_custom_type_script = "uid://dorbq313ggc7e" + +[node name="HazardSystem" type="Node" parent="Systems" node_paths=PackedStringArray("_spawnLocations")] +script = ExtResource("5_ynf5e") +_possibleHazards = Array[Object]([ExtResource("6_hptm8")]) +_spawnLocations = [NodePath("../../HazardSpots/Right"), NodePath("../../HazardSpots/Left")] +_hazardPrefab = ExtResource("8_wsu2k") +metadata/_custom_type_script = "uid://bwtppr4djfdwf" + +[node name="GameManager" type="Node" parent="Systems" node_paths=PackedStringArray("_hazardSystem", "_minigameContainer", "_winScreen", "_loseScreen")] +script = ExtResource("8_fdnlq") +_days = Array[Object]([ExtResource("9_jkdf5"), ExtResource("10_wsu2k"), ExtResource("11_k12tt")]) +_hazardSystem = NodePath("../HazardSystem") +_minigameContainer = NodePath("../../GameContainer") +_winScreen = NodePath("../../UI/Win") +_loseScreen = NodePath("../../UI/Lose") +metadata/_custom_type_script = "uid://cmiktfrffb3pc" + +[node name="CameraShakeSystem" type="Node" parent="Systems" node_paths=PackedStringArray("_camera")] +script = ExtResource("11_fdnlq") +_camera = NodePath("../../Camera2D") +metadata/_custom_type_script = "uid://cvrn2apa0djla" + +[node name="GameContainer" type="Node" parent="."] + +[node name="HazardSpots" type="Node2D" parent="."] + +[node name="Right" type="Node2D" parent="HazardSpots"] +position = Vector2(517, 0) + +[node name="Left" type="Node2D" parent="HazardSpots"] +position = Vector2(-559, 0) + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="Vignette" type="ColorRect" parent="UI"] +material = SubResource("ShaderMaterial_kry3j") +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="LiftProgressBar" type="ProgressBar" parent="UI"] +anchors_preset = 12 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = -27.0 +grow_horizontal = 2 +grow_vertical = 0 +size_flags_horizontal = 3 +size_flags_vertical = 4 +script = ExtResource("6_21xkr") + +[node name="Win" type="ColorRect" parent="UI"] +visible = false +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0, 1, 0, 1) + +[node name="Label" type="Label" parent="UI/Win"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_font_sizes/font_size = 48 +text = "LIGHT WEIGHT" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="Lose" type="ColorRect" parent="UI"] +visible = false +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(1, 0, 0, 1) + +[node name="Label" type="Label" parent="UI/Lose"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_font_sizes/font_size = 48 +text = "FAILURE" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="Camera2D" type="Camera2D" parent="."] +metadata/_edit_lock_ = true diff --git a/Scenes/main_menu.tscn b/Scenes/main_menu.tscn new file mode 100644 index 0000000..ae04f7c --- /dev/null +++ b/Scenes/main_menu.tscn @@ -0,0 +1,67 @@ +[gd_scene load_steps=3 format=3 uid="uid://bg4uaukekjbx"] + +[ext_resource type="Script" uid="uid://b17j8o46gnc0e" path="res://Code/UI/MainMenu.cs" id="1_48xlc"] +[ext_resource type="PackedScene" uid="uid://xtm08af0e82g" path="res://Scenes/main.tscn" id="2_1ehe0"] + +[node name="MainMenu" type="Control" node_paths=PackedStringArray("_muteButton")] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_48xlc") +_gameScene = ExtResource("2_1ehe0") +_muteButton = NodePath("VBoxContainer/MuteCheckButton") + +[node name="ColorRect" type="ColorRect" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +color = Color(0.14044744, 0.14044744, 0.14044744, 1) + +[node name="Title" type="Label" parent="."] +layout_mode = 1 +anchors_preset = 10 +anchor_right = 1.0 +offset_bottom = 23.0 +grow_horizontal = 2 +theme_override_font_sizes/font_size = 48 +text = "max effort" +horizontal_alignment = 1 +vertical_alignment = 1 +uppercase = true + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -20.0 +offset_top = -20.0 +offset_right = 20.0 +offset_bottom = 20.0 +grow_horizontal = 2 +grow_vertical = 2 +alignment = 1 + +[node name="PlayButton" type="Button" parent="VBoxContainer"] +layout_mode = 2 +text = "Play" + +[node name="QuitButton" type="Button" parent="VBoxContainer"] +layout_mode = 2 +text = "Quit" + +[node name="MuteCheckButton" type="CheckButton" parent="VBoxContainer"] +layout_mode = 2 +text = "Mute" + +[connection signal="pressed" from="VBoxContainer/PlayButton" to="." method="OnPlayPressed"] +[connection signal="pressed" from="VBoxContainer/QuitButton" to="." method="OnQuitPressed"] +[connection signal="toggled" from="VBoxContainer/MuteCheckButton" to="." method="OnMuteToggled"] diff --git a/Shaders/TunnelVision.gdshader b/Shaders/TunnelVision.gdshader new file mode 100644 index 0000000..b1e9f09 --- /dev/null +++ b/Shaders/TunnelVision.gdshader @@ -0,0 +1,20 @@ +shader_type canvas_item; + +uniform float vignette_intensity : hint_range(0.0, 1.0) = 0.0; +uniform vec4 vignette_color : source_color = vec4(0.0, 0.0, 0.0, 1.0); + +void fragment() { + vec2 center = vec2(0.5, 0.5); + + float dist = distance(UV, center); + + float radius = 0.8 - (vignette_intensity * 0.7); + + float softness = 0.2; + + float vignette = smoothstep(radius, radius - softness, dist); + + float alpha = 1.0 - vignette; + + COLOR = vec4(vignette_color.rgb, alpha * vignette_intensity * 1.5); +} \ No newline at end of file diff --git a/Shaders/TunnelVision.gdshader.uid b/Shaders/TunnelVision.gdshader.uid new file mode 100644 index 0000000..d617651 --- /dev/null +++ b/Shaders/TunnelVision.gdshader.uid @@ -0,0 +1 @@ +uid://bnx36sl78tvt5 diff --git a/Sprites/barbell.png b/Sprites/barbell.png new file mode 100644 index 0000000..8642f3d Binary files /dev/null and b/Sprites/barbell.png differ diff --git a/Sprites/barbell.png.import b/Sprites/barbell.png.import new file mode 100644 index 0000000..78f0c38 --- /dev/null +++ b/Sprites/barbell.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cbgn8aspf7oi0" +path="res://.godot/imported/barbell.png-18c805fdd277089a294c3e4ab4576f9d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/barbell.png" +dest_files=["res://.godot/imported/barbell.png-18c805fdd277089a294c3e4ab4576f9d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/bench.png b/Sprites/bench.png new file mode 100644 index 0000000..6e3968b Binary files /dev/null and b/Sprites/bench.png differ diff --git a/Sprites/bench.png.import b/Sprites/bench.png.import new file mode 100644 index 0000000..5da80a8 --- /dev/null +++ b/Sprites/bench.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dsovna2tmb4o3" +path="res://.godot/imported/bench.png-7eaea02148a24455b27861ad276687ec.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/bench.png" +dest_files=["res://.godot/imported/bench.png-7eaea02148a24455b27861ad276687ec.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/bench_press0.png b/Sprites/bench_press0.png new file mode 100644 index 0000000..ac6aa71 Binary files /dev/null and b/Sprites/bench_press0.png differ diff --git a/Sprites/bench_press0.png.import b/Sprites/bench_press0.png.import new file mode 100644 index 0000000..e566b07 --- /dev/null +++ b/Sprites/bench_press0.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dci4cuavfc4la" +path="res://.godot/imported/bench_press0.png-ba9ac58cf50cb63dff601e4a9d25d02e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/bench_press0.png" +dest_files=["res://.godot/imported/bench_press0.png-ba9ac58cf50cb63dff601e4a9d25d02e.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/bench_press1.png b/Sprites/bench_press1.png new file mode 100644 index 0000000..2956eb0 Binary files /dev/null and b/Sprites/bench_press1.png differ diff --git a/Sprites/bench_press1.png.import b/Sprites/bench_press1.png.import new file mode 100644 index 0000000..1788ef4 --- /dev/null +++ b/Sprites/bench_press1.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dya801bkqxdpa" +path="res://.godot/imported/bench_press1.png-5e3c7fb368ba97d9829feb84755273cb.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/bench_press1.png" +dest_files=["res://.godot/imported/bench_press1.png-5e3c7fb368ba97d9829feb84755273cb.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/bench_press2.png b/Sprites/bench_press2.png new file mode 100644 index 0000000..46be780 Binary files /dev/null and b/Sprites/bench_press2.png differ diff --git a/Sprites/bench_press2.png.import b/Sprites/bench_press2.png.import new file mode 100644 index 0000000..abbf81f --- /dev/null +++ b/Sprites/bench_press2.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bbxviq4c0pyju" +path="res://.godot/imported/bench_press2.png-26912d86e95ea594a6ede3ddf7d888d5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/bench_press2.png" +dest_files=["res://.godot/imported/bench_press2.png-26912d86e95ea594a6ede3ddf7d888d5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/bench_press3.png b/Sprites/bench_press3.png new file mode 100644 index 0000000..78adda4 Binary files /dev/null and b/Sprites/bench_press3.png differ diff --git a/Sprites/bench_press3.png.import b/Sprites/bench_press3.png.import new file mode 100644 index 0000000..7527d74 --- /dev/null +++ b/Sprites/bench_press3.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://biu7q8mfw62be" +path="res://.godot/imported/bench_press3.png-151702054f4fa5ae7f646f944338650b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/bench_press3.png" +dest_files=["res://.godot/imported/bench_press3.png-151702054f4fa5ae7f646f944338650b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/bench_press4.png b/Sprites/bench_press4.png new file mode 100644 index 0000000..023d0d4 Binary files /dev/null and b/Sprites/bench_press4.png differ diff --git a/Sprites/bench_press4.png.import b/Sprites/bench_press4.png.import new file mode 100644 index 0000000..00dc741 --- /dev/null +++ b/Sprites/bench_press4.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bg06qtcl207do" +path="res://.godot/imported/bench_press4.png-6bdb5e12c718169046447626c4f714d2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/bench_press4.png" +dest_files=["res://.godot/imported/bench_press4.png-6bdb5e12c718169046447626c4f714d2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/bench_press5.png b/Sprites/bench_press5.png new file mode 100644 index 0000000..f1902d1 Binary files /dev/null and b/Sprites/bench_press5.png differ diff --git a/Sprites/bench_press5.png.import b/Sprites/bench_press5.png.import new file mode 100644 index 0000000..423da02 --- /dev/null +++ b/Sprites/bench_press5.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bkypgv8rfcd8k" +path="res://.godot/imported/bench_press5.png-14c7049e4522e703552beeb21c54b5d3.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/bench_press5.png" +dest_files=["res://.godot/imported/bench_press5.png-14c7049e4522e703552beeb21c54b5d3.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/bench_press6.png b/Sprites/bench_press6.png new file mode 100644 index 0000000..d08e648 Binary files /dev/null and b/Sprites/bench_press6.png differ diff --git a/Sprites/bench_press6.png.import b/Sprites/bench_press6.png.import new file mode 100644 index 0000000..22a533c --- /dev/null +++ b/Sprites/bench_press6.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://warnmdoebwht" +path="res://.godot/imported/bench_press6.png-fbb03a505d8811ac5e307f534e60a936.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/bench_press6.png" +dest_files=["res://.godot/imported/bench_press6.png-fbb03a505d8811ac5e307f534e60a936.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/bench_press7.png b/Sprites/bench_press7.png new file mode 100644 index 0000000..386c8ce Binary files /dev/null and b/Sprites/bench_press7.png differ diff --git a/Sprites/bench_press7.png.import b/Sprites/bench_press7.png.import new file mode 100644 index 0000000..3260f58 --- /dev/null +++ b/Sprites/bench_press7.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://yrorih7pbt0q" +path="res://.godot/imported/bench_press7.png-f40d47f75275caf6823ff7e34d3d17bb.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/bench_press7.png" +dest_files=["res://.godot/imported/bench_press7.png-f40d47f75275caf6823ff7e34d3d17bb.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/chad_walk0.png b/Sprites/chad_walk0.png new file mode 100644 index 0000000..99af52f Binary files /dev/null and b/Sprites/chad_walk0.png differ diff --git a/Sprites/chad_walk0.png.import b/Sprites/chad_walk0.png.import new file mode 100644 index 0000000..eb77a19 --- /dev/null +++ b/Sprites/chad_walk0.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c43wo6u2c0d43" +path="res://.godot/imported/chad_walk0.png-8e4fc165652b5af437c3106b59f93650.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/chad_walk0.png" +dest_files=["res://.godot/imported/chad_walk0.png-8e4fc165652b5af437c3106b59f93650.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/chad_walk1.png b/Sprites/chad_walk1.png new file mode 100644 index 0000000..64fe665 Binary files /dev/null and b/Sprites/chad_walk1.png differ diff --git a/Sprites/chad_walk1.png.import b/Sprites/chad_walk1.png.import new file mode 100644 index 0000000..3cc3cd3 --- /dev/null +++ b/Sprites/chad_walk1.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dt5i4j2gvqso" +path="res://.godot/imported/chad_walk1.png-33816be91d7ff97b4b5f437f937fae6e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/chad_walk1.png" +dest_files=["res://.godot/imported/chad_walk1.png-33816be91d7ff97b4b5f437f937fae6e.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/chad_walk2.png b/Sprites/chad_walk2.png new file mode 100644 index 0000000..5741254 Binary files /dev/null and b/Sprites/chad_walk2.png differ diff --git a/Sprites/chad_walk2.png.import b/Sprites/chad_walk2.png.import new file mode 100644 index 0000000..3e65adf --- /dev/null +++ b/Sprites/chad_walk2.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://by265t6kx8us4" +path="res://.godot/imported/chad_walk2.png-6275d1149cbf6b3a53f8cc57ae4023c9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/chad_walk2.png" +dest_files=["res://.godot/imported/chad_walk2.png-6275d1149cbf6b3a53f8cc57ae4023c9.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/chad_walk3.png b/Sprites/chad_walk3.png new file mode 100644 index 0000000..af13872 Binary files /dev/null and b/Sprites/chad_walk3.png differ diff --git a/Sprites/chad_walk3.png.import b/Sprites/chad_walk3.png.import new file mode 100644 index 0000000..cb228b1 --- /dev/null +++ b/Sprites/chad_walk3.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dway2w8pbk5lp" +path="res://.godot/imported/chad_walk3.png-83f190047fc9396d428eeeadc1ee67bb.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/chad_walk3.png" +dest_files=["res://.godot/imported/chad_walk3.png-83f190047fc9396d428eeeadc1ee67bb.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/chad_walk4.png b/Sprites/chad_walk4.png new file mode 100644 index 0000000..5b75302 Binary files /dev/null and b/Sprites/chad_walk4.png differ diff --git a/Sprites/chad_walk4.png.import b/Sprites/chad_walk4.png.import new file mode 100644 index 0000000..b21fed2 --- /dev/null +++ b/Sprites/chad_walk4.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bunfddn1pa8pj" +path="res://.godot/imported/chad_walk4.png-e04181ba7df8daa1c7400ecfa9120b36.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/chad_walk4.png" +dest_files=["res://.godot/imported/chad_walk4.png-e04181ba7df8daa1c7400ecfa9120b36.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/chad_wave0.png b/Sprites/chad_wave0.png new file mode 100644 index 0000000..47033a5 Binary files /dev/null and b/Sprites/chad_wave0.png differ diff --git a/Sprites/chad_wave0.png.import b/Sprites/chad_wave0.png.import new file mode 100644 index 0000000..10c63d0 --- /dev/null +++ b/Sprites/chad_wave0.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://664m2cxtmmur" +path="res://.godot/imported/chad_wave0.png-7452b570847815d288a291f1ec8574e6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/chad_wave0.png" +dest_files=["res://.godot/imported/chad_wave0.png-7452b570847815d288a291f1ec8574e6.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/chad_wave1.png b/Sprites/chad_wave1.png new file mode 100644 index 0000000..7354989 Binary files /dev/null and b/Sprites/chad_wave1.png differ diff --git a/Sprites/chad_wave1.png.import b/Sprites/chad_wave1.png.import new file mode 100644 index 0000000..4f22b89 --- /dev/null +++ b/Sprites/chad_wave1.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://tu8ph6cjdwhv" +path="res://.godot/imported/chad_wave1.png-f0592da2a6c2b61ba47c87e39b1a9a35.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/chad_wave1.png" +dest_files=["res://.godot/imported/chad_wave1.png-f0592da2a6c2b61ba47c87e39b1a9a35.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/chad_wave2.png b/Sprites/chad_wave2.png new file mode 100644 index 0000000..8fabd22 Binary files /dev/null and b/Sprites/chad_wave2.png differ diff --git a/Sprites/chad_wave2.png.import b/Sprites/chad_wave2.png.import new file mode 100644 index 0000000..f5d0c10 --- /dev/null +++ b/Sprites/chad_wave2.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b28aaketyf0t1" +path="res://.godot/imported/chad_wave2.png-2c28d86e420f732e4cc32daf20b49920.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/chad_wave2.png" +dest_files=["res://.godot/imported/chad_wave2.png-2c28d86e420f732e4cc32daf20b49920.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/chad_wave3.png b/Sprites/chad_wave3.png new file mode 100644 index 0000000..eb227dc Binary files /dev/null and b/Sprites/chad_wave3.png differ diff --git a/Sprites/chad_wave3.png.import b/Sprites/chad_wave3.png.import new file mode 100644 index 0000000..2d5cce1 --- /dev/null +++ b/Sprites/chad_wave3.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://jyr4f2p7jbk8" +path="res://.godot/imported/chad_wave3.png-c5f30d3e0f297bd9fc2597ab6e730b5a.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/chad_wave3.png" +dest_files=["res://.godot/imported/chad_wave3.png-c5f30d3e0f297bd9fc2597ab6e730b5a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/chad_wave4.png b/Sprites/chad_wave4.png new file mode 100644 index 0000000..58bcd4d Binary files /dev/null and b/Sprites/chad_wave4.png differ diff --git a/Sprites/chad_wave4.png.import b/Sprites/chad_wave4.png.import new file mode 100644 index 0000000..df3686c --- /dev/null +++ b/Sprites/chad_wave4.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://f013utfdsqqe" +path="res://.godot/imported/chad_wave4.png-d9dcca2f7e8dd0d27166f8047669505f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/chad_wave4.png" +dest_files=["res://.godot/imported/chad_wave4.png-d9dcca2f7e8dd0d27166f8047669505f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/chad_wave5.png b/Sprites/chad_wave5.png new file mode 100644 index 0000000..ff841ca Binary files /dev/null and b/Sprites/chad_wave5.png differ diff --git a/Sprites/chad_wave5.png.import b/Sprites/chad_wave5.png.import new file mode 100644 index 0000000..83d2a28 --- /dev/null +++ b/Sprites/chad_wave5.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://duryxgc54alp5" +path="res://.godot/imported/chad_wave5.png-aa21a1c7a76438f4a886d5f1b68bbcc5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/chad_wave5.png" +dest_files=["res://.godot/imported/chad_wave5.png-aa21a1c7a76438f4a886d5f1b68bbcc5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/chad_wave6.png b/Sprites/chad_wave6.png new file mode 100644 index 0000000..a63c2b9 Binary files /dev/null and b/Sprites/chad_wave6.png differ diff --git a/Sprites/chad_wave6.png.import b/Sprites/chad_wave6.png.import new file mode 100644 index 0000000..e9cea02 --- /dev/null +++ b/Sprites/chad_wave6.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://yy2yrm4gq6w4" +path="res://.godot/imported/chad_wave6.png-3d42c992783b312c1ab7802034e07a03.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/chad_wave6.png" +dest_files=["res://.godot/imported/chad_wave6.png-3d42c992783b312c1ab7802034e07a03.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/stick-bench-bend.png b/Sprites/stick-bench-bend.png new file mode 100644 index 0000000..56726c6 Binary files /dev/null and b/Sprites/stick-bench-bend.png differ diff --git a/Sprites/stick-bench-bend.png.import b/Sprites/stick-bench-bend.png.import new file mode 100644 index 0000000..15b8ae2 --- /dev/null +++ b/Sprites/stick-bench-bend.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://mc8luxtg4rio" +path="res://.godot/imported/stick-bench-bend.png-7c99c74f55cf267d5d337b54b20aa912.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/stick-bench-bend.png" +dest_files=["res://.godot/imported/stick-bench-bend.png-7c99c74f55cf267d5d337b54b20aa912.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/stick-bench-straight.png b/Sprites/stick-bench-straight.png new file mode 100644 index 0000000..18e7778 Binary files /dev/null and b/Sprites/stick-bench-straight.png differ diff --git a/Sprites/stick-bench-straight.png.import b/Sprites/stick-bench-straight.png.import new file mode 100644 index 0000000..dd0679b --- /dev/null +++ b/Sprites/stick-bench-straight.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cqkxhms26hdx2" +path="res://.godot/imported/stick-bench-straight.png-d6eb50859d8b64f084f45e07fee5f895.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/stick-bench-straight.png" +dest_files=["res://.godot/imported/stick-bench-straight.png-d6eb50859d8b64f084f45e07fee5f895.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Sprites/stick-bench.kra b/Sprites/stick-bench.kra new file mode 100644 index 0000000..c6dbf5b Binary files /dev/null and b/Sprites/stick-bench.kra differ diff --git a/default_bus_layout.tres b/default_bus_layout.tres new file mode 100644 index 0000000..e9e86d7 --- /dev/null +++ b/default_bus_layout.tres @@ -0,0 +1,15 @@ +[gd_resource type="AudioBusLayout" format=3 uid="uid://bia4wmxnb0yc3"] + +[resource] +bus/1/name = &"Music" +bus/1/solo = false +bus/1/mute = false +bus/1/bypass_fx = false +bus/1/volume_db = 0.0 +bus/1/send = &"Master" +bus/2/name = &"Sfx" +bus/2/solo = false +bus/2/mute = false +bus/2/bypass_fx = false +bus/2/volume_db = 0.0 +bus/2/send = &"Master" diff --git a/icon.svg b/icon.svg new file mode 100644 index 0000000..c6bbb7d --- /dev/null +++ b/icon.svg @@ -0,0 +1 @@ + diff --git a/icon.svg.import b/icon.svg.import new file mode 100644 index 0000000..224967c --- /dev/null +++ b/icon.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d1exufucxsjrq" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/max-effort.csproj b/max-effort.csproj new file mode 100644 index 0000000..773448f --- /dev/null +++ b/max-effort.csproj @@ -0,0 +1,8 @@ + + + net8.0 + net9.0 + true + maxeffort + + \ No newline at end of file diff --git a/max-effort.sln b/max-effort.sln new file mode 100644 index 0000000..61950ff --- /dev/null +++ b/max-effort.sln @@ -0,0 +1,19 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "max-effort", "max-effort.csproj", "{F2A344E9-085E-4ECC-8156-C17493A42759}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + ExportDebug|Any CPU = ExportDebug|Any CPU + ExportRelease|Any CPU = ExportRelease|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F2A344E9-085E-4ECC-8156-C17493A42759}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F2A344E9-085E-4ECC-8156-C17493A42759}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F2A344E9-085E-4ECC-8156-C17493A42759}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU + {F2A344E9-085E-4ECC-8156-C17493A42759}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU + {F2A344E9-085E-4ECC-8156-C17493A42759}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU + {F2A344E9-085E-4ECC-8156-C17493A42759}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU + EndGlobalSection +EndGlobal diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..3478506 --- /dev/null +++ b/project.godot @@ -0,0 +1,34 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="max-effort" +run/main_scene="uid://bg4uaukekjbx" +config/features=PackedStringArray("4.5", "C#", "GL Compatibility") +config/icon="res://icon.svg" + +[dotnet] + +project/assembly_name="max-effort" + +[input] + +lift_action={ +"deadzone": 0.2, +"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":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":false,"script":null) +] +} + +[rendering] + +renderer/rendering_method="gl_compatibility" +renderer/rendering_method.mobile="gl_compatibility"