Create
Return to post

Comparing difference between and

View raw
  • settings
  • {
  • main
  • {
  • Description: "Instagib | Created by scort#11221"
  • Description: "Instagib v1.7.1 | Created by scort#11221 | 10/01/20\r\n- Hold down Jump to gain speed by bunny hopping\r\n- Press Secondary Fire (Right Click) to fire a knockback orb to displace enemies or to give yourself more mobility\r\n-Press Ability 1 (Shift) to dodge in any direction\r\n- Press Ability 2 (E) to throw out a grappling hook to attach to walls or pull players\r\n- Buffs are littered throughout the map that change your weapon drastically"
  • }
  • lobby
  • {
  • Allow Players Who Are In Queue: Yes
  • Map Rotation: After A Game
  • Max Spectators: 12
  • Return To Lobby: Never
  • }
  • modes
  • {
  • Deathmatch
  • {
  • enabled maps
  • {
  • Black Forest
  • Black Forest Winter
  • Blizzard World
  • Blizzard World Winter
  • Castillo
  • Château Guillard
  • Dorado
  • Ecopoint: Antarctica
  • Ecopoint: Antarctica Winter
  • Eichenwalde
  • Havana
  • Hollywood
  • King's Row
  • King's Row Winter
  • Lijiang Control Center
  • Lijiang Control Center Lunar New Year
  • Necropolis
  • Paris
  • }
  • }
  • General
  • {
  • Game Mode Start: Immediately
  • Hero Limit: Off
  • Respawn Time Scalar: 10%
  • Spawn Health Packs: Disabled
  • }
  • }
  • 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_RATE
  • 5: GRAPPLE_PULL_SPEED
  • 6: SECONDARY_PROJECTILE_SPEED
  • 7: MATCH_TIME_LIMIT
  • 8: matchStarted
  • 9: buffsEnabled
  • 10: buffsSpawnImmediately
  • 11: validBuffMap
  • 12: buffEffect
  • 13: buffPos
  • 14: buffIcon
  • 15: cdText
  • 16: spawnWallbang
  • 17: spawnWithWallbang
  • 18: NUM_WALLBANGS
  • 19: wallbangCD
  • 20: WALLBANG_CD
  • 21: WALLBANG_DUR
  • 22: spawnLife
  • 23: spawnWithLife
  • 24: lifeCD
  • 25: LIFE_CD
  • 26: spawnRicochet
  • 27: spawnWithRicochet
  • 28: NUM_RICOCHETS
  • 29: ricochetCD
  • 30: RICOCHET_CD
  • 31: RICOCHET_DUR
  • 32: spawnBuckshot
  • 33: spawnWithBuckshot
  • 34: BUCKSHOT_SPREAD
  • 35: buckshotCD
  • 36: BUCKSHOT_CD
  • 37: BUCKSHOT_DUR
  • 38: spreadDiag
  • 39: spreadHori
  • 40: randomSpread
  • 9: DODGE_FORCE
  • 10: buffsEnabled
  • 11: buffsSpawnImmediately
  • 12: validBuffMap
  • 13: buffEffect
  • 14: buffPos
  • 15: buffIcon
  • 16: cdText
  • 17: spawnWallbang
  • 18: spawnWithWallbang
  • 19: NUM_WALLBANGS
  • 20: WALLBANG_DUR
  • 21: WALLBANG_CD
  • 22: canPickupWallbang
  • 23: wallbangCD
  • 24: wallbangUser
  • 25: spawnRicochet
  • 26: spawnWithRicochet
  • 27: NUM_RICOCHETS
  • 28: RICOCHET_CD
  • 29: RICOCHET_DUR
  • 30: canPickupRicochet
  • 31: ricochetCD
  • 32: ricochetUser
  • 33: spawnBuckshot
  • 34: spawnWithBuckshot
  • 35: randomSpread
  • 36: BUCKSHOT_SPREAD
  • 37: BUCKSHOT_CD
  • 38: BUCKSHOT_DUR
  • 39: canPickupBuckshot
  • 40: buckshotCD
  • 41: buckshotUser
  • 42: spreadDiag
  • 43: spreadHori
  • 44: spawnLife
  • 45: spawnWithLife
  • 46: LIFE_CD
  • 47: lifeCD
  • player:
  • 1: bhopSpeed
  • 2: speedAccumInAir
  • 3: isChasing
  • 4: primaryHit
  • 5: primaryStartPos
  • 6: primaryBeam
  • 7: secondaryHit
  • 8: secondaryEyePos
  • 9: secondaryOrb
  • 11: grappleEyePos
  • 12: grappleBeamEffect
  • 13: usingGrapple
  • 14: grappleHit
  • 15: grappleHitSphere
  • 16: grapplePlayerBeamEffect
  • 17: grappleHitPlayer
  • 18: grappleHitPlayerSphere
  • 19: livingEnemies
  • 20: hudText
  • 21: wallbangEffect
  • 22: wallbangEnabled
  • 23: wallbangDur
  • 24: extraLife
  • 25: extraLifeIcon
  • 26: ricochetEnabled
  • 27: ricochetDur
  • 28: ricochetBuffEffect
  • 29: normals
  • 30: hitPos
  • 31: hitPosPlayer
  • 32: ricochets
  • 33: hitPosRicochets
  • 34: hitPosPlayerRicochets
  • 35: eyePos
  • 36: facing
  • 37: buckshotHitPos
  • 38: buckshotHitPlayer
  • 39: buckshotCenter
  • 40: buckshotEnabled
  • 41: buckshotDur
  • 42: buckshotBuffEffect
  • 43: randomizedSpreadHori
  • 44: randomizedSpreadDiag
  • 45: lifeKills
  • 46: spreeInWorld
  • 47: spreeEffects
  • 48: wallbangBuffEffect
  • 49: i
  • 50: players
  • 51: loop
  • 52: sound
  • 53: gunPos
  • 54: wallbangHitPos
  • 55: wallbangLivingEnemies
  • 56: wallbangHitPlayer
  • 57: wallbangCount
  • 58: sound_0
  • 59: ricochetEffects
  • 60: ricochetEffect
  • 61: loop_0
  • 62: i_0
  • 63: sound_1
  • 64: gunPos_0
  • 65: buckshotBeam
  • 66: centerBeam
  • 67: hori
  • 68: diag
  • 69: pellets
  • 70: beams
  • 20: throttleOf
  • 21: canDodge
  • 22: hudText
  • 23: wallbangEffect
  • 24: wallbangEnabled
  • 25: wallbangDur
  • 26: wallbangBuffEffect
  • 27: ricochetEnabled
  • 28: ricochetDur
  • 29: ricochetBuffEffect
  • 30: normals
  • 31: hitPos
  • 32: hitPosPlayer
  • 33: ricochets
  • 34: hitPosRicochets
  • 35: hitPosPlayerRicochets
  • 36: eyePos
  • 37: facing
  • 38: buckshotHitPos
  • 39: buckshotHitPlayer
  • 40: buckshotCenter
  • 41: buckshotEnabled
  • 42: buckshotDur
  • 43: buckshotBuffEffect
  • 44: randomizedSpreadHori
  • 45: randomizedSpreadDiag
  • 46: extraLife
  • 47: extraLifeIcon
  • 48: lifeKills
  • 49: spreeInWorld
  • 50: spreeEffects
  • 51: spreeHud
  • 52: killsHud
  • 53: i
  • 54: players
  • 55: loop
  • 56: sound
  • 57: gunPos
  • 58: wallbangHitPos
  • 59: wallbangLivingEnemies
  • 60: wallbangHitPlayer
  • 61: wallbangCount
  • 62: sound_0
  • 63: ricochetEffects
  • 64: ricochetEffect
  • 65: loop_0
  • 66: i_0
  • 67: sound_1
  • 68: gunPos_0
  • 69: buckshotBeam
  • 70: centerBeam
  • 71: hori
  • 72: diag
  • 73: pellets
  • 74: beams
  • }
  • subroutines
  • {
  • 0: WallbangCooldown
  • 1: RicochetCooldown
  • 2: BuckshotCooldown
  • 3: LifeCooldown
  • }
  • rule("[Sub] :: Wallbang Cooldown")
  • {
  • event
  • {
  • Subroutine;
  • WallbangCooldown;
  • }
  • actions
  • {
  • If(!Global.spawnWithWallbang && Global.spawnWallbang && !Entity Exists(Global.buffEffect[0]));
  • If(!Global.spawnWithWallbang && Global.spawnWallbang);
  • Global.wallbangCD = Global.WALLBANG_CD;
  • Chase Global Variable At Rate(wallbangCD, 0, 1, None);
  • Create In-World Text(All Players(All Teams), Custom String("{0}", Round To Integer(Global.wallbangCD, Up)), Global.buffPos[0], 2,
  • Clip Against Surfaces, Visible To Position and String, White, Default Visibility);
  • Global.cdText[0] = Last Text ID;
  • Chase Global Variable At Rate(wallbangCD, 0, 1, None);
  • End;
  • }
  • }
  • rule("[Sub] :: Ricochet Cooldown")
  • {
  • event
  • {
  • Subroutine;
  • RicochetCooldown;
  • }
  • actions
  • {
  • If(!Global.spawnWithRicochet && Global.spawnRicochet && !Entity Exists(Global.buffEffect[1]));
  • If(!Global.spawnWithRicochet && Global.spawnRicochet);
  • Global.ricochetCD = Global.RICOCHET_CD;
  • Chase Global Variable At Rate(ricochetCD, 0, 1, None);
  • Create In-World Text(All Players(All Teams), Custom String("{0}", Round To Integer(Global.ricochetCD, Up)), Global.buffPos[1], 2,
  • Clip Against Surfaces, Visible To Position and String, White, Default Visibility);
  • Global.cdText[1] = Last Text ID;
  • Chase Global Variable At Rate(ricochetCD, 0, 1, None);
  • End;
  • }
  • }
  • rule("[Sub] :: Buckshot Cooldown")
  • {
  • event
  • {
  • Subroutine;
  • BuckshotCooldown;
  • }
  • actions
  • {
  • If(!Global.spawnWithBuckshot && Global.spawnBuckshot && !Entity Exists(Global.buffEffect[2]));
  • If(!Global.spawnWithBuckshot && Global.spawnBuckshot);
  • Global.buckshotCD = Global.BUCKSHOT_CD;
  • Chase Global Variable At Rate(buckshotCD, 0, 1, None);
  • Create In-World Text(All Players(All Teams), Custom String("{0}", Round To Integer(Global.buckshotCD, Up)), Global.buffPos[2], 2,
  • Clip Against Surfaces, Visible To Position and String, White, Default Visibility);
  • Global.cdText[2] = Last Text ID;
  • Chase Global Variable At Rate(buckshotCD, 0, 1, None);
  • End;
  • }
  • }
  • rule("[Sub] :: Life Cooldown")
  • {
  • event
  • {
  • Subroutine;
  • LifeCooldown;
  • }
  • actions
  • {
  • If(!Global.spawnWithLife && Global.spawnLife);
  • Global.lifeCD = Global.LIFE_CD;
  • Chase Global Variable At Rate(lifeCD, 0, 1, None);
  • Create In-World Text(All Players(All Teams), Custom String("{0}", Round To Integer(Global.lifeCD, Up)), Global.buffPos[3], 2,
  • Clip Against Surfaces, Visible To Position and String, White, Default Visibility);
  • Global.cdText[3] = Last Text ID;
  • Chase Global Variable At Rate(lifeCD, 0, 1, None);
  • End;
  • }
  • }
  • rule("[Main] :: Initial Global")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Disable Built-In Game Mode Completion;
  • Disable Built-In Game Mode Announcer;
  • Create HUD Text(All Players(All Teams), Null, Custom String("ㅤInstagib: v1.6.2 | Created by scort#11221"), Custom String(
  • Create HUD Text(All Players(All Teams), Null, Custom String("ㅤInstagib: v1.7.1 | Created by scort#11221"), Custom String(
  • "ㅤ Share Code: APPPX"), Right, 0, White, White, White, Visible To and String, Default Visibility);
  • Global.cdText = Empty Array;
  • Global.buffEffect = Empty Array;
  • Global.buffPos = Empty Array;
  • Global.buffIcon = Empty Array;
  • Global.matchStarted = False;
  • Global.DEFAULT_START_SPEED = Workshop Setting Integer(Custom String("BHop"), Custom String("Starting Speed (100)"), 100, 25, 300);
  • Global.BHOP_MAX_SPEED = Workshop Setting Integer(Custom String("BHop"), Custom String("Maximum Speed Possible From Hops (320)"),
  • 320, 25, 10000);
  • Global.BHOP_SPEED_RATE = Workshop Setting Real(Custom String("BHop"), Custom String("Speed gain rate (12.5)"), 12.500, 1, 100);
  • Global.buffsSpawnImmediately = Workshop Setting Toggle(Custom String("Buff Spawns"), Custom String(
  • Global.buffsSpawnImmediately = Workshop Setting Toggle(Custom String("Buff General"), Custom String(
  • "Buffs Spawn Immediately When Match Starts (Off)"), False);
  • Global.buffsEnabled = Workshop Setting Toggle(Custom String("Buff Spawns"), Custom String("Spawn Buffs (On)"), True);
  • Global.buffsEnabled = Workshop Setting Toggle(Custom String("Buff General"), Custom String("Spawn Buffs (On)"), True);
  • Global.NUM_WALLBANGS = Workshop Setting Integer(Custom String("Wallbang Buff Settings"), Custom String("Wallbang Amount (5)"), 5,
  • 2, 100);
  • Global.WALLBANG_CD = Workshop Setting Integer(Custom String("Wallbang Buff Settings"), Custom String(
  • "Wallbang Orb Spawn Time (75)"), 75, 1, 300);
  • "Wallbang Orb Spawn Time (65)"), 65, 1, 300);
  • Global.WALLBANG_DUR = Workshop Setting Integer(Custom String("Wallbang Buff Settings"), Custom String(
  • "Wallbang Buff Duration (25)"), 25, 1, 300);
  • Global.spawnWallbang = Workshop Setting Toggle(Custom String("Wallbang Buff Settings"), Custom String("Spawn Wallbang Orb (On)"),
  • True);
  • Global.spawnWithWallbang = Workshop Setting Toggle(Custom String("Wallbang Buff Settings"), Custom String(
  • "Spawn With Wallbang (Lasts Forever) (Off)"), False);
  • Global.RICOCHET_CD = Workshop Setting Integer(Custom String("Ricochet Buff Settings"), Custom String(
  • "Ricochet Orb Spawn Time (65)"), 65, 1, 300);
  • "Ricochet Orb Spawn Time (55)"), 55, 1, 300);
  • Global.RICOCHET_DUR = Workshop Setting Integer(Custom String("Ricochet Buff Settings"), Custom String(
  • "Ricochet Buff Duration (25)"), 25, 1, 300);
  • Global.NUM_RICOCHETS = Workshop Setting Integer(Custom String("Ricochet Buff Settings"), Custom String("Ricochet Amount (4)"), 4,
  • 1, 64);
  • Global.spawnRicochet = Workshop Setting Toggle(Custom String("Ricochet Buff Settings"), Custom String("Spawn Ricochet Orb (On)"),
  • True);
  • Global.spawnWithRicochet = Workshop Setting Toggle(Custom String("Ricochet Buff Settings"), Custom String(
  • "Spawn With Ricochet (Lasts Forever) (Off)"), False);
  • Global.BUCKSHOT_CD = Workshop Setting Integer(Custom String("Buckshot Buff Settings"), Custom String(
  • "Buckshot Orb Spawn Time (95)"), 95, 1, 300);
  • "Buckshot Orb Spawn Time (85)"), 85, 1, 300);
  • Global.BUCKSHOT_DUR = Workshop Setting Integer(Custom String("Buckshot Buff Settings"), Custom String(
  • "Buckshot Buff Duration (20)"), 20, 1, 300);
  • Global.BUCKSHOT_SPREAD = Workshop Setting Real(Custom String("Buckshot Buff Settings"), Custom String(
  • "Buckshot Spread (Lower is Tighter) (3.5)"), 3.500, 0.100, 20);
  • Global.randomSpread = Workshop Setting Toggle(Custom String("Buckshot Buff Settings"), Custom String(
  • "Randomized Buckshot Spread (Off)"), False);
  • Global.spawnBuckshot = Workshop Setting Toggle(Custom String("Buckshot Buff Settings"), Custom String("Spawn Buckshot Orb (On)"),
  • True);
  • Global.spawnWithBuckshot = Workshop Setting Toggle(Custom String("Buckshot Buff Settings"), Custom String(
  • "Spawn With Buckshot (Lasts Forever) (Off)"), False);
  • Global.LIFE_CD = Workshop Setting Integer(Custom String("Extra Life Buff Settings"), Custom String(
  • "Extra Life Orb Spawn Time (120)"), 120, 1, 400);
  • "Extra Life Orb Spawn Time (140)"), 140, 1, 400);
  • Global.spawnLife = Workshop Setting Toggle(Custom String("Extra Life Buff Settings"), Custom String("Spawn Extra Life Orb (On)"),
  • True);
  • Global.spawnWithLife = Workshop Setting Toggle(Custom String("Extra Life Buff Settings"), Custom String(
  • "Spawn With Extra Life (Off)"), False);
  • Global.SECONDARY_PROJECTILE_SPEED = Workshop Setting Integer(Custom String("Secondary Fire"), Custom String(
  • "Secondary Projectile Speed (110)"), 110, 10, 500);
  • Global.MATCH_TIME_LIMIT = Workshop Setting Integer(Custom String("Misc"), Custom String("Match Time (Minutes) (20)"), 20, 1, 60)
  • * 60;
  • Global.GRAPPLE_PULL_SPEED = Workshop Setting Real(Custom String("Misc"), Custom String("Grapple Pull Speed (3.5)"), 3.500, 1, 10);
  • Global.GRAPPLE_PULL_SPEED = Workshop Setting Real(Custom String("Misc"), Custom String("Grapple Pull Speed (3.5)"), 3.500, 0.500,
  • 10);
  • Global.DODGE_FORCE = Workshop Setting Real(Custom String("Misc"), Custom String("Dodge Force (14)"), 14, 1, 100);
  • }
  • }
  • rule("[Main] :: Initial Player Join")
  • rule("[Main] :: Player Join")
  • {
  • event
  • {
  • Player Joined Match;
  • All;
  • All;
  • }
  • actions
  • {
  • Event Player.wallbangDur = Global.WALLBANG_DUR;
  • Event Player.ricochetDur = Global.RICOCHET_DUR;
  • Event Player.buckshotDur = Global.BUCKSHOT_DUR;
  • Event Player.hudText = Empty Array;
  • Event Player.spreeInWorld = Empty Array;
  • Event Player.spreeEffects = Empty Array;
  • }
  • }
  • rule("[Main] :: Start Match")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • (!Global.matchStarted && Count Of(All Living Players(All Teams)) > 0 && !Is Waiting For Players) == True;
  • }
  • actions
  • {
  • Set Match Time(10);
  • Wait(10.500, Ignore Condition);
  • Set Match Time(Global.MATCH_TIME_LIMIT);
  • Global.matchStarted = True;
  • If(Global.validBuffMap && !Global.buffsSpawnImmediately && !Is Waiting For Players);
  • Call Subroutine(LifeCooldown);
  • Call Subroutine(WallbangCooldown);
  • Call Subroutine(RicochetCooldown);
  • Call Subroutine(BuckshotCooldown);
  • Call Subroutine(LifeCooldown);
  • End;
  • If(Global.buffsEnabled);
  • If(!Global.spawnWithWallbang && Global.spawnWallbang);
  • Create HUD Text(All Players(All Teams), Custom String("{0}", Ability Icon String(Hero(Baptiste), Button(Ultimate))), Null,
  • Global.wallbangCD != 0 ? Custom String("{0}", Round To Integer(Global.wallbangCD, Up)) : (Entity Exists(Global.buffEffect[0])
  • ? Custom String("{0}", Icon String(Checkmark)) : Custom String("In-Use")), Left, 1, Yellow, White, White,
  • Visible To and String, Default Visibility);
  • ? Custom String("{0}", Icon String(Checkmark)) : Custom String("In-Use by {0}", Global.wallbangUser)), Left, 1, Yellow, White,
  • White, Visible To and String, Default Visibility);
  • End;
  • If(!Global.spawnWithRicochet && Global.spawnRicochet);
  • Create HUD Text(All Players(All Teams), Custom String("{0}", Ability Icon String(Hero(Winston), Button(Ability 1))), Null,
  • Global.ricochetCD != 0 ? Custom String("{0}", Round To Integer(Global.ricochetCD, Up)) : (Entity Exists(Global.buffEffect[1])
  • ? Custom String("{0}", Icon String(Checkmark)) : Custom String("In-Use")), Left, 2, Purple, White, White,
  • Visible To and String, Default Visibility);
  • ? Custom String("{0}", Icon String(Checkmark)) : Custom String("In-Use by {0}", Global.ricochetUser)), Left, 2, Purple, White,
  • White, Visible To and String, Default Visibility);
  • End;
  • If(!Global.spawnWithBuckshot && Global.spawnBuckshot);
  • Create HUD Text(All Players(All Teams), Custom String("{0}", Ability Icon String(Hero(Ashe), Button(Ability 1))), Null,
  • Global.buckshotCD != 0 ? Custom String("{0}", Round To Integer(Global.buckshotCD, Up)) : (Entity Exists(Global.buffEffect[2])
  • ? Custom String("{0}", Icon String(Checkmark)) : Custom String("In-Use")), Left, 3, Green, White, White, Visible To and String,
  • Default Visibility);
  • ? Custom String("{0}", Icon String(Checkmark)) : Custom String("In-Use by {0}", Global.buckshotUser)), Left, 3, Green, White,
  • White, Visible To and String, Default Visibility);
  • End;
  • If(!Global.spawnWithLife && Global.spawnLife);
  • Create HUD Text(All Players(All Teams), Custom String("{0}", Ability Icon String(Hero(Mercy), Button(Ability 2))), Null,
  • Global.lifeCD != 0 ? Custom String("{0}", Round To Integer(Global.lifeCD, Up)) : (Entity Exists(Global.buffEffect[3])
  • ? Custom String("{0}", Icon String(Checkmark)) : Custom String("{0}", Icon String(Checkmark))), Left, 4, Sky Blue, White,
  • White, Visible To and String, Default Visibility);
  • End;
  • End;
  • }
  • }
  • rule("[Main] :: Player Spawned")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Has Spawned(Event Player) && Global.matchStarted) == True;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Welcome!"));
  • Wait(3, Ignore Condition);
  • Small Message(Event Player, Custom String("Holding down {0} will let you gain speed by bunny hopping", Input Binding String(Button(
  • Jump))));
  • Wait(3, Ignore Condition);
  • Small Message(Event Player, Custom String(
  • "Press {0} to throw out a grappling hook to pull you towards a surface or to pull players towards you", Input Binding String(
  • Button(Ability 2))));
  • Wait(3, Ignore Condition);
  • Small Message(Event Player, Custom String(
  • "Press {0} to fire an orb that knocks players back, including yourself allowing for extra mobility", Input Binding String(
  • Button(Secondary Fire))));
  • Wait(3, Ignore Condition);
  • Small Message(Event Player, Custom String("Press {0} to dodge in any direction", Input Binding String(Button(Ability 1))));
  • Wait(3, Ignore Condition);
  • Small Message(Event Player, Custom String("Buffs are littered thorughout the map that give you special changes to your weapon"));
  • Wait(3, Ignore Condition);
  • Small Message(Event Player, Custom String("Happy Fragging!"));
  • }
  • }
  • rule("[Main] :: Speedometer")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • actions
  • {
  • Create HUD Text(Event Player, Null, Null, Custom String(" \n{0} M/S\n{1}% Modifier", Horizontal Speed Of(Event Player),
  • Round To Integer(Event Player.bhopSpeed - Global.DEFAULT_START_SPEED, Up)), Left, 6, White, White, White,
  • Visible To and String, Default Visibility);
  • }
  • }
  • rule("[Main] :: End Game")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.matchStarted == True;
  • }
  • actions
  • {
  • Wait(Global.MATCH_TIME_LIMIT, Ignore Condition);
  • Enable Built-In Game Mode Completion;
  • }
  • }
  • rule("[Main] :: Primary Effect")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (!Event Player.wallbangEnabled && !Event Player.ricochetEnabled && !Event Player.buckshotEnabled && Is Firing Primary(
  • Event Player)) == True;
  • }
  • actions
  • {
  • Event Player.primaryBeam = Empty Array;
  • Event Player.livingEnemies = Filtered Array(All Players(Opposite Team Of(Team Of(Event Player))), Is Alive(Current Array Element));
  • Event Player.primaryStartPos = World Vector Of(Right - Vector(0, 0.300, 0), Event Player, Rotation) * 0.180;
  • Event Player.primaryHit = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(
  • Event Player) * 100, Event Player.livingEnemies, Event Player, True);
  • Play Effect(Event Player, Good Explosion, Aqua, Event Player.primaryHit, 0.200);
  • Play Effect(Remove From Array(All Players(Opposite Team Of(Team Of(Event Player))), Event Player), Good Explosion, Red,
  • Event Player.primaryHit, 0.200);
  • Create Beam Effect(Event Player, Bad Beam, Eye Position(Event Player) + Facing Direction Of(Event Player)
  • + Event Player.primaryStartPos, Event Player.primaryHit, Aqua, None);
  • Event Player.primaryBeam[0] = Last Created Entity;
  • Create Beam Effect(Remove From Array(All Players(Opposite Team Of(Team Of(Event Player))), Event Player), Bad Beam, Eye Position(
  • Event Player) + Facing Direction Of(Event Player) + Event Player.primaryStartPos, Event Player.primaryHit, Red, None);
  • Event Player.primaryBeam[1] = Last Created Entity;
  • Wait(0.150, Ignore Condition);
  • Destroy Effect(Event Player.primaryBeam[0]);
  • Destroy Effect(Event Player.primaryBeam[1]);
  • }
  • }
  • disabled rule("---------------- Killing Spree Notifs ----------------")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("[Killspree] :: Record Kills While Alive")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • All;
  • All;
  • }
  • actions
  • {
  • Event Player.lifeKills += 1;
  • }
  • }
  • rule("[Killspree] :: Reset Kills on death")
  • {
  • event
  • {
  • Player Died;
  • All;
  • All;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("{0} player kill spree!", Event Player.lifeKills));
  • If(Event Player.lifeKills > 5);
  • Big Message(All Players(All Teams), !Event Was Environment ? Custom String("{0}'s {1} player spree was put to an end by {2}!",
  • Victim, Event Player.lifeKills, Attacker) : Custom String("{0}'s {1} player spree was put to an end by the world!", Victim,
  • Big Message(All Players(All Teams), !Event Was Environment ? Custom String("{0}'s {1} player spree was ended by {2}!", Victim,
  • Event Player.lifeKills, Attacker) : Custom String("{0}'s {1} player spree was ended by the world!", Victim,
  • Event Player.lifeKills));
  • End;
  • Event Player.i = 0;
  • While(Event Player.i < 7);
  • Destroy Effect(Event Player.spreeEffects[Event Player.i]);
  • Destroy In-World Text(Event Player.spreeInWorld[Event Player.i]);
  • Destroy HUD Text(Event Player.spreeHud[Event Player.i]);
  • Event Player.i += 1;
  • End;
  • Wait(0.032, Ignore Condition);
  • Event Player.lifeKills = 0;
  • Event Player.spreeInWorld = Empty Array;
  • Event Player.spreeEffects = Empty Array;
  • Event Player.spreeHud = Empty Array;
  • }
  • }
  • rule("[Killspree] :: 5 Kills")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.lifeKills == 5;
  • }
  • actions
  • {
  • Big Message(All Players(All Teams), Custom String("{0} is on a Killing Spree!", Event Player));
  • Create In-World Text(Event Player, Custom String("Killing Spree!"), Position Of(Victim) + Up, 3, Do Not Clip, None, White,
  • Default Visibility);
  • Event Player.spreeInWorld[0] = Last Text ID;
  • Create Effect(All Players(All Teams), Sparkles, White, Event Player, 1, Visible To Position and Radius);
  • Event Player.spreeEffects[0] = Last Created Entity;
  • Create HUD Text(Event Player, Null, Null, Custom String(" \n{0} Kill Spree", Event Player.lifeKills), Left, 9, White, White, White,
  • Visible To and String, Default Visibility);
  • Event Player.killsHud = Last Text ID;
  • Create HUD Text(Event Player, Null, Null, Custom String("Killing Spree"), Left, 10, White, White, White, Visible To and String,
  • Default Visibility);
  • Event Player.spreeHud[0] = Last Text ID;
  • Wait(2, Ignore Condition);
  • Destroy In-World Text(Event Player.spreeInWorld[0]);
  • }
  • }
  • rule("[Killspree] :: 8 Kills")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.lifeKills == 8;
  • }
  • actions
  • {
  • Destroy Effect(Event Player.spreeEffects[0]);
  • Destroy HUD Text(Event Player.spreeHud[0]);
  • Big Message(All Players(All Teams), Custom String("{0} is on a Rampage!", Event Player));
  • Create In-World Text(Event Player, Custom String("Rampage!"), Position Of(Victim) + Up, 3, Do Not Clip, None, Lime Green,
  • Default Visibility);
  • Event Player.spreeInWorld[1] = Last Text ID;
  • Create Effect(All Players(All Teams), Sparkles, Lime Green, Event Player, 1, Visible To Position and Radius);
  • Event Player.spreeEffects[1] = Last Created Entity;
  • Create HUD Text(Event Player, Null, Null, Custom String("Rampage"), Left, 10, White, White, Lime Green, Visible To and String,
  • Default Visibility);
  • Event Player.spreeHud[1] = Last Text ID;
  • Wait(2, Ignore Condition);
  • Destroy In-World Text(Event Player.spreeInWorld[1]);
  • }
  • }
  • rule("[Killspree] :: 11 Kills")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.lifeKills == 11;
  • }
  • actions
  • {
  • Destroy Effect(Event Player.spreeEffects[1]);
  • Destroy HUD Text(Event Player.spreeHud[1]);
  • Big Message(All Players(All Teams), Custom String("{0} is Dominating!", Event Player));
  • Create In-World Text(Event Player, Custom String("Dominating!"), Position Of(Victim) + Up, 3, Do Not Clip, None, Blue,
  • Default Visibility);
  • Event Player.spreeInWorld[2] = Last Text ID;
  • Create Effect(All Players(All Teams), Sparkles, Blue, Event Player, 1, Visible To Position and Radius);
  • Event Player.spreeEffects[2] = Last Created Entity;
  • Create HUD Text(Event Player, Null, Null, Custom String("Dominating"), Left, 10, White, White, Blue, Visible To and String,
  • Default Visibility);
  • Event Player.spreeHud[2] = Last Text ID;
  • Wait(2, Ignore Condition);
  • Destroy In-World Text(Event Player.spreeInWorld[2]);
  • }
  • }
  • rule("[Killspree] :: 14 Kills")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.lifeKills == 14;
  • }
  • actions
  • {
  • Destroy Effect(Event Player.spreeEffects[2]);
  • Destroy HUD Text(Event Player.spreeHud[2]);
  • Big Message(All Players(All Teams), Custom String("{0} is Unstoppable!", Event Player));
  • Create In-World Text(Event Player, Custom String("Unstoppable!"), Position Of(Victim) + Up, 3, Do Not Clip, None, Purple,
  • Default Visibility);
  • Event Player.spreeInWorld[3] = Last Text ID;
  • Create Effect(All Players(All Teams), Sparkles, Purple, Event Player, 1, Visible To Position and Radius);
  • Event Player.spreeEffects[3] = Last Created Entity;
  • Create HUD Text(Event Player, Null, Null, Custom String("Unstoppable"), Left, 10, White, White, Purple, Visible To and String,
  • Default Visibility);
  • Event Player.spreeHud[3] = Last Text ID;
  • Wait(2, Ignore Condition);
  • Destroy In-World Text(Event Player.spreeInWorld[3]);
  • }
  • }
  • rule("[Killspree] :: 17 Kills")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.lifeKills == 17;
  • }
  • actions
  • {
  • Destroy Effect(Event Player.spreeEffects[3]);
  • Destroy HUD Text(Event Player.spreeHud[3]);
  • Big Message(All Players(All Teams), Custom String("{0} is Godlike!", Event Player));
  • Create In-World Text(Event Player, Custom String("Godlike!"), Position Of(Victim) + Up, 3, Do Not Clip, None, Yellow,
  • Default Visibility);
  • Event Player.spreeInWorld[4] = Last Text ID;
  • Create Effect(All Players(All Teams), Sparkles, Yellow, Event Player, 1, Visible To Position and Radius);
  • Event Player.spreeEffects[4] = Last Created Entity;
  • Create HUD Text(Event Player, Null, Null, Custom String("Godlike"), Left, 10, White, White, Yellow, Visible To and String,
  • Default Visibility);
  • Event Player.spreeHud[4] = Last Text ID;
  • Wait(2, Ignore Condition);
  • Destroy In-World Text(Event Player.spreeInWorld[4]);
  • }
  • }
  • rule("[Killspree] :: 21 Kills")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.lifeKills == 21;
  • }
  • actions
  • {
  • Destroy Effect(Event Player.spreeEffects[4]);
  • Destroy HUD Text(Event Player.spreeHud[4]);
  • Big Message(All Players(All Teams), Custom String("{0} is Divine!", Event Player));
  • Create In-World Text(Event Player, Custom String("Divine!"), Position Of(Victim) + Up, 3, Do Not Clip, None, Orange,
  • Default Visibility);
  • Event Player.spreeInWorld[5] = Last Text ID;
  • Create Effect(All Players(All Teams), Sparkles, Orange, Event Player, 1, Visible To Position and Radius);
  • Event Player.spreeEffects[5] = Last Created Entity;
  • Create HUD Text(Event Player, Null, Null, Custom String("Divine"), Left, 10, White, White, Orange, Visible To and String,
  • Default Visibility);
  • Event Player.spreeHud[5] = Last Text ID;
  • Wait(2, Ignore Condition);
  • Destroy In-World Text(Event Player.spreeInWorld[5]);
  • }
  • }
  • rule("[Killspree] :: 24 Kills")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.lifeKills == 24;
  • }
  • actions
  • {
  • Destroy Effect(Event Player.spreeEffects[5]);
  • Destroy HUD Text(Event Player.spreeHud[5]);
  • Big Message(All Players(All Teams), Custom String("{0} is Empyreal!", Event Player));
  • Create In-World Text(Event Player, Custom String("Empyreal!"), Position Of(Victim) + Up, 3, Do Not Clip, None, Red,
  • Default Visibility);
  • Event Player.spreeInWorld[6] = Last Text ID;
  • Create Effect(All Players(All Teams), Sparkles, Red, Event Player, 1, Visible To Position and Radius);
  • Event Player.spreeEffects[6] = Last Created Entity;
  • Create HUD Text(Event Player, Null, Null, Custom String("Empyreal"), Left, 10, White, White, Red, Visible To and String,
  • Default Visibility);
  • Event Player.spreeHud[6] = Last Text ID;
  • Wait(2, Ignore Condition);
  • Destroy In-World Text(Event Player.spreeInWorld[6]);
  • }
  • }
  • disabled rule("---------------- Bhop ----------------")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("[Bhop] :: Auto Hop")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (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("[Bhop] :: Starting Speed")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • actions
  • {
  • Event Player.bhopSpeed = Global.DEFAULT_START_SPEED;
  • }
  • }
  • rule("[Bhop] :: If Airborne")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • ((!Event Player.usingGrapple && Is Jumping(Event Player) && Horizontal Speed Of(Event Player)
  • > Global.DEFAULT_START_SPEED / 33.330) || (Event Player.usingGrapple && Is In Air(Event Player) && Distance Between(
  • Event Player.grappleEyePos, Event Player.grappleHit) < 40)) == True;
  • }
  • actions
  • {
  • Event Player.speedAccumInAir = Horizontal Speed Of(Event Player);
  • Wait(0.050, Ignore Condition);
  • Chase Player Variable At Rate(Event Player, bhopSpeed, Global.BHOP_MAX_SPEED, Global.BHOP_SPEED_RATE, Destination and Rate);
  • Event Player.isChasing = True;
  • }
  • }
  • rule("[Bhop] :: Update Speed")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.isChasing == True;
  • }
  • actions
  • {
  • Event Player.speedAccumInAir = Horizontal Speed Of(Event Player);
  • Set Move Speed(Event Player, Event Player.bhopSpeed);
  • Wait(0.032, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("[Bhop] :: Update isChasing")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • ((Event Player.isChasing && Event Player.bhopSpeed == Global.BHOP_MAX_SPEED) || (
  • Event Player.bhopSpeed == Global.DEFAULT_START_SPEED)) == True;
  • }
  • actions
  • {
  • Stop Chasing Player Variable(Event Player, bhopSpeed);
  • Event Player.isChasing = False;
  • }
  • }
  • rule("[Bhop] :: Reset speed if turning too fast")
  • rule("[Bhop] :: Stop chasing if too slow")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Horizontal Speed Of(Event Player) < Event Player.speedAccumInAir - 0.450;
  • (!Event Player.usingGrapple && (Event Player.isChasing || Event Player.bhopSpeed == Global.BHOP_MAX_SPEED) && Horizontal Speed Of(
  • Event Player) < Global.DEFAULT_START_SPEED / 22.200) == True;
  • }
  • actions
  • {
  • Stop Chasing Player Variable(Event Player, bhopSpeed);
  • Event Player.isChasing = False;
  • Event Player.bhopSpeed = Global.DEFAULT_START_SPEED;
  • Set Move Speed(Event Player, Event Player.bhopSpeed);
  • Wait(0.032, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("[Bhop] :: Stop chasing if too slow")
  • rule("[Bhop] :: Stop if player is on ground")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (!Event Player.usingGrapple && Event Player.isChasing && Horizontal Speed Of(Event Player) <= Global.DEFAULT_START_SPEED / 66.660)
  • == True;
  • (Is On Ground(Event Player) && !Event Player.usingGrapple && Event Player.bhopSpeed > Global.DEFAULT_START_SPEED) == True;
  • }
  • actions
  • {
  • Wait(0.200, Abort When False);
  • Stop Chasing Player Variable(Event Player, bhopSpeed);
  • Event Player.isChasing = False;
  • Event Player.bhopSpeed = Global.DEFAULT_START_SPEED;
  • Set Move Speed(Event Player, Event Player.bhopSpeed);
  • Wait(0.032, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("[Bhop] :: Stop if player is on ground")
  • disabled rule("---------------- Dodge ----------------")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("[Dodge] :: Action")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Is On Ground(Event Player) && !Event Player.usingGrapple && Event Player.bhopSpeed > Global.DEFAULT_START_SPEED) == True;
  • (Event Player.canDodge && Is Button Held(Event Player, Ability 1)) == True;
  • }
  • actions
  • {
  • Wait(0.200, Abort When False);
  • Stop Chasing Player Variable(Event Player, bhopSpeed);
  • Event Player.bhopSpeed = Global.DEFAULT_START_SPEED;
  • Set Move Speed(Event Player, Event Player.bhopSpeed);
  • Event Player.throttleOf = Throttle Of(Event Player) + Vector(0, 0.500, 0);
  • If(Event Player.throttleOf == Vector(0, 0.500, 0));
  • Event Player.throttleOf = Vector(0, 0.500, 1);
  • End;
  • Apply Impulse(Event Player, Event Player.throttleOf, Global.DODGE_FORCE, To Player, Cancel Contrary Motion);
  • If(Event Player.bhopSpeed < Global.DEFAULT_START_SPEED + 20);
  • Event Player.bhopSpeed += Global.BHOP_SPEED_RATE * 3;
  • End;
  • Event Player.canDodge = False;
  • }
  • }
  • rule("[Dodge] :: On Ground")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is On Ground(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.canDodge = True;
  • }
  • }
  • disabled rule("---------------- Secondary Fire ----------------")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("[Secondary Fire] :: Projectile")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Global.matchStarted && Is Button Held(Event Player, Secondary Fire) && Is Alive(Event Player)) == True;
  • }
  • actions
  • {
  • Event Player.livingEnemies = Filtered Array(All Players(Opposite Team Of(Team Of(Event Player))), Is Alive(Current Array Element));
  • Event Player.secondaryHit = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(
  • Event Player) * 100, Event Player.livingEnemies, Event Player, True);
  • Event Player.secondaryEyePos = Eye Position(Event Player);
  • Destroy Effect(Event Player.secondaryOrb);
  • Play Effect(All Players(All Teams), Ring Explosion Sound, White, Event Player, 50);
  • Create Effect(All Players(All Teams), Orb, Red, Event Player.secondaryEyePos, 0.100, Visible To Position and Radius);
  • Event Player.secondaryOrb = Last Created Entity;
  • Chase Player Variable At Rate(Event Player, secondaryEyePos, Event Player.secondaryHit, Global.SECONDARY_PROJECTILE_SPEED,
  • Destination and Rate);
  • Wait(0.500, Ignore Condition);
  • }
  • }
  • rule("[Secondary Fire] :: Impulse")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Distance Between(Event Player.secondaryEyePos, Event Player.secondaryHit) < 0.100 || Ray Cast Hit Player(Eye Position(
  • Event Player), Event Player.secondaryEyePos, All Living Players(All Teams), Event Player, True) != Null) == True;
  • }
  • actions
  • {
  • Stop Chasing Player Variable(Event Player, secondaryEyePos);
  • Event Player.players = Filtered Array(All Living Players(All Teams), Distance Between(Current Array Element,
  • Event Player.secondaryEyePos) <= 4.500);
  • For Player Variable(Event Player, loop, 0, Count Of(Event Player.players), 1);
  • Apply Impulse(Event Player.players[Event Player.loop], Direction Towards(Event Player.secondaryEyePos,
  • Event Player.players[Event Player.loop] + Vector(0, Y Component Of(Eye Position(Event Player.players[Event Player.loop])
  • - Event Player.players[Event Player.loop]) / 2, 0) + Up), 15, To World, Incorporate Contrary Motion);
  • End;
  • Play Effect(All Players(All Teams), Good Explosion, Red, Event Player.secondaryHit, 2.500);
  • Destroy Effect(Event Player.secondaryOrb);
  • }
  • }
  • disabled rule("---------------- Grapple ----------------")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("[Grapple] :: Grapple Start")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Global.matchStarted && Is Button Held(Event Player, Ability 2) && Is Alive(Event Player)) == True;
  • }
  • actions
  • {
  • Event Player.livingEnemies = Filtered Array(All Players(Opposite Team Of(Team Of(Event Player))), Is Alive(Current Array Element));
  • Event Player.grappleHit = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(
  • Event Player) * 40, Event Player.livingEnemies, Event Player, True);
  • Event Player.grappleHitPlayer = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(
  • Event Player) * 40, Event Player.livingEnemies, Event Player, True);
  • Event Player.grappleEyePos = Eye Position(Event Player);
  • If(Event Player.grappleHitPlayer);
  • Create Beam Effect(All Players(All Teams), Grapple Beam, Event Player, Event Player.grappleHitPlayer, Yellow,
  • Visible To Position and Radius);
  • Event Player.grappleBeamEffect = Last Created Entity;
  • Create Effect(All Players(All Teams), Sphere, Yellow, Event Player.grappleHitPlayer, 0.200, Visible To Position and Radius);
  • Event Player.grappleHitPlayerSphere = Last Created Entity;
  • If(Distance Between(Event Player.grappleEyePos, Event Player.grappleHit) != 40);
  • Create Effect(All Players(All Teams), Sphere, Yellow, Event Player.grappleHitPlayer, 0.200, Visible To Position and Radius);
  • Event Player.grappleHitPlayerSphere = Last Created Entity;
  • End;
  • Else;
  • Create Beam Effect(All Players(All Teams), Grapple Beam, Event Player, Event Player.grappleHit, Yellow,
  • Visible To Position and Radius);
  • Event Player.grappleBeamEffect = Last Created Entity;
  • Create Effect(All Players(All Teams), Sphere, Yellow, Event Player.grappleHit, 0.200, Visible To Position and Radius);
  • Event Player.grappleHitSphere = Last Created Entity;
  • If(Distance Between(Event Player.grappleEyePos, Event Player.grappleHit) != 40);
  • Create Effect(All Players(All Teams), Sphere, Yellow, Event Player.grappleHit, 0.200, Visible To Position and Radius);
  • Event Player.grappleHitSphere = Last Created Entity;
  • End;
  • End;
  • Play Effect(All Players(All Teams), Bad Explosion, Yellow, Event Player, 0.330);
  • Play Effect(All Players(All Teams), Buff Impact Sound, White, Event Player, 100);
  • Play Effect(All Players(All Teams), Bad Explosion, Yellow, Event Player.grappleHit, 0.200);
  • Play Effect(All Players(All Teams), Buff Impact Sound, White, Event Player.grappleHit, 50);
  • Event Player.usingGrapple = True;
  • If(Distance Between(Event Player.grappleEyePos, Event Player.grappleHit) == 40);
  • Wait(0.250, Ignore Condition);
  • Event Player.usingGrapple = False;
  • Destroy Effect(Event Player.grappleBeamEffect);
  • Destroy Effect(Event Player.grapplePlayerBeamEffect);
  • Destroy Effect(Event Player.grappleHitSphere);
  • Destroy Effect(Event Player.grappleHitPlayerSphere);
  • Else;
  • Play Effect(All Players(All Teams), Bad Explosion, Yellow, Event Player.grappleHit, 0.200);
  • Play Effect(All Players(All Teams), Buff Impact Sound, White, Event Player.grappleHit, 50);
  • Play Effect(All Players(All Teams), Bad Explosion, Yellow, Event Player, 0.330);
  • Play Effect(All Players(All Teams), Buff Impact Sound, White, Event Player, 100);
  • End;
  • Wait(0.500, Ignore Condition);
  • }
  • }
  • rule("[Grapple] :: Pull")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Event Player.usingGrapple && Distance Between(Event Player.grappleEyePos, Event Player.grappleHit) < 40) == True;
  • }
  • actions
  • {
  • Start Forcing Throttle(Event Player, 0, 0.050, 0, 0.050, 0, 0.050);
  • If(Event Player.grappleHitPlayer && Is Alive(Event Player.grappleHitPlayer));
  • Apply Impulse(Event Player.grappleHitPlayer, Vector(0, 0.300, 0) + Direction Towards(Event Player.grappleHitPlayer, Eye Position(
  • Event Player)), Global.GRAPPLE_PULL_SPEED / 1.250, To World, Incorporate Contrary Motion);
  • Else;
  • If(Is Button Held(Event Player, Jump));
  • Apply Impulse(Event Player, Vector(0, 0.300, 0) + Direction Towards(Eye Position(Event Player), Event Player.grappleHit),
  • Global.GRAPPLE_PULL_SPEED, To World, Incorporate Contrary Motion);
  • Else;
  • Apply Impulse(Event Player, Direction Towards(Eye Position(Event Player), Event Player.grappleHit), Global.GRAPPLE_PULL_SPEED,
  • To World, Incorporate Contrary Motion);
  • End;
  • End;
  • Wait(0.064, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("[Grapple] :: Grapple End")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (!Is Button Held(Event Player, Ability 2) || Is Dead(Event Player) || Is Dead(Event Player.grappleHitPlayer)
  • || !Is In Line of Sight(Event Player, Event Player.grappleHitPlayer, Barriers Do Not Block LOS) || !Is In View Angle(
  • Event Player, Event Player.grappleHitPlayer, 105)) == True;
  • }
  • actions
  • {
  • Event Player.usingGrapple = False;
  • }
  • }
  • rule("[Grapple] :: Destroy Effects")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • !Event Player.usingGrapple == True;
  • }
  • actions
  • {
  • Destroy Effect(Event Player.grappleBeamEffect);
  • Destroy Effect(Event Player.grapplePlayerBeamEffect);
  • Destroy Effect(Event Player.grappleHitSphere);
  • Destroy Effect(Event Player.grappleHitPlayerSphere);
  • Stop Forcing Throttle(Event Player);
  • }
  • }
  • disabled rule("---------------- Buff ----------------")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("[Buff] :: Locations Switch")
  • rule("[Buff] :: Player With Buff Doesn't Exist")
  • {
  • event
  • {
  • Player Left Match;
  • All;
  • All;
  • }
  • actions
  • {
  • If(!Entity Exists(Global.wallbangUser) && !Entity Exists(Global.buffEffect[0])
  • && Global.wallbangUser != Null && !Global.spawnWithWallbang);
  • Global.wallbangUser.wallbangEnabled = False;
  • Global.wallbangUser.wallbangDur = 0;
  • Wait(1, Ignore Condition);
  • Call Subroutine(WallbangCooldown);
  • Else If(!Entity Exists(Global.ricochetUser) && !Entity Exists(Global.buffEffect[1])
  • && Global.ricochetUser != Null && !Global.spawnWithRicochet);
  • Global.ricochetUser.ricochetEnabled = False;
  • Global.ricochetUser.ricochetDur = 0;
  • Wait(1, Ignore Condition);
  • Call Subroutine(RicochetCooldown);
  • Else If(!Entity Exists(Global.buckshotUser) && !Entity Exists(Global.buffEffect[2])
  • && Global.buckshotUser != Null && !Global.spawnWithBuckshot);
  • Global.buckshotUser.buckshotEnabled = False;
  • Global.buckshotUser.buckshotDur = 0;
  • Wait(1, Ignore Condition);
  • Call Subroutine(BuckshotCooldown);
  • End;
  • }
  • }
  • rule("[Buff] :: Map Locations")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • "i do not recommend opening the large action in-game"
  • Global.validBuffMap = False;
  • Skip(Array(83, 0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78)[Index Of Array Value(Array((
  • Global.buffsEnabled && Current Map == Map(Workshop Chamber)) || (Current Map == Map(Workshop Expanse)) || Current Map == Map(
  • Workshop Expanse Night) || Current Map == Map(Workshop Island) || Current Map == Map(Workshop Island Night), (
  • Global.buffsEnabled && Current Map == Map(Blizzard World)) || (Current Map == Map(Blizzard World Winter)), (
  • Global.buffsEnabled && Current Map == Map(Château Guillard)) || (Current Map == Map(Château Guillard Halloween)),
  • Global.buffsEnabled && Current Map == Map(Dorado), (Global.buffsEnabled && Current Map == Map(Ecopoint: Antarctica)) || (
  • Current Map == Map(Ecopoint: Antarctica Winter)), (Global.buffsEnabled && Current Map == Map(Eichenwalde)) || (
  • Current Map == Map(Eichenwalde Halloween)), (Global.buffsEnabled && Current Map == Map(Hollywood)) || (Current Map == Map(
  • Hollywood Halloween)), (Global.buffsEnabled && Current Map == Map(King's Row)) || (Current Map == Map(King's Row Winter)), (
  • Global.buffsEnabled && Current Map == Map(Lijiang Control Center)) || (Current Map == Map(
  • Lijiang Control Center Lunar New Year)), Global.buffsEnabled && Current Map == Map(Necropolis),
  • Global.buffsEnabled && Current Map == Map(Paris), Global.buffsEnabled && Current Map == Map(Havana),
  • Global.buffsEnabled && Current Map == Map(Castillo), (Global.buffsEnabled && Current Map == Map(Black Forest)) || (
  • Current Map == Map(Black Forest Winter))), True) + 1]);
  • Global.validBuffMap = True;
  • Global.buffPos[0] = Vector(0, 1, 2);
  • Global.buffPos[1] = Vector(0, 1, -2);
  • Global.buffPos[2] = Vector(0, 1, -6);
  • Global.buffPos[3] = Vector(0, 1, 6);
  • Skip(77);
  • Global.validBuffMap = True;
  • Global.buffPos[0] = Vector(-32.500, 0.610, 73.150);
  • Global.buffPos[1] = Vector(-77.280, 5.880, 66.150);
  • Global.buffPos[2] = Vector(-54.500, 0.610, 110.200);
  • Global.buffPos[3] = Vector(-67.550, 1.750, 138.740);
  • Skip(71);
  • Global.validBuffMap = True;
  • Global.buffPos[0] = Vector(206.210, 16.500, 87);
  • Global.buffPos[1] = Vector(206.150, 1, 77.420);
  • Global.buffPos[0] = Vector(206.310, 9.030, 101.900);
  • Global.buffPos[1] = Vector(206.310, 9, 61.910);
  • Global.buffPos[2] = Vector(180.600, 10, 101.930);
  • Global.buffPos[3] = Vector(196.350, 17.500, 47.060);
  • Global.buffPos[3] = Vector(206.190, 1, 77.960);
  • Skip(65);
  • Global.validBuffMap = True;
  • Global.buffPos[0] = Vector(102.460, 12.010, 9.680);
  • Global.buffPos[0] = Vector(115.660, 8.730, -7.080);
  • Global.buffPos[1] = Vector(64.440, 15.010, 25.150);
  • Global.buffPos[2] = Vector(114.300, 12, 44.920);
  • Global.buffPos[3] = Vector(128.330, 10.020, -23.860);
  • Global.buffPos[2] = Vector(98.040, 19.010, 15.260);
  • Global.buffPos[3] = Vector(131.270, 12.050, 26.120);
  • Skip(59);
  • Global.validBuffMap = True;
  • Global.buffPos[0] = Vector(1.660, 12.630, -25);
  • Global.buffPos[1] = Vector(-32.270, 10, 0);
  • Global.buffPos[1] = Vector(-19.500, 13, 0);
  • Global.buffPos[2] = Vector(1.660, 12.630, 25);
  • Global.buffPos[3] = Vector(29.600, 4, 0);
  • Global.buffPos[3] = Vector(20.500, 10, 0);
  • Skip(53);
  • Global.validBuffMap = True;
  • Global.buffPos[0] = Vector(55.700, 22, -67.840);
  • Global.buffPos[1] = Vector(58.330, 5.720, -90.390);
  • Global.buffPos[2] = Vector(54.740, 11.720, -121.020);
  • Global.buffPos[3] = Vector(103.960, 13.720, -109.470);
  • Global.buffPos[2] = Vector(76.030, 11.690, -109.660);
  • Global.buffPos[3] = Vector(88.130, 13.670, -67.390);
  • Skip(47);
  • Global.validBuffMap = True;
  • Global.buffPos[0] = Vector(-11.910, 2.730, -74.640);
  • Global.buffPos[1] = Vector(-4.090, 2.600, -15.870);
  • Global.buffPos[2] = Vector(20.670, 2.600, -51.820);
  • Global.buffPos[3] = Vector(7.870, 13.900, -48.380);
  • Skip(41);
  • Global.validBuffMap = True;
  • Global.buffPos[0] = Vector(-49.460, 1, 2.690);
  • Global.buffPos[1] = Vector(-31.190, 10, -13.400);
  • Global.buffPos[2] = Vector(-93.670, 8.500, -29.380);
  • Global.buffPos[3] = Vector(-69.640, 1.500, -35.480);
  • Skip(35);
  • Global.validBuffMap = True;
  • Global.buffPos[0] = Vector(-33.500, 268, 323);
  • Global.buffPos[0] = Vector(-26.800, 268, 308);
  • Global.buffPos[1] = Vector(0, 271, 323);
  • Global.buffPos[2] = Vector(33.500, 268, 323);
  • Global.buffPos[2] = Vector(26.800, 268, 308);
  • Global.buffPos[3] = Vector(0, 271, 267.500);
  • Skip(29);
  • Global.validBuffMap = True;
  • Global.buffPos[0] = Vector(0, -5, 0);
  • Global.buffPos[1] = Vector(-29.500, 3, 0);
  • Global.buffPos[2] = Vector(1.060, 4, -23.070);
  • Global.buffPos[3] = Vector(1.060, 4, 23.070);
  • Global.buffPos[0] = Vector(1.680, 12.700, 17.250);
  • Global.buffPos[1] = Vector(-21.050, 13.710, 0);
  • Global.buffPos[2] = Vector(1.800, 12.700, -16.410);
  • Global.buffPos[3] = Vector(8.500, 2.010, 0);
  • Skip(23);
  • Global.validBuffMap = True;
  • Global.buffPos[0] = Vector(-104, 16, -100);
  • Global.buffPos[0] = Vector(-104.100, 16, -100.650);
  • Global.buffPos[1] = Vector(-109.180, 11, -60.600);
  • Global.buffPos[2] = Vector(-57.190, 14, -82);
  • Global.buffPos[3] = Vector(-73.390, 11.020, -38.230);
  • Skip(17);
  • Global.validBuffMap = True;
  • Global.buffPos[0] = Vector(0, 7, -79.230);
  • Global.buffPos[1] = Vector(32.090, 5, -97.450);
  • Global.buffPos[2] = Vector(64.200, 5, -65.680);
  • Global.buffPos[3] = Vector(64.500, 13, -83.330);
  • Skip(11);
  • Global.validBuffMap = True;
  • Global.buffPos[0] = Vector(-106.180, 40.560, 43.200);
  • Global.buffPos[1] = Vector(-128.200, 35.380, 63.400);
  • Global.buffPos[2] = Vector(-100.350, 40.560, 73.750);
  • Global.buffPos[3] = Vector(-74.820, 33, 52.930);
  • Skip(5);
  • Global.validBuffMap = True;
  • Global.buffPos[0] = Vector(16.790, 12.440, 29.480);
  • Global.buffPos[1] = Vector(4.660, 18.280, 5);
  • Global.buffPos[2] = Vector(16.180, 12.360, -20.110);
  • Global.buffPos[3] = Vector(-25.490, 13.090, 5);
  • }
  • }
  • disabled rule("---------------- wallbang ----------------")
  • disabled rule("---------------- Wallbang ----------------")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("[Buff] :: Wallbang : Create Orb")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • (Global.validBuffMap && !Global.spawnWithWallbang && Global.spawnWallbang && Global.wallbangCD == 0 && (
  • Global.matchStarted || Global.buffsSpawnImmediately)) == True;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Good Pickup Effect, Yellow, Global.buffPos[0], 1);
  • Destroy In-World Text(Global.cdText[0]);
  • Create Effect(All Players(All Teams), Orb, Yellow, Global.buffPos[0], 2, Visible To Position and Radius);
  • Global.buffEffect[0] = Last Created Entity;
  • Play Effect(All Players(All Teams), Good Pickup Effect, Yellow, Global.buffPos[0], 1);
  • Create In-World Text(All Players(All Teams), Ability Icon String(Hero(Baptiste), Button(Ultimate)), Global.buffPos[0], 2,
  • Clip Against Surfaces, Visible To Position and String, White, Default Visibility);
  • Global.buffIcon[0] = Last Text ID;
  • Destroy In-World Text(Global.cdText[0]);
  • Global.canPickupWallbang = True;
  • }
  • }
  • rule("[Buff] :: Wallbang : Collect")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • ((Global.matchStarted && Entity Exists(Global.buffEffect[0]) && Distance Between(Global.buffPos[0], Event Player)
  • < 2.500 && Has Spawned(Event Player) && Is Alive(Event Player)) || Global.spawnWithWallbang) == True;
  • ((Global.matchStarted && Global.canPickupWallbang && Entity Exists(Global.buffEffect[0]) && Distance Between(Global.buffPos[0],
  • Event Player) < 2.500 && Has Spawned(Event Player) && Is Alive(Event Player)) || Global.spawnWithWallbang) == True;
  • }
  • actions
  • {
  • Global.canPickupWallbang = False;
  • Event Player.wallbangEnabled = True;
  • Global.wallbangUser = Event Player;
  • If(!Global.spawnWithWallbang);
  • Destroy In-World Text(Global.cdText[0]);
  • Destroy In-World Text(Global.buffIcon[0]);
  • Destroy Effect(Global.buffEffect[0]);
  • Play Effect(All Players(All Teams), Good Pickup Effect, Yellow, Global.buffPos[0], 1);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, Yellow, Global.buffPos[0], 200);
  • Event Player.wallbangDur = Global.WALLBANG_DUR;
  • Chase Player Variable At Rate(Event Player, wallbangDur, 0, 1, None);
  • Create HUD Text(Event Player, Null, Null, Custom String("{0} Wallbang: {1} {0}", Ability Icon String(Hero(Baptiste), Button(
  • Ultimate)), Round To Integer(Event Player.wallbangDur, Up)), Top, 1, White, White, White, Visible To and String,
  • Ultimate)), Round To Integer(Event Player.wallbangDur, Up)), Top, 2, White, White, White, Visible To and String,
  • Default Visibility);
  • Event Player.hudText[0] = Last Text ID;
  • Small Message(Event Player, Custom String("Your bullets go through walls!"));
  • Big Message(Event Player, Custom String("Wallbang"));
  • Create Effect(Is Alive(Event Player) ? All Players(All Teams) : Null, Good Aura, Yellow, Event Player, 0.750,
  • Visible To Position and Radius);
  • Event Player.wallbangBuffEffect = Last Created Entity;
  • Wait(Global.WALLBANG_DUR - 4, Ignore Condition);
  • For Player Variable(Event Player, sound, 0, 4, 1);
  • Play Effect(All Players(All Teams), Debuff Impact Sound, White, Event Player, 100);
  • Wait(1, Ignore Condition);
  • End;
  • Else;
  • Create HUD Text(Event Player, Null, Null, Custom String("{0} Wallbang: Forever {0}", Ability Icon String(Hero(Baptiste), Button(
  • Ultimate))), Top, 1, White, White, White, Visible To and String, Default Visibility);
  • Event Player.hudText[0] = Last Text ID;
  • End;
  • }
  • }
  • rule("[Buff] :: Wallbang : Remove")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (!Global.spawnWithWallbang && Event Player.wallbangDur == 0) == True;
  • }
  • actions
  • {
  • Wait(0.128, Ignore Condition);
  • Destroy HUD Text(Event Player.hudText[0]);
  • Destroy Effect(Event Player.wallbangBuffEffect);
  • Stop Chasing Player Variable(Event Player, wallbangDur);
  • Event Player.wallbangEnabled = False;
  • Global.wallbangUser = Null;
  • Event Player.wallbangDur = Global.WALLBANG_DUR;
  • Call Subroutine(WallbangCooldown);
  • }
  • }
  • rule("[Buff] :: Wallbang : Action")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Event Player.wallbangEnabled && Is Firing Primary(Event Player)) == True;
  • }
  • actions
  • {
  • Event Player.gunPos = Eye Position(Event Player) + Facing Direction Of(Event Player) + World Vector Of(Right - Vector(0, 0.300, 0),
  • Event Player, Rotation) * 0.180;
  • Event Player.wallbangHitPos = Eye Position(Event Player);
  • Event Player.wallbangLivingEnemies = 0;
  • Event Player.wallbangHitPlayer = 0;
  • Event Player.wallbangCount = 0;
  • While(Distance Between(Event Player.gunPos, Event Player.wallbangHitPos)
  • < 100 && Event Player.wallbangCount < Global.NUM_WALLBANGS);
  • Event Player.wallbangLivingEnemies = Filtered Array(All Players(Opposite Team Of(Team Of(Event Player))), Is Alive(
  • Current Array Element));
  • Event Player.wallbangHitPos = Ray Cast Hit Position(Event Player.wallbangHitPos + Facing Direction Of(Event Player),
  • Event Player.wallbangHitPos + Facing Direction Of(Event Player) * (100 - Distance Between(Event Player.gunPos,
  • Event Player.wallbangHitPos)), Event Player.wallbangLivingEnemies, Event Player, True);
  • Play Effect(All Players(All Teams), Good Explosion, Yellow, Event Player.wallbangHitPos, 0.200);
  • Event Player.wallbangHitPlayer = Ray Cast Hit Player(Event Player.wallbangHitPos,
  • Event Player.wallbangHitPos + Facing Direction Of(Event Player) * (100 - Distance Between(Event Player.gunPos,
  • Event Player.wallbangHitPos)), Event Player.wallbangLivingEnemies, Event Player, True);
  • If(Event Player.wallbangHitPlayer != Null && Event Player.wallbangHitPlayer != Event Player);
  • Damage(Event Player.wallbangHitPlayer, Event Player, 10000);
  • End;
  • Event Player.wallbangCount += 1;
  • End;
  • Create Beam Effect(All Players(All Teams), Bad Beam, Event Player.gunPos, Event Player.wallbangHitPos, Yellow, None);
  • Event Player.wallbangEffect[0] = Last Created Entity;
  • Wait(0.250, Ignore Condition);
  • Destroy Effect(Event Player.wallbangEffect[0]);
  • }
  • }
  • rule("[Buff] :: Wallbang : Remove")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (!Global.spawnWithWallbang && Event Player.wallbangDur == 0) == True;
  • }
  • actions
  • {
  • Destroy HUD Text(Event Player.hudText[0]);
  • Destroy Effect(Event Player.wallbangBuffEffect);
  • Event Player.wallbangEnabled = False;
  • Call Subroutine(WallbangCooldown);
  • }
  • }
  • disabled rule("---------------- ricochet ----------------")
  • disabled rule("---------------- Ricochet ----------------")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("[Buff] :: Ricochet : Create Orb")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • (Global.validBuffMap && !Global.spawnWithRicochet && Global.spawnRicochet && Global.ricochetCD == 0 && (
  • Global.matchStarted || Global.buffsSpawnImmediately)) == True;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Good Pickup Effect, Purple, Global.buffPos[1], 1);
  • Destroy In-World Text(Global.cdText[1]);
  • Create Effect(All Players(All Teams), Orb, Purple, Global.buffPos[1], 2, Visible To Position and Radius);
  • Global.buffEffect[1] = Last Created Entity;
  • Play Effect(All Players(All Teams), Good Pickup Effect, Purple, Global.buffPos[1], 1);
  • Create In-World Text(All Players(All Teams), Ability Icon String(Hero(Winston), Button(Ability 1)), Global.buffPos[1], 2,
  • Clip Against Surfaces, Visible To Position and String, White, Default Visibility);
  • Global.buffIcon[1] = Last Text ID;
  • Destroy In-World Text(Global.cdText[1]);
  • Global.canPickupRicochet = True;
  • }
  • }
  • rule("[Buff] :: Ricochet : Collect")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • ((Global.matchStarted && Entity Exists(Global.buffEffect[1]) && Distance Between(Global.buffPos[1], Event Player)
  • < 2.500 && Has Spawned(Event Player) && Is Alive(Event Player)) || Global.spawnWithRicochet) == True;
  • ((Global.matchStarted && Global.canPickupRicochet && Entity Exists(Global.buffEffect[1]) && Distance Between(Global.buffPos[1],
  • Event Player) < 2.500 && Has Spawned(Event Player) && Is Alive(Event Player)) || Global.spawnWithRicochet) == True;
  • }
  • actions
  • {
  • Global.canPickupRicochet = False;
  • Event Player.ricochetEnabled = True;
  • Global.ricochetUser = Event Player;
  • If(!Global.spawnWithRicochet);
  • Destroy In-World Text(Global.cdText[1]);
  • Destroy In-World Text(Global.buffIcon[1]);
  • Destroy Effect(Global.buffEffect[1]);
  • Play Effect(All Players(All Teams), Good Pickup Effect, Purple, Global.buffPos[1], 1);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, Purple, Global.buffPos[1], 200);
  • Event Player.ricochetDur = Global.RICOCHET_DUR;
  • Chase Player Variable At Rate(Event Player, ricochetDur, 0, 1, None);
  • Create HUD Text(Event Player, Null, Null, Custom String("{0} Ricochet Bullets: {1} {0}", Ability Icon String(Hero(Winston), Button(
  • Ability 1)), Round To Integer(Event Player.ricochetDur, Up)), Top, 2, White, White, White, Visible To and String,
  • Ability 1)), Round To Integer(Event Player.ricochetDur, Up)), Top, 3, White, White, White, Visible To and String,
  • Default Visibility);
  • Event Player.hudText[1] = Last Text ID;
  • Small Message(Event Player, Custom String("Your bullets ricochet off walls!"));
  • Big Message(Event Player, Custom String("Ricochet Bullets"));
  • Create Effect(Is Alive(Event Player) ? All Players(All Teams) : Null, Good Aura, Purple, Event Player, 0.750,
  • Visible To Position and Radius);
  • Event Player.ricochetBuffEffect = Last Created Entity;
  • Wait(Global.RICOCHET_DUR - 4, Ignore Condition);
  • For Player Variable(Event Player, sound_0, 0, 4, 1);
  • Play Effect(All Players(All Teams), Debuff Impact Sound, White, Event Player, 100);
  • Wait(1, Ignore Condition);
  • End;
  • Else;
  • Create HUD Text(Event Player, Null, Null, Custom String("{0} Ricochet Bullets: Forever {0}", Ability Icon String(Hero(Winston),
  • Button(Ability 1))), Top, 2, White, White, White, Visible To and String, Default Visibility);
  • Event Player.hudText[1] = Last Text ID;
  • End;
  • }
  • }
  • rule("[Buff] :: Ricochet : Remove")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Event Player.ricochetDur == 0 && !Global.spawnWithRicochet) == True;
  • }
  • actions
  • {
  • Wait(0.128, Ignore Condition);
  • Destroy HUD Text(Event Player.hudText[1]);
  • Destroy Effect(Event Player.ricochetBuffEffect);
  • Stop Chasing Player Variable(Event Player, ricochetDur);
  • Event Player.ricochetEnabled = False;
  • Global.ricochetUser = Null;
  • Event Player.ricochetDur = Global.RICOCHET_DUR;
  • Call Subroutine(RicochetCooldown);
  • }
  • }
  • rule("[Buff] :: Ricochet : Action")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Event Player.ricochetEnabled && Is Firing Primary(Event Player)) == True;
  • }
  • actions
  • {
  • "https://math.stackexchange.com/questions/13261/how-to-get-a-reflection-vector"
  • Event Player.normals = Empty Array;
  • Event Player.hitPos = Empty Array;
  • Event Player.hitPosPlayer = Empty Array;
  • Event Player.ricochets = Empty Array;
  • Event Player.hitPosRicochets = Empty Array;
  • Event Player.hitPosPlayerRicochets = Empty Array;
  • Event Player.ricochetEffects = Empty Array;
  • Event Player.ricochetEffect = Empty Array;
  • Event Player.loop_0 = 0;
  • While(Event Player.loop_0 < Global.NUM_RICOCHETS);
  • If(Event Player.loop_0 > 0);
  • Event Player.eyePos = Event Player.hitPos[Event Player.loop_0 - 1];
  • Event Player.facing = Event Player.ricochets[Event Player.loop_0 - 1];
  • Else;
  • Event Player.eyePos = Eye Position(Event Player) + Facing Direction Of(Event Player) + World Vector Of(Right - Vector(0, 0.300, 0),
  • Event Player, Rotation) * 0.180;
  • Event Player.facing = Facing Direction Of(Event Player);
  • End;
  • Event Player.normals[Event Player.loop_0] = Ray Cast Hit Normal(Event Player.eyePos,
  • Event Player.eyePos + Event Player.facing * 100, All Players(All Teams), Event Player, True);
  • Event Player.hitPos[Event Player.loop_0] = Ray Cast Hit Position(Event Player.eyePos,
  • Event Player.eyePos + Event Player.facing * 100, All Players(All Teams), Event Player, True);
  • Event Player.hitPosPlayer[Event Player.loop_0] = Ray Cast Hit Player(Event Player.eyePos,
  • Event Player.eyePos + Event Player.facing * 100, All Players(All Teams), Event Player, True);
  • Event Player.ricochets[Event Player.loop_0] = Event Player.facing - 2 * Event Player.normals[Event Player.loop_0] * Dot Product(
  • Event Player.facing, Event Player.normals[Event Player.loop_0]);
  • Event Player.hitPosRicochets[Event Player.loop_0] = Ray Cast Hit Position(Event Player.hitPos[Event Player.loop_0],
  • Event Player.hitPos[Event Player.loop_0] + Event Player.ricochets[Event Player.loop_0] * 100, All Living Players(All Teams),
  • Event Player, True);
  • Event Player.hitPosPlayerRicochets[Event Player.loop_0] = Ray Cast Hit Player(Event Player.hitPos[Event Player.loop_0],
  • Event Player.hitPos[Event Player.loop_0] + Event Player.ricochets[Event Player.loop_0] * 100, All Living Players(All Teams),
  • Event Player, True);
  • Create Beam Effect(All Players(All Teams), Bad Beam, Event Player.eyePos, Event Player.hitPos[Event Player.loop_0], Purple, None);
  • Event Player.ricochetEffect[Event Player.loop_0] = Last Created Entity;
  • Create Beam Effect(All Players(All Teams), Bad Beam, Event Player.hitPos[Event Player.loop_0],
  • Event Player.hitPosRicochets[Event Player.loop_0], Purple, None);
  • Event Player.ricochetEffects[Event Player.loop_0] = Last Created Entity;
  • Play Effect(All Players(All Teams), Good Explosion, Purple, Event Player.hitPos[Event Player.loop_0], 0.200);
  • Play Effect(All Players(All Teams), Good Explosion, Purple, Event Player.hitPosRicochets[Event Player.loop_0], 0.200);
  • Damage(Event Player.hitPosPlayer[Event Player.loop_0], Event Player, 10000);
  • Damage(Event Player.hitPosPlayerRicochets[Event Player.loop_0], Event Player, 10000);
  • Event Player.loop_0 += 1;
  • End;
  • Wait(0.150, Ignore Condition);
  • Event Player.i_0 = 0;
  • While(Event Player.i_0 < Global.NUM_RICOCHETS);
  • Destroy Effect(Event Player.ricochetEffect[Event Player.i_0]);
  • Destroy Effect(Event Player.ricochetEffects[Event Player.i_0]);
  • Event Player.i_0 += 1;
  • End;
  • }
  • }
  • rule("[Buff] :: Ricochet : Remove")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (!Global.spawnWithRicochet && Event Player.ricochetDur == 0) == True;
  • }
  • actions
  • {
  • Destroy HUD Text(Event Player.hudText[1]);
  • Destroy Effect(Event Player.ricochetBuffEffect);
  • Event Player.ricochetEnabled = False;
  • Call Subroutine(RicochetCooldown);
  • }
  • }
  • disabled rule("---------------- buckshot ----------------")
  • disabled rule("---------------- Buckshot ----------------")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("[Buff] :: Buckshot : Create Orb")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • (Global.validBuffMap && !Global.spawnWithBuckshot && Global.spawnBuckshot && Global.buckshotCD == 0 && (
  • Global.matchStarted || Global.buffsSpawnImmediately)) == True;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Good Pickup Effect, Green, Global.buffPos[2], 1);
  • Destroy In-World Text(Global.cdText[2]);
  • Create Effect(All Players(All Teams), Orb, Green, Global.buffPos[2], 2, Visible To Position and Radius);
  • Global.buffEffect[2] = Last Created Entity;
  • Play Effect(All Players(All Teams), Good Pickup Effect, Green, Global.buffPos[2], 1);
  • Create In-World Text(All Players(All Teams), Ability Icon String(Hero(Ashe), Button(Ability 1)), Global.buffPos[2], 2,
  • Clip Against Surfaces, Visible To Position and String, White, Default Visibility);
  • Global.buffIcon[2] = Last Text ID;
  • Destroy In-World Text(Global.cdText[2]);
  • Global.canPickupBuckshot = True;
  • }
  • }
  • rule("[Buff] :: Buckshot : Collect")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • ((Global.matchStarted && Entity Exists(Global.buffEffect[2]) && Distance Between(Global.buffPos[2], Event Player)
  • < 2.500 && Has Spawned(Event Player) && Is Alive(Event Player)) || Global.spawnWithBuckshot) == True;
  • ((Global.matchStarted && Global.canPickupBuckshot && Entity Exists(Global.buffEffect[2]) && Distance Between(Global.buffPos[2],
  • Event Player) < 2.500 && Has Spawned(Event Player) && Is Alive(Event Player)) || Global.spawnWithBuckshot) == True;
  • }
  • actions
  • {
  • Global.canPickupBuckshot = False;
  • Event Player.buckshotEnabled = True;
  • Global.buckshotUser = Event Player;
  • If(!Global.spawnWithBuckshot);
  • Destroy In-World Text(Global.cdText[2]);
  • Destroy In-World Text(Global.buffIcon[2]);
  • Destroy Effect(Global.buffEffect[2]);
  • Play Effect(All Players(All Teams), Good Pickup Effect, Green, Global.buffPos[2], 1);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, Green, Global.buffPos[2], 200);
  • Event Player.buckshotDur = Global.BUCKSHOT_DUR;
  • Chase Player Variable At Rate(Event Player, buckshotDur, 0, 1, Destination and Rate);
  • Create HUD Text(Event Player, Null, Null, Custom String("{0} Buckshot: {1} {0}", Ability Icon String(Hero(Ashe), Button(
  • Ability 1)), Round To Integer(Event Player.buckshotDur, Up)), Top, 3, White, White, White, Visible To and String,
  • Ability 1)), Round To Integer(Event Player.buckshotDur, Up)), Top, 4, White, White, White, Visible To and String,
  • Default Visibility);
  • Event Player.hudText[2] = Last Text ID;
  • Big Message(Event Player, Custom String("Buckshot"));
  • Small Message(Event Player, Custom String("Your bullets spread like a shotgun!"));
  • Create Effect(Is Alive(Event Player) ? All Players(All Teams) : Null, Good Aura, Green, Event Player, 0.750,
  • Visible To Position and Radius);
  • Event Player.buckshotBuffEffect = Last Created Entity;
  • Wait(Global.BUCKSHOT_DUR - 4, Ignore Condition);
  • For Player Variable(Event Player, sound_1, 0, 4, 1);
  • Play Effect(All Players(All Teams), Debuff Impact Sound, White, Event Player, 100);
  • Wait(1, Ignore Condition);
  • End;
  • Else;
  • Create HUD Text(Event Player, Null, Null, Custom String("{0} Buckshot: Forever {0}", Ability Icon String(Hero(Ashe), Button(
  • Ability 1))), Top, 3, White, White, White, Visible To and String, Default Visibility);
  • Event Player.hudText[2] = Last Text ID;
  • End;
  • }
  • }
  • rule("[Buff] :: Buckshot : Remove")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (!Global.spawnWithBuckshot && Event Player.buckshotDur == 0) == True;
  • }
  • actions
  • {
  • Wait(0.128, Ignore Condition);
  • Destroy HUD Text(Event Player.hudText[2]);
  • Destroy Effect(Event Player.buckshotBuffEffect);
  • Stop Chasing Player Variable(Event Player, buckshotDur);
  • Event Player.buckshotEnabled = False;
  • Global.buckshotUser = Null;
  • Event Player.buckshotDur = Global.BUCKSHOT_DUR;
  • Call Subroutine(BuckshotCooldown);
  • }
  • }
  • rule("[Buff] :: Buckshot : Action")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Event Player.buckshotEnabled && Is Firing Primary(Event Player)) == True;
  • }
  • actions
  • {
  • Event Player.buckshotHitPos = Empty Array;
  • Event Player.buckshotHitPlayer = Empty Array;
  • Event Player.livingEnemies = Filtered Array(All Players(Opposite Team Of(Team Of(Event Player))), Is Alive(Current Array Element));
  • Event Player.gunPos_0 = World Vector Of(Right - Vector(0, 0.300, 0), Event Player, Rotation) * 0.180;
  • Event Player.buckshotBeam = Empty Array;
  • Event Player.centerBeam = 0;
  • Global.spreadDiag = Global.BUCKSHOT_SPREAD - Global.BUCKSHOT_SPREAD * 0.330;
  • Global.spreadHori = Global.BUCKSHOT_SPREAD;
  • If(Global.randomSpread);
  • Event Player.randomizedSpreadHori = Empty Array;
  • Event Player.randomizedSpreadDiag = Empty Array;
  • Event Player.hori = 0;
  • While(Event Player.hori < 4);
  • Event Player.randomizedSpreadHori[Event Player.hori] = Random Real(Global.spreadHori / 5, Global.spreadHori + 1.500);
  • Event Player.hori += 1;
  • End;
  • Event Player.diag = 0;
  • While(Event Player.diag < 4);
  • Event Player.randomizedSpreadDiag[Event Player.diag] = Random Real(Global.spreadHori / 5, Global.spreadDiag + 1.500);
  • Event Player.diag += 1;
  • End;
  • End;
  • If(!Global.randomSpread);
  • Event Player.buckshotHitPos[0] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Global.spreadDiag) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
  • Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadDiag) * 100,
  • All Living Players(All Teams), Event Player, False);
  • Event Player.buckshotHitPlayer[0] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Global.spreadDiag) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
  • Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadDiag) * 100,
  • All Living Players(All Teams), Event Player, False);
  • Else;
  • Event Player.buckshotHitPos[0] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Event Player.randomizedSpreadDiag[0]) * 100, 0, 0), Event Player, Rotation)
  • + Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player)
  • + Event Player.randomizedSpreadDiag[0]) * 100, All Living Players(All Teams), Event Player, False);
  • Event Player.buckshotHitPlayer[0] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Event Player.randomizedSpreadDiag[0]) * 100, 0, 0), Event Player, Rotation)
  • + Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player)
  • + Event Player.randomizedSpreadDiag[0]) * 100, All Living Players(All Teams), Event Player, False);
  • End;
  • If(!Global.randomSpread);
  • Event Player.buckshotHitPos[1] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Global.spreadDiag) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
  • Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadDiag * -1) * 100,
  • All Living Players(All Teams), Event Player, False);
  • Event Player.buckshotHitPlayer[1] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Global.spreadDiag) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
  • Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadDiag * -1) * 100,
  • All Living Players(All Teams), Event Player, False);
  • Else;
  • Event Player.buckshotHitPos[1] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Event Player.randomizedSpreadDiag[1]) * 100, 0, 0), Event Player, Rotation)
  • + Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player)
  • + Event Player.randomizedSpreadDiag[1] * -1) * 100, All Living Players(All Teams), Event Player, False);
  • Event Player.buckshotHitPlayer[1] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Event Player.randomizedSpreadDiag[1]) * 100, 0, 0), Event Player, Rotation)
  • + Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player)
  • + Event Player.randomizedSpreadDiag[1] * -1) * 100, All Living Players(All Teams), Event Player, False);
  • End;
  • If(!Global.randomSpread);
  • Event Player.buckshotHitPos[2] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Global.spreadDiag * -1) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
  • Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadDiag) * 100,
  • All Living Players(All Teams), Event Player, False);
  • Event Player.buckshotHitPlayer[2] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Global.spreadDiag * -1) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
  • Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadDiag) * 100,
  • All Living Players(All Teams), Event Player, False);
  • Else;
  • Event Player.buckshotHitPos[2] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Event Player.randomizedSpreadDiag[2] * -1) * 100, 0, 0), Event Player, Rotation)
  • + Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player)
  • + Event Player.randomizedSpreadDiag[2]) * 100, All Living Players(All Teams), Event Player, False);
  • Event Player.buckshotHitPlayer[2] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Event Player.randomizedSpreadDiag[2] * -1) * 100, 0, 0), Event Player, Rotation)
  • + Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player)
  • + Event Player.randomizedSpreadDiag[2]) * 100, All Living Players(All Teams), Event Player, False);
  • End;
  • If(!Global.randomSpread);
  • Event Player.buckshotHitPos[3] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Global.spreadDiag * -1) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
  • Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadDiag * -1) * 100,
  • All Living Players(All Teams), Event Player, False);
  • Event Player.buckshotHitPlayer[3] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Global.spreadDiag * -1) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
  • Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadDiag * -1) * 100,
  • All Living Players(All Teams), Event Player, False);
  • Else;
  • Event Player.buckshotHitPos[3] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Event Player.randomizedSpreadDiag[3] * -1) * 100, 0, 0), Event Player, Rotation)
  • + Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player)
  • + Event Player.randomizedSpreadDiag[3] * -1) * 100, All Living Players(All Teams), Event Player, False);
  • Event Player.buckshotHitPlayer[3] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Event Player.randomizedSpreadDiag[3] * -1) * 100, 0, 0), Event Player, Rotation)
  • + Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player)
  • + Event Player.randomizedSpreadDiag[3] * -1) * 100, All Living Players(All Teams), Event Player, False);
  • End;
  • If(!Global.randomSpread);
  • Event Player.buckshotHitPos[4] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(0) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(Horizontal Facing Angle Of(
  • Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadHori) * 100, All Living Players(All Teams), Event Player,
  • False);
  • Event Player.buckshotHitPlayer[4] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(0) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(Horizontal Facing Angle Of(
  • Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadHori) * 100, All Living Players(All Teams), Event Player,
  • False);
  • Else;
  • Event Player.buckshotHitPos[4] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(0) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(Horizontal Facing Angle Of(
  • Event Player), Vertical Facing Angle Of(Event Player) + Event Player.randomizedSpreadHori[0]) * 100, All Living Players(
  • All Teams), Event Player, False);
  • Event Player.buckshotHitPlayer[4] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(0) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(Horizontal Facing Angle Of(
  • Event Player), Vertical Facing Angle Of(Event Player) + Event Player.randomizedSpreadHori[0]) * 100, All Living Players(
  • All Teams), Event Player, False);
  • End;
  • If(!Global.randomSpread);
  • Event Player.buckshotHitPos[5] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(0) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(Horizontal Facing Angle Of(
  • Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadHori * -1) * 100, All Living Players(All Teams),
  • Event Player, False);
  • Event Player.buckshotHitPlayer[5] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(0) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(Horizontal Facing Angle Of(
  • Event Player), Vertical Facing Angle Of(Event Player) + Global.spreadHori * -1) * 100, All Living Players(All Teams),
  • Event Player, False);
  • Else;
  • Event Player.buckshotHitPos[5] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(0) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(Horizontal Facing Angle Of(
  • Event Player), Vertical Facing Angle Of(Event Player) + Event Player.randomizedSpreadHori[1] * -1) * 100, All Living Players(
  • All Teams), Event Player, False);
  • Event Player.buckshotHitPlayer[5] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(0) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(Horizontal Facing Angle Of(
  • Event Player), Vertical Facing Angle Of(Event Player) + Event Player.randomizedSpreadHori[1] * -1) * 100, All Living Players(
  • All Teams), Event Player, False);
  • End;
  • If(!Global.randomSpread);
  • Event Player.buckshotHitPos[6] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Global.spreadHori) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
  • Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + 0) * 100, All Living Players(All Teams),
  • Event Player, False);
  • Event Player.buckshotHitPlayer[6] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Global.spreadHori) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
  • Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + 0) * 100, All Living Players(All Teams),
  • Event Player, False);
  • Else;
  • Event Player.buckshotHitPos[6] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Event Player.randomizedSpreadHori[2]) * 100, 0, 0), Event Player, Rotation)
  • + Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + 0) * 100,
  • All Living Players(All Teams), Event Player, False);
  • Event Player.buckshotHitPlayer[6] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Event Player.randomizedSpreadHori[2]) * 100, 0, 0), Event Player, Rotation)
  • + Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + 0) * 100,
  • All Living Players(All Teams), Event Player, False);
  • End;
  • If(!Global.randomSpread);
  • Event Player.buckshotHitPos[7] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Global.spreadHori * -1) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
  • Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + 0) * 100, All Living Players(All Teams),
  • Event Player, False);
  • Event Player.buckshotHitPlayer[7] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Global.spreadHori * -1) * 100, 0, 0), Event Player, Rotation) + Direction From Angles(
  • Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + 0) * 100, All Living Players(All Teams),
  • Event Player, False);
  • Else;
  • Event Player.buckshotHitPos[7] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Event Player.randomizedSpreadHori[3] * -1) * 100, 0, 0), Event Player, Rotation)
  • + Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + 0) * 100,
  • All Living Players(All Teams), Event Player, False);
  • Event Player.buckshotHitPlayer[7] = Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + World Vector Of(
  • Vector(Tangent From Degrees(Event Player.randomizedSpreadHori[3] * -1) * 100, 0, 0), Event Player, Rotation)
  • + Direction From Angles(Horizontal Facing Angle Of(Event Player), Vertical Facing Angle Of(Event Player) + 0) * 100,
  • All Living Players(All Teams), Event Player, False);
  • End;
  • Event Player.buckshotCenter = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(
  • Event Player) * 100, Event Player.livingEnemies, Event Player, True);
  • Play Effect(All Players(All Teams), Good Explosion, Green, Event Player.buckshotCenter, 0.200);
  • Create Beam Effect(All Players(All Teams), Bad Beam, Eye Position(Event Player) + Facing Direction Of(Event Player)
  • + Event Player.gunPos_0, Event Player.buckshotCenter, Green, None);
  • Event Player.centerBeam = Last Created Entity;
  • Event Player.pellets = 0;
  • While(Event Player.pellets < 8);
  • Damage(Event Player.buckshotHitPlayer[Event Player.pellets], Event Player, 10000);
  • Play Effect(All Players(All Teams), Good Explosion, Green, Event Player.buckshotHitPos[Event Player.pellets], 0.200);
  • Create Beam Effect(All Players(All Teams), Bad Beam, Eye Position(Event Player) + Facing Direction Of(Event Player)
  • + Event Player.gunPos_0, Event Player.buckshotHitPos[Event Player.pellets], Green, None);
  • Event Player.buckshotBeam[Event Player.pellets] = Last Created Entity;
  • Event Player.pellets += 1;
  • End;
  • Wait(0.150, Ignore Condition);
  • Destroy Effect(Event Player.centerBeam);
  • Event Player.beams = 0;
  • While(Event Player.beams < 8);
  • Destroy Effect(Event Player.buckshotBeam[Event Player.beams]);
  • Event Player.beams += 1;
  • End;
  • }
  • }
  • rule("[Buff] :: Buckshot : Remove")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (!Global.spawnWithBuckshot && Event Player.buckshotDur == 0) == True;
  • }
  • actions
  • {
  • Destroy HUD Text(Event Player.hudText[2]);
  • Destroy Effect(Event Player.buckshotBuffEffect);
  • Event Player.buckshotEnabled = False;
  • Call Subroutine(BuckshotCooldown);
  • }
  • }
  • disabled rule("---------------- extra life ----------------")
  • disabled rule("---------------- Extra Life ----------------")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("[Buff] :: Extra Life : Create Orb")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • (Global.validBuffMap && !Global.spawnWithLife && Global.spawnLife && Global.lifeCD == 0 && (
  • Global.matchStarted || Global.buffsSpawnImmediately)) == True;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Good Pickup Effect, Sky Blue, Global.buffPos[3], 1);
  • Create Effect(All Players(All Teams), Orb, Sky Blue, Global.buffPos[3], 2, Visible To Position and Radius);
  • Global.buffEffect[3] = Last Created Entity;
  • Play Effect(All Players(All Teams), Good Pickup Effect, Sky Blue, Global.buffPos[3], 1);
  • Create In-World Text(All Players(All Teams), Ability Icon String(Hero(Mercy), Button(Ability 2)), Global.buffPos[3], 2,
  • Clip Against Surfaces, Visible To Position and String, White, Default Visibility);
  • Global.buffIcon[3] = Last Text ID;
  • Destroy In-World Text(Global.cdText[3]);
  • }
  • }
  • rule("[Buff] :: Extra Life : Collect")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • ((Global.matchStarted && !Event Player.extraLife && Entity Exists(Global.buffEffect[3]) && Distance Between(Global.buffPos[3],
  • Event Player) < 2.500 && Has Spawned(Event Player) && Is Alive(Event Player)) || (Global.spawnWithLife && Is Alive(
  • Event Player))) == True;
  • }
  • actions
  • {
  • Event Player.extraLife = True;
  • Set Status(Event Player, Null, Unkillable, 10000);
  • If(!Global.spawnWithLife);
  • Destroy In-World Text(Global.cdText[3]);
  • Destroy In-World Text(Global.buffIcon[3]);
  • Destroy Effect(Global.buffEffect[3]);
  • Play Effect(All Players(All Teams), Good Pickup Effect, Sky Blue, Global.buffPos[3], 1);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, Sky Blue, Global.buffPos[3], 200);
  • Small Message(Event Player, Custom String("Extra life"));
  • Big Message(Event Player, Custom String("Extra Life"));
  • Call Subroutine(LifeCooldown);
  • End;
  • Create HUD Text(Event Player, Null, Null, Custom String("{0} Extra Life {0}", Ability Icon String(Hero(Mercy), Button(Ability 2))),
  • Top, 1, White, White, White, Visible To and String, Default Visibility);
  • Event Player.hudText[3] = Last Text ID;
  • Create In-World Text(All Players(All Teams), Ability Icon String(Hero(Mercy), Button(Ability 2)), Event Player, 1,
  • Clip Against Surfaces, Visible To Position and String, White, Default Visibility);
  • Event Player.extraLifeIcon = Last Text ID;
  • }
  • }
  • rule("[Buff] :: Extra Life : Remove")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Event Player.extraLife && (Health(Event Player) == 1 || (Is Dead(Event Player) && !Global.spawnWithLife))) == True;
  • }
  • actions
  • {
  • Event Player.extraLife = False;
  • Clear Status(Event Player, Unkillable);
  • Small Message(Event Player, Custom String("Extra life used"));
  • Play Effect(Event Player, Debuff Impact Sound, White, Event Player, 200);
  • Destroy In-World Text(Event Player.extraLifeIcon);
  • Destroy HUD Text(Event Player.hudText[3]);
  • Wait(0.500, Ignore Condition);
  • Set Player Health(Event Player, Max Health(Event Player));
  • }
  • }
  • rule("[Debug] :: Position")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player == Host Player;
  • }
  • actions
  • {
  • Create HUD Text(Event Player, Null, Null, Position Of(Event Player), Top, 10, White, White, White, Visible To and String,
  • Default Visibility);
  • }
  • }
  • rule("[Debug] :: Bots")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Event Player == Host Player && Is Button Held(Event Player, Interact) && !Is Button Held(Event Player, Crouch)) == True;
  • }
  • actions
  • {
  • Create Dummy Bot(Hero Of(Event Player), Opposite Team Of(Team Of(Event Player)), -1, Ray Cast Hit Position(Eye Position(
  • Event Player), Eye Position(Event Player) + Facing Direction Of(Event Player) * 100, Null, Event Player, True),
  • Facing Direction Of(Event Player) * -1);
  • }
  • }
  • rule("[Debug] :: Destroy Bots")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Event Player == Host Player && Is Button Held(Event Player, Crouch) && Is Button Held(Event Player, Interact)) == True;
  • }
  • actions
  • {
  • Destroy All Dummy Bots;
  • }
  • }
Join the Workshop.codes Discord