Design-agnostic node editor for scripting game’s flow in Unreal Engine

Related tags

Game unreal-engine
Overview

Flow

Flow plug-in for Unreal Engine provides a graph editor tailored for scripting flow of events in virtual worlds. It's based on a decade of experience with designing and implementing narrative in video games. All we need here is simplicity.

  • Licensed under MIT license. You are free to use it for commercial projects, modify it however you see fit, and distribute it further.
  • This a fresh repository, extracted plugin itself from the legacy repository. Also created the 2nd repository where I gonna put sample modues containting quest or dialogue systems: FlowSamples

Concept

It's s design-agnostic event node editor.

Flow101

  • A single node in this graph is a simple UObject, not a function like in blueprints. This allows you to encapsulate the entire gameplay element (logic with its data) within a single Flow Node. The idea is that your write a repeatable "event script" only once for the entire game!
  • Unlike blueprints, Flow Node is async/latent by design. Active node usually subscribe to delegates, so it can react to event by triggering output pin (or whatever you choose to).
  • Every node defines its own set of input/output pins. It's dead simple to design the flow of the game - just connect nodes representing features.
  • Developers creating a Flow Node can call the execution of pins any way they need. API is extremely simple.
  • Editor supports convenient displaying debug information on nodes and wires while playing a game. You simply provide what kind of message would be displayed over active Flow Nodes - you can't have that with blueprint functions.

Base for your own systems and tools

  • It's up to you to add game-specific functionalities by writing your nodes and editor customizations. It's not like a marketplace providing the very specific implementation of systems. It's a convenient base for building systems tailored to fit your needs.
  • Quickly build your own Quest system, Dialogue system or any other custom system that would control the flow of events in the game.
  • Expand it, build Articy:draft equivalent right in the Unreal Engine.

In-depth video presentation

This 24-minute presentation breaks down the concept of the Flow Graph. It goes through everything written in this ReadMe but in greater detail.

Introducing Flow Graph for Unreal Engine

Getting started

In Releases, you can find an example project called Flower, so you can easily check how this plug-in works.

And if you'd decide to use Flow in your project...

  1. Unpack plug-in to the Plugins folder in your project folder. If you don't have such a folder yet, simply create it.
  2. Open Project Settings in the editor. Change World Settings to the Flow World Settings class and restart the editor. This class starts the Flow Graph assigned to the map.

You can include this plugin repository as dependency of your own Git project. It can be done by using Git submodules.

git submodule add -b 4.26 https://github.com/MothCocoon/FlowGraph.git Plugins/Flow

Simplicity is a key

  • It's all about simplifying the cooperation between gameplay programmers and content designers by providing a clean interface between "code of systems" and "using systems".
  • Code of gameplay mechanics wouldn't ever be mixed with each other. Usually, system X shouldn't even know about the existence of system Y. Flow Graph is a place to combine features by connecting nodes.
  • Every mechanic is exposed to content designers once, in one way only - as the Flow Node. It greatly reduces the number of bugs. Refactoring mechanics is easy since you don't have to update dozens of level blueprints directly calling system functions.
  • Systems based on such editor are simple to use for least technical team members, i.e. narrative designers, writers, QA. Every time I ask designers why they love working with such a system, they usually reply: "it's so simple to understand and make a game with it".
  • Even a complex game might end up only with a few dozens of Flow Nodes. It's easy to manage the game's complexity - a lot of mechanics, mission scripting, narrative events. It makes it very efficient to develop lengthy campaigns and multiplayer games.

Blueprints

  • Programmer writing a new gameplay feature can quickly expose it to content creators by creating a new Flow Node. A given C++ feature doesn't have to be exposed to blueprints at all.
  • However, Flow Nodes can be created in blueprints by anyone. Personally, I would recommend using blueprint nodes mostly for prototyping and rarely used custom actions, if you have a gameplay programmer in a team. If not, sure, you can implement your systems in blueprints entirely.

