Arena FPS style instagib/paintball FFA

H1TP9

Holding space lets you bunnyhop and the potential to gain insane amounts of speed

Primary fire is a one-shot with fancy effects

Secondary fire is an orb that knocks players back, including yourself allowing for extra mobility

Gameplay elements are inspired by Xonotic, Nexuiz (2005), and Ratz Instagib. All are excellent games and I would recommend checking them out

Made with https://github.com/ItsDeltin/Overwatch-Script-To-Workshop

Code Snippet

View variables

Rules

No Rules are declared.
// Workshop Code settings { main { Description: "v1.2.0 :: Created by Fuzsion#11545 :: Hold Space to Bhop :: Press Right click to send out an orb that knocks players back including yourself allowing for extra mobility" } lobby { Allow Players Who Are In Queue: Yes Max Spectators: 12 } modes { Deathmatch { Game Length In Minutes: 15 Score To Win: 50 disabled maps { Black Forest Black Forest Winter Blizzard World Castillo Château Guillard Halloween Eichenwalde Halloween Havana Hollywood Halloween Horizon Lunar Colony Necropolis Petra Workshop Chamber Workshop Expanse Workshop Island } } General { Game Mode Start: Immediately Hero Limit: Off Respawn Time Scalar: 0% } } heroes { General { McCree { Combat Roll: Off Damage Dealt: 500% Damage Received: 500% Flashbang: Off No Ammunition Requirement: On Quick Melee: Off Secondary Fire: Off Ultimate Ability Deadeye: Off } enabled heroes { McCree } } } } variables { global: 2: DEFAULT_START_SPEED 3: BHOP_MAX_SPEED 4: BHOP_SPEED_INCREMENT 5: SECONDARY_PROJECTILE_SPEED player: 1: bhopSpeed 2: speedAccumInAir 3: effect 4: secondaryHit 5: primaryHit 7: damageText 9: textChase 10: isChasing 11: primaryStartPos 12: secondaryEyePos 13: secondaryOrb 14: secondaryStartPos 15: players 16: loop } rule("Created by Fuzsion#11545, feel free to edit/modify what you like") { event { Ongoing - Global; } } rule("Init") { event { Ongoing - Global; } actions { Disable Inspector Recording; Disable Built-In Game Mode Scoring; Disable Built-In Game Mode Announcer; Set Match Time(0); Create HUD Text(Host Player, Null, Custom String("Server Load : ({0}% Cur | {1}% Avg | {2}% Peak)", Server Load, Server Load Average, Server Load Peak), Null, Right, -1.000, White, White, White, Visible To and String, Default Visibility); Create HUD Text(All Players(All Teams), Null, Custom String("Ver 1.2.0", Null, Null, Null), Null, Left, -1.000, White, White, White, Visible To and String, Default Visibility); Set Global Variable(BHOP_MAX_SPEED, 340); Set Global Variable(BHOP_SPEED_INCREMENT, 25); Set Global Variable(DEFAULT_START_SPEED, 130); Set Global Variable(SECONDARY_PROJECTILE_SPEED, 110); } } rule("Player Join Init") { event { Player Joined Match; All; All; } actions { Wait(1.500, Ignore Condition); Create HUD Text(Event Player, Null, Null, Custom String("Speed : {0} M/S", Horizontal Speed Of(Event Player), Null, Null), Top, 200, White, White, White, Visible To and String, Default Visibility); } } rule("Starting Speed") { event { Ongoing - Each Player; All; All; } actions { Set Player Variable(Event Player, bhopSpeed, Global Variable(DEFAULT_START_SPEED)); } } rule("Repeat Jump if space is being held") { event { Ongoing - Each Player; All; All; } conditions { And(Is On Ground(Event Player), Is Button Held(Event Player, Jump)) == True; } actions { Disallow Button(Event Player, Jump); Wait(0.016, Ignore Condition); Allow Button(Event Player, Jump); } } rule("If Airborne") { event { Ongoing - Each Player; All; All; } conditions { Is In Air(Event Player) == True; } actions { Set Player Variable(Event Player, speedAccumInAir, Horizontal Speed Of(Event Player)); Wait(0.050, Ignore Condition); Chase Player Variable At Rate(Event Player, bhopSpeed, Global Variable(BHOP_MAX_SPEED), Global Variable(BHOP_SPEED_INCREMENT), Destination and Rate); Set Player Variable(Event Player, isChasing, True); } } rule("Update Speed") { event { Ongoing - Each Player; All; All; } conditions { Player Variable(Event Player, isChasing) == True; } actions { Set Player Variable(Event Player, speedAccumInAir, Horizontal Speed Of(Event Player)); Set Move Speed(Event Player, Player Variable(Event Player, bhopSpeed)); Wait(0.032, Ignore Condition); Loop If Condition Is True; } } rule("Update isChasing") { event { Ongoing - Each Player; All; All; } conditions { Or(Compare(Player Variable(Event Player, bhopSpeed), ==, Global Variable(BHOP_MAX_SPEED)), Compare(Player Variable(Event Player, bhopSpeed), ==, Global Variable(DEFAULT_START_SPEED))) == True; } actions { Set Player Variable(Event Player, isChasing, False); } } rule("Stop if player is on ground") { event { Ongoing - Each Player; All; All; } conditions { And(Is On Ground(Event Player), Compare(Player Variable(Event Player, bhopSpeed), >, Global Variable(DEFAULT_START_SPEED))) == True; } actions { Wait(0.200, Abort When False); Stop Chasing Player Variable(Event Player, bhopSpeed); Chase Player Variable At Rate(Event Player, bhopSpeed, Global Variable(DEFAULT_START_SPEED), 325, Destination and Rate); Set Player Variable(Event Player, isChasing, True); Set Move Speed(Event Player, Player Variable(Event Player, bhopSpeed)); } } rule("Reset speed if turning too fast") { event { Ongoing - Each Player; All; All; } conditions { Horizontal Speed Of(Event Player) < Subtract(Player Variable(Event Player, speedAccumInAir), 0.450); } actions { Stop Chasing Player Variable(Event Player, bhopSpeed); Set Player Variable(Event Player, isChasing, False); Set Player Variable(Event Player, bhopSpeed, Global Variable(DEFAULT_START_SPEED)); Set Move Speed(Event Player, Player Variable(Event Player, bhopSpeed)); } } rule("Prevent speed gain if no movement in air") { event { Ongoing - Each Player; All; All; } conditions { And(Is In Air(Event Player), Compare(Horizontal Speed Of(Event Player), ==, 0)) == True; } actions { Stop Chasing Player Variable(Event Player, bhopSpeed); Set Player Variable(Event Player, isChasing, False); Set Player Variable(Event Player, bhopSpeed, Global Variable(DEFAULT_START_SPEED)); Set Move Speed(Event Player, Player Variable(Event Player, bhopSpeed)); Wait(0.025, Ignore Condition); Loop If Condition Is True; } } rule("Damage Number") { event { Player Dealt Damage; All; All; } actions { Set Player Variable(Event Player, textChase, Vector(0, 1, 0)); If(Event Was Critical Hit); Create In-World Text(Event Player, Custom String("Critical!", Null, Null, Null), Add(Position Of(Victim), Player Variable( Event Player, textChase)), 1.200, Do Not Clip, Visible To Position and String, Red, Default Visibility); Else; Create In-World Text(Event Player, Custom String("-{0}", Event Damage, Null, Null), Add(Position Of(Victim), Player Variable( Event Player, textChase)), 1.200, Do Not Clip, Visible To Position and String, Yellow, Default Visibility); End; Set Player Variable(Event Player, damageText, Last Text ID); Chase Player Variable At Rate(Event Player, textChase, Vector(0, 1.500, 0), 2, Destination and Rate); Wait(0.500, Ignore Condition); Destroy In-World Text(Player Variable(Event Player, damageText)); } } rule("Primary effect") { event { Ongoing - Each Player; All; All; } conditions { Is Firing Primary(Event Player) == True; } actions { Set Player Variable(Event Player, primaryStartPos, Multiply(World Vector Of(Subtract(Right, Vector(0, 0.300, 0)), Event Player, Rotation), 0.180)); Create Beam Effect(All Players(All Teams), Bad Beam, Add(Add(Eye Position(Event Player), Facing Direction Of(Event Player)), Player Variable(Event Player, primaryStartPos)), Ray Cast Hit Position(Eye Position(Event Player), Add(Eye Position( Event Player), Multiply(Facing Direction Of(Event Player), 100)), All Living Players(All Teams), Event Player, True), Aqua, None); Set Player Variable(Event Player, effect, Last Created Entity); Set Player Variable(Event Player, primaryHit, Ray Cast Hit Position(Eye Position(Event Player), Add(Eye Position(Event Player), Multiply(Facing Direction Of(Event Player), 100)), All Players(All Teams), Event Player, True)); Play Effect(All Players(All Teams), Good Explosion, Aqua, Add(Add(Eye Position(Event Player), Facing Direction Of(Event Player)), Player Variable(Event Player, primaryStartPos)), 0.200); Play Effect(All Players(All Teams), Good Explosion, Aqua, Player Variable(Event Player, primaryHit), 0.200); Wait(0.250, Ignore Condition); Destroy Effect(Player Variable(Event Player, effect)); } } rule("Secondary Fire") { event { Ongoing - Each Player; All; All; } conditions { And(Is Button Held(Event Player, Secondary Fire), Is Alive(Event Player)) == True; } actions { Set Player Variable(Event Player, secondaryHit, Ray Cast Hit Position(Eye Position(Event Player), Add(Eye Position(Event Player), Multiply(Facing Direction Of(Event Player), 100)), All Players(All Teams), Event Player, True)); Set Player Variable(Event Player, secondaryStartPos, Multiply(World Vector Of(Subtract(Right, Vector(0, 0.300, 0)), Event Player, Rotation), 0.180)); Set Player Variable(Event Player, secondaryEyePos, Add(Eye Position(Event Player), Player Variable(Event Player, secondaryStartPos))); Destroy Effect(Player Variable(Event Player, secondaryOrb)); Play Effect(All Players(All Teams), Ring Explosion Sound, White, Add(Add(Eye Position(Event Player), Facing Direction Of( Event Player)), Multiply(World Vector Of(Subtract(Right, Vector(0, 0.300, 0)), Event Player, Rotation), 0.170)), 50); Play Effect(All Players(All Teams), Good Explosion, Red, Add(Add(Eye Position(Event Player), Facing Direction Of(Event Player)), Player Variable(Event Player, secondaryStartPos)), 0.200); Create Effect(All Players(All Teams), Orb, Red, Player Variable(Event Player, secondaryEyePos), 0.100, Visible To Position and Radius); Set Player Variable(Event Player, secondaryOrb, Last Created Entity); Chase Player Variable At Rate(Event Player, secondaryEyePos, Player Variable(Event Player, secondaryHit), Global Variable( SECONDARY_PROJECTILE_SPEED), Destination and Rate); Wait(0.500, Ignore Condition); } } rule("Secondary Fire Impulse") { event { Ongoing - Each Player; All; All; } conditions { Or(Compare(Distance Between(Player Variable(Event Player, secondaryEyePos), Player Variable(Event Player, secondaryHit)), <, 0.100), Compare(Ray Cast Hit Player(Eye Position(Event Player), Player Variable(Event Player, secondaryEyePos), All Living Players(All Teams), Event Player, True), !=, Null)) == True; } actions { Stop Chasing Player Variable(Event Player, secondaryEyePos); Set Player Variable(Event Player, players, Filtered Array(All Living Players(All Teams), Compare(Distance Between( Current Array Element, Player Variable(Event Player, secondaryEyePos)), <=, 4.500))); Set Player Variable(Event Player, loop, 0); While(Compare(Player Variable(Event Player, loop), <, Count Of(Player Variable(Event Player, players)))); Apply Impulse(Value In Array(Player Variable(Event Player, players), Player Variable(Event Player, loop)), Direction Towards( Player Variable(Event Player, secondaryEyePos), Add(Value In Array(Player Variable(Event Player, players), Player Variable( Event Player, loop)), Vector(0, Divide(Y Component Of(Subtract(Eye Position(Value In Array(Player Variable(Event Player, players), Player Variable(Event Player, loop))), Value In Array(Player Variable(Event Player, players), Player Variable( Event Player, loop)))), 2), 0))), 15, To World, Incorporate Contrary Motion); Modify Player Variable(Event Player, loop, Add, 1); End; Play Effect(All Players(All Teams), Good Explosion, Red, Player Variable(Event Player, secondaryHit), 1.500); Play Effect(All Players(All Teams), Ring Explosion Sound, White, Add(Add(Eye Position(Event Player), Facing Direction Of( Event Player)), Multiply(World Vector Of(Subtract(Right, Vector(0, 0.300, 0)), Event Player, Rotation), 0.170)), 15); Destroy Effect(Player Variable(Event Player, secondaryOrb)); } } // ItsDeltin Overwatch Script to Workshop Code https://github.com/ItsDeltin/Overwatch-Script-To-Workshop // macro player: EventPlayer(); // macro host: HostPlayer(); // macro Facing(): FacingDirectionOf(); // macro EnemyPlayers(): AllPlayers(OppositeTeamOf(TeamOf())); // macro verText: "Ver 1.2.0"; // playervar define bhopSpeed; // playervar define speedAccumInAir; // playervar define effect; // playervar define secondaryHit; // playervar define primaryHit; // playervar define enemyPlayers; // playervar define damageText; // playervar define criticalText; // playervar define textChase; // // global constants // globalvar define DEFAULT_START_SPEED; // globalvar define BHOP_MAX_SPEED; // globalvar define BHOP_SPEED_INCREMENT; // globalvar define SECONDARY_PROJECTILE_SPEED; // rule: "Init" // { // DisableInspectorRecording(); // DisableScoring(); // DisableAnnouncer(); // SetMatchTime(0) // // CreateHudText(host, null, <"Position : <0>", PositionOf(host)>, null, Location.Right, -1); // // CreateHudText(host, null, <"Facing Direction : <0>", FacingDirectionOf(host)>, null, Location.Right, -1); // // CreateHudText(host, null, <"Horizontal Facing Direction : <0>", HorizontalFacingAngleOf(host)>, null, Location.Right, -1); // // CreateHudText(host, null, <"Vertical Facing Direction : <0>", VerticalFacingAngleOf(host)>, null, Location.Right, -1); // CreateHudText(host, null, <"Server Load : (<0>% Cur | <1>% Avg | <2>% Peak)", ServerLoad(), ServerLoadAverage(), ServerLoadPeak()>, null, Location.Right, -1); // CreateHudText(AllPlayers(), null, verText, null, Location.Left, -1); // BHOP_MAX_SPEED = 340; // BHOP_SPEED_INCREMENT = 25; // DEFAULT_START_SPEED = 130; // SECONDARY_PROJECTILE_SPEED = 110; // } // // rule: "dbg when im lonely" // // Event.OngoingPlayer // // if (IsButtonHeld(host, Button.Interact)) // // { // // CreateDummyBot(Hero.Mccree, OppositeTeamOf(host), -1, host); // // MinWait(); // // } // rule: "Player Join Init" // Event.OnPlayerJoin // { // // CreateHudText(player, null, null, <"Throttle : <0>", ThrottleOf()>, Location.Top, -198); // Wait(1.5); // CreateHudText(player, null, null, <"Speed : <0> M/S", (HorizontalSpeedOf())>, Location.Top, 200); // } // rule: "Starting Speed" // Event.OngoingPlayer // { // bhopSpeed = DEFAULT_START_SPEED; /* default speed percentage */ // } // rule: "Repeat Jump if space is being held" // Event.OngoingPlayer // if (IsOnGround() && IsButtonHeld(player, Button.Jump)) // { // DisallowButton(player, Button.Jump); // MinWait(); // AllowButton(player, Button.Jump); // } // playervar define isChasing; // rule: "If Airborne" // Event.OngoingPlayer // if (IsInAir()) // { // speedAccumInAir = HorizontalSpeedOf(); // Wait(0.05); // ChaseVariableAtRate(bhopSpeed, BHOP_MAX_SPEED, BHOP_SPEED_INCREMENT, RateChaseReevaluation.DestinationAndRate); // isChasing = true; // //SetMoveSpeed(player, bhopSpeed); // //LoopIfConditionIsTrue(); // } // rule: "Update Speed" // Event.OngoingPlayer // if (isChasing) // { // speedAccumInAir = HorizontalSpeedOf(); // SetMoveSpeed(player, bhopSpeed); // Wait(0.032); // LoopIfConditionIsTrue(); // } // rule: "Update isChasing" // Event.OngoingPlayer // if (bhopSpeed == BHOP_MAX_SPEED || bhopSpeed == DEFAULT_START_SPEED) // { // isChasing = false; // } // rule: "Stop if player is on ground" // Event.OngoingPlayer // if (IsOnGround() && bhopSpeed > DEFAULT_START_SPEED) // { // /* default behaviour */ // // Wait(0.2, WaitBehavior.AbortWhenFalse); // // StopChasingVariable(bhopSpeed); // // bhopSpeed = DEFAULT_START_SPEED; // // SetMoveSpeed(player, bhopSpeed); // Wait(0.2, WaitBehavior.AbortWhenFalse); // StopChasingVariable(bhopSpeed); // ChaseVariableAtRate(bhopSpeed, DEFAULT_START_SPEED, 325, RateChaseReevaluation.DestinationAndRate); // isChasing = true; // SetMoveSpeed(player, bhopSpeed); // } // rule: "Reset speed if turning too fast" // Event.OngoingPlayer // if (HorizontalSpeedOf() < speedAccumInAir - 0.45) // { // StopChasingVariable(bhopSpeed); // isChasing = false; // bhopSpeed = DEFAULT_START_SPEED; // SetMoveSpeed(player, bhopSpeed); // } // rule: "Prevent speed gain if no movement in air" // Event.OngoingPlayer // if (IsInAir() && HorizontalSpeedOf() == 0) // { // StopChasingVariable(bhopSpeed); // isChasing = false; // bhopSpeed = DEFAULT_START_SPEED; // SetMoveSpeed(player, bhopSpeed); // Wait(0.025); // LoopIfConditionIsTrue(); // } // rule: "Damage Number" // Event.OnDamageDealt // { // textChase = Vector(0,1,0); // if (EventWasCriticalHit()) // CreateInWorldText(player, <"Critical!", EventWasCriticalHit()>, PositionOf(Victim()) + textChase, 1.2, Clipping.DoNotClip, InworldTextRev.VisibleToPositionAndString, Color.Red); // else // CreateInWorldText(player, <"-<0>", EventDamage()>, PositionOf(Victim()) + textChase, 1.2, Clipping.DoNotClip, InworldTextRev.VisibleToPositionAndString, Color.Yellow); // damageText = LastTextID(); // ChaseVariableAtRate(textChase, Vector(0,1.5,0), 2, RateChaseReevaluation.DestinationAndRate); // Wait(0.5); // DestroyInWorldText(damageText); // } // playervar define primaryStartPos; // rule: "Primary effect" // Event.OngoingPlayer // if (IsFiringPrimary()) // { // primaryStartPos = WorldVectorOf(Right() - Vector(0, 0.3, 0), player) * 0.18; // CreateBeamEffect(AllPlayers(), BeamType.BadBeam, EyePosition() + Facing() + primaryStartPos, RayCastHitPosition(EyePosition(), EyePosition() + (Facing() * 100), AllLivingPlayers()), Color.Aqua, EffectRev.None); // effect = LastCreatedEntity(); // primaryHit = RayCastHitPosition(EyePosition(), EyePosition() + Facing() * 100, AllPlayers(), player); // PlayEffect(AllPlayers(), PlayEffect.GoodExplosion, Color.Aqua, EyePosition() + Facing() + primaryStartPos, 0.2); // PlayEffect(AllPlayers(), PlayEffect.GoodExplosion, Color.Aqua, primaryHit, 0.2); // Wait(0.25); // DestroyEffect(effect); // } // playervar define secondaryEyePos; // playervar define secondaryOrb; // playervar define secondaryStartPos; // rule: "Secondary Fire" // Event.OngoingPlayer // if (IsButtonHeld(player, Button.SecondaryFire) && IsAlive()) // { // secondaryHit = RayCastHitPosition(EyePosition(), EyePosition() + Facing() * 100, AllPlayers(), player); // secondaryStartPos = WorldVectorOf(Right() - Vector(0, 0.3, 0), player) * 0.18; // secondaryEyePos = EyePosition() + secondaryStartPos; // DestroyEffect(secondaryOrb); // PlayEffect(VisibleTo: AllPlayers(), // Type: PlayEffect.RingExplosionSound, // Position: EyePosition() + Facing() + WorldVectorOf(Right() - Vector(0, 0.3, 0), player) * 0.17, // Radius: 50); // PlayEffect(AllPlayers(), PlayEffect.GoodExplosion, Color.Red, EyePosition() + Facing() + secondaryStartPos, 0.2); // // projectile // CreateEffect(AllPlayers(), Effect.Orb, Color.Red, secondaryEyePos, 0.1); // secondaryOrb = LastCreatedEntity(); // ChaseVariableAtRate(secondaryEyePos, secondaryHit, SECONDARY_PROJECTILE_SPEED, RateChaseReevaluation.DestinationAndRate); // Wait(0.5); // } // rule: "Secondary Fire Impulse" // Event.OngoingPlayer // if (DistanceBetween(secondaryEyePos, secondaryHit) < 0.1 || RayCastHitPlayer(EyePosition(), secondaryEyePos, AllLivingPlayers(), player) != null) // { // StopChasingVariable(secondaryEyePos); // define players = FilteredArray(AllLivingPlayers(), DistanceBetween(ArrayElement(), secondaryEyePos) <= 4.5) // for (define loop = 0; loop < CountOf(players); loop++) // { // ApplyImpulse(players[loop], DirectionTowards(secondaryEyePos, players[loop] + Vector(0, YOf(EyePosition(players[loop]) - players[loop]) / 2, 0)), 15, Relative.ToWorld, ContraryMotion.Incorporate); // } // // projectile hit effect // PlayEffect(AllPlayers(), PlayEffect.GoodExplosion, Color.Red, secondaryHit, 1.5); // PlayEffect(VisibleTo: AllPlayers(), // Type: PlayEffect.RingExplosionSound, // Position: EyePosition() + Facing() + WorldVectorOf(Right() - Vector(0, 0.3, 0), player) * 0.17, // Radius: 15); // DestroyEffect(secondaryOrb); // }
View Fullscreen
Copy current Rule
Copy all Rules

Update Log

1.2.0 (latest)
H1TP9

i fixed a really bad oversight

like very bad

1.2.0
D27QF
  • Removed Overwatch's Score condition, just frag until the time runs out.
  • Damage numbers now have an animation.
  • Critical hit text when you get a kill.
  • Added Global constants which add QOL improvements for me and easier customizability for players (you can adjust these values at the bottom of the "Init" rule).
  • Added pseudo momentum when you stop bunny hopping, not entirely sure how I feel about it yet.
  • Secondary fire projectile now appears to look like it's from the gun.
  • Secondary fire projectile speed lowered (from 150 to 110).
1.1.2
D27QF

0 Comments

Log in or Sign up to place a comment.
Workshop.codes - Background image