中文 EN

UE 5.8 · C++ + Blueprint hybrid · 20 C++ source files · node-level technical analysis · data as of 2026-10-04 · By JasonYang

CultivatingImmortality_RPGgame
UE 5.8 Project Technical Overview

A third-person cultivation RPG built jointly by Blueprints and C++

The player controls a cultivator who may choose the cultivation art to train and forge personal treasures of their own; the way is ruthless, so to survive this brutal cultivation world, one must first grow stronger. This report dissects the game project's production process and features based on the live project files and assets, via binary parsing and real-time Blueprint reads in the UE Editor.
Explanation: This game project was developed by Jason Yang, a dual-degree master's student in Computer Science and Artificial Intelligence at Arizona State University. It is Jason Yang's graduation project, with gratitude to his advisor for their guidance and thanks to everyone for their support!

Evidence tiering: real-time Blueprint reads in the live UE Editor (node-level, including pin connections) > offline uasset binary parsing · all sources in the K1–K12 anchor table at the end · all numbers transcribed faithfully from the originals (all project data and production assets are from JasonYang)

SCROLL

S0 · Executive summary

5093 files · 20 C++ source files: a cultivation RPG with C++ base classes underneath and Blueprints carrying the presentation layer

A third-person action RPG in the cultivation (xianxia) genre — ground combat is the role's mainstay, and Light Flight (right-click) / Aerial Dash (LeftShift) provide rapid repositioning; all movement is driven by the C++ base classes (TransformCharacter + ChangliCharacter) underneath, with Blueprints carrying the presentation layer.

The project's logical density is highly concentrated on the protagonist BP_Character: 9 graphs, 39 variables, of which the input graph InputEventGraph alone has 333 nodes, and the five-hit combo graph Attack has 290 nodes — the two graphs carry about 80% of the protagonist's logic. The presentation layer is equally substantial: the VFX library Content/Effect alone accounts for 684 files, over 1/7 of the 5093 total assets; of the 421 character files, 153 are character animations alone.

Core numbersValueNoteSource
Total asset files5093All game assets under Content/ (uasset/umap), parsed offline per fileK1
Protagonist BP_Character9 graphs / 39 variablesK2
InputEventGraph333 nodesK2
Attack combo graph290 nodesFive-hit combo, Combo1~Combo5 animation montagesK2
Effect VFX library684 filesEffect Blueprints, Niagara, textures, etc. (the sub-category count will be re-collected as new assets accumulate)K6
Characters asset421 filesCharacterSkeletalMesh 230 + enemies 12, 153 animationsK5

Reading order. This report is organized by game design logic: framework first, then the protagonist, then movement/animation, then combat presentation, then enemies and damage, and finally the full asset inventory. All node counts come from real-time reads of the running editor; all file counts come from offline binary parsing of the 5093 .uasset/.umap files; both datasets are as of 2026-10-04.

Counting note. The five asset subcategories total 2783 (Blueprint 52 + Characters 906 + Effect 684 + MagicalAnimSet 152 + RealBiomes 989), leaving a 2310-file gap against the 5093 total; this report retains the original figures faithfully and does not normalize them. NPCBlueprint (the second character) has not been read in depth, and Config uses the legacy input system rather than Enhanced Input.

S0.5 · Knowledge map

Collapsible mind map of the ten-chapter content

From the project framework to the analysis method, the skeleton of this whole document can be expanded at once and drilled through layer by layer.

S1 · Project framework

C++ base classes underneath, hair that moves, per-node readability: three decisions that define the project's character

Engine 5.8, 20 C++ source-file base classes (TransformCharacter 3161 lines, ChangliCharacter 7887 lines), legacy input system (ActionMappings, not Enhanced Input) — C++ covers the underlying logic (Light Flight / combat five-hitter / charge / shield / day-night cycle / Six Swords), Blueprints carry the presentation layer (montage / VFX / dynamic materials).

BP

C++ + Blueprint hybrid