Performance

  • Performance loss in blueprint graphs comes from executing a large network of nodes, processing pins and connections between them. Moving away from overcomplicated level blueprints and messy "system blueprints" to simple Flow Graph might improve framerate and memory management.
  • As Flow Nodes are designed to be event-based, executing graph connection might happen only like few times per minute or so. (heavily depends on your logic and event mechanics). Finally, Flow Graph has its own execution logic, doesn't utilize blueprint VM.
  • Flow-based event systems are generally more performant than blueprint counterparts. Especially if frequently used nodes are implemented in C++.

Flexibility of the system design

Flow Graph communicates with actors in the world by using Gameplay Tags. No direct references to actors are used in this variant of scripting - that brings a lot of new possibilities.

  • Simply add Flow Component to every "event actor", assign Gameplay Tags identifying this actor. Flow Component registers itself to the Flow Subsystem (or any derived system) when it appears in the world. It's easy to find any event actor this way, just ask Flow Subsystem for actors registered with a given Gameplay Tag.
  • It allows for reusing entire Flow Graphs in different maps. Unlike level blueprints, Flow Graphs aren't bound to levels.
  • It's possible to place actors used by the single Flow Graph in different sublevels or even worlds. This removes one of the workflow limitations related to the level design.
  • It should work well with the World Partition system coming to Unreal Engine - a truly open-world way of building maps where every actor instance is saved separately to disk. That probably means no sublevels and no level blueprints (except the blueprint of the "persistent level").
  • Flow Graph could live as long as the game session, not even bound to the specific world. You can have a meta Flow Graph waiting for events happening anywhere during the game.
  • Using Gameplay Tags allows scripting an action on any actor spawned in runtime, typically NPCs.
  • In some cases actor with a given Gameplay Tag doesn't even have to exist when starting a related action! Example: On Trigger Enter in the image above would pick up the required trigger after loading a sublevel with this trigger.

Recommended workflow

  • Flow Graph is meant to entirely replace a need to use Level Blueprints (also known as Flying Spaghetti Monster) in production maps. The flow of the game - the connection between consecutive events and actors - should be scripted by using Flow Graphs only. Otherwise, you ending up creating a mess, using multiple tools for the same job.
  • This graph also entirely replaces another way of doing things: referencing different actors directly, i.e. hooking up Spawner actor directly to the Trigger actor. Technically it works fine, but it's impossible to read the designed flow of events scripted this way. Debugging can be very cumbersome and time-consuming.
  • Actor blueprints are supposed to be used only to script the inner logic of actors, not connections between actors belonging to different systems.
  • Flow Nodes can send and receive blueprint events via Flow Component. This recommended way of communicating between Flow Graph and blueprints.
  • Technically, it's always possible to call custom blueprint events directly from blueprint Flow Node, but this would require creating a new Flow Node for every custom blueprint actor. Effectively, you would throw a simplicity of Flow Graph out of the window.

State of the development

  • Flow editor and runtime system are ready for production.
  • Plugin and the code of the sample project are available for every engine version since 4.22. I'm not planning on backporting code to older engine versions since the runtime code relies on programming subsystems introduced with UE 4.22.
  • Currently, the example content is... modest. I hope to prepare better samples in the future.
  • Development continues. Check Issues for a list of useful things I'm hoping to work on in the future.
  • Your feedback is much welcome! It's all about developing a toolset for any kind of game.
  • In the short term, code might need a bit of love to support creating multiple flow-based systems without modifying the plugin code at all. For example, the quest and dialogue system based on the Flow Subsystem. It's not a huge work, plugin was designed for it. I just need time to create a few different systems, play with it, update the plugin where's needed.
  • I'm planning to release the Flow plugin on the Marketplace, so more people could discover it and conveniently add it to their asset libraries. It will be free of charge, obviously.

Contact

  • Catch me on Twitter: @MothDoctor
  • Discuss things related to plugin on the Discord server named Flow.

Acknowledgements

I feel it's important to mention that I didn't invent anything new here, with the Flow Graph. It's an old and proven concept. I'm only the one who decided it would be crazy useful to adopt it for Unreal Engine. And make it publically available as my humble contribution to the open-source community.

  • Such simple graph-based tools for scripting game screenplay are utilized for a long time. Traditionally, RPG games needed such tools as there a lot of stories, quests, dialogues.
  • The best narrative toolset I had the opportunity to work with is what CD Projekt RED built for The Witcher series. Sadly, you can't download the modding toolkit for The Witcher 2 - yeah, it was publically available for some time. Still... you can watch the GDC talk by Piotr Tomsiński on Cinematic Dialogues in The Witcher 3: Wild Hunt - it includes a brief presentation how Quest and Dialogue editors look like. It wouldn't be possible to create such an amazing narrative game without this kind of toolset. I did miss that so much when I moved to the Unreal Engine...
  • Finally got an opportunity to work on something like this at Reikon Games. They badly wanted to build a better tool for implementing game flow than level blueprints or existing Marketplace plug-ins. I was very much interested in this since the studio was just starting with the production of the new title. And we did exactly that, created a node editor dedicated to scripting game flow. Kudos to Dariusz Murawski - a programmer who spent a few months with me to establish the working system and editor. And who had to endure my never-ending feedback and requests.
  • At some point I felt comfortable enough with programming editor tools so I decided to build my own version of such toolset. Written from the scratch, meant to be published as an open-source project. I am thankful to Reikon bosses they see no issues with me releasing Flow Graph, which is "obviously" similar to our internal tool in many ways. I mean, it's so simple concept of "single node representing a single game feature"... and it's based on the same UE4 node graph API. Some corporations might have an issue with that.

Related resources

