summaryrefslogtreecommitdiffhomepage
path: root/samples/13_path_finding_algorithms/05_dijkstra
diff options
context:
space:
mode:
author_Tradam <[email protected]>2021-12-16 19:22:26 -0500
committerGitHub <[email protected]>2021-12-16 19:22:26 -0500
commit5954b9beb4d4a3b4f248d72d1851195f030558a8 (patch)
treefecd8aa840a25afdb502915b0fdb4d03b7ed339a /samples/13_path_finding_algorithms/05_dijkstra
parent2f845281f133849256b57bb08fd3e9ae57600784 (diff)
parenteaa29e72939f5edf61735ccbb73c36ee89369f65 (diff)
downloaddragonruby-game-toolkit-contrib-master.tar.gz
dragonruby-game-toolkit-contrib-master.zip
Merge branch 'DragonRuby:master' into masterHEADmaster
Diffstat (limited to 'samples/13_path_finding_algorithms/05_dijkstra')
-rw-r--r--samples/13_path_finding_algorithms/05_dijkstra/app/main.rb218
-rw-r--r--samples/13_path_finding_algorithms/05_dijkstra/replay.txt686
2 files changed, 795 insertions, 109 deletions
diff --git a/samples/13_path_finding_algorithms/05_dijkstra/app/main.rb b/samples/13_path_finding_algorithms/05_dijkstra/app/main.rb
index b335447..1223779 100644
--- a/samples/13_path_finding_algorithms/05_dijkstra/app/main.rb
+++ b/samples/13_path_finding_algorithms/05_dijkstra/app/main.rb
@@ -19,8 +19,8 @@ class Movement_Costs
# The next step in the search is calculated
def tick
defaults
- render
- input
+ render
+ input
calc
end
@@ -37,7 +37,7 @@ class Movement_Costs
# Walls are stored in a hash for quick look up when doing the search
state.star ||= [1, 5]
state.target ||= [8, 4]
- state.walls ||= {[1, 1] => true, [2, 1] => true, [3, 1] => true, [1, 2] => true, [2, 2] => true, [3, 2] => true}
+ state.walls ||= {[1, 1] => true, [2, 1] => true, [3, 1] => true, [1, 2] => true, [2, 2] => true, [3, 2] => true}
state.hills ||= {
[4, 1] => true,
[5, 1] => true,
@@ -72,7 +72,7 @@ class Movement_Costs
# We store this value, because we want to remember the value even when
# the user's cursor is no longer over what they're interacting with, but
# they are still clicking down on the mouse.
- state.user_input ||= :none
+ state.user_input ||= :none
# Values that are used for the breadth first search
# Keeping track of what cells were visited prevents counting cells multiple times
@@ -96,7 +96,7 @@ class Movement_Costs
# Draws everything onto the screen
def render
- render_background
+ render_background
render_heat_maps
@@ -111,8 +111,8 @@ class Movement_Costs
# Draws what the grid looks like with nothing on it
def render_background
- render_unvisited
- render_grid_lines
+ render_unvisited
+ render_grid_lines
render_labels
end
@@ -131,7 +131,7 @@ class Movement_Costs
end
for y in 0..grid.height
- outputs.lines << horizontal_line(y)
+ outputs.lines << horizontal_line(y)
outputs.lines << shifted_horizontal_line(y)
end
end
@@ -244,16 +244,16 @@ class Movement_Costs
def render_star
outputs.sprites << [scale_up(state.star), 'star.png']
outputs.sprites << [move_and_scale_up(state.star), 'star.png']
- end
+ end
# Renders the target on both grids
def render_target
outputs.sprites << [scale_up(state.target), 'target.png']
outputs.sprites << [move_and_scale_up(state.target), 'target.png']
- end
+ end
def render_hills
- state.hills.each_key do |hill|
+ state.hills.each_key do |hill|
outputs.solids << [scale_up(hill), hill_color]
outputs.solids << [move_and_scale_up(hill), hill_color]
end
@@ -261,7 +261,7 @@ class Movement_Costs
# Draws the walls on both grids
def render_walls
- state.walls.each_key do |wall|
+ state.walls.each_key do |wall|
outputs.solids << [scale_up(wall), wall_color]
outputs.solids << [move_and_scale_up(wall), wall_color]
end
@@ -344,7 +344,7 @@ class Movement_Costs
# If the mouse was clicked this tick
if inputs.mouse.down
# Determine what the user is editing and edit the state.user_input variable
- determine_input
+ determine_input
end
# Process user input based on user_input variable and current mouse position
@@ -357,43 +357,43 @@ class Movement_Costs
# mouse left click is held
def determine_input
# If the mouse is over the star in the first grid
- if mouse_over_star?
+ if mouse_over_star?
# The user is editing the star from the first grid
- state.user_input = :star
+ state.user_input = :star
# If the mouse is over the star in the second grid
- elsif mouse_over_star2?
+ elsif mouse_over_star2?
# The user is editing the star from the second grid
- state.user_input = :star2
+ state.user_input = :star2
# If the mouse is over the target in the first grid
- elsif mouse_over_target?
+ elsif mouse_over_target?
# The user is editing the target from the first grid
- state.user_input = :target
+ state.user_input = :target
# If the mouse is over the target in the second grid
- elsif mouse_over_target2?
+ elsif mouse_over_target2?
# The user is editing the target from the second grid
- state.user_input = :target2
+ state.user_input = :target2
# If the mouse is over a wall in the first grid
- elsif mouse_over_wall?
+ elsif mouse_over_wall?
# The user is removing a wall from the first grid
- state.user_input = :remove_wall
+ state.user_input = :remove_wall
# If the mouse is over a wall in the second grid
- elsif mouse_over_wall2?
+ elsif mouse_over_wall2?
# The user is removing a wall from the second grid
state.user_input = :remove_wall2
# If the mouse is over a hill in the first grid
- elsif mouse_over_hill?
+ elsif mouse_over_hill?
# The user is adding a wall from the first grid
- state.user_input = :add_wall
+ state.user_input = :add_wall
# If the mouse is over a hill in the second grid
- elsif mouse_over_hill2?
+ elsif mouse_over_hill2?
# The user is adding a wall from the second grid
state.user_input = :add_wall2
# If the mouse is over the first grid
- elsif mouse_over_grid?
+ elsif mouse_over_grid?
# The user is adding a hill from the first grid
state.user_input = :add_hill
# If the mouse is over the second grid
- elsif mouse_over_grid2?
+ elsif mouse_over_grid2?
# The user is adding a hill from the second grid
state.user_input = :add_hill2
end
@@ -401,26 +401,26 @@ class Movement_Costs
# Processes click and drag based on what the user is currently dragging
def process_input
- if state.user_input == :star
- input_star
+ if state.user_input == :star
+ input_star
elsif state.user_input == :star2
- input_star2
- elsif state.user_input == :target
- input_target
- elsif state.user_input == :target2
- input_target2
- elsif state.user_input == :remove_wall
- input_remove_wall
+ input_star2
+ elsif state.user_input == :target
+ input_target
+ elsif state.user_input == :target2
+ input_target2
+ elsif state.user_input == :remove_wall
+ input_remove_wall
elsif state.user_input == :remove_wall2
- input_remove_wall2
- elsif state.user_input == :add_hill
- input_add_hill
- elsif state.user_input == :add_hill2
- input_add_hill2
- elsif state.user_input == :add_wall
- input_add_wall
- elsif state.user_input == :add_wall2
- input_add_wall2
+ input_remove_wall2
+ elsif state.user_input == :add_hill
+ input_add_hill
+ elsif state.user_input == :add_hill2
+ input_add_hill2
+ elsif state.user_input == :add_wall
+ input_add_wall
+ elsif state.user_input == :add_wall2
+ input_add_wall2
end
end
@@ -433,26 +433,26 @@ class Movement_Costs
calc_dijkstra
end
end
-
+
def calc_breadth_first
# Sets up the Breadth First Search
- breadth_first_search.visited[state.star] = true
- breadth_first_search.frontier << state.star
+ breadth_first_search.visited[state.star] = true
+ breadth_first_search.frontier << state.star
breadth_first_search.came_from[state.star] = nil
until breadth_first_search.frontier.empty?
return if breadth_first_search.visited.has_key?(state.target)
# A step in the search
# Takes the next frontier cell
- new_frontier = breadth_first_search.frontier.shift
+ new_frontier = breadth_first_search.frontier.shift
# For each of its neighbors
- adjacent_neighbors(new_frontier).each do | neighbor |
+ adjacent_neighbors(new_frontier).each do | neighbor |
# That have not been visited and are not walls
- unless breadth_first_search.visited.has_key?(neighbor) || state.walls.has_key?(neighbor)
+ unless breadth_first_search.visited.has_key?(neighbor) || state.walls.has_key?(neighbor)
# Add them to the frontier and mark them as visited in the first grid
- breadth_first_search.visited[neighbor] = true
- breadth_first_search.frontier << neighbor
+ breadth_first_search.visited[neighbor] = true
+ breadth_first_search.frontier << neighbor
# Remember which cell the neighbor came from
breadth_first_search.came_from[neighbor] = new_frontier
end
@@ -512,12 +512,12 @@ class Movement_Costs
# Only resets the search if the star changes position
# Called whenever the user is editing the star (puts mouse down on star)
def input_star
- old_star = state.star.clone
+ old_star = state.star.clone
unless cell_closest_to_mouse == state.target
- state.star = cell_closest_to_mouse
+ state.star = cell_closest_to_mouse
end
- unless old_star == state.star
- reset_search
+ unless old_star == state.star
+ reset_search
end
end
@@ -525,12 +525,12 @@ class Movement_Costs
# Only resets the search if the star changes position
# Called whenever the user is editing the star (puts mouse down on star)
def input_star2
- old_star = state.star.clone
+ old_star = state.star.clone
unless cell_closest_to_mouse2 == state.target
state.star = cell_closest_to_mouse2
end
- unless old_star == state.star
- reset_search
+ unless old_star == state.star
+ reset_search
end
end
@@ -538,12 +538,12 @@ class Movement_Costs
# Only reset_searchs the search if the target changes position
# Called whenever the user is editing the target (puts mouse down on target)
def input_target
- old_target = state.target.clone
+ old_target = state.target.clone
unless cell_closest_to_mouse == state.star
state.target = cell_closest_to_mouse
end
- unless old_target == state.target
- reset_search
+ unless old_target == state.target
+ reset_search
end
end
@@ -551,12 +551,12 @@ class Movement_Costs
# Only reset_searchs the search if the target changes position
# Called whenever the user is editing the target (puts mouse down on target)
def input_target2
- old_target = state.target.clone
+ old_target = state.target.clone
unless cell_closest_to_mouse2 == state.star
state.target = cell_closest_to_mouse2
end
- unless old_target == state.target
- reset_search
+ unless old_target == state.target
+ reset_search
end
end
@@ -565,11 +565,11 @@ class Movement_Costs
# The mouse needs to be inside the grid, because we only want to remove walls
# the cursor is directly over
# Recalculations should only occur when a wall is actually deleted
- if mouse_over_grid?
+ if mouse_over_grid?
if state.walls.has_key?(cell_closest_to_mouse) or state.hills.has_key?(cell_closest_to_mouse)
- state.walls.delete(cell_closest_to_mouse)
- state.hills.delete(cell_closest_to_mouse)
- reset_search
+ state.walls.delete(cell_closest_to_mouse)
+ state.hills.delete(cell_closest_to_mouse)
+ reset_search
end
end
end
@@ -579,21 +579,21 @@ class Movement_Costs
# The mouse needs to be inside the grid, because we only want to remove walls
# the cursor is directly over
# Recalculations should only occur when a wall is actually deleted
- if mouse_over_grid2?
+ if mouse_over_grid2?
if state.walls.has_key?(cell_closest_to_mouse2) or state.hills.has_key?(cell_closest_to_mouse2)
- state.walls.delete(cell_closest_to_mouse2)
- state.hills.delete(cell_closest_to_mouse2)
- reset_search
+ state.walls.delete(cell_closest_to_mouse2)
+ state.hills.delete(cell_closest_to_mouse2)
+ reset_search
end
end
end
# Adds a hill in the first grid in the cell the mouse is over
def input_add_hill
- if mouse_over_grid?
+ if mouse_over_grid?
unless state.hills.has_key?(cell_closest_to_mouse)
- state.hills[cell_closest_to_mouse] = true
- reset_search
+ state.hills[cell_closest_to_mouse] = true
+ reset_search
end
end
end
@@ -601,32 +601,32 @@ class Movement_Costs
# Adds a hill in the second grid in the cell the mouse is over
def input_add_hill2
- if mouse_over_grid2?
+ if mouse_over_grid2?
unless state.hills.has_key?(cell_closest_to_mouse2)
- state.hills[cell_closest_to_mouse2] = true
- reset_search
+ state.hills[cell_closest_to_mouse2] = true
+ reset_search
end
end
end
# Adds a wall in the first grid in the cell the mouse is over
def input_add_wall
- if mouse_over_grid?
+ if mouse_over_grid?
unless state.walls.has_key?(cell_closest_to_mouse)
- state.hills.delete(cell_closest_to_mouse)
- state.walls[cell_closest_to_mouse] = true
- reset_search
+ state.hills.delete(cell_closest_to_mouse)
+ state.walls[cell_closest_to_mouse] = true
+ reset_search
end
end
end
# Adds a wall in the second grid in the cell the mouse is over
def input_add_wall2
- if mouse_over_grid2?
+ if mouse_over_grid2?
unless state.walls.has_key?(cell_closest_to_mouse2)
- state.hills.delete(cell_closest_to_mouse2)
- state.walls[cell_closest_to_mouse2] = true
- reset_search
+ state.hills.delete(cell_closest_to_mouse2)
+ state.walls[cell_closest_to_mouse2] = true
+ reset_search
end
end
end
@@ -649,21 +649,21 @@ class Movement_Costs
# Returns a list of adjacent cells
# Used to determine what the next cells to be added to the frontier are
def adjacent_neighbors(cell)
- neighbors = []
+ neighbors = []
# Gets all the valid neighbors into the array
# From southern neighbor, clockwise
- neighbors << [cell.x , cell.y - 1] unless cell.y == 0
- neighbors << [cell.x - 1, cell.y ] unless cell.x == 0
- neighbors << [cell.x , cell.y + 1] unless cell.y == grid.height - 1
- neighbors << [cell.x + 1, cell.y ] unless cell.x == grid.width - 1
+ neighbors << [cell.x , cell.y - 1] unless cell.y == 0
+ neighbors << [cell.x - 1, cell.y ] unless cell.x == 0
+ neighbors << [cell.x , cell.y + 1] unless cell.y == grid.height - 1
+ neighbors << [cell.x + 1, cell.y ] unless cell.x == grid.width - 1
# Sorts the neighbors so the rendered path is a zigzag path
# Cells in a diagonal direction are given priority
# Comment this line to see the difference
neighbors = neighbors.sort_by { |neighbor_x, neighbor_y| proximity_to_star(neighbor_x, neighbor_y) }
- neighbors
+ neighbors
end
# Finds the vertical and horizontal distance of a cell from the star
@@ -688,13 +688,13 @@ class Movement_Costs
# Finding the cell closest to the mouse helps with this
def cell_closest_to_mouse
# Closest cell to the mouse in the first grid
- x = (inputs.mouse.point.x / grid.cell_size).to_i
- y = (inputs.mouse.point.y / grid.cell_size).to_i
+ x = (inputs.mouse.point.x / grid.cell_size).to_i
+ y = (inputs.mouse.point.y / grid.cell_size).to_i
# Bound x and y to the grid
- x = grid.width - 1 if x > grid.width - 1
- y = grid.height - 1 if y > grid.height - 1
+ x = grid.width - 1 if x > grid.width - 1
+ y = grid.height - 1 if y > grid.height - 1
# Return closest cell
- [x, y]
+ [x, y]
end
# When the user grabs the star and puts their cursor to the far right
@@ -702,17 +702,17 @@ class Movement_Costs
# Finding the cell closest to the mouse in the second grid helps with this
def cell_closest_to_mouse2
# Closest cell grid to the mouse in the second
- x = (inputs.mouse.point.x / grid.cell_size).to_i
- y = (inputs.mouse.point.y / grid.cell_size).to_i
+ x = (inputs.mouse.point.x / grid.cell_size).to_i
+ y = (inputs.mouse.point.y / grid.cell_size).to_i
# Translate the cell to the first grid
x -= grid.width + 1
# Bound x and y to the first grid
x = 0 if x < 0
y = 0 if y < 0
- x = grid.width - 1 if x > grid.width - 1
- y = grid.height - 1 if y > grid.height - 1
+ x = grid.width - 1 if x > grid.width - 1
+ y = grid.height - 1 if y > grid.height - 1
# Return closest cell
- [x, y]
+ [x, y]
end
# Signal that the user is going to be moving the star from the first grid
@@ -785,12 +785,12 @@ class Movement_Costs
# Light brown
def unvisited_color
- [221, 212, 213]
+ [221, 212, 213]
end
# Camo Green
def wall_color
- [134, 134, 120]
+ [134, 134, 120]
end
# Pastel White
@@ -833,7 +833,7 @@ def tick args
end
# Every tick, new args are passed, and the Dijkstra tick method is called
- $movement_costs ||= Movement_Costs.new(args)
+ $movement_costs ||= Movement_Costs.new
$movement_costs.args = args
$movement_costs.tick
end
diff --git a/samples/13_path_finding_algorithms/05_dijkstra/replay.txt b/samples/13_path_finding_algorithms/05_dijkstra/replay.txt
new file mode 100644
index 0000000..a459873
--- /dev/null
+++ b/samples/13_path_finding_algorithms/05_dijkstra/replay.txt
@@ -0,0 +1,686 @@
+replay_version 2.0
+stopped_at 730
+seed 100
+recorded_at 2021-11-20 11:20:27 -0600
+[:mouse_button_up, 1, 0, 1, 1, 1]
+[:mouse_move, 782, 97, 2, 2, 14]
+[:mouse_move, 782, 98, 2, 3, 15]
+[:mouse_move, 782, 99, 2, 4, 15]
+[:mouse_move, 782, 100, 2, 5, 16]
+[:mouse_move, 780, 102, 2, 6, 16]
+[:mouse_move, 773, 111, 2, 7, 17]
+[:mouse_move, 768, 123, 2, 8, 17]
+[:mouse_move, 759, 142, 2, 9, 18]
+[:mouse_move, 740, 166, 2, 10, 18]
+[:mouse_move, 718, 196, 2, 11, 19]
+[:mouse_move, 699, 232, 2, 12, 19]
+[:mouse_move, 686, 272, 2, 13, 20]
+[:mouse_move, 673, 314, 2, 14, 20]
+[:mouse_move, 648, 355, 2, 15, 21]
+[:mouse_move, 594, 404, 2, 16, 21]
+[:mouse_move, 562, 427, 2, 17, 22]
+[:mouse_move, 532, 446, 2, 18, 22]
+[:mouse_move, 509, 458, 2, 19, 23]
+[:mouse_move, 490, 464, 2, 20, 23]
+[:mouse_move, 482, 466, 2, 21, 23]
+[:mouse_move, 481, 466, 2, 22, 24]
+[:mouse_move, 481, 460, 2, 23, 25]
+[:mouse_move, 490, 451, 2, 24, 26]
+[:mouse_move, 501, 443, 2, 25, 26]
+[:mouse_move, 506, 441, 2, 26, 26]
+[:mouse_move, 506, 442, 2, 27, 29]
+[:mouse_move, 507, 442, 2, 28, 31]
+[:mouse_move, 508, 442, 2, 29, 32]
+[:mouse_move, 509, 442, 2, 30, 37]
+[:mouse_move, 510, 442, 2, 31, 48]
+[:mouse_move, 507, 442, 2, 32, 63]
+[:mouse_move, 500, 444, 2, 33, 63]
+[:mouse_move, 488, 446, 2, 34, 64]
+[:mouse_move, 476, 447, 2, 35, 64]
+[:mouse_move, 466, 449, 2, 36, 65]
+[:mouse_move, 459, 450, 2, 37, 65]
+[:mouse_move, 449, 452, 2, 38, 66]
+[:mouse_move, 440, 453, 2, 39, 66]
+[:mouse_move, 433, 454, 2, 40, 67]
+[:mouse_move, 432, 454, 2, 41, 67]
+[:mouse_move, 436, 455, 2, 42, 69]
+[:mouse_move, 442, 455, 2, 43, 69]
+[:mouse_move, 446, 455, 2, 44, 70]
+[:mouse_move, 450, 455, 2, 45, 70]
+[:mouse_move, 456, 448, 2, 46, 70]
+[:mouse_move, 458, 437, 2, 47, 71]
+[:mouse_move, 458, 422, 2, 48, 72]
+[:mouse_move, 451, 402, 2, 49, 72]
+[:mouse_move, 440, 376, 2, 50, 72]
+[:mouse_move, 414, 334, 2, 51, 73]
+[:mouse_move, 393, 303, 2, 52, 74]
+[:mouse_move, 378, 280, 2, 53, 74]
+[:mouse_move, 367, 265, 2, 54, 75]
+[:mouse_move, 358, 255, 2, 55, 75]
+[:mouse_move, 353, 251, 2, 56, 75]
+[:mouse_move, 349, 248, 2, 57, 76]
+[:mouse_move, 348, 248, 2, 58, 76]
+[:mouse_move, 345, 249, 2, 59, 77]
+[:mouse_move, 344, 249, 2, 60, 78]
+[:mouse_move, 338, 246, 2, 61, 79]
+[:mouse_move, 332, 240, 2, 62, 79]
+[:mouse_move, 328, 231, 2, 63, 80]
+[:mouse_move, 326, 222, 2, 64, 80]
+[:mouse_move, 326, 214, 2, 65, 81]
+[:mouse_move, 331, 208, 2, 66, 81]
+[:mouse_move, 340, 204, 2, 67, 82]
+[:mouse_move, 348, 202, 2, 68, 82]
+[:mouse_move, 357, 202, 2, 69, 83]
+[:mouse_move, 363, 202, 2, 70, 84]
+[:mouse_move, 365, 202, 2, 71, 84]
+[:mouse_move, 366, 202, 2, 72, 84]
+[:mouse_move, 374, 203, 2, 73, 85]
+[:mouse_move, 380, 204, 2, 74, 85]
+[:mouse_move, 382, 204, 2, 75, 86]
+[:mouse_move, 383, 204, 2, 76, 86]
+[:mouse_button_pressed, 1, 0, 1, 77, 88]
+[:mouse_button_up, 1, 0, 1, 78, 89]
+[:mouse_move, 384, 204, 2, 79, 99]
+[:mouse_move, 384, 205, 2, 80, 100]
+[:mouse_move, 389, 210, 2, 81, 101]
+[:mouse_move, 394, 214, 2, 82, 101]
+[:mouse_move, 399, 220, 2, 83, 101]
+[:mouse_move, 405, 228, 2, 84, 102]
+[:mouse_move, 410, 242, 2, 85, 103]
+[:mouse_move, 416, 261, 2, 86, 103]
+[:mouse_move, 422, 276, 2, 87, 104]
+[:mouse_move, 428, 284, 2, 88, 104]
+[:mouse_move, 430, 287, 2, 89, 104]
+[:mouse_move, 431, 288, 2, 90, 105]
+[:mouse_move, 433, 290, 2, 91, 105]
+[:mouse_move, 434, 295, 2, 92, 106]
+[:mouse_move, 435, 306, 2, 93, 106]
+[:mouse_move, 436, 311, 2, 94, 107]
+[:mouse_move, 436, 312, 2, 95, 108]
+[:mouse_move, 438, 314, 2, 96, 112]
+[:mouse_move, 441, 320, 2, 97, 113]
+[:mouse_move, 447, 341, 2, 98, 113]
+[:mouse_move, 453, 376, 2, 99, 114]
+[:mouse_move, 456, 413, 2, 100, 114]
+[:mouse_move, 456, 445, 2, 101, 115]
+[:mouse_move, 455, 475, 2, 102, 115]
+[:mouse_move, 450, 498, 2, 103, 116]
+[:mouse_move, 446, 519, 2, 104, 116]
+[:mouse_move, 446, 541, 2, 105, 117]
+[:mouse_move, 452, 559, 2, 106, 117]
+[:mouse_move, 458, 569, 2, 107, 117]
+[:mouse_move, 464, 573, 2, 108, 118]
+[:mouse_move, 468, 573, 2, 109, 119]
+[:mouse_move, 471, 570, 2, 110, 119]
+[:mouse_move, 474, 559, 2, 111, 120]
+[:mouse_move, 476, 539, 2, 112, 120]
+[:mouse_move, 483, 527, 2, 113, 120]
+[:mouse_move, 489, 519, 2, 114, 121]
+[:mouse_move, 493, 515, 2, 115, 121]
+[:mouse_move, 493, 511, 2, 116, 122]
+[:mouse_move, 493, 505, 2, 117, 122]
+[:mouse_move, 493, 499, 2, 118, 123]
+[:mouse_move, 490, 496, 2, 119, 123]
+[:mouse_move, 488, 493, 2, 120, 124]
+[:mouse_move, 487, 493, 2, 121, 124]
+[:mouse_move, 484, 493, 2, 122, 125]
+[:mouse_move, 482, 493, 2, 123, 125]
+[:mouse_move, 479, 494, 2, 124, 126]
+[:mouse_move, 474, 495, 2, 125, 126]
+[:mouse_move, 470, 499, 2, 126, 127]
+[:mouse_move, 470, 503, 2, 127, 127]
+[:mouse_move, 470, 506, 2, 128, 128]
+[:mouse_button_pressed, 1, 0, 1, 129, 131]
+[:mouse_button_up, 1, 0, 1, 130, 132]
+[:mouse_move, 470, 503, 2, 131, 135]
+[:mouse_move, 470, 495, 2, 132, 135]
+[:mouse_move, 470, 488, 2, 133, 135]
+[:mouse_move, 472, 478, 2, 134, 136]
+[:mouse_move, 473, 470, 2, 135, 137]
+[:mouse_move, 474, 459, 2, 136, 137]
+[:mouse_move, 474, 450, 2, 137, 138]
+[:mouse_move, 474, 445, 2, 138, 138]
+[:mouse_move, 472, 441, 2, 139, 138]
+[:mouse_move, 470, 439, 2, 140, 139]
+[:mouse_move, 467, 438, 2, 141, 139]
+[:mouse_move, 465, 438, 2, 142, 140]
+[:mouse_move, 464, 438, 2, 143, 140]
+[:mouse_move, 463, 438, 2, 144, 141]
+[:mouse_move, 460, 438, 2, 145, 141]
+[:mouse_move, 459, 438, 2, 146, 142]
+[:mouse_button_pressed, 1, 0, 1, 147, 144]
+[:mouse_button_up, 1, 0, 1, 148, 145]
+[:mouse_move, 459, 439, 2, 149, 153]
+[:mouse_move, 459, 438, 2, 150, 164]
+[:mouse_move, 458, 434, 2, 151, 164]
+[:mouse_move, 458, 426, 2, 152, 165]
+[:mouse_move, 458, 414, 2, 153, 165]
+[:mouse_move, 461, 400, 2, 154, 166]
+[:mouse_move, 461, 397, 2, 155, 166]
+[:mouse_move, 461, 396, 2, 156, 166]
+[:mouse_move, 461, 395, 2, 157, 167]
+[:mouse_button_pressed, 1, 0, 1, 158, 170]
+[:mouse_button_up, 1, 0, 1, 159, 171]
+[:mouse_move, 461, 394, 2, 160, 174]
+[:mouse_move, 461, 391, 2, 161, 175]
+[:mouse_move, 461, 387, 2, 162, 175]
+[:mouse_move, 461, 381, 2, 163, 176]
+[:mouse_move, 461, 379, 2, 164, 176]
+[:mouse_move, 461, 378, 2, 165, 177]
+[:mouse_move, 461, 377, 2, 166, 177]
+[:mouse_move, 461, 375, 2, 167, 179]
+[:mouse_move, 461, 374, 2, 168, 179]
+[:mouse_move, 461, 373, 2, 169, 180]
+[:mouse_move, 461, 372, 2, 170, 181]
+[:mouse_move, 461, 370, 2, 171, 181]
+[:mouse_move, 460, 365, 2, 172, 182]
+[:mouse_move, 460, 362, 2, 173, 182]
+[:mouse_move, 460, 359, 2, 174, 182]
+[:mouse_move, 460, 358, 2, 175, 184]
+[:mouse_move, 459, 356, 2, 176, 185]
+[:mouse_move, 459, 355, 2, 177, 186]
+[:mouse_move, 459, 352, 2, 178, 186]
+[:mouse_move, 459, 351, 2, 179, 187]
+[:mouse_move, 458, 350, 2, 180, 187]
+[:mouse_move, 458, 349, 2, 181, 187]
+[:mouse_move, 457, 352, 2, 182, 191]
+[:mouse_move, 456, 369, 2, 183, 192]
+[:mouse_move, 456, 381, 2, 184, 192]
+[:mouse_move, 456, 393, 2, 185, 193]
+[:mouse_move, 460, 412, 2, 186, 193]
+[:mouse_move, 466, 429, 2, 187, 193]
+[:mouse_move, 471, 448, 2, 188, 194]
+[:mouse_move, 472, 464, 2, 189, 194]
+[:mouse_move, 473, 477, 2, 190, 195]
+[:mouse_move, 474, 488, 2, 191, 196]
+[:mouse_move, 474, 497, 2, 192, 196]
+[:mouse_move, 474, 499, 2, 193, 196]
+[:mouse_move, 472, 504, 2, 194, 197]
+[:mouse_move, 470, 513, 2, 195, 197]
+[:mouse_move, 470, 516, 2, 196, 197]
+[:mouse_move, 470, 517, 2, 197, 198]
+[:mouse_move, 470, 519, 2, 198, 199]
+[:mouse_move, 470, 521, 2, 199, 199]
+[:mouse_move, 470, 522, 2, 200, 200]
+[:mouse_move, 470, 523, 2, 201, 201]
+[:mouse_move, 467, 521, 2, 202, 203]
+[:mouse_move, 464, 518, 2, 203, 203]
+[:mouse_move, 462, 515, 2, 204, 204]
+[:mouse_move, 461, 511, 2, 205, 205]
+[:mouse_button_pressed, 1, 0, 1, 206, 210]
+[:mouse_button_up, 1, 0, 1, 207, 211]
+[:mouse_move, 462, 511, 2, 208, 218]
+[:mouse_move, 465, 510, 2, 209, 218]
+[:mouse_move, 470, 508, 2, 210, 218]
+[:mouse_move, 475, 505, 2, 211, 219]
+[:mouse_move, 483, 502, 2, 212, 219]
+[:mouse_move, 493, 498, 2, 213, 220]
+[:mouse_move, 506, 491, 2, 214, 221]
+[:mouse_move, 517, 479, 2, 215, 221]
+[:mouse_move, 521, 471, 2, 216, 221]
+[:mouse_move, 523, 467, 2, 217, 222]
+[:mouse_move, 523, 464, 2, 218, 222]
+[:mouse_move, 522, 464, 2, 219, 227]
+[:mouse_move, 521, 464, 2, 220, 227]
+[:mouse_move, 518, 464, 2, 221, 228]
+[:mouse_move, 513, 460, 2, 222, 228]
+[:mouse_move, 513, 459, 2, 223, 228]
+[:mouse_move, 512, 459, 2, 224, 229]
+[:mouse_move, 512, 458, 2, 225, 229]
+[:mouse_button_pressed, 1, 0, 1, 226, 232]
+[:mouse_move, 513, 458, 2, 227, 233]
+[:mouse_move, 514, 458, 2, 228, 234]
+[:mouse_move, 516, 458, 2, 229, 234]
+[:mouse_move, 517, 458, 2, 230, 235]
+[:mouse_move, 523, 453, 2, 231, 235]
+[:mouse_move, 531, 444, 2, 232, 235]
+[:mouse_move, 537, 436, 2, 233, 236]
+[:mouse_move, 541, 428, 2, 234, 236]
+[:mouse_move, 543, 421, 2, 235, 237]
+[:mouse_move, 545, 413, 2, 236, 237]
+[:mouse_move, 546, 405, 2, 237, 237]
+[:mouse_move, 547, 396, 2, 238, 237]
+[:mouse_move, 547, 389, 2, 239, 237]
+[:mouse_move, 547, 383, 2, 240, 237]
+[:mouse_move, 547, 379, 2, 241, 238]
+[:mouse_move, 547, 378, 2, 242, 238]
+[:mouse_move, 547, 376, 2, 243, 238]
+[:mouse_move, 546, 375, 2, 244, 238]
+[:mouse_move, 546, 374, 2, 245, 238]
+[:mouse_move, 546, 372, 2, 246, 239]
+[:mouse_move, 545, 368, 2, 247, 239]
+[:mouse_move, 544, 366, 2, 248, 239]
+[:mouse_move, 543, 363, 2, 249, 240]
+[:mouse_move, 540, 357, 2, 250, 240]
+[:mouse_move, 534, 350, 2, 251, 241]
+[:mouse_move, 528, 344, 2, 252, 241]
+[:mouse_move, 520, 339, 2, 253, 241]
+[:mouse_move, 517, 339, 2, 254, 241]
+[:mouse_move, 514, 337, 2, 255, 241]
+[:mouse_move, 513, 337, 2, 256, 242]
+[:mouse_move, 511, 336, 2, 257, 242]
+[:mouse_move, 509, 336, 2, 258, 242]
+[:mouse_move, 508, 336, 2, 259, 242]
+[:mouse_move, 507, 336, 2, 260, 242]
+[:mouse_move, 505, 335, 2, 261, 242]
+[:mouse_move, 502, 335, 2, 262, 243]
+[:mouse_move, 498, 335, 2, 263, 244]
+[:mouse_move, 494, 335, 2, 264, 244]
+[:mouse_move, 484, 335, 2, 265, 244]
+[:mouse_move, 475, 335, 2, 266, 245]
+[:mouse_move, 469, 335, 2, 267, 245]
+[:mouse_move, 459, 338, 2, 268, 246]
+[:mouse_move, 451, 342, 2, 269, 246]
+[:mouse_move, 441, 347, 2, 270, 246]
+[:mouse_move, 430, 352, 2, 271, 246]
+[:mouse_move, 421, 357, 2, 272, 247]
+[:mouse_move, 408, 366, 2, 273, 247]
+[:mouse_move, 398, 375, 2, 274, 247]
+[:mouse_move, 390, 386, 2, 275, 248]
+[:mouse_move, 380, 402, 2, 276, 248]
+[:mouse_move, 374, 412, 2, 277, 248]
+[:mouse_move, 368, 420, 2, 278, 248]
+[:mouse_move, 364, 427, 2, 279, 248]
+[:mouse_move, 362, 437, 2, 280, 249]
+[:mouse_move, 362, 448, 2, 281, 249]
+[:mouse_move, 362, 455, 2, 282, 249]
+[:mouse_move, 362, 463, 2, 283, 249]
+[:mouse_move, 362, 467, 2, 284, 249]
+[:mouse_move, 362, 473, 2, 285, 250]
+[:mouse_move, 364, 483, 2, 286, 250]
+[:mouse_move, 368, 490, 2, 287, 251]
+[:mouse_move, 372, 496, 2, 288, 251]
+[:mouse_move, 379, 505, 2, 289, 251]
+[:mouse_move, 384, 509, 2, 290, 251]
+[:mouse_move, 385, 511, 2, 291, 251]
+[:mouse_move, 387, 511, 2, 292, 252]
+[:mouse_move, 387, 512, 2, 293, 252]
+[:mouse_move, 388, 512, 2, 294, 253]
+[:mouse_move, 390, 514, 2, 295, 254]
+[:mouse_move, 392, 516, 2, 296, 254]
+[:mouse_move, 392, 517, 2, 297, 254]
+[:mouse_move, 393, 518, 2, 298, 255]
+[:mouse_move, 394, 520, 2, 299, 255]
+[:mouse_move, 395, 523, 2, 300, 256]
+[:mouse_move, 395, 527, 2, 301, 257]
+[:mouse_move, 395, 533, 2, 302, 257]
+[:mouse_move, 392, 542, 2, 303, 258]
+[:mouse_move, 392, 555, 2, 304, 258]
+[:mouse_move, 392, 567, 2, 305, 258]
+[:mouse_move, 392, 576, 2, 306, 259]
+[:mouse_move, 392, 583, 2, 307, 259]
+[:mouse_move, 392, 587, 2, 308, 259]
+[:mouse_move, 392, 590, 2, 309, 259]
+[:mouse_move, 392, 592, 2, 310, 260]
+[:mouse_move, 391, 594, 2, 311, 260]
+[:mouse_move, 391, 595, 2, 312, 261]
+[:mouse_move, 389, 597, 2, 313, 262]
+[:mouse_move, 382, 602, 2, 314, 262]
+[:mouse_move, 372, 608, 2, 315, 263]
+[:mouse_move, 359, 612, 2, 316, 263]
+[:mouse_move, 345, 619, 2, 317, 263]
+[:mouse_move, 329, 626, 2, 318, 263]
+[:mouse_move, 314, 633, 2, 319, 263]
+[:mouse_move, 301, 639, 2, 320, 263]
+[:mouse_move, 286, 643, 2, 321, 264]
+[:mouse_move, 270, 646, 2, 322, 264]
+[:mouse_move, 255, 647, 2, 323, 264]
+[:mouse_move, 236, 650, 2, 324, 264]
+[:mouse_move, 227, 650, 2, 325, 265]
+[:mouse_move, 216, 650, 2, 326, 265]
+[:mouse_move, 207, 650, 2, 327, 265]
+[:mouse_move, 203, 651, 2, 328, 265]
+[:mouse_move, 202, 651, 2, 329, 265]
+[:mouse_move, 201, 651, 2, 330, 265]
+[:mouse_move, 200, 651, 2, 331, 267]
+[:mouse_move, 199, 651, 2, 332, 267]
+[:mouse_move, 198, 651, 2, 333, 268]
+[:mouse_move, 195, 652, 2, 334, 268]
+[:mouse_move, 194, 653, 2, 335, 269]
+[:mouse_move, 193, 654, 2, 336, 269]
+[:mouse_move, 193, 655, 2, 337, 272]
+[:mouse_move, 192, 655, 2, 338, 272]
+[:mouse_move, 192, 656, 2, 339, 274]
+[:mouse_move, 192, 658, 2, 340, 275]
+[:mouse_move, 192, 661, 2, 341, 275]
+[:mouse_move, 192, 662, 2, 342, 275]
+[:mouse_move, 192, 664, 2, 343, 276]
+[:mouse_move, 192, 665, 2, 344, 277]
+[:mouse_button_up, 1, 0, 1, 345, 329]
+[:mouse_move, 192, 664, 2, 346, 337]
+[:mouse_move, 193, 664, 2, 347, 354]
+[:mouse_move, 195, 663, 2, 348, 355]
+[:mouse_move, 201, 662, 2, 349, 355]
+[:mouse_move, 211, 660, 2, 350, 356]
+[:mouse_move, 227, 659, 2, 351, 357]
+[:mouse_move, 283, 651, 2, 352, 357]
+[:mouse_move, 348, 641, 2, 353, 358]
+[:mouse_move, 431, 632, 2, 354, 358]
+[:mouse_move, 522, 622, 2, 355, 359]
+[:mouse_move, 605, 609, 2, 356, 359]
+[:mouse_move, 661, 603, 2, 357, 360]
+[:mouse_move, 687, 599, 2, 358, 361]
+[:mouse_move, 702, 596, 2, 359, 361]
+[:mouse_move, 708, 595, 2, 360, 362]
+[:mouse_move, 711, 593, 2, 361, 362]
+[:mouse_move, 712, 592, 2, 362, 364]
+[:mouse_move, 714, 590, 2, 363, 364]
+[:mouse_move, 715, 589, 2, 364, 365]
+[:mouse_move, 715, 587, 2, 365, 365]
+[:mouse_move, 713, 584, 2, 366, 366]
+[:mouse_move, 712, 584, 2, 367, 367]
+[:mouse_move, 711, 583, 2, 368, 368]
+[:mouse_move, 712, 582, 2, 369, 369]
+[:mouse_move, 716, 579, 2, 370, 370]
+[:mouse_move, 719, 578, 2, 371, 371]
+[:mouse_move, 740, 571, 2, 372, 372]
+[:mouse_move, 757, 569, 2, 373, 372]
+[:mouse_move, 764, 568, 2, 374, 372]
+[:mouse_move, 764, 567, 2, 375, 374]
+[:mouse_button_pressed, 1, 0, 1, 376, 376]
+[:mouse_button_up, 1, 0, 1, 377, 377]
+[:mouse_move, 764, 571, 2, 378, 390]
+[:mouse_move, 764, 579, 2, 379, 391]
+[:mouse_move, 764, 584, 2, 380, 391]
+[:mouse_move, 763, 586, 2, 381, 392]
+[:mouse_move, 760, 592, 2, 382, 393]
+[:mouse_move, 755, 600, 2, 383, 393]
+[:mouse_move, 752, 606, 2, 384, 393]
+[:mouse_move, 750, 607, 2, 385, 394]
+[:mouse_move, 750, 608, 2, 386, 395]
+[:mouse_move, 750, 610, 2, 387, 396]
+[:mouse_move, 750, 614, 2, 388, 396]
+[:mouse_move, 750, 615, 2, 389, 396]
+[:mouse_move, 750, 617, 2, 390, 397]
+[:mouse_move, 750, 618, 2, 391, 398]
+[:mouse_move, 750, 620, 2, 392, 399]
+[:mouse_move, 749, 622, 2, 393, 400]
+[:mouse_button_pressed, 1, 0, 1, 394, 401]
+[:mouse_button_up, 1, 0, 1, 395, 403]
+[:mouse_move, 749, 623, 2, 396, 408]
+[:mouse_move, 750, 623, 2, 397, 410]
+[:mouse_move, 754, 624, 2, 398, 410]
+[:mouse_move, 760, 625, 2, 399, 411]
+[:mouse_move, 769, 628, 2, 400, 411]
+[:mouse_move, 785, 630, 2, 401, 412]
+[:mouse_move, 791, 631, 2, 402, 413]
+[:mouse_move, 792, 631, 2, 403, 414]
+[:mouse_move, 793, 631, 2, 404, 414]
+[:mouse_move, 794, 631, 2, 405, 415]
+[:mouse_move, 795, 631, 2, 406, 415]
+[:mouse_move, 796, 631, 2, 407, 416]
+[:mouse_move, 798, 631, 2, 408, 417]
+[:mouse_move, 799, 631, 2, 409, 422]
+[:mouse_move, 799, 630, 2, 410, 423]
+[:mouse_move, 800, 627, 2, 411, 426]
+[:mouse_move, 802, 621, 2, 412, 427]
+[:mouse_move, 804, 609, 2, 413, 427]
+[:mouse_move, 806, 601, 2, 414, 428]
+[:mouse_move, 804, 595, 2, 415, 429]
+[:mouse_move, 799, 591, 2, 416, 430]
+[:mouse_move, 796, 591, 2, 417, 430]
+[:mouse_move, 792, 591, 2, 418, 430]
+[:mouse_move, 786, 593, 2, 419, 431]
+[:mouse_move, 775, 597, 2, 420, 432]
+[:mouse_move, 766, 600, 2, 421, 433]
+[:mouse_move, 763, 600, 2, 422, 434]
+[:mouse_move, 762, 600, 2, 423, 434]
+[:mouse_move, 761, 599, 2, 424, 435]
+[:mouse_move, 759, 592, 2, 425, 435]
+[:mouse_move, 756, 578, 2, 426, 436]
+[:mouse_move, 755, 571, 2, 427, 437]
+[:mouse_move, 755, 566, 2, 428, 437]
+[:mouse_button_pressed, 1, 0, 1, 429, 440]
+[:mouse_button_up, 1, 0, 1, 430, 442]
+[:mouse_move, 755, 567, 2, 431, 443]
+[:mouse_move, 756, 567, 2, 432, 444]
+[:mouse_move, 756, 568, 2, 433, 446]
+[:mouse_move, 756, 573, 2, 434, 446]
+[:mouse_move, 756, 582, 2, 435, 447]
+[:mouse_move, 756, 592, 2, 436, 448]
+[:mouse_move, 758, 599, 2, 437, 448]
+[:mouse_move, 758, 604, 2, 438, 449]
+[:mouse_move, 759, 607, 2, 439, 449]
+[:mouse_move, 760, 610, 2, 440, 450]
+[:mouse_move, 760, 611, 2, 441, 451]
+[:mouse_move, 760, 612, 2, 442, 451]
+[:mouse_move, 760, 613, 2, 443, 452]
+[:mouse_move, 760, 614, 2, 444, 452]
+[:mouse_move, 760, 615, 2, 445, 454]
+[:mouse_move, 759, 616, 2, 446, 455]
+[:mouse_move, 759, 617, 2, 447, 455]
+[:mouse_move, 759, 618, 2, 448, 456]
+[:mouse_move, 759, 619, 2, 449, 457]
+[:mouse_move, 759, 621, 2, 450, 459]
+[:mouse_move, 758, 621, 2, 451, 460]
+[:mouse_move, 758, 622, 2, 452, 463]
+[:mouse_move, 758, 623, 2, 453, 464]
+[:mouse_move, 759, 623, 2, 454, 467]
+[:mouse_move, 759, 624, 2, 455, 468]
+[:mouse_move, 767, 624, 2, 456, 468]
+[:mouse_move, 776, 625, 2, 457, 469]
+[:mouse_move, 787, 627, 2, 458, 469]
+[:mouse_move, 795, 629, 2, 459, 470]
+[:mouse_move, 797, 630, 2, 460, 470]
+[:mouse_move, 798, 630, 2, 461, 471]
+[:mouse_button_pressed, 1, 0, 1, 462, 476]
+[:mouse_move, 799, 630, 2, 463, 476]
+[:mouse_button_up, 1, 0, 1, 464, 478]
+[:mouse_move, 799, 625, 2, 465, 478]
+[:mouse_move, 800, 615, 2, 466, 479]
+[:mouse_move, 801, 602, 2, 467, 480]
+[:mouse_move, 801, 590, 2, 468, 481]
+[:mouse_move, 801, 580, 2, 469, 481]
+[:mouse_move, 801, 571, 2, 470, 482]
+[:mouse_move, 801, 570, 2, 471, 482]
+[:mouse_move, 801, 569, 2, 472, 483]
+[:mouse_move, 801, 568, 2, 473, 485]
+[:mouse_move, 802, 567, 2, 474, 487]
+[:mouse_move, 803, 567, 2, 475, 488]
+[:mouse_button_pressed, 1, 0, 1, 476, 491]
+[:mouse_button_up, 1, 0, 1, 477, 493]
+[:mouse_move, 804, 567, 2, 478, 494]
+[:mouse_move, 811, 567, 2, 479, 495]
+[:mouse_move, 822, 567, 2, 480, 495]
+[:mouse_move, 837, 567, 2, 481, 496]
+[:mouse_move, 850, 567, 2, 482, 496]
+[:mouse_move, 861, 567, 2, 483, 497]
+[:mouse_move, 873, 568, 2, 484, 497]
+[:mouse_move, 875, 568, 2, 485, 498]
+[:mouse_move, 876, 568, 2, 486, 500]
+[:mouse_move, 877, 568, 2, 487, 501]
+[:mouse_move, 877, 569, 2, 488, 501]
+[:mouse_move, 868, 570, 2, 489, 516]
+[:mouse_move, 850, 574, 2, 490, 516]
+[:mouse_move, 835, 577, 2, 491, 517]
+[:mouse_move, 818, 577, 2, 492, 517]
+[:mouse_move, 810, 577, 2, 493, 518]
+[:mouse_move, 810, 578, 2, 494, 519]
+[:mouse_move, 813, 578, 2, 495, 520]
+[:mouse_move, 816, 578, 2, 496, 521]
+[:mouse_move, 819, 578, 2, 497, 521]
+[:mouse_move, 820, 578, 2, 498, 522]
+[:mouse_button_pressed, 1, 0, 1, 499, 526]
+[:mouse_button_up, 1, 0, 1, 500, 527]
+[:mouse_move, 822, 579, 2, 501, 529]
+[:mouse_move, 823, 581, 2, 502, 530]
+[:mouse_move, 824, 581, 2, 503, 531]
+[:mouse_move, 825, 581, 2, 504, 531]
+[:mouse_move, 829, 581, 2, 505, 531]
+[:mouse_move, 836, 581, 2, 506, 532]
+[:mouse_move, 843, 580, 2, 507, 533]
+[:mouse_move, 852, 577, 2, 508, 534]
+[:mouse_move, 862, 574, 2, 509, 534]
+[:mouse_move, 864, 574, 2, 510, 535]
+[:mouse_move, 865, 574, 2, 511, 541]
+[:mouse_button_pressed, 1, 0, 1, 512, 542]
+[:mouse_button_up, 1, 0, 1, 513, 544]
+[:mouse_move, 866, 581, 2, 514, 545]
+[:mouse_move, 868, 587, 2, 515, 545]
+[:mouse_move, 870, 592, 2, 516, 546]
+[:mouse_move, 871, 595, 2, 517, 546]
+[:mouse_move, 873, 598, 2, 518, 547]
+[:mouse_move, 874, 602, 2, 519, 548]
+[:mouse_move, 875, 608, 2, 520, 548]
+[:mouse_move, 875, 610, 2, 521, 549]
+[:mouse_move, 875, 613, 2, 522, 549]
+[:mouse_move, 875, 616, 2, 523, 550]
+[:mouse_move, 875, 617, 2, 524, 551]
+[:mouse_move, 875, 618, 2, 525, 552]
+[:mouse_move, 874, 620, 2, 526, 553]
+[:mouse_move, 872, 625, 2, 527, 553]
+[:mouse_move, 871, 627, 2, 528, 554]
+[:mouse_move, 871, 628, 2, 529, 554]
+[:mouse_move, 871, 629, 2, 530, 555]
+[:mouse_move, 870, 630, 2, 531, 556]
+[:mouse_button_pressed, 1, 0, 1, 532, 558]
+[:mouse_move, 871, 630, 2, 533, 558]
+[:mouse_button_up, 1, 0, 1, 534, 560]
+[:mouse_move, 869, 630, 2, 535, 564]
+[:mouse_move, 864, 631, 2, 536, 565]
+[:mouse_move, 857, 632, 2, 537, 566]
+[:mouse_move, 845, 633, 2, 538, 567]
+[:mouse_move, 830, 635, 2, 539, 567]
+[:mouse_move, 815, 636, 2, 540, 568]
+[:mouse_move, 800, 636, 2, 541, 568]
+[:mouse_move, 782, 636, 2, 542, 569]
+[:mouse_move, 773, 636, 2, 543, 570]
+[:mouse_move, 764, 636, 2, 544, 570]
+[:mouse_move, 757, 636, 2, 545, 571]
+[:mouse_move, 748, 636, 2, 546, 571]
+[:mouse_move, 741, 634, 2, 547, 572]
+[:mouse_move, 734, 634, 2, 548, 573]
+[:mouse_move, 728, 634, 2, 549, 574]
+[:mouse_move, 720, 634, 2, 550, 574]
+[:mouse_move, 713, 633, 2, 551, 575]
+[:mouse_move, 723, 632, 2, 552, 579]
+[:mouse_move, 734, 629, 2, 553, 580]
+[:mouse_move, 745, 626, 2, 554, 581]
+[:mouse_move, 761, 623, 2, 555, 581]
+[:mouse_move, 784, 617, 2, 556, 582]
+[:mouse_move, 811, 610, 2, 557, 582]
+[:mouse_move, 834, 601, 2, 558, 583]
+[:mouse_move, 850, 594, 2, 559, 584]
+[:mouse_move, 857, 590, 2, 560, 584]
+[:mouse_move, 858, 589, 2, 561, 585]
+[:mouse_move, 858, 588, 2, 562, 585]
+[:mouse_move, 858, 587, 2, 563, 586]
+[:mouse_move, 858, 586, 2, 564, 587]
+[:mouse_move, 858, 585, 2, 565, 588]
+[:mouse_move, 858, 584, 2, 566, 593]
+[:mouse_button_pressed, 1, 0, 1, 567, 595]
+[:mouse_button_up, 1, 0, 1, 568, 597]
+[:mouse_move, 851, 587, 2, 569, 599]
+[:mouse_move, 840, 590, 2, 570, 599]
+[:mouse_move, 825, 594, 2, 571, 600]
+[:mouse_move, 803, 600, 2, 572, 600]
+[:mouse_move, 777, 605, 2, 573, 601]
+[:mouse_move, 751, 607, 2, 574, 602]
+[:mouse_move, 729, 611, 2, 575, 602]
+[:mouse_move, 713, 614, 2, 576, 603]
+[:mouse_move, 701, 615, 2, 577, 603]
+[:mouse_move, 695, 615, 2, 578, 604]
+[:mouse_move, 694, 616, 2, 579, 605]
+[:mouse_move, 692, 615, 2, 580, 605]
+[:mouse_move, 690, 614, 2, 581, 606]
+[:mouse_move, 689, 614, 2, 582, 607]
+[:mouse_move, 688, 613, 2, 583, 607]
+[:mouse_move, 688, 610, 2, 584, 608]
+[:mouse_move, 687, 605, 2, 585, 608]
+[:mouse_move, 686, 598, 2, 586, 609]
+[:mouse_move, 686, 589, 2, 587, 610]
+[:mouse_move, 686, 582, 2, 588, 610]
+[:mouse_move, 687, 576, 2, 589, 611]
+[:mouse_move, 688, 576, 2, 590, 611]
+[:mouse_move, 688, 575, 2, 591, 612]
+[:mouse_move, 689, 574, 2, 592, 613]
+[:mouse_move, 689, 573, 2, 593, 613]
+[:mouse_move, 690, 573, 2, 594, 614]
+[:mouse_button_pressed, 1, 0, 1, 595, 615]
+[:mouse_move, 690, 572, 2, 596, 616]
+[:mouse_button_up, 1, 0, 1, 597, 617]
+[:mouse_move, 690, 573, 2, 598, 617]
+[:mouse_move, 690, 574, 2, 599, 619]
+[:mouse_move, 690, 575, 2, 600, 620]
+[:mouse_move, 690, 576, 2, 601, 621]
+[:mouse_move, 690, 578, 2, 602, 621]
+[:mouse_move, 690, 579, 2, 603, 622]
+[:mouse_move, 690, 583, 2, 604, 622]
+[:mouse_move, 691, 594, 2, 605, 622]
+[:mouse_move, 693, 605, 2, 606, 623]
+[:mouse_move, 696, 614, 2, 607, 624]
+[:mouse_move, 698, 619, 2, 608, 625]
+[:mouse_move, 699, 621, 2, 609, 625]
+[:mouse_move, 700, 622, 2, 610, 626]
+[:mouse_move, 701, 622, 2, 611, 634]
+[:mouse_move, 702, 622, 2, 612, 649]
+[:mouse_move, 702, 621, 2, 613, 656]
+[:mouse_move, 705, 620, 2, 614, 656]
+[:mouse_move, 718, 614, 2, 615, 657]
+[:mouse_move, 750, 600, 2, 616, 657]
+[:mouse_move, 811, 576, 2, 617, 658]
+[:mouse_move, 895, 538, 2, 618, 659]
+[:mouse_move, 984, 489, 2, 619, 659]
+[:mouse_move, 1076, 432, 2, 620, 660]
+[:mouse_move, 1151, 376, 2, 621, 661]
+[:mouse_move, 1205, 336, 2, 622, 661]
+[:mouse_move, 1232, 312, 2, 623, 662]
+[:mouse_move, 1244, 292, 2, 624, 662]
+[:mouse_move, 1244, 286, 2, 625, 663]
+[:mouse_move, 1243, 284, 2, 626, 663]
+[:mouse_move, 1244, 284, 2, 627, 667]
+[:key_down_raw, 96, 0, 2, 628, 675]
+[:mouse_move, 1243, 284, 2, 629, 676]
+[:mouse_move, 1243, 283, 2, 630, 676]
+[:mouse_move, 1243, 282, 2, 631, 676]
+[:mouse_move, 1243, 281, 2, 632, 677]
+[:key_up_raw, 96, 0, 2, 633, 677]
+[:mouse_move, 1243, 280, 2, 634, 677]
+[:mouse_move, 1242, 279, 2, 635, 678]
+[:mouse_move, 1242, 277, 2, 636, 678]
+[:mouse_move, 1242, 274, 2, 637, 679]
+[:mouse_move, 1241, 271, 2, 638, 679]
+[:mouse_move, 1239, 268, 2, 639, 680]
+[:mouse_move, 1237, 264, 2, 640, 680]
+[:mouse_move, 1233, 261, 2, 641, 681]
+[:mouse_move, 1231, 259, 2, 642, 682]
+[:mouse_move, 1231, 258, 2, 643, 682]
+[:mouse_move, 1230, 256, 2, 644, 683]
+[:mouse_move, 1229, 255, 2, 645, 683]
+[:mouse_move, 1227, 252, 2, 646, 684]
+[:mouse_move, 1222, 247, 2, 647, 685]
+[:mouse_move, 1219, 244, 2, 648, 685]
+[:mouse_move, 1217, 242, 2, 649, 685]
+[:mouse_move, 1216, 241, 2, 650, 686]
+[:mouse_move, 1214, 240, 2, 651, 686]
+[:mouse_move, 1206, 237, 2, 652, 687]
+[:mouse_move, 1194, 232, 2, 653, 688]
+[:mouse_move, 1176, 228, 2, 654, 688]
+[:mouse_move, 1161, 224, 2, 655, 688]
+[:mouse_move, 1157, 224, 2, 656, 689]
+[:mouse_move, 1154, 222, 2, 657, 689]
+[:mouse_move, 1148, 217, 2, 658, 690]
+[:mouse_move, 1139, 205, 2, 659, 691]
+[:mouse_move, 1127, 186, 2, 660, 691]
+[:mouse_move, 1118, 165, 2, 661, 691]
+[:mouse_move, 1109, 140, 2, 662, 692]
+[:mouse_move, 1105, 120, 2, 663, 692]
+[:mouse_move, 1107, 107, 2, 664, 693]
+[:mouse_move, 1108, 105, 2, 665, 693]
+[:mouse_move, 1108, 104, 2, 666, 694]
+[:mouse_move, 1100, 103, 2, 667, 697]
+[:mouse_move, 1085, 101, 2, 668, 697]
+[:mouse_move, 1067, 99, 2, 669, 698]
+[:mouse_move, 1051, 96, 2, 670, 698]
+[:mouse_move, 1026, 94, 2, 671, 698]
+[:mouse_move, 988, 90, 2, 672, 699]
+[:mouse_move, 919, 86, 2, 673, 700]
+[:mouse_move, 868, 83, 2, 674, 700]
+[:mouse_move, 822, 83, 2, 675, 701]
+[:mouse_move, 796, 85, 2, 676, 701]
+[:mouse_move, 787, 87, 2, 677, 701]
+[:mouse_move, 786, 88, 2, 678, 702]
+[:mouse_move, 787, 88, 2, 679, 710]
+[:mouse_move, 789, 88, 2, 680, 718]
+[:mouse_move, 790, 89, 2, 681, 720]
+[:key_down_raw, 13, 0, 2, 682, 730]