The entire project's base is driven by 20 C++ source files (TransformCharacter 3161 lines, ChangliCharacter 7887 lines); presentation-layer logic lives mainly in Blueprint graphs.

GameMode, protagonist, enemies, bullets, effects, and UI are all Blueprint assets. This makes the readable unit of logic the "graph — node — pin", and the node-level data in this report (333 / 290 / 140...) is the result of counting graph by graph.

Hover for details

KP

KAWAIIPHYSICS · Hair and clothing physics

A key plugin for character presentation: physical swaying of hair, clothing, and ribbons.

The tail of the CharacterAnimationBlueprint AnimGraph chains 6 levels of KawaiiPhysics nodes sharing DA_Kawaii_Physics LimitAngleCurveData — sway parameters for multiple bone chains managed centrally.

Hover for details

NODE

GRAPH-LEVEL READING · Per-graph, per-node

The whole Blueprint tree is fully expanded: 9 graphs, 39 variables, pin-level connections.

BP_Character InputEventGraph has 333 nodes, the Attack combo graph has 290 nodes, the enemy damage graph has 140 nodes — all nodes and pin connections were read, counted, and charted one by one, with no sampling estimation.

Hover for details

Boot configuration and input mapping

The default map is MMOGameMap_01 (an empty test scene with a directional light + height fog), game mode GameMode (GameModeBase). Input uses the legacy system rather than Enhanced Input:

InputKeyType
Move Forward / BackwardW / SAxis
Move Right / LeftA / DAxis
Move Up / DownQ / EAxis (flight up/down)
Turn / Look Up MouseMouseX / MouseYAxis
SprintLeftShiftAction
DodgeSpaceBarAction
AimRight mouse buttonAction

Enabled plugins: KawaiiPhysics, ModelingToolsEditorMode, GameplayBehaviors, Editor Data Interface plugin (experimental); EditorUIScale is not enabled. The project root also holds a Houdini project HillStone.hip (procedural model source for mountains/rocks).

S2 · Protagonist system

One graph for input, one graph for the combo: the protagonist's two logic peaks

Among the nine graphs of BP_Character, InputEventGraph and Attack total 623 nodes — the remaining seven graphs are all auxiliary.

Parent class chain: TransformCharacter → ChangliCharacter (pure C++ base classes). 9 Blueprint graphs + underlying C++ functions, backed by 20 source files.

— Project Technical Overview · Chapter 2, 2026-10-04

ContextBP_Character covers input, combos, aiming, lightning, camera, and post-processing. Why it mattersLogic concentrated in a single Blueprint means any change must be located within these 9 graphs — the node-density chart is that map.

Five-hit combo: montage selection + state management via notification frames

ComboAttack breaks Combo1~Combo5 into five animation montage segments from the ST_AnimMontage struct and plays them per ComboNumber; an input inside the ReadyToCombo window extends the combo, otherwise ResetAttack zeroes it. Attack state is driven by animation notifications: ComboAttackNotify starts the attack (IsAttacking=true, disables face tracking, speed limit 300), ResetAttackNotify exits and restores HoverFlySpeed. Combos simultaneously generate the BezierBulletEffect Bézier-tracking bullet and the Attack03/05 effects.

Aiming and lightning

Right-click CE_AimStart enters aiming (camera closes in, UW_Aim crosshair shows), CE_AimTrace periodically scans enemies into AimTargetArray and assigns lock targets. Lightning is a charged chain attack: after ChargeCompleted it links across multiple enemies in EnemyArray (branch _Branch / bounce _Bounce), UW_LightningTrace draws the connection line UI, and the post-processing material switches during the skill. The 39 variables are organized in six groups: movement / combo / camera / aim / lightning / post-processing.

S3 · Motion system BPC_MotionComponent

Two flight parameter sets, one lean amount: the motion component does only three things

An ActorComponent attached to BP_Character: 27 variables, 10 functions, managing dual-speed-state flight, Lean tilt, and the camera spring arm.

