Step 1: the Salty project, two modules, tests and the gym

Salty.uproject (UE 5.8) from the Third Person template with class redirects, the SaltyCore and Salty modules,
the three build targets, USaltyAssetManager calling InitGlobalData, Config/Tags with the 23 root namespaces,
Scripts/run-tests.sh, build.sh and Authoring/create_gym.py, L_Gym, Git LFS attributes and the placeholder test.
Template variants kept as reference (D-41). The four Fab packs stay out of the repository for now (~10 GB).
The editor serves the engine MCP plugin on 127.0.0.1:8000 through DefaultEditorPerProjectUserSettings.ini.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Rainer Leit
2026-09-16 20:10:43 +03:00
co-authored by Claude Fable 5.1
parent 0e61a77346
commit 4f2c55cd2a
1434 changed files with 11358 additions and 27 deletions
@@ -0,0 +1,21 @@
// Copyright Epic Games, Inc. All Rights Reserved.
#include "AnimNotify_CheckChargedAttack.h"
#include "CombatAttacker.h"
#include "Components/SkeletalMeshComponent.h"
void UAnimNotify_CheckChargedAttack::Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference)
{
// cast the owner to the attacker interface
if (ICombatAttacker* AttackerInterface = Cast<ICombatAttacker>(MeshComp->GetOwner()))
{
// tell the actor to check for a charged attack loop
AttackerInterface->CheckChargedAttack();
}
}
FString UAnimNotify_CheckChargedAttack::GetNotifyName_Implementation() const
{
return FString("Check Charged Attack");
}
@@ -0,0 +1,24 @@
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Animation/AnimNotifies/AnimNotify.h"
#include "AnimNotify_CheckChargedAttack.generated.h"
/**
* AnimNotify to perform a charged attack hold check.
*/
UCLASS()
class UAnimNotify_CheckChargedAttack : public UAnimNotify
{
GENERATED_BODY()
public:
/** Perform the Anim Notify */
virtual void Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) override;
/** Get the notify name */
virtual FString GetNotifyName_Implementation() const override;
};
@@ -0,0 +1,21 @@
// Copyright Epic Games, Inc. All Rights Reserved.
#include "AnimNotify_CheckCombo.h"
#include "CombatAttacker.h"
#include "Components/SkeletalMeshComponent.h"
void UAnimNotify_CheckCombo::Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference)
{
// cast the owner to the attacker interface
if (ICombatAttacker* AttackerInterface = Cast<ICombatAttacker>(MeshComp->GetOwner()))
{
// tell the actor to check for combo string
AttackerInterface->CheckCombo();
}
}
FString UAnimNotify_CheckCombo::GetNotifyName_Implementation() const
{
return FString("Check Combo String");
}
@@ -0,0 +1,24 @@
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Animation/AnimNotifies/AnimNotify.h"
#include "AnimNotify_CheckCombo.generated.h"
/**
* AnimNotify to perform a combo string check.
*/
UCLASS()
class UAnimNotify_CheckCombo : public UAnimNotify
{
GENERATED_BODY()
public:
/** Perform the Anim Notify */
virtual void Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) override;
/** Get the notify name */
virtual FString GetNotifyName_Implementation() const override;
};
@@ -0,0 +1,20 @@
// Copyright Epic Games, Inc. All Rights Reserved.
#include "AnimNotify_DoAttackTrace.h"
#include "CombatAttacker.h"
#include "Components/SkeletalMeshComponent.h"
void UAnimNotify_DoAttackTrace::Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference)
{
// cast the owner to the attacker interface
if (ICombatAttacker* AttackerInterface = Cast<ICombatAttacker>(MeshComp->GetOwner()))
{
AttackerInterface->DoAttackTrace(AttackBoneName);
}
}
FString UAnimNotify_DoAttackTrace::GetNotifyName_Implementation() const
{
return FString("Do Attack Trace");
}
@@ -0,0 +1,30 @@
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Animation/AnimNotifies/AnimNotify.h"
#include "AnimNotify_DoAttackTrace.generated.h"
/**
* AnimNotify to tell the actor to perform an attack trace check to look for targets to damage.
*/
UCLASS()
class UAnimNotify_DoAttackTrace : public UAnimNotify
{
GENERATED_BODY()
protected:
/** Source bone for the attack trace */
UPROPERTY(EditAnywhere, Category="Attack")
FName AttackBoneName;
public:
/** Perform the Anim Notify */
virtual void Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, const FAnimNotifyEventReference& EventReference) override;
/** Get the notify name */
virtual FString GetNotifyName_Implementation() const override;
};