Comments
  • Add input outputs to flow graph

    Add input outputs to flow graph

    Alright here it is. This PR adds support for input and output pins 🥳. Now before you get excited lets talk about some limitations of this feature although these limitations can be lifted.

    Screenshot_1

    FEATURES

    • Input output pins
    • Supports per pin tooltip
    • Supports any UObject/AActor (including custom ones too)
    • Supports Float
    • Supports Bool
    • Supports Byte
    • Supports Int
    • Supports Int64
    • Supports FGameplayTagContainer
    • Supports FGameplayTag
    • Supports FVector
    • Supports FRotator
    • Supports FTransform
    • Supports FString
    • Supports FText
    • Supports FName
    • Easy to set input or output

    LIMITATIONS:

    • Only one input/output is supported.
    • Containers are not supported (Arrays, Set, Maps etc)

    UPCOMING (If this gets accepted)

    • Saving variables for later use (local and global)
    • Calling graph event with input from Blueprint (wildcard pin)
    new feature 
    opened by ryanjon2040 9
  • Add FlowNode identifier and FlowAsset update delegate

    Add FlowNode identifier and FlowAsset update delegate

    I think it would be useful to be able to check the state of the FlowNode by id, for example. I can call GetRecordedNodes, GetActiveNodes and check if it contains a node with a specific id.

    I can add custom nodes to set something somewhere, but standard nodes like AND / OR also can be traited as task status.

    In short, if I use FlowAsset as Quest, then besides ACTIVE / COMPLETED I want to check intermediate state too.

    won't do 
    opened by moadib 5
  • Allow hierarchical identity searches

    Allow hierarchical identity searches

    When searching for flow components with the requested identity, use MatchesTag on each registered flow component instead of MultiFind on the entire container to allow for hierarchical identity searches (e.g. a flow component with identity Identity.General.Specific can be found by searching for Identity.General)

    improvement 
    opened by iknowDavenMC 4
  • Match type option

    Match type option

    The "OnNotifyFromActor" nodes matches tags with HasAnyExact, which is not always the best match type for certain situations. A dropdown to choose the type of match (HasAnyExaxt, HasAllExact, HasAny, HasAll, etc...) in this node parameters would be very useful.

    Even better would be an option in the plugin's general settings to choose the default match type.

    improvement 
    opened by Adrien-Lucas 4
  • Make possible to generate FName/FString dropdowns on blueprint function parameters without modifying the engine

    Make possible to generate FName/FString dropdowns on blueprint function parameters without modifying the engine

    This would prevent re-typing string on blueprint functions, like the TriggerOutput method in Flow Node blueprint.

    Expected result: it's possible to create customization similar to Material Parameter Collection methods, without changing core blueprint UI classes. image

    improvement 
    opened by MothDoctor 4
  • Component Observer may continue triggering outputs if the last component triggered a finish during UFlowNode_ComponentObserver::StartObserving

    Component Observer may continue triggering outputs if the last component triggered a finish during UFlowNode_ComponentObserver::StartObserving

    https://github.com/MothCocoon/FlowGraph/blob/679a01da58885d4034f430a39ef275cd4cbae510/Source/Flow/Private/Nodes/World/FlowNode_ComponentObserver.cpp#L65

    Sorry for not doing this as a pull request, but I ended up making a very simple modification to the above section of code in a slightly older version of Flow Graph (the important part is just checking after ObserveActor() ).

    		for (const TWeakObjectPtr<UFlowComponent>& FoundComponent : FlowSubsystem->GetComponents<UFlowComponent>(IdentityTags, EGameplayContainerMatchType::Any))
    		{
    			ObserveActor(FoundComponent->GetOwner(), FoundComponent);
    			
    			// node might finish work as the effect of triggering event on the found actor
    			// we should terminate iteration in this case
    			if (GetActivationState() != EFlowNodeState::Active) { return; }
    		}
    
    bug fix 
    opened by lfowles 3
  • Add hard actor references

    Add hard actor references

    I'm using multiple flow in the streamed level with multiple instances of this level. Because of that grouping actors by tag isn't viable for me So I've modified the asset to accept actor bindings aka LevelSequence

    Any plans on implementing this?

    Here is how it looks in my project Screenshot 2022-01-21 182639 Screenshot (5)

    won't do 
    opened by Bargestt 3
  • Fix user can delete Start node.

    Fix user can delete Start node.

    This PR fixes deleting of Start node. It is also possible to set this setting per Flow Node instead of Flow Graph Node eliminating the need of creating additional Flow Graph Node classes if you don't want the node to be deleted or duplicated.

    bug fix 
    opened by ryanjon2040 3
  • Execute any pin in a Flow Graph externally from Bluprint

    Execute any pin in a Flow Graph externally from Bluprint

    From any Blueprint you can call this node to execute a specific input pin in Flow Graph. Keep in mind that this node does not respect bAllowMultipleInstances.

    1

    new feature 
    opened by ryanjon2040 3
  • "Handled ensure" Error On Create a new Flow Node Blueprint child from a "Flow Node" parent

    If you create a new Flow Node Blueprint child from another Flow Node parent class, the editor shows a "Handled ensure" red error right after doing it & always on project start from that moment when a Flow Asset is opened, here it is:

    LogOutputDevice: Error: === Handled ensure: === LogOutputDevice: Error: Ensure condition failed: QueuedRequests.Num() == 0 [File:D:/Build/++UE4/Sync/Engine/Source/Editor/Kismet/Private/BlueprintCompilationManager.cpp] [Line: 251] LogOutputDevice: Error: Stack: LogOutputDevice: Error: [Callstack] 0x00007ff9ae3e4289 UE4Editor-Kismet.dll!<lambda_49c80b9764981542cc725e1994a18875>::operator()() [D:\Build\++UE4\Sync\Engine\Source\Editor\Kismet\Private\BlueprintCompilationManager.cpp:251] LogOutputDevice: Error: [Callstack] 0x00007ff9add4bec5 UE4Editor-Kismet.dll!FBlueprintCompilationManagerImpl::CompileSynchronouslyImpl() [D:\Build\++UE4\Sync\Engine\Source\Editor\Kismet\Private\BlueprintCompilationManager.cpp:251] LogOutputDevice: Error: [Callstack] 0x00007ff9add4bd71 UE4Editor-Kismet.dll!FBlueprintCompilationManager::CompileSynchronously() [D:\Build\++UE4\Sync\Engine\Source\Editor\Kismet\Private\BlueprintCompilationManager.cpp:3095] LogOutputDevice: Error: [Callstack] 0x00007ff9afe32e1a UE4Editor-UnrealEd.dll!FKismetEditorUtilities::CreateBlueprint() [D:\Build\++UE4\Sync\Engine\Source\Editor\UnrealEd\Private\Kismet2\Kismet2.cpp:527] LogOutputDevice: Error: [Callstack] 0x00007ff99456bfba UE4Editor-FlowEditor.dll!UFlowNodeBlueprintFactory::FactoryCreateNew() [E:\Project Test Field\FlowGraph_427_BP\Plugins\FlowGraph_427_Precompiled\Source\FlowEditor\Private\Nodes\FlowNodeBlueprintFactory.cpp:259] LogOutputDevice: Error: [Callstack] 0x00007ff9a7571685 UE4Editor-AssetTools.dll!UAssetToolsImpl::CreateAsset() [D:\Build\++UE4\Sync\Engine\Source\Developer\AssetTools\Private\AssetTools.cpp:485] LogOutputDevice: Error: [Callstack] 0x00007ff9935a46ad UE4Editor-ContentBrowserAssetDataSource.dll!UContentBrowserAssetDataSource::OnFinalizeCreateAsset() [D:\Build\++UE4\Sync\Engine\Plugins\Editor\ContentBrowser\ContentBrowserAssetDataSource\Source\ContentBrowserAssetDataSource\Private\ContentBrowserAssetDataSource.cpp:1904] LogOutputDevice: Error: [Callstack] 0x00007ff99357c0b3 UE4Editor-ContentBrowserAssetDataSource.dll!TBaseUObjectMethodDelegateInstance<0,UContentBrowserAssetDataSource,FContentBrowserItemData __cdecl(FContentBrowserItemData const &,FString const &,FText *),FDefaultDelegateUserPolicy>::Execute() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Core\Public\Delegates\ DelegateInstancesImpl.h:593] LogOutputDevice: Error: [Callstack] 0x00007ff9a8155a83 UE4Editor-ContentBrowserData.dll!FContentBrowserItemTemporaryContext::FinalizeItem() [D:\Build\++UE4\Sync\Engine\Source\Editor\ContentBrowserData\Private\ContentBrowserItem.cpp:603] LogOutputDevice: Error: [Callstack] 0x00007ff9a7d48146 UE4Editor-ContentBrowser.dll!SAssetView::EndCreateDeferredItem() [D:\Build\++UE4\Sync\Engine\Source\Editor\ContentBrowser\Private\SAssetView.cpp:641] LogOutputDevice: Error: [Callstack] 0x00007ff9a7d147eb UE4Editor-ContentBrowser.dll!SAssetView::AssetRenameCommit() [D:\Build\++UE4\Sync\Engine\Source\Editor\ContentBrowser\Private\SAssetView.cpp:3627] LogOutputDevice: Error: [Callstack] 0x00007ff9a7d5a8ff UE4Editor-ContentBrowser.dll!TBaseSPMethodDelegateInstance<0,SAssetView,0,void __cdecl(TSharedPtr<FAssetViewItem,0> const &,FString const &,FSlateRect const &,enum ETextCommit::Type),FDefaultDelegateUserPolicy>::ExecuteIfSafe() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Core\Public\Delegates\DelegateInst ancesImpl.h:307] LogOutputDevice: Error: [Callstack] 0x00007ff9a7d7ad7b UE4Editor-ContentBrowser.dll!SAssetViewItem::HandleNameCommitted() [D:\Build\++UE4\Sync\Engine\Source\Editor\ContentBrowser\Private\AssetViewWidgets.cpp:528] LogOutputDevice: Error: [Callstack] 0x00007ff9a7d59b27 UE4Editor-ContentBrowser.dll!TBaseSPMethodDelegateInstance<0,SAssetTileItem,0,void __cdecl(FText const &,enum ETextCommit::Type),FDefaultDelegateUserPolicy>::ExecuteIfSafe() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Core\Public\Delegates\DelegateInstancesImpl.h:307] LogOutputDevice: Error: [Callstack] 0x00007ff9c32f4164 UE4Editor-Slate.dll!SInlineEditableTextBlock::OnTextBoxCommitted() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Slate\Private\Widgets\Text\SInlineEditableTextBlock.cpp:323] LogOutputDevice: Error: [Callstack] 0x00007ff9c32d91e7 UE4Editor-Slate.dll!TBaseSPMethodDelegateInstance<0,SInlineEditableTextBlock,0,void __cdecl(FText const &,enum ETextCommit::Type),FDefaultDelegateUserPolicy>::ExecuteIfSafe() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Core\Public\Delegates\DelegateInstancesImpl.h:307] LogOutputDevice: Error: [Callstack] 0x00007ff9c32804c8 UE4Editor-Slate.dll!SEditableTextBox::OnEditableTextCommitted() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Slate\Private\Widgets\Input\SEditableTextBox.cpp:482] LogOutputDevice: Error: [Callstack] 0x00007ff9c325f5a7 UE4Editor-Slate.dll!TBaseSPMethodDelegateInstance<0,SEditableTextBox,0,void __cdecl(FText const &,enum ETextCommit::Type),FDefaultDelegateUserPolicy>::ExecuteIfSafe() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Core\Public\Delegates\DelegateInstancesImpl.h:307] LogOutputDevice: Error: [Callstack] 0x00007ff9c32e1c76 UE4Editor-Slate.dll!FSlateEditableTextLayout::HandleCarriageReturn() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Slate\Private\Widgets\Text\SlateEditableTextLayout.cpp:1519] LogOutputDevice: Error: [Callstack] 0x00007ff9c32e3088 UE4Editor-Slate.dll!FSlateEditableTextLayout::HandleKeyDown() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Slate\Private\Widgets\Text\SlateEditableTextLayout.cpp:967] LogOutputDevice: Error: [Callstack] 0x00007ff9c31e1114 UE4Editor-Slate.dll!SEditableText::OnKeyDown() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Slate\Private\Widgets\Input\SEditableText.cpp:212] LogOutputDevice: Error: [Callstack] 0x00007ff9c3032112 UE4Editor-Slate.dll!FEventRouter::Route<FReply,FEventRouter::FBubblePolicy,FKeyEvent,<lambda_f630e7f24dbef73857a69219e32f2d96> >() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Slate\Private\Framework\Application\SlateApplication.cpp:383] LogOutputDevice: Error: [Callstack] 0x00007ff9c3095087 UE4Editor-Slate.dll!FSlateApplication::ProcessKeyDownEvent() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Slate\Private\Framework\Application\SlateApplication.cpp:4341] LogOutputDevice: Error: [Callstack] 0x00007ff9c3088756 UE4Editor-Slate.dll!FSlateApplication::OnKeyDown() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Slate\Private\Framework\Application\SlateApplication.cpp:4238] LogOutputDevice: Error: [Callstack] 0x00007ff9f738bcc8 UE4Editor-ApplicationCore.dll!FWindowsApplication::ProcessDeferredMessage() [D:\Build\++UE4\Sync\Engine\Source\Runtime\ApplicationCore\Private\Windows\WindowsApplication.cpp:2040] LogOutputDevice: Error: [Callstack] 0x00007ff9f73792b7 UE4Editor-ApplicationCore.dll!FWindowsApplication::DeferMessage() [D:\Build\++UE4\Sync\Engine\Source\Runtime\ApplicationCore\Private\Windows\WindowsApplication.cpp:2698] LogOutputDevice: Error: [Callstack] 0x00007ff9f738e465 UE4Editor-ApplicationCore.dll!FWindowsApplication::ProcessMessage() [D:\Build\++UE4\Sync\Engine\Source\Runtime\ApplicationCore\Private\Windows\WindowsApplication.cpp:1881] LogOutputDevice: Error: [Callstack] 0x00007ff9f7374410 UE4Editor-ApplicationCore.dll!FWindowsApplication::AppWndProc() [D:\Build\++UE4\Sync\Engine\Source\Runtime\ApplicationCore\Private\Windows\WindowsApplication.cpp:905] LogOutputDevice: Error: [Callstack] 0x00007ffa13d5e7e8 USER32.dll!UnknownFunction [] LogOutputDevice: Error: [Callstack] 0x00007ffa13d5e229 USER32.dll!UnknownFunction [] LogOutputDevice: Error: [Callstack] 0x00007ff9f738fcd4 UE4Editor-ApplicationCore.dll!FWindowsPlatformApplicationMisc::PumpMessages() [D:\Build\++UE4\Sync\Engine\Source\Runtime\ApplicationCore\Private\Windows\WindowsPlatformApplicationMisc.cpp:125] LogOutputDevice: Error: [Callstack] 0x00007ff788917621 UE4Editor.exe!FEngineLoop::Tick() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Launch\Private\LaunchEngineLoop.cpp:4851] LogOutputDevice: Error: [Callstack] 0x00007ff788930fbc UE4Editor.exe!GuardedMain() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Launch\Private\Launch.cpp:178] LogOutputDevice: Error: [Callstack] 0x00007ff7889310aa UE4Editor.exe!GuardedMainWrapper() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:137] LogOutputDevice: Error: [Callstack] 0x00007ff7889340cd UE4Editor.exe!LaunchWindowsStartup() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:273] LogOutputDevice: Error: [Callstack] 0x00007ff788945984 UE4Editor.exe!WinMain() [D:\Build\++UE4\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:320] LogOutputDevice: Error: [Callstack] 0x00007ff78894853a UE4Editor.exe!__scrt_common_main_seh() [d:\agent\_work\5\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288] LogOutputDevice: Error: [Callstack] 0x00007ffa12cc7034 KERNEL32.DLL!UnknownFunction [] LogOutputDevice: Error: [Callstack] 0x00007ffa14ba2651 ntdll.dll!UnknownFunction []

    bug fix 
    opened by JimPhoenix 3
  • Adds a flow graph component and implement world settings using this component for re-usability

    Adds a flow graph component and implement world settings using this component for re-usability

    I was thinking about it, and I think it might be better to have a component that owns a flow asset and registers it automatically to the subsystem. This way, we can re-use the logic within the world settings anywhere a flow asset is needed. What do you think?

    new feature 
    opened by sturcotte06 3
  • Tightly integrate Asset Search with Flow Graphs

    Tightly integrate Asset Search with Flow Graphs

    1. Requires engine change, allowing filtering Asset Search by file types - i.e. ignoring search in materials when only need Flow Graph results.
    2. Add shortcuts and UI allowing to utilize Asset Search from the Flow Graph editor.
    new feature 
    opened by MothDoctor 1
