Download

(39) Rama's Extra Blueprint Nodes for You as a Plugin, No C++ Required!

Yeah got an answer on answerhub already. Packaging is failing in 4.8 - UE4 AnswerHub

Packaging Plugins for upgraded project in 4.8, Workaround

Dear Community,

Here’s the solution to the packaging with plugins errors that Tekoppar posted:


**Epic Response on Answerhub**


[QUOTE=Epic Staff Pete;309191]

Ok, there is definitely an issue in 4.8. We're looking in to a fix. In the meantime, you can fix the issue by the following:

Create a new code-based project (the template chosen doesn't matter, I chose FPS)

After the newly created project has been opened in the editor, use explorer to browse to the location of that project on your computer

Search for PCLaunch.rc.res in that project (it will be found in the Intermediate directory)

Copy that file to /Engine/Intermediate/Build/Win64/Development/Launch/ and/or /Engine/Intermediate/Build/Win32/Development/Launch/ (you may have to make the Launch directory)

Open the broken project

Uncheck Rebuild in the Package Settings

Package should now work

Not ideal, but should get you unbroken and still be able to have the enabled plugins.

-Pete

[/QUOTE]


**Full Thread**
https://answers.unrealengine.com/questions/241581/packaging-is-failing-in-48.html


:)

Rama

Hey,

I’m using the file from your link, also working on 4.8.0 version.
BP nodes are working fine, but vertex snap editor just doesn’t show up, I’m selecting static meshes but no Victory Editor HotKeys button shows up, no vertices are being highlighted.
I tried toggling it on and off, etc. nothing helps. I also deleted engine cache just to be sure.

Hi there!

To enable my Vertex Snap Editor you need to make a change to your DefaultEngine.ini!

Installation Instructions

Enjoy!

Rama

Array ~ Valid Index & Get Actor Time Alive & Get Actor Creation Time

TimeAlive and CreationTime

b2e56d51c00aef1532aad0a13d6e6656cc00598d.jpeg

The above nodes let you know when a particular Actor was created (World Seconds) and for how many seconds an actor has been alive!


**Valid Index (Array)**

![ValidIndex.jpg|1280x960](upload://6XEK2boqLAfOT0v5UH4eosnn1Jq.jpeg)

This node let's you always know in advance if a particular index is valid for your chosen array!

This node simplifies the process of protecting against "array out of bounds" errors with arrays!

Many thanks to Kris for contributing these nodes!

:)

Rama

Thank you Rama and Kris for the new nodes.
This entire BP suite makes working more convenient with every update!
Thank you again Rama for working on this!

@Rama - I’m getting these errors when I try and compile the 4.8 plugin:

As far as I can tell the methods do exist. I’ve tried cleaning, rebuilding etc. This is with the launcher engine rather than a Github one.


1>------ Rebuild All started: Project: OceanProject, Configuration: DebugGame_Editor x64 ------
2>------ Skipped Rebuild All: Project: UE4, Configuration: BuiltWithUnrealBuildTool Win32 ------
2>Project not selected to build for this solution configuration 
1>  Cleaning OceanProjectEditor Binaries...
1>  Parsing headers for OceanProjectEditor
1>  Reflection code generated for OceanProjectEditor
1>  Performing 47 actions (4 in parallel)
1>  PCH.VictoryEdEngine.VictoryEdEnginePCH.h.cpp
1>  PCH.OceanPlugin.OceanPluginPrivatePCH.h.cpp
1>  PCH.OceanProject.OceanProject.h.cpp
1>  PCH.VictoryBPLibrary.VictoryBPLibraryPrivatePCH.h.cpp
1>  DummyPackagedBuildClass.cpp
1>  OceanPlugin.generated.cpp
1>  CustomVehicleController.cpp
1>  TerrainGenerationWorker.cpp
1>C:\Users\r\Documents\Unreal Projects\OceanProject 4.8\Plugins\OceanPlugin\Source\OceanPlugin\Private\Terrain\TerrainGenerationWorker.cpp(31): warning C4996: 'FRunnableThread::Create': Function deprecated. Use FRunnableThread::Create without bAutoDeleteSelf and bAutoDeleteRunnable params and delete thread and runnable manually. Please update your code to the new API before upgrading to the next release, otherwise your project will no longer compile.
1>          C:\Program Files\Epic Games\4.7\Engine\Source\Runtime\Core\Public\HAL\ThreadingBase.h(263) : see declaration of 'FRunnableThread::Create'
1>  ProceduralTerrain.cpp
1>  BuoyantDestructible.cpp
1>  FlockFish.cpp
1>  FishState.cpp
1>  FishManager.cpp
1>  MarchingCubes.cpp
1>  VictoryBPLibrary.generated.cpp
1>  VictoryPC.cpp
1>  TKMathFunctionLibrary.cpp
1>  VictoryBPFunctionLibrary.cpp
1>  VictoryEdEngine.cpp
1>C:\Program Files\Epic Games\4.7\Engine\Source\Runtime\Slate\Public\Slate.h(5): warning C4996: including Slate.h is deprecated. Please include SlateBasics.h and then individual widget headers instead.
1>  VictoryEdEngine.generated.cpp
1>  VictoryEdAlignMode.cpp
1>C:\Users\r\Documents\Unreal Projects\OceanProject 4.8\Plugins\VictoryPlugin\Source\VictoryEdEngine\Private\VictoryEdAlignMode.cpp(484): error C2039: 'LineTraceSingleByChannel' : is not a member of 'UWorld'
1>          C:\Program Files\Epic Games\4.7\Engine\Source\Runtime\Engine\Classes\Engine/World.h(503) : see declaration of 'UWorld'
1>C:\Users\r\Documents\Unreal Projects\OceanProject 4.8\Plugins\VictoryPlugin\Source\VictoryEdEngine\Private\VictoryEdAlignMode.cpp(853): error C2039: 'LineTraceSingleByChannel' : is not a member of 'UWorld'
1>          C:\Program Files\Epic Games\4.7\Engine\Source\Runtime\Engine\Classes\Engine/World.h(503) : see declaration of 'UWorld'
1>  VictoryEdEngineModule.cpp
1>  JoyISM.cpp
1>  VictoryTMapComp.cpp
1>  VictoryISM.cpp
1>  VictoryBPLibraryModule.cpp
1>  BuoyancyForceComponent.cpp
1>  BuoyancyComponent.cpp
1>  TerrainMeshComponent.cpp
1>  Noise.cpp
1>  OceanManager.cpp
1>  CustomFunctionLibrary.cpp
1>  OceanPlugin.cpp
1>  SimplexNoise.cpp
1>  OceanProject.cpp
1>  [36/47] Resource ModuleVersionResource.rc.inl
1>  [37/47] Resource ModuleVersionResource.rc.inl
1>  [38/47] Resource ModuleVersionResource.rc.inl
1>  [39/47] Resource ModuleVersionResource.rc.inl
1>  [40/47] Resource PCLaunch.rc
1>  [41/47] Resource PCLaunch.rc
1>  [42/47] Resource PCLaunch.rc
1>  [43/47] Resource OceanProject.rc
1>  [44/47] Link UE4Editor-OceanPlugin-Win64-DebugGame.dll
1>  [45/47] Link UE4Editor-OceanProject-Win64-DebugGame.dll
1>C:\Users\r\Documents\Unreal Projects\OceanProject 4.8\Plugins\VictoryPlugin\Source\VictoryBPLibrary\Private\VictoryBPFunctionLibrary.cpp(788): error C2039: 'GetMainAudioDevice' : is not a member of 'UEngine'
1>          C:\Program Files\Epic Games\4.7\Engine\Source\Runtime\Engine\Classes\Engine/Engine.h(535) : see declaration of 'UEngine'
1>C:\Users\r\Documents\Unreal Projects\OceanProject 4.8\Plugins\VictoryPlugin\Source\VictoryBPLibrary\Private\VictoryBPFunctionLibrary.cpp(1127): error C2664: 'T *NewObject<UPrimitiveComponent>(UObject *,UClass *)' : cannot convert argument 2 from 'FName' to 'UClass *'
1>          with
1>          
1>              T=UPrimitiveComponent
1>          ]
1>          No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
1>     Creating library C:\Users\r\Documents\Unreal Projects\OceanProject 4.8\Intermediate\Build\Win64\OceanProjectEditor\DebugGame\UE4Editor-OceanProject-Win64-DebugGame.lib and object C:\Users\r\Documents\Unreal Projects\OceanProject 4.8\Intermediate\Build\Win64\OceanProjectEditor\DebugGame\UE4Editor-OceanProject-Win64-DebugGame.exp
1>C:\Users\r\Documents\Unreal Projects\OceanProject 4.8\Plugins\VictoryPlugin\Source\VictoryBPLibrary\Private\VictoryBPFunctionLibrary.cpp(3841): error C2039: 'GetMainAudioDevice' : is not a member of 'UEngine'
1>          C:\Program Files\Epic Games\4.7\Engine\Source\Runtime\Engine\Classes\Engine/Engine.h(535) : see declaration of 'UEngine'
1>     Creating library C:\Users\r\Documents\Unreal Projects\OceanProject 4.8\Intermediate\Build\Win64\OceanProjectEditor\DebugGame\Plugins\Dynamic\UE4Editor-OceanPlugin-Win64-DebugGame.lib and object C:\Users\r\Documents\Unreal Projects\OceanProject 4.8\Intermediate\Build\Win64\OceanProjectEditor\DebugGame\Plugins\Dynamic\UE4Editor-OceanPlugin-Win64-DebugGame.exp
1>  -------- End Detailed Actions Stats -----------------------------------------------------------
1>ERROR : UBT error : Failed to produce item: C:\Users\r\Documents\Unreal Projects\OceanProject 4.8\Plugins\VictoryPlugin\Binaries\Win64\UE4Editor-VictoryBPLibrary-Win64-DebugGame.dll
1>  Cumulative action seconds (8 processors): 0.00 building projects, 343.98 compiling, 0.00 creating app bundles, 0.00 generating debug info, 3.47 linking, 0.00 other
1>  UBT execution time: 324.45 seconds
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.MakeFile.Targets(43,5): error MSB3073: The command ""C:\Program Files\Epic Games\4.7\Engine\Build\BatchFiles\Rebuild.bat" OceanProjectEditor Win64 DebugGame "C:\Users\r\Documents\Unreal Projects\OceanProject 4.8\OceanProject.uproject" -rocket" exited with code 2.
========== Rebuild All: 0 succeeded, 1 failed, 1 skipped ==========


