Engineering

Solo Unreal engineering overview

The Last Line is built in Unreal Engine 5.7 by a solo developer at Rigbak. The game ships on four in-house plugins plus game-specific horde and encounter systems. This page summarizes what each layer does, with concrete implementation notes for editorial and App Store review.

Engine 5.7 · iPhone and iPad · Bundle com.rigbak.thelastline · Game site · Press kit

How the stack fits together

ModularFPS
Player GAS, weapons, damage, input
MobileEssentials
Mobile UX, economy, aim assist, combat HUD, quality presets
Soulslike Enemy Combat
Arena boss AI, melee traces, reactions (not horde zombies)
RevenueCatBridge
StoreKit IAP, virtual currency, entitlements
The Last Line (game module)
Horde batching, encounters, campaign, Endless, barricade flow

RevenueCatBridge

In-house UE plugin (v1.6.0) exposing RevenueCat purchases, restore, customer info, virtual currencies, and paywalls through URevenueCatSubsystem.

  • iOS bridge in RevenueCatIOSBridge.mm with bundled RevenueCat and RevenueCatUI frameworks; Android via JNI.
  • Game wallet reads RevenueCat virtual currency code GS through UGoldenScrapWalletSubsystem.
  • UTheLastLineGameInstance applies entitlements on start and listens for customer-info updates.

Soulslike Enemy Combat

In-house Fab plugin (v2.2.1) for souls-like boss AI: action scoring, reactions, melee traces, awareness, and combat roles.

  • Core types include AEnemyControllerBase, USECBrainComponent, and USECMeleeTraceComponent.
  • Arena bosses (GraveBreaker, IceWarlord, SawGuy, Tepegoz) use SEC; horde zombies use separate batch pathing, not SEC brains.
  • Encounters start through UEncounterManagerSubsystem::StartEncounter.
  • Requires GAS, StateTree, and Motion Warping modules.

MobileEssentials

Reusable mobile foundation plugin (v0.1.0, beta) split across Core, Services, UI, and LoadingScreen modules.

  • Hosts aim assist, combat indicators, graphics quality, haptics, object pooling, battle pass, analytics, and shared save base classes.
  • Progression and storefront systems live here rather than in the game module so they can ship in other titles.
  • Combat indicator, aim assist, and quality libraries are consumed directly by The Last Line player and game instance code.

S_ModularFPS (ModularFPS)

In-house GAS FPS framework (v1.0) that The Last Line extends for weapons, attributes, and player combat.

  • AFPSCharacter and UFPSAttributeSet chain into ATheLastLineCharacter and ATheLastLinePlayerController.
  • UCombatComponent manages two weapon slots, equip/switch, and preview flow; weapons inherit from ABaseWeapon.
  • Tag-based ability input routes through UFPSAbilitySystemComponent and UFPSInputConfig.

Haptics

Cross-platform haptic API in MobileEssentials Core: UHapticFunctionLibrary with a runtime enable gate synced to player settings.

  • iOS uses UIKit feedback generators (selection, impact light/medium/heavy, notification) on the main queue.
  • Android uses amplitude/duration vibration patterns for impacts and notifications.
  • Hold interactions call PlayImpactHaptic from HoldInteractionZone during charged interactions.

Aim assist

Controller-mounted UAimAssistComponent rotates aim toward actors implementing IAimAssistTargetInterface. Correction only, not auto-fire.

  • Defaults include weight 0.6, 2° inner dead zone, 8° falloff, and 120°/s max correction speed.
  • Intent detection backs off when the player deliberately aims away; no input restores full assist strength.
  • States: Idle, Tracking, Suspended. Targets can move their aim point each tick via the interface.

Combat indicators

Zero-UMG combat HUD renderer: UCombatIndicatorSubsystem draws pooled damage numbers, health bars, hit direction cues, and screen flash on the HUD canvas.

  • Callers push events only; the subsystem does not detect damage itself. Numbers project once, then drift in screen space.
  • Project defaults tune pool sizes and lifetimes; game config extends draw distance for large arenas.
  • Endless mode suppresses indicators during between-wave prep via AEndlessGameMode::SetCombatIndicatorSuppressed.

Device quality system

UGraphicsQualityLibrary assigns Low/Medium/High/Epic presets, render scale, and FPS cap without letting engine defaults clobber the saved tier.

  • Auto-detect reads declared device-profile scalability, with RAM fallback buckets (≤3 GB Low, 4–7 GB Medium, ≥8 GB High). Epic is never auto-assigned.
  • Render scale: Low 0.65, Medium 0.80, High/Epic 1.00 via r.ScreenPercentage.
  • UTheLastLineGameInstance calls ApplySavedSettings() on start; a detect-version flag forces one-time re-detection after preset logic changes.

iOS technical solutions

Platform-specific fixes and integrations for App Store shipping on iPhone and iPad.

  • Landscape-only runtime settings with 60 FPS lock, high-refresh support, Game Center, and premade entitlements for associated domains and StoreKit.
  • CFBundleIconName=AppIcon injected into plist AdditionalPlistData to fix TestFlight icon delivery on iOS 11+.
  • Firebase iOS init repairs truncated database URLs from config by reading DATABASE_URL from GoogleService-Info.plist.
  • Home-screen shortcuts defer cold-launch broadcasts until the engine tick loop is safe; warm launches guard on GIsRunning.
  • CI packaging script strips AppleDouble sidecars and extended attributes before UHT/build steps on network volumes.