the work week means back on the paid gig.

unreal remains not my favorite.

by default, network disconnection causes the player to travel back to the game’s startup map. trying to pop-up a dialog first requires… greping through engine source. there are a few delegates, a few virtual calls, a few blueprint events. way too much code.

apparently, there are two options: derive a custom engine class to override its disconnect virtual method; or derive an online system class to handle its disconnect virtual, but also implement an “event” in blueprint to determine the reason for the disconnect. note: the online system class is not decided in engine.ini like most other major classes. instead, you must override a game instance get class method.

these issues highlight some of my many issues with unreal:

  1. unreal has no standard methodology for implementing features. features seem to be written by different programmers with different ways of thinking. there appears to be little oversight, and it seems there are only rare refactors to normalize behavior. unreal only gets bigger with time.

want to provide your own game instance class? go to the ini. want to provide your own game mode class? go to world settings. want to provide your own online systems class? override a virtual. not much reason. just because.

  1. that said, unreal’s developers do seem to love big classes with lots of virtual methods. there must be something intrinsic to the architecture that encourages this. there’s not a single system which encapsulates state into a set of state classes. almost everything in unreal represents state with adhoc variables, sometimes spread across multiple classes.

there are no notational or structural differences between functions which transition to new states, and actions which occur in a given state. no separation for the model those actions change. long running actions themselves are rarely encapsulated into tasks. usually they are timers with callbacks into (other) arbitrary classes. with all of the lifetime management issues that implies.

network status, game startup, map transitions, object spawning to name a few – all suffer.

all too long for a daily – i get frustrated that people learning to code see unreal and think this is “the way.” it does so much well on the art front. and it has a ton of benefits for multi-platform development. it’s also permanently stuck in old and crufty roots.

( please dear god use the stl already. you’ve got garbage collection, blueprints, and more than a few arrays in core code copied by value. you aren’t buying any performance or portability by using your buggy non-standard custom library. vendor lock-in appears to be the name of the game. )