Last active
February 28, 2020 21:54
-
-
Save dreness/9f4c4939f2038478b4ee97796e85c0e5 to your computer and use it in GitHub Desktop.
#overwatch workshop code: trails occasionally buggy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!define maxEffects N | |
#!define spawnEffects A | |
#!define effectDelay D | |
#!define effectScale S | |
#!define lastPosition Q | |
#!define editMode M | |
#!define editMutex J | |
#!define trails E | |
@Rule "fast setup" | |
@Event global | |
if isInSetup(): | |
setMatchTime(5) | |
@Rule "init" | |
@Event eachPlayer | |
if eventPlayer.hasSpawned(): | |
eventPlayer.spawnEffects = true | |
eventPlayer.maxEffects = 15 | |
eventPlayer.effectDelay = 0.20 | |
eventPlayer.effectScale = 30.00 | |
eventPlayer.lastPosition = eventPlayer.getPosition() | |
eventPlayer.editMode = 0 | |
eventPlayer.editMutex = 0 | |
@Rule "init hud: speed, (x,y,z), Trails enabled, max effects, throttle" | |
@Event eachPlayer | |
if eventPlayer.hasSpawned(): | |
hudSubtext(eventPlayer, eventPlayer.getVelocity(), Position.LEFT, 0, Color.WHITE, HudReeval.VISIBILITY_AND_STRING) | |
hudSubtext(eventPlayer, "Time: {}".format(eventPlayer.effectDelay), Position.LEFT, 1, Color.WHITE, HudReeval.VISIBILITY_AND_STRING) | |
hudSubtext(eventPlayer, "Height: {}".format(eventPlayer.effectScale), Position.LEFT, 2, Color.WHITE, HudReeval.VISIBILITY_AND_STRING) | |
hudSubtext(eventPlayer, "Max: {}".format(eventPlayer.maxEffects), Position.LEFT, 3, Color.WHITE, HudReeval.VISIBILITY_AND_STRING) | |
hudSubtext(eventPlayer, "Started: {}: Selected: {}".format(eventPlayer.editMutex, eventPlayer.editMode), Position.LEFT, 4, Color.WHITE, HudReeval.VISIBILITY_AND_STRING) | |
@Rule "trails" | |
@Event eachPlayer | |
if eventPlayer.isAlive() and eventPlayer.getSpeed() > 2 and eventPlayer.A == 1: | |
do: | |
eventPlayer.P = eventPlayer.getPosition() | |
eventPlayer.F.append(eventPlayer.getSpeed() / eventPlayer.S) | |
createEffect(getAllPlayers(), Effect.SPHERE, Color.AQUA, eventPlayer.P, eventPlayer.F[-1], Invis.NONE) | |
eventPlayer.E.append(getLastCreatedEntity()) | |
wait(eventPlayer.D) | |
while RULE_CONDITION | |
@Rule "clear trails" | |
@Event eachPlayer | |
if eventPlayer.A == 1: | |
do: | |
if len(eventPlayer.E) <= eventPlayer.N: | |
goto lbl_0 | |
destroyEffect(eventPlayer.E[0]) | |
del eventPlayer.E[0] | |
del eventPlayer.F[0] | |
lbl_0: | |
wait(eventPlayer.D) | |
while RULE_CONDITION | |
@Rule "toggle trails" | |
@Event eachPlayer | |
if eventPlayer.isCommunicating(Comms.HELLO): | |
if not eventPlayer.A: | |
goto lbl_0 | |
eventPlayer.A = false | |
return | |
lbl_0: | |
eventPlayer.A = true | |
@Rule "respawn" | |
@Event eachPlayer | |
if eventPlayer.isCommunicating(Comms.VOICE_LINE_UP) and not eventPlayer.isInSpawnRoom(): | |
eventPlayer.respawn() | |
@Rule "TP to nearest ally" | |
@Event eachPlayer | |
@Team 1 | |
if eventPlayer.isCommunicating(Comms.VOICE_LINE_LEFT): | |
eventPlayer.teleport(eventPlayer.getPlayerClosestToReticle(Color.TEAM_1)) | |
@Rule "clear all effects" | |
@Event eachPlayer | |
if eventPlayer.isHoldingButton(Button.PRIMARY_FIRE) and eventPlayer.isHoldingButton(Button.SECONDARY_FIRE): | |
destroyAllEffects() | |
eventPlayer.trails = [] | |
eventPlayer.F = [] | |
@Rule "Adjust delay" | |
@Event eachPlayer | |
if eventPlayer.editMode == 1 and eventPlayer.editMutex != 0: | |
do: | |
eventPlayer.effectDelay = abs(eventPlayer.getVerticalFacingAngle() / 10) | |
wait(0.1) | |
while RULE_CONDITION | |
@Rule "Adjust scale" | |
@Event eachPlayer | |
if eventPlayer.editMode == 2 and eventPlayer.editMutex != 0: | |
do: | |
eventPlayer.effectScale = abs(eventPlayer.getVerticalFacingAngle() / 2) | |
wait(0.1) | |
while RULE_CONDITION | |
@Rule "Adjust effect count" | |
@Event eachPlayer | |
if eventPlayer.editMode == 3 and eventPlayer.editMutex != 0: | |
do: | |
eventPlayer.maxEffects = ceil(abs(eventPlayer.getVerticalFacingAngle() * 2)) | |
wait(0.1) | |
while RULE_CONDITION | |
@Rule "toggle edit mode" | |
@Event eachPlayer | |
if eventPlayer.isHoldingButton(Button.INTERACT) and eventPlayer.isHoldingButton(Button.CROUCH): | |
if eventPlayer.editMutex != 0: | |
goto lbl_0 | |
eventPlayer.editMutex = 1 | |
return | |
lbl_0: | |
eventPlayer.editMutex = 0 | |
eventPlayer.editMode = 0 | |
@Rule "select edit mode" | |
@Event eachPlayer | |
if eventPlayer.editMutex != 0: | |
if eventPlayer.getThrottle().x > 0: | |
eventPlayer.editMode = 1 | |
return | |
if eventPlayer.getThrottle().x < 0: | |
eventPlayer.editMode = 2 | |
return | |
if eventPlayer.getThrottle().z > 0: | |
eventPlayer.editMode = 3 | |
return | |
# if eventPlayer.getThrottle().z < 0: | |
# eventPlayer.editMode = 4 | |
# return | |
"""@Rule "chase" | |
@Event eachPlayer | |
if eventPlayer.A: | |
eventPlayer.Q = eventPlayer.getPosition() | |
chase(eventPlayer.Q, eventPlayer.getEyePosition(), rate=distance(eventPlayer, eventPlayer.Q) / 4, ChaseReeval.DESTINATION_AND_RATE) | |
chase(eventPlayer.V, distance(eventPlayer.getPosition(), eventPlayer.Q), rate=distance(eventPlayer.getPosition(), eventPlayer.Q), ChaseReeval.DESTINATION_AND_RATE) | |
createEffect(eventPlayer, Effect.SPHERE, Color.PURPLE, eventPlayer.Q, 1, EffectReeval.VISIBILITY_POSITION_AND_RADIUS) | |
eventPlayer.X = getLastCreatedEntity() | |
""" | |
Author
dreness
commented
May 25, 2019
Compiled to native Workshop code:
variables {
global:
0: _unused_var_0
1: _unused_var_1
2: _unused_var_2
3: _unused_var_3
4: _unused_var_4
5: _unused_var_5
6: _unused_var_6
7: _unused_var_7
8: _unused_var_8
9: _unused_var_9
10: _unused_var_10
11: _unused_var_11
12: _unused_var_12
13: _unused_var_13
14: _unused_var_14
15: _unused_var_15
16: _unused_var_16
17: _unused_var_17
18: _unused_var_18
19: _unused_var_19
20: _unused_var_20
21: _unused_var_21
22: _unused_var_22
23: _unused_var_23
24: _unused_var_24
25: _unused_var_25
26: _unused_var_26
27: _unused_var_27
28: _unused_var_28
29: _unused_var_29
30: _unused_var_30
31: _unused_var_31
32: _unused_var_32
33: _unused_var_33
34: _unused_var_34
35: _unused_var_35
36: _unused_var_36
37: _unused_var_37
38: _unused_var_38
39: _unused_var_39
40: _unused_var_40
41: _unused_var_41
42: _unused_var_42
43: _unused_var_43
44: _unused_var_44
45: _unused_var_45
46: _unused_var_46
47: _unused_var_47
48: _unused_var_48
49: _unused_var_49
50: _unused_var_50
51: _unused_var_51
52: _unused_var_52
53: _unused_var_53
54: _unused_var_54
55: _unused_var_55
56: _unused_var_56
57: _unused_var_57
58: _unused_var_58
59: _unused_var_59
60: _unused_var_60
61: _unused_var_61
62: _unused_var_62
63: _unused_var_63
64: _unused_var_64
65: _unused_var_65
66: _unused_var_66
67: _unused_var_67
68: _unused_var_68
69: _unused_var_69
70: _unused_var_70
71: _unused_var_71
72: _unused_var_72
73: _unused_var_73
74: _unused_var_74
75: _unused_var_75
76: _unused_var_76
77: _unused_var_77
78: _unused_var_78
79: _unused_var_79
80: _unused_var_80
81: _unused_var_81
82: _unused_var_82
83: _unused_var_83
84: _unused_var_84
85: _unused_var_85
86: _unused_var_86
87: _unused_var_87
88: _unused_var_88
89: _unused_var_89
90: _unused_var_90
91: _unused_var_91
92: _unused_var_92
93: _unused_var_93
94: _unused_var_94
95: _unused_var_95
96: _unused_var_96
97: _unused_var_97
98: _unused_var_98
99: _unused_var_99
100: _unused_var_100
101: _unused_var_101
102: _unused_var_102
103: _unused_var_103
104: _unused_var_104
105: _unused_var_105
106: _unused_var_106
107: _unused_var_107
108: _unused_var_108
109: _unused_var_109
110: _unused_var_110
111: _unused_var_111
112: _unused_var_112
113: _unused_var_113
114: _unused_var_114
115: _unused_var_115
116: _unused_var_116
117: _unused_var_117
118: _unused_var_118
119: _unused_var_119
120: _unused_var_120
121: _unused_var_121
122: _unused_var_122
123: _unused_var_123
124: _unused_var_124
125: _unused_var_125
126: _unused_var_126
127: _unused_var_127
player:
0: A
1: _unused_var_1
2: _unused_var_2
3: D
4: E
5: F
6: _unused_var_6
7: _unused_var_7
8: _unused_var_8
9: J
10: _unused_var_10
11: _unused_var_11
12: M
13: N
14: _unused_var_14
15: P
16: Q
17: _unused_var_17
18: S
19: _unused_var_19
20: _unused_var_20
21: _unused_var_21
22: _unused_var_22
23: _unused_var_23
24: _unused_var_24
25: _unused_var_25
26: _unused_var_26
27: _unused_var_27
28: _unused_var_28
29: _unused_var_29
30: _unused_var_30
31: _unused_var_31
32: _unused_var_32
33: _unused_var_33
34: _unused_var_34
35: _unused_var_35
36: _unused_var_36
37: _unused_var_37
38: _unused_var_38
39: _unused_var_39
40: _unused_var_40
41: _unused_var_41
42: _unused_var_42
43: _unused_var_43
44: _unused_var_44
45: _unused_var_45
46: _unused_var_46
47: _unused_var_47
48: _unused_var_48
49: _unused_var_49
50: _unused_var_50
51: _unused_var_51
52: _unused_var_52
53: _unused_var_53
54: _unused_var_54
55: _unused_var_55
56: _unused_var_56
57: _unused_var_57
58: _unused_var_58
59: _unused_var_59
60: _unused_var_60
61: _unused_var_61
62: _unused_var_62
63: _unused_var_63
64: _unused_var_64
65: _unused_var_65
66: _unused_var_66
67: _unused_var_67
68: _unused_var_68
69: _unused_var_69
70: _unused_var_70
71: _unused_var_71
72: _unused_var_72
73: _unused_var_73
74: _unused_var_74
75: _unused_var_75
76: _unused_var_76
77: _unused_var_77
78: _unused_var_78
79: _unused_var_79
80: _unused_var_80
81: _unused_var_81
82: _unused_var_82
83: _unused_var_83
84: _unused_var_84
85: _unused_var_85
86: _unused_var_86
87: _unused_var_87
88: _unused_var_88
89: _unused_var_89
90: _unused_var_90
91: _unused_var_91
92: _unused_var_92
93: _unused_var_93
94: _unused_var_94
95: _unused_var_95
96: _unused_var_96
97: _unused_var_97
98: _unused_var_98
99: _unused_var_99
100: _unused_var_100
101: _unused_var_101
102: _unused_var_102
103: _unused_var_103
104: _unused_var_104
105: _unused_var_105
106: _unused_var_106
107: _unused_var_107
108: _unused_var_108
109: _unused_var_109
110: _unused_var_110
111: _unused_var_111
112: _unused_var_112
113: _unused_var_113
114: _unused_var_114
115: _unused_var_115
116: _unused_var_116
117: _unused_var_117
118: _unused_var_118
119: _unused_var_119
120: _unused_var_120
121: _unused_var_121
122: _unused_var_122
123: _unused_var_123
124: _unused_var_124
125: _unused_var_125
126: _unused_var_126
127: _unused_var_127
}
subroutines {
0: _unused_sub_0
1: _unused_sub_1
2: _unused_sub_2
3: _unused_sub_3
4: _unused_sub_4
5: _unused_sub_5
6: _unused_sub_6
7: _unused_sub_7
8: _unused_sub_8
9: _unused_sub_9
10: _unused_sub_10
11: _unused_sub_11
12: _unused_sub_12
13: _unused_sub_13
14: _unused_sub_14
15: _unused_sub_15
16: _unused_sub_16
17: _unused_sub_17
18: _unused_sub_18
19: _unused_sub_19
20: _unused_sub_20
21: _unused_sub_21
22: _unused_sub_22
23: _unused_sub_23
24: _unused_sub_24
25: _unused_sub_25
26: _unused_sub_26
27: _unused_sub_27
28: _unused_sub_28
29: _unused_sub_29
30: _unused_sub_30
31: _unused_sub_31
32: _unused_sub_32
33: _unused_sub_33
34: _unused_sub_34
35: _unused_sub_35
36: _unused_sub_36
37: _unused_sub_37
38: _unused_sub_38
39: _unused_sub_39
40: _unused_sub_40
41: _unused_sub_41
42: _unused_sub_42
43: _unused_sub_43
44: _unused_sub_44
45: _unused_sub_45
46: _unused_sub_46
47: _unused_sub_47
48: _unused_sub_48
49: _unused_sub_49
50: _unused_sub_50
51: _unused_sub_51
52: _unused_sub_52
53: _unused_sub_53
54: _unused_sub_54
55: _unused_sub_55
56: _unused_sub_56
57: _unused_sub_57
58: _unused_sub_58
59: _unused_sub_59
60: _unused_sub_60
61: _unused_sub_61
62: _unused_sub_62
63: _unused_sub_63
64: _unused_sub_64
65: _unused_sub_65
66: _unused_sub_66
67: _unused_sub_67
68: _unused_sub_68
69: _unused_sub_69
70: _unused_sub_70
71: _unused_sub_71
72: _unused_sub_72
73: _unused_sub_73
74: _unused_sub_74
75: _unused_sub_75
76: _unused_sub_76
77: _unused_sub_77
78: _unused_sub_78
79: _unused_sub_79
80: _unused_sub_80
81: _unused_sub_81
82: _unused_sub_82
83: _unused_sub_83
84: _unused_sub_84
85: _unused_sub_85
86: _unused_sub_86
87: _unused_sub_87
88: _unused_sub_88
89: _unused_sub_89
90: _unused_sub_90
91: _unused_sub_91
92: _unused_sub_92
93: _unused_sub_93
94: _unused_sub_94
95: _unused_sub_95
96: _unused_sub_96
97: _unused_sub_97
98: _unused_sub_98
99: _unused_sub_99
100: _unused_sub_100
101: _unused_sub_101
102: _unused_sub_102
103: _unused_sub_103
104: _unused_sub_104
105: _unused_sub_105
106: _unused_sub_106
107: _unused_sub_107
108: _unused_sub_108
109: _unused_sub_109
110: _unused_sub_110
111: _unused_sub_111
112: _unused_sub_112
113: _unused_sub_113
114: _unused_sub_114
115: _unused_sub_115
116: _unused_sub_116
117: _unused_sub_117
118: _unused_sub_118
119: _unused_sub_119
120: _unused_sub_120
121: _unused_sub_121
122: _unused_sub_122
123: _unused_sub_123
124: _unused_sub_124
125: _unused_sub_125
126: _unused_sub_126
127: _unused_sub_127
}
rule ("fast setup") {
event {
Ongoing - Global;
}
conditions {
Is In Setup == True;
}
actions {
Set Match Time(5);
}
}
rule ("init") {
event {
Ongoing - Each Player;
All;
All;
}
conditions {
Has Spawned(Event Player) == True;
}
actions {
Set Player Variable(Event Player, A, True);
Set Player Variable(Event Player, N, 15);
Set Player Variable(Event Player, D, 0.20);
Set Player Variable(Event Player, S, 30.00);
Set Player Variable(Event Player, Q, Position Of(Event Player));
Set Player Variable(Event Player, M, 0);
Set Player Variable(Event Player, J, 0);
}
}
rule ("init hud: speed, (x,y,z), Trails enabled, max effects, throttle") {
event {
Ongoing - Each Player;
All;
All;
}
conditions {
Has Spawned(Event Player) == True;
}
actions {
Create HUD Text(Event Player, Null, Null, Velocity Of(Event Player), Left, 0, White, White, White, Visible To and String, Default Visibility);
Create HUD Text(Event Player, Null, Null, Custom String("Time: {0}", Player Variable(Event Player, D), Null, Null), Left, 1, White, White, White, Visible To and String, Default Visibility);
Create HUD Text(Event Player, Null, Null, Custom String("Height: {0}", Player Variable(Event Player, S), Null, Null), Left, 2, White, White, White, Visible To and String, Default Visibility);
Create HUD Text(Event Player, Null, Null, Custom String("Max: {0}", Player Variable(Event Player, N), Null, Null), Left, 3, White, White, White, Visible To and String, Default Visibility);
Create HUD Text(Event Player, Null, Null, Custom String("Started: {0}: Selected: {1}", Player Variable(Event Player, J), Player Variable(Event Player, M), Null), Left, 4, White, White, White, Visible To and String, Default Visibility);
}
}
rule ("trails") {
event {
Ongoing - Each Player;
All;
All;
}
conditions {
Is Alive(Event Player) == True;
Speed Of(Event Player) > 2;
Player Variable(Event Player, A) == 1;
}
actions {
Set Player Variable(Event Player, P, Position Of(Event Player));
Modify Player Variable(Event Player, F, Append To Array, Divide(Speed Of(Event Player), Player Variable(Event Player, S)));
Create Effect(All Players(All Teams), Sphere, Aqua, Player Variable(Event Player, P), Last Of(Player Variable(Event Player, F)), None);
Modify Player Variable(Event Player, E, Append To Array, Last Created Entity);
Wait(Player Variable(Event Player, D), Ignore Condition);
Loop If Condition Is True;
}
}
rule ("clear trails") {
event {
Ongoing - Each Player;
All;
All;
}
conditions {
Player Variable(Event Player, A) == 1;
}
actions {
Skip If(Compare(Count Of(Player Variable(Event Player, E)), <=, Player Variable(Event Player, N)), 3);
Destroy Effect(First Of(Player Variable(Event Player, E)));
Modify Player Variable(Event Player, E, Remove From Array By Index, 0);
Modify Player Variable(Event Player, F, Remove From Array By Index, 0);
Wait(Player Variable(Event Player, D), Ignore Condition);
Loop If Condition Is True;
}
}
rule ("toggle trails") {
event {
Ongoing - Each Player;
All;
All;
}
conditions {
Is Communicating(Event Player, Hello) == True;
}
actions {
Skip If(Not(Player Variable(Event Player, A)), 2);
Set Player Variable(Event Player, A, False);
Abort;
Set Player Variable(Event Player, A, True);
}
}
rule ("respawn") {
event {
Ongoing - Each Player;
All;
All;
}
conditions {
Is Communicating(Event Player, Voice Line Up) == True;
Is In Spawn Room(Event Player) == False;
}
actions {
Respawn(Event Player);
}
}
rule ("TP to nearest ally") {
event {
Ongoing - Each Player;
Team 1;
All;
}
conditions {
Is Communicating(Event Player, Voice Line Left) == True;
}
actions {
Teleport(Event Player, Player Closest To Reticle(Event Player, Team 1));
}
}
rule ("clear all effects") {
event {
Ongoing - Each Player;
All;
All;
}
conditions {
Is Button Held(Event Player, Primary Fire) == True;
Is Button Held(Event Player, Secondary Fire) == True;
}
actions {
Destroy All Effects;
Set Player Variable(Event Player, E, Empty Array);
Set Player Variable(Event Player, F, Empty Array);
}
}
rule ("Adjust delay") {
event {
Ongoing - Each Player;
All;
All;
}
conditions {
Player Variable(Event Player, M) == 1;
Player Variable(Event Player, J) != 0;
}
actions {
Set Player Variable(Event Player, D, Absolute Value(Divide(Vertical Facing Angle Of(Event Player), 10)));
Wait(0.1, Ignore Condition);
Loop If Condition Is True;
}
}
rule ("Adjust scale") {
event {
Ongoing - Each Player;
All;
All;
}
conditions {
Player Variable(Event Player, M) == 2;
Player Variable(Event Player, J) != 0;
}
actions {
Set Player Variable(Event Player, S, Absolute Value(Divide(Vertical Facing Angle Of(Event Player), 2)));
Wait(0.1, Ignore Condition);
Loop If Condition Is True;
}
}
rule ("Adjust effect count") {
event {
Ongoing - Each Player;
All;
All;
}
conditions {
Player Variable(Event Player, M) == 3;
Player Variable(Event Player, J) != 0;
}
actions {
Set Player Variable(Event Player, N, Round To Integer(Absolute Value(Multiply(Vertical Facing Angle Of(Event Player), 2)), Up));
Wait(0.1, Ignore Condition);
Loop If Condition Is True;
}
}
rule ("toggle edit mode") {
event {
Ongoing - Each Player;
All;
All;
}
conditions {
Is Button Held(Event Player, Interact) == True;
Is Button Held(Event Player, Crouch) == True;
}
actions {
Skip If(Compare(Player Variable(Event Player, J), !=, 0), 2);
Set Player Variable(Event Player, J, 1);
Abort;
Set Player Variable(Event Player, J, 0);
Set Player Variable(Event Player, M, 0);
}
}
rule ("select edit mode") {
event {
Ongoing - Each Player;
All;
All;
}
conditions {
Player Variable(Event Player, J) != 0;
}
actions {
Skip If(Not(Compare(X Component Of(Throttle Of(Event Player)), >, 0)), 2);
Set Player Variable(Event Player, M, 1);
Abort;
Skip If(Not(Compare(X Component Of(Throttle Of(Event Player)), <, 0)), 2);
Set Player Variable(Event Player, M, 2);
Abort;
Skip If(Not(Compare(Z Component Of(Throttle Of(Event Player)), >, 0)), 2);
Set Player Variable(Event Player, M, 3);
Abort;
}
}
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment