From bba82f64fdb299e29b90ab88ab0e246deee33322 Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Sat, 24 Jan 2026 02:47:23 +0100 Subject: [PATCH] add initial project files and configurations, including EventBus, systems, and resources --- .editorconfig | 4 + .gitattributes | 2 + .gitignore | 3 + Code/Core/EventBus.cs | 30 ++++ Code/Core/EventBus.cs.uid | 1 + Code/Data/DayConfig.cs | 18 +++ Code/Data/DayConfig.cs.uid | 1 + Code/Data/HazardDef.cs | 17 +++ Code/Data/HazardDef.cs.uid | 1 + Code/Data/HazardType.cs | 10 ++ Code/Data/HazardType.cs.uid | 1 + Code/Data/SoundBank.cs | 23 +++ Code/Data/SoundBank.cs.uid | 1 + Code/Data/TunnelConfig.cs | 12 ++ Code/Data/TunnelConfig.cs.uid | 1 + Code/Systems/BaseLiftSystem.cs | 66 ++++++++ Code/Systems/BaseLiftSystem.cs.uid | 1 + Code/Systems/BenchPressSystem.cs | 38 +++++ Code/Systems/BenchPressSystem.cs.uid | 1 + Code/Systems/CameraShakeSystem.cs | 72 +++++++++ Code/Systems/CameraShakeSystem.cs.uid | 1 + Code/Systems/DeadliftSystem.cs | 64 ++++++++ Code/Systems/DeadliftSystem.cs.uid | 1 + Code/Systems/GameManager.cs | 96 ++++++++++++ Code/Systems/GameManager.cs.uid | 1 + Code/Systems/HazardController.cs | 115 ++++++++++++++ Code/Systems/HazardController.cs.uid | 1 + Code/Systems/HazardSystem.cs | 114 ++++++++++++++ Code/Systems/HazardSystem.cs.uid | 1 + Code/Systems/PlayerInputSystem.cs | 23 +++ Code/Systems/PlayerInputSystem.cs.uid | 1 + Code/Systems/SoundManager.cs | 195 ++++++++++++++++++++++++ Code/Systems/SoundManager.cs.uid | 1 + Code/Systems/TunnelSystem.cs | 65 ++++++++ Code/Systems/TunnelSystem.cs.uid | 1 + Code/UI/LiftProgressBar.cs | 27 ++++ Code/UI/LiftProgressBar.cs.uid | 1 + Code/UI/MainMenu.cs | 34 +++++ Code/UI/MainMenu.cs.uid | 1 + Code/Visuals/LiftSyncController.cs | 98 ++++++++++++ Code/Visuals/LiftSyncController.cs.uid | 1 + Objects/bench_press.tscn | 36 +++++ Objects/bench_press_stickman.tscn | 48 ++++++ Objects/deadlift.tscn | 16 ++ Objects/hazard_animated.tscn | 15 ++ Objects/hazard_generic.tscn | 41 +++++ Resources/Day_Day1.tres | 12 ++ Resources/Day_Day2.tres | 13 ++ Resources/Day_Day3.tres | 11 ++ Resources/Hazard_GymBro.tres | 73 +++++++++ Resources/SoundBank.tres | 7 + Scenes/main.tscn | 150 ++++++++++++++++++ Scenes/main_menu.tscn | 67 ++++++++ Shaders/TunnelVision.gdshader | 20 +++ Shaders/TunnelVision.gdshader.uid | 1 + Sprites/barbell.png | Bin 0 -> 935 bytes Sprites/barbell.png.import | 40 +++++ Sprites/bench.png | Bin 0 -> 2267 bytes Sprites/bench.png.import | 40 +++++ Sprites/bench_press0.png | Bin 0 -> 2327 bytes Sprites/bench_press0.png.import | 40 +++++ Sprites/bench_press1.png | Bin 0 -> 2306 bytes Sprites/bench_press1.png.import | 40 +++++ Sprites/bench_press2.png | Bin 0 -> 2287 bytes Sprites/bench_press2.png.import | 40 +++++ Sprites/bench_press3.png | Bin 0 -> 2241 bytes Sprites/bench_press3.png.import | 40 +++++ Sprites/bench_press4.png | Bin 0 -> 2370 bytes Sprites/bench_press4.png.import | 40 +++++ Sprites/bench_press5.png | Bin 0 -> 2409 bytes Sprites/bench_press5.png.import | 40 +++++ Sprites/bench_press6.png | Bin 0 -> 2407 bytes Sprites/bench_press6.png.import | 40 +++++ Sprites/bench_press7.png | Bin 0 -> 2371 bytes Sprites/bench_press7.png.import | 40 +++++ Sprites/chad_walk0.png | Bin 0 -> 2322 bytes Sprites/chad_walk0.png.import | 40 +++++ Sprites/chad_walk1.png | Bin 0 -> 2242 bytes Sprites/chad_walk1.png.import | 40 +++++ Sprites/chad_walk2.png | Bin 0 -> 2024 bytes Sprites/chad_walk2.png.import | 40 +++++ Sprites/chad_walk3.png | Bin 0 -> 2211 bytes Sprites/chad_walk3.png.import | 40 +++++ Sprites/chad_walk4.png | Bin 0 -> 2420 bytes Sprites/chad_walk4.png.import | 40 +++++ Sprites/chad_wave0.png | Bin 0 -> 2176 bytes Sprites/chad_wave0.png.import | 40 +++++ Sprites/chad_wave1.png | Bin 0 -> 2245 bytes Sprites/chad_wave1.png.import | 40 +++++ Sprites/chad_wave2.png | Bin 0 -> 2156 bytes Sprites/chad_wave2.png.import | 40 +++++ Sprites/chad_wave3.png | Bin 0 -> 2223 bytes Sprites/chad_wave3.png.import | 40 +++++ Sprites/chad_wave4.png | Bin 0 -> 2237 bytes Sprites/chad_wave4.png.import | 40 +++++ Sprites/chad_wave5.png | Bin 0 -> 2259 bytes Sprites/chad_wave5.png.import | 40 +++++ Sprites/chad_wave6.png | Bin 0 -> 2177 bytes Sprites/chad_wave6.png.import | 40 +++++ Sprites/stick-bench-bend.png | Bin 0 -> 4021 bytes Sprites/stick-bench-bend.png.import | 40 +++++ Sprites/stick-bench-straight.png | Bin 0 -> 3750 bytes Sprites/stick-bench-straight.png.import | 40 +++++ Sprites/stick-bench.kra | Bin 0 -> 97019 bytes default_bus_layout.tres | 15 ++ icon.svg | 1 + icon.svg.import | 43 ++++++ max-effort.csproj | 8 + max-effort.sln | 19 +++ project.godot | 34 +++++ 110 files changed, 2735 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 Code/Core/EventBus.cs create mode 100644 Code/Core/EventBus.cs.uid create mode 100644 Code/Data/DayConfig.cs create mode 100644 Code/Data/DayConfig.cs.uid create mode 100644 Code/Data/HazardDef.cs create mode 100644 Code/Data/HazardDef.cs.uid create mode 100644 Code/Data/HazardType.cs create mode 100644 Code/Data/HazardType.cs.uid create mode 100644 Code/Data/SoundBank.cs create mode 100644 Code/Data/SoundBank.cs.uid create mode 100644 Code/Data/TunnelConfig.cs create mode 100644 Code/Data/TunnelConfig.cs.uid create mode 100644 Code/Systems/BaseLiftSystem.cs create mode 100644 Code/Systems/BaseLiftSystem.cs.uid create mode 100644 Code/Systems/BenchPressSystem.cs create mode 100644 Code/Systems/BenchPressSystem.cs.uid create mode 100644 Code/Systems/CameraShakeSystem.cs create mode 100644 Code/Systems/CameraShakeSystem.cs.uid create mode 100644 Code/Systems/DeadliftSystem.cs create mode 100644 Code/Systems/DeadliftSystem.cs.uid create mode 100644 Code/Systems/GameManager.cs create mode 100644 Code/Systems/GameManager.cs.uid create mode 100644 Code/Systems/HazardController.cs create mode 100644 Code/Systems/HazardController.cs.uid create mode 100644 Code/Systems/HazardSystem.cs create mode 100644 Code/Systems/HazardSystem.cs.uid create mode 100644 Code/Systems/PlayerInputSystem.cs create mode 100644 Code/Systems/PlayerInputSystem.cs.uid create mode 100644 Code/Systems/SoundManager.cs create mode 100644 Code/Systems/SoundManager.cs.uid create mode 100644 Code/Systems/TunnelSystem.cs create mode 100644 Code/Systems/TunnelSystem.cs.uid create mode 100644 Code/UI/LiftProgressBar.cs create mode 100644 Code/UI/LiftProgressBar.cs.uid create mode 100644 Code/UI/MainMenu.cs create mode 100644 Code/UI/MainMenu.cs.uid create mode 100644 Code/Visuals/LiftSyncController.cs create mode 100644 Code/Visuals/LiftSyncController.cs.uid create mode 100644 Objects/bench_press.tscn create mode 100644 Objects/bench_press_stickman.tscn create mode 100644 Objects/deadlift.tscn create mode 100644 Objects/hazard_animated.tscn create mode 100644 Objects/hazard_generic.tscn create mode 100644 Resources/Day_Day1.tres create mode 100644 Resources/Day_Day2.tres create mode 100644 Resources/Day_Day3.tres create mode 100644 Resources/Hazard_GymBro.tres create mode 100644 Resources/SoundBank.tres create mode 100644 Scenes/main.tscn create mode 100644 Scenes/main_menu.tscn create mode 100644 Shaders/TunnelVision.gdshader create mode 100644 Shaders/TunnelVision.gdshader.uid create mode 100644 Sprites/barbell.png create mode 100644 Sprites/barbell.png.import create mode 100644 Sprites/bench.png create mode 100644 Sprites/bench.png.import create mode 100644 Sprites/bench_press0.png create mode 100644 Sprites/bench_press0.png.import create mode 100644 Sprites/bench_press1.png create mode 100644 Sprites/bench_press1.png.import create mode 100644 Sprites/bench_press2.png create mode 100644 Sprites/bench_press2.png.import create mode 100644 Sprites/bench_press3.png create mode 100644 Sprites/bench_press3.png.import create mode 100644 Sprites/bench_press4.png create mode 100644 Sprites/bench_press4.png.import create mode 100644 Sprites/bench_press5.png create mode 100644 Sprites/bench_press5.png.import create mode 100644 Sprites/bench_press6.png create mode 100644 Sprites/bench_press6.png.import create mode 100644 Sprites/bench_press7.png create mode 100644 Sprites/bench_press7.png.import create mode 100644 Sprites/chad_walk0.png create mode 100644 Sprites/chad_walk0.png.import create mode 100644 Sprites/chad_walk1.png create mode 100644 Sprites/chad_walk1.png.import create mode 100644 Sprites/chad_walk2.png create mode 100644 Sprites/chad_walk2.png.import create mode 100644 Sprites/chad_walk3.png create mode 100644 Sprites/chad_walk3.png.import create mode 100644 Sprites/chad_walk4.png create mode 100644 Sprites/chad_walk4.png.import create mode 100644 Sprites/chad_wave0.png create mode 100644 Sprites/chad_wave0.png.import create mode 100644 Sprites/chad_wave1.png create mode 100644 Sprites/chad_wave1.png.import create mode 100644 Sprites/chad_wave2.png create mode 100644 Sprites/chad_wave2.png.import create mode 100644 Sprites/chad_wave3.png create mode 100644 Sprites/chad_wave3.png.import create mode 100644 Sprites/chad_wave4.png create mode 100644 Sprites/chad_wave4.png.import create mode 100644 Sprites/chad_wave5.png create mode 100644 Sprites/chad_wave5.png.import create mode 100644 Sprites/chad_wave6.png create mode 100644 Sprites/chad_wave6.png.import create mode 100644 Sprites/stick-bench-bend.png create mode 100644 Sprites/stick-bench-bend.png.import create mode 100644 Sprites/stick-bench-straight.png create mode 100644 Sprites/stick-bench-straight.png.import create mode 100644 Sprites/stick-bench.kra create mode 100644 default_bus_layout.tres create mode 100644 icon.svg create mode 100644 icon.svg.import create mode 100644 max-effort.csproj create mode 100644 max-effort.sln create mode 100644 project.godot 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 0000000000000000000000000000000000000000..8642f3d7173a76496512b96c8b2a20eaf53732df GIT binary patch literal 935 zcmeAS@N?(olHy`uVBq!ia0vp^`9N&V!3HEtZ(V5wQk(@Ik;M!QddeWoSh3W;jDdkU z($mE;q$2L^Oy3M)N0H;RU3irk`xk|M5Vnc@s#FoMp;dwF-XqUF6`vF;0tH0&R(^UG zdL)j?RYO#Bsbz(LNXsgA*1#n{L`}U+w#;%6`p;kXIPG&~S9f3AM{ z=FOW60{TJ_R@VTok@D0(CB zhTjeC8zxOLs;{1KHhfoIpZR;ri}i+O3~%md%-lVz-Qlpn-R9h|Bm8^R;{58knk5DI z_$NIxPfCk-`s`-vt7b9dY+C-~&vMQidL`^R&eklxSYb0`$K<)D5nhk49d)_Obl2IS zUh>+~zl?vlQuf-W1m2V6=2bOhIq=&+MS0qSzKmUdpFb?s3Yg=z=g725O=E!#Pj%mE zKc2OmOUUEQyO%6EVLLs_w0|ki_F8(3tMyRakG%2^{~2;GFZds#BNm@=U$OtsiWKFq z+t@sYuAOXHa&POa^Wk%g_7k47TGUt6EC&SP8Vro zI#b0O@oc$|VgXn3`J@wfn4T9-UiR9Nw|%~UA&1uc$z`rAQ(KNNEWP)BQ|o?C4*MIW zAL4ogZ)$Lr|DVL%ot<&#rbgPU(-CVs_z>-C!nh zf9pwspK5ol8^q4mvOKAu#T%IA(ZE6)N@(Et!=!Wg!iw90<=cTdkHOQ`&t;ucLK6V_ Cla`?X literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6e3968bbf9c77507f6464939a198bcf87df2f608 GIT binary patch literal 2267 zcmb`J={wYo8pnUXF_@VwV{9FhnnfZSG)+jBrWryhTiIe}tO?nZb!;&rBjqtDp31&N zN}|SCk}TOur1Q*#xhVUSt+E`?`2)_Y^Wt-VuIqb!?^pMmn{~m;OcJ4l002PJ{0zlr z*UW!_iS5pIBYMxS;DKixLjZt){|7Ll*f<;jU>W9=Q+5%q^Or5JIaB4h;RSljcx=GX zNte856?URuEQG}bc7(lO6QH7?S%eO+YI1LVqK3MfbU2=UxHW-&f;F?C296ITRN`@aZ@N8%b{ zjE5^d4enVK6AqzRe|{H1qtUY(8X6&2uU@VE868Vkq#6tA%`^(*YTZnG`Sr2_Dl<+r zSn1Bp!omUzPsL?9L`6kCuCDG&oP2%3XOW?Biz@B0G_@!c3dOm-!r%w6JDbZgQ%Aha z7Cj9Nz-@BtFZVi!?OqOX(BtTs*N}O3cJ`;me>bm-g}NrXkjlrkn%ZJ@9$OiZj~qFo ztL4%N@bkmCqr-fDVfkoSz18pN9fyu}g#~|s?8Kw9s`Xx#5@jdE4mVvJ>wYvC$-(nH zU#;4_Eqo@*D7Q-^ucM|eIo~+uq(uU6D;qR0WKC93$N!A`%WHqeNZ(neoKoDud;kY| zMvi-_f&9>MmN^OAxj3$!Og^>Zo%lUk{SSNK2;{m#Q+9QAHR_?iDhn9;DB;J*0D>e| zQf;elyI0lJAX=*~5;MFMG{6%ECr(tkraOIYJfvSqR;LRbk-`-{l?>vTUF3T zhjNINO=nYFqS_;98QQQ}`ZfkK8URFET3U|$sNFNX{n-(3azZJ?DbApNY_4+~8N8El z2Y~gloNQl}xFiGt89)io&TyN;JPM(KW->7=VR7VcPx*r&l%YA2D@^!YI5LEy1q1|q zEMx~eQY`^O?$*_66t9IF#NeQK@ZRk{3S8jE*Q+}V7eKvsyvUXSx`($ls~VM4hr)aq z8&lT^Cn?K-7a=PCS};Rg&9Th-8hAR5ocb}`Eh|yJ1Bqj9k?7pud&=&6;RClWx0uht zpCz8jzT)X8B0>LsJ^ST5*PwsF1#}YIkdk+nhzIvuLvr2K@!(NHPEvm2C_is^Pg#nX zH-8?djT48U-L&F&rbM|ozL`1`JKhqs(xhG;PItDJW`uPk7yN&vT|{kE1ygN!mr zK_4_AASba;H#W3DJ%1E7un=q>A*`Lb^52RqND$$v;dndOo5!f3A#^%6Qe)qm(Zq3w9Hkxrp!~ z*xh_eR+X#8M~6@R{`)K-_`CoG8<>XZebLfHBcCGz!8Py)FAGq9e=~kijIBP+m-a!= z_vhkFo>o@&j5W|!fR6IuTM9oy1k3 z{Oqbw9|1`|TYn6!%1ud8I+Mq-I)j;xZAjHyPJx*hpwr?>bupSM3H{PxY-rog=IE${ zVpBrqY5yYKB)hFP3bUWS5^`@za}X0Rikoz3dLC0bs?E*rzgU|hz;3E0(><23PDYn0 z$8(r_pT7Ih-qdmq))|{NJ3!PYkyeS@JE#X?#Ce~k`Lav$vS33_(B_wyA*IWmi-8|z zW@d~xzGkwgU!26$N0nmEmkxi^O-V@+N@|s|SS-fz{A#OPJ+yX3w&HiuyYu=b$4%tN zHBO&C?R`BYR&vQRrGK66jbc%LKCbiqK0BLjw8Lj>u+i*UKdX~zuQm6O8*-MPx3>Ph zKkKqAId)Im&jMe0!fwW}cLv6yB#8w))enuJ(P%9-m7&6J zv+ji)s{*~c$r}`T{SX0)vzVUSLt(Bz?hw~gwNeP#=LZ0f$agnx;+;vpVvd$44oKV_*mV|jUbT_?hp++&!|ZPqm~a5j0pBg?HM zOhni~sMH26d|m;E13x{1$K%oEc8AlwKk0nj)QR1ZnhNW3u+?EU);{5_UB?!ZJvMZk zsoSHET&_eDUPHej(z;qa=lRqwwW-58`@=X~x5NrUu~FQN(pfQhV literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ac6aa7116c1b79c101f416040f967d2897d115a3 GIT binary patch literal 2327 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 CXf{Cr literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..46be780d8c472e7dc18f9f09790b1682003206fd GIT binary patch literal 2287 zcmeHJYfuwc6kb4!gJO7SL8?ZqBsze^1Ox&kqQL+Ph#+90yfG>QLINcT1ga=dkVr?1 zJWQC#XdMv{7*Z4ot<;DF(qQEkA-oer2$=AShIE(CwBtC=^iTi!W9QyI_kQQ>`Of{$ z-P~i|M14IoJpcgoJ=_V$0YFOyKJ0aCK+86ZUQ2M;5#@f|3jk;c0LaV&0B{}1lmS38 z3IJY*0|5300GOOFd+6&7E@(#{Arb&hHdDX@-*hP+UT(UtwM+pWOaH)lUC?AfaSNhE zM^Iw0QAsi20H9Im{nn^`)@Y1B8iTcSz}nebqEJ{As(W_f@dtpogy=J;sGkPhx$mt7 z0(SosfpR7;hD?cwJO3}n)*teX!P;W}4k8K*hy%a#g$KdaKec~)K%CU?zUhE3#!jPY z7hG)5jm>vmSM!ooJ%7zJ&G&lKyZT*`-ctMWF}4H;43ToTM-pKBIN7G6L-{iE!%Bm% zX*q^2tvR2~A9Aw1$c1IHDcCTTSTV_E=CLWucQO;>*{3H1b8zABJicUnFUx+US+hO^ zD`GY*D)lnZBIbPW-RtTQ4*c~NWWW-J>W%LrcPAM~AVjcT0ab=Bfk8Ngk=jA1e_}zA z!!RvO%Ig_KroSqZ)Dp@%XGVlORlW^`_m0Dhc=5LS-a&pyNk4*`=f=1ij8xEG_29&{ zs9X=WdB|Yn?Jxn~x!Gpe8lH~pTd;Ewu3x6r;`nK5|M=it%^I^Je1^oRRgRu4O5F48 z1$Amu#`N4dmyHE2cIvm@QhxlV@=XCWC$vl)HlmyDZsx4wMK))g?om-9NI16w#ji2UiYwg{P1%v;^~3#n6VEI@*6 zs8bg^Q!x7Qs@i2V&bWrLrdi6+*;}=_D6J z-Q-YQsbc?<8+0<5^=jH+r5x%lj2(;9jfa)g{Y!QnIKNDa6-9OPK>?6i!33fHDYY#J z9wRT~>h50Me3e)w9S}?zK)`&WTwFT88S)1kUUm)!Q#d#K6#;+2QJBJk4^jPkD{Tza z=O>&sNY!|83s{U>19)lNtkf7nCklB93Ee)cX>~DHmYYuUa3aMeep+2FBO)}Lznvr1 zwpSpG)wKfZf}x8^@jN+~;XC0>hl!ZwWcwR=b;7B*dPk8N6>0qSPwIZ@f9V4BCw<5E84Aid0B~3rbV3V}BJSUKmz*QEs zwoyAJSnax%C8(%j0=bYHfTX3=C@YUDb(QJIBS#ZCVNaJS6=O__7070`(r!=ToE58P zYcIde@$767Bej55`F>uW00$(-2G!woVf@~M-JqB*7BCEd(|}~1lYhQdKJF_2g_9MX Ya-$&sR?|Q#_)7qIxOo$*4u)U&3-m1)mjD0& literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..78adda4371341e4272bc5fbdcf63b85196179bf0 GIT binary patch literal 2241 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f1902d11ab7c5e5fd1c3c3ce33e625ca673c16af GIT binary patch literal 2409 zcmeHJeNacP&*iqU2q*Bd`NH>CE>%0A>mydBC?UCgpWi*2zgK! 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 Wn4DqGT!cL{fHVe^-ul+AL;nSo)?23l literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..99af52fb7c33d858d304464daa96c368fa5e8a1c GIT binary patch literal 2322 zcmeHJ|5FoZ8eeN26pMnX-#8&a5NHt-uqsj@P!=&+~cSXRAI=jB#>wbp!ywDRv+D2>>j!Qnza5+my#`>wrJCcnJ1=k^lfjJ^)Z! z4ggdfD8&Kba}EGJPX~Yy1psW!Z@7IRlnT6+5f=jj_6k_vK|MK$V-unso-f-3toI(s ze;7%*wu+-u#hHAuFho!&q!u8E6SOOU6BrQmK{AIE5=31={*=MtcqgOwKLC#9W#(i_ z{udC)Spvjw=2uYwzt=m6bB+l`V*auGKVt$zcI;ZhJo#`lo62)O7K}_jHDr9+S=gWI z9C1K;&Tbc?WvkxK=xzPU+iX>;5s%XA4`fd-MHSv@D7{p2XK@9p6Yo>HyLabC~YvzQ=YZ z^I=~4Xp*lLQ)+*?r-~;8+7mfKt{krj8N26L;$!NE#ri|Xz4YGJ(+?hPz|@_yfi<{p z&#vS_lx5|EkHW$i!Y7Ryo02tFJo|3R1`KZX9a~ssx3w6rbQLj0$8zh(1J+m~XO8HN zZMUFX0{*(%@TfMMx3#?20?n;C>xjWEHf43uZSg+jKHYdO&B3=9yN9o;didc(W_ikQqB`Qcu==0JeRoVQcW>`5 zQza5E;iF&gM%E7A8MxG(pQIWsHu%!ww7>~hKBDw#T`6kV{YtQmG%{;ryw__bGjG__ zo*t2%UQ)7kwrScHOV~PH0#&a(qfJw`1X|=TGj=NyiSJe^;8*fDpRO+(1i6Y+npaIg zrZ#U|IR1_gV~IEJS1TG1gXpJgzSMxIQ>$t}!E$3XO=r`zDxI=O5Mkoo$wDrSYog}+ zE1`yGtjpv!I!{qZ<936Qw|mOhh2$KT9REIGaSf)foxbKw`k{T6u#UcW5yM7*=nO82 znO}i0$1hJnCS4CCLky9vyhdCXoYBX%wlwV{iqpGP3B+ffi#;Is!GT`VrG#nELk!{o z{>gb!6;zHY%m;0M1JOzGZRHI*wZCL?YjB6)EKSMw^ucDTBy$mY?ikyo9%)jKC9#Si z&E@9lY!_L#q3gZH%au@pZu<1>p^)Ko7}zRdy$@0=L{xvFqIKC}}2F zOOL*9I&$~1brM9Qjtfn}sTH{Vg@hrI`c^MI2hscCStgIv9=ds&@WPkcwJV{W6hANC zLFJ1jUks!OwY+}{Fw6MnVM;%}7R9RRYDFBe+8ps^cH1@HHx9X>eH%8;>d&6IpwHA& z6#D+EG#~E&)it=5-aTh#=sZXz)%@RHRfq2-mff2O!$cJJa!(#%gG)csnQ@N-+0#}FTf!r^iC}kkG{E1QvGCd^2 z407c`={$o34oclUt)t%P2-p#NJq&gs$C~Ct_Y-Gid*|lQy{Lk6RPrls{OuT9pNsAQ zxnGTIqKV$ZlaEDUhu`%ubR8LSDf>Jw&%9}nAiU})%9KiIQ;!J7<${}roe1v&<*9W4?EQ% zbSDqy8)rvPcKD=CaPtb}x(YQlgqjxK45X!l=Kq<-W_I~vN-)U%v7P#B0AiyP!Jj`$ GFZ&PRXg+!X literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..64fe665600dff51bbfa1b2011b25a490681b4b18 GIT binary patch literal 2242 zcmeHI`%@EF6kf14R;4@wMFj;Fhy@7=Fj$ZzqKm))Mid1Eio8Op0%C9=U>3v&$)H4` zVyKd|87u9;$Y2DFC|Ga=6~we7ZwMfoASMK|Lfn|9yM@-V{iT0^GrO~Q&%NKd=YHpW z_i%Ub3NTr|W;p-=CP9JV9sn>x&{w$Z6V$TSvCjql*e3?=2?c;$Cjclo1pw$gP@n*S zV$RKk$+>zJ|12Rm}gs8yPdgCzrzX4}G6y)hWv zHRo-H&zU&Ij1L^5_=j1n_tu54#vk=vTTp5k(Hj@^T2StD)+K5j9C^*dp+ zjkz52kLC|K(afl<@9Avmm!P?<bP4DA!zOJW0r@qZtMwhTqcyAzNx4gJ@~jV?owS`wjBUC(m07D#Z*Og` zfWumq7VM{!ITTh=YmCV5+cZjxQjqSQH-Ad!gxK%B6AF8m*5WC}wx%9j>dub$$!4Yy%+t?>!ZAs9{9rh!l!(_y&gTa`n3>qk4}qhCQw_sg zRO)HwRbGR#n%oFoaMC#-Qb8swxg}de7#RO4?|p@WL=&G8(8NeJ?p?XVF~(oraE zy=s~ha{XnSrHGyb&N=BVOQz53+!{s+`kH)wxp- zi`hQ&3suQ3Y0P|uC5A_qFP5kzE`V3#UiN|`oYIh z{;-@;Y*7E`!6VfvSVE{1=8q*y^9`V|?n<@cM6*8{0>Y`UA9^&h0Xe0Na&yy`aPHzM zs?kKy?w}WQ7yLXn7}8zI=DfbFcwS!C2-6*rv5@3u3;j2|IAuRgS`-^RlGs!M()gYd z5RTffbC&Yzsd9rCEBZdl+|TV`strF74oX1P5!fB8?B60ag*$X5?{2H28U%YD*7DpC~TUE;Wqd~@$%M14Ba#0|QW= zq2UDsL#Y7+!>a@a2CEqi4B`cIb_Lo1C76=D-CY>|xA&jf59G0zc>21szhabN5LLNR zaLf@Xq*~${QIe8al4_M)lnSI6j0}v-bPWu3jZ8ue46KZR$VeN=FfdRFIsYF;LvDUb zW?Cht215gg1|P}9PM`)2xD6$lxv9k^iMa*ndJL_M%^-TNT1)CPFtDBRba4!+xb^n# z?X24Y0uF(@pZu@CS*xMyw`g|o)^+LYzlu0P{I{jbD zqJGPL4-U=u`l8sczwLv%Q0=ku=}|u}ci25VKP~dx<_^0DJ+5N^WZqrwFF#j#w`7L% zm&2V?&%2y=^pg+nsM}KPJoPWnB6*)BIv?NE-g|%kY5yFhb>{OQ?YFzwU#jxxcT4@> zoN|NtZ)<|M0xud#x^RK2VonbdlY2m+u$n+W)GO*Jn>Yl(VQm%KP{Edpizm7X-<_*%+Q| z_e;q)Zt4s6-_qUMzptzRx_B-&?%??cvw+?*HdRa$ux+3D#n_?}=yM_NI=;zudy0!p zWuFPu9+12_`%AG!V|q>fN>=-B&-owkmZ;kIddh#k(ZpS+bdkOC!8YG7f!W;p-+sni zMoN~olg{U#MvWPi)XM+KCT=z;5#Ra9)ysr6L7)F<6E_!EI#0Hl)eP3YkzYdqmBpZOIDGT}MH<~kvejOCFv^PNF@ z_>5jJ2RQ~gpIW{stNkWezz0z{2dGd+;isp|dA*b8KY^0!|Ki>I>`SzNRN4g0Eh^c$ z)NbZmxC!Zv{Z(pEhXXB4pSb$hPMF&dvDIsV%!HH!VLMkroDD7z=JBq3rH)cywEu|c zJMH>q0?=PSyv@NLlTXSk-q|5nwa;3qRnj=`<^E^ zm45}QoVUBk|LAs!jN>mGg#+!Zqf_eJuF zwmBz1&wSxN*(ScTu48@W{dJSlPu||l->~`4y7$}PJvnD}v0tg|+s%9MK*A_2lc&wU z`B^2t6BLM+-uI7Je>423|8ufN;J*IrK$|!29W82cYN LtDnm{r-UW|YK3tH literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..af138722d899c7a4cde0889fc03acf857cfb066e GIT binary patch literal 2211 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7354989b651a28ae28f84eb16a31901da6a522e8 GIT binary patch literal 2245 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 Dsg}-P literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..eb227dc97ac92cef1e16da83453679795cda18fc GIT binary patch literal 2223 zcmeHI`Bzg%6n=;n3$=jQ3be9nur4V91zCgmC~{ark$S2kJ5q(1NFqysM-@3C)rcAi zXn<6tLXYfdB?tsWR*`3*6antu06hnOlmftMQvewC z2LS7I0N6;)sQA_vJy;d!>I?#l%#>Ckx>KRMxI3wgDrp0sZSJNv>_tsm=uY3$g9GRx z)==meOVnpx~LCG0fYPpG9~!Y6Xba`q{{2h&{8zm z62~aPye3a9}L4wdV{zM)did5t1n&Hg~aqKSmZB$b2H`T#{@n}Z&vD74rM#YZBCC6 zE3WQvO@=zSl&LP&z6S*U?OElusm|&0`>(hN!eh8L(JxL7E9MO&gpdWtKKOVmt~R`F z#Mq5upDyRkG73|KpVZ~^-Q)w;Ud}(Bfp*o(QeA|~@Go;cU%UvPl9-J+n~4Q&Ir>du z1c8(Mez9#(QNggDNWC<2>X^bUyPp+n#hco(1<|bD9$f|*i6$HF7C(;GGe$O9!E+P0 zC)NA%`Hk^N=9>&V+m;*&HCBl*mWxp}t4{3yM;bmltiaYHle6vras=I!XcIv8(18Y}r5JGRZx;n28(Dlp5!>sEBAu zyvPGAGwG;LRR;Nh01dW z_Bljui=ETmG2o47g#)@GX0y-*dmox~C-2u%AMv%yUzY;Q+W#r)6g zMoP3XqwmnRZ6L9|%e(%ON&>jMyRr7D-n_(5#kC&HmT(%=RAGYXiEoNoIJonNB^^b0oiT%kN^Mx literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..58bcd4dc477baa8d0262f4f498e805dd21d32c66 GIT binary patch literal 2237 zcmeHI_g9lw82%6`DB3WpSP=rUEF%ml3YdTrjA;^(Q47kFfDu~`E6S3DQA^?}MxbD9 z7&X%3X)7%vD8ob!2vSW_D6+y7OQ=F95D5tx{XX1Q88B6fheyXtz*kU=5*s&iJS&@B1$T7#su^zro;{n|6O6G%k`GDg;TQ6d6iFNnwS3FNOkFEoEBaw zQHHVMrwTOf6qm!Q;c?~l!)PW}qDe0aLJKyOGU#Y8e$$mdD5l*oi$H$TTvkuNXaQGB zo8?z8*U>27S?SN&DCWOx&f6+nVfq9KEfZ?*!;-~O6&F@|#~SSM(LE%cOE9+oK)k>v zA>f*xa$9wS=mG!n1=5^-qCvL}^RdE04s_M|OJ-{KeMF<|GhZx!m1AYvr7&VDlH(1g zTn;R-VxGHrMSU(@;-BhHfE~@>7X9 z@TnUZVuaj`V6CTglJ5QCMy0Q0^4H8mT3(D4c~T#*H<*c$l*RN2h~}W{ZMMso@$$mH zu18P^e6APX!FmEbkgj<+y2@O<7@i>YNMl#> z_6)Za&cPa5#!57bqufLi*nFXIyL030H^)MI;o^BmS*$--DNAK`EU6~W2s=NpisaPY zp`L%s*3WlbdJd6S}37c)8JyzSfXuM@(^@c+iZ{NqpqB zGGY(6Dib;Vw1?Vn;8KWH7a=NT3o)M*tNy+&o2-H>55por=>k8i$q|PDFBdBF>V*-D z_Ths2_o}FNV~d6s{Yi63)?d0b-nc8&#&v^VJ(L?j-7Jgg`vPijK_p_G+v>u!4otWG ztXDMz@Df1IJ)x%g`i>z2rY&=QX6Q?;!R1{OJ!g~fHso$8jJE?zJhWXQF#*5QrV1) zwvlLoK4OSq1p=~ic}VpO>z6b)Lm+MD_>3VEW5PKp3LI@VgmfcC++Rk^s8ni&QY$gx zR(bbagIcB4Dlp678?4wjNWsdU2&qKMDmcFuQNb2$BFq+i5x!9GKsRpA3~z zos0F2j?km12RDB+P=@e%?s&=m6K7e|vU{e--5_9oa^nRe8g8w&hIa0EG3mv0iX}<1 z19C9y`^HF1c}`hj%K7Oa{24UNoh>q})=8nG+NUab2PNrSb4?-GI}|I@kv@6haYg3B zsn_Xv<6_0t;o?2T5cIZ<QybTl^P0QB4<5k!`k`wMMCJYmhGF#{ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ff841caa0005347f357475e43e7e4ae617530877 GIT binary patch literal 2259 zcmeH|`Bzg%6vrP3qF4?{+!rFU*@8d-i2@-m!4QcAx2na%550B008I_+;RH>Km&q5)*>y~vfixK5^gpGxbNQ!0I}u(kaPwB;Bg>H0sueQ0>C>z z0C36&fR*8l2m4&$0Zp<89tWsWGWlG%rxQ)s>!$NgV->L6v^D(M4%lQC?RF$O&_6oJ zDIhWkZU8%5JIBqosLgf`2W@Sg>`+c9M@#s}*0%iH6x3&eP)cCPaoYb29xuWE1PeC( z;~_dEG$<YjI8z8&0VZyL(7vA85=-NXX7t($jcNQ`$Y3`}BEmtyKtjmS8C6gy?r7xTYj zq6$-L9CsICMCoEnRl;y+8Em~xsM&D2#nJKwnD@SEX>S>`@D_D3%ZR*b;b;4Du zte(j>>x++AnYf}kv%<75b1_%hHhk&nxa&asD@UHUmHc#k3<|7I0J(Rqh-6{#qC7O4 zRLS6yy4YUE5NbG7kXPIn77Q-inkGRIBj|{PB=MBHBHoX-$v{cnIY9cD-nSTeM(60H zraIdT_!L(|<*Esz#?1}0MO|TJ)@QEX6V>9iQTW>YKI+%}FbOZ?n0mew_mb^nB z>vY&%D~hi=Ec9(#LmpsJ@7q4W}H*-R`H zO=mHSM#4TgJ$f@1fA?Tl+m#yBT?o@=NcQ zj_1y)!JZ>nLRVweeIm4r>aYXB6u~RCn$tM+Z*u5^e5y}lN%x)lY*pLWv!$w-3r|YA z%kgac-lH!{x^H4kDJ`TxAt*FT4u)r^i0HN)2x^w(&MsJIwH=AcfbVFvto@5Sx~YHNQyG&mb*+^ z$0Og1p%{_9^sp&ye7oWy=P7}{cmganP@c$j;|O{RaEgZ&DdLF_t0#+aT$9KEz2PqK zOwZAD0=F>ks0VW_m9AqdD8zBuLlH;|n!fCK_!ZyR{WH$RZ|j<@*uI^!0bE9-f_D=9 zgeFX#${O@3HD8XEtLo3YkQ9uQBJVlEq*Rd+;D+#cbvZ^k6<2$PPk@7lFoRrcLm23} zBAp77j(4MaB{-zB2zV}2)u!*DrWVpKc{EFMUn=2-=M1Sm z44wwLWnB!cEBDTiRjgu(GEzpv3GUUorpsU*eQV~>BvFmMS-)UgmU@eq3q9d1w?1a`7A95$D;?M<5N^9%|C}{sFfDx<9+;u z!UDZ6-rq-c0mZN9=Q5gRK`~c58S(U)pW;y|F>-TtOqn?`^6%yX|2grQ536#}nd$&A zJS{-+#ra*q5xX>G(@s^ML&H??a62o(LxtC=w85gQ3*)$z4X0Hz{eIW-Va&)U_t%ue ni!h|06vCHhW!@y~qf{CVZsz3TT{pboXCENAdE$QC>6iQ`VB!{< literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a63c2b9fa08442b00819512b1422d65d52273751 GIT binary patch literal 2177 zcmeHI`BM{T7+xqHD|iqn#*2g$5>O!|P?!P<5e)`}aCj6LISm9BV%2Ztr#0Ko$z5=bK>ML;NWBzS<3RLF*y?lMm8LHif@!_IfU-+MjJvx2Y? z#%lA8<^TY!4h*300RR&S{zRXc!8^A2{%!DJ#|qfP1b}P;0OS_{0DKPQs{!CR2>_nQ z1AuoK0HC=Qx56p#f$6~@1|2XK7R#mZYDH!s(|^Ttll6d&LqGSvAH0Rn^pDI;Ovp^~ zW*tj{2f&Tw=IKHrySRP6k3{lzBYTrQx4{z7IEjbYy#F?6x1gPd4V?b; zka;LADI+r>jr(sK_jgVn`)qK9<4g*q`|bOB;MGu9`rvNM?S8t?jK;287BT_W3Ljo{ zdTQ^_=5yOu{gRyhef96hd`<91gBA^(a8>RsQsZ`ME$y@UDC#{v<{*77SzNgO!}dRF zA_XCf-+WptTn*E@i5e-ft#@L^^nP>h#Y=HGC|~bd|Js618yZ7LF7yh(o2{i03qk>S zRYkn^Qe|ZbV?;-eD#pDG0kW$Tgge1vY{1o26m^p`)>;5ouy&RhC}Qlc>Y-;(_0S*dA?8J~_A#qbucmC~{7*&-eSIyF^lo@_464w@~HGv2p%j5=5JRI^}; zbo(PYXV}`X{y_2Mbk|#GWUilMrPP!gwx3knJ9KYSuB|ujbc^j-cXExgFgi%z96FTX zv2Gy&qfe1DXaT~Nbede+bfI44uN~W*6ZkQ$*xm4jjD2{k+&M_?u2W`|bg&4@V*CA#0_(7S~ftBag`v9kMjU=bV!S%a;Ow)aW_S_AC{^ z{FBzsRBEP2LU9NqMNMc@rMh&2fYBq|lsaWpwIUg)(lGbhPnj8iyu6G?@Ekb=B=p&k*yTmH;kFOYdMTYwAD+wdjtDd3 z-AiI!(+gk1FMA1rxO(oCXRLIzM6K)I6OMy^XuG^Mc6b4I<@PXf+HgDX?N_z?V4VB% pPW%*)cuGe4|3Ux%|K}$+zOk|Jj(K@F2L4F{f&L-%>pSAV{R3Cw&)fh2 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..56726c62569824217fd4b737375260ccc2a7d1bc GIT binary patch literal 4021 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 JY7NK8e*vL;b`}5t literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..18e7778d71d167d3f79e04207f942bb04613024f GIT binary patch literal 3750 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c6dbf5bab07e5309df2cee77f3418ea31dfa0703 GIT binary patch literal 97019 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 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"