StateParameter group
HoverHoverFlySpeed / HoverAcceleration / HoverRotationRate
SprintSprintFlySpeed / SprintAcceleration / SprintRotationRate

The dual speed states switch via SetSprintEvent / SetAimingEvent; while IsAiming, aiming flight parameters apply. Tick records the velocity direction of the previous and current frames, and YawVelocityDifference / PitchVelocityDifference compute the Lean tilt in real time, driving body tilt via the animation Blueprint. The camera spring-arm composition graph (61 nodes) smooths interpolation per TargetSocketOffset / TargetLength / InterpSpeed: closing in when aiming, pulling back when sprinting. HitEvent handles interrupting the current motion state on hit.

S4 · Animation system CharacterAnimationBlueprint

Four states, six transitions: a state machine with no "ground" state

The data flow is unidirectional and clear — BP_Character / BPC compute the state variables, and CharacterAnimationBlueprint reads them every frame to drive the skeleton pose.

AnimGraph 26 nodes + EventGraph 127 nodes. Main pose pipeline: the Default state machine is cached to LocalMotion → gaze blending in HeadLookAtNode (blends in when IsLookAt and InRange) → Montage Slot (combo injection point) → aim pose blending in AimPoseNode (blends in when IsAim) → 6-level KawaiiPhysics chain → output pose. The EventGraph is driven by BlueprintUpdateAnimation, where SetNextSection appears 6 times — the linking of combo montage segments and combo smoothness all rely on it.

TransitionCondition
Idle/Hover → StartIsSprint = true
Start → MoveLoopStart animation remaining-time ratio < threshold
MoveLoop → MoveEndNOT IsSprint
MoveEnd → Idle/HoverMoveEnd remaining-time ratio < threshold
Interrupt-fallback branches x2IsSprint / NOT IsSprint

