add initial project files and configurations, including EventBus, systems, and resources
4
.editorconfig
Normal file
@@ -0,0 +1,4 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
2
.gitattributes
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
# Normalize EOL for all files that Git considers text files.
|
||||
* text=auto eol=lf
|
||||
3
.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
# Godot 4+ specific ignores
|
||||
.godot/
|
||||
/android/
|
||||
30
Code/Core/EventBus.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
using System;
|
||||
using MaxEffort.Code.Data;
|
||||
|
||||
namespace MaxEffort.Code.Core;
|
||||
|
||||
public static class EventBus
|
||||
{
|
||||
public static event Action<float> OnLiftEffortApplied; // Player pressed space
|
||||
public static event Action OnFocusRelease; // Player stopped to look around
|
||||
|
||||
public static event Action<float> OnFocusChanged; // 0.0 to 1.0 (Tunnel Intensity)
|
||||
public static event Action<bool> OnLiftCompleted; // true = Success, false = Fail
|
||||
public static event Action<float> OnLiftProgress; // 0.0 to 1.0 (Lift Progress)
|
||||
public static event Action<float> OnLiftVisualHeight;
|
||||
public static event Action<float> OnCameraTrauma;
|
||||
|
||||
public static event Action<HazardType> OnHazardSpawned;
|
||||
public static event Action<HazardType> 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);
|
||||
}
|
||||
1
Code/Core/EventBus.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://c2v0ppfl3wy8a
|
||||
18
Code/Data/DayConfig.cs
Normal file
@@ -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<HazardDef> AvailableHazards;
|
||||
}
|
||||
1
Code/Data/DayConfig.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bkj0pcknqvjco
|
||||
17
Code/Data/HazardDef.cs
Normal file
@@ -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;
|
||||
}
|
||||
1
Code/Data/HazardDef.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://ck1vtdnok31dq
|
||||
10
Code/Data/HazardType.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
namespace MaxEffort.Code.Data;
|
||||
|
||||
public enum HazardType
|
||||
{
|
||||
None,
|
||||
GymBro,
|
||||
LoosePlate,
|
||||
PhoneDistraction,
|
||||
Manager
|
||||
}
|
||||
1
Code/Data/HazardType.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://b7dpyd82o2xlp
|
||||
23
Code/Data/SoundBank.cs
Normal file
@@ -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;
|
||||
}
|
||||
1
Code/Data/SoundBank.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://c7iph3wg80lv5
|
||||
12
Code/Data/TunnelConfig.cs
Normal file
@@ -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!
|
||||
}
|
||||
1
Code/Data/TunnelConfig.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://c4bnx8w383o4e
|
||||
66
Code/Systems/BaseLiftSystem.cs
Normal file
@@ -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);
|
||||
}
|
||||
1
Code/Systems/BaseLiftSystem.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://whef7x61oogl
|
||||
38
Code/Systems/BenchPressSystem.cs
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
1
Code/Systems/BenchPressSystem.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dg5h252kyse6b
|
||||
72
Code/Systems/CameraShakeSystem.cs
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
1
Code/Systems/CameraShakeSystem.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://cvrn2apa0djla
|
||||
64
Code/Systems/DeadliftSystem.cs
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
1
Code/Systems/DeadliftSystem.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dpes80ppxqppv
|
||||
96
Code/Systems/GameManager.cs
Normal file
@@ -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<DayConfig> _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<BaseLiftSystem>("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();
|
||||
}
|
||||
}
|
||||
1
Code/Systems/GameManager.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://cmiktfrffb3pc
|
||||
115
Code/Systems/HazardController.cs
Normal file
@@ -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));
|
||||
}
|
||||
}
|
||||
1
Code/Systems/HazardController.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://cfpdfb8fnym2y
|
||||
114
Code/Systems/HazardSystem.cs
Normal file
@@ -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<HazardDef> _possibleHazards;
|
||||
[Export] private Godot.Collections.Array<Node2D> _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<HazardDef> 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}!");
|
||||
}
|
||||
}
|
||||
1
Code/Systems/HazardSystem.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bwtppr4djfdwf
|
||||
23
Code/Systems/PlayerInputSystem.cs
Normal file
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
1
Code/Systems/PlayerInputSystem.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dorbq313ggc7e
|
||||
195
Code/Systems/SoundManager.cs
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
1
Code/Systems/SoundManager.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://khh8yy66oq36
|
||||
65
Code/Systems/TunnelSystem.cs
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
1
Code/Systems/TunnelSystem.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dnmsuw3knxhp0
|
||||
27
Code/UI/LiftProgressBar.cs
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
1
Code/UI/LiftProgressBar.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bsdan2qixddeg
|
||||
34
Code/UI/MainMenu.cs
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
1
Code/UI/MainMenu.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://b17j8o46gnc0e
|
||||
98
Code/Visuals/LiftSyncController.cs
Normal file
@@ -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<Vector2> _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;
|
||||
}
|
||||
}
|
||||
1
Code/Visuals/LiftSyncController.cs.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://ck4dtxhknj8di
|
||||
36
Objects/bench_press.tscn
Normal file
@@ -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"
|
||||
48
Objects/bench_press_stickman.tscn
Normal file
@@ -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
|
||||
16
Objects/deadlift.tscn
Normal file
@@ -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")
|
||||
15
Objects/hazard_animated.tscn
Normal file
@@ -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"]
|
||||
41
Objects/hazard_generic.tscn
Normal file
@@ -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
|
||||
12
Resources/Day_Day1.tres
Normal file
@@ -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"
|
||||
13
Resources/Day_Day2.tres
Normal file
@@ -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"
|
||||
11
Resources/Day_Day3.tres
Normal file
@@ -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"
|
||||
73
Resources/Hazard_GymBro.tres
Normal file
@@ -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"
|
||||
7
Resources/SoundBank.tres
Normal file
@@ -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"
|
||||
150
Scenes/main.tscn
Normal file
@@ -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
|
||||
67
Scenes/main_menu.tscn
Normal file
@@ -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"]
|
||||
20
Shaders/TunnelVision.gdshader
Normal file
@@ -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);
|
||||
}
|
||||
1
Shaders/TunnelVision.gdshader.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bnx36sl78tvt5
|
||||
BIN
Sprites/barbell.png
Normal file
|
After Width: | Height: | Size: 935 B |
40
Sprites/barbell.png.import
Normal file
@@ -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
|
||||
BIN
Sprites/bench.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
40
Sprites/bench.png.import
Normal file
@@ -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
|
||||
BIN
Sprites/bench_press0.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
40
Sprites/bench_press0.png.import
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dci4cuavfc4la"
|
||||
path="res://.godot/imported/bench_press0.png-ba9ac58cf50cb63dff601e4a9d25d02e.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Sprites/bench_press0.png"
|
||||
dest_files=["res://.godot/imported/bench_press0.png-ba9ac58cf50cb63dff601e4a9d25d02e.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
Sprites/bench_press1.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
40
Sprites/bench_press1.png.import
Normal file
@@ -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
|
||||
BIN
Sprites/bench_press2.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
40
Sprites/bench_press2.png.import
Normal file
@@ -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
|
||||
BIN
Sprites/bench_press3.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
40
Sprites/bench_press3.png.import
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://biu7q8mfw62be"
|
||||
path="res://.godot/imported/bench_press3.png-151702054f4fa5ae7f646f944338650b.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Sprites/bench_press3.png"
|
||||
dest_files=["res://.godot/imported/bench_press3.png-151702054f4fa5ae7f646f944338650b.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
Sprites/bench_press4.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
40
Sprites/bench_press4.png.import
Normal file
@@ -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
|
||||
BIN
Sprites/bench_press5.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
40
Sprites/bench_press5.png.import
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bkypgv8rfcd8k"
|
||||
path="res://.godot/imported/bench_press5.png-14c7049e4522e703552beeb21c54b5d3.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Sprites/bench_press5.png"
|
||||
dest_files=["res://.godot/imported/bench_press5.png-14c7049e4522e703552beeb21c54b5d3.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
Sprites/bench_press6.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
40
Sprites/bench_press6.png.import
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://warnmdoebwht"
|
||||
path="res://.godot/imported/bench_press6.png-fbb03a505d8811ac5e307f534e60a936.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Sprites/bench_press6.png"
|
||||
dest_files=["res://.godot/imported/bench_press6.png-fbb03a505d8811ac5e307f534e60a936.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
Sprites/bench_press7.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
40
Sprites/bench_press7.png.import
Normal file
@@ -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
|
||||
BIN
Sprites/chad_walk0.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
40
Sprites/chad_walk0.png.import
Normal file
@@ -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
|
||||
BIN
Sprites/chad_walk1.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
40
Sprites/chad_walk1.png.import
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dt5i4j2gvqso"
|
||||
path="res://.godot/imported/chad_walk1.png-33816be91d7ff97b4b5f437f937fae6e.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Sprites/chad_walk1.png"
|
||||
dest_files=["res://.godot/imported/chad_walk1.png-33816be91d7ff97b4b5f437f937fae6e.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
Sprites/chad_walk2.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
40
Sprites/chad_walk2.png.import
Normal file
@@ -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
|
||||
BIN
Sprites/chad_walk3.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
40
Sprites/chad_walk3.png.import
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dway2w8pbk5lp"
|
||||
path="res://.godot/imported/chad_walk3.png-83f190047fc9396d428eeeadc1ee67bb.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Sprites/chad_walk3.png"
|
||||
dest_files=["res://.godot/imported/chad_walk3.png-83f190047fc9396d428eeeadc1ee67bb.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
Sprites/chad_walk4.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
40
Sprites/chad_walk4.png.import
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bunfddn1pa8pj"
|
||||
path="res://.godot/imported/chad_walk4.png-e04181ba7df8daa1c7400ecfa9120b36.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Sprites/chad_walk4.png"
|
||||
dest_files=["res://.godot/imported/chad_walk4.png-e04181ba7df8daa1c7400ecfa9120b36.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
Sprites/chad_wave0.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
40
Sprites/chad_wave0.png.import
Normal file
@@ -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
|
||||
BIN
Sprites/chad_wave1.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
40
Sprites/chad_wave1.png.import
Normal file
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://tu8ph6cjdwhv"
|
||||
path="res://.godot/imported/chad_wave1.png-f0592da2a6c2b61ba47c87e39b1a9a35.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Sprites/chad_wave1.png"
|
||||
dest_files=["res://.godot/imported/chad_wave1.png-f0592da2a6c2b61ba47c87e39b1a9a35.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
BIN
Sprites/chad_wave2.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
40
Sprites/chad_wave2.png.import
Normal file
@@ -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
|
||||
BIN
Sprites/chad_wave3.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
40
Sprites/chad_wave3.png.import
Normal file
@@ -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
|
||||
BIN
Sprites/chad_wave4.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
40
Sprites/chad_wave4.png.import
Normal file
@@ -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
|
||||
BIN
Sprites/chad_wave5.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
40
Sprites/chad_wave5.png.import
Normal file
@@ -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
|
||||
BIN
Sprites/chad_wave6.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
40
Sprites/chad_wave6.png.import
Normal file
@@ -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
|
||||
BIN
Sprites/stick-bench-bend.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |