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

Maybe I’m doing something really silly again. But it does not work properly for me. I tested it in the 3rd person template, added 2 levels and added 2 level-stream-volumes to it and then spawned 3 spheres (one for each level). But right off the bat, they are all visible and loaded already even though the other 2 levels are not checked as initially loaded. Note that the meshes that are not spawned by code work properly (not shown on screenshot).

Also unloading the levels has no effect for the spheres. So I fear that they are all spawned in the persistent level instead.

And just a minor thingy, the “Return Value pin” from “Spawn Actor Into Level” must be cast to the actor that I spawned before I can use it, unlike the default build-in “Spawn Actor From Class”. Is that intended?

Hi Rama - I think it would be handy for built applications to have some kind of handle on where the .exe file is, then you can either build a path relative to that. I tried to make a python script which did that and wrote it to the game.ini file but it didn’t seem to write it in a format which your INI reader liked - it couldn’t find either the section or the var - I don’t know which. Here’s my python code (which I was going to turn into an exe which ran in a bat)

#!/usr/bin/env python

import os
import ConfigParser
here = os.getcwd()

qDir = here + "\Questions"
inFile = here + "\Tower_A\Saved\Config\WindowsNoEditor\Game.ini"

print qDir
print inFile

config = ConfigParser.SafeConfigParser()
config.set('QuestionPath','questionFolder', qDir)

with open (inFile, 'wb') as configfile:

Like i said - it works but the ini reader doesn’t like it (I only had a quick go at it)


I completely understand, no worries.

Here’s the thing, it actually works on everything BUT my player Pawn. Here’s what I think is the real issue:
9bfd5b0f6cc640d33946d0a7f71f6424b88ff8c7.png WorldOutliner.PNG 8887e9916fa5cf2959dd8f86874d82e2a685e03d.png

If I use Is Rendered or Is Not Rendered on anything BUT my Pawn it works perfectly fine. If I use it for my Pawn I can’t even get the find substring for Penguin to work. There’s something about the way the engine is naming the Pawn from Player Start that I’m just not comprehending.

I contacted Epic about this issue a while back and was told by a senior Epic engineer that spawning actors directly into sublevels is not a supported functionality, and so the fact that my nodes are not working correctly does not surprise me.

Spawning into the persistent / main level and then hiding stuff as needed / managing your own level spawn list is the only thing I can recommend given what I’ve been told



I can do this quite easily!

Will make a node for you shortly :slight_smile:

EDIT: New File Path Nodes For you!



Victory Absolute Paths!
Live as of March 3rd 2015 build

Get the File Path to your project .exe, your project root directory, and more!

These paths are dynamically updated even if you move the entire project to a new location on your computer!

All these nodes are fully compatible with packaged builds and return absolute paths!

These nodes also work in Development/Editor builds!

**More Power For You in BP**

Now you can easily create your own folders/files, relative to the project root directory or your project's .exe!

Please note that in editor builds, the .exe returns your UE4Editor.exe location, but in packaged games it returns your game's .exe



I recommend using the Project Game directory for most of your relative path needs! This works the same in Editor and packaged builds!

You can also get your Saved and Logs folders for your project in both packaged and editor builds!

UE4 Wiki, Plugin Download Page



This is great!


Wow Rama - thanks so much for this, it’s really going to help tie together my app which hot-reloads textures a runtime.


I hope you’re getting as much out of these nodes as we are!

That is extremely disappointing… Thanks for the info though.
Anyway, for other people, to disable an actor completely:

  1. set actor hidden in game: true
  2. set actor enabled collision: false
  3. set actor tick enabled: false
  4. add triggerboxes to your level to set/unset the above 3. And don’t forget to also disable enemies/AI manually (and projectiles and such!) as well or they’ll fall outside of the level. Very messy.

Yeah I kind of feel bad because I got him to make the nodes, only to have Epic basically say “Yeah, we don’t advise doing that”.

I feel like these nodes are really the only way we can take advantage of level streaming in a procedural way, so it is kind of sad. I am hoping that Epic gives us that ability in a future release. :slight_smile:

So I am actually in the process right now of re-working my instancing system so that I can move them around, scale them to 0, etc. I am currently using “Add Instance” node, but you don’t have per instance control that way. Trying to use “Add Instanced Static Mesh” which should fit the bill, but haven’t had the time or energy lately to figure out why I can’t get them working similar to Add Instance.

Hi Rama - should there be a March 3rd build on the end of that link? I can only see a Feb 25th one.

Cheers Buddy!

Hi there!

The wiki is having problems right now, system wide, on my screen it lists two Feb 25ths

Do you see two feb 2ths?


I uploaded a second time and now I see A March 3rd and a March 4th

So I agree it was wonky before

but you should have two builds to choose from now, March 3rd or March 4th, either will have your new Victory Path nodes in them!

UE4 Wiki, Plugin Download Page

**Talking about these new nodes!**

**You can use these nodes to get the file path to your project directory in a editor or packaged game!**




**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](!&p=211685&viewfull=1#post211685)!



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



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);
			if (!LoadedT2D) 
				return NULL;
			Width = ImageWrapper->GetWidth();
			Height = ImageWrapper->GetHeight();
			void* TextureData = LoadedT2D->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE);
			FMemory::Memcpy(TextureData, UncompressedBGRA->GetData(), UncompressedBGRA->Num());

	// Success!
	IsValid = true;
	return LoadedT2D;

**Download Link (6.5mb)**

**UE4 Wiki, Plugin Download Page**



Epic should employ you Rama. Enough said.

Anyone else get the rag-doll system to work? Iv’e tried and tried but haven’t yet. I cant figure out what I’m doing wrong.

If this isnt too much to ask, could you possibly do a video tutorial of how the ragdoll system works? Including your Physical Asset properties, and the view-port of your character BP? Iv’e been trying for about an hour and a half now. Ive got a good ragdoll in my physical asset for my character, and everything seems like it should work, but I keep getting weird results no matter what I try.

Hey Rama, I cant build under Linux, tried your latest build from yesterday, all i get is:

Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPFunctionLibrary.cpp(1257,12) :  error: implicit conversion of NULL constant to 'bool' -Werror,-Wnull-conversion]
        IsValid = NULL;
                ~ ^~~~
Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPFunctionLibrary.cpp(1276,34) :  error: implicit conversion of NULL constant to 'uint32' (aka 'unsigned int') -Werror,-Wnull-conversion]
        SpawnInfo.bDeferConstruction    = NULL;
                                        ~ ^~~~

The bug is tracked here: [4.7 Final] PhysX error isFinite - UE4 AnswerHub

Not sure if its a bug in unreal engine itself or Victory Bp Function library.

Off hand, I’d say you might try simply deleting the physics volume it makes for the base node (should be between the feet). Having that there always causes ragdolls to act weird, and the automatic generation creates it, so you have to delete it every time you make a new Physics Asset. Also size all the volumes down to fit the mesh more, and overlap with other volumes less.

I already did…There isnt a problem with the Physics Asset. The ragdoll works and looks good, but the problem is when I hook u the blueprint nodes as shown in the picture, it doesnt work like the video. The ragdoll does not behave like it does in the physics asset window, and it always spawns at the player start location. I can also never revert back to ana animated character, however my capsule collider always stays active whether the ragdoll is active or not…

Hee hee!