Character asset support (CharacterSkeletalMesh, 230 files): skeletal mesh + physics assets, IKRig + IKRetargeter (MagicalAnimSet animations retargeted onto the character's skeleton), 153 animations (Motion / Self / Retargeter ≈100 / UseMontage 13), 5 blending spaces, 15 materials, 48 textures.

S5 · Effects and projectiles

The bullets come in only two varieties: straight, and Bézier trackers that bend three times

Of the 684-file VFX library, the logic that actually "moves" is concentrated in four child classes of the EF_BaseEffect inheritance tree.

BezierBulletEffect is the technical peak of the projectile system: 105-node EventGraph + 3 functions. TraceTarget (27 nodes) searches for enemies into EnemyArray; CE_BezierMove is driven by TimelineHasEnemy and computes Bézier-curve tracking on the target via three control points 3SpotPosition; with no enemy, it degrades to a straight line / scatter. On hit, ApplyDamage (carrying DamageType) → spawn hit effect → stop the dual time axis → destroy.

SubdirectoryCountRole
Textures/243Noise, masks, trails, SubUV sequence frames, glows
MaterialInstance/88Ribbon trails, Simple, Smoke, Refraction, PostProcess
Common/56Generic Niagara emitters / modules / materials
Niagara/34NS_* particle systems: Attack 27 / Enemy / Motion
Meshs/30Ring, Helix, cones, splines, rocks
MaterialFunction/11Gaussian blur, normal derivation, FlipBook, dissipation, POM
Curve/ · VectorFields/5 / 4Curve assets · turbulence / vortex vector fields

S6 · Enemy system EnemyBlueprint

Patrol, take damage, explode, respawn: the drone's complete closed loop

EventGraph's 76 nodes manage patrol, the Damage graph's 140 nodes manage being hit and death — the death feedback is twice as thick as the patrol logic.

The patrol AI uses timers to refresh random patrol target points, and TraceLand probes downward for the ground to prevent crashes. Taking hits goes through AnyDamage: record hit direction and position → reduce HP → dynamic material hit-coloring driven by the ColorDamage curve. Death CE_Death is a combination: explosion effect + EnemyBlueprintDestroy debris (GeometryCollection chaotic breakage) + FieldSystem force-field shockwave + EnemyExplosionEffect camera shake, and finally CE_Reborn respawns at the spawn point, completing the loop.

S7 · Damage, camera, UI

One interface unifies hits; four kinds of notifies dispatch the presentation

Attackers carry Sword / Lightning damage types per skill; BPI_Damage delivers them uniformly, and the enemy side responds per type with different hit reactions.

GroupCountMembers
Damage/8BPI_Damage interface, DamageType x4 (Base/Lightning/Sword/general), EM_DamageType enum, color curves x2
AnimNotify/7Combo hit frames, combo reset, animation-frame bullet spawn, one-shot camera setup + sustained camera shake, skill movement lock, skill camera move
CameraShake/4Enemy explosion, mountain-collapse explosion, lightning explosion, flight
Widget/4UW_Aim crosshair (81 nodes, world→screen coordinates + lock coloring), UW_AimTarget, UW_LightningTrace, C_UW_Aim curve

S8 · Full combat chain

Connecting the previous seven chapters: one attack runs the full path from keypress to shatter

The main chain runs every frame; the basic attack / aim / lightning skill chains merge at the damage point, and the hit-reaction chain closes on the enemy side.

Structurally, GameMode hangs only two subtrees: the protagonist BP_Character (with the BPC motion component, animation instance AB, montage struct, combat UI and bullet spawn) and the enemy EnemyBlueprint (patrol AI, Damage graph, death breakage chain). All combat complexity happens between these two trees.

S9 · Assets

The distribution across 5093 files: a sixth in effects, a fifth in characters, a sixth in the animation pack

VFX library 684, characters 421, MagicalAnimSet pack 152, core gameplay Blueprints 32, scene assets 25.

Core gameplay Blueprints number only 32 files, yet they define all the rules; what actually occupies the volume are the "looks and motion" assets — effects, animations, textures. There are only two maps: MMOGameMap_01, the default boot map (directional light + height fog empty scene), and the Showcase demo level that ships with the animation pack.

S10 · Appendix

How this analysis was made

Two data paths: offline binary parsing yields file-level facts; live editor reads yield node-level facts.

Tool (_AgentTools/)Use
editor_link.pyClient for the live editor data channel (Socket direct, handles delayed responses)
editor_cli.pyCommand-line client for the editor data interface
dump_bp.pyExports any Blueprint's overview + full graph node JSON
digest_nodes.pyConverts node JSON into readable digests
analyze_assets.pyOffline batch .uasset analysis

Reproduction notes.Under Git Bash, set MSYS_NO_PATHCONV=1 before running (otherwise /Game/ paths get converted to Windows paths); after an editor restart, confirm the live data interface stays enabled in Project Settings before you can continue reading Blueprint nodes.

Known limitations.read_graph_dsl returns empty for existing graphs (DSL is mainly for writing); node-level reads use find_nodes / get_node_infos instead. NPCBlueprint (the second character) has not been read in depth; Config uses the legacy input system rather than Enhanced Input.

S10 · C++ Core Modules

Not zero C++: TransformCharacter + ChangliCharacter + TimeOfDayManager + SwordQOrbitManager

20 source files · TransformCharacter 3161 lines · ChangliCharacter 7887 lines. The "base" for Light Flight, the combat five-hitter, day-night cycle, and the Six Swords orbit is handled by C++; Blueprints handle the presentation layer. The V171 triple fix for Light Flight's silent exit is a concrete iteration case.

Light Flight

TransformCharacter, 3161 lines

Right-click Light Flight (TransformToForm / right-click into a translucent high-speed state) + MPC dissolve transition; an AI-dedicated Light Flight interface (h:425-432) added 2026-09-29 replicates the full timing sequence. The V171 Light Flight silent-exit triple fix is fully recorded.

View

Combat base

ChangliCharacter, 7887 lines

Five-hit basic attack, three-hit tracker bullets, lightning chain, charged basic attack, E-key shield. OnMontageEnded callbacks keep state consistent.

View

Day-Night Cycle · Six Swords

TimeOfDayManager 1048 + SwordQOrbitManager 582

Day-night singleton uniformly drives three shared consumption points (lighting / post-processing / materials); the Six Swords Q-key system orbits on a circle per Tick.

View

View full C++ module walkthrough →

S10.5 · Enemy AI system (latest iteration 2026-10-04)

Enemy derived from the character Blueprint: BehaviorTree + Blackboard sticky lock + Light Flight chase five-hitter

AIController + BehaviorTree(Selector) + Blackboard (bEngaged sticky 100 m lock / released at 350 m) + CharacterEnemyBlueprint child Blueprint + C++ ForAI Light Flight interface. All 6-asset PIE passes end-to-end; 10 measured issues and fixes are closed out.

Architecture

AIC + BT + BB + Pawn child Blueprint

Root → Selector (return / chase / idle); service tick every 0.5 s; AutoPossessPlayer=Disabled to prevent PIE capture.

View

Combat

Distance-tiered attacks

<15 m basic-attack five-hitter (Blueprint IsAttack event + 5-segment montage + tracker ApplyDamage 20); 15~50 m lightning; 50~150 m teleport flight.

View

Light Flight chase

C++ ForAI interface + 5-hit chain

ExecuteEnter/ExitTransformForAI (TransformCharacter.h:425-432) replicates the full right-click Light Flight timing; AI closes to 12 m → five-hitter. The player side is already generalized with Tag="Enemy."

View

View full enemy AI walkthrough →

S11 · Feature studies: pilot

Character flight and dash: a complete pre-study implementation

The project is not pure Blueprint: the protagonist's base is driven by C++ base classes (TransformCharacter Light Flight, ChangliCharacter combat, TimeOfDayManager day-night, SwordQOrbitManager Six Swords), with much of the presentation-layer logic still living in Blueprint graphs.

The current character (BP_Character) is driven in the base by TransformCharacter (C++, 3161-line .cpp) for form transforms: right-click Light Flight into a translucent high-speed state (MPC dissolve transition), left-click basic-attack five-hitter, hold for a charged sword burst, LeftShift aerial dash, Q-key Six Swords orbit, E-key shield, right-click aiming. Blueprint graphs carry the presentation layer (montage, VFX, dynamic materials); C++ handles the base timing and guards (V171 Light Flight silent-exit triple fix as evidence of the iteration).

Flight and Dash

Development log · 9 issues and fixes

A complete implementation log from input binding, form switching, flight control to Niagara velocity transfer.

View

Code Walkthrough

Line-by-line · .h / .cpp

The TransformCharacter character base class annotated line by line, with a key-variable quick reference and a list of dead code.

View

Aerial Dash

WASD + LeftShift · four directions in the air

Blueprint OnDashInput chain vs C++ AirDashFunction comparison, five-version clip-through fixes, effects list accurate down to asset paths.

View

Day-Night Exposure

V61 unified curve · shared in three places

Night-scene AutoExposureBias darkening + character material EffectBrightness scaling + skill-effect MPC EmissiveScale day-night curve.

View

Foliage Shadows

castDynamicShadows issues and fixes

Directional light dynamic shadows disabled by DaySequence turned foliage flat; a one-shot programmatic set + read-back + save via MCP resolved it.

View

Charged Basic Attack

Upper-body layered slot

SaveCachedPose + LayeredBoneBlend for the charged wind-up and the leg action to layer together; short taps keep the basic-attack chain.

View

AI Deployment

Qwen3.8-27B local full stack

27B on a single RTX 5090: llama-server resident on :11435, ZCode direct link, KV4 quantization saves 4.35 GB, wake from sleep in 7.6 s, with a troubleshooting manual.

View