Battle Royale TopDown
Your Gaming Circle membership provides all samples, SDKs and support needed to create and launch successful multiplayer games in record time. For non-gaming, our Industries Circle gives you the complete suite plus exclusive license options.
Overview
This sample is provided with full source code and demonstrates how Quantum can be used to create a top-down battle royale game for 32 players.
It showcases the basic features of a battle royale game, such as death zone behavior, inventory, etc.
        
        
        
        Download
| Version | Release Date | Download | 
|---|---|---|
| 2.1.7 | 6月 22, 2023 | Quantum Battle Royale Top Down 2.1.7 | 
Technical Info
- Unity: 2020.3.37f1;
 - Platforms: PC (Windows / Mac), and Mobile (Android);
 
Highlights
Technical
- TopDown Character Controller.
 - Raycast projectiles based on delta-movement.
 - Respown Points with Entity Prototypes.
 
Gameplay
- Granade Launcher.
 - Custom gravity for 2.5D physics.
 - Rocket launcher with Animation Curve acceleration.
 - Drop weapon system.
 - Battle Royale Death zone.
 - Players combat messages.
 - UI indicator for the safe zone direction.
 - Heal powerup;
 - Mobile-ready UI controls.
 
Controls
Use W A S and D to move, Q, E or Mouse Scroll to change weapons. Stand close to an item until for a few seconds to collect it.
Grenade Launcher
When fired, the launcher instantiates a grenade that behaves as a bouncing physics object capable of overpass low enough obstacles. To achiev this behaviour in a 2D physics-based game, a custom gravity was emulated in combination with a 2.5D Transform.
C#
public override void Update(Frame f, ref Filter filter)
    {
      EntityRef entity = filter.Entity;
      CustomGravity* customGravity = filter.customGravity;
      Transform2DVertical* transformVertical = filter.TransformVertical;
      PhysicsCollider2D* collider = filter.Collider;
      if (customGravity->VerticalSpeed <= 0)
      {
        var distance = transformVertical->Height + FPMath.Abs(customGravity->VerticalSpeed * f.DeltaTime);
        if (transformVertical->Position <= distance - (collider->Shape.Circle.Radius))
        {
          if (customGravity->VerticalSpeed > _bounceThreshold)
          {
            transformVertical->Position = _groundHeight;
            customGravity->Grounded = true;
          }
          else
          {
            customGravity->VerticalSpeed = -customGravity->VerticalSpeed / (1 + _restitution);
          }
        }
        else
        {
          customGravity->Grounded = false;
        }
      }
      else
      {
        customGravity->Grounded = false;
      }
      if (customGravity->Grounded == false)
      {
        transformVertical->Position += (customGravity->VerticalSpeed) * f.DeltaTime;
        customGravity->VerticalSpeed += _gravityForce * f.DeltaTime;
      }
    }
Death Zone
The Death Zone functions like a typical danger zone in a Battle Royale game and has two states: Waiting - where there are no changes in size, but players outside the safe zone will suffer damage, and Zone Shrinking - where the safe zone gradually reduces in size until it reaches a predetermined target size and randomly assigned position.
C#
DeathZoneConfig config = frame.FindAsset<DeathZoneConfig>(Config.Id);
      FP elapsed = config.Timers[Iteration] - ChangeStateDelay;
      FP t = FPMath.Clamp01(elapsed / config.Timers[Iteration]);
      CurrentRadius = FPMath.Lerp(config.Radius[Iteration], TargetRadius, t);
      CurrentCenter = FPVector2.Lerp(InitialIterationCenter, TargetCenter, t);
3rd Party Assets
The Projectiles Sample includes several assets provided courtesy of their respective creators. The full packages can be acquired for your own projects at their respective site:
- Cartoon FX Remaster Free by Jean Moreno
 - Toon Shooter Game Kit by Quaternius
 
IMPORTANT: To use them in a commercial project, it is required to purchase a license from the respective creators.
Back to top