Announcement

Collapse
No announcement yet.

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

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    How to Package My Plugin Without Affecting BP-Only Project

    Originally posted by John Alcatraz View Post
    I really don't want to convert my project to c++ just for being able to package in Shipping 64bit
    You can follow these steps:

    1. You can make a separate project that is c++,
    2. then package that project for shipping 64bit,
    3. then move the entire plugin folder, without Intermediate, over to your BP only project.

    Intermediate folder is huge and not needed for distribution.


    I am not getting paid to do anything of what I do with my Victory BP library so my time to cover every possible case is limited by my need to make money to eat and live and such.

    Here is my donations page if you'd like to help remedy this matter:

    Victory BP Library Donations
    http://lightningfitness.org/donate/

    I've now described how you or anyone can package for any platform and then include my plugin packaged binaries with their main, non-C++ project.



    Rama
    Last edited by Rama; 09-25-2015, 01:06 PM.
    100+ UE4 C++ Tutorials on the UE4 Code Wiki, including UE4 Multi-Threading!

    UE4 Marketplace: Melee Weapon Plugin & Compressed Binary Save System Plugin | Rama's C++ AI Jumping Videos | Vertex Snap Editor Plugin

    Visit www.ue4code.com to see lots of videos about my C++ Creations! ♥ Rama

    Comment


      Draw Thick Circle With Axis Control

      Fun node for you!

      With this node you can draw circles!

      And you can control their thickness, as well as how many points make up the circle!

      You can also have axis control!

      So you can draw circles horizontally, vertically, at angles, any way you like, with convenient BP node inputs!

      See pics!

      Click image for larger version

Name:	drawthickcircle3.jpg
Views:	11
Size:	100.4 KB
ID:	1088161

      Click image for larger version

Name:	DrawThickCircle4.jpg
Views:	11
Size:	131.1 KB
ID:	1088162

      ~~~

      Latest plugin download on the UE4 Wiki:
      https://wiki.unrealengine.com/File:VictoryPlugin.zip

      Latest plugin packaged binaries, Win32 Shipping and Win64 Development on UE4 Wiki:
      https://wiki.unrealengine.com/File:V...inPackaged.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.

      Editor binaries and Packaged binaries in one file:
      Win32 Shipping and Win64 Development Supported
      https://www.mediafire.com/?g6uf9kt5ueb2upj

      ~~~

      Note on Packaging Victory Plugin

      https://forums.unrealengine.com/show...l=1#post368790

      Enjoy!



      Rama
      100+ UE4 C++ Tutorials on the UE4 Code Wiki, including UE4 Multi-Threading!

      UE4 Marketplace: Melee Weapon Plugin & Compressed Binary Save System Plugin | Rama's C++ AI Jumping Videos | Vertex Snap Editor Plugin

      Visit www.ue4code.com to see lots of videos about my C++ Creations! ♥ Rama

      Comment


        Originally posted by Rama View Post
        Can you explain more what you mean? What is the exact use case / functionality you want?



        Rama
        I want to give the user the ability to import their own meshes into my game via the mapbuilder. So they just place their wave ( *.obj ) file in a certain folder and see it available inside the game.
        Check out my game OldSchool Nightmare : http://www.indiedb.com/games/oldschool-nightmare

        Comment


          Dynamic Level Generation: Create Multiple Translated/Rotated Instances of a Level!

          Click image for larger version

Name:	LoadLevelInst_BeforeAfter.jpg
Views:	6
Size:	340.5 KB
ID:	1088240

          Click image for larger version

Name:	LoadLevelInst_Graph.jpg
Views:	3
Size:	291.1 KB
ID:	1088241

          Dear Community,

          The code in this node was first presented by Epic staff, Marc Audy, as code used in Fortnite.

          I've fully implemented the code as well as making it user-friendly.

          In particular I've presented a solution for ensuring you can spawn multiple instances of the same UE4 level, by giving you an "Instance Number" that you should increment each time you spawn an instance of a level.

          This allows me to enable you to easily create as many uniquely translated and rotated instances of a level as you want!

          This is ideal for Dynamic Level Generation!

          ~~~

          Can Include Landscapes and Other Fancy Level Features!

          In my demo I included a landscape in my level "tile."

          ~~~

          Level Scripting / Level Blueprint

          You can also include level scripting that will run uniquely per level isntance!

          ~~~

          Victory Load Level Instance

          Click image for larger version

