New: Support for Visual Studio Code
Pass "-vscode" to GenerateProjectFiles in order to create a set of task/launch/cppconfig files that can be used by Visual Studio Code to build and debug Unreal Engine projects
A new source code access plugin that will allow the opening of projects and source files in Visual Studio Code
New: Chromium Embedded Framework (CEF) upgraded to branch 3071 Win32/Win64/Mac. Added web browser support for foreign language character input via IME.
Core: Various improvements to FTimespan
Core: Added scalar division to FTimespan
Core: Added TLruCache template for least-recently used caches
Core: Added FTimespan::Ratio
Changed the default sorting algorithm to intro sort. - Algo::Sort and ::Sort will call Algo::IntroSort - The sort version that was in Algo::Sort is now in Algo::LegacySort
Added the ability to verify the DDC content is not stale. Systems have to opt in (-VerifyDDC).
Fixed documentation comments for FName inequality operator.
Fixed incorrect definition of DECLARE_DELEGATE_NineParams, DECLARE_MULTICAST_DELEGATE_NineParams macros.
Added FString::ToUpper() and FString::ToLower() rvalue overloads for improved efficiency.
Improved UnrealHeaderTool to support multiple interface definitions in a single header.
Improved UnrealHeaderTool's error message when unsupported template parameters are provided in a TSet property.
Improved Intellisense when generated headers are missing or out of date (eg. line numbers changed, etc...). These errors seem to be masked by VAX, but are present when using the default Visual Studio Intellisense. _ UCLASS macro is defined to empty when INTELLISENSE is defined. Previous macro was preventing any following class declaration being parsed correctly if generated code was out of date, causing squiggles over all class methods/variables. _ Insert a semicolon after each expanded GENERATED_BODY macro, so that if it parses incorrectly, the compiler can still continue parsing the next declaration.
Added container modification checks to ranged-for loops which are iterating over TMap, TSet and TSparseArray.
Added code to verify compression flags in package file summary to avoid cases where corrupt packages are crashing the editor
Added a batch file to Engine/Build/BatchFiles for detecting and running MSBuild
Added VisitTupleElements, which calls the given functor with each element in the tuple.
Improved UnrealHeaderTool's error message when multiple types with the same name are found.
Changed the logic so that engine UObjects boot before anything else. The engine classes are known to be cycle-free, so we will get them done before moving onto game modules.
UENUM enumerator initializers can now be arbitrary C++ constants, including values which are not parsed by UnrealHeaderTool (e.g. values from third party headers). However, script generator plugins will not have access to these values at script-generation time. Added support for editor-only data UENUMs. Fixed multiple MAX values being generated for UENUMs which already define a MAX.
Logging improvements for pak signature check failures
Split RunExternalExecutable into RunExternaNativelExecutable and RunExternalDotNETExecutable
Added editor support for packages cooked with the Event Driven Loader enabled.
Added validation that arguments passed to the checkf macro are valid sprintf types, and fix up a few places which are currently incorrect.
When creating GC clusters and asserting due to objects still being pending load, the object name and cluster name will now be logged with the assert.
Added FBase64::GetDecodedDataSize() to determine the size of bytes of a decoded base64 string
PR #3847: Add GC callbacks for script integrations (Contributed by mhutch)
Added support for displaying log timestamps in local time. Set LogTimes=Local in *Engine.ini, or pass -LocalLogTimes on the command line.
Various changes to Unreal Build Tool and DotNETUtilities assemblies to help support building and executing on the .NET Core 2.0 platform
Added ENABLE_GC_OBJECT_CHECKS macro to be able to quickly toggle UObject pointer checks in shipping builds when the garbage collector is running.
Fixed a race condition with the async loading thread enabled caused by missing linker object.
PR #3839: Make non-encoding specific Base64 functions accessible (Contributed by stfx)
Moved some common C# classes into the DotNETCommon assembly
FString::Trim() and FString::TrimTrailing() have been replaced with separate versions to mutate (TrimStartInline(), TrimEndInline()) or return by copy (TrimStart(), TrimEnd()).
Allow the network version to be set via Build.version if it's not overriden from Version.h.
UBT - Add a ToString to ProjectFile.Source file to help with debugger watch presentation
Plugins may now specify a list of supported target platforms, which are propagated to any .uproject file that enables it. This has several advantages over the per-module platform whitelist/blacklist: _ Platform-specific .uplugin files can now be excluded when staging other platforms. Previously, it was only possible to determine which platforms a plugin supports by reading the plugin descriptor itself. Now that information is copied into the .uproject file, so the runtime knows which plugins to ignore. _ References to dependent plugins from platform-specific plugins can now be eliminated. _ Plugins containing content can now be unambiguously disabled on a per-platform basis (having no modules for a platform does not confer that a plugin doesn't support that platform; now it is possible to specify supported platforms explicitly). _ The editor can load any plugins without having to whitelist supported editor host platforms. UE4 targets which support loading plugins for target platforms can set TargetRules.bIncludePluginsForTargetPlatforms (true for the editor by default, false for any other target types). This defines the LOAD_PLUGINS_FOR_TARGET_PLATFORMS macro at runtime, which allows the plugin system to filter which plugins to look for at runtime. Any .uproject file will be updated at startup to contain the list of supported platforms for each referenced plugin if necessary.
Fixed lazy object pointers not being updated for streaming sub-levels in PIE. Fixed lazy pointers returning object that is still being loaded which could lead to undefined behavior when client code started modifying the returned object.
PR #3760: Fix typo (Contributed by jesseyeh)
Made MoveTemp static assert when called on a const reference or rvalue, to allow inefficiencies to be tracked more easily. Added MoveTempIfPossible which follows the earlier behavior, which is still useful for templates and macros where it's unclear if the argument is valid.
Removed the extraneous subfolder when writing out .mprof files.
Fix non-thread safe construction of FPluginManager singleton. Length of time spent in the constructor resulted in multiple instances being constructed at startup, making the time to enumerate plugins on slow media significantly worse.
Optimizations to SignedArchiveReader
Improved assert message when the initial package read request was too small.
Made max package summary size to be configurable with ini setting
Add support for a "Mods" folder distinct from the project's "Plugins" folder, instead of using the bIsMod flag on the plugin descriptor. _ Mods are enumerated similarly to regular plugins, but IPlugin::GetType() will return EPluginType::Mod. _ The DLCName parameter to BuildCookRun and the cooker now correctly finds any plugin in the Plugins or Mods directory (or any subfolders).
Added a new TArray constructor that takes a raw pointer and a count. Improved checks inside TArray::Append() to allow nullptr in empty ranges.
UDataTable::AddReferencedObjects will no longer try to iterate over the RowMap if there's no UObject references in it.
Custom Version Container will no longer be always constructed in FArchive constructor. This reduces the number of the Custom Version Container allocations considerably.
Removed obsolete code for UHT makefiles.
Moved FSimpleObjectReferenceCollectorArchive and FSimpleObjectReferenceCollectorArchive to be internal archives used only by FReferenceCollector so that they are constructed only once per GC task instead of potentially multiple times per GC (as was the case with UDataTables and BlueprintGeneratedClasses).
Added new AllOf, AnyOf and NoneOf algorithms.
Shrunk size of code generated by UnrealHeaderTool, around 10% of Win64 executable size.
Deprecate /-prefixed commandline switches as they cannot be distinguished from absolute file paths on Linux/Mac.
Bitfield properties can now be exposed on spawn.
FName now works correctly with Lex::To/FromString.
Add ability to pass option flags to ActorIterator to enable searching non-active levels
Moved the Hamming-weight function from StaticMeshDrawList.inl to FGenericPlatformMath Added SSE versions using _mm_popcnt_u64 for platforms that support it Added a SSE check to gracefully exit when missing the instruction and it was expected to be there
Fixed stale modules being enumerated when running UE4Editor-Cmd.exe.
Fix DECLARE_LOG_CATEGORY_EXTERN requiring a trailing semicolon if NO_LOGGING is defined.
Added a packaging setting that allows the user to choose whether or not to build the game executable. Includes a setting to build the executable only if not using a promoted build ("Only if locally built editor"). The same option has to the "Play" settings in the editor. This allows developers that want to submit game binaries to Perforce to configure the engine to use it without building anything.
Bug Fix: Core: Fixed FTimespan import/export/copypaste (UE-43990)
Bug Fix: Fixed custom mesh component bounds being computed incorrectly.
Bug Fix: Fixed the deserialization of integer properties, which would cause a guaranteed property mismatch each time and an inefficient tag lookup. Added support for converting double and float properties to int properties. Fixed conversion of enum class properties to int properties when their value is greater than 255.
Bug Fix: UBT - Minor refactor of BackgroundProcess shutdown in SourceFileWorkingSet. Check whether the process has already exited before trying to kill it during Dispose.
Bug Fix: Move pre/post garbage collection delegates into accessor functions so they can be used by globally constructed objects
Bug Fix: Build fixes for when malloc profiler is enabled
Bug Fix: Fixed parsing error in UnrealHeaderTool when a class name is fully capitalized.
Bug Fix: Fixed bad code generation in UnrealHeaderTool when passing a TMap to a BlueprintCallable function.
Bug Fix: Fixed FPaths::GetProjectFilePath() to return a value instead of a reference, for thread safety reasons.
Bug Fix: Fixed TTuple visualization in the Visual Studio debugger.
Bug Fix: Fixed a race condition with async read completion in the prescence of cancels.
Bug Fix: Fixed some incorrect EObjectFlags use due to implicit conversions.
Bug Fix: Follow up to fixing several edge cases in the low level async loading code.
Bug Fix: Fixed several edge cases in the low level async loading code, especially around cancellation. Also PakFileTest is a console command which can be used to stress test pak file loading.
Bug Fix: Marking UObject as intrinsic clas to fix a potential crash on Unreal Frontend startup.
Bug Fix: UBT - Correct direction of slash in global named mutex creation
Bug Fix: Fixed Visual Studio debugger visualizers for containers whose elements are pointers which aren't syntactically like Type*.
Bug Fix: Fixed UFunctions disappearing from Blueprints after a hot reload.
Bug Fix: Fixed a buffer overrun in TChunkedArray ranged-for iteration.
Bug Fix: After loading packages the engine will flush linker cache on uncooked platforms to free precache memory
Bug Fix: Include 'ExeBinariesSubFolder' in nmake target path for vcproj files if it exists
Bug Fix: Material resources will now be discarded in PostLoad (Game Thread) instead of in Serialize (potentially Async Loading Thread) so that shader deregistration doesn't assert when done from a different thread than the game thread.
Bug Fix: Fixed nested preprocessor block parsing in UnrealHeaderTool.
Bug Fix: MaterialInstanceCollections will no longer be added to GC clusters to prevent materials staying around in memory for too long
Bug Fix: Fixed a race condition in async package reference counting when the async loading thread is enabled.
Bug Fix: Fixed Japanese errors not displaying correctly in the cook output log.
Bug Fix: Fixed a critical race in the pak precacher.
Bug Fix: Fixed critical race which potentially could cause a crash in the pak precacher.
Bug Fix: Fixed a critical race condition in the new async loader. This was only reproducible on IOS, but may affect other platforms.
Bug Fix: Fixed a critical crash bug relating to a race condition in async package summary reading.
Bug Fix: Fixed a crash on UnrealFrontend startup caused by re-assembling GC token stream for one of the classes.
Bug Fix: Fixed a critical crash bug with non-EDL loading from pak files.
Bug Fix: Fixed the error message in FAsyncPackage::AddObjectReference to refer to the correct scope guard class.
Bug Fix: Added missing PF_ATC_RGBA_I into FOREACH_ENUM_EPIXELFORMAT.
Bug Fix: Fixed a crash in the taskgraph when running single threaded
Bug Fix: Fixed FScopedMallocProfilerLock to be properly non-copyable.
Bug Fix: Forced a garbage collection after a hot reload to clean up reinstanced objects which may still be registered to tick.
Bug Fix: Fixed bad codegen when TAssetPtrs are passed into BlueprintImplementableEvent functions.
Bug Fix: Disabled MallocBinned2 stat collection in shipping builds.
Bug Fix: System error dialogs when loading DLLs are now suppressed if -unnattended is on the command line.
Bug Fix: Added MemoryProfiler2 to the generated project files.
Bug Fix: Fix rare assert involving cancelled precache requests and non-pak-file loading.
Bug Fix: Fixed compile errors caused by incorrect line numbers when parsing multiline macros in UnrealHeaderTool.
Bug Fix: Fixed a compile error when attempting to serialize a TUnion.
Bug Fix: Fixed mismatched stat categories warnings in AudioMixer.
Bug Fix: Fixed EObjectFlags' operators so that they can now be used in constexpr contexts.
Bug Fix: Made sure the Super Class token stream is also locked when assembling Class token stream with async loading thread enabled. This to to prevent race conditions when loading BP classes.
Bug Fix: Fixed a crash caused by recursion guard being enabled with the old async loading path but it should only be active with the Event Driven Loader.
Bug Fix: Fixed generated indices of static arrays when saving config files.
Bug Fix: Made servers not to link to CEF3 (even if otherwise enabled).
Bug Fix: Fix several crashes while incremental cooking if the source content is heavily changed
Bug Fix: Change it so Editor builds work like cooked builds when loading packages that are already in memory, it will now reuse them instead of trying to recreate them in place. This fixes several PIE crashes.
Bug Fix: Fix issue where IsEditorOnlyObject would return false for objects with editor only classes or outers. There is now a recursive check option that defaults to true.
Bug Fix: Reduced the chance of .RC file compilation errors by reducing the number of defines passed in on the command line (excluding definitions that contain "_API")
Bug Fix: Removed any deprecated code older than 4.10 that didn't affect content compatibility
Bug Fix: Prevent FScopedExternalProfilerBase::StopScopedTimer() from asserting if called an unmatched number of times with StartScopedTimer, as both are exposed to Blueprints
Bug Fix: Class Properties are only identical if they are literally the same object. Do not consider the deep compare port flags as object property base does.
Bug Fix: Changed ensureAsRuntimeWarning to just evaluate to the expression when USING_CODE_ANALYSIS is true (matching the behavior of ensure() and preventing false positive errors in static analyzers)
Bug Fix: Fix issues where using Launch multiple times during one editor session would not pick up all modified files
Bug Fix: Fixed error writing files to disk with long package names, due to attempting to create an intermediate file with a GUID appended.
Bug Fix: Fixed +Array=... and .Array=... config syntax (unique/non-unique addition) having opposite meaning.
Bug Fix: Fix memory corruption crash when using the StreamableManager when the async loading thread is enabled via ini
Bug Fix: Fixed console output not working when using -log in a shipping build
Bug Fix: Fixed hot reload not considering dependent modules when rebinding a package (e.g. after adding a new class to one). Fixed FMacPlatformProcess::GetDllApiVersion() returning a valid version number for a missing module.
Bug Fix: Fix bug where requesting an async load with StreamableManager from a PostLoad could return a partially loaded object, it now queues up to wait for it to properly load
Bug Fix: Fixed crashes when accessing console variables with the async loading thread enabled
Bug Fix: Fixed a crash when recompiling the Graph Editor module in the editor.
Bug Fix: Fixed crash when adding a new native feature pack to a Blueprint project for the first time.