This could also be the cause of certain desyncs users report in our game. Cause if the game has to Garbage collect at a bad time it could cause the netcode to miss a chance to rollback.

Hate to say it but this could also be the reason why other UFE games on steam don't even use the rollback netcode included and use true ggpo. For for the simple fact of all the allocations this netcode can cause.

Cause you have to think not everyone is going to be making their games only for PC. In order to maximize revenue we all need to get our games on a console. So in the end consoles tend to have limited resources in this case, if UFE continues to collect garbage data in the background it will slow our games down and ruin the experience of our customers.

Having smooth gameplay will keep the player engaged in our games and not getting turned off of it due to seeing jarring movements.

It's bad in Terrordrome but so far no users have reported this issue of seeing stuttering unless they don't have the keen eyes like I do.

Hopefully we will see this fixed sooner or later I'll be happy to see my game looking smooth like most of the latest Fighters out there.

So first of all the netcode is in fact always running in the background even offline. First place to reduce allocations at least for offline is go to the FluxCapacitor script and find the first time SaveGameState is and then make it so it only runs online or if you have emulateNetwork enabled or the recordToggle enabled.

The second place that causes allocations is within FluxExtensions within the GetInputEvents method so pressing a lot of buttons will cause a lot of GC.Allocs. We had a previous coder try to fix this but it broke the netcode so we had to revert it. Very sure the main issue here is it keeps creating a new Dictionary. But using a reference for this instead of making a new one breaks the input system.

Hopefully what I have here helps you out cause to be honest with you I don't believe this will be fixed anytime soon.

xHerox wrote:

Right now we end up with one of our programmers trying to implement ggpo since we can't figure out how to fix the desycing issues with the native rollback. But we're using v2.1(can't upgrade project) I'm not sure if it's still needed if you're in a newer version though.

Since your doing this would mean your having to create your own deterministic way of checking inputs but good luck, changing to over to use true ggpo might help. But you have to make sure everything that's going to change the direction of a fight has to be tracked. This could be the issue your having to UFE's own netcode whatever you created you have to make sure it's being included in the tracker in some form. In Terrordrome we just recently have been able to get soild matches we are getting close to a desync free online experence.

Storm87 wrote:

I'm talking about upgrading photons server. They have other packages you have to pay for.

like Photon PUN 2+ https://assetstore.unity.com/packages/t … n-2-120838

or other packages like https://www.photonengine.com/en-US/PUN/Pricing

Not sure if they will make a difference, just saying.

It will still have the issue of having to send data from one users PC to the cloud then to the opponent then back to you. Fantasy Strike in fact uses pure ggpo and doesn't use UFE's own rollback netcode. As for what network asset they are using I'm not sure I know they have everyone connect to a server for match making due to cross-play with PC and consoles.

Very sure a direct connection in the scripts current form is always going to send data through Photon. Photon does cause a lot of lag, within Terrordrome since we are now on steam we are using steam p2p. This has nat traversal so no need of port forwarding and can work over mobile networks with strict nats.

Another option to use is LiteNetLib but would need a server yourself for Nat traversal tried doing this myself but could never get it to work.

6

(11 replies, posted in General)

Tried to do the same thing in order for UFE to work with Mirror a class has to be created that has a class inheritance to MessageBase. I was trying to use the script that was in the old Unet connector api but the byte[] data from SendNetworkMessage would never reach UFE's OnMessage Event.

7

(11 replies, posted in General)

UFE uses Photon for both Matchmaking and for player connection. When it comes to my project when we first launched we may have went over the 20 ccu limit on the free tier once. I believe in order for this to happen 20 players would have to be all playing at once.

To be very honest with you I believe Photon causes an overhead in the connection and causes lag, the netcode could be the best ever but if packet loss happens then the game could desync very quickly. Plus Photon's regions are locked so if you keep best region settings on then if you want to fight someone on the west coast while on the east coast you won't find that players game.

In our next update I was able to get steam's p2p connection to work within our game won't know if this helps are lag problem till I release it and hear feedback from our users.

I have read in many places that rollback netcode works best if the connection is completely peer to peer with photon all your users are connecting to a master server. So the data has to travel more has to come from you to the master server then back to your opponent then back to you.

In closing in order to use steam p2p you must go through the process of getting your game on steam to obtain an app id.

Yeah I was able to help with this issue.

All of us in the TerrorTeam have worked very hard the pass 5 months to get this out and it's finally here!!

Come and sign up for the early bat tier before they're all gone! But there are even more interesting rewards, check them out.

Playable demo is available on the kickstarter page it has 2 characters with one stage.

kickstarter

https://www.kickstarter.com/projects/81 … he-legends

Thanks for the post Strider!!

So I got this working by making a text component and then send the strings to textcomponet.text. Also changed how moves are displayed on the screen by making a bool and a enum that goes specialmoves,combo strings,supers.

Then I duplicated the code block and changed the if statement to the bool and then use the enum to find what type of moves it's looking for.

Then made 3 different string varaibles with 3 text components on the screens script.

To get the Screen script just duplicate UFEScreen.cs and DefaultUFEScreen.cs and rename them to CommandsScreen.cs and DefaultCommandsScreen.cs. Then you may have to remove some lines of code in the CommandsScreen.cs then just pause the code block in to the OnShow function in DefaultCommandsScreen.cs

12

(180 replies, posted in UFE 1 Source (Deprecated))

Added this to my project and noticed that last part of the code would cause root motion to be enabled on animations that it's not active on or it would duplicate the X axis for root motion being applied.

To fix this just change this

 
if (currentMove == null) {
            newPosition.y += myMoveSetScript.GetDeltaPositionV3().y;
            newPosition.x += myMoveSetScript.GetDeltaPositionV3().x;
            newPosition.z = 0;
            transform.position = newPosition;

To this

 
if (currentMove == null) {
            newPosition.z = 0;
            transform.position = newPosition;

This will keep the last move or current move from having root motion applied or causing duplicated x or y force. All we really want to do is set Z back to zero.

I'm trying this myself currenting using code from the existing Alt costume code found here

http://www.ufe3d.com/forum/viewtopic.php?id=776

So far I can press a button and it will show the list of costumes a character has. When you select the character with the list up it will use the first costume created.

What I'm going to need help with is trying to get the cursor to redirect to the list and set the value in the selected costume int value then it would work just like how MKX has their costume selection. Other issues I'm having is when the list is displayed if a character has less costumes than the previous character it will show the previous characters costume name in an empty slot.

I gotten this far at least anyone else wanna help out feel free to PM me.

Good then I'm among friends then lol.

Well I'm not wanting to make it MK style in the previous game Terrordrome : Rise of the Boogeyman we had finishing moves that worked like how MKX did Brutalities. How we made them was if on the last round and opponent was at low health when you had full special bar you could pull of the finisher.

So just need the variable for roundsWon to work and this will be gold for me. But if you want to make a full MK style finishing move system I'm down to help. I'm sure most of the gore people would have to get creative with their prefabs.

Thing is I'm just learning how to code in UFE with trail and error not really knowledgeable with coding to say.

Awesome man been wondering what caused that I had a work around I was using by just pasting my values in.

My editor doesn't crash anymore when inputting values great job!!

So I have this in my editor now

https://i.imgur.com/EURb7PB.png

If checked this should make the move only work on the winning round of a match.

There is what I got so far inside MovesetScript.cs

   private bool cankill(int winningRound)
    {
        winningRound = UFE.config.roundOptions.totalRounds - 2;
        if (controlsScript.roundsWon < (UFE.config.roundOptions.totalRounds * (winningRound / UFE.config.currentRound))) return false;
        
        return true;
    }

So the issue is the above code by looking at it should only work for player 1 but it also works for player 2. I have tried using
" controlsScript.opControlsScript.roundsWon " but it does the samething. I have also tried using  " controlsScript.playernum == 1 && " at the beginning but if Player 2 wins a match the move is enabled for Player 1. Also tried including this " opControlsScript = opponent.GetComponent<ControlsScript>(); " but it had no effect to obtain Player 2's roundsWon.

So if anyone can point me in the right direction on how to get the roundsWon for Player 1 and 2 I will repost this as a tutorial and/or include it with my Life check gauge condition tutorial.

I figured it out but had to add bools to enable or disable it otherwise all other moves would have to be 100% on the life check.

The code is right you just have to change what the condition is on the bool cause the code is asking If meter is less that the required amount then it's false don't do the move.

So in this case we just change the return false to return true

Going to make a tutorial and post it in Source Coding forum soon smile

So I had tried this myself by just copying over the gauge required coding and change variables that are directed at the health total.

But the issue is when I set the life percentage in the editor to say 10% I can still do the move but once they go below 10% they can't do the move anymore. This is the exact opposite of what I'm wanting it should be If below 10% you can do that move not above.

To add to this it would be cool to also have a detection for the move to look at the opponents health if they have low health for the move to be able to trigger like a finishing move.

Sorry to resurrect this year old post but the reason why the last part of code doesn't work he forgot to set the variables for the InputController.

Right under

base.DoFixedUpdate(); 

Paste this

 AbstractInputController p1InputController = UFE.GetPlayer1Controller();
 AbstractInputController p2InputController = UFE.GetPlayer2Controller();

Then paste this

if(p1InputController.GetButtonDown(UFE.config.inputOptions.altButton)){

            this.p1AltCustom =!(this.p1AltCustom);
            Debug.Log("Boton Alterno player 1:"+this.p1AltCustom);
            //this.TrySelectCharacter(this.p1HoverIndex, 1);
            
        }
        if(p2InputController.GetButtonDown(UFE.config.inputOptions.altButton)){
            this.p2AltCustom =!(this.p2AltCustom);
            Debug.Log("Boton Alterno player 2:"+this.p2AltCustom);
            //this.TrySelectCharacter(this.p1HoverIndex, 1);
            
        }

Then it should work

http://trdm.fmhq.us/trdm2.png

We are looking for a coder to join the team officially this will be paying once we reach the first goal with crowdfunding.

You would work directly with me and I would need a strong line of communication to you for when we need things added to the engine/editor. We will add you to the Unity Collab but you will need to have sign a Non Disclosure Agreement first to get you official.

If you haven't seen what the first game looked like check out this video below this is a high level match it will also show you the roster. It featured 80's slasher movie icons like Freddy,Jason, Michael Myers and etc. Terrordrome - Rise of the Boogyman was created with the Fighter Maker 2nd engine using 3d models rendered in 2d.

[media]https://www.youtube.com/watch?v=itKKApe6sEU[/media]

Just to note Terrordrome - Reign of the Legends will not feature these characters we are going in a different direction having characters that are Public Domain and Creepy Pastas since we looking to go retail with this.

If interested in wanting to code for Terrordrome please send a email to Marc Echave (huracan) : hur4c4n@hotmail.com

This is very possible but would need to be coded within the source version or Mistermind himself to add it in a newer version.

I'm in fact needing something like this in my project too!

Anyone with knowledge to code this care to chime in.

23

(2 replies, posted in UFE 1 (Deprecated))

Alright cool my lead developer has decided to go back using a different block that includes root motion itself. But I will wait and see how this works when you get it completed if your willing to share with the community.

24

(2 replies, posted in UFE 1 (Deprecated))

So I'm wanting to be able to apply a different force to blocking while grounded.

I looked in the ControlScript.cs file to location where the variable applyDifferentAirForce is and tried adding the code below it

if (!myPhysicsScript.IsGrounded() && isBlocking && hit.applyDifferentBlockForce)
            {
                pushForce = hit.pushForceBlock;
            }
            else
            {
                pushForce = hit.pushForce;
            }

After putting that in it's not working and I'm sure this is where this override is applied didn't see anything in the PhysicsScript.Cs about the PushForceAir variable.


The reason why i'm wanting this is due to the fact we are using root motion for most of our strong hits they look more natural this way.

Any help would be great!!

Solved this issue by setting the state on the air hit to stand when they hit the ground.

If you would like to do this yourself then search for fallingFromAirHit in ControlScript.cs

then look for

|| standUpOverride == StandUpOptions.AirJuggleClip)) {

under that paste

currentState = PossibleStates.Stand;