Skip to content

xeroconf/athenaware

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 

Repository files navigation

⛵ Athenaware

Features from the Athenaware (Prismarine) project. Not all features are included, as some are trivial (e.g., a crosshair) or are game-breaking/not suitable for public release.

Important

This repository contains feature implementations only and cannot be compiled in its current state. It is provided solely for reference and educational purposes.

No support, setup assistance, implementation guidance, or instructions for getting the project functional or operational will be provided. This includes help with integrating missing components, bypassing protections, adapting the code for specific targets, or otherwise bringing the repository into a usable state.

Note

Athenaware is built on an earlier version of Scaffold, a framework designed to support clean, modular, and extensible game cheat development. Information about how the framework is used within this repository can be found below.

About this Project

Features

All the feature implementations in this repository implement the feature abstract class and communicate with each other using a message dispatcher. Some features retrieve the feature instance from the owning feature manager directly, but this is bad practice on my part and was done to speed up release earlier on.

  • Feature::OnStart is called once when the feature is enabled.
  • Feature::OnEnd is called once when the feature is disabled.
  • Feature::Tick is called every engine tick and drives the feature's update cycle.
  • Feature::CanExecute is evaluated every tick and determines whether the feature should run.
  • Feature::OnConditionChange is called only when the result of CanExecute changes from the previous tick.
  • Feature::OnExecute is called every tick while CanExecute returns true.
  • Feature::OnDiscard is called every tick while CanExecute returns false.

Actor Service

The Actor Service was introduced as a solution to avoid iterating through the entire actor list every frame. Instead of scanning all actors, we hooked into key lifecycle events of AActor, such as BeginPlay and EndPlay.

By listening to these events, we could selectively track only the actors we care about. Relevant actors were added to an internal list when they spawned and removed when they were destroyed. Additionally, ActorAggregationUpdateEvent was broadcast to all listening features, allowing them to independently track the actors.

This approach drastically reduced the number of actors we needed to process each frame, since the list(s) contained only the specific actors we were interested in, rather than every actor in the world. This significantly increased performance and is a major factor as to why Athenaware has minimal impact on framerate compared to the standard method of iterating the ULevel's actor array.

Session Service

You may find references to the Session Service in some features (e.g., GetSession(), IsInSession()). The Session Service managed the state of the current server game world and provided helper functions for sending RPCs, managing action states, and more. It was also responsible for starting and stopping features that were specific to being in the world (e.g. ESP).

About

⛵ Feature implementations from the Athenaware SoT project.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Contributors

Languages