MAT Automaton is a framework that employs the Python 3 interpreter to allow MAT players to script the behaviour of their player. With Pyreal, MAT Automaton provides tight bindings with the Unreal Engine. As a result, it is possible to write code similar to Unreal Script with full access to Unreal Engine internals. MAT Automaton includes an in game command line console and a graphical menu. A sample aimbot/wallhack script is included, but users are encouraged to modify it or write their own.
Changes in this version
- Upgraded support for: CIBMALL, SABAY, SUBA, XOYO
- Start the launcher via the shortcut in the start menu.
- If you are running Windows XP or Vista/W7 with UAC disabled, start the game and the injection will be performed automatically. Otherwise, MAT Automaton will ask you for the location of of your MAT executable (MAT.exe) (e.g. \Program Files\MAT\System\MAT.exe)
- Press END to access the menu.
- Press INSERT to access the console.
- Press NUMPAD 0 to toggle auto aim.
- Press NUMPAD 1 to toggle indicator wallhack.
- Press NUMPAD 2 to toggle wireframe wallhack.
- Press NUMPAD 3 to toggle auto firing.
- The scripts are located in the directory "Scripts" accessible from the installation path and in the profile application data path "%AppData%\MAT Automaton\Scripts".
- For an introduction to Python refer to The Python Tutorial
- For a reference on the Unreal Engine refer to Unreal Wiki
I would love to see others contribute scripts, as the goal of this project is to see what types of creative things people come up with.
Here is a snippet of the included script, just to whet your appetite:
# Look for the best target
BestPawn = None
BestLocation = None
for Pawn in PC.DynamicActors ( PawnClass, PC ):
# Check if the pawn is valid
if ( Pawn == PC.Pawn or not self.Damagable ( Pawn ) ): continue
# If it is a team game make sure we are on a different team
if ( not self.FriendlyFire and self.SameTeam ( Pawn ) ): continue
# Setup bones list
BoneList = ( self.BonePrecedence == BONE_Root ) \
and [Pawn****otBone, Pawn.HeadBone] \
or [Pawn.HeadBone, Pawn****otBone]
# Find a visible bone
for bone in BoneList:
# Fetch the bone coords
BoneCoords = Pawn.GetBoneCoords ( bone )
# Calculate the location
BoneLocation = BoneCoords.Origin + BoneCoords.XAxis + BoneCoords.YAxis + BoneCoords.ZAxis
# Conditionally apply latency correction
if ( self.LatencyCorrection ):
BoneLocation += self.Correction ( PC, Pawn, deltatime )
# Adjust according to projectile physics
if ( PC.Pawn.Weapon and PC.Pawn.Weapon.FireMode [ FireMode ] and PC.Pawn.Weapon.FireMode [ FireMode ].ProjectileClass ):
Projectile = PC.Pawn.Weapon.FireMode [ FireMode ].ProjectileClass.Default
if ( Projectile and Projectile.Speed != 0 and Projectile.Physics != PHYS_Falling ):
BoneLocation += Pawn.Velocity * ( abs ( BoneLocation - CameraLocation ) / Projectile.Speed )
# Calculate angle
Angle = ( CameraRotation.Vector () | ( BoneLocation - CameraLocation ).Normal () ) + 1.0
Angle = ( 1.0 - ( Angle / 2.0 ) ) * 180.0
# Do the check
if ( Angle <= self.AimAngle and Pawn.FastTrace ( BoneLocation, CameraLocation ) ):
# Is this the best one?
if ( not BestPawn or self.Compare ( BestPawn, Pawn ) ):
BestPawn = Pawn
BestLocation = BoneLocation
if ( BestPawn ):
# We've found a valid target, so lets set the rotation and fire as required
PC.ClientSetRotation ( ( BestLocation - CameraLocation )****tation () )
if ( self.AutoFire and PC.Pawn.Weapon ): PC.Pawn.Weapon.ClientStartFire ( FireMode )