Recreating Deus Ex (1) Game functionality

Hello Ladies and Gentlemen!

As you clicked onto this thread, I assume that you know the game Deus Ex from 2000. If you do not, that’s not a problem, maybe you can help anyways! :slight_smile:

So, I wanted to recreate some gameplay aspects of the first Deus Ex to understand how Blueprints and all that good stuff work.
I don’t want to create a remake or so, I just love this game and as I already have all the assets like Textures, Models, Sounds and whatnot, I find that it’s a great opportunity to learn Blueprints by using these assets.
I used the First-Person template to get basic functionality.

As this thread consists of different Blueprint-Problems or similar, I am dividing each problem with a big heading :slight_smile: Also I provided a short summary at the end of each “chapter” for people that don’t want to read everything :smiley:
But first, the table of contents:

1. DataLink-Triggers
2. Pickup-Logs
2.1. Highlighting Actors
3. (Non-Blueprint-related) Transparent decals

Problem 1: DataLink-Triggers (InfoLink-Triggers)

So, if you played Deus Ex, you know that you receive different InfoLink-Messages throughout the game.
If you haven’t played Deus Ex: InfoLink-Messages are just one-sided “telephone calls”, where you see the name of the one who calls you, as well as the message of course, while still being able to walk around and do things. Audiologs, or something like that.
Ingame you walk through “InfoLinkTriggers”, which… trigger the message. I want to rebuild that one.

For testing purposes I created a very simple Widget Blueprint which looks like this:

http://puu.sh/gyuxr/47bbcb81a1.png

And here you can see what I did to receive the information from the Trigger. I bound that one to the Text-section of the “$Name” Text.
My assumption would be here that the “Get Player Pawn” is wrong, but I don’t know what to take instead.

http://puu.sh/gyuGc/56759258cb.png

But now I am going to post my setup of the DataLink-Trigger (called MessageTrigger at this point in time):

http://puu.sh/gyuXV/18185e4600.jpg

There you see that I just want to create the widget as soon as the player walks in.
Also you see the two public variables I made to show up in the widget. Once again, it’s the Name of the sender + the message.

In the editor, I set up the Name and message variables on the trigger like this:

http://puu.sh/gyvcz/c8c5fa6013.png

But when I test it ingame…

http://puu.sh/gyv0Q/a248317123.jpg

… the $Name-Box is invisible (because it doesn’t receive the text it is bound to), and it shows that error that I specified when the cast fails.
Once again, I assume that the actual problem would be that I chose “Get Player Pawn” as the object. I think there has to be a reference of this instance of the blueprint, but I don’t know how to achieve that.

Summary:

  • Created two Blueprints: A widget Blueprint with two Text boxes, where currently the “Name” is bound to receive the contents of the Name-variable of the MessageTrigger I set up in the editor.
  • Set the MessageTrigger to create the widget when touching it, and storing the variables for the Name, and the Message.
  • I think that the problem is the “Get Player Pawn” as the object while casting, but I need help to let the game know that I mean THIS instance of the Blueprint I set up at in the Level.
  • I want to avoid using the Level Blueprint. I want the Trigger just to be placeable into the game, setting up the Variables (Name and Message) and then to be completely usable - that is, showing up the Widget, the Name, and the message by just walking through.

Problem 2: Pickup-Logs

Pickup logs are just small messages that appear on top of the screen when picking something up.
This is how it looks like in Unreal Engine 4 just using a simple widget:

http://puu.sh/gywcw/eef18307e4.jpg

(That’s German for “Found: Bioelectric Cell”)

Everything works nicely, but I set it up way too inconvenient I suppose, so I would like to know how I could optimize my Blueprints.

I have two problems with how I set it up:

  1. I hard-coded the Widget. That means for each Pickup I’d have to create a new widget displaying the correct item name.
    If I’d add a variable called “ItemName” as a string to the pickup actor (in this case, the Bioelectric Cell), how can I assign it to the text of the widget?
    I guess I’d set that up similarly to how I did in the first problem, but I need to have this one solved first then :smiley:

  2. This is the Bioelectric Cell Blueprint:

http://puu.sh/gyxdH/9a95de9403.jpg

I created a Box that sets “bIsInRange” either to true or to false. I made that so that I am only able to pick it up when being in range.
The Event “PickUpBioElectricCell” get’s fired as soon as I right clicked on it (using a line trace by channel in the “JCDentonMale” character-class).
Of course, picking up a Bioelectric Cell would increase the variable that holds the amount of cells. At the first Sequence node - this is where things are starting to be weird.

The problem was, that I wanted the log to show up (which works), but only for three seconds. I had to make the trigger box completely small (so that bIsInRange is never true again), shut the light off I added and make the mesh invisible (so that it appears like I took it away from there and put it into my pocket), THEN showing the pickup-log, delaying it for 3 Seconds, and then hiding it again. After this “Remove from Parent” node there is a “Destroy Actor” node which apparently got cut off :confused:

I am not happy with how I set that up, there must be a more convenient way by just Setting InvCells = InvCells + 1, showing the log, and destroying the actor, and make the Widget shut itself off after 3 seconds. Can somebody tell me how to set this up?

Summary:

  • Created a Bioelectric Cell-Blueprint that, when right-clicked on, adds +1 to InvCells variable, fires off a PickupLog Widget Blueprint, makes itself invisible and unusable, removes the widget from viewport after a delay of 3 seconds and then destroys itself.
  • Created a Widget Blueprint that just says “Found: ITEM”, in this case it is hard-coded and says “Found: Bioelectric Cell”, because I don’t know how to pass the name of the actor to the widget.
  • How can I implement the ability to just add +1 to the InvCells variable, calling the log and then destroying itself? All these Sequence nodes I added are not really necessary for what I want to achive I guess.

Problem 2.1: Highlighting Actors
I wanted to implement a visual feedback of when an Object is in focus and can be picked up.
Here, in the original Deus Ex, the player walks up to an object that the player can do something with, and then these brackets show up, telling the player that this item is usable.

http://puu.sh/gyyMV/b61e8ecc43.jpg

It does not have to be exactly like in Deus Ex, I just want to have a visible presentation.
Having a silhouette around the object like in Deus Ex 3 would be nice (in this case, the door is the usable item):

http://puu.sh/gyz4n/ba6bd25cbc.jpg

I do not have an idea on how to get started, but can somebody tell me how I could implement something like this?
And yes, I watched this video of Tesla Dev, but I am not really happy with the result, so that’s why I am asking here again :slight_smile:

Summary:

  • I want to create an outline around actors I can use.
  • I like the way it looks like in Deus Ex 3

Problem 3 (Non-Blueprint-related): Transparent decals

This is another problem that is bothering me. Decals, that I place into the world are somehow just painted onto the texture that I placed it on.
Isn’t there a possibility for decals to look like that there are flat objects laying around? They look like wet newspapers stomped and pressed into the ground :frowning:

http://puu.sh/gyzQQ/b0c72181ca.jpg

This is just awful… I read something about “G-Buffer” or something like that, but somehow that doesn’t solve the problem…
Also, when shining with my flashlight on it, the decals look different. Is there a problem with static and movable light sources?

Okey, that’s it!
I am very happy that you read to this line down here! :smiley:

I read through most of the Documentation regarding Blueprints, but it somehow didn’t answer my questions, because what is explained there is slightly different to what I am trying to achive.
So I wrote this thread to get answers to my particular problems :stuck_out_tongue:

If you know an answer to any of these, could you please be so kind and explain it thoroughly? Tesla Dev’s making nice tutorials, but I don’t understand a thing that he is doing there. So if anybody knows why I have the problems, it would be very nice if you could tell me what exactly I was doing wrong, and how to fix it :stuck_out_tongue: :slight_smile:

Once again, thank you very much for reading, and I hope you can tell me what I am doing wrong :slight_smile:

-Crimi

those first one’s are way over my head, cuz it’s just too much.

the first one you’ve probably got your cast setup wrong, and probably using a database of some kind would be better for that whole message thing. (maybe someone else can steer you right there)

I think the highlighting is done completely different in that game. (again maybe someone else can point ya right there)

but as far as decals:
you are probably talking about setting the sort order but be sure to read all of this doc plus the warning that comes with it or the material settings

https://docs.unrealengine.com/latest/INT/Engine/Actors/DecalActor/index.html

For your first problem you could store a reference in the Player Blueprint to the latest Message Trigger. This would allow you to easily get what you need to update the content of your Widget :slight_smile: I might be too concise so I join you screenshots of my Blueprints.

Variable in the Player Blueprint to store the reference:

player_variable.png&stc=1

Message Trigger Blueprint:

&stc=1

Widget Blueprint as well as my Widget:

&stc=1

&stc=1

And the result:

&stc=1

&stc=1

I hope it fixes your problem :wink:

For 1 and 2, the problem is the way you structure the functionality. Why are you doing it in the pickup actors? UI functionality, especially this type, should be done in the Player Controller.

1:

First off, always remove your widgets. They don’t auto-remove, and they stack. I am assuming you don’t want three with different text in exactly the same position, overlapping and making them all illegible. Also, you were trying to convert the player pawn to a totally unrelated actor. That is why the cast was failing.

For your Message Trigger actor, this is what you want to do:

Then you can delete it or whatever.

For the widget, set up two bindings for the Name and Text displays, and two local variables. Make sure ‘Expose on Spawn’ and the eye icon are checked.

Then, all you need to do is set the player controller to make a widget, set the variables, show it, then delete it.

2:

Same as #1. Fire off an event, passing relevant variables, to the PC, letting it take care of UI code. Just send the event, and immediately delete the actor.

Very simple once you have the right foundation.

2.1:

Custom Depth in Unreal Engine 4 - Tom Looman That should help with outlines.

3:

Consider just using a flat mesh instead. Might get a bit better performance.