Hi there!

Well the tip off is right here:



C:\Users\r\Documents\Unreal Projects\OceanProject 4.8\Plugins\VictoryPlugin\Source\VictoryEdEngine\Private\VictoryEdAlignMode.cpp(484): error C2039: 'LineTraceSingleByChannel' : is not a member of 'UWorld'
1>          C:\Program Files\Epic Games\4.7\Engine\Source\Runtime\Engine\Classes\Engine/World.h(503) : see declaration of 'UWorld'
1>C:\Users\r\Documents\Unreal Projects\OceanProject 4.8\Plugins\VictoryPlugin\Source\VictoryEdEngine\Private\VictoryEdAlignMode.cpp(853): error C2039: 'LineTraceSingleByChannel' : is not a member of 'UWorld'


LineTraceSingleByChannel is absolutely a function in UWorld in 4.8!

You must not be compiling with 4.8 somehow?

There’s no way the compiler should miss finding LineTraceSingleByChannel !

GetMainAudioDevice is also new in 4.8

I’d recommend doing this:

  1. delete intermmediate folder for the plugin and your main project
  2. delete sln,suo,sdf for main project
  3. right click on .uproject, and select switch engine version to 4.8
  4. recompile both main project and plugin

I’ve been compiling just fine in 4.8 and you simply should not be getting told by compiler that functions are missing that are new in 4.8


You could also try compiling for Development Editor 64 just for more test data.

Do keep me updated on your progress with this issue!



[QUOTE=Dakraid;311109]
Thank you Rama and Kris for the new nodes.
This entire BP suite makes working more convenient with every update!
Thank you again Rama for working on this!
[/QUOTE]


Woohoo!

Glad you are enjoying my Victory Plug Dakraid!

:)

:)

:)

Rama

**Load Texture 2D From File!

JPG, PNG, BMP, ICO, EXR, and ICNS are Supported File Formats !**

With this node you can load a Texture 2D from a file during runtime!

I output for you the width and height of the loaded image!

Now you can easily create Texture 2D’s from image files in Blueprints, during runtime!

Special Note!

Tim Sweeney liked this node!

Enjoy!

Rama

PS: Make sure to include the file extension when you use this node!

5e04c4d83d602f944fb2cfd946e90787f3b20f70.jpeg


