Kandor (UT3 map) (nonfiction)
Kandor is an Unreal Tournament 3 mod by Karl "Handy Vandal" Jones.
Cylinder plan
Here is the 4-phase breakdown to make the Cylinder in the Macro room project a dynamic airplane flight view of the Micro room.
Phase 1: Establish the Data Hook & Actor Link (Infrastructure)Goal: Tell the Macro cylinder where the Micro room is and create the texture payload pipeline.
Prompt for Cursor:"In UTActor_KandorCylinder.uc, add an editable properties block containing an Actor reference named MicroRoomCenterMarker. Declare a property for a TextureRenderTarget2D named HologramTargetTexture. Write an initialization check in PostBeginPlay() ensuring both references are populated, logging an error if either is missing."
Phase 2: Implement the Scene Capture Pipeline (The "Eye")Goal: Dynamically generate a viewport camera inside the Micro room that feeds the texture.
Prompt for Cursor:"Extend UTActor_KandorCylinder.uc. In PostBeginPlay(), programmatically spawn a SceneCapture2DActor at the position of MicroRoomCenterMarker. Extract its SceneCapture2DComponent and assign our HologramTargetTexture as its TextureTarget. Ensure the capture frequency is set to frame updates (bCaptureEveryFrame=true). Save a reference to this spawned actor as MicroCameraActor."
Phase 3: The Parallax Airplane-Flight Math (The Orbit Engine)Goal: Translate the player's movement around the cylinder into an orbital airplane flight sweep inside the micro arena.
Prompt for Cursor:"Write a Tick(float DeltaTime) function inside UTActor_KandorCylinder.uc. Fetch the local player's location using LocalPlayerControllers. Calculate the direction vector from the Cylinder center (self.Location) to the player pawn. Normalize this vector. Apply a float multiplier variable named MicroOrbitRadius to invert/mirror this vector away from the MicroRoomCenterMarker.Location. Update MicroCameraActor to sit at this new offset position, and set its rotation to face the exact vector center of the Micro room using rotator(MicroRoomCenterMarker.Location - MicroCameraActor.Location)."
Phase 4: Dynamic Material Binding (The Surface Pipeline)
Goal: Feed the dynamic render target into the actual mesh material so the image displays cleanly on the glass surface.
Prompt for Cursor:"Modify UTActor_KandorCylinder.uc to initialize a MaterialInstanceConstant out of its base mesh's material index 0 during PostBeginPlay(). Write a line using SetTextureParameterValue('HologramTexParam', HologramTargetTexture) to dynamically push the render target data directly onto the cylinder's shader."Step-by-Step Blueprint & Package SetupTo make these phases execute correctly inside your Unreal Tournament 3 environment, follow this visual data map:
[Macro Room Cylinder Actor]
├── Track Local Player Angle ──> Translate Angle to Vector
└── Spawns -> [SceneCapture2DActor] inside [Micro Room]
│
Renders Realtime View
│
▼
[TextureRenderTarget2D Asset]
│
Pushed via Script into
│
▼
[MaterialInstanceConstant: HologramTexParam]
In the Content Browser:
Create a new TextureRenderTarget2D object inside your map package or Kandor package (e.g., KandorContent.Textures.Hologram_RT). Set its width/height dimensions to 512x512 or 1024x1024 for texture fidelity.In your custom Cylinder Material: Add a standard TextureSampleParameter2D node. Name this parameter exactly HologramTexParam so your code can target it. Plug its RGB channel directly into your Material Emissive channel.
First pass map design notes
- Package: Kandor 0.1.0
- Map prefix example: VNDL-HIVE-Kandor
- Depends on: SpawnControl
OVERVIEW
Kandor is a dual-scale experience inside a single .ut3 map. Players choose Macro or Micro before the match starts and remain in that dimension (with optional later swap). All scale translation is handled by one invisible bridge actor.
MACRO SPACE
Visual / dimensional brief
A large-scale control room or bunker at normal player scale. The dominant visual feature is a large physical bottle (glass cylinder mesh) sitting on or near a pedestal. The space should feel industrial / military and give clear sightlines and approach paths to the bottle.
Key geometric design features & function
- Bottle pedestal area: The origin point for all Micro→Macro feedback. Keep clear space around it so tilt/rumble and ClientMessages feel local.
- Approach / Use paths to the cylinder: Players must be able to walk up and Use the bottle (or shoot/trace it) to paint into Micro.
- Macro spawn pads: Clustered in safe, thematically appropriate locations (not on top of the bottle).
- Optional stage-gate volumes / swap pads: Placed where designers want progression or evacuation points.
Required / recommended Kandor entities
Actor Placement notes Key properties to set
UTActor_KandorWorldBridge One per map, anywhere (invisible) MicroOrigin (exact location of the bottle
city far away), MacroPedestalOrigin
(usually the cylinder’s base or the
bridge’s own location), WorldScaleRatio
(default 64), MacroShakeRadius
UTActor_KandorCylinder On the pedestal in Macro Auto-registers as PhysicalBottle.
Give it a glass/bottle mesh.
UTActor_KandorDimensionChooser Anywhere (Info) MacroPoolName = Macro,
MicroPoolName = Micro,
bRelocateOnMatchStart as desired
UTActor_SpawnController One per map (from SpawnControl) InitialSpawnPool = Macro (or leave empty)
UTTeamPlayerStartPool Several player starts (Macro pads) SpawnPool = Macro,
set team / StartUse as needed
UTActor_KandorSwapPad (optional) Near exits or evacuation points TargetPool = Micro
UTActor_KandorObjectiveGate Stage progression triggers NextSpawnPool = Stage2 / Stage3, (optional) ObjectiveScoreReward
MICRO SPACE
Visual / dimensional brief
A complete playable city or facility that exists inside the bottle. Place it ≥ 50 000 UU away from Macro (the bridge’s MicroOrigin). Because of the 64× scale ratio, the city appears tiny when viewed from Macro, but players who spawn into Micro experience it at normal size. Design streets, buildings, and landmarks that look good both from the Macro “god’s-eye” paint view and at street level.
Key geometric design features & function
- MicroOrigin: Exact world location the bridge uses as the zero point for all Macro↔Micro translation. Keep the city centred on or near this point.
- Paintable streets / surfaces: Areas that should receive the Macro paint impact emitter (usually ground-level).
- Jammer coverage zones: Places where designers want to block Macro painting until the jammer is destroyed.
- Blast volumes: Regions where Micro explosions should rumble the Macro bottle.
- Micro spawn pads: Safe starting locations inside the city.
- Stage gates & swap pads: Same progression/evacuation logic as Macro.
Required / recommended Kandor entities
Actor Placement notes Key properties to set
UTTeamPlayerStartPool Several player starts inside the city SpawnPool = Micro
UTActor_HiveJammerNode On rooftops or key intersections JamRadius, JamHealth — while alive it (optional but common) blocks paint in its radius
UTVolume_KandorMicroBlast Volumes covering streets / combat zones BlastIntensity (default 0.5) — any (optional) projectile Touch notifies the bridge
UTActor_KandorSwapPad (optional) Evacuation points TargetPool = Macro
UTActor_KandorObjectiveGate Stage triggers Same as Macro (optional)
Additional UTTeamPlayerStartPool Stage progression SpawnPool = Stage2 or Stage3
SPAWN-POINT RULES (BOTH WORLDS)
- All player starts that participate in Kandor must be UTTeamPlayerStartPool actors.
- Set the SpawnPool name exactly:
- Macro
- Micro
- Stage2 / Stage3 (for gated progression)
- Hive / special starts use StartUse = HiveOnly and TeamIndex 4 (do NOT use SetTeam(2)).
- The DimensionChooser + SpawnController combination automatically assigns each player to the correct pool at match start. Per-player overrides always win over the global ActiveSpawnPool.
QUICK PLACEMENT CHECKLIST
- Place one UTActor_KandorWorldBridge and set MicroOrigin + MacroPedestalOrigin + ratio.
- Place the UTActor_KandorCylinder on the Macro pedestal.
- Place UTActor_SpawnController + UTActor_KandorDimensionChooser.
- Place Macro pads (SpawnPool=Macro) and Micro pads (SpawnPool=Micro).
- (Optional) Add jammers, blast volumes, objective gates, and swap pads.
- Keep Micro geometry ≥ 50 kUU from Macro and centred on MicroOrigin.
Follow the locked design rules in the agent summary (no new game type, no multicast RPCs, Hive = TeamIndex 4 / HiveOnly, etc.).
Extending Kandor
When extending Kandor: bump package version, sync config + README, run make, and update the agent summary if API names change. Do not edit unrelated maps.
See also
External links
- Google AI @ Google
- [ Google AI] @ Google
