So recently I have been developing a project on my own from scratch and I 've noticed a couple of things that were blocking me from fully realizing the vision and bringing it to life through a project.
Before we start, bit of a background on me. I 've created around 120 large projects in Creative and UEFN by now, been doing it since December 2018 when Creative came out. I have been very observant of the process of creation in UEFN and Creative and to me, the most important part of development is the sentiment you have as a creator while building. Whether you finish the project or not depends on balancing that sentiment with the scope you 've set. If you are aiming for small projects, its easier, but large ones are a testament to your patience, resilience and in overall, passion.
So I 've recently gave up on trying to release Mercenaries because some verse code locked the project and won’t launch live edit, and for the past 2 months we ve been running to issues with server performance that we don’t have the insight or tools to fix. I started a new project, which I labeled as “small” while I wait for another project that I 've already completed to go closer to testing and polishing (aka in the past 2 months I 've developed one large project that is secret for now, a small one that was released, and an even smaller one which is at 60% completion). I want to talk about the last case, because I worked on nearly everything on the game, and the game contains a lot of elements. This allowed me to observe the bottlenecks I encountered with the process and also the strengths of UEFN.
Let’s start with an inverted feedback sandwich, so the negative first. The biggest block I have in the project is waiting times, this hasn’t changed. For context, when you start to build something, feel like you are in the zone, there is always something that will pop and stop you from working, breaking that flow. Autosave doesn’t know when to pop for example, so it ll pop right after you save everything, or when you rename a file and cancel the renaming, always frustrating you because there are no hooks to make it more intelligent and to know not to interrupt the process. Live edit is still the most annoying part of UEFN, with devices like audio player device, guard device and some others desyncing it when they shouldn’t, you move something with combined translation and it doesn’t show in Creative, guard devices that are copied straight up break without telling you, and more. It all combines always to live edit, where even with a small project the waiting times are long. But there is even more waiting. Editor now doesn’t remember settings you set in the UI, so you have to always wait for scalability to change to the setting you want, or opening the material editor takes 7-8 seconds because it has to load Juno plugins. Waiting is everywhere, and it has gotten to a point that it turns otherwise incredible games to just good games, because by the time the waiting is over, you incredible flash of an idea will be forgotten because you steered off to something else while waiting. Even if the argument is to learn a skill while waiting, or working on another aspect of the game, this still doesn’t change the fact that we are not designing games most of the time, but waiting for the engine to load because of reasons that we don’t know or sometimes are not relevant to us. Now with Sony and Disney coming into the game, the editor will get even more complex, because we are focusing on adding more plugins rather than tools to universally benefit the ecosystem. After observing live edit desyncs for a year now, I can’t say it has gotten better, it still feels that I need workarounds to do simple things (I work in live edit btw, so I test both avenues of design, both UEFN and Creative). Also, even though UEFN was a huge upgrade to programmers, tech artists and added new skills like animations, vfx, etc. I feel the level designers were the only ones that were not given better tools to work with (with the exception of swapping data files in architecture, but something tells me it was not intended by Epic because its support is very limited). Anyhow, back into topic, so the biggest bottleneck as I mentioned is waiting, the next one is UI. Specifically UI has a ton of issues atm, so many that it requires us to remake entire systems to workaround the bugs of the HUD message device, mainly the overflow of settings from one message going to the next. So now if you have message A, then message B will be affected by A’s settings, and that is a pain to workaround because Verse UI is also very complicated and painful. I run into this issues every project now, and its the one area I can never master. After that, AI is a little limiting, because even though the NPC device came out, there are not any new features that you can do with it unless you want to dive into Verse and spend an eternity doing something specific. What I am interested is simple things like the ability to change the running pace of a guard (run instead of walking) or whether he holds a weapon (to make him be an ally in the background), or simply spawn more than once using the device (spawn count 2+ doesn’t work anymore on any AI device). I am also not using world partition this time and it seems the game is overall way more stable (I don’t have to debug every cutscene I make now, I know that platforms will work when animated and they will render). Also I had to make the game a 1-4 player game so it can do well in discovery, but having multiple instigation on an open world game is quite challenging turns out, especially with audio (since I have music per region). more on that later.
Now to the good parts: I spent around a week and a half making 60% of the project (game is a twin-stick shooter metroidvania) with 3 main areas to visit, around 5 bosses (nothing complex though) and a ton of secrets and loot to find (as well as key items that unlock abilities to access new areas). I relied mostly to what I knew already and used assets from Fortnite, because my goal was to realize a specific game design without having to rely on making custom assets or mechanics, just combining them in a way that would help me deliver the mood, feel and fun factor that I needed. My deadline was tight, because I am doing this while I wait for another project to be completed that my side of dev was done. Anyhow, so I made all logic using event binding and used haunted castle, brimstone and pirate galleries to create the medieval setting I had in mind. I loved the process mainly because I could find assets and devices that would do what I had in mind before I could forget it. I didn’t need to document the process first, so that saved me time and added more fun to it. I absolutely LOVE the variety of guards we can have now, in fact I loved it so much that I made it an inherent part of the gameplay, introducing every new enemy and giving them some personality giving them dialogue boxes, so their designs are more visible to the player. I also used their own skin names for their titles, because I love respecting canon and pretending they all exist in a universe with rules that make sense. Even though the portraits were relatively hard for the flow of gamedev, the ability to have so many characters be part of your game gave me passion for showing those characters and allowed me to have fun going the extra mile.
Another thing that gave me a lot of passion and courage to keep making this experience was music. Every area has music that is composed by me, and to match the feeling of the music with the theme is incredibly immersive for the player and extremely satisfying for me. So those two things helped me focus and spice up gameplay, having fun in the process. Areas like the Blaze Temple were made so much nicer because I could listen to the music while building the area and adapt to its vibe and theme. Another unsung hero is the ability to play audio from the point of instigation. That allowed me to make secrets walls that when opened I only had to use one audio player and it would play at the correct position with its attenuation and specialization being correct for all players.
Going back into bottlenecks, the first big obstacle that I run was how to blend audio between zones. now that scaling was starting to render my event binding very complex, bugs would start to creep in and limitations started showing. For example, having a stinger play, which then resumes the music is not possible, music has to restart everytime. Having music with 2 layers, one for base and one for combat is also not possible, the audio would not sync regardless the approach. Then having music blend with priority is also not a thing, making it super hard everytime I had to mute everything then find what was playing so I can resume it. Would love if audio player gets any of these features so we can make more complex soundtracks around game areas. Also you cant have rectangular zones for audio, that would be nice to have as well.
Another bottleneck is again AI. Some floors from UEFN content browser will not work with their pathing, also there is no tell you cant use a weapon with guards in UEFN. Lastly, there are no melee weapons for guards and the variety of weapons that are not modern military for them is very limited, which made it so I couldn’t have much variety in each encounter. There are a lot of bows, crossbows, items and melee weapons in FN that are not supported by guards.
That’s it for now, I am continuing the project still, feeling a little burnt out tbh because I did the entire thing really fast, but I think its a good overall that I was able to accomplish a twin-stick shooter (thanks fixed angle camera!) really fast and prototype what I can do with it, and for the most part everything works great (only minor issues are on player interactions with buttons/switches and cursor has an offset when HUD scale in options is not 100%). Oh, and I was annoyed checkpoint device doesn’t have an event for when the player passes from the checkpoint, seems very useful. Oh x2, lock device still broken right? Would be nice to be able to use it to lock doors, bit tired to add props doors all the time everytime I want to lock one.