**C++ Code For You**

Here is the core C++ function involved, entire source is in the download! I wrote my own Enum for the file formats.



```


UTexture2D* UVictoryBPFunctionLibrary::Victory_LoadTexture2D_FromFile(const FString& FullFilePath,EJoyImageFormats ImageFormat, bool& IsValid,int32& Width, int32& Height)
{
	IsValid = false;
	UTexture2D* LoadedT2D = NULL;
	
	IImageWrapperModule& ImageWrapperModule = FModuleManager::LoadModuleChecked<IImageWrapperModule>(FName("ImageWrapper"));
	
	IImageWrapperPtr ImageWrapper = ImageWrapperModule.CreateImageWrapper(GetJoyImageFormat(ImageFormat));
 
	//Load From File
	TArray<uint8> RawFileData;
	if (!FFileHelper::LoadFileToArray(RawFileData, * FullFilePath)) 
	{
		return NULL;
	}
	
	  
	//Create T2D!
	if (ImageWrapper.IsValid() && ImageWrapper->SetCompressed(RawFileData.GetData(), RawFileData.Num()))
	{ 
		const TArray<uint8>* UncompressedBGRA = NULL;
		if (ImageWrapper->GetRaw(ERGBFormat::BGRA, 8, UncompressedBGRA))
		{
			LoadedT2D = UTexture2D::CreateTransient(ImageWrapper->GetWidth(), ImageWrapper->GetHeight(), PF_B8G8R8A8);
			
			//Valid?
			if (!LoadedT2D) 
			{
				return NULL;
			}
			
			//Out!
			Width = ImageWrapper->GetWidth();
			Height = ImageWrapper->GetHeight();
			 
			//Copy!
			void* TextureData = LoadedT2D->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE);
			FMemory::Memcpy(TextureData, UncompressedBGRA->GetData(), UncompressedBGRA->Num());
			LoadedT2D->PlatformData->Mips[0].BulkData.Unlock();

			//Update!
			LoadedT2D->UpdateResource();
		}
	}
	 
	// Success!
	IsValid = true;
	return LoadedT2D;
}


```



**Latest plugin download on the UE4 Wiki: (7.91 mb) **


**Victory Plugin on Media Fire**

If your browser is not updating the Wiki download page to the most recent version, you can use my alternative Media Fire download link!

Please note clicking this link will not start a download instantly, it will just take you to the Media Fire file description.

https://www.mediafire.com/?g6uf9kt5ueb2upj

Enjoy!

:)

Rama

@Rama - Hah yeah, that’s why I posted, it’s definitely there and is compiling against the 4.8 source. Really weird.

Edit: Switch engine version on the project did it, for some reason making a copy for 4.8 didn’t already do that. Thanks!

Wow, I’d been looking for an image importer for what feels like forever. Thanks so much!
One question: How should I go about translating heightmap values to coordinates/z values?
I’m trying to export my heightmap from UE4, then import it with the image reader to determine the z coordinates when spawning objects, but there’s obviously going to be a difference in magnitude.
I’ve managed to get the coordinates somewhat close with hand drawn maps, but anything exported from UE4 and reimported for reference is pretty off.

For reference, if I set the landscape’s location to 0,0,0, I can get almost kind of accurate Z values by dividing the X/Y Coordinates by 100 and rounding, then adjusting the Z value until it matches up with one coordinate, at which point it generally matches up with the others.

Woohoo! You’re welcome! :slight_smile:

Yea it sounds like you are going to have arbitrary scaling values that you need to apply until you end up in the proper range, and it sounds like it could vary per image.

If you come up with a formula for that I can get you a node to iteratively test faster, or you can create a Blueprint Function Library, the BP asset kind, and do the equation there and then you’ve created your own node to iteratively test with :slight_smile:

Good luck!

:slight_smile:

Rama

Rama’s BP Config File (.ini) Suite

Rama’ Suite of Custom Config Section BP Nodes!

Using my new suite of BP nodes, you can create as many of your own custom config file sections as you want!

You can both create and retrieve ini variables with any name and fundamental type that you want!


**Supported Types:**

Bool
Int
Float
Rotator
Vector
Color
String

Why Use a Config Var?

Config vars have several benefits

  1. Persistent data storage without using a SaveGame struct or GameInstance, store simple quantities of data and player customization this way! Data is stored between level loads and even after the current instance of the game is shut down.

