Create
Return to post

Comparing difference between and

View raw
  • settings
  • {
  • main
  • {
  • Description: "24 Hogs One Hole. Workshop Maps only; includes settings for dynamic hole size and position. By Puppetsquid. Based on 12 Pigs One Hole by Scrumrot and Block#12425. Code: K6KFM"
  • Description: "24 Hogs One Hole. By Puppetsquid. Based on 12 Pigs One Hole by Scrumrot and Block#12425. Code: K6KFM"
  • }
  • lobby
  • {
  • Allow Players Who Are In Queue: Yes
  • Match Voice Chat: Enabled
  • Max Spectators: 12
  • Max Spectators: 1
  • Return To Lobby: Never
  • }
  • modes
  • {
  • Deathmatch
  • {
  • enabled maps
  • {
  • Workshop Island
  • Workshop Island Night
  • }
  • }
  • General
  • {
  • Allow Hero Switching: Off
  • Game Mode Start: Immediately
  • Hero Limit: Off
  • Respawn As Random Hero: On
  • Respawn Time Scalar: 1%
  • Score To Win: 100
  • Self Initiated Respawn: Off
  • Skins: Off
  • Spawn Health Packs: Disabled
  • }
  • }
  • heroes
  • {
  • General
  • {
  • Roadhog
  • {
  • Chain Hook Cooldown Time: 25%
  • Healing Dealt: 10%
  • Jump Vertical Speed: 200%
  • Movement Gravity: 130%
  • Movement Speed: 140%
  • Primary Fire: Off
  • Secondary Fire: Off
  • Take a Breather Cooldown Time: 50%
  • Ultimate Generation - Combat Whole Hog: 0%
  • Ultimate Generation - Passive Whole Hog: 0%
  • Ultimate Generation Whole Hog: 50%
  • Whole Hog Knockback Scalar: 0%
  • }
  • enabled heroes
  • {
  • Roadhog
  • }
  • }
  • }
  • workshop
  • {
  • Auto Restart After POTG: On
  • }
  • extensions
  • {
  • Kinetic Explosion Effects
  • Buff Status Effects
  • Play More Effects
  • Spawn More Dummy Bots
  • }
  • }
  • variables
  • {
  • global:
  • 0: init
  • 1: tinyModeUnused
  • 2: PigStrings
  • 6: fakeHoleWidth
  • 7: fakeHolePos
  • 8: It
  • 9: holeTargetLoc
  • 10: speed
  • 11: holeTargetWidth
  • 12: customSpawnpoints
  • 13: customNames
  • 14: minHoleWidth
  • 15: maxHoleWidth
  • 16: holeInit
  • 17: maxAI
  • 25: QuickRestart
  • 30: CloudSize
  • 31: MaxKillStealChainTimer
  • 34: CurrentUltSize
  • 37: TopPlayerScore
  • 38: TopPlayer
  • player:
  • 18: SafeEffects
  • 19: hasSpawned
  • 20: hasPigged
  • 21: hoggOffset
  • 22: hoogLR
  • 23: pigPos
  • 24: pigTarget
  • 25: hasdied
  • 26: InitPlayer
  • 29: ultReadyEffectId1
  • 30: ultReadyEffectId2
  • 31: HudIdAbility2
  • 32: HookCount
  • 33: KillStealChainTimer
  • 34: TextIdHookCount
  • 35: bonusAuraId1
  • 39: overLooking
  • 44: prepKillSteal
  • 45: triggerKillStealChain
  • 46: HUDPlayerKillBonusId
  • 47: KeepSummerSafe
  • 52: MeleeHudId
  • }
  • rule("Define Hole and Spawns")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.maxAI = Workshop Setting Integer(Custom String("Game Settings"), Custom String("Max AI"), 12, 0, 12, 0);
  • Wait(0.250, Ignore Condition);
  • Global.customSpawnpoints = Empty Array;
  • For Global Variable(It, 0, 1, 0.010);
  • Create Effect(All Players(All Teams), Ring, Color(Black), Global.fakeHolePos, (0.500 + Global.fakeHoleWidth) * Evaluate Once(
  • Global.It), Visible To Position and Radius);
  • Wait(0.016, Ignore Condition);
  • End;
  • Create Effect(All Players(All Teams), Light Shaft, Color(Black), Global.fakeHolePos + Vector(0, -10, 0),
  • Global.fakeHoleWidth + 0.500, Visible To Position and Radius);
  • For Global Variable(It, -14, 14, 4);
  • Modify Global Variable(customSpawnpoints, Append To Array, Vector(Global.It, 0, 18));
  • Modify Global Variable(customSpawnpoints, Append To Array, Vector(Global.It, 0, -18));
  • Modify Global Variable(customSpawnpoints, Append To Array, Vector(18, 0, Global.It));
  • Modify Global Variable(customSpawnpoints, Append To Array, Vector(-18, 0, Global.It));
  • End;
  • If(Global.maxAI > 0);
  • For Global Variable(It, 0, 12 + Global.maxAI, 1);
  • For Global Variable(It, 0, 11 + Global.maxAI, 1);
  • Create Dummy Bot(Hero(Roadhog), All Teams, -1, Last Of(Filtered Array(Global.customSpawnpoints, Distance Between(
  • Current Array Element, Closest Player To(Current Array Element, All Teams)))), Vector(0, 0, 0));
  • Wait(0.100, Ignore Condition);
  • End;
  • For Global Variable(It, 0, 12, 1);
  • Destroy Dummy Bot(All Teams, Global.It);
  • End;
  • End;
  • Global.init = True;
  • }
  • }
  • rule("CustomSpawning")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Count Of(Global.customSpawnpoints) > 20;
  • }
  • actions
  • {
  • Teleport(Event Player, Last Of(Filtered Array(Sorted Array(Global.customSpawnpoints, Distance Between(Current Array Element,
  • Closest Player To(Current Array Element, All Teams))), Distance Between(Current Array Element, Global.fakeHolePos)
  • > Global.fakeHoleWidth + 4)));
  • Wait Until(Is On Ground(Event Player), 99999);
  • While(Distance Between(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Vector(0, 1, 0))) > 1);
  • Set Facing(Event Player, Direction Towards(Event Player, Vector(0, 1, 0)), To World);
  • Wait(0.100, Ignore Condition);
  • End;
  • Event Player.hasSpawned = True;
  • }
  • }
  • rule("Player init")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.InitPlayer != True;
  • Global.init == True;
  • }
  • actions
  • {
  • Event Player.HookCount = 1;
  • Event Player.InitPlayer = True;
  • If(Global.tinyModeUnused);
  • Start Scaling Player(Event Player, 0.500, True);
  • End;
  • }
  • }
  • rule("Outlines")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • actions
  • {
  • Start Forcing Player Outlines(Filtered Array(All Players(All Teams), Is Dummy Bot(Current Array Element)), All Players(All Teams),
  • True, Color(Black), Default);
  • }
  • }
  • rule("Out of bounds")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) != True;
  • Is Using Ultimate(Event Player) != True;
  • Is On Ground(Event Player) == True;
  • (16 < Max(Absolute Value(X Component Of(Position Of(Event Player))), Absolute Value(Z Component Of(Position Of(Event Player)))))
  • == True;
  • }
  • actions
  • {
  • Wait(0.016, Ignore Condition);
  • Skip If(Event Player.hasdied, 1);
  • Set Status(Event Player, Null, Phased Out, 9999);
  • Set Ability 1 Enabled(Event Player, False);
  • Cancel Primary Action(Event Player);
  • Event Player.hasdied = True;
  • }
  • }
  • rule("In of bounds")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) != True;
  • (16 < Max(Absolute Value(X Component Of(Position Of(Event Player))), Absolute Value(Z Component Of(Position Of(Event Player)))))
  • == False;
  • Event Player.hasSpawned == True;
  • }
  • actions
  • {
  • Clear Status(Event Player, Phased Out);
  • Set Ability 1 Enabled(Event Player, True);
  • Event Player.hasPigged = True;
  • }
  • }
  • disabled rule("============== Custom Hole ==============")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Setup Hole")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.fakeHolePos = Vector(0, 0, 0);
  • Global.fakeHoleWidth = 0;
  • Global.holeTargetWidth = Workshop Setting Integer(Custom String("Game Settings"), Custom String("Default Hole Width"), 7, 3, 12,
  • 0);
  • If(Global.tinyModeUnused);
  • Global.holeTargetWidth = 3.500;
  • End;
  • Wait(5, Ignore Condition);
  • Global.holeTargetLoc = Vector(0, 0.200, 0);
  • Global.minHoleWidth = Workshop Setting Integer(Custom String("Dynamic Settings"), Custom String("Min Hole Width"), 3, 2, 5, 0);
  • Global.maxHoleWidth = Workshop Setting Integer(Custom String("Dynamic Settings"), Custom String("Max Hole Width"), 10, 5, 12, 0);
  • Global.holeInit = True;
  • }
  • }
  • rule("Change Hole Pos / Size Target")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.init == True;
  • Workshop Setting Toggle(Custom String("Game Settings"), Custom String("Dynamic Hole"), False, 0) == True;
  • }
  • actions
  • {
  • Wait(Random Real(1, 10), Ignore Condition);
  • Global.holeTargetLoc = Vector(Random Real(-10, 10), 0, Random Real(-10, 10));
  • Global.speed = Random Integer(0, 6) * 0.500;
  • Global.holeTargetWidth = (Random Integer(Global.minHoleWidth, Global.maxHoleWidth) + Random Integer(Global.minHoleWidth,
  • Global.maxHoleWidth)) * 0.500;
  • Loop;
  • }
  • }
  • rule("Hole Pos Over Time")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled Global.fakeHolePos != Global.holeTargetLoc;
  • Global.holeInit == True;
  • (Global.fakeHoleWidth != Global.holeTargetWidth || Global.fakeHolePos != Global.holeTargetLoc) == True;
  • }
  • actions
  • {
  • Global.fakeHolePos = Global.fakeHolePos + Direction Towards(Global.fakeHolePos, Global.holeTargetLoc) * 0.010;
  • Global.fakeHolePos = Global.fakeHolePos + Direction Towards(Global.fakeHolePos, Global.holeTargetLoc) * 0.005;
  • Global.fakeHoleWidth = Global.fakeHoleWidth + (Global.holeTargetWidth - Global.fakeHoleWidth) * 0.010;
  • Wait(0.020, Ignore Condition);
  • Wait(0.030, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Make Hole Unsolid")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Position Of(Event Player) * Vector(1, 0, 1), Global.fakeHolePos) < Global.fakeHoleWidth;
  • }
  • actions
  • {
  • Disable Movement Collision With Environment(Event Player, True);
  • }
  • }
  • rule("Make Floor Solid")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Position Of(Event Player) * Vector(1, 0, 1), Global.fakeHolePos) > Global.fakeHoleWidth;
  • Y Component Of(Position Of(Event Player)) > -0.500;
  • Distance Between(Position Of(Event Player) * Vector(1, 0, 1), Global.fakeHolePos) > Global.fakeHoleWidth;
  • }
  • actions
  • {
  • Enable Movement Collision With Environment(Event Player);
  • }
  • }
  • disabled rule("============== AI CODE ==============")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("AI Setup")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.pigTarget = Random Value In Array(Remove From Array(All Living Players(All Teams), Event Player));
  • }
  • }
  • rule("AI: Dir Input")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.pigPos = Vector(0, 0, 0);
  • Start Throttle In Direction(Event Player, Direction Towards(Event Player, Nearest Walkable Position(
  • Global.fakeHolePos + Direction From Angles(Horizontal Angle From Direction(Direction Towards(Global.fakeHolePos, Event Player))
  • + Event Player.hoogLR, 0) * Max(Global.fakeHoleWidth + 2, Event Player.hoggOffset))), 1, To World, Replace existing throttle,
  • Direction and Magnitude);
  • }
  • }
  • rule("AI: Set Random Directions")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.hoggOffset = Random Real(3, Global.fakeHoleWidth * 0.500 + 15);
  • Wait(Random Integer(0.500, 2), Ignore Condition);
  • Event Player.hoogLR = Random Integer(-5, 5);
  • Wait(Random Integer(1, 2.500), Ignore Condition);
  • Loop;
  • }
  • }
  • rule("AI: Do Hook")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Ability Cooldown(Event Player, Button(Ability 1)) == 0;
  • Distance Between(Event Player, Event Player.pigTarget) < 20;
  • Distance Between(Event Player, Global.fakeHolePos) < Global.fakeHoleWidth + 3;
  • disabled Distance Between(Event Player, Event Player.pigTarget) < 20;
  • disabled Distance Between(Event Player, Global.fakeHolePos) < Global.fakeHoleWidth + 3;
  • }
  • actions
  • {
  • Wait(Random Real(0.500, 2), Ignore Condition);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(Random Real(0.500, 2), Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("AI: Hook Flick")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Ability == Button(Ability 1);
  • }
  • actions
  • {
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Global.fakeHolePos), 150, To World,
  • Direction and Turn Rate);
  • }
  • }
  • rule("AI: Target On Cooldown")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is On Ground(Event Player) == True;
  • Ability Cooldown(Event Player, Button(Ability 1)) == 0;
  • Is Using Ability 1(Event Player) != True;
  • Is Using Ultimate(Event Player) != True;
  • disabled Ability Cooldown(Event Player, Button(Ability 1)) == 0;
  • Has Status(Event Player, Phased Out) != True;
  • }
  • actions
  • {
  • Wait(Random Real(0.100, 2), Ignore Condition);
  • Event Player.pigTarget = Random Value In Array(Remove From Array(All Living Players(All Teams), Event Player));
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.pigTarget)), 120, To World,
  • Direction and Turn Rate);
  • }
  • }
  • rule("AI: Target On Death")
  • disabled rule("AI: Target On Death")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Dead(Event Player.pigTarget) == True;
  • }
  • actions
  • {
  • Wait(Random Real(0.100, 2), Ignore Condition);
  • Event Player.pigTarget = Random Value In Array(Remove From Array(All Living Players(All Teams), Event Player));
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.pigTarget)), 120, To World,
  • Direction and Turn Rate);
  • }
  • }
  • rule("AI: Do Breather")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Wait Until(!Has Status(Event Player, Stunned), 2);
  • Abort If(Distance Between(Event Player, Global.fakeHolePos) > Global.fakeHoleWidth);
  • Wait(Random Real(0, 0.750), Ignore Condition);
  • Wait(Random Real(0.100, 0.750), Ignore Condition);
  • Press Button(Event Player, Button(Ability 2));
  • }
  • }
  • rule("AI: Do Ult")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Y Component Of(Position Of(Event Player)) < -5;
  • Ultimate Charge Percent(Event Player) == 100;
  • }
  • actions
  • {
  • Wait(Random Real(0, 3), Ignore Condition);
  • Press Button(Event Player, Button(Ultimate));
  • }
  • }
  • rule("AI: Do Jump")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Horizontal Speed Of(Event Player) < 1;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Jump));
  • }
  • }
  • rule("AI: Followup")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Using Ability 1(Event Player) != True;
  • }
  • actions
  • {
  • Wait(Random Real(0, 2), Ignore Condition);
  • If(Random Real(0, 5) == 5);
  • If(Random Real(0, 5) == 3);
  • Communicate(Event Player, Hello);
  • Else;
  • Press Button(Event Player, Button(Melee));
  • End;
  • }
  • }
  • rule("Setup Custom names")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.customNames = Array(Custom String("Jasper"), Custom String("Clara"), Custom String("Lawrence"), Custom String("Clarence"),
  • Custom String("Claude"), Custom String("Grace"), Custom String("Alice"), Custom String("Cora"), Custom String("Amos"),
  • Custom String("Lillian"), Custom String("Emil"), Custom String("Pearl"), Custom String("Julius"), Custom String("Rose"),
  • Custom String("Edwin"), Custom String("Ada"), Custom String("Herbert"), Custom String("Nettie"), Custom String("Oscar"),
  • Custom String("Flora"), Custom String("Walter"), Custom String("Puppetsquid"), Custom String("Scumrot"), Custom String(
  • "Block"));
  • Modify Global Variable(customNames, Append To Array, Array(Custom String("K6KFM"), Custom String("38SY3")));
  • }
  • }
  • rule("Grant Name to Dummy")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Start Forcing Dummy Bot Name(Event Player, Random Value In Array(Global.customNames));
  • Modify Global Variable(customNames, Remove From Array By Value, Custom String("{0}", Event Player));
  • }
  • }
  • disabled rule("12 Hooks 1 Hole: When Pigs Fly! by Block#12425 & Scrumrot.")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • disabled rule("============== Ultimate Rules ==============")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Using Ultimate @ Block#12425")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Is Using Ultimate(Event Player) == True;
  • Event Player.InitPlayer == True;
  • }
  • actions
  • {
  • Set Knockback Dealt(Event Player, 0);
  • Event Player.HookCount += 1;
  • Set Damage Dealt(Event Player, 0);
  • Apply Impulse(Event Player, Up, 13, To World, Cancel Contrary Motion);
  • Start Accelerating(Event Player, Up, 70, 10, To Player, Direction Rate and Max Speed);
  • Start Facing(Event Player, Vector(0, -1, 0), 400, To Player, Direction and Turn Rate);
  • Wait(0.600, Ignore Condition);
  • Set Status(Event Player, Null, Frozen, 0.100);
  • Stop Accelerating(Event Player);
  • Stop Facing(Event Player);
  • Set Damage Dealt(Event Player, 100);
  • Set Knockback Dealt(Event Player, 100);
  • Wait(1, Ignore Condition);
  • Event Player.KillStealChainTimer = Global.MaxKillStealChainTimer + 0;
  • Event Player.prepKillSteal = True;
  • Event Player.triggerKillStealChain = True;
  • }
  • }
  • rule("Stop on Stun Ultimate @ Scrumrot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Has Status(Event Player, Stunned) == True;
  • }
  • actions
  • {
  • Wait(0.100, Ignore Condition);
  • Stop Accelerating(Event Player);
  • Stop Facing(Event Player);
  • Set Damage Dealt(Event Player, 100);
  • }
  • }
  • rule("Set Ultimate Charge to 100% on Kill @ Block#12425")
  • {
  • event
  • {
  • Player Dealt Final Blow;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Event Player.InitPlayer == True;
  • }
  • actions
  • {
  • Set Ultimate Charge(Event Player, 100);
  • }
  • }
  • disabled rule("============== Player In Game Effects ==============")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Show Ult Ready @ Scrumrot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Ultimate Charge Percent(Event Player) == 100;
  • Event Player.InitPlayer == True;
  • }
  • actions
  • {
  • Create Effect(All Players(All Teams), Good Aura, Color(Orange), Event Player, Global.CurrentUltSize - 0.100,
  • Visible To Position and Radius);
  • Event Player.ultReadyEffectId1 = Last Created Entity;
  • Create Effect(All Players(All Teams), Good Aura, Color(Red), Event Player, Global.CurrentUltSize, Visible To Position and Radius);
  • Event Player.ultReadyEffectId2 = Last Created Entity;
  • }
  • }
  • rule("Remove Ult Ready @ Scrumrot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Ultimate Charge Percent(Event Player) < 100;
  • Event Player.InitPlayer == True;
  • }
  • actions
  • {
  • Destroy Effect(Event Player.ultReadyEffectId1);
  • Event Player.ultReadyEffectId1 = Null;
  • Destroy Effect(Event Player.ultReadyEffectId2);
  • Event Player.ultReadyEffectId2 = Null;
  • Event Player.prepKillSteal = True;
  • }
  • }
  • disabled rule("============== Gas Powered Stick Rules ==============")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Gas Powered Stick! @ Scrumrot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Is Using Ability 2(Event Player) == True;
  • Event Player.InitPlayer == True;
  • }
  • actions
  • {
  • Apply Impulse(Event Player, Up, 8.800, To World, Cancel Contrary Motion);
  • Play Effect(All Players(All Teams), Explosion Sound, Color(White), Event Player, 50);
  • Play Effect(All Players(All Teams), Bad Explosion, Color(Red), Position Of(Event Player) + Vector(0, 0.500, -0.100),
  • Global.CloudSize);
  • Wait(0.050, Ignore Condition);
  • Play Effect(All Players(All Teams), Good Explosion, Color(Orange), Position Of(Event Player) + Vector(0, 0.500, -0.100),
  • Global.CloudSize);
  • Wait(0.050, Ignore Condition);
  • Play Effect(All Players(All Teams), Bad Explosion, Color(Yellow), Position Of(Event Player) + Vector(0, 0.500, -0.100),
  • Global.CloudSize);
  • }
  • }
  • disabled rule("============== Kill Steal Rules ==============")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("If Player Took Damage && !prepKillSteal => prepKillSteal = true @ Scrumrot")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Event Player.InitPlayer == True;
  • Is Alive(Event Player) == True;
  • Event Player.prepKillSteal == False;
  • Is Using Ability 1(Attacker) == True;
  • Distance Between(Vector(X Component Of(Global.fakeHolePos), 0, Z Component Of(Global.fakeHolePos)), Vector(X Component Of(
  • Position Of(Event Player)), 0, Z Component Of(Position Of(Event Player)))) <= 20;
  • Is Using Ability 1(Attacker) == True;
  • }
  • actions
  • {
  • Event Player.prepKillSteal = True;
  • Heal(Event Player, Null, Event Damage);
  • }
  • }
  • rule("HookCount Timer @ Scrumrot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Event Player.KillStealChainTimer > 0;
  • Event Player.InitPlayer == True;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • Event Player.KillStealChainTimer = Max(Event Player.KillStealChainTimer - 1, 0);
  • Loop If Condition Is True;
  • }
  • }
  • rule("HookCount Icon @ Scrumrot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Event Player.HookCount > 1;
  • Event Player.InitPlayer == True;
  • }
  • actions
  • {
  • Destroy In-World Text(Event Player.TextIdHookCount);
  • Create In-World Text(All Players(All Teams), Custom String("{0}x{1}", Icon String(Skull), Event Player.HookCount), Position Of(
  • Event Player) + Vector(0, 2, 0), 1.750, Clip Against Surfaces, Visible To Position and String, Color(Green),
  • Default Visibility);
  • Event Player.TextIdHookCount = Last Text ID;
  • Create Effect(All Players(All Teams), Bad Aura, Color(Green), Event Player, Global.CurrentUltSize, Visible To Position and Radius);
  • Create Effect(Remove From Array(All Players(All Teams), Event Player), Bad Aura, Color(Green), Event Player, Global.CurrentUltSize,
  • Visible To Position and Radius);
  • Event Player.bonusAuraId1 = Last Created Entity;
  • }
  • }
  • rule("On KillStealChainTimer <= 1 : Destroy HookCount Icon @ Scrumrot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Event Player.KillStealChainTimer <= 1;
  • Event Player.InitPlayer == True;
  • }
  • actions
  • {
  • Wait(0.050, Abort When False);
  • Destroy In-World Text(Event Player.TextIdHookCount);
  • Event Player.TextIdHookCount = Null;
  • Destroy Effect(Event Player.bonusAuraId1);
  • Event Player.bonusAuraId1 = Null;
  • Event Player.HookCount = 1;
  • Event Player.triggerKillStealChain = False;
  • Event Player.prepKillSteal = False;
  • }
  • }
  • rule("If prepKillSteal == true && player is within TheWellPosition || using their ult: Reset KillStealChainTimer @ Scrumrot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Event Player.prepKillSteal == True;
  • Is On Ground(Event Player) != True;
  • (Distance Between(Vector(X Component Of(Global.fakeHolePos), 0, Z Component Of(Global.fakeHolePos)), Vector(X Component Of(
  • Position Of(Event Player)), 0, Z Component Of(Position Of(Event Player)))) <= Global.fakeHoleWidth || Is Using Ultimate(
  • Event Player)) == True;
  • }
  • actions
  • {
  • Skip If(Event Player.triggerKillStealChain == True, 1);
  • Wait(0.016, Ignore Condition);
  • Event Player.triggerKillStealChain = True;
  • Event Player.KillStealChainTimer = Global.MaxKillStealChainTimer;
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Add to Hook Count @ Scrumrot")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Event Player.InitPlayer == True;
  • Is Alive(Event Player) == True;
  • Event Player.triggerKillStealChain == True;
  • Is Using Ability 1(Attacker) == True;
  • }
  • actions
  • {
  • Wait(0.016, Ignore Condition);
  • Event Player.HookCount += 1;
  • Heal(Event Player, Null, Event Damage);
  • }
  • }
  • disabled rule("============== Top Score ==============")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Set Top Player @ Scrumrot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Score Of(Event Player) > Global.TopPlayerScore;
  • Score Of(Event Player) > 1;
  • Event Player.InitPlayer == True;
  • }
  • actions
  • {
  • Wait(0.100, Ignore Condition);
  • Global.TopPlayerScore = Score Of(Event Player);
  • Global.TopPlayer = Event Player;
  • }
  • }
  • disabled rule("============== Melee ==============")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • All;
  • }
  • }
  • rule("Make Melee push the Victim @ Block#12425 && Scrumrot")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Player Dealt Knockback;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Using Ability 1(Event Player) == False;
  • disabled Is Using Ability 1(Event Player) == False;
  • Event Ability == Button(Melee);
  • }
  • actions
  • {
  • Skip If(!Is Crouching(Event Player), 1);
  • Apply Impulse(Victim, Up, 6, To World, Cancel Contrary Motion);
  • Apply Impulse(Victim, Direction From Angles(Horizontal Facing Angle Of(Event Player), -1), 19, To World, Cancel Contrary Motion);
  • Skip If(Victim.triggerKillStealChain == False, 1);
  • Victim.HookCount += 1;
  • Heal(Victim, Null, Event Damage);
  • Heal(Victim, Null, 30);
  • }
  • }
  • disabled rule("============== Player Hud ==============")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("HUD: Ability 2 @ Scrumrot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Event Player.InitPlayer == True;
  • Event Player.HudIdAbility2 == False;
  • }
  • actions
  • {
  • Create HUD Text(Event Player, Custom String("{0} Gas Powered Stick! {1}", Icon String(Radioactive), Hero Icon String(Hero(
  • Roadhog))), Custom String("USE ~TAKE A BREATHER~ (ABILITY 2)", Icon String(Asterisk)), Custom String("AIR JUMP UP {0}",
  • Icon String(Arrow: Up)), Left, 0, Color(Orange), Color(Red), Color(Yellow), Visible To and String, Default Visibility);
  • Event Player.HudIdAbility2 = Last Text ID;
  • }
  • }
  • rule("HUD: Melee @ Scrumrot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Event Player.InitPlayer == True;
  • Event Player.MeleeHudId == False;
  • }
  • actions
  • {
  • Create HUD Text(Event Player, Custom String("{0} Shove {1}", Icon String(Happy), Hero Icon String(Hero(Roadhog))), Custom String(
  • "USE MELEE TO", Icon String(Asterisk)), Custom String("{0} KNOCKBACK TARGET", Icon String(Arrow: Right)), Left, 1, Color(
  • Orange), Color(Red), Color(Yellow), Visible To and String, Default Visibility);
  • Event Player.MeleeHudId = Last Text ID;
  • }
  • }
  • rule("HUD: Kill Bonus @ Scrumrot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Event Player.InitPlayer == True;
  • (Has Status(Event Player, Phased Out) && Event Player.overLooking) == False;
  • Event Player.HUDPlayerKillBonusId == False;
  • Event Player.KeepSummerSafe == False;
  • }
  • actions
  • {
  • Destroy HUD Text(Event Player.HUDPlayerKillBonusId);
  • Create HUD Text(Event Player, Custom String("{0} X {1}", Icon String(Skull), Event Player.HookCount), Null, Null, Top, 0, Color(
  • Green), Color(Green), Color(Green), Visible To and String, Default Visibility);
  • Event Player.HUDPlayerKillBonusId = Last Text ID;
  • }
  • }
  • rule("HUD: Remove Kill Bonus @ Scrumrot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Event Player.HUDPlayerKillBonusId == True;
  • Event Player.KeepSummerSafe == True;
  • }
  • actions
  • {
  • Destroy HUD Text(Event Player.HUDPlayerKillBonusId);
  • Event Player.HUDPlayerKillBonusId = Null;
  • }
  • }
  • disabled rule("============== On Death Rules ==============")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("OnDeath: Reset HookCount @ Scrumrot")
  • {
  • event
  • {
  • Player Died;
  • All;
  • Roadhog;
  • }
  • actions
  • {
  • Skip If(Attacker == Event Player, 3);
  • Skip If(Event Player.HookCount <= 1, 2);
  • Set Player Score(Attacker, Score Of(Attacker) + Max(Event Player.HookCount - 1, 0));
  • Big Message(Attacker, Custom String("{0} Kill Steal Bonus {1}! {0} ", Icon String(Skull), Event Player.HookCount));
  • Wait(0.050, Ignore Condition);
  • Event Player.HookCount = 0;
  • Event Player.KillStealChainTimer = 0;
  • Destroy In-World Text(Event Player.TextIdHookCount);
  • Event Player.TextIdHookCount = Null;
  • Event Player.prepKillSteal = False;
  • Event Player.prepKillSteal = False;
  • Play Effect(All Players(All Teams), Bad Pickup Effect, Color(Orange), Event Player, 8);
  • Wait(0.100, Ignore Condition);
  • Play Effect(All Players(All Teams), Good Explosion, Color(White), Event Player, 4);
  • Wait(0.016, Ignore Condition);
  • Play Effect(All Players(All Teams), Debuff Impact Sound, Color(Orange), Event Player, 40);
  • }
  • }
  • rule("OnDeath: Reset Saftey")
  • {
  • event
  • {
  • Player Died;
  • All;
  • All;
  • }
  • actions
  • {
  • Event Player.hasdied = False;
  • Event Player.hasSpawned = False;
  • Respawn(Event Player);
  • }
  • }
  • rule("Rule 100")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Match Complete == True;
  • }
  • actions
  • {
  • Wait(22, Ignore Condition);
  • Wait(3.500, Ignore Condition);
  • disabled Global.holeTargetLoc = Vector(0, 0, -8);
  • disabled Global.fakeHolePos = Vector(0, 0, -8);
  • Wait(20.500, Ignore Condition);
  • Restart Match;
  • }
  • }
  • rule("resetsettings")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.QuickRestart = Workshop Setting Toggle(Custom String("LOBBY SETTINGS"), Custom String("Auto Restart After POTG"), False, 0);
  • }
  • }
  • rule("Disable Inspector")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Disable Inspector Recording;
  • }
  • }
  • rule("Melee Primary")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • Has Status(Event Player, Phased Out) != True;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Melee));
  • }
  • }
  • rule("Melee Secondary (charged)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Secondary Fire)) == True;
  • Has Status(Event Player, Phased Out) != True;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Crouch));
  • Wait(0.500, Ignore Condition);
  • Wait Until(!Is Button Held(Event Player, Button(Secondary Fire)), 1.500);
  • Press Button(Event Player, Button(Melee));
  • Wait(0.250, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Crouch));
  • }
  • }
  • disabled rule("TWENTY FOUR PIGS")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Number Of Players(All Teams) == 24;
  • Is True For All(All Players(All Teams), Current Array Element.hasPigged) == True;
  • }
  • actions
  • {
  • Big Message(All Players(All Teams), Random Value In Array(Global.PigStrings));
  • Wait(15, Ignore Condition);
  • }
  • }
  • rule("strings")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.PigStrings = Array(Custom String("24 Hogs 1 Hole!"), Custom String("24 Hooks 1 Hole!"), Custom String("TWENTY FOUR HOGS"),
  • Custom String("{0} 24!", Hero(Roadhog)), Custom String("TWENTY FOUR HOOKS!"));
  • Modify Global Variable(PigStrings, Append To Array, Global.PigStrings);
  • Modify Global Variable(PigStrings, Append To Array, Global.PigStrings);
  • Modify Global Variable(PigStrings, Append To Array, Array(Custom String("WHOLE HOG!"), Custom String("FULL PEN!"), Custom String(
  • "{0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0} {0}", Hero Icon String(Hero(
  • Roadhog))), Custom String("{0} x24!", Hero Icon String(Hero(Roadhog)))));
  • Modify Global Variable(PigStrings, Append To Array, Array(Custom String("THE GANGS ALL HERE"), Custom String(
  • "Here pig pig pig..."), Custom String("MUCHAS PIGGOS"), Custom String("SOMETHING MAGIC JUST HAPPENED."), Custom String(
  • "OVERHOG!")));
  • }
  • }
  • rule("Show Saftey Pen")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) != True;
  • }
  • actions
  • {
  • Create Effect(Has Status(Event Player, Phased Out) ? All Players(All Teams) : Empty Array,
  • Baptiste Immortality Field Protected Effect, Color(White), Event Player, 1, Visible To Position and Radius);
  • Event Player.SafeEffects = Last Created Entity;
  • }
  • }
  • rule("Remove Saftey")
  • {
  • event
  • {
  • Player Left Match;
  • All;
  • All;
  • }
  • actions
  • {
  • Destroy Effect(Event Player.SafeEffects);
  • }
  • }
  • disabled rule("Rule 65")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Host Player == Event Player;
  • }
  • actions
  • {
  • Create HUD Text(Event Player, Server Load, Null, Null, Right, 0, Color(White), Color(White), Color(White), Visible To and String,
  • Default Visibility);
  • }
  • }
  • rule("Get in the pit")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Match Complete == True;
  • Is Dummy Bot(Event Player) == True;
  • Is On Ground(Event Player) == True;
  • }
  • actions
  • {
  • Wait(Random Real(0, 2), Ignore Condition);
  • Start Throttle In Direction(Event Player, Direction Towards(Event Player, Global.fakeHolePos), 1, To World,
  • Replace existing throttle, Direction and Magnitude);
  • Wait(Random Real(0, 2), Ignore Condition);
  • Press Button(Event Player, Button(Jump));
  • }
  • }
  • disabled rule("Save from void")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Event Player, Vector(0, 0, 0)) > 100;
  • }
  • actions
  • {
  • Kill(Event Player, Null);
  • }
  • }
  • disabled rule("Blind effects (ty Josbird!)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(Black),
  • Update Every Frame(True * Eye Position(Local Player) + -1.050 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + Empty Array * Direction From Angles(Horizontal Angle From Direction(
  • Facing Direction Of(Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90)
  • + 0.900 * Facing Direction Of(Local Player)), 0, Visible To Position and Radius);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(Black),
  • Update Every Frame(True * Eye Position(Local Player) + -1.050 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + -0.700 * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
  • Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90) + 0.900 * Facing Direction Of(
  • Local Player)), 0, Visible To Position and Radius);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(Black),
  • Update Every Frame(True * Eye Position(Local Player) + -1.050 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + 0.700 * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
  • Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90) + 0.900 * Facing Direction Of(
  • Local Player)), 0, Visible To Position and Radius);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(Black),
  • Update Every Frame(True * Eye Position(Local Player) + -0.350 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + Empty Array * Direction From Angles(Horizontal Angle From Direction(
  • Facing Direction Of(Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90)
  • + 0.900 * Facing Direction Of(Local Player)), 0, Visible To Position and Radius);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(Black),
  • Update Every Frame(True * Eye Position(Local Player) + -0.350 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + -0.700 * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
  • Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90) + 0.900 * Facing Direction Of(
  • Local Player)), 0, Visible To Position and Radius);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(Black),
  • Update Every Frame(True * Eye Position(Local Player) + -0.350 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + 0.700 * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
  • Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90) + 0.900 * Facing Direction Of(
  • Local Player)), 0, Visible To Position and Radius);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(Black),
  • Update Every Frame(True * Eye Position(Local Player) + 0.350 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + Empty Array * Direction From Angles(Horizontal Angle From Direction(
  • Facing Direction Of(Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90)
  • + 0.900 * Facing Direction Of(Local Player)), 0, Visible To Position and Radius);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(Black),
  • Update Every Frame(True * Eye Position(Local Player) + 0.350 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + -0.700 * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
  • Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90) + 0.900 * Facing Direction Of(
  • Local Player)), 0, Visible To Position and Radius);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(Black),
  • Update Every Frame(True * Eye Position(Local Player) + 0.350 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + 0.700 * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
  • Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90) + 0.900 * Facing Direction Of(
  • Local Player)), 0, Visible To Position and Radius);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(Black),
  • Update Every Frame(True * Eye Position(Local Player) + 1.050 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + Empty Array * Direction From Angles(Horizontal Angle From Direction(
  • Facing Direction Of(Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90)
  • + 0.900 * Facing Direction Of(Local Player)), 0, Visible To Position and Radius);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(Black),
  • Update Every Frame(True * Eye Position(Local Player) + 1.050 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + -0.700 * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
  • Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90) + 0.900 * Facing Direction Of(
  • Local Player)), 0, Visible To Position and Radius);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(Black),
  • Update Every Frame(True * Eye Position(Local Player) + 1.050 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + 0.700 * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
  • Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90) + 0.900 * Facing Direction Of(
  • Local Player)), 0, Visible To Position and Radius);
  • }
  • }
  • disabled rule("Blind effects (ty Josbird!)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Create Effect(Is Alive(Local Player) && 0.500 + Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(
  • Black), Update Every Frame(True * Eye Position(Local Player) + 1.050 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + 0.700 * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
  • Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90) + 0.900 * Facing Direction Of(
  • Local Player)), 0, Visible To Position and Radius);
  • Create Effect(Is Alive(Local Player) && 1 + Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(
  • Black), Update Every Frame(True * Eye Position(Local Player) + -1.050 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + Empty Array * Direction From Angles(Horizontal Angle From Direction(
  • Facing Direction Of(Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90)
  • + 0.900 * Facing Direction Of(Local Player)), 0, Visible To Position and Radius);
  • Create Effect(Is Alive(Local Player) && 1.500 + Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(
  • Black), Update Every Frame(True * Eye Position(Local Player) + -1.050 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + -0.700 * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
  • Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90) + 0.900 * Facing Direction Of(
  • Local Player)), 0, Visible To Position and Radius);
  • Create Effect(Is Alive(Local Player) && 2 + Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(
  • Black), Update Every Frame(True * Eye Position(Local Player) + -1.050 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + 0.700 * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
  • Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90) + 0.900 * Facing Direction Of(
  • Local Player)), 0, Visible To Position and Radius);
  • Create Effect(Is Alive(Local Player) && 2.500 + Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(
  • Black), Update Every Frame(True * Eye Position(Local Player) + -0.350 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + Empty Array * Direction From Angles(Horizontal Angle From Direction(
  • Facing Direction Of(Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90)
  • + 0.900 * Facing Direction Of(Local Player)), 0, Visible To Position and Radius);
  • Create Effect(Is Alive(Local Player) && 3 + Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(
  • Black), Update Every Frame(True * Eye Position(Local Player) + -0.350 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + -0.700 * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
  • Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90) + 0.900 * Facing Direction Of(
  • Local Player)), 0, Visible To Position and Radius);
  • Create Effect(Is Alive(Local Player) && 3.500 + Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(
  • Black), Update Every Frame(True * Eye Position(Local Player) + -0.350 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + 0.700 * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
  • Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90) + 0.900 * Facing Direction Of(
  • Local Player)), 0, Visible To Position and Radius);
  • Create Effect(Is Alive(Local Player) && 4 + Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(
  • Black), Update Every Frame(True * Eye Position(Local Player) + 0.350 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + Empty Array * Direction From Angles(Horizontal Angle From Direction(
  • Facing Direction Of(Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90)
  • + 0.900 * Facing Direction Of(Local Player)), 0, Visible To Position and Radius);
  • Create Effect(Is Alive(Local Player) && 4.500 + Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(
  • Black), Update Every Frame(True * Eye Position(Local Player) + 0.350 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + -0.700 * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
  • Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90) + 0.900 * Facing Direction Of(
  • Local Player)), 0, Visible To Position and Radius);
  • Create Effect(Is Alive(Local Player) && 5 + Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(
  • Black), Update Every Frame(True * Eye Position(Local Player) + 0.350 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + 0.700 * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
  • Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90) + 0.900 * Facing Direction Of(
  • Local Player)), 0, Visible To Position and Radius);
  • Create Effect(Is Alive(Local Player) && 5.500 + Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(
  • Black), Update Every Frame(True * Eye Position(Local Player) + 1.050 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + Empty Array * Direction From Angles(Horizontal Angle From Direction(
  • Facing Direction Of(Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90)
  • + 0.900 * Facing Direction Of(Local Player)), 0, Visible To Position and Radius);
  • Create Effect(Is Alive(Local Player) && 6 + Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Orb, Color(
  • Black), Update Every Frame(True * Eye Position(Local Player) + 1.050 * Cross Product(Facing Direction Of(Local Player),
  • Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Local Player)), Vertical Angle From Direction(
  • Facing Direction Of(Local Player)) - 90)) + -0.700 * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
  • Local Player)), Vertical Angle From Direction(Facing Direction Of(Local Player)) - 90) + 0.900 * Facing Direction Of(
  • Local Player)), 0, Visible To Position and Radius);
  • }
  • }
  • rule("Blind effects (ty Josbird!)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 20, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 19.500, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 19, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 18.500, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 18, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 17.500, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 17, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 16.500, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 16, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 20, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 20, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 20, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 20, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 20, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 20, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 20, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 20, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 20, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 20, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 20, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 20, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 20, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 20, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 20, Visible To Position and Radius);
  • Wait(0.111, Ignore Condition);
  • Create Effect(Is Alive(Local Player) && Y Component Of(Eye Position(Local Player)) < 0 ? Local Player : Null, Sphere, Color(Black),
  • Vector(0, -10, 0), 20, Visible To Position and Radius);
  • }
  • }
  • rule("Not Using Ultimate (Stuck fix)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Roadhog;
  • }
  • conditions
  • {
  • Is Using Ultimate(Event Player) != True;
  • Event Player.InitPlayer == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Stop Accelerating(Event Player);
  • Stop Facing(Event Player);
  • Set Damage Dealt(Event Player, 100);
  • Set Knockback Dealt(Event Player, 100);
  • }
  • }
Join the Workshop.codes Discord