Code Monkey home page Code Monkey logo

libreaim's Introduction

LibreAim

Free and open source FPS aim trainer made with Godot 4.3.

  • ✏️ Customizable: Libre Aim is open source, and offers a lot of customization settings.
  • 🕊️ Lightweight: This is a training tool, it doesn't need fancy graphics, but it needs to run on low-end machines, give a high ammount of fps, and have minimal input lag.

Play custom scenarios

Track your progress

Change the world appareance

Create a custom crosshair

Libre Aim is currently in a very early stage of development, so don't expect too much out of it, it was originally forked from Open Aim Trainer.

Free, open source

Libre Aim is open source. Feel free to do whatever you want with it: Fork it, modify it, use the code for other projects...

You can also contribute to the project, we have a Discord community!

Screenshot

libreaim's People

Contributors

antimundo avatar erkkon avatar dfgworm avatar djkcool avatar leannelu avatar iltenahmet avatar

Stargazers

70 avatar Mark avatar  avatar Krittanut Siripornnoppakhun avatar K. S. Ernest (iFire) Lee avatar Joshua Bounkham avatar fxomt avatar Chris Sprance avatar plucafs avatar Myles Pritchett avatar  avatar ikonnow avatar Glen Fletcher avatar  avatar  avatar Markus Rauhalahti avatar Renn avatar Ronald T. Casili avatar Eli Wilson avatar  avatar Levi avatar chZzZzZz avatar gaoxiang avatar 深淵の鴿子 avatar Pama1234 avatar Midas avatar 玖亖伍 avatar  avatar  avatar iusn avatar  avatar  avatar  avatar knade avatar Aaron Benjamin avatar Michael Owens avatar  avatar Asmodeus avatar VirtualPierogi avatar Acemir Sousa Mendes avatar Masaharu Hosomichi avatar [object Object] avatar  avatar Steve Calabro avatar bpn avatar  avatar 【Leandro】 / AlgoRythm avatar  avatar Jay-Ar Abihay Tecson avatar zeroTAG avatar Shoghy Martinez avatar Manu avatar  avatar Michael Weibel avatar Eddocode avatar  avatar Benjamin Reynolds avatar Nick Shockey avatar DanielSobrinho avatar Luke Fiji avatar Samuel Umoh avatar Tom avatar Jimmy avatar  avatar Tengku Izdihar avatar João Lucas de Oliveira Lopes avatar  avatar 15 avatar  avatar  avatar Shuflduf avatar Joshua Dyer avatar Göktuğ Y. avatar Samuel Schwager avatar Zach avatar Viktor Antonov avatar swimmingsoft avatar パーフェクト avatar  avatar Tovade avatar CICT Apps avatar Łukasz avatar  avatar Luca Junge avatar  avatar Joshua Anderson avatar Eryk Miszczuk avatar Naved Ahmad avatar Luca Talevi avatar Hugo Locurcio avatar  avatar Amir .DEV avatar BenjaTK avatar Osaki Tsukiko avatar Markus Dethlefsen avatar Victor Meunier (MrEliptik) avatar

Watchers

 avatar

libreaim's Issues

Follow GDScript style guide

The code right now is pretty messy, it would be better if it used the official GDScript style guide.

Main things to change:

  1. Follow functions and variables naming conventions. Mainly this one, which the project is currently not following: Prepend a single underscore (_) to virtual methods functions the user must override, private functions, and private variables.
  2. Follow code order.
  3. Use static typing in the whole project.

Why change this?

Because it would make it easier for new contributors to modify and understand things if the project followed the official style guide.

Add more games to the sensitvities list

Players can customize the reference game for their sensivity on Settings -> Controls > Game

The list of games are defined on settings_controls.gd:

const games_sensitivities: Dictionary = {
	"Counter Strike 2": 0.022,
	"Apex Legends": 0.022,
	"Team Fortress 2": 0.022,
	"Valorant": 0.07,
}

Right now this list is very poor, containing very few games, and it should be expanded with more popular FPS games (Ovewatch 2, Halo infinite, R6 Siege, COD Warzone, The Finals, Destiny 2...)

I made a guide on how to handle these sensitivity conversions: https://github.com/Nokorpo/LibreAim/wiki/Sensitivity-conversions

So, the job is to add more games, with the correct sensitivity conversion. Please everyone feel free to contribute on this issue.

Use Compatibility rendering method instead of Forward+

Use Compatibility rendering method instead of Forward+ link to documentation.

As the name suggests, Compatibility is more compatible with old hardware, and it allows for Web exports and more use cases in general. It will also provide a nice performance boost on old hardware.

Some things might break when switching to Compatibility mode, like the bullet Decals. To close this pull requests, all things should work exactly the same including the decals. And the before/after performance should be tested.

Cool Project

Minor issue.

When I loaded up a game mode my screen panned to the right steadily. It's probably due to some flight sim hardware I have plugged in. For myself, it is no issue and I just commented out _handle_joypad_rotation(delta) in player_manager.gd.

I thought you might want to know though. Thanks for sharing the project.

Upgrade to Godot 4.3 (when released)

LibreAim currently uses Godot 4.2, but Godot 4.3 is about to be released, and it would be nice to upgrade when the stable version is out.

