add initial project files and configurations, including EventBus, systems, and resources

This commit is contained in:
2026-01-24 02:47:23 +01:00
commit bba82f64fd
110 changed files with 2735 additions and 0 deletions

4
.editorconfig Normal file
View File

@@ -0,0 +1,4 @@
root = true
[*]
charset = utf-8

2
.gitattributes vendored Normal file
View File

@@ -0,0 +1,2 @@
# Normalize EOL for all files that Git considers text files.
* text=auto eol=lf

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
# Godot 4+ specific ignores
.godot/
/android/

30
Code/Core/EventBus.cs Normal file
View 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);
}

View File

@@ -0,0 +1 @@
uid://c2v0ppfl3wy8a

18
Code/Data/DayConfig.cs Normal file
View 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;
}

View File

@@ -0,0 +1 @@
uid://bkj0pcknqvjco

17
Code/Data/HazardDef.cs Normal file
View 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;
}

View File

@@ -0,0 +1 @@
uid://ck1vtdnok31dq

10
Code/Data/HazardType.cs Normal file
View File

@@ -0,0 +1,10 @@
namespace MaxEffort.Code.Data;
public enum HazardType
{
None,
GymBro,
LoosePlate,
PhoneDistraction,
Manager
}

View File

@@ -0,0 +1 @@
uid://b7dpyd82o2xlp

23
Code/Data/SoundBank.cs Normal file
View 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;
}

View File

@@ -0,0 +1 @@
uid://c7iph3wg80lv5

12
Code/Data/TunnelConfig.cs Normal file
View 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!
}

View File

@@ -0,0 +1 @@
uid://c4bnx8w383o4e

View 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);
}

View File

@@ -0,0 +1 @@
uid://whef7x61oogl

View 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);
}
}
}

View File

@@ -0,0 +1 @@
uid://dg5h252kyse6b

View 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);
}
}

View File

@@ -0,0 +1 @@
uid://cvrn2apa0djla

View 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);
}
}
}

View File

@@ -0,0 +1 @@
uid://dpes80ppxqppv

View 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();
}
}

View File

@@ -0,0 +1 @@
uid://cmiktfrffb3pc

View 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));
}
}

View File

@@ -0,0 +1 @@
uid://cfpdfb8fnym2y

View 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}!");
}
}

View File

@@ -0,0 +1 @@
uid://bwtppr4djfdwf

View 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();
}
}
}

View File

@@ -0,0 +1 @@
uid://dorbq313ggc7e

View 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);
}
}
}

View File

@@ -0,0 +1 @@
uid://khh8yy66oq36

View 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;
}
}

View File

@@ -0,0 +1 @@
uid://dnmsuw3knxhp0

View 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;
}
}

View File

@@ -0,0 +1 @@
uid://bsdan2qixddeg

34
Code/UI/MainMenu.cs Normal file
View 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
View File

@@ -0,0 +1 @@
uid://b17j8o46gnc0e

View 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;
}
}

View File

@@ -0,0 +1 @@
uid://ck4dtxhknj8di

36
Objects/bench_press.tscn Normal file
View 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"

View 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
View 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")

View 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"]

View 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
View 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
View 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
View 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"

View 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
View 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
View 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
View 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"]

View 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);
}

View File

@@ -0,0 +1 @@
uid://bnx36sl78tvt5

BIN
Sprites/barbell.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 935 B

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

40
Sprites/bench.png.import Normal file
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Some files were not shown because too many files have changed in this diff Show More