So in this way config vars have greater persistence than the GameInstance class!

  1. Player-Driven Customization, Players of your game can tweak the config vars that you make available for them on their hard disk, by editing the .ini file directly, just like AAA games! This is the most significant advantage of using config files, and their real core purpose. :slight_smile:

  2. Simplicity, simpler to use than the BP SaveSystem (which is quite wonderful by the way), but not quite as powerful in that you can only store basic data types, not UObjects and Actors.

  3. **Organization, **you can create as many config header sections as you want using my nodes, organizing all your custom settings this way!


**Game.ini**

All of your custom created config vars and sections are stored in:

**Saved/Config/Windows/Game.ini**

Players can navigate to this location on their harddrive to edit your ini files just like any AAA game would allow!

Here's what my **Game.ini** file looks like after running some tests!



```


[DebugWindows]
ConsoleWidth=160
ConsoleHeight=4000
ConsoleX=-32000
ConsoleY=-32000

[/Script/UnrealEd.ProjectPackagingSettings]
BuildConfiguration=PPBC_Development
StagingDirectory=(Path="E:/MYPROJECT_DELETE")
FullRebuild=True
ForDistribution=False
UsePakFile=True
UseOBB_InAPK=False
CulturesToStage=en

[Victory]
BoolVar=True
VectorVar=X=1.000 Y=2.000 Z=9000.123
StrVar=Yay For Custom Config Vars!!!
FloatVar=234.000000


```



**Now you have fully featured ability to use config variables entirely in BP!**

Usage

Here’s an example usage!


**Latest plugin download on the UE4 Wiki: (7.91 mb) **
https://wiki.unrealengine.com/File:VictoryPlugin.zip

Victory Plugin on Media Fire

If your browser is not updating the Wiki download page to the most recent version, you can use my alternative Media Fire download link!

Please note clicking this link will not start a download instantly, it will just take you to the Media Fire file description.

Enjoy!

:slight_smile:

Rama

Silly me. I had forgotten to account for the elevation’s negative range values. Works like a charm now! :slight_smile:

Hey Rama! Is there any way to have a node that can fetch static meshes in obj format so i can apply the textures i already can fetch to them?
It can be, fbx, obj, or w/e is comfortable. I think obj will be more simple to do, but again, i don’t really have a clue.
It will be really awesome to let players use their own modeled weapons, accessories, and in my game’s case, build levels with their own meshes as decoration.

With anything you’v already made ( textures, sounds, config ini ) I think the mesh fetching will make the game the ultimate moddable game.

This one did the job for me:

I think it should be in the main instructions to prevent users from reading a lot of pages just to get into this one.

Ohh those custom config nodes are sexy Rama, would it be possible to have custom .ini files in the future?

Wooho! Congrats The_Shane!

Allowing Developers to add new content after release has just become supported as of 4.8

Allowing people who buy your game to add their own meshes is not supported because the fbx pipeline runs only on the Editor side of the engine, which we are not allowed to utilize in packaged games.

I had done a lot of work during the UE4 Beta to remake 3ds max in UE4 (UE4 Max), using the procedural mesh component.

Then you can even give people per-vertex creation capacity.

The challenge for me was generating good uv mappings via in-game tools :slight_smile:

But so far, I dont think there’s any legal way to utilize UE4’s fbx importing pipeline in a packaged game.

Using my own systems entirely I could make a human-readible / editible file format which thus allows you to make custom .ini files yes.

But why do you need lots of custom .ini files? What is your perceived or actual use case?

:slight_smile:

Rama

Save String Array To File

The previous String File IO could only save a single line of text, even if you put "
" into your string

So I’ve made a new node that lets you save multiple lines of text to file.

Each FString of the array is on its own line in the file!

See pic!

Enjoy!

Rama


**Latest plugin download on the UE4 Wiki: (7.91 mb) **
https://wiki.unrealengine.com/File:VictoryPlugin.zip

Victory Plugin on Media Fire

If your browser is not updating the Wiki download page to the most recent version, you can use my alternative Media Fire download link!

Please note clicking this link will not start a download instantly, it will just take you to the Media Fire file description.

Enjoy!

:slight_smile:

Rama

I just wanted something like your node above “File IO Save String Array to File” where we could specify our own file name, so instead of using the game.ini we could have our own ones.