• News

• Industries

• Learning & Support

• Community

• Marketplace

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

New BP Node!

This node sets the bloom intensity of any PP volume!

This node was contributed by community member Sahkan!

Enjoy!

Rama

Waoooo ! I love you Rama :rolleyes:
I am looking for a bundle like that since a long time !
It’s wonderful to share your work =)
I have not yet test all your library, but i have already a request

I’m interest to have a node to control the object mass.
As you can see in my answer in this thread : Change Mass using Blueprints

##############
Here’s what I know :
We want to have an object with a Mass exactly = 1.00000 Kg
I take a mesh and set Physical properties :

• Simulate Physics = true
• Enable Gravity = false (we are in empty space)
• Linear damping = 0.0
—> at this step, my object has a Mass in Kg = 2198.014
If i understand well, the Mass is calculated automatically depending on my shape mesh. Ok, so i will try to simulate a point with no shape in my calculation. To do that i use a Physical Material for my mesh :
• Density = 1.0 (g/m3 = water density for example → it’s the default value)
—> at this step, my object has a Mass in Kg = 2198.014 (no change, perfect!)
Now I know my density = 1.0 so the engine seems to know the volume of my object (i would like to get this optionaly !) because mass[Kg] = density[g/cm3] x volume[cm3]

All this calculation is so complicated, i just want to be able to set manually the mass of my object !!!
In fact, there is a value in the physical material which cause this problem and seems to be use by the engine for the calculation :

• Raise Mass to Power = 0.75 by default
If I set Raise Mass to Power = 0.0 —> my object has Mass in Kg = 1.001 WHY !!!
##############

Do you know how engine calculate the mass object ? what values and calculations are used ? I would like understand if it’s possible!!
Maybe you can overpass the engine calculation to be able to “Set Mass” precisely with a node ! and verify if the “Get mass” node -included in UE4- returns the same value…

https://dl.dropboxusercontent.com/u/21672921/_FORUM/ue4-mass.jpg

Thanks a lot !

Awesome progress ! I hope epic will fix that bug that we can’t pack games with plugins in the next version.

Super cool new nodes, yay!

Hee hee!

Rama

**Get All Screen Resolutions
**
Now works in packaged games!

It gathers data specific to the end user’s display adapter, including all available refresh rates

old but has nice in-game pic

actual!

Hi there! Nice colors in your post!

You shouldn’t be setting the mass directly, what I can do easily is give you a node to set the mass scale of any primitive component / static mesh / skeletal mesh.

By playing with the mass scale on a per-object basis you can get the object to have the effective movement/physics that you want in game.

If you are doing some kind of 3d weight scale game and you actually need 1 kg every time, it will require much more effort on my part

Mass scale is easy and universally useful!

``````
**Mass to Power 0 = 1**

[QUOTE=martoof;205376]

In fact, there is a value in the physical material which cause this problem and seems to be use by the engine for the calculation :
- Raise Mass to Power = 0.75 by default
If I set Raise Mass to Power = 0.0   ---&gt;   my object has Mass in Kg = 1.001 :(  WHY !!!! :confused:[/COLOR]
##############

[/QUOTE]

**If you raise anything to the power of 0, the value is 1! **

**Conceptual proof:**

This is because power implies Self-Multiplication, (x^2 = x * x), and the only thing you can multiply any number by and get itself  is 1.  So 1 is this Eternal Constant when it comes to exponential math, anything to 0 power is the same, constant, unchanged Origin of all exponential math. All numbers to the 0 power trace back to the same single point, the number 1, so this is Origin. And 0 represent the concept of Origin!

**Conventional Proof:**

```

X^y
x^0 = x^(y-y) = --- = 1
x^y

```

**So um, is that all you need then? A phys mat with power to 0?**

Mass scale as a BP node would be much more useful to more people and gives you fine tuned control on a per-object basis, and does not require phys-mats to be set anywhere :)

Rama``````

Rama what do you mean “Now work in packed games” ? What does it take to work in a pack game ? Is it possible to pack a game with all of the nodes from the plugin ?

Do I need a 4.7 to get it to work with packed games? Great work btw, everytime I open this thread, I find nodes I never knew I couldn’t live without

I’m having some problems with Get Rendered Actors and Get Not Rendered Actors. If an actor is rendered once, then it will always be considered rendered, even off screen.

I have it so when I press F, it stores an array with the rendered actors, it also clears the old array if used again. I then have it print the name of it on screen. So I start the game and when I press F it prints nothing, after I look at the actor it prints that actor’s name, but if I look away it still prints that actor. The problem is also in Not Rendered Actors, I start the game and it prints the actor’s name, I look at it and it prints nothing, then I look away and still prints nothing. I’ve been using the default 0.01 seconds to check for rendered actors, but it seems to ignore that since it’s always considered rendered even with 0 seconds. Am I just not using this correctly?

Hey Rama, a quick question. Is the code included in the download completely free to use for any and all purposes? I don’t believe it contains any document that describes permissions as to what it’s allowed to be used for? And yes, I realize touching the code is not strictly necessary, but in some cases I would prefer to just use the C++ code directly instead of the blueprints.

As of 4.6.1, a code-based project is required to package the game, but a BP-only project can use the plugin during development.

This is going to be fixed by Epic soon

``````

[QUOTE=Pampers;206799]
Do I need a 4.7 to get it to work with packed games? Great work btw, everytime I open this thread, I find nodes I never knew I couldn't live without :)
[/QUOTE]

Hee hee! Glad you like my various BP node offerings!

``````

I will have to look into that, I am just using Epic’s function internally, so perhaps there is something going on with the function itself, send me a PM if I haven’t gotten to this within 2 weeks or so.

Giving Me Credit for Victory BP Library

Yes the code is free to use anywhere you want!

I only request that you mention me in the credits for your game in the way that feels most appropriate to you, thereby honoring my contributions.

I prefer to be mentioned as simply “Rama”

Rama

Thanks, good to know this is possible at all at the moment, i guess i will just wait for 4.7 and in the meanwhile release game footage videos when there are new stuff to show off.

Yea! Epic has been telling me that getting plugins working in BP only packaged games is very high priority for them

Rama

**New Release!

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.

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!**

Rama

PS: Here's example usage!

Thanks rama the config nodes looks awesome and this is great how you can make variables accessible by the user, especially for an indie developer, instead of investing time on a fancy options screen i can let the user use the config file and invest my time in the real important stuff.

**New Node: 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!

Enjoy!

Rama

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;

IImageWrapperPtr ImageWrapper = ImageWrapperModule.CreateImageWrapper(GetJoyImageFormat(ImageFormat));

TArray<uint8> RawFileData;
{
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))
{

//Valid?
{
return NULL;
}

//Out!
Width = ImageWrapper->GetWidth();
Height = ImageWrapper->GetHeight();

//Copy!
FMemory::Memcpy(TextureData, UncompressedBGRA->GetData(), UncompressedBGRA->Num());

//Update!
}
}

// Success!
IsValid = true;
}

```

``````