Blog Archives

Unreal X-Graph (A program that never saw daylight)


Here are some screenshots of my program called Unreal X-Graph which was a graph editor for creating new classes for UnrealScript. While Beta testing UE4 i was inspired by the idea of Blueprints and thought about creating a graph editor for UnrealScript and contribute it to the community (like Unreal X-Editor) so hopefully that should attract more people to Unreal Technology. Unreal X-Graph works much like Blueprints. That means, you can create and connect nodes together and compiling will generate a *.uc file with the contents of the graph. I started development back on January 2014 but since UE4 was released on March i totally abandoned this project and have no intention of resurrecting this back.

When the program starts you will be prompted to define new name for your class.

When the program starts you will be prompted to define new name for your class.

By default all these nodes are created automatically when you start.

By default all these nodes are created automatically when you start.

And when you press compile, this is how the result looks like.​

And when you press compile, this is how the result looks like.​

Node selection and highlight.

Node selection and highlight.

Creating new function graph and previewing it.

Creating new function graph and previewing it.

Opening function graph and creating new variables.

Opening function graph and creating new variables.

Protect Node Feature. You can right click on any node (except Class and Default Properties) and toggle if it is protected or not. If it is protected then that node cannot be deleted.

Protect Node Feature. You can right click on any node (except Class and Default Properties) and toggle if it is protected or not. If it is protected then that node cannot be deleted.

Different connection renderings:

Bezier (Default)

Bezier (Default)

Line

Line

Curve

Curve

Advertisements

[BETA] v3.1.5 Now Available


New version of Unreal X-Editor is now available. Click on “Check For Updates” to download or visit Downloads page.

Changelog:

–New Integrated Application: Content Browser Finder
–New Feature: Config Class Finder
–New Feature: Document Map
–New GoToLine dialog. (Press CTRL+G)
–New Code Editor Fullscreen option
–New Right Click Menu: Add Timestamp
–New Right Click Menu: Add Comment Block (Under Insert)
–New Right Click Menu: Add StartBlock (Under Insert)
–Added Final_Release flag in Compile Options
–Added Tab Reordering
–Added Text Drag & Drop
–Added support for Dual Monitor setups
–Added function/event name highlighting
–Improved Toast Notifications
–Improved Go To Function now continues searching on all parent classes until function is found
–Improved Autoindent
–Type colors (var, local, class names etc) are now customizable
–Class template now create simulated event Post/PreBeginPlay() instead of event
–Compiling scripts will no longer cause Ribbon to be disabled
–Right-clicking will now move the mouse caret properly
–Word Highlight is no longer case-sensitive
–Shift+Tab now decreases Tab Indent
–Changing syntax colors no longer requires Unreal X-Editor restart
–Users can now access class functions without selecting the whole word
–Clicking on line number will select the whole line
–Users can now load maps with custom extension under UDK Editor
–Fixed Unreal X-Editor running in background after exiting
–Fixed Template window stays open after exiting
–Fixed unable to read first entry in Code Explorer
–Fixed some minor issues with AutoIndent
–Fixed X-Editor Log showing incorrect class name when deleting from package viewer
–Fixed Report a bug staying behind About Window
–Fixed unable to type in Unhandled Exception Reporter

[Tutorial] Disabling Log outputs in your game


Ever wondered how to remove those log outputs (ScriptWarning, Warning etc) from your game? Well i just found out a neat way to disable them.

Check this screenshot. Yeah it got a lot of warnings.

Log Warnings

Now i want to disable the Error (first one in that log), ScriptLog and Warning. To do so, open DefaultEngine.ini and under [Core.System] add the +Suppress=<LogName> option. For example see the below screenshot.

Modify INI to include +Supress

Now delete UDKEngine.ini and start the game. All the specified logs will now be disabled!

After disabling:

Logs disabled

New Features: Tab Reordering and Function Highlight


Hi everyone,

I added support for Tab Re-Ordering (not undockable) and Dynamic Function Highlight. Dynamic Function Highlighting will highlight any functions and events in your file (and yes color can be customized!). Here is a screenshot:

Notice how events and functions are now colored (Click for larger image).

Notice how events and functions are now colored (Click for larger image).

Engage The Game BETA Release


Hello Everyone,

Am really happy to announce that our game Engage is now available to you! Visit www.engagethegame.com and sign-up. You can then download the game and enjoy!