Why? Because it's fun to use the new shiny stuff!

Add option to create custom gamemodes

As I understand it right now we can create various game modes by specifying some settings about the mode and the target in the corresponding .cfg file. Why not give this ability to the user too?

We can add an option to create a custom game mode and ability to change those setting in a new window. If you think it's a good idea, I can start working on this.

Add indication of lost health

Add an indication of when a target looses health for example making the health bar flash red, and add some kind of indicator of whether the enemy has previously lost health like adding a bar behind the health bar showing the full health of the target, or show the in health in numbers as well, or show the health in sections etc.

Load custom resources into the game

Related to #19 and #20

Currently there are some settings that are loaded dinamically. But if you export the project there is no way for a user to add more of these files, and this should be an option.

Currently, the user://data/highscores.cfg and user://data/settings.cfg store the player save data. So let's keep going in that direction and save custom resources this way:

  • Target hit sound under: user://data/hit_sounds/examplesound.ogg
  • World appareance texture: user://data/world_appareance/exampletexture.png
  • Custom gamemodes: user://data/gamemodes/examplegamemode.cfg

Those files should be loaded when LibreAim opens, let's worry about how this folder structure is dinamically created, and how those files are loaded when a user opens LibreAim. Let's asume for the moment that players are expected to close LibreAim and open it again in order to load the custom files they added.

Add FPS limit setting

Add an option to limit the max FPS of the game so players can limit their GPU usage.

Add tutorial mode

Add a separate tutorial mode that explains and shows the user how to play each of the game modes to avoid confusion.

Customize target color

Targets are currently always yellow, but players should be able to customize their color.

target

Allow for custom scenes in gamemodes

⚠️ This task will be a huge milestone, and will also need an important rewrite of some core systems.

Summary

A very powerful feature of other aim trainers, is the ability for the users to completely customize each gamemode/scenario/task.

Right now, LibreAim allows players to modify a .cfg to customize some parameters of the game. But this has quite a lot of limitations.

Instead of just a .cfg file, users should be able to use a completely custom Godot scene, in which they can do whatever they want, model whatever 3D scenario they want, and even add custom scripts to modify things as they please.

Implementation

Currently, the game loads a scene called game_world.tscn which loads everything, including the scenario.

Instead of directly loading the 3D map, this scene should have a container that loads whatever 3D map and stuff that specific game mode has.

There are two things to take in mind:

  1. Users are currently able to customize the world texture. This functionality must keep working.
  2. The way targets are spawned and moved is currently hardcoded and will need to be completely rewritten.

Gamemode file structure

Currently the game loads .cfg file, inside the gamemodes folder we have this structure:

horizontal.cfg
moving.cfg
random.cfg
tracking.cfg

Users should be able to load custom resources for their custom scenes. So each gamemode should have it's own folder. Something like this (implementation might be different, this is just an example):

/sample_gamemode/
    scene.tscn
    icon.svg
    a_custom_resource.png

Fix resolution slider not working

Seems like after 0b7e8 the video resolution slider is useless.
The game always renders at a high resolution, no matter what this slider says.
image

This setting should either be fixed, or removed from the project if there isn't a good way to make this work.

Add hit sound

A sound should play when player hits an enemy, this sound should be customizable.

discord and todo

is there discord for libre aim?

and is the todo list for the aim trainer created?

Add target movement behaviors

Currently, the target.gd has a fixed way of moving the targets (they can just move in a straight line, at a constant speed).

This system should be more flexible, and targets should be able to choose from different movement behaviours.

Save all progress instead of just the high score

Right now, the game stores just the high scores of each gamemode in highscores.json. This is fine, but it would be nice to be able to track the player progress over time.

Inside the folder user://data/progress/ there should be a file for each gamemode played, that saves the progress in that specific gamemode. For example, a file called random.cfg stores all games played in the random gamemode.

The reason for using a .cfg file for this, is simply that the game currently uses .cfg files all over the place and for a simple thing. so it's just for the sake of consistency.

[2024-06-29]
18:52 = 83
18:58 = 45
19:00 = 67
19:05 = 98

[2024-06-30]
13:52 = 90
13:58 = 04
14:00 = 12
15:05 = 32

Expose sensitivity setting as slider

Problem: Right now the sense setting is hidden away in a small easy to miss text box that even excepts letters.

Proposal: Move the setting down and allow the user to use a slider in addition to a numeral text input.

Camera FOV customization

Players should be able to customize their camera FOV.
This should be under the Video settings.

Show FPS setting

Maby some players want to see how many FPS the game is rendering, this should be an option in the setting.

Players should be able to enable or disable this setting, maby some players want to train their aim without distractions.

Improve the game over screen

The game over screen is really boring, and doesn't present the data in a good way.
This should be improved, this doesn't need for an amazing revolutionary design, let's keep it simple and clear.

Also since the game now saves all the progress of the player, this could show how the player is progressing over time.
image

Fix signal alert

There is a very dumb and annoying alert in settings_crosshair.gd that is constantly appearing, it would be nice to fix it.

W 0:00:01:0974   The signal "refresh_crosshair" is declared but never explicitly used in the class.
  <GDScript Error>UNUSED_SIGNAL
  <GDScript Source>settings_crosshair.gd:4

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.