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.
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::OnStartis called once when the feature is enabled.Feature::OnEndis called once when the feature is disabled.Feature::Tickis called every engine tick and drives the feature's update cycle.Feature::CanExecuteis evaluated every tick and determines whether the feature should run.Feature::OnConditionChangeis called only when the result of CanExecute changes from the previous tick.Feature::OnExecuteis called every tick while CanExecute returns true.Feature::OnDiscardis called every tick while CanExecute returns false.
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.
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).