Name:	LoadLevelInst_BPNode.jpg
Views:	5
Size:	269.2 KB
ID:	1088242

          ~~~

          C++ Code For You

          Here's my implemenation of the code Marc Audy originally presented to the Community, exactly as it is in my Victory BP Library:

          Code:
          bool UVictoryBPFunctionLibrary::VictoryLoadLevelInstance(
          	UObject* WorldContextObject, 
          	FString MapFolderOffOfContent, 
          	FString LevelName, 
          	int32 InstanceNumber,
          	FVector Location, FRotator Rotation)
          {
              if(!WorldContextObject) return false;
          	 
          	UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject);
          	if(!World) return false;
          	//~~~~~~~~~~~
           
          	//Full Name
          	FString FullName = "/Game/" + MapFolderOffOfContent + "/" + LevelName;
          	  
          	FName LevelFName = FName(*FullName);
              FString PackageFileName = FullName;   
          	
              ULevelStreamingKismet* StreamingLevel = NewObject<ULevelStreamingKismet>((UObject*)GetTransientPackage(), ULevelStreamingKismet::StaticClass());
           
          	if(!StreamingLevel)
          	{
          		return false;
          	}
          	
          	//Long Package Name
          	FString LongLevelPackageName = FPackageName::FilenameToLongPackageName(PackageFileName);
          	
          	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          	// Here is where a unique name is chosen for the new level asset
          	//    Ensure unique names to gain ability to have multiple instances of same level!
          	//	   <3 Rama
          	
          	//Create Unique Name based on BP-supplied instance value
          	FString UniqueLevelPackageName = LongLevelPackageName;
          	UniqueLevelPackageName += "_VictoryInstance_" + FString::FromInt(InstanceNumber);
               
              //Set!
              StreamingLevel->SetWorldAssetByPackageName(FName(*UniqueLevelPackageName));
          	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          	 
              if (World->IsPlayInEditor())
              {
                  FWorldContext WorldContext = GEngine->GetWorldContextFromWorldChecked(World);
                  StreamingLevel->RenameForPIE(WorldContext.PIEInstance);
              }
           
              StreamingLevel->LevelColor = FColor::MakeRandomColor();
              StreamingLevel->bShouldBeLoaded = true;
              StreamingLevel->bShouldBeVisible = true;
              StreamingLevel->bShouldBlockOnLoad = false;
              StreamingLevel->bInitiallyLoaded = true;
              StreamingLevel->bInitiallyVisible = true;
           
          	//Transform
              StreamingLevel->LevelTransform = FTransform(Rotation,Location);
           
              StreamingLevel->PackageNameToLoad = LevelFName;
                    
              if (!FPackageName::DoesPackageExist(StreamingLevel->PackageNameToLoad.ToString(), NULL, &PackageFileName))
              {        
                  return false;
              }
            
          	//~~~
          	
          	//Actual map package to load
          	StreamingLevel->PackageNameToLoad = FName(*LongLevelPackageName);
          	
          	//~~~
          	
              // Add the new level to world.
              World->StreamingLevels.Add(StreamingLevel);
               
              return true;
           }
          ~~~

          Latest plugin download on the UE4 Wiki:
          https://wiki.unrealengine.com/File:VictoryPlugin.zip

          Latest plugin packaged binaries, Win32 Shipping and Win64 Development on UE4 Wiki:
          https://wiki.unrealengine.com/File:V...inPackaged.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.

          Editor binaries and Packaged binaries in one file:
          Win32 Shipping and Win64 Development Supported
          https://www.mediafire.com/?g6uf9kt5ueb2upj

          ~~~

          Note on Packaging Victory Plugin

          https://forums.unrealengine.com/show...l=1#post368790

          Enjoy!



          Rama
          Last edited by Rama; 09-27-2015, 12:44 AM.
          100+ UE4 C++ Tutorials on the UE4 Code Wiki, including UE4 Multi-Threading!

          UE4 Marketplace: Melee Weapon Plugin & Compressed Binary Save System Plugin | Rama's C++ AI Jumping Videos | Vertex Snap Editor Plugin

          Visit www.ue4code.com to see lots of videos about my C++ Creations! ♥ Rama

          Comment


            The new node looks very interesting!

            So if you have an instance of a level, will it maintain all the same characteristics of that level at all times, or only the characteristics that existed when you spawned the instance?

            So in my case, if my main map is the primary map, and I spawn map instances to handle world wrap, will the instances update automatically or will I have to respawn them to get updated info into them?
            Map Generator 1.0
            Map Generator 2.0
            Map Generator 3.0

            Comment


              Originally posted by Zeustiak View Post
              The new node looks very interesting!

              So if you have an instance of a level, will it maintain all the same characteristics of that level at all times, or only the characteristics that existed when you spawned the instance?

              So in my case, if my main map is the primary map, and I spawn map instances to handle world wrap, will the instances update automatically or will I have to respawn them to get updated info into them?
              My guess is that it will be only the meshes ( maybe materials too ) because there is only one graph for the level's logic in blueprint, and it can't have duplicated variables.
              Check out my game OldSchool Nightmare : http://www.indiedb.com/games/oldschool-nightmare

              Comment


                load level instance = Rama the hero!
                you finally implemented an essential part of my wip strategy game, thanks!
                and thanks to the guys dealing with it on the other 2 threads, it is worthy to read them to understand what happens:
                https://forums.unrealengine.com/show...ictory+library
                https://forums.unrealengine.com/show...ictory+library
                Edge of Chaos RTS
                "Age of Total Heroes" - RTS Pathfinding and Movement System for UE4
                RTS Camera C++ Tutorial

                Comment


                  Originally posted by Zeustiak View Post
                  The new node looks very interesting!

                  So if you have an instance of a level, will it maintain all the same characteristics of that level at all times, or only the characteristics that existed when you spawned the instance?

                  So in my case, if my main map is the primary map, and I spawn map instances to handle world wrap, will the instances update automatically or will I have to respawn them to get updated info into them?
                  Pretty sure only characteristics that existed at the time of spawning get updated, the actors and the level BP become unique after being instanced!

                  This had advantages if you want to create variations of each level instance, like rotating them in different ways or activating level BP "variants" that run on a simple integer/enum



                  Rama

                  Originally posted by sivan View Post
                  load level instance = Rama the hero!
                  you finally implemented an essential part of my wip strategy game, thanks!
                  Woohooo!

                  You're welcome Sivan!

                  Rama
                  100+ UE4 C++ Tutorials on the UE4 Code Wiki, including UE4 Multi-Threading!

                  UE4 Marketplace: Melee Weapon Plugin & Compressed Binary Save System Plugin | Rama's C++ AI Jumping Videos | Vertex Snap Editor Plugin

                  Visit www.ue4code.com to see lots of videos about my C++ Creations! ♥ Rama

                  Comment


                    Originally posted by Rama View Post
                    Pretty sure only characteristics that existed at the time of spawning get updated, the actors and the level BP become unique after being instanced!

                    This had advantages if you want to create variations of each level instance, like rotating them in different ways or activating level BP "variants" that run on a simple integer/enum



                    Rama
                    That is what I figured, but the instances mirroring the state of the parent would have been a nice bonus! Being able to blanket copy the existing level and respawning it to get the most current game state should work well enough.
                    Map Generator 1.0
                    Map Generator 2.0
                    Map Generator 3.0

                    Comment


                      Get All Hardware-Based Screen Resolutions, Including Refresh Rates (Hertz)

                      Click image for larger version

Name:	GetScreenResolutions2BP.jpg
Views:	8
Size:	579.1 KB
ID:	1088503

                      Enjoy getting the screen resolutions of the end user's hardware in your game now!

                      It is obtained from the user's display adapter directly! No guessing or preset values!

                      Works in packaged games!

                      ~~~

                      Latest plugin download on the UE4 Wiki:
                      https://wiki.unrealengine.com/File:VictoryPlugin.zip

                      Latest plugin packaged binaries, Win32 Shipping and Win64 Development on UE4 Wiki:
                      https://wiki.unrealengine.com/File:V...inPackaged.zip

                      Enjoy!



                      Rama
                      Last edited by Rama; 10-01-2015, 01:59 AM.
                      100+ UE4 C++ Tutorials on the UE4 Code Wiki, including UE4 Multi-Threading!

                      UE4 Marketplace: Melee Weapon Plugin & Compressed Binary Save System Plugin | Rama's C++ AI Jumping Videos | Vertex Snap Editor Plugin

                      Visit www.ue4code.com to see lots of videos about my C++ Creations! ♥ Rama

                      Comment


                        Rama FTW XD
                        Check out my game OldSchool Nightmare : http://www.indiedb.com/games/oldschool-nightmare

                        Comment


                          Rama I have a good idea for a node.
                          If you can take the vertices positions from an obj you can use them to generate mesh ( still without UV ) but this can be a really cool feature.
                          It will give the user to add obj meshes to packaged game.

                          Procedure.
                          1.Obj->Extract vertices locations.
                          2.I'm pretty sure you are familiar with this one
                          https://wiki.unrealengine.com/Proced...esh_Generation

                          We will be able to use a projected material on it.

                          This is an inside of an obj file file exported from blender ( a simple cube ) Just used a text editor to open it:

                          Code:
                          # Blender v2.75 (sub 0) OBJ File: ''
                          # www.blender.org
                          mtllib untitled.mtl
                          o Cube
                          v 1.000000 -1.000000 -1.000000
                          v 1.000000 -1.000000 1.000000
                          v -1.000000 -1.000000 1.000000
                          v -1.000000 -1.000000 -1.000000
                          v 1.000000 1.000000 -0.999999
                          v 0.999999 1.000000 1.000001
                          v -1.000000 1.000000 1.000000
                          v -1.000000 1.000000 -1.000000
                          vn 0.000000 -1.000000 0.000000
                          vn 0.000000 1.000000 0.000000
                          vn 1.000000 0.000000 0.000000
                          vn -0.000000 -0.000000 1.000000
                          vn -1.000000 -0.000000 -0.000000
                          vn 0.000000 0.000000 -1.000000
                          usemtl Material
                          s off
                          f 1//1 2//1 3//1 4//1
                          f 5//2 8//2 7//2 6//2
                          f 1//3 5//3 6//3 2//3
                          f 2//4 6//4 7//4 3//4
                          f 3//5 7//5 8//5 4//5
                          f 5//6 1//6 4//6 8//6
                          It seems like it can work, All you need to do is to make a function that will parse these kind of tables.

                          So what do you say bro?!
                          Last edited by Sahkan; 10-02-2015, 02:18 AM.
                          Check out my game OldSchool Nightmare : http://www.indiedb.com/games/oldschool-nightmare

                          Comment


                            Originally posted by Sahkan View Post
                            It seems like it can work, All you need to do is to make a function that will parse these kind of tables.
                            Seems like it can work, why are there not as many vn's (vertex normals) as verticies?

                            I am confused as to whether this will really be useful without UV mapping.

                            I got really far making my own version of 3ds Max within UE4, until I hit UV mapping

                            I could dynamically place and move verticies, create edges, and triangles, and then turn this into a colliding procedurally generated mesh.

                            The complexity of doing the UV mapping gave me quite the pause though

                            Stuff just doesnt look good without UV mapping

                            What is your solution for this, you mention projecting material? What do you mean?



                            Rama
                            100+ UE4 C++ Tutorials on the UE4 Code Wiki, including UE4 Multi-Threading!

                            UE4 Marketplace: Melee Weapon Plugin & Compressed Binary Save System Plugin | Rama's C++ AI Jumping Videos | Vertex Snap Editor Plugin

                            Visit www.ue4code.com to see lots of videos about my C++ Creations! ♥ Rama

                            Comment


                              Currently In-Engine: Min and Max of Int/Float Array!

                              4 New Nodes

                              Max of Float Array

                              Max of Int Array

                              Min of Float Array

                              Min of Int Array


                              Returns the max/min value as well as the index in the array of that value!

                              Please note that I submitted the C++ code for these nodes to Epic and they were accepted into the Engine!

                              You can access these nodes right now!

                              See pic!
                              Click image for larger version

Name:	minmaxOfArrayFloatInt.jpg
Views:	2
Size:	198.6 KB
ID:	1088675


                              ~~~

                              Latest plugin download on the UE4 Wiki:
                              https://wiki.unrealengine.com/File:VictoryPlugin.zip

                              Latest plugin packaged binaries, Win32 Shipping and Win64 Development on UE4 Wiki:
                              https://wiki.unrealengine.com/File:V...inPackaged.zip

                              Enjoy!



                              Rama
                              100+ UE4 C++ Tutorials on the UE4 Code Wiki, including UE4 Multi-Threading!

                              UE4 Marketplace: Melee Weapon Plugin & Compressed Binary Save System Plugin | Rama's C++ AI Jumping Videos | Vertex Snap Editor Plugin

                              Visit www.ue4code.com to see lots of videos about my C++ Creations! ♥ Rama

                              Comment


                                Originally posted by Rama View Post
                                Seems like it can work, why are there not as many vn's (vertex normals) as verticies?

                                I am confused as to whether this will really be useful without UV mapping.

                                I got really far making my own version of 3ds Max within UE4, until I hit UV mapping

                                I could dynamically place and move verticies, create edges, and triangles, and then turn this into a colliding procedurally generated mesh.

                                The complexity of doing the UV mapping gave me quite the pause though

                                Stuff just doesnt look good without UV mapping

                                What is your solution for this, you mention projecting material? What do you mean?



                                Rama
                                I have no idea why it does what it does. This is just a cube exported from blender.

                                Check the node called WorldAlignedTexture. You can project a texture on z, xy and xyz. So you can make statues or other meshes with constant texture on them. It won't look perfect but it is something.
                                Btw did you manage to make extrude and other actions that can be done in 3dsmax?

                                Edit: I think there are twice v then vn because the cube is not smooth so each edge consider it's faces as seperated meshes. This is why you will see a bigger verts count inside a game engine.
                                Last edited by Sahkan; 10-04-2015, 03:23 AM.
                                Check out my game OldSchool Nightmare : http://www.indiedb.com/games/oldschool-nightmare

                                Comment

                                Working...
                                X