NOTE: Engage is in early Beta stage so if you encounter any bugs or have any suggestions please do let us know on Engage Forums.

Engage The Game

Engage Hypervision

Engage Nightvision

[Tutorial] Change Loading Screens based on map (Using Canvas and no bik movie)


Hey everyone ,

In this tutorial i will show you how to have your own loading screen based on the map you are loading. For example you are loading MAP_1 so the loading screen will show random pictures of MAP_1. Remember, this tutorial will only use Canvas and will not use any bik movies. In fact, you will have to remove the loading bik movies from the ini in-order for this to work. I used this setup in my own game Engage and its working good. 

1: Start UDK and load your level.
2: Take a nice screenshot ( I use printscreen and paste it on Photoshop). TIP: Press F11 for fullscreen
3: Open Photoshop (i used 2048 x 1024) or any other image editing software and make all the customization’s you want (Color correction, blur, DOF, flares, anything)
4: Save the image and import it in UDK and save the package. Take any number of screenshots you want since we will be randomly choosing the textures.
5: Start your UnrealScript IDE and use the below code:

//  ================================================================================================
//   * File Name:    MyCustomViewportClient
//   * Created By:   Satheesh PV (aka RyanJon2040)
//   * Time Stamp:     05-Dec-13 8:50:00 PM
//   * UDK Path:   G:\UDK\UDK-2013-07
//   * Unreal X-Editor v3.1.5.0
//   * © Copyright 2012 - 2013. All Rights Reserved.
//  ================================================================================================

/*
    The reason why i extended from UTGameViewport is because otherwise Hintmessages wont be displayed.
*/

class MyCustomViewportClient extends UTGameViewportClient;

var Font TransitionFont;
var Font HintFont;
var Texture2D Background;
var LinearColor BackgroundColor;
var array MAP1_BackgroundTextures;
var array MAP2_BackgroundTextures;
var array MAP3_BackgroundTextures;

function DrawTransition(Canvas Canvas)
{
    local string MapName;
    local int Pos;

    switch(Outer.TransitionType)
    {
        case TT_Loading:
            MapName = Outer.TransitionDescription;

            /* Remove .udk from map */
            Pos = InStr(MapName,".");
            if (Pos != -1)
            {
                MapName = left(MapName, Pos);
            }

            /* Get Random Texture */
            Background = GetTextureForMap(MapName);
            DrawImageTransitionMessage(Canvas,MapName);
            break;
        case TT_Saving:
            DrawTransitionMessage(Canvas,SavingMessage);
            break;
        case TT_Connecting:
            DrawTransitionMessage(Canvas,ConnectingMessage);
            break;
        case TT_Precaching:
            DrawTransitionMessage(Canvas,PrecachingMessage);
            break;
        case TT_Paused:
            DrawTransitionMessage(Canvas,PausedMessage);
            break;
    }
}

//Absolutely no need for final modifier. I added it just for fun only. :P
final function DrawImageTransitionMessage(Canvas Canvas,string Message)
{
    local float XL, YL;
    local string DisplayMessage;
    local string HintMessage;
    local class GameClass;
    local string GameClassName;

    /* Capitalize the string */
    DisplayMessage = Caps("LOADING: " $Message$"...");

    /* Assign font to be used with LOADING:  */
    Canvas.Font = TransitionFont;
    Canvas.bCenter = false;

    /* Draw the texture on screen */
    Canvas.SetPos(0,0);
    Canvas.DrawTile(Background, Canvas.ClipX, Canvas.ClipY, 0, 0, Background.SizeX, Background.SizeY, BackgroundColor);

    /* Get the displamessage length and save it to XL and YL */
    Canvas.StrLen( DisplayMessage, XL, YL );

    /* [TEXT SHADOW] Set the position to slightly above bottom right corner of the screen */
    Canvas.SetPos((Canvas.ClipX - XL) - 10, (Canvas.ClipY - YL) - 10);

    /* [TEXT SHADOW] Set the color to black */
    Canvas.SetDrawColor(1,1,1);

    /* [TEXT SHADOW] Draw the shadow Text */
    Canvas.DrawText( DisplayMessage, false );

    /* [TEXT] Set the position to slightly above bottom right corner of the screen */
    Canvas.SetPos((Canvas.ClipX - XL) - 12, (Canvas.ClipY - YL) - 12);

    /* [TEXT] Randomize the colors */
    Canvas.SetDrawColor(Rand(255),Rand(255),Rand(255));

    /* [TEXT] Finally draw the LOADING:
 text */
    Canvas.DrawText( DisplayMessage, false );

    /* No need to draw hints for Main menu */
    if (Message != "MainMenu")
    {
        /* Find the game class: Eg: returns UTDeathmatch_0 */
        GameClass = class(FindObject(Outer.TransitionGameType, class'Class'));

        /* Cast teh game class name to string */
        GameClassName = string( GameClass.Name );

        /* Get random hint message from Game Class */
        HintMessage = LoadRandomLocalizedHintMessage( string( class'UTDeathmatch'.Name ), GameClassName);

        /* Hint message exists so... */
        if( Len( HintMessage ) > 0 )
        {
            /* Assign font to be used with HINTMESSAGE */
            Canvas.Font = HintFont;

            /* Get the HintMessage length and save it to XL and YL */
            Canvas.StrLen( HintMessage, XL, YL );

            /* We want the Hint message to be centered. So center the text */
            Canvas.SetPos((Canvas.ClipX - XL) / 2, Canvas.ClipY / 2);

            /* Again randomize the colors */
            Canvas.SetDrawColor(Rand(255),Rand(255),Rand(255));

            /* [TEXT] Finally draw the Hintmessage text */
            Canvas.DrawText( HintMessage, false );
        }
    }
}

final protected function Texture2D GetTextureForMap(string mapName)
{
    switch(mapName)
    {
        case "Map1":
            return MAP1_BackgroundTextures[Rand(MAP1_BackgroundTextures.length)];
        break;
        case "Map2":
            return MAP2_BackgroundTextures[Rand(MAP2_BackgroundTextures.length)];
        break;
        case "Map3":
            return MAP3_BackgroundTextures[Rand(MAP3_BackgroundTextures.length)];
        break;
        default:
            return //any default texture here;
        break;
    }
}

DefaultProperties
{
    HintFont=Font'YourPackage.YourHintFont'
    TransitionFont=Font'YourPackage.YourTransitionFont'
    BackgroundColor=(R=1.0,G=1.0,B=1.0,A=1.0)

    MAP1_BackgroundTextures[0]=Texture2D'YourPackage.YourGroup.YourMap1Texture'
    MAP1_BackgroundTextures[1]=Texture2D'YourPackage.YourGroup.YourMap1Texture'
    MAP1_BackgroundTextures[2]=Texture2D'YourPackage.YourGroup.YourMap1Texture'

    MAP2_BackgroundTextures[0]=Texture2D'YourPackage.YourGroup.YourMap2Texture'
    MAP2_BackgroundTextures[1]=Texture2D'YourPackage.YourGroup.YourMap2Texture'
    MAP2_BackgroundTextures[2]=Texture2D'YourPackage.YourGroup.YourMap2Texture'

    MAP3_BackgroundTextures[0]=Texture2D'YourPackage.YourGroup.YourMap3Texture'
    MAP3_BackgroundTextures[1]=Texture2D'YourPackage.YourGroup.YourMap3Texture'
    MAP3_BackgroundTextures[2]=Texture2D'YourPackage.YourGroup.YourMap3Texture'
}

6: Save it to UTGame folder
7: DONT COMPILE NOW!
8: Open DefaultEngine.ini and under section [Engine.Engine] change GameViewportClientClassName to GameViewportClientClassName=UTGame.MyCustomViewpor tClient.
9: Open DefaultEngineUDK.ini and under section [FullScreenMovie] remove all LoadingMovies entries.
10: Delete UDKEngine.ini
11: Do i really have to say that you need to re-compile the scripts and enjoy your loading screens. 

Exercise for you:

  1. Canvas supports a variety of Draw* functions. Use them to create advanced loading screens
  2. I havent checked if Canvas can draw materials. If they can then draw animated materials.(*hint* *hint* bik movies)

I hope you find this useful. 😀

New Feature: Config Class Finder


Hey everyone,

Here is a new feature that you can expect in next version of Unreal X-Editor. You will be able to search for all UnrealScript that implements a specific config class. For example here in the below screenshots you can see how i found all classes that implement UDKGame.ini.

New Search Option

New Search Option

Searching for UDKGame INI

Searching for UDKGame INI

Finished Searching. Toast shows the number of files too!

Finished Searching. Toast shows the number of files too!

 

 

%d bloggers like this: