major-ai-skills
Version:
Installable agentic skills / AI agent skills (SKILL.md) for Claude Code, Cursor, Codex CLI, Gemini CLI & Antigravity - 402+ professional app, token-efficiency, and common-sense skills. SEO/GEO ready.
142 lines (112 loc) • 7.82 kB
Markdown
title: "CryEngine AAA Real-Time Engine AI Skill Guide (GPT & Codex)"
description: "Comprehensive operational skill specification for OpenAI GPT and Codex to automate, script, troubleshoot, and optimize CryEngine C++ plugins, Schematyc signals, Resource Compiler (rc.exe) asset pipelines, and CMake builds."
category: "AAA Game Engine & Real-Time Rendering"
tags: ["cryengine", "cpp-game-plugin", "schematyc-nodes", "gpt-codex", "resource-compiler", "cmake-cryengine"]
# CryEngine AAA Real-Time Engine AI Skill Guide (GPT & Codex)
## Overview & Engine Architecture
CryEngine provides an extensible C++ Plugin Architecture, the **Schematyc Visual Component System**, and an automated asset pipeline powered by the **CryEngine Resource Compiler (`rc.exe`)**. GPT/Codex acts as a Principal Game Engine Developer and Build Systems Engineer, delivering **custom C++ Game Plugins**, **Schematyc custom action nodes**, **automated asset compilation scripts (`rc.exe`)**, and **CMake project build configurations**.
### Developer Architecture & C++ Plugin Stack
```
┌─────────────────────────────────────────────────────────────┐
│ CryEngine Developer Platform │
│ │
│ C++ Game Framework & Plugins │
│ ├── `ICryPlugin` (Engine Plugin Lifecycle: Init, Update) │
│ ├── CryEntity Component Reflection (`IEntityComponent`) │
│ └── Schematyc Custom Elements (`EnvElement`, `EnvAction`) │
│ │
│ Asset & Build Toolchain │
│ ├── CryEngine Resource Compiler (`rc.exe` Mesh/Texture) │
│ ├── CMake Meta-Build Generator (`cry_cmake.exe`) │
│ └── Dynamic C++ Hot-Reload System │
└─────────────────────────────────────────────────────────────┘
```
## Operational Capabilities & Agent Directives
1. **C++ Plugin & Entity Component Development**: Author clean, type-safe C++ plugins implementing `ICryPlugin` and register custom components into the CryEngine reflection registry.
2. **Schematyc Custom Action Node Authoring**: Develop modular visual scripting nodes in C++ implementing `Schematyc::IAction` for designers to trigger gameplay events.
3. **Automated Resource Compiler (`rc.exe`) Scripting**: Author batch processing scripts to convert FBX meshes into `.cgf` geometry and TIF images into CryEngine `.dds` texture formats.
4. **CMake Project Generation**: Configure `CMakeLists.txt` for CryEngine games and tools, resolving SDK paths and compiler toolsets (MSVC v143 / Clang).
## Production C++ Automation: Custom Schematyc Gameplay Action Node
Save this file as `SchematycSpawnEntityAction.cpp` within your CryEngine C++ Game Plugin:
```cpp
// ==============================================================================
// CryEngine Schematyc Custom Action Node: Spawn Dynamic Entity
// Allows visual scripting graphs to instantiate physical entities at runtime.
// ==============================================================================
#include <CrySchematyc/Action.h>
#include <CrySchematyc/Env/IEnvRegistrar.h>
#include <CryEntitySystem/IEntitySystem.h>
struct SSpawnEntityParams
{
Schematyc::CSharedString entityClass = "DefaultEntity";
Vec3 spawnPosition = Vec3(0, 0, 0);
static void ReflectType(Schematyc::CTypeDesc<SSpawnEntityParams>& desc)
{
desc.SetGUID("B1A2C3D4-E5F6-7890-1234-567890ABCDEF"_cry_guid);
desc.SetLabel("Spawn Entity Parameters");
desc.AddMember(&SSpawnEntityParams::entityClass, 'cls', "EntityClass", "Entity Class", "Class name of entity to spawn", "DefaultEntity");
desc.AddMember(&SSpawnEntityParams::spawnPosition, 'pos', "SpawnPos", "Spawn Position", "World position coordinates", Vec3(0, 0, 0));
}
};
class CActionSpawnEntity final : public Schematyc::CAction
{
public:
CActionSpawnEntity(const SSpawnEntityParams& params) : m_params(params) {}
void Start() override
{
SEntitySpawnParams spawnParams;
spawnParams.pClass = gEnv->pEntitySystem->GetClassRegistry()->FindClass(m_params.entityClass.c_str());
spawnParams.vPosition = m_params.spawnPosition;
if (spawnParams.pClass)
{
IEntity* pEntity = gEnv->pEntitySystem->SpawnEntity(spawnParams);
if (pEntity)
{
CryLog("[Schematyc] Successfully spawned entity: %s (ID: %u)", pEntity->GetName(), pEntity->GetId());
}
}
}
static void ReflectType(Schematyc::CTypeDesc<CActionSpawnEntity>& desc)
{
desc.SetGUID("C2B3A4D5-E6F7-8901-2345-678901BCDEFG"_cry_guid);
desc.SetLabel("Spawn Entity Action");
desc.AddMember(&CActionSpawnEntity::m_params, 'prm', "Params", "Parameters", "Configuration parameters", SSpawnEntityParams());
}
private:
SSpawnEntityParams m_params;
};
// Register Action in Schematyc Environment
void RegisterSpawnAction(Schematyc::IEnvRegistrar& registrar)
{
Schematyc::CEnvRegistrationScope scope = registrar.Scope(g_gameGUID);
{
Schematyc::CEnvRegistrationScope actionScope = scope.Register(CRY_MAKE_ENV_ACTION(CActionSpawnEntity, "Gameplay::SpawnEntity"));
}
}
```
## Technical Troubleshooting Matrix
| Issue & Failure Signature | Root Cause Analysis | Diagnostic & Resolution Pathway |
| :--- | :--- | :--- |
| **`CMake Error: Could not find CryEngine SDK`** | `CRYENGINE_DIR` environment variable not set, or missing `cryproject` descriptor path. | In terminal, set `set CRYENGINE_DIR=C:\CryEngine\5.7` before running `cmake -B build`. |
| **Resource Compiler Fails: `rc.exe: Error converting texture`** | Source TIF texture format has unsupported bit depth (e.g. 16-bit float) or invalid image dimensions (non power-of-two). | 1. Ensure texture resolution is power-of-two (e.g. $1024\times 1024$, $2048\times 2048$).<br>2. Export textures as 8-bit uncompressed TIF.<br>3. Verify preset argument in `rc.exe` (e.g. `/userpreset=Albedo`). |
| **`LNK2019: Unresolved external symbol gEnv`** | Game Plugin DLL linking without linking `CrySystem.lib` or missing `CryModule.h` header inclusions. | Add `target_link_libraries(${PROJECT_NAME} PRIVATE CrySystem CryEntitySystem)` in `CMakeLists.txt`. |
| **Schematyc Compilation Error: Duplicate GUID** | Copy-pasting component or action code without generating a new unique GUID. | Generate a fresh random GUID using Visual Studio Tools $\rightarrow$ *Create GUID* or Python `uuid.uuid4()`. |
## Command Line Syntax & Batch Processing
```bash
# Compile Asset Textures via CryEngine Resource Compiler (rc.exe)
"C:\CryEngine\bin\win_x64\rc\rc.exe" "C:\Assets\Textures\*.tif" /userpreset=Albedo /threads=8
# Generate Visual Studio 2022 Solution via CryEngine CMake Engine
cmake -B build -G "Visual Studio 17 2022" -A x64
```
### Essential File Locations
- **Resource Compiler Executable**: `<CryEngineRoot>\bin\win_x64\rc\rc.exe`
- **Plugin Module Header**: `<ProjectRoot>\code\GamePlugin.h`
## Agent Operational Directive
> **MANDATORY**: Every Schematyc class and parameter struct must define a globally unique GUID (`_cry_guid`) to prevent registration collisions in the CryEngine reflection database. Link against `CrySystem` in CMake.