26

(2 replies, posted in Tips & Articles)

derkoi wrote:

Hey guys,

Just thought I'd show you what I use to show hitboxes on the build of the game, many players like to see the hitboxes as part of the training options so I thought I'd add them.

I used an asset from the asset store called Aline: https://assetstore.unity.com/packages/t … ine-162772

I edited the hitbox scripts to display with aline what they display in the debug options in UFE.

Here's the result:

https://www.youtube.com/watch?v=XJ6JaQZpBJw

Hope it helps some of you.

I'm sorry, but could you walk us through how exactly you edited the hitbox scripts to display the hitbox gizmos? I can't quite figure it out on my own.

I think that might work, but is there any way to be able to buffer normal moves out of wakeup like this?

If I chain the moves like this but I use my already-existing moves, the buffer doesn't work properly and I believe it has to do with the player condition part.

28

(1 replies, posted in Source Coding)

I believe projectiles (and particles) spawned via UFE are animated using Time.deltaTime and not UFE.fixedDeltaTime, and this is causing a few problems for me. Has anyone looked into this issue for their own projects? If so, please save me the trouble of looking into this myself!

I'll update this if I figure it out on my own, but any help in the meantime would be greatly appreciated here!

29

(2 replies, posted in General)

I'm trying to make my character keep their stance after a stance change between rounds.

Is there an easy way to do this?

EDIT: After looking into this, it seems hard coded into the game to reset the combat stance back to stance 1 at the end of the round. I would greatly prefer it if the stance could persist between rounds. I do have source, so where exactly would I look to make changes to the code? It doesn't seem to be ControlsScript.cs or MoveSetScript.cs, but I could be wrong.

I've already tried the way you've described with using a move file. It doesn't quite work the way you'd think it would, as you can't buffer the moves for some reason even if it has chain moves, you still have to press the button during the actual frames you put in under chain moves (at least if you're using the move file for wakeup)

Either way, I'd like to be able to buffer moves for the first possible frame AFTER the basic move completes. So for example, you can press up to jump and then immediately attack and it'll still come out, no timing needed

31

(11 replies, posted in Suggestions)

I got it working myself! I used the code posed in @FreedTerror's thread but altered it slightly so there weren't any errors. I made a response there if you need the fix!

FreedTerror wrote:

@MrPonton your code did end up working but had a few error regarding normal landing.
I made a new thread regarding this topic http://www.ufe3d.com/forum/viewtopic.php?id=3143

I have gotten to the point where in the editor I've gotten a bool and a potential list of move files within each of the basic moves, I just don't really know how to let this list of moves become bufferable out of the basic move it's assigned to.

v Link to the picture of what I have in the editor v

https://media.discordapp.net/attachment … nknown.png

Yes, in addition to being able to buffer air attacks immediately out of jump. Those are the two main things I'm looking to accomplish this way.

Looking to add a buffer into move from basic move toggle on a per-basic move basis, even when the global settings for global execution buffer is set to "move links only"

Does anyone have a good idea where I should start with this?

I got it to work perfectly! To fix the errors you were getting, I changed your code in PhysicsScript to the following:

if (moveSetScript.basicMoves.landing.animMap[0].clip != null){
                        if (controlScript.currentMove != null && controlScript.currentMove.cancelMoveWheLanding)
                        {
                            if (controlScript.currentMove.cancelMoveWheLanding && controlScript.currentMove.moveToCancelLanding != null)
                            {
                                controlScript.CastMove(controlScript.currentMove.moveToCancelLanding, true);
                            }
                            else
                            {
                                controlScript.isAirRecovering = false;
                                airAnimation = moveSetScript.basicMoves.landing;
                                moveDirection = 0;
                                horizontalJumpForce = 0;
                                isLanding = true;
                                controlScript.KillCurrentMove();
                                delayTime = (Fix64)controlScript.myInfo.physics.landingDelay / (Fix64)UFE.config.fps;
                                UFE.DelaySynchronizedAction(ResetLanding, delayTime);

                                if (airAnimation.autoSpeed)
                                {
                                    animationSpeed = moveSetScript.GetAnimationLength(airAnimation.name) / delayTime;
                                }
                            }
                        }

                        if(controlScript.currentMove == null)
                        {
                            controlScript.isAirRecovering = false;
                            airAnimation = moveSetScript.basicMoves.landing;
                            moveDirection = 0;
                            horizontalJumpForce = 0;
                            isLanding = true;
                            controlScript.KillCurrentMove();
                            delayTime = (Fix64)controlScript.myInfo.physics.landingDelay / (Fix64)UFE.config.fps;
                            UFE.DelaySynchronizedAction(ResetLanding, delayTime);

                            if (airAnimation.autoSpeed)
                            {
                                animationSpeed = moveSetScript.GetAnimationLength(airAnimation.name) / delayTime;
                            }
                        }

                        
                    }

That should fix the issue with regular landing, it did for me!

Oh, that's a good call! I didn't even know that adding variables like this would have an effect on rollbacks! I'd definitely like some clarification if that is the case.

I'm not sure if this qualifies for that example because I'm not adding a variable specifically to controlsScript like in that example linked, but if I do have to make changes to another script, I'd like to know so I can fix the guide a bit!

Have you ever implemented a single-hit super move, only to be disappointed when the move is used at the end of your combo and it's doing the minimum possible damage due to damage scaling?

Perhaps you'd think to make the move do unscaled damage? No, that's not quite working because then the move does TOO much damage at the end of the combo... If only there was a way to get the move to only scale so far and then stop scaling...

That's where this guide comes in! It's surprisingly very easy, but requires source to work.

First, in Hit.cs:

Find

 public Fix64 _damageOnHit; 

and add this underneath:

 public Fix64 _minDamageOnHit; 

Next, in MoveEditorWindow.cs

Find

 moveInfo.hits[i]._damageOnHit = EditorGUILayout.FloatField("Damage on Hit:", (float)moveInfo.hits[i]._damageOnHit); 

and add this underneath:

moveInfo.hits[i]._minDamageOnHit = EditorGUILayout.FloatField("Minimum on Hit:", (float)moveInfo.hits[i]._minDamageOnHit);

Finally, for the last step, in ControlsScript.cs

Find

if (damage < UFE.config.comboOptions._minDamage) damage = UFE.config.comboOptions._minDamage;

And add this above it:

if (damage < hit._minDamageOnHit) damage = hit._minDamageOnHit;

And then there you have it! you should have a new option in your move editor for the minimum amount of damage a move could possibly ever do. Useful for letting combo ending moves not quite scale as hard as they would normally!

Have fun and good luck with your project!

38

(3 replies, posted in General)

I have reason to believe that for some reason the game doesn't rollback projectiles animations properly, causing desyncs in that situation. I think it should be looked into within the rollback code.

In the meantime, I suppose I'll just have to disable rollback to get actual matches in.

39

(3 replies, posted in General)

Upon further investigation & going through the map recorder, I believe projectiles to be causing desyncs. Is there any prior evidence of this happening to anyone? If so, has a solution been found?

40

(2 replies, posted in General)

I'm trying to use the map recorder but I can't find any documentation on how it's supposed to work. I can't tell how I'm supposed to be using it or even if I need to be using it (all my characters are 2D sprites)

I've heard without the map recorder Rollback Netcode will desync but I can't quite figure out what I'm doing with it... Can someone please help me and potentially walk me through using the map recorder?

41

(2 replies, posted in General)

Yo this is really cool! It's even compatible with the shader I use! If this gets really good, I might just have to include this in my project too if possible haha

42

(3 replies, posted in General)

I've read up a few threads on this topic, but I can't quite figure out how to fix this issue on my end. As far as I'm aware, there's some issue where the game desyncs but it doesn't notice the game has desynced and therefore doesn't rollback or disconnect.

Has anyone found any elegant solution for getting rollback to work consistently with your builds? I feel like I've tried everything.

Edit: read the post below

43

(4 replies, posted in Source Coding)

B_LIN wrote:

@Starcutter I added the code but When I try to change the ZTest the bottom UI that holds my Special bars do not appear in front of my background. My game is 2D so that might be why. Do you have any suggestions?

Hmm, if your background is just a flat image, You may want to try messing with the sorting layers? Sorry if I'm not much help and good luck!

44

(13 replies, posted in Source Coding)

Mistermind wrote:

Try using

Time.timeScale = 0;

But make sure you have "Use FixedUpdate for Inputs" disabled under Global -> Advanced Options.

I've tried this with my project, and it does indeed freeze my projectiles & particles, but when the game is paused I can't adjust the pause menu without using my mouse. Is there a fix for this? Would be greatly appreciated.

45

(2 replies, posted in Suggestions)

A good way for a per-move damage scaling option would be to add a "minimum damage" to the move editor. That way, if the scaling is too high, a single-hit super move can still do above the minimum damage set in the global settings while still being not as good as if it was hit raw with no scaling.

EDIT: I figured out how to implement this and added a tutorial to the tips section: http://www.ufe3d.com/forum/viewtopic.php?id=3189

So I've come across this issue, for some reason when doing command moves out of another move, the inputs are hyper-lenient, to the point where it's actively detrimental.

For example, often I'll slightly roll my thumb forward on my D-pad when trying to do a crouch input, and I'll get the command quarter-circle forward motion instead of my down heavy like I've intended. I'm still holding down, so it really shouldn't count as the command input since if anything I've only done the down and down-forward motions.

This only acts this way out of a chain move and I have no idea why. Regularly, the input would need to release down in order for the command input to happen.

Please help, this sort of thing is really detrimental to my gameplay!

47

(4 replies, posted in Source Coding)

Oh, I just figured out how to do this the other day for my project! Here's how I did it.

in DefaultBattleGUI.cs At the top of

public override void OnShow ()

I just added

UFE.canvas.renderMode = RenderMode.ScreenSpaceCamera;
UFE.canvas.worldCamera = Camera.main;
UFE.canvas.sortingLayerName = "UI";

The last line there may not be needed for yourself, I was doing it so my characters could jump in front of the UI.

If that's what you're going for, I recommend giving all your UI elements a shader with ZTest Always. And if you want some UI elements in front of your characters, you should add a secondary canvas to your BattleGUI prefab with a different sorting layer, that's how I got it to work for me!

Anyways, best of luck!

48

(1 replies, posted in Suggestions)

I think the "counter move" option is really useful, but I think adding an option to use a specific hurtbox to counter with would be very helpful. Not only would the option for specific targeting of areas to counter be helpful, but also it'd allow countering projectiles using a "projectile-only" hitbox.

I've been thinking about this for a while now and I think this would be highly beneficial.

for example, I'm trying to create a move with a "down down" input, but some of the input settings are conflicting with the crouch moves, and since I don't have to return to neutral, I can just mash down and my attack button to execute the move instead.

I think having an option for "neutral" stick position in the input options of the move would help prevent things like this!

50

(4 replies, posted in General)

StriderSpinel wrote:

You could use the juggle weight overwrite in the moves properties... but i guess it can help just a bit.

I don't think this quite helps because as far as I can tell it doesn't reset the juggle decay unfortunately... Maybe I'm missing something though!