Releases(v1.3-5.1)
python scripting engine for the gd editor

Python interpreter embedded into the game Geometry Dash, designed for helping people automate tasks for creating

camila 8 Feb 24, 2022
Creating Unreal Engine infinite landscapes/oceans using the editor shader graph and rendering them using Geometry ClipMap. It also allows to spawn mesh on landscape surface. UE5 required

Procedural Landscapes and Oceans in Unreal Engine 5 using Editor Shader Graph Latest version of this project is available as a plugin for UE 4.26+ on

Maxime Dupart 10 Oct 4, 2021
Mobile Studio tool integration with C# scripting for the Unity game engine.

Mobile Studio Package This project is a Unity package for integrating the Mobile Studio tool suite into game development workflows. This version of th

Arm Software 76 Dec 7, 2022
Improved version of the X-Ray Engine, the game engine used in the world-famous S.T.A.L.K.E.R. game series by GSC Game World.

OpenXRay OpenXRay is an improved version of the X-Ray Engine, the game engine used in the world-famous S.T.A.L.K.E.R. game series by GSC Game World. S

null 2.2k Jan 1, 2023
A Vulkan game engine with a focus on data oriented design

The Fling Engine aims to be a cross platform Vulkan game engine that will experiment with the following: Low-level engine systems such as render API a

Fling Engine 316 Jan 7, 2023
Third-person survival game for Unreal Engine 4 made entirely in C++.

Third-person survival game for Unreal Engine 4 made entirely in C++. Originally built as a 6 section tutorial series, now available as open-source C++ sample project.

Tom Looman 2.8k Dec 30, 2022
Building Escape is a simple room escape game made with Unreal Engine 4.27 and C++.

Building-Escape Building Escape is a simple room escape game made with Unreal Engine and C++. The main purpose of the game is to find a way to escape

Christine Coomans 2 Dec 13, 2021
Shows Unreal Engine logs in-game using ImGui

BYG Imgui Logger Displays Unreal's UE_LOG output in an ImGui window. Heavily based on the Console example from imgui_demo.cpp included with ImGui. Fea

Brace Yourself Games 46 Dec 16, 2022
Unreal Engine 4 vulnerability, that allows you to run shellcode directly into the target game process.

Unreal Engine 4 vulnerability, that allows you to run shellcode directly into the target game process, to load any DLL undetected from most game anti cheats, such as Easy Anti Cheat, BattleEye, Ricochet, Vanguard, ATG, and more.

Zebratic 49 Jan 4, 2023
Plugin to generate landscapes and oceans from the Unreal editor shader graph. Supports collisions, assets spawning, landscape layers. UE 4.26 / 4.27 / 5.0

