mirror of
https://github.com/ApfelTeeSaft/Perfectium.git
synced 2026-08-26 19:33:36 +00:00
*.inc files to define primitive UE structs and some Fortnite proprietary stuff
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
@echo off
|
||||
setlocal EnableDelayedExpansion
|
||||
|
||||
set CONFIG=%1
|
||||
if "%CONFIG%"=="" set CONFIG=Release
|
||||
|
||||
set OUTDIR=..\bin\%CONFIG%
|
||||
set OBJDIR=..\obj\%CONFIG%
|
||||
|
||||
if not exist "%OUTDIR%" mkdir "%OUTDIR%"
|
||||
if not exist "%OBJDIR%" mkdir "%OBJDIR%"
|
||||
|
||||
set ML_FLAGS=/nologo /W3 /WX /c /Cx /Zi /Fo"%OBJDIR%\\"
|
||||
if /I "%CONFIG%"=="Debug" (
|
||||
set ML_FLAGS=%ML_FLAGS% /DDEBUG
|
||||
) else (
|
||||
set ML_FLAGS=%ML_FLAGS% /DNDEBUG
|
||||
)
|
||||
|
||||
set LINK_FLAGS=/nologo /DLL /SUBSYSTEM:WINDOWS /MACHINE:X64 /DEBUG
|
||||
set LINK_FLAGS=%LINK_FLAGS% /DEF:raider.def
|
||||
set LINK_FLAGS=%LINK_FLAGS% /OUT:"%OUTDIR%\raider.dll"
|
||||
set LINK_FLAGS=%LINK_FLAGS% /PDB:"%OUTDIR%\raider.pdb"
|
||||
set LINK_FLAGS=%LINK_FLAGS% /IMPLIB:"%OUTDIR%\raider.lib"
|
||||
|
||||
set LIBS=kernel32.lib user32.lib detours.lib
|
||||
|
||||
set ASM_FILES=^
|
||||
raider.asm ^
|
||||
sdk_globals.asm ^
|
||||
patterns.asm ^
|
||||
native.asm ^
|
||||
util.asm ^
|
||||
logger.asm ^
|
||||
hooks.asm ^
|
||||
ufunctionhooks.asm ^
|
||||
gui.asm ^
|
||||
zerogui.asm ^
|
||||
zeroinput.asm ^
|
||||
logic\game.asm ^
|
||||
logic\inventory.asm ^
|
||||
logic\abilities.asm ^
|
||||
logic\spawners.asm ^
|
||||
logic\teams.asm ^
|
||||
gamemodes\gamemode_base.asm ^
|
||||
gamemodes\gamemode_solos.asm ^
|
||||
gamemodes\gamemode_duos.asm ^
|
||||
gamemodes\gamemode_50v50.asm ^
|
||||
gamemodes\gamemode_playground.asm ^
|
||||
gamemodes\gamemode_lategame.asm ^
|
||||
sdk\sdk_structs.asm ^
|
||||
sdk\sdk_classes.asm ^
|
||||
sdk\sdk_fort.asm
|
||||
|
||||
set OBJ_LIST=
|
||||
set ERRORS=0
|
||||
|
||||
for %%F in (%ASM_FILES%) do (
|
||||
set SRC=%%F
|
||||
set FNAME=%%~nF
|
||||
set FDIR=%%~dpF
|
||||
|
||||
set OBJNAME=!FDIR:logic\=logic_!
|
||||
set OBJNAME=!OBJNAME:gamemodes\=gm_!
|
||||
set OBJNAME=!OBJNAME:sdk\=sdk_!
|
||||
set OBJNAME=!OBJNAME:\=_!
|
||||
|
||||
set OBJ=%OBJDIR%\!OBJNAME!!FNAME!.obj
|
||||
|
||||
echo [ML64] %%F
|
||||
ml64.exe %ML_FLAGS% /Fo"!OBJ!" "%%F"
|
||||
if errorlevel 1 (
|
||||
echo ERROR: failed to assemble %%F
|
||||
set /A ERRORS=!ERRORS!+1
|
||||
) else (
|
||||
set OBJ_LIST=!OBJ_LIST! "!OBJ!"
|
||||
)
|
||||
)
|
||||
|
||||
if !ERRORS! GTR 0 (
|
||||
echo.
|
||||
echo BUILD FAILED: !ERRORS! file(s) failed to assemble.
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo.
|
||||
echo [LINK] raider.dll
|
||||
link.exe %LINK_FLAGS% %OBJ_LIST% %LIBS%
|
||||
if errorlevel 1 (
|
||||
echo ERROR: link failed.
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo.
|
||||
echo BUILD SUCCEEDED: %OUTDIR%\raider.dll
|
||||
exit /b 0
|
||||
@@ -0,0 +1,122 @@
|
||||
; EFortCustomPartType
|
||||
EFortCustomPartType_Head EQU 0
|
||||
EFortCustomPartType_Body EQU 1
|
||||
EFortCustomPartType_Hat EQU 2
|
||||
EFortCustomPartType_Backpack EQU 3
|
||||
EFortCustomPartType_Charm EQU 4
|
||||
EFortCustomPartType_Face EQU 5
|
||||
EFortCustomPartType_NumTypes EQU 6
|
||||
|
||||
; EFortTeam
|
||||
EFortTeam_HumanCampaign EQU 0
|
||||
EFortTeam_Monster EQU 1
|
||||
EFortTeam_HumanPvP_Team1 EQU 2
|
||||
EFortTeam_HumanPvP_Team2 EQU 3
|
||||
EFortTeam_Spectator EQU 103
|
||||
EFortTeam_MAX EQU 104
|
||||
|
||||
; EAthenaGamePhase
|
||||
EAthenaGamePhase_None EQU 0
|
||||
EAthenaGamePhase_Setup EQU 1
|
||||
EAthenaGamePhase_Warmup EQU 2
|
||||
EAthenaGamePhase_Aircraft EQU 3
|
||||
EAthenaGamePhase_SafeZones EQU 4
|
||||
EAthenaGamePhase_EndGame EQU 5
|
||||
EAthenaGamePhase_Count EQU 6
|
||||
|
||||
; EClassRepNodeMapping
|
||||
EClassRepNodeMapping_NotRouted EQU 0
|
||||
EClassRepNodeMapping_RelevantAllConnections EQU 1
|
||||
EClassRepNodeMapping_Spatialize_Static EQU 2
|
||||
EClassRepNodeMapping_Spatialize_Dynamic EQU 3
|
||||
EClassRepNodeMapping_Spatialize_Dormancy EQU 4
|
||||
|
||||
; ESpawnActorCollisionHandlingMethod
|
||||
ESpawnCollision_Undefined EQU 0
|
||||
ESpawnCollision_AlwaysSpawn EQU 1
|
||||
ESpawnCollision_AdjustIfPossibleButAlwaysSpawn EQU 2
|
||||
ESpawnCollision_AdjustIfPossibleButDontSpawnIfColliding EQU 3
|
||||
ESpawnCollision_DontSpawnIfColliding EQU 4
|
||||
|
||||
; EDynamicBuildingPlacementType
|
||||
EDynBuildPlace_CountsTowardsBounds EQU 0
|
||||
EDynBuildPlace_DestroyIfColliding EQU 1
|
||||
EDynBuildPlace_DestroyAnythingThatCollides EQU 2
|
||||
|
||||
; EFortBuildingType
|
||||
EFortBuildingType_Wall EQU 0
|
||||
EFortBuildingType_Floor EQU 1
|
||||
EFortBuildingType_Corner EQU 2
|
||||
EFortBuildingType_Deco EQU 3
|
||||
EFortBuildingType_Prop EQU 4
|
||||
EFortBuildingType_Stairs EQU 5
|
||||
EFortBuildingType_Roof EQU 6
|
||||
EFortBuildingType_Pillar EQU 7
|
||||
EFortBuildingType_SpawnedItem EQU 8
|
||||
EFortBuildingType_Container EQU 9
|
||||
EFortBuildingType_Trap EQU 10
|
||||
EFortBuildingType_None EQU 12
|
||||
|
||||
; ETravelType
|
||||
ETravelType_Absolute EQU 0
|
||||
ETravelType_Partial EQU 1
|
||||
ETravelType_Relative EQU 2
|
||||
|
||||
; EMontagePlayReturnType
|
||||
EMontagePlayReturnType_MontageLength EQU 0
|
||||
EMontagePlayReturnType_Duration EQU 1
|
||||
|
||||
; EMovementMode
|
||||
EMovementMode_None EQU 0
|
||||
EMovementMode_Walking EQU 1
|
||||
EMovementMode_NavWalking EQU 2
|
||||
EMovementMode_Falling EQU 3
|
||||
EMovementMode_Swimming EQU 4
|
||||
EMovementMode_Flying EQU 5
|
||||
EMovementMode_Custom EQU 6
|
||||
EMovementMode_MAX EQU 7
|
||||
|
||||
MOVE_CUSTOM_SKYDIVE EQU 4
|
||||
|
||||
; ENetRole
|
||||
ENetRole_None EQU 0
|
||||
ENetRole_SimulatedProxy EQU 1
|
||||
ENetRole_AutonomousProxy EQU 2
|
||||
ENetRole_Authority EQU 3
|
||||
|
||||
; ENetMode
|
||||
ENetMode_Standalone EQU 0
|
||||
ENetMode_DedicatedServer EQU 1
|
||||
ENetMode_ListenServer EQU 2
|
||||
ENetMode_Client EQU 3
|
||||
|
||||
; DLL reason codes
|
||||
DLL_PROCESS_DETACH EQU 0
|
||||
DLL_PROCESS_ATTACH EQU 1
|
||||
DLL_THREAD_ATTACH EQU 2
|
||||
DLL_THREAD_DETACH EQU 3
|
||||
|
||||
; Vtable slot indices
|
||||
VTABLE_SLOT_ProcessEvent EQU 40h ; = 64 decimal
|
||||
VTABLE_SLOT_ServerReplicateActors EQU 53h ; = 83 decimal — on UReplicationDriver
|
||||
|
||||
; Network message type codes (NMT_ values)
|
||||
NMT_Netspeed EQU 4
|
||||
NMT_Login EQU 5
|
||||
NMT_PCSwap EQU 15
|
||||
|
||||
; EFortQuickBars
|
||||
EFortQuickBars_Primary EQU 0
|
||||
EFortQuickBars_Secondary EQU 1
|
||||
EFortQuickBars_Count EQU 2
|
||||
|
||||
; Misc numeric constants from source
|
||||
MAXPLAYERS EQU 100
|
||||
LISTEN_BEACON_PORT EQU 7776
|
||||
LISTEN_GAME_PORT EQU 7777
|
||||
REPAIR_AMOUNT EQU 50
|
||||
BACKPACK_SIZE EQU 100
|
||||
DEFAULT_NETSPEED EQU 30000
|
||||
MAX_HEALTH EQU 100
|
||||
MAX_SHIELD EQU 100
|
||||
RESPAWN_EXTRA_Z EQU 3000
|
||||
@@ -0,0 +1,269 @@
|
||||
; sdk_globals.asm — Global UE4 runtime pointers and GObjects
|
||||
EXTERNDEF Imagebase :QWORD ; base address of FortniteClient-Win64-Shipping.exe
|
||||
EXTERNDEF ProcessEvent :QWORD ; void (*)(UObject*, UFunction*, void*)
|
||||
EXTERNDEF FMemory_Malloc :QWORD ; void* (*)(int32 size, int32 alignment)
|
||||
EXTERNDEF FMemory_Realloc :QWORD ; void* (*)(void* original, int64 count, uint32 alignment)
|
||||
EXTERNDEF FMemory_Free :QWORD ; void (*)(void* original)
|
||||
EXTERNDEF FNameToString :QWORD ; void (*)(FName* name, FString& out)
|
||||
EXTERNDEF GObjects :QWORD ; TUObjectArray* (the global UObject array)
|
||||
|
||||
; sdk_globals.asm — Global mutable state
|
||||
EXTERNDEF bTraveled :BYTE ; bool — has the server traveled yet?
|
||||
EXTERNDEF bPlayButton :BYTE ; bool — play button clicked?
|
||||
EXTERNDEF bListening :BYTE ; bool — server is listening?
|
||||
EXTERNDEF bStartedBus :BYTE ; bool — battle bus launched?
|
||||
EXTERNDEF bSpawnedFloorLoot :BYTE ; bool — floor loot spawned?
|
||||
EXTERNDEF HostBeacon :QWORD ; AFortOnlineBeaconHost*
|
||||
EXTERNDEF ExistingBuildings :QWORD ; pointer to TArray<ABuildingActor*> head (Data ptr)
|
||||
EXTERNDEF ExistingBuildingsNum :DWORD ; current Num of ExistingBuildings array
|
||||
EXTERNDEF ExistingBuildingsMax :DWORD ; current Max of ExistingBuildings array
|
||||
|
||||
; native.asm — Native:: function-pointer table
|
||||
; Native::Actor
|
||||
EXTERNDEF Native_Actor_GetNetMode :QWORD
|
||||
; Native::PlayerController
|
||||
EXTERNDEF Native_PlayerController_GetPlayerViewPoint :QWORD
|
||||
EXTERNDEF Native_PlayerController_GetPlayerName :QWORD
|
||||
; Native::LocalPlayer
|
||||
EXTERNDEF Native_LocalPlayer_SpawnPlayActor :QWORD
|
||||
; Native::GC
|
||||
EXTERNDEF Native_GC_CollectGarbage :QWORD
|
||||
; Native::AbilitySystemComponent
|
||||
EXTERNDEF Native_AbilitySystemComponent_GiveAbility :QWORD
|
||||
EXTERNDEF Native_AbilitySystemComponent_FindAbilitySpecFromHandle :QWORD
|
||||
EXTERNDEF Native_AbilitySystemComponent_InternalTryActivateAbility :QWORD
|
||||
; Native::NetDriver
|
||||
EXTERNDEF Native_NetDriver_TickFlush :QWORD
|
||||
; Native::ReplicationDriver
|
||||
EXTERNDEF Native_ReplicationDriver_ServerReplicateActors :QWORD
|
||||
; Native::NetConnection
|
||||
EXTERNDEF Native_NetConnection_ReceiveNetGUIDBunch :QWORD
|
||||
; Native::OnlineSession
|
||||
EXTERNDEF Native_OnlineSession_KickPlayer :QWORD
|
||||
; Native::OnlineBeacon
|
||||
EXTERNDEF Native_OnlineBeacon_NotifyAcceptingConnection :QWORD
|
||||
; Native::OnlineBeaconHost
|
||||
EXTERNDEF Native_OnlineBeaconHost_NotifyAcceptingConnection :QWORD
|
||||
EXTERNDEF Native_OnlineBeaconHost_InitHost :QWORD
|
||||
EXTERNDEF Native_OnlineBeaconHost_PauseBeaconRequests :QWORD
|
||||
; Native::World
|
||||
EXTERNDEF Native_World_NotifyControlMessage :QWORD
|
||||
EXTERNDEF Native_World_WelcomePlayer :QWORD
|
||||
EXTERNDEF Native_World_SpawnActor :QWORD
|
||||
EXTERNDEF Native_World_SpawnPlayActor :QWORD
|
||||
EXTERNDEF Native_World_NotifyAcceptingConnection :QWORD
|
||||
EXTERNDEF Native_World_RemoveNetworkActor :QWORD
|
||||
; Native::Engine
|
||||
EXTERNDEF Native_Engine_SeamlessTravelHandlerForWorld :QWORD
|
||||
; Native::GameViewportClient
|
||||
EXTERNDEF Native_GameViewportClient_PostRender :QWORD
|
||||
|
||||
; native.asm — InitializeAll entry point
|
||||
EXTERNDEF Native_InitializeAll :PROC
|
||||
|
||||
; patterns.asm — Pattern byte arrays and mask strings (.const)
|
||||
EXTERNDEF Pat_ProcessEvent :BYTE
|
||||
EXTERNDEF Pat_ProcessEvent_Mask :BYTE
|
||||
EXTERNDEF Pat_FMemory_Malloc :BYTE
|
||||
EXTERNDEF Pat_FMemory_Malloc_Mask :BYTE
|
||||
EXTERNDEF Pat_FMemory_Realloc :BYTE
|
||||
EXTERNDEF Pat_FMemory_Realloc_Mask:BYTE
|
||||
EXTERNDEF Pat_FMemory_Free :BYTE
|
||||
EXTERNDEF Pat_FMemory_Free_Mask :BYTE
|
||||
EXTERNDEF Pat_FNameToString :BYTE
|
||||
EXTERNDEF Pat_FNameToString_Mask :BYTE
|
||||
EXTERNDEF Pat_GObjects :BYTE
|
||||
EXTERNDEF Pat_GObjects_Mask :BYTE
|
||||
EXTERNDEF Pat_NetDebug :BYTE
|
||||
EXTERNDEF Pat_NetDebug_Mask :BYTE
|
||||
EXTERNDEF Pat_TickFlush :BYTE
|
||||
EXTERNDEF Pat_TickFlush_Mask :BYTE
|
||||
EXTERNDEF Pat_GetPlayerViewPoint :BYTE
|
||||
EXTERNDEF Pat_GetPlayerViewPoint_Mask :BYTE
|
||||
EXTERNDEF Pat_SpawnPlayActor :BYTE
|
||||
EXTERNDEF Pat_SpawnPlayActor_Mask :BYTE
|
||||
EXTERNDEF Pat_CollectGarbage :BYTE
|
||||
EXTERNDEF Pat_CollectGarbage_Mask :BYTE
|
||||
EXTERNDEF Pat_GiveAbility :BYTE
|
||||
EXTERNDEF Pat_GiveAbility_Mask :BYTE
|
||||
EXTERNDEF Pat_FindAbilitySpec :BYTE
|
||||
EXTERNDEF Pat_FindAbilitySpec_Mask:BYTE
|
||||
EXTERNDEF Pat_InternalTryActivate :BYTE
|
||||
EXTERNDEF Pat_InternalTryActivate_Mask :BYTE
|
||||
EXTERNDEF Pat_ServerReplicateActors :BYTE
|
||||
EXTERNDEF Pat_ServerReplicateActors_Mask :BYTE
|
||||
EXTERNDEF Pat_ReceiveNetGUIDBunch :BYTE
|
||||
EXTERNDEF Pat_ReceiveNetGUIDBunch_Mask :BYTE
|
||||
EXTERNDEF Pat_KickPlayer :BYTE
|
||||
EXTERNDEF Pat_KickPlayer_Mask :BYTE
|
||||
EXTERNDEF Pat_WelcomePlayer :BYTE
|
||||
EXTERNDEF Pat_WelcomePlayer_Mask :BYTE
|
||||
EXTERNDEF Pat_SpawnActor :BYTE
|
||||
EXTERNDEF Pat_SpawnActor_Mask :BYTE
|
||||
EXTERNDEF Pat_BeaconNotifyAccept :BYTE
|
||||
EXTERNDEF Pat_BeaconNotifyAccept_Mask :BYTE
|
||||
EXTERNDEF Pat_NotifyControlMessage :BYTE
|
||||
EXTERNDEF Pat_NotifyControlMessage_Mask :BYTE
|
||||
EXTERNDEF Pat_PostRender :BYTE
|
||||
EXTERNDEF Pat_PostRender_Mask :BYTE
|
||||
EXTERNDEF Pat_GetPlayerName :BYTE
|
||||
EXTERNDEF Pat_GetPlayerName_Mask :BYTE
|
||||
EXTERNDEF Pat_SeamlessTravel :BYTE
|
||||
EXTERNDEF Pat_SeamlessTravel_Mask :BYTE
|
||||
EXTERNDEF Pat_CreateTemporaryItem :BYTE
|
||||
EXTERNDEF Pat_CreateTemporaryItem_Mask :BYTE
|
||||
|
||||
; util.asm — Utility functions
|
||||
EXTERNDEF Utils_FindPattern :PROC ; (Imagebase:QWORD, pattern:PTR BYTE, mask:PTR BYTE, len:DWORD) -> QWORD
|
||||
EXTERNDEF Utils_Sin :PROC ; (angle:REAL4) -> REAL4 (result in XMM0)
|
||||
EXTERNDEF Utils_Cos :PROC ; (angle:REAL4) -> REAL4 (result in XMM0)
|
||||
EXTERNDEF Utils_RotToQuat :PROC ; (rot:PTR FRotator, out_quat:PTR FQuat)
|
||||
EXTERNDEF Utils_VecToRot :PROC ; (vec:PTR FVector, out_rot:PTR FRotator)
|
||||
EXTERNDEF Utils_RandomIntInRange :PROC ; (min:DWORD, max:DWORD) -> DWORD
|
||||
|
||||
; logger.asm — spdlog bridge
|
||||
EXTERNDEF Logger_Initialize :PROC ; ()
|
||||
EXTERNDEF Logger_LogInfo :PROC ; (fmt:PTR BYTE, ...)
|
||||
EXTERNDEF Logger_LogWarn :PROC ; (fmt:PTR BYTE, ...)
|
||||
EXTERNDEF Logger_LogError :PROC ; (fmt:PTR BYTE, ...)
|
||||
|
||||
; hooks.asm — All hook implementations
|
||||
EXTERNDEF Hooks_TickFlush :PROC
|
||||
EXTERNDEF Hooks_ProcessEventHook :PROC
|
||||
EXTERNDEF Hooks_LocalPlayerSpawnPlayActor :PROC
|
||||
EXTERNDEF Hooks_SpawnPlayActor :PROC
|
||||
EXTERNDEF Hooks_NetDebug :PROC
|
||||
EXTERNDEF Hooks_GetPlayerViewPoint :PROC
|
||||
EXTERNDEF Hooks_CollectGarbage :PROC
|
||||
EXTERNDEF Hooks_GetNetMode :PROC
|
||||
EXTERNDEF Hooks_SeamlessTravelHandlerForWorld :PROC
|
||||
EXTERNDEF Hooks_WelcomePlayer :PROC
|
||||
EXTERNDEF Hooks_KickPlayer :PROC
|
||||
EXTERNDEF Hooks_World_NotifyControlMessage :PROC
|
||||
EXTERNDEF Hooks_Beacon_NotifyAcceptingConnection :PROC
|
||||
EXTERNDEF Hooks_Beacon_NotifyControlMessage :PROC
|
||||
EXTERNDEF Hooks_PostRender :PROC
|
||||
EXTERNDEF Hooks_InitNetworkHooks :PROC
|
||||
|
||||
; ufunctionhooks.asm — UFunction dispatch hooks
|
||||
EXTERNDEF UFunctionHooks_Initialize :PROC
|
||||
EXTERNDEF UFunctionHooks_ToHook_Data :QWORD ; base of the hook-registration array
|
||||
EXTERNDEF UFunctionHooks_ToHook_Num :DWORD ; count of registered hooks
|
||||
|
||||
; sdk/sdk_classes.asm — UObject / GObjects accessors
|
||||
EXTERNDEF SDK_GetObjectByIndex :PROC ; (index:DWORD) -> QWORD (UObject*)
|
||||
EXTERNDEF SDK_FindObject :PROC ; (name:PTR BYTE) -> QWORD (UObject*)
|
||||
EXTERNDEF SDK_FindClass :PROC ; (name:PTR BYTE) -> QWORD (UClass*)
|
||||
EXTERNDEF SDK_GetWorld :PROC ; () -> QWORD (UWorld*)
|
||||
EXTERNDEF SDK_GetEngine :PROC ; () -> QWORD (UFortEngine*)
|
||||
|
||||
; sdk/sdk_classes.asm — TArray helpers (element-size-agnostic)
|
||||
EXTERNDEF TArray_Num :PROC ; (arr:PTR TArrayHeader) -> DWORD
|
||||
EXTERNDEF TArray_GetByIndex :PROC ; (arr:PTR TArrayHeader, idx:DWORD, elem_size:DWORD) -> QWORD
|
||||
EXTERNDEF TArray_Add :PROC ; (arr:PTR TArrayHeader, elem:PTR BYTE, elem_size:DWORD) -> DWORD
|
||||
EXTERNDEF TArray_RemoveAt :PROC ; (arr:PTR TArrayHeader, idx:DWORD, elem_size:DWORD)
|
||||
EXTERNDEF TArray_RemoveSingle :PROC ; (arr:PTR TArrayHeader, elem:PTR BYTE, elem_size:DWORD) -> BYTE
|
||||
EXTERNDEF TArray_FreeArray :PROC ; (arr:PTR TArrayHeader)
|
||||
|
||||
; sdk/sdk_classes.asm — FString helpers
|
||||
EXTERNDEF FString_FromWideChar :PROC ; (out:PTR TArrayHeader, wstr:PTR WORD)
|
||||
EXTERNDEF FString_Free :PROC ; (str:PTR TArrayHeader)
|
||||
|
||||
; sdk/sdk_fort.asm — Fortnite-specific helpers
|
||||
EXTERNDEF FortHelper_GetAbilitySystemComponent :PROC ; (pawn:QWORD) -> QWORD
|
||||
EXTERNDEF FortHelper_GetWorldInventory :PROC ; (pc:QWORD) -> QWORD
|
||||
EXTERNDEF FortHelper_GetQuickBars :PROC ; (pc:QWORD) -> QWORD
|
||||
|
||||
; logic/game.asm
|
||||
EXTERNDEF Game_Start :PROC
|
||||
EXTERNDEF Game_OnReadyToStartMatch :PROC
|
||||
EXTERNDEF Game_GetDeathCause :PROC ; (report:PTR FFortPlayerDeathReport) -> DWORD (EDeathCause)
|
||||
|
||||
; logic/inventory.asm
|
||||
EXTERNDEF Inventory_Update :PROC ; (pc:QWORD, dirty:DWORD, bRemovedItem:BYTE)
|
||||
EXTERNDEF Inventory_IsValidGuid :PROC ; (pc:QWORD, guid:PTR FGuid) -> BYTE
|
||||
EXTERNDEF Inventory_GetEntryInSlot :PROC ; (pc:QWORD, slot:DWORD, item:DWORD, bars:DWORD) -> PTR FFortItemEntry
|
||||
EXTERNDEF Inventory_AddItemToSlot :PROC ; (pc:QWORD, def:QWORD, slot:DWORD, bars:DWORD, count:DWORD) -> PTR FFortItemEntry
|
||||
EXTERNDEF Inventory_RemoveItemFromSlot :PROC ; (pc:QWORD, slot:DWORD, bars:DWORD, amount:DWORD)
|
||||
EXTERNDEF Inventory_IsGuidInInventory :PROC ; (pc:QWORD, guid:PTR FGuid) -> BYTE
|
||||
EXTERNDEF Inventory_EquipWeaponDefinition :PROC ; (pawn:QWORD, def:QWORD, guid:PTR FGuid)
|
||||
|
||||
; logic/abilities.asm
|
||||
EXTERNDEF Abilities_TryActivateAbility :PROC
|
||||
EXTERNDEF Abilities_GrantGameplayAbility :PROC ; (pawn:QWORD, abilityClass:QWORD)
|
||||
EXTERNDEF Abilities_ApplyAbilities :PROC ; (pawn:QWORD)
|
||||
EXTERNDEF Abilities_ConsumeAllReplicatedData :PROC
|
||||
|
||||
; logic/spawners.asm
|
||||
EXTERNDEF Spawners_SpawnActor :PROC ; (actorClass:QWORD, location:PTR FVector, owner:QWORD) -> QWORD
|
||||
EXTERNDEF Spawners_SummonPickup :PROC ; (pawn:QWORD, itemDef:QWORD, count:DWORD, loc:PTR FVector) -> QWORD
|
||||
EXTERNDEF Spawners_SummonPickupFromChest :PROC ; (itemDef:QWORD, count:DWORD, loc:PTR FVector)
|
||||
EXTERNDEF Spawners_SpawnPickupFromFloor :PROC ; (itemDef:QWORD, count:DWORD, loc:PTR FVector)
|
||||
EXTERNDEF Spawners_SpawnDeco :PROC ; (tool:QWORD, params:QWORD)
|
||||
EXTERNDEF Spawners_SpawnBuilding :PROC ; (buildClass:QWORD, transform:PTR FTransform, owner:QWORD) -> QWORD
|
||||
|
||||
; logic/teams.asm
|
||||
EXTERNDEF Team_New :PROC ; (teamPos:DWORD, maxSize:DWORD) -> QWORD (Team*)
|
||||
EXTERNDEF Team_AddPlayer :PROC ; (team:QWORD, pc:QWORD)
|
||||
EXTERNDEF Team_Kick :PROC ; (team:QWORD)
|
||||
EXTERNDEF Team_Num :PROC ; (team:QWORD) -> DWORD
|
||||
EXTERNDEF Team_InitializePlayer :PROC ; (team:QWORD, pc:QWORD)
|
||||
EXTERNDEF PlayerTeams_New :PROC ; (maxTeamSize:DWORD) -> QWORD
|
||||
EXTERNDEF PlayerTeams_GetNextSlot :PROC ; (pt:QWORD) -> DWORD
|
||||
EXTERNDEF PlayerTeams_FindAvailableSpot :PROC ; (pt:QWORD) -> QWORD (Team*)
|
||||
EXTERNDEF PlayerTeams_AddPlayerToTeam :PROC ; (pt:QWORD, pc:QWORD)
|
||||
EXTERNDEF PlayerTeams_AddPlayerToRandomTeam :PROC
|
||||
|
||||
; gamemodes/gamemode_base.asm
|
||||
EXTERNDEF GameModeBase_InitPawn :PROC
|
||||
EXTERNDEF GameModeBase_LoadPlayer :PROC
|
||||
EXTERNDEF GameModeBase_Respawn :PROC
|
||||
EXTERNDEF GameModeBase_OnPlayerDeath :PROC
|
||||
EXTERNDEF GameModeBase_StartMatch :PROC
|
||||
|
||||
; gamemodes/gamemode_solos.asm
|
||||
EXTERNDEF GameModeSolos_Initialize :PROC
|
||||
|
||||
; gamemodes/gamemode_duos.asm
|
||||
EXTERNDEF GameModeDuos_Initialize :PROC
|
||||
|
||||
; gamemodes/gamemode_50v50.asm
|
||||
EXTERNDEF GameMode50v50_Initialize :PROC
|
||||
|
||||
; gamemodes/gamemode_playground.asm
|
||||
EXTERNDEF GameModePlayground_Initialize :PROC
|
||||
|
||||
; gamemodes/gamemode_lategame.asm
|
||||
EXTERNDEF GameModeLateGame_Initialize :PROC
|
||||
|
||||
; gui.asm / zerogui.asm / zeroinput.asm
|
||||
EXTERNDEF GUI_Tick :PROC
|
||||
EXTERNDEF ZeroGUI_SetupCanvas :PROC
|
||||
EXTERNDEF ZeroGUI_Begin :PROC
|
||||
EXTERNDEF ZeroGUI_End :PROC
|
||||
EXTERNDEF ZeroInput_Update :PROC
|
||||
|
||||
; Windows API
|
||||
EXTRN AllocConsole :PROC
|
||||
EXTRN CreateThread :PROC
|
||||
EXTRN GetModuleHandleA :PROC
|
||||
EXTRN GetCurrentThread :PROC
|
||||
EXTRN IsBadReadPtr :PROC
|
||||
EXTRN GetAsyncKeyState :PROC
|
||||
EXTRN Sleep :PROC
|
||||
EXTRN ExitThread :PROC
|
||||
EXTRN RtlZeroMemory :PROC
|
||||
|
||||
; Microsoft Detours
|
||||
EXTRN DetourTransactionBegin :PROC
|
||||
EXTRN DetourTransactionCommit :PROC
|
||||
EXTRN DetourTransactionAbort :PROC
|
||||
EXTRN DetourUpdateThread :PROC
|
||||
EXTRN DetourAttach :PROC
|
||||
EXTRN DetourDetach :PROC
|
||||
|
||||
; C runtime helpers
|
||||
EXTRN memcpy :PROC
|
||||
EXTRN memmove :PROC
|
||||
EXTRN memset :PROC
|
||||
EXTRN memcmp :PROC
|
||||
@@ -0,0 +1,213 @@
|
||||
SHADOW_SPACE EQU 32 ; 4 * 8 bytes
|
||||
|
||||
STACK_ALIGN_SIZE EQU 16
|
||||
|
||||
PROC_ENTER MACRO local_bytes:=<0>
|
||||
push rbp
|
||||
mov rbp, rsp
|
||||
; Compute sub rsp amount: round_up(local_bytes + SHADOW_SPACE, 16)
|
||||
; If (local_bytes + SHADOW_SPACE) mod 16 == 0, already aligned
|
||||
; (push rbp above biased by 8; a further sub rsp of a multiple of 16
|
||||
; keeps alignment correct because entry RSP was already 8-mod-16).
|
||||
LOCAL _lsz
|
||||
_lsz = local_bytes + SHADOW_SPACE
|
||||
IF (_lsz MOD 16) NE 0
|
||||
_lsz = _lsz + (16 - (_lsz MOD 16))
|
||||
ENDIF
|
||||
sub rsp, _lsz
|
||||
ENDM
|
||||
|
||||
; Restores RSP from RBP, pops RBP, returns.
|
||||
; Caller must pop any callee-saved registers BEFORE invoking this.
|
||||
PROC_LEAVE MACRO
|
||||
mov rsp, rbp
|
||||
pop rbp
|
||||
ret
|
||||
ENDM
|
||||
|
||||
PROC_ENTER_REGS MACRO regs:VARARG
|
||||
FOR reg, <regs>
|
||||
push reg
|
||||
ENDM
|
||||
ENDM
|
||||
|
||||
PROC_LEAVE_REGS MACRO regs:VARARG
|
||||
FOR reg, <regs>
|
||||
pop reg
|
||||
ENDM
|
||||
ENDM
|
||||
|
||||
CALL_SETUP MACRO extra_stack_qwords:=<0>
|
||||
LOCAL _extra
|
||||
_extra = extra_stack_qwords * 8
|
||||
IF (_extra MOD 16) NE 0
|
||||
_extra = _extra + 8 ; pad to 16-byte alignment
|
||||
ENDIF
|
||||
sub rsp, SHADOW_SPACE + _extra
|
||||
ENDM
|
||||
|
||||
; Restore RSP after a call that used CALL_SETUP.
|
||||
CALL_TEARDOWN MACRO extra_stack_qwords:=<0>
|
||||
LOCAL _extra
|
||||
_extra = extra_stack_qwords * 8
|
||||
IF (_extra MOD 16) NE 0
|
||||
_extra = _extra + 8
|
||||
ENDIF
|
||||
add rsp, SHADOW_SPACE + _extra
|
||||
ENDM
|
||||
|
||||
NULL_CHECK MACRO reg, label
|
||||
test reg, reg
|
||||
jz label
|
||||
ENDM
|
||||
|
||||
CheckNullFatal_M MACRO reg, msg_reg, fatal_label
|
||||
test reg, reg
|
||||
jnz @F
|
||||
lea msg_reg, [fatal_label&_str] ; caller defines label&_str in .const
|
||||
jmp fatal_label
|
||||
@@:
|
||||
ENDM
|
||||
|
||||
CheckNullFatalStr_M MACRO reg, str_sym, fatal_label
|
||||
test reg, reg
|
||||
jnz @F
|
||||
lea rcx, str_sym
|
||||
jmp fatal_label
|
||||
@@:
|
||||
ENDM
|
||||
|
||||
DETOUR_START_M MACRO
|
||||
sub rsp, SHADOW_SPACE
|
||||
call DetourTransactionBegin
|
||||
; ignore return value (always S_OK in normal use)
|
||||
mov rcx, DETOUR_ALL_THREADS ; -1 = all threads
|
||||
call DetourUpdateThread
|
||||
add rsp, SHADOW_SPACE
|
||||
ENDM
|
||||
|
||||
; sentinel for "all threads" passed to DetourUpdateThread
|
||||
DETOUR_ALL_THREADS EQU -1
|
||||
|
||||
DETOUR_END_M MACRO
|
||||
sub rsp, SHADOW_SPACE
|
||||
call DetourTransactionCommit
|
||||
add rsp, SHADOW_SPACE
|
||||
ENDM
|
||||
|
||||
DetourAttachM MACRO ppOriginal, pHook
|
||||
sub rsp, SHADOW_SPACE
|
||||
lea rcx, ppOriginal
|
||||
lea rdx, pHook
|
||||
call DetourAttach
|
||||
add rsp, SHADOW_SPACE
|
||||
ENDM
|
||||
|
||||
DetourDetachM MACRO ppOriginal, pHook
|
||||
sub rsp, SHADOW_SPACE
|
||||
lea rcx, ppOriginal
|
||||
lea rdx, pHook
|
||||
call DetourDetach
|
||||
add rsp, SHADOW_SPACE
|
||||
ENDM
|
||||
|
||||
AddressToFunction_M MACRO result_reg, base_reg, offset
|
||||
mov result_reg, base_reg
|
||||
add result_reg, offset
|
||||
ENDM
|
||||
|
||||
VtableCall_M MACRO obj_reg, slot, scratch_reg
|
||||
mov scratch_reg, [obj_reg] ; vtable ptr
|
||||
call QWORD PTR [scratch_reg + (slot)*8]
|
||||
ENDM
|
||||
|
||||
LOG_INFO_M MACRO fmt_sym
|
||||
sub rsp, SHADOW_SPACE
|
||||
lea rcx, fmt_sym
|
||||
call Logger_LogInfo
|
||||
add rsp, SHADOW_SPACE
|
||||
ENDM
|
||||
|
||||
LOG_WARN_M MACRO fmt_sym
|
||||
sub rsp, SHADOW_SPACE
|
||||
lea rcx, fmt_sym
|
||||
call Logger_LogWarn
|
||||
add rsp, SHADOW_SPACE
|
||||
ENDM
|
||||
|
||||
LOG_ERROR_M MACRO fmt_sym
|
||||
sub rsp, SHADOW_SPACE
|
||||
lea rcx, fmt_sym
|
||||
call Logger_LogError
|
||||
add rsp, SHADOW_SPACE
|
||||
ENDM
|
||||
|
||||
FIND_PATTERN_M MACRO result_reg, pattern_sym, mask_sym, pattern_len
|
||||
sub rsp, SHADOW_SPACE
|
||||
mov rcx, [Imagebase]
|
||||
lea rdx, pattern_sym
|
||||
lea r8, mask_sym
|
||||
mov r9d, pattern_len
|
||||
call Utils_FindPattern
|
||||
mov result_reg, rax
|
||||
add rsp, SHADOW_SPACE
|
||||
ENDM
|
||||
|
||||
RESOLVE_RIP_M MACRO result_reg, addr_reg
|
||||
movsxd result_reg, DWORD PTR [addr_reg + 1] ; sign-extend rel32
|
||||
add result_reg, addr_reg
|
||||
add result_reg, 5 ; + size of call instruction
|
||||
ENDM
|
||||
|
||||
SAVE_NONVOL_4 MACRO r0, r1, r2, r3
|
||||
push r0
|
||||
push r1
|
||||
push r2
|
||||
push r3
|
||||
ENDM
|
||||
|
||||
RESTORE_NONVOL_4 MACRO r3, r2, r1, r0
|
||||
pop r3
|
||||
pop r2
|
||||
pop r1
|
||||
pop r0
|
||||
ENDM
|
||||
|
||||
STORE_ARG_RCX MACRO
|
||||
mov [rsp + 8], rcx
|
||||
ENDM
|
||||
STORE_ARG_RDX MACRO
|
||||
mov [rsp + 16], rdx
|
||||
ENDM
|
||||
STORE_ARG_R8 MACRO
|
||||
mov [rsp + 24], r8
|
||||
ENDM
|
||||
STORE_ARG_R9 MACRO
|
||||
mov [rsp + 32], r9
|
||||
ENDM
|
||||
|
||||
BOOL_TRUE MACRO
|
||||
mov eax, 1
|
||||
ENDM
|
||||
BOOL_FALSE MACRO
|
||||
xor eax, eax
|
||||
ENDM
|
||||
|
||||
ZERO_REG MACRO reg
|
||||
xor reg, reg
|
||||
ENDM
|
||||
|
||||
LOAD_QWORD_PTR MACRO dst, sym
|
||||
mov dst, QWORD PTR [sym]
|
||||
ENDM
|
||||
|
||||
STORE_QWORD_PTR MACRO sym, src
|
||||
mov QWORD PTR [sym], src
|
||||
ENDM
|
||||
|
||||
DEFINE_PEHOOK_M MACRO hook_name, ufunction_sym
|
||||
hook_name LABEL NEAR
|
||||
; RCX = UObject* (caller object)
|
||||
; RDX = UFunction*
|
||||
; R8 = void* (params struct)
|
||||
ENDM
|
||||
@@ -0,0 +1,4 @@
|
||||
INCLUDE include\enums.inc
|
||||
INCLUDE include\macros.inc
|
||||
INCLUDE include\structs.inc
|
||||
INCLUDE include\externs.inc
|
||||
@@ -0,0 +1,413 @@
|
||||
; Primitive Math Structs
|
||||
|
||||
FVector STRUCT
|
||||
X REAL4 ?
|
||||
Y REAL4 ?
|
||||
Z REAL4 ?
|
||||
FVector ENDS ; 0x0C bytes
|
||||
|
||||
FVector2D STRUCT
|
||||
X REAL4 ?
|
||||
Y REAL4 ?
|
||||
FVector2D ENDS ; 0x08 bytes
|
||||
|
||||
FRotator STRUCT
|
||||
Pitch REAL4 ?
|
||||
Yaw REAL4 ?
|
||||
Roll REAL4 ?
|
||||
FRotator ENDS ; 0x0C bytes
|
||||
|
||||
; FQuat is 16-byte aligned in UE4 (alignas(16))
|
||||
FQuat STRUCT 16
|
||||
X REAL4 ?
|
||||
Y REAL4 ?
|
||||
Z REAL4 ?
|
||||
W REAL4 ?
|
||||
FQuat ENDS ; 0x10 bytes
|
||||
|
||||
; FTransform: FQuat(0x10) + FVector(0x0C) + pad4 + FVector(0x0C) + pad4 = 0x30
|
||||
FTransform STRUCT 16
|
||||
Rotation FQuat <>
|
||||
Translation FVector <>
|
||||
_pad0 DWORD ?
|
||||
Scale3D FVector <>
|
||||
_pad1 DWORD ?
|
||||
FTransform ENDS ; 0x30 bytes
|
||||
|
||||
; Core UE4 Structs
|
||||
|
||||
FName STRUCT
|
||||
ComparisonIndex DWORD ?
|
||||
Number DWORD ?
|
||||
FName ENDS ; 0x08 bytes
|
||||
|
||||
FGuid STRUCT
|
||||
A DWORD ?
|
||||
B DWORD ?
|
||||
C DWORD ?
|
||||
D DWORD ?
|
||||
FGuid ENDS ; 0x10 bytes
|
||||
|
||||
; Generic TArray header
|
||||
TArrayHeader STRUCT
|
||||
Data QWORD ? ; T* pointer
|
||||
Num DWORD ? ; element count
|
||||
Max DWORD ? ; allocated capacity
|
||||
TArrayHeader ENDS ; 0x10 bytes
|
||||
|
||||
; FString = TArray<wchar_t>
|
||||
FString STRUCT
|
||||
Data QWORD ? ; wchar_t* pointer
|
||||
Num DWORD ? ; character count (includes null)
|
||||
Max DWORD ? ; allocated capacity
|
||||
FString ENDS ; 0x10 bytes
|
||||
|
||||
; FText: opaque 0x18 bytes (shared data pointer internally)
|
||||
FText STRUCT
|
||||
_opaque BYTE 24 DUP (?)
|
||||
FText ENDS ; 0x18 bytes
|
||||
|
||||
FWeakObjectPtr STRUCT
|
||||
ObjectIndex DWORD ?
|
||||
ObjectSerialNumber DWORD ?
|
||||
FWeakObjectPtr ENDS ; 0x08 bytes
|
||||
|
||||
; FObjectKey has identical layout to FWeakObjectPtr
|
||||
FObjectKey STRUCT
|
||||
ObjectIndex DWORD ?
|
||||
ObjectSerialNumber DWORD ?
|
||||
FObjectKey ENDS ; 0x08 bytes
|
||||
|
||||
; Gameplay Tags
|
||||
|
||||
FGameplayTag STRUCT
|
||||
TagName FName <>
|
||||
FGameplayTag ENDS ; 0x08 bytes
|
||||
|
||||
FGameplayTagContainer STRUCT
|
||||
GameplayTags TArrayHeader <> ; TArray<FGameplayTag> +0x00
|
||||
ParentTags TArrayHeader <> ; TArray<FGameplayTag> +0x10
|
||||
FGameplayTagContainer ENDS ; 0x20 bytes
|
||||
|
||||
; Network Structs
|
||||
|
||||
; FURL: total 0x70
|
||||
FURL STRUCT
|
||||
Protocol FString <> ; +0x00
|
||||
Host FString <> ; +0x10
|
||||
Port DWORD ? ; +0x20
|
||||
_pad0 DWORD ? ; +0x24
|
||||
Map FString <> ; +0x28
|
||||
RedirectUrl FString <> ; +0x38
|
||||
Op TArrayHeader <> ; +0x48 TArray<FString>
|
||||
Portal FString <> ; +0x58
|
||||
Valid DWORD ? ; +0x68
|
||||
_pad1 DWORD ? ; +0x6C
|
||||
FURL ENDS ; 0x70 bytes
|
||||
|
||||
; FUniqueNetIdRepl: total 0x28
|
||||
FUniqueNetIdRepl STRUCT
|
||||
_wrapper_opaque BYTE 24 DUP (?) ; +0x00 (base+unknown 0x18 bytes)
|
||||
ReplicationBytes TArrayHeader <> ; +0x18 TArray<BYTE>
|
||||
FUniqueNetIdRepl ENDS ; 0x28 bytes
|
||||
|
||||
; Gameplay Ability System Structs
|
||||
|
||||
FGameplayAbilitySpecHandle STRUCT
|
||||
Handle DWORD ?
|
||||
FGameplayAbilitySpecHandle ENDS ; 0x04 bytes
|
||||
|
||||
; FPredictionKey: total 0x18
|
||||
FPredictionKey STRUCT
|
||||
Current WORD ? ; +0x00
|
||||
Base WORD ? ; +0x02
|
||||
_pad0 DWORD ? ; +0x04
|
||||
PackageMap QWORD ? ; +0x08 UPackageMap*
|
||||
bIsStale BYTE ? ; +0x10
|
||||
bIsServerInitiated BYTE ? ; +0x11
|
||||
_pad1 BYTE 6 DUP (?) ; +0x12
|
||||
FPredictionKey ENDS ; 0x18 bytes
|
||||
|
||||
; FGameplayAbilityActivationInfo: total 0x20
|
||||
FGameplayAbilityActivationInfo STRUCT
|
||||
ActivationMode BYTE ? ; +0x00
|
||||
_bitfield BYTE ? ; +0x01
|
||||
_pad BYTE 6 DUP (?) ; +0x02
|
||||
PredKey FPredictionKey <> ; +0x08
|
||||
FGameplayAbilityActivationInfo ENDS ; 0x20 bytes
|
||||
|
||||
; FGameplayAbilitySpec: total 0xC8 (base FFastArraySerializerItem=0x0C)
|
||||
FGameplayAbilitySpec STRUCT
|
||||
_base BYTE 12 DUP (?) ; +0x00 FFastArraySerializerItem
|
||||
Handle FGameplayAbilitySpecHandle <> ; +0x0C
|
||||
Ability QWORD ? ; +0x10 UGameplayAbility*
|
||||
Level DWORD ? ; +0x18
|
||||
InputID DWORD ? ; +0x1C
|
||||
SourceObject QWORD ? ; +0x20 UObject*
|
||||
ActiveCount BYTE ? ; +0x28
|
||||
_bitfield BYTE ? ; +0x29 (InputPressed etc.)
|
||||
_pad0 BYTE 6 DUP (?) ; +0x2A
|
||||
ActivationInfo FGameplayAbilityActivationInfo <> ; +0x30
|
||||
NonReplInstances TArrayHeader <> ; +0x50
|
||||
ReplInstances TArrayHeader <> ; +0x60
|
||||
GEHandle QWORD ? ; +0x70 (FActiveGameplayEffectHandle partial)
|
||||
_tail BYTE 80 DUP (?) ; +0x78
|
||||
FGameplayAbilitySpec ENDS ; 0xC8 bytes
|
||||
|
||||
; FGameplayAbilityRepAnimMontage: total 0x30
|
||||
FGameplayAbilityRepAnimMontage STRUCT
|
||||
AnimMontage QWORD ? ; +0x00 UAnimMontage*
|
||||
PlayRate REAL4 ? ; +0x08
|
||||
Position REAL4 ? ; +0x0C
|
||||
BlendTime REAL4 ? ; +0x10
|
||||
NextSectionID BYTE ? ; +0x14
|
||||
_bitfield BYTE ? ; +0x15 IsStopped/ForcePlayBit/SkipPos
|
||||
_pad WORD ? ; +0x16
|
||||
PredictionKey FPredictionKey <> ; +0x18
|
||||
FGameplayAbilityRepAnimMontage ENDS ; 0x30 bytes
|
||||
|
||||
; FGameplayAbilityLocalAnimMontage: total 0x30
|
||||
FGameplayAbilityLocalAnimMontage STRUCT
|
||||
AnimMontage QWORD ? ; +0x00 UAnimMontage*
|
||||
PlayBit BYTE ? ; +0x08
|
||||
_pad BYTE 7 DUP (?) ; +0x09
|
||||
PredictionKey FPredictionKey <> ; +0x10
|
||||
AnimatingAbility QWORD ? ; +0x28 UGameplayAbility*
|
||||
FGameplayAbilityLocalAnimMontage ENDS ; 0x30 bytes
|
||||
|
||||
; FGameplayEventData: total 0xA8
|
||||
FGameplayEventData STRUCT
|
||||
EventTag FGameplayTag <> ; +0x00
|
||||
Instigator QWORD ? ; +0x08 AActor*
|
||||
Target QWORD ? ; +0x10 AActor*
|
||||
OptionalObject QWORD ? ; +0x18 UObject*
|
||||
OptionalObject2 QWORD ? ; +0x20 UObject*
|
||||
ContextHandle BYTE 24 DUP (?) ; +0x28 FGameplayEffectContextHandle (opaque)
|
||||
InstigatorTags FGameplayTagContainer <> ; +0x40
|
||||
TargetTags FGameplayTagContainer <> ; +0x60
|
||||
EventMagnitude REAL4 ? ; +0x80
|
||||
_pad DWORD ? ; +0x84
|
||||
TargetData BYTE 32 DUP (?) ; +0x88 FGameplayAbilityTargetDataHandle (opaque)
|
||||
FGameplayEventData ENDS ; 0xA8 bytes
|
||||
|
||||
; Fortnite-Specific Structs
|
||||
|
||||
; FDeathInfo: total 0x20
|
||||
FDeathInfo STRUCT
|
||||
FinisherOrDowner QWORD ? ; +0x00 AFortPlayerStateAthena*
|
||||
bDBNO BYTE ? ; +0x08
|
||||
DeathCause BYTE ? ; +0x09 EDeathCause
|
||||
_pad0 WORD ? ; +0x0A
|
||||
Distance REAL4 ? ; +0x0C
|
||||
DeathLocation FVector <> ; +0x10
|
||||
_pad1 DWORD ? ; +0x1C
|
||||
FDeathInfo ENDS ; 0x20 bytes
|
||||
|
||||
; FFortPlayerDeathReport: total 0x50
|
||||
FFortPlayerDeathReport STRUCT
|
||||
ServerTimeForRespawn REAL4 ? ; +0x00
|
||||
ServerTimeForResurrect REAL4 ? ; +0x04
|
||||
LethalDamage REAL4 ? ; +0x08
|
||||
_pad DWORD ? ; +0x0C
|
||||
KillerPlayerState QWORD ? ; +0x10 AFortPlayerState*
|
||||
KillerPawn QWORD ? ; +0x18 AFortPawn*
|
||||
DamageCauser QWORD ? ; +0x20 AActor*
|
||||
_bitfield BYTE ? ; +0x28 bDropped/bNotifyUI
|
||||
_pad2 BYTE 7 DUP (?) ; +0x29
|
||||
Tags FGameplayTagContainer <> ; +0x30
|
||||
FFortPlayerDeathReport ENDS ; 0x50 bytes
|
||||
|
||||
; FAircraftFlightInfo / FFlightInfo: total 0x28
|
||||
FAircraftFlightInfo STRUCT
|
||||
FlightStartLocation BYTE 12 DUP (?) ; +0x00 FVector_NetQuantize100 (same as FVector layout)
|
||||
FlightStartRotation FRotator <> ; +0x0C
|
||||
FlightSpeed REAL4 ? ; +0x18
|
||||
TimeTillFlightEnd REAL4 ? ; +0x1C
|
||||
TimeTillDropStart REAL4 ? ; +0x20
|
||||
TimeTillDropEnd REAL4 ? ; +0x24
|
||||
FAircraftFlightInfo ENDS ; 0x28 bytes
|
||||
|
||||
; FQuickBarSlot: total 0x18
|
||||
FQuickBarSlot STRUCT
|
||||
Items TArrayHeader <> ; +0x00 TArray<FGuid>
|
||||
bEnabled BYTE ? ; +0x10
|
||||
_pad BYTE 7 DUP (?) ; +0x11
|
||||
FQuickBarSlot ENDS ; 0x18 bytes
|
||||
|
||||
; FQuickBar: total 0x90
|
||||
FQuickBar STRUCT
|
||||
CurrentFocusedSlot DWORD ? ; +0x00
|
||||
PreviousFocusedSlot DWORD ? ; +0x04
|
||||
SecondaryFocusedSlot DWORD ? ; +0x08
|
||||
_pad DWORD ? ; +0x0C
|
||||
Slots TArrayHeader <> ; +0x10 TArray<FQuickBarSlot>
|
||||
DataDefinition BYTE 16 DUP (?) ; +0x20 FQuickBarData (opaque 0x10)
|
||||
_unknown BYTE 80 DUP (?) ; +0x30 EquippedItemDefinitions set
|
||||
SharedVisibleSlotIdx TArrayHeader <> ; +0x80 TArray<int>
|
||||
FQuickBar ENDS ; 0x90 bytes
|
||||
|
||||
; FFortItemEntry: total 0xC8 (base FFastArraySerializerItem=0x0C)
|
||||
FFortItemEntry STRUCT
|
||||
_base BYTE 12 DUP (?) ; +0x00 FFastArraySerializerItem
|
||||
Count DWORD ? ; +0x0C
|
||||
PreviousCount DWORD ? ; +0x10
|
||||
_pad0 DWORD ? ; +0x14
|
||||
ItemDefinition QWORD ? ; +0x18 UFortItemDefinition*
|
||||
Durability REAL4 ? ; +0x20
|
||||
Level DWORD ? ; +0x24
|
||||
LoadedAmmo DWORD ? ; +0x28
|
||||
_pad1 DWORD ? ; +0x2C
|
||||
AlterationDefinitions TArrayHeader <> ; +0x30
|
||||
ItemSource FString <> ; +0x40
|
||||
ItemGuid FGuid <> ; +0x50
|
||||
_bool0 BYTE ? ; +0x60 inventory_overflow_date
|
||||
bIsReplicatedCopy BYTE ? ; +0x61
|
||||
bIsDirty BYTE ? ; +0x62
|
||||
_pad2 BYTE 5 DUP (?) ; +0x63
|
||||
GiftingInfo BYTE 40 DUP (?) ; +0x68 FFortGiftingInfo (opaque 0x28)
|
||||
StateValues TArrayHeader <> ; +0x90
|
||||
ParentInventory FWeakObjectPtr <> ; +0xA0
|
||||
GASpecHandle DWORD ? ; +0xA8 FGameplayAbilitySpecHandle
|
||||
_pad3 DWORD ? ; +0xAC
|
||||
AlterationInstances TArrayHeader <> ; +0xB0
|
||||
GenericAttrValue REAL4 ? ; +0xC0
|
||||
_pad4 DWORD ? ; +0xC4
|
||||
FFortItemEntry ENDS ; 0xC8 bytes
|
||||
|
||||
; FFortItemList: total 0x170 (base FFastArraySerializer=0xB0)
|
||||
FFortItemList STRUCT
|
||||
_base BYTE 176 DUP (?) ; +0x00 FFastArraySerializer (0xB0)
|
||||
ReplicatedEntries TArrayHeader <> ; +0xB0 TArray<FFortItemEntry>
|
||||
_unknown0 BYTE 80 DUP (?) ; +0xC0
|
||||
ItemInstances TArrayHeader <> ; +0x110 TArray<UFortWorldItem*>
|
||||
_unknown1 BYTE 80 DUP (?) ; +0x120
|
||||
FFortItemList ENDS ; 0x170 bytes
|
||||
|
||||
; Field Offset Constants
|
||||
|
||||
; UObject field offsets (base 0x0028 already past vtable)
|
||||
UOBJECT_Flags EQU 00Ch ; int32 (from UObject base +0x0C, but struct starts at 0 here)
|
||||
UOBJECT_InternalIndex EQU 010h
|
||||
UOBJECT_Class EQU 018h
|
||||
UOBJECT_Name EQU 020h ; FName
|
||||
UOBJECT_Outer EQU 028h
|
||||
|
||||
; UFunction field offsets (UObject base = 0x28 → UField 0x30 → UStruct 0x80 → UFunction 0x70 more)
|
||||
UFUNC_FunctionFlags EQU 0D0h
|
||||
UFUNC_NumParms EQU 0D6h
|
||||
UFUNC_ParmsSize EQU 0D8h
|
||||
UFUNC_Func EQU 0B0h ; native func ptr at UFunction+0xB0 (0x28 obj + 0x88 struct header)
|
||||
|
||||
; TUObjectArray offsets
|
||||
TUOBJECTARRAY_Objects EQU 000h ; uint8* flat array
|
||||
TUOBJECTARRAY_MaxElem EQU 008h ; uint32
|
||||
TUOBJECTARRAY_NumElem EQU 00Ch ; uint32
|
||||
TUOBJECTARRAY_STRIDE EQU 024 ; 24 bytes per slot
|
||||
|
||||
; UNetDriver offsets
|
||||
UNETDRIVER_ServerConn EQU 078h
|
||||
UNETDRIVER_ClientConns EQU 080h ; TArray<UNetConnection*>
|
||||
UNETDRIVER_World EQU 0B8h
|
||||
UNETDRIVER_ReplDriver EQU 500h
|
||||
|
||||
; UNetConnection offsets
|
||||
UNETCONN_Driver EQU 058h
|
||||
UNETCONN_ViewTarget EQU 090h
|
||||
UNETCONN_OwningActor EQU 098h
|
||||
|
||||
; AActor offsets
|
||||
AACTOR_RemoteRole EQU 085h
|
||||
AACTOR_RepMovement EQU 088h
|
||||
AACTOR_Owner EQU 108h
|
||||
AACTOR_Role EQU 118h
|
||||
AACTOR_Instigator EQU 140h
|
||||
AACTOR_Children EQU 148h ; TArray<AActor*>
|
||||
AACTOR_RootComponent EQU 158h
|
||||
|
||||
; AFortPlayerControllerAthena offsets (in parent chain)
|
||||
AFPC_QuickBars EQU 1C38h
|
||||
AFPC_WorldInventory EQU 1ED8h
|
||||
AFPC_OutpostInventory EQU 1EE0h
|
||||
AFPCA_bClientNotifiedOfWin EQU 2BE4h
|
||||
AFPCA_WarmupPlayerStart EQU 3198h
|
||||
|
||||
; AFortPlayerState offsets
|
||||
AFPS_bHasFinishedLoading EQU 4E0h ; bit2 in uint8
|
||||
AFPS_bHasStartedPlaying EQU 4E0h ; bit3 in uint8
|
||||
AFPS_HeroType EQU 528h
|
||||
AFPS_CharacterGender EQU 7F0h
|
||||
AFPS_CharacterBodyType EQU 7F1h
|
||||
AFPS_CharacterParts EQU 7F8h ; UCustomCharacterPart*[6] = 0x30 bytes
|
||||
AFPS_PlayerTeam EQU 8F0h
|
||||
AFPS_AbilitySysComp EQU 0B88h
|
||||
|
||||
; AFortPlayerStateAthena offsets
|
||||
AFPSA_DeathInfo EQU 0F40h
|
||||
AFPSA_TeamIndex EQU 0F60h
|
||||
AFPSA_KillScore EQU 0F68h
|
||||
AFPSA_TeamKillScore EQU 0F6Ch
|
||||
AFPSA_SquadId EQU 10F0h
|
||||
AFPSA_bIsDisconnected EQU 1674h
|
||||
|
||||
; AFortGameModeAthena offsets
|
||||
AFGMA_bAlwaysDBNO EQU 8E0h
|
||||
AFGMA_bSafeZoneActive EQU 0B04h
|
||||
AFGMA_bSafeZonePaused EQU 0B05h
|
||||
AFGMA_SafeZonePhase EQU 0B20h
|
||||
AFGMA_SafeZoneIndicator EQU 0B28h
|
||||
AFGMA_SafeZoneLocations EQU 0B30h ; TArray<FVector>
|
||||
AFGMA_bAllowSpectate EQU 0B68h
|
||||
AFGMA_AlivePlayers EQU 950h ; TArray<AFortPlayerControllerAthena*>
|
||||
|
||||
; AFortGameStateAthena offsets
|
||||
AFGSA_WarmupCDStart EQU 14F0h
|
||||
AFGSA_WarmupCDEnd EQU 14F4h
|
||||
AFGSA_AircraftStartTime EQU 14F8h
|
||||
AFGSA_SafeZoneStartTime EQU 14FCh
|
||||
AFGSA_TotalPlayers EQU 1508h
|
||||
AFGSA_PlayersLeft EQU 150Ch
|
||||
AFGSA_WinningPlayerName EQU 1588h
|
||||
AFGSA_SafeZoneIndicator EQU 15F0h
|
||||
AFGSA_GamePhase EQU 1B98h
|
||||
AFGSA_CurrentPlaylist EQU 1BA0h
|
||||
AFGSA_bSkipAircraft EQU 1BA8h
|
||||
AFGSA_SafeZonePhase EQU 1BA9h
|
||||
AFGSA_Aircrafts EQU 1BB8h ; TArray<AFortAthenaAircraft*>
|
||||
|
||||
; AFortInventory offsets
|
||||
AFINV_InventoryType EQU 320h
|
||||
AFINV_Inventory EQU 328h ; FFortItemList
|
||||
AFINV_bRequiresLocalUpdate EQU 498h
|
||||
AFINV_PendingInstances EQU 4B0h
|
||||
|
||||
; AFortQuickBars offsets
|
||||
AFQB_PrimaryQuickBar EQU 318h ; FQuickBar (0x90)
|
||||
AFQB_SecondaryQuickBar EQU 438h ; FQuickBar (0x90)
|
||||
|
||||
; UFortWorldItem offsets
|
||||
UFWI_bIsTemporaryItem EQU 1D0h
|
||||
UFWI_OwnerInventory EQU 1D8h
|
||||
UFWI_ItemEntry EQU 1E0h ; FFortItemEntry (0xC8)
|
||||
|
||||
; AFortPickup offsets
|
||||
AFPU_bRandomRotation EQU 348h
|
||||
AFPU_PrimaryPickupItemEntry EQU 350h ; FFortItemEntry
|
||||
AFPU_bPickedUp EQU 4C0h
|
||||
AFPU_PawnWhoDroppedPickup EQU 4C8h
|
||||
|
||||
; AFortAthenaAircraft offsets
|
||||
AFAA_ExitLocation EQU 384h ; FVector
|
||||
AFAA_FlightInfo EQU 390h ; FAircraftFlightInfo (0x28)
|
||||
AFAA_FlightStartTime EQU 3B8h
|
||||
|
||||
; UAbilitySystemComponent offsets
|
||||
UASC_ActivatableAbilities EQU 470h ; FGameplayAbilitySpecContainer
|
||||
UASC_AllReplInstAbils EQU 588h ; TArray<UGameplayAbility*>
|
||||
UASC_RepAnimMontageInfo EQU 0AF0h ; FGameplayAbilityRepAnimMontage
|
||||
UASC_LocalAnimMontageInfo EQU 0B28h ; FGameplayAbilityLocalAnimMontage
|
||||
|
||||
; FGameplayAbilitySpecContainer: Items TArray at +0xB0 (base FFastArraySerializer=0xB0)
|
||||
GASC_Items EQU 0B0h
|
||||
|
||||
; ClassRepNodePolicies raw offset on UReplicationDriver
|
||||
REPDRIVER_ClassRepPolicies EQU 3B8h ; TMap<FObjectKey, EClassRepNodeMapping>
|
||||
@@ -0,0 +1,3 @@
|
||||
LIBRARY raider
|
||||
EXPORTS
|
||||
DllMain
|
||||
Reference in New Issue
Block a user