Yet another FPS blueprint tutorial...

For prone, you’d just need to set the capsule half height to a lower number, which is essentially what the built in crouch function does. And I know it was a while ago, but I had dial-up 6 years ago in KL, Malaysia, and it sucked… I remember waiting several hours for 120 MB to download, now that would take me like 15 seconds haha…

Yeah, I tried the halfheight… the problem is then you end up below the ground. I went into the engine source and tried to do what the crouch function does, but in BP, but still can not get it to work in multiplayer… in single player it’s fine. Probably another ‘BUG’ that they don’t intend to fix any time soon.

I’m not sure if you’ve watched past the animation part of my tutorial series, but the animation compensates for it being underground. The prone animation should go from standing, to prone at head height (the player’s body should move to where the head is to compensate for the capsule and mesh being lower.

That makes sense, but I am not an animator, so i can only use what others have made. But then again, my crouch animation doesn’t move up to head height, and works without dropping below the floor. ugh, this stuff get’s so **** frustrating.

I guess to simplify what I meant, the head should not move down to the body for crouching and proning, but rather the body should move up towards the head.

Yeah, I knew what you meant.

@ckj, you still have an issue or did you figure something out?

Thanks for all your help with these tutorials.

I’m still trying to wrap my head around replication. It took me 6 hours last night just to figure out how to convert my “equip weapon” and “fire weapon” functions to work in multiplayer. For “equip weapon”, I tried to do something similar to the jog function setup, but it didn’t work. I eventually figured out that all I had to do was just call a “run on server” custom event that had the “equip weapon” functionality, and every player sees one another equipping as necessary.

Then, for “fire weapon”, doing the same as “equip weapon” didn’t work at all. I had to create a “multicast” event that gets executed on all clients to do the firing functionality.

I think I might have an idea as to why, but the concept isn’t concrete. For “equip weapon”, the client only needs to tell the server, “Hey I’m equipping this weapon”, and the server updates him appropriately and all the other clients can see the updates without having to call anything on their own. This is why the “run on server” replication works here. But for “fire weapon”, the client needs to tell the server, “Hey I’m firing this weapon,” and then the server has to make sure all the other clients know “Hey this guy fired his weapon,” and this is why the “multicast” is needed.

Still not 100% sure this is the correct way, but at least it works for me. Now to see if I can collision, hit tracing, and damage working with multiplayer next.

EDIT: Just remembered there is a multiplayer shootout in the learn tab. Maybe I can get some help from there, and hopefully it is in BP.

Yeah that shootout is in BP.

Replication along with classes can indeed be confusing. You are right that when your local character does something like shoot a gun, you need to pretty much tell the server, and the server passes that back to other clients… sometimes you have those clients perform the action locally (such as an explosion) so as not to overtask the server. You need to remember which classes exists where and replicate or not. I am working on moving bits into different areas (from game mode to game state, etc) so that I am more properly set up. Here is a little thing I put together to help remind me:


Really appreciate you checking in. I figured it out – In the Leave_Current_State macro I had somehow drug out an incorrect set node for current_state. I don’t have a screenshot, but there was a text input next to the Current State input. I deleted it and dragged out another from the macro input and all is well.

I’m going to start Preparing for Network Sessions section tonight. Thanks for such a great tutorial. I’m having a lot of fun with it.

I am working on passing all the info (mode, map, timelimt, score) and building a player list… and testing via a ‘scoreboard’… this whole what class replicates and what items replicate and how is really a pain in the backside.

PlayerState holds a PlayerName variable… but from blueprints, YOU CAN NOT SET IT. Same for so many other things… so you have to make your own to deal with it… so frustrating.

Am having a real rough time with the next part of the tutorial. As an example, I moved things around a bit, so when it calls up the ‘show_selections’ screen to pick class… works fine on host… run a client and it pops that screen up on the host, not client. argh. I don’t know how long it is gonna take to get this sorted out, and I’m kinda burned out a bit on just this one part.

I am hoping the timing of this training stream (Training Stream - UE4 Game Framework Basics in Blueprint - Nov 10th, 2015 - Events - Unreal Engine Forums) is perfect, and perhaps it will clarify several things.

hi guys, regarding the weird Audio, after much head scratching, do everything as per Arbopa’s instructions, but in the sound class set up a parent above the master, not logical, should really exasperate the error, but actually makes it all work correctly, could someone give this a 5 minute test to confirm cheers :slight_smile:

I might have to go back through my tutorial for that part, because maybe I altered something, but I set it up like that, and I have the same issue. Master at 100%. others at something else… apply, quit come back, they are ok. Set master lower, save quit, come back in and all others were lowered down as well. Raise master and apply and quit come back in, master is right, but the other volumes do not go back up… argh.

I think the way to go about it is with several SoundMixes… If you create several soundmix objects, say name the first Mix_100 and add all your sound classes in it, set their volume to 1.0. Then a Mix_90 where it is the same but volume adjuster is set to .9 for all of them… and so on down the line… then you need to change the slider control for master to just return a number and switch off that to ‘Push Sound Mix Modifier’ for the right one.

I think that may be the solution to all of this.

Unfortunately there is no way with BP’s (and maybe even C++) to adjust that ‘volume adjuster’… which sucks… but it is what it is.

As a short tutorial to make this work. I created 11 different 'SoundMix’s … named Mix1, Mix2 … Mix10 … in each I added 5 elements, for each of my sound classes, and set the ‘Volume Adjuster’ to 0.0 for Mix0, 0.1 for Mix1, etc.

This is my Mix0:

Made a variable in L_GameInstance_BP called ‘masterVolume’. Type Integer. In MM_S_Audio a variable called ‘oldmasterVolume’ type Integer.

Then in our MM_S_Audio for 'OnValueChanged(Master_Slider), I changed it to this:


New Macro ‘popOld’: (this and push new, similar, and you can figure out what you can not see)

New macro ‘pushNew’:

The ‘changeMaster’ macro:


That deals with it right off the bat, but we need to change the loading and saving a bit too… next post.

In MM_Settings, ‘saveVolumes’ function… Remove the ‘Victory Get Sound Volume’ … we will set master to 1.0 upon loading, and it will stay there, our new ‘control’ will be the mixes we added in. (actually, I think with this method we can have all our sound classes as their own thing, with no linking to a master, but this is a ‘quick fix’ as it just struck me)

(BTW, I right click on my cast to l_gameinstance and select ‘convert to pure cast’ to change the format of the node, so it does not need an execution path)


This saves our ‘masterVolume’ from our GI in SC_Master instead of the actual master sound’s volume.

In L_GameInstance_BP, add a macro ‘pushVolume’ and pretty much copy from the ‘pushNew’ in our MM_S_Audio… because I am doing this quick … there is a better way to not duplicate the code… a macro library or a function somewhere that can be referenced all over…

Now in our L_GameInstance_BP, loadSettings function… we make the following changes:

So we just set ‘master’ to 1.0, and reconnect SC_Master so it sets our ‘masterVolume’ and pushes it into play.

Oh, in MM_S_Audio, event construct, we need to set our slider/text differently now, so created ‘setslidermaster’ macro:

And then replaced the set_slider that set the master with it:

That’s it…

Now perhaps I had added something else in my code that I missed preventing mine from working with the ‘super’ sound class as a parent… if so, I did a lot of work for nothing… but oh well… Enjoy.

Oh, I am also working on putting the whole tutorial in PDF form, going back and adding all the ‘fixes’ and changes so it is one straight flow through. … it’s gonna be long in the end.

couple of quick questions:

  1. i downloaded project from Dropbox - Error. All i need it to work is copy Advanced Session plugin into project folder, correct?
  2. i missed part of wiki about making score limit, is it compulsory for a project to work?
  3. a bit unrelated, but how do i make this nodes