Procedural Landscapes and Oceans as a plugin for unreal engine 4.26/4.27/5.0 using Editor Shader Graph Using the Editor Shader Graph, creating landsca

Maxime Dupart 2 Dec 12, 2022
A scripting language created mainly for game engines

HCode Hammurabi's Code A scripting language created for the use in games and game engines. Currently supported features and roadmap Structs Functions

null 4 Oct 11, 2020
Game Scripting Languages benchmarked

Scriptorium ?? Game Scripting Languages benchmarked. Using latest versions at the time of writing (Jul 2015) Total solutions evaluated: 50 Results Ran

null 482 Jan 7, 2023
CLUSEK-RT is a complex game engine written in C++ and the successor of the CLUSEK game engine

CLUSEK-RT is a complex game engine written in C++ and the successor of the CLUSEK game engine. This engine has been designed with a cross-platform design in mind. Thanks to Vulkan API it delivers a next-gen experience with ray tracing to both Linux and Windows platforms

Jakub Biliński 48 Dec 29, 2022
Ground Engine is an easy to use Game Engine for 3D Game Development written in C++

Ground Engine is an easy to use Game Engine Framework for 3D Game Development written in C++. It's currently under development and its creation will b

 PardCode 61 Dec 14, 2022
A Tiny 2D OpenGL based C++ Game Engine that is fast, lightweight and comes with a level editor.

A Tiny 2D OpenGL based C++ Game Engine that is fast, lightweight and comes with a level editor.

Samuel Rasquinha 59 Jan 3, 2023
Full source code for WarriOrb, a Dark-Souls like action platformer - using Unreal Engine 4

WarriOrb source code WarriOrb is a hardcore action platformer where you play as a demon who is trapped in an unlikely body. The game mixes the difficu

Not Yet 247 Dec 30, 2022
Niagara UI Renderer | Free Plugin for Unreal Engine 4

Niagara UI Renderer | Free Plugin for Unreal Engine 4 Niagara UI Plugin adds Niagara Particle System Widget that allows you to render Niagara particle

null 156 Dec 19, 2022
RenderStream plugin for Unreal Engine

This project relies on http://disguise.one software to function. For the plugin setup process - please see https://help.disguise.one/Content/Configuri

disguise 41 Dec 19, 2022
Simple CSV localization system for Unreal Engine 4

BYG Localization We wanted to support fan localization for Industries of Titan and found that Unreal's built-in localization system was not exactly wh

Brace Yourself Games 56 Dec 8, 2022