does anyone know how to properly end and cleanup a boss fight?

As you may know, that you have to manually end a boss fight that uses UI. If you go with damaging the prop manipulator, with editing the PM health. Then the prop is destroyed and the UI will stay. But it does stop the fight at the cost of not being able to use the boss again. So you have to manipulate everything in verse. I did come up with a way to stop the boss fight in verse but it doesn’t stop the fight everytime. When it does work, though, it works perfectly. The boss returns to his starting position and stops the chase til it is started again. When it doesn’t work though, the boss continues his loop. He chases and attacks without health and is invulnerable.

This is what I have…

Have you tried putting Print statements in the ‘if’ statements that are related to the look direction and the teleport? If either one failed it seems like it may not reset. Teleports can fail.

Hey, are you sure this version of your code works ?

What I see is an infinite recursion and some functions called too many times for no reason

StopBossFight():void=
    return StopBossFight() # infinite loop, should crash verse?
OnBossDefeated():void=
    StopLoopingAnims() # stop anims once
    StopBossFight() # stop anims twice
    return StopBossFight() # stop anims thrice

The problem with your code is that you don’t ever use concurrency expressions, those kind of things would always require atleast one race: block imo (see Time Flow and Concurrency)

But if I had to guess, I think your error might come from what happens after a timer is triggered ? But we might need to see more of your code to understand better

If you want to restructure your code, this is how I would do it

race:
    # Exit condition = boss dead
    loop:
        if(BossCurrentHP <= 0.0):
            break
        Sleep(0.0)

    # Boss damage loop
    loop:
        # Await prop manipulator damage
        # <apply damage>

    # Boss attack loop
    loop:
        # <play boss attacks>

# <play death anim>
StopBossFight()

The teleport always succeeds but then moveto would resume after, but only 50% of the time.

I understand time flow. But I am still new with coding and what I can do with it. What I came up with is a timer manager. It is suppose to set in motion the next boss in line. I did find a solution by putting an if statement at the end of the movement functions that seems to work so far, but there is no telling if I am doing it wrong. As I said I am fairly new to this.

1 Like

I tried to understand your code, but it’s really hard to debug when you only use separate functions like this (and creative 1.0 devices ?)

If you wanna learn more about concurrency in Verse, I suggest you take a look at the default Epic templates, they are great to learn. I feel like it could be a good investment as I think that race and other concurrency expressions are the best feature in Verse for me :+1:

But if you want to debug like this, yeah maybe put some Print statements everywhere and you’ll eventually know :')

I want to learn as much as possible. There isn’t too many teachers for verse out there right now. (I mean there are a few but they are doing other things that I plan to get into later) If you want I can send you my boss manager and timer manager in a dm so you can see what I have done?

Sure I can have a look :+1: