Dev Log — Perforce Server Setup for UE5

Date: May 23, 2026 Project: Stunt (UE5 vehicle game) Goal: Stand up a personal Perforce Helix Core server to version-control UE5 projects across a two-machine home setup.

Hardware Setup

  • Server: Laptop on home Wi-Fi, hosting the Perforce server and depot storage

  • Client: Desktop workstation, used as the primary dev machine

  • Both machines on the same local network

What Got Built

1. Helix Core Server (P4 Server 2025.2) Installed on the laptop. Configured to run on port 1666. Service running as "P4 Server" in Windows Services. Created Owner as the super user account.

2. P4V Client (visual + bundle tools) Installed on both machines. Connected the desktop to the laptop server via local IP. Verified two-way communication.

3. Streams Depot — streamsDepot Created a streams-based depot with a mainline stream as the trunk. Project lives at //streamsDepot/mainline/Stunt/ with Assets/ and StuntDriver/ subfolders.

4. Initial Project Submit Submitted the full Stunt project from the desktop — 12,215 files in changelist 2. Successfully synced down to a second workspace (SoloP4WorkSpace) on the laptop to confirm round-trip works.

5. Workspace Configuration Hit and resolved a "no such file(s)" error on the laptop workspace — root cause was an unmapped stream. Fixed by tying the workspace to //streamsDepot/mainline via the Stream field.

6. Ignore Rules — .p4ignore Created a .p4ignore file in the project root listing UE5's regenerated folders (Binaries, Build, DerivedDataCache, Intermediate, Saved) plus IDE and OS junk files. Set the P4IGNORE environment variable so Perforce respects the file.

7. Typemap Configuration Set up a server-wide typemap to handle UE5 file types correctly. Key behaviors:

  • .uasset, .umap, .fbx, textures, audio → binary+l (exclusive lock to prevent overwrite conflicts on un-mergeable binaries)

  • .cpp, .h, .ini, .config → text (for proper diff/merge support)

  • Executables and DLLs → binary+w (writable binary)

Lessons Learned / Gotchas Hit

  • Streams ≠ regular depots. Workspace views work differently — don't manually edit the View on a streams workspace; tie it to the stream instead.

  • Saved/ got submitted accidentally before the ignore file was in place. .p4ignore only prevents new adds, so existing tracked files need a separate Mark-for-Delete pass to clean up.

  • Typemap requires tabs, not spaces in the spec file. Easy formatting trap.

  • Static IP on the laptop is essential — if the router hands out a new IP, the desktop can't reach the server


Previous
Previous

Dev Log  Dynamic Stunt Camera System

Next
Next

Dev Log: Drift Works