summaryrefslogtreecommitdiffhomepage
path: root/samples/02_input_basics
diff options
context:
space:
mode:
authorAmir Rajan <[email protected]>2020-09-11 02:02:01 -0500
committerAmir Rajan <[email protected]>2020-09-11 02:02:57 -0500
commit33ec37b141e896b47ed642923fd33b0c658ae9fb (patch)
treea40d3e5d41beeb06508200078f6f26b0ee57d6a4 /samples/02_input_basics
parent958cf43779d2bf528869e80511c4c4f2a433b2db (diff)
downloaddragonruby-game-toolkit-contrib-33ec37b141e896b47ed642923fd33b0c658ae9fb.tar.gz
dragonruby-game-toolkit-contrib-33ec37b141e896b47ed642923fd33b0c658ae9fb.zip
synced samples
Diffstat (limited to 'samples/02_input_basics')
-rw-r--r--samples/02_input_basics/01_keyboard/app/main.rb170
-rw-r--r--samples/02_input_basics/01_keyboard/license-for-sample.txt9
-rw-r--r--samples/02_input_basics/01_keyboard/replay.txt814
-rw-r--r--samples/02_input_basics/02_mouse/app/main.rb87
-rw-r--r--samples/02_input_basics/02_mouse/license-for-sample.txt9
-rw-r--r--samples/02_input_basics/02_mouse/replay.txt893
-rw-r--r--samples/02_input_basics/03_mouse_point_to_rect/app/main.rb90
-rw-r--r--samples/02_input_basics/03_mouse_point_to_rect/license-for-sample.txt9
-rw-r--r--samples/02_input_basics/03_mouse_point_to_rect/replay.txt515
-rw-r--r--samples/02_input_basics/04_mouse_rect_to_rect/app/main.rb97
-rw-r--r--samples/02_input_basics/04_mouse_rect_to_rect/license-for-sample.txt9
-rw-r--r--samples/02_input_basics/04_mouse_rect_to_rect/replay.txt376
-rw-r--r--samples/02_input_basics/05_controller/app/main.rb126
-rw-r--r--samples/02_input_basics/05_controller/license-for-sample.txt9
-rw-r--r--samples/02_input_basics/05_controller/replay.txt1062
15 files changed, 4275 insertions, 0 deletions
diff --git a/samples/02_input_basics/01_keyboard/app/main.rb b/samples/02_input_basics/01_keyboard/app/main.rb
new file mode 100644
index 0000000..ee5c8cf
--- /dev/null
+++ b/samples/02_input_basics/01_keyboard/app/main.rb
@@ -0,0 +1,170 @@
+=begin
+
+APIs listing that haven't been encountered in a previous sample apps:
+
+- args.inputs.keyboard.key_up.KEY: The value of the properties will be set
+ to the frame that the key_up event occurred (the frame correlates
+ to args.state.tick_count). Otherwise the value will be nil. For a
+ full listing of keys, take a look at mygame/documentation/06-keyboard.md.
+- args.state.PROPERTY: The state property on args is a dynamic
+ structure. You can define ANY property here with ANY type of
+ arbitrary nesting. Properties defined on args.state will be retained
+ across frames. If you attempt access a property that doesn't exist
+ on args.state, it will simply return nil (no exception will be thrown).
+
+=end
+
+# Along with outputs, inputs are also an essential part of video game development
+# DragonRuby can take input from keyboards, mouse, and controllers.
+# This sample app will cover keyboard input.
+
+# args.inputs.keyboard.key_up.a will check to see if the a key has been pressed
+# This will work with the other keys as well
+
+
+def tick args
+ tick_instructions args, "Sample app shows how keyboard events are registered and accessed.", 360
+ # Notice how small_font accounts for all the remaining parameters
+ args.outputs.labels << [460, row_to_px(args, 0), "Current game time: #{args.state.tick_count}", small_font]
+ args.outputs.labels << [460, row_to_px(args, 2), "Keyboard input: args.inputs.keyboard.key_up.h", small_font]
+ args.outputs.labels << [460, row_to_px(args, 3), "Press \"h\" on the keyboard.", small_font]
+
+ # Input on a specifc key can be found through args.inputs.keyboard.key_up followed by the key
+ if args.inputs.keyboard.key_up.h
+ args.state.h_pressed_at = args.state.tick_count
+ end
+
+ # This code simplifies to if args.state.h_pressed_at has not been initialized, set it to false
+ args.state.h_pressed_at ||= false
+
+ if args.state.h_pressed_at
+ args.outputs.labels << [460, row_to_px(args, 4), "\"h\" was pressed at time: #{args.state.h_pressed_at}", small_font]
+ else
+ args.outputs.labels << [460, row_to_px(args, 4), "\"h\" has never been pressed.", small_font]
+ end
+
+ tick_help_text args
+end
+
+def small_font
+ # This method provides some values for the construction of labels
+ # Specifically, Size, Alignment, & RGBA
+ # This makes it so that custom parameters don't have to be repeatedly typed.
+ # Additionally "small_font" provides programmers with more information than some numbers
+ [-2, 0, 0, 0, 0, 255]
+end
+
+def row_to_px args, row_number
+ # This takes a row_number and converts it to pixels DragonRuby understands.
+ # Row 0 starts 5 units below the top of the grid
+ # Each row afterward is 20 units lower
+ args.grid.top.shift_down(5).shift_down(20 * row_number)
+end
+
+# Don't worry about understanding the code within this method just yet.
+# This method shows you the help text within the game.
+def tick_help_text args
+ return unless args.state.h_pressed_at
+
+ args.state.key_value_history ||= {}
+ args.state.key_down_value_history ||= {}
+ args.state.key_held_value_history ||= {}
+ args.state.key_up_value_history ||= {}
+
+ if (args.inputs.keyboard.key_down.truthy_keys.length > 0 ||
+ args.inputs.keyboard.key_held.truthy_keys.length > 0 ||
+ args.inputs.keyboard.key_up.truthy_keys.length > 0)
+ args.state.help_available = true
+ args.state.no_activity_debounce = nil
+ else
+ args.state.no_activity_debounce ||= 5.seconds
+ args.state.no_activity_debounce -= 1
+ if args.state.no_activity_debounce <= 0
+ args.state.help_available = false
+ args.state.key_value_history = {}
+ args.state.key_down_value_history = {}
+ args.state.key_held_value_history = {}
+ args.state.key_up_value_history = {}
+ end
+ end
+
+ args.outputs.labels << [10, row_to_px(args, 6), "Advanced Help:", small_font]
+
+ if !args.state.help_available
+ args.outputs.labels << [10, row_to_px(args, 7), "Press a key and I'll show code to access the key and what value will be returned if you used the code.", small_font]
+ return
+ end
+
+ args.outputs.labels << [10 , row_to_px(args, 7), "args.inputs.keyboard", small_font]
+ args.outputs.labels << [330, row_to_px(args, 7), "args.inputs.keyboard.key_down", small_font]
+ args.outputs.labels << [650, row_to_px(args, 7), "args.inputs.keyboard.key_held", small_font]
+ args.outputs.labels << [990, row_to_px(args, 7), "args.inputs.keyboard.key_up", small_font]
+
+ fill_history args, :key_value_history, :down_or_held, nil
+ fill_history args, :key_down_value_history, :down, :key_down
+ fill_history args, :key_held_value_history, :held, :key_held
+ fill_history args, :key_up_value_history, :up, :key_up
+
+ render_help_labels args, :key_value_history, :down_or_held, nil, 10
+ render_help_labels args, :key_down_value_history, :down, :key_down, 330
+ render_help_labels args, :key_held_value_history, :held, :key_held, 650
+ render_help_labels args, :key_up_value_history, :up, :key_up, 990
+end
+
+def fill_history args, history_key, state_key, keyboard_method
+ fill_single_history args, history_key, state_key, keyboard_method, :raw_key
+ fill_single_history args, history_key, state_key, keyboard_method, :char
+ args.inputs.keyboard.keys[state_key].each do |key_name|
+ fill_single_history args, history_key, state_key, keyboard_method, key_name
+ end
+end
+
+def fill_single_history args, history_key, state_key, keyboard_method, key_name
+ current_value = args.inputs.keyboard.send(key_name)
+ if keyboard_method
+ current_value = args.inputs.keyboard.send(keyboard_method).send(key_name)
+ end
+ args.state.as_hash[history_key][key_name] ||= []
+ args.state.as_hash[history_key][key_name] << current_value
+ args.state.as_hash[history_key][key_name] = args.state.as_hash[history_key][key_name].reverse.uniq.take(3).reverse
+end
+
+def render_help_labels args, history_key, state_key, keyboard_method, x
+ idx = 8
+ args.outputs.labels << args.state
+ .as_hash[history_key]
+ .keys
+ .reverse
+ .map
+ .with_index do |k, i|
+ v = args.state.as_hash[history_key][k]
+ current_value = args.inputs.keyboard.send(k)
+ if keyboard_method
+ current_value = args.inputs.keyboard.send(keyboard_method).send(k)
+ end
+ idx += 2
+ [
+ [x, row_to_px(args, idx - 2),
+ " .#{k} is #{current_value || "nil"}",
+ small_font],
+ [x, row_to_px(args, idx - 1),
+ " was #{v}",
+ small_font]
+ ]
+ end
+end
+
+
+def tick_instructions args, text, y = 715
+ return if args.state.key_event_occurred
+ if args.inputs.mouse.click ||
+ args.inputs.keyboard.directional_vector ||
+ args.inputs.keyboard.key_down.enter ||
+ args.inputs.keyboard.key_down.escape
+ args.state.key_event_occurred = true
+ end
+
+ args.outputs.debug << [0, y - 50, 1280, 60].solid
+ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label
+ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label
+end
diff --git a/samples/02_input_basics/01_keyboard/license-for-sample.txt b/samples/02_input_basics/01_keyboard/license-for-sample.txt
new file mode 100644
index 0000000..100dcec
--- /dev/null
+++ b/samples/02_input_basics/01_keyboard/license-for-sample.txt
@@ -0,0 +1,9 @@
+Copyright 2019 DragonRuby LLC
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/samples/02_input_basics/01_keyboard/replay.txt b/samples/02_input_basics/01_keyboard/replay.txt
new file mode 100644
index 0000000..ac3ff2d
--- /dev/null
+++ b/samples/02_input_basics/01_keyboard/replay.txt
@@ -0,0 +1,814 @@
+replay_version 2.0
+stopped_at 1283
+seed 100
+recorded_at Sun Sep 29 21:23:38 2019
+[:mouse_move, 39, 552, 2, 1, 54]
+[:mouse_move, 87, 534, 2, 2, 55]
+[:mouse_move, 96, 531, 2, 3, 56]
+[:mouse_move, 115, 523, 2, 4, 57]
+[:mouse_move, 122, 520, 2, 5, 58]
+[:mouse_move, 136, 513, 2, 6, 59]
+[:mouse_move, 143, 510, 2, 7, 60]
+[:mouse_move, 147, 507, 2, 8, 61]
+[:mouse_move, 168, 492, 2, 9, 62]
+[:mouse_move, 181, 479, 2, 10, 63]
+[:mouse_move, 233, 424, 2, 11, 64]
+[:mouse_move, 259, 390, 2, 12, 65]
+[:mouse_move, 286, 353, 2, 13, 66]
+[:mouse_move, 326, 301, 2, 14, 67]
+[:mouse_move, 335, 287, 2, 15, 68]
+[:mouse_move, 368, 240, 2, 16, 69]
+[:mouse_move, 377, 221, 2, 17, 70]
+[:mouse_move, 395, 169, 2, 18, 71]
+[:mouse_move, 401, 127, 2, 19, 72]
+[:mouse_move, 403, 122, 2, 20, 86]
+[:mouse_move, 422, 96, 2, 21, 87]
+[:mouse_move, 431, 84, 2, 22, 88]
+[:mouse_move, 439, 73, 2, 23, 89]
+[:mouse_move, 450, 57, 2, 24, 90]
+[:mouse_move, 454, 53, 2, 25, 91]
+[:mouse_move, 462, 43, 2, 26, 92]
+[:mouse_move, 465, 39, 2, 27, 93]
+[:mouse_move, 468, 35, 2, 28, 94]
+[:mouse_move, 469, 35, 2, 29, 95]
+[:mouse_move, 470, 34, 2, 30, 96]
+[:mouse_move, 469, 34, 2, 31, 100]
+[:mouse_move, 467, 34, 2, 32, 101]
+[:mouse_move, 459, 37, 2, 33, 102]
+[:mouse_move, 455, 37, 2, 34, 103]
+[:mouse_move, 449, 38, 2, 35, 104]
+[:mouse_move, 444, 38, 2, 36, 105]
+[:mouse_move, 440, 37, 2, 37, 106]
+[:mouse_move, 440, 35, 2, 38, 107]
+[:mouse_move, 439, 31, 2, 39, 108]
+[:mouse_move, 439, 29, 2, 40, 109]
+[:mouse_move, 440, 24, 2, 41, 110]
+[:mouse_move, 441, 23, 2, 42, 111]
+[:mouse_move, 445, 20, 2, 43, 112]
+[:mouse_move, 446, 19, 2, 44, 113]
+[:mouse_move, 451, 18, 2, 45, 114]
+[:mouse_move, 453, 18, 2, 46, 115]
+[:mouse_move, 456, 18, 2, 47, 116]
+[:mouse_move, 463, 18, 2, 48, 117]
+[:mouse_move, 466, 18, 2, 49, 118]
+[:mouse_move, 474, 18, 2, 50, 119]
+[:mouse_move, 478, 18, 2, 51, 120]
+[:mouse_move, 489, 18, 2, 52, 121]
+[:mouse_move, 495, 20, 2, 53, 122]
+[:mouse_move, 508, 22, 2, 54, 123]
+[:mouse_move, 513, 23, 2, 55, 124]
+[:mouse_move, 525, 24, 2, 56, 125]
+[:mouse_move, 528, 24, 2, 57, 126]
+[:mouse_move, 539, 25, 2, 58, 127]
+[:mouse_move, 541, 25, 2, 59, 128]
+[:mouse_move, 547, 25, 2, 60, 129]
+[:mouse_move, 550, 25, 2, 61, 130]
+[:mouse_move, 555, 25, 2, 62, 131]
+[:mouse_move, 557, 25, 2, 63, 132]
+[:mouse_move, 564, 25, 2, 64, 133]
+[:mouse_move, 567, 25, 2, 65, 134]
+[:mouse_move, 571, 25, 2, 66, 135]
+[:mouse_move, 574, 25, 2, 67, 136]
+[:mouse_move, 581, 26, 2, 68, 137]
+[:mouse_move, 585, 27, 2, 69, 138]
+[:mouse_move, 592, 28, 2, 70, 139]
+[:mouse_move, 596, 28, 2, 71, 140]
+[:mouse_move, 602, 29, 2, 72, 141]
+[:mouse_move, 605, 30, 2, 73, 142]
+[:mouse_move, 610, 30, 2, 74, 143]
+[:mouse_move, 617, 30, 2, 75, 144]
+[:mouse_move, 619, 30, 2, 76, 145]
+[:mouse_move, 628, 30, 2, 77, 146]
+[:mouse_move, 629, 30, 2, 78, 147]
+[:mouse_move, 634, 30, 2, 79, 148]
+[:mouse_move, 636, 29, 2, 80, 149]
+[:mouse_move, 639, 29, 2, 81, 150]
+[:mouse_move, 640, 28, 2, 82, 151]
+[:mouse_move, 642, 28, 2, 83, 152]
+[:mouse_move, 643, 28, 2, 84, 153]
+[:mouse_move, 645, 27, 2, 85, 154]
+[:mouse_move, 646, 27, 2, 86, 155]
+[:mouse_move, 647, 26, 2, 87, 156]
+[:mouse_move, 648, 26, 2, 88, 158]
+[:mouse_move, 649, 26, 2, 89, 160]
+[:mouse_move, 648, 26, 2, 90, 192]
+[:mouse_move, 642, 26, 2, 91, 193]
+[:mouse_move, 638, 26, 2, 92, 194]
+[:mouse_move, 628, 27, 2, 93, 195]
+[:mouse_move, 623, 28, 2, 94, 196]
+[:mouse_move, 618, 29, 2, 95, 197]
+[:mouse_move, 607, 31, 2, 96, 198]
+[:mouse_move, 600, 34, 2, 97, 199]
+[:mouse_move, 591, 35, 2, 98, 200]
+[:mouse_move, 586, 37, 2, 99, 201]
+[:mouse_move, 577, 39, 2, 100, 202]
+[:mouse_move, 574, 39, 2, 101, 203]
+[:mouse_move, 564, 41, 2, 102, 204]
+[:mouse_move, 560, 42, 2, 103, 205]
+[:mouse_move, 552, 43, 2, 104, 206]
+[:mouse_move, 548, 43, 2, 105, 207]
+[:mouse_move, 538, 44, 2, 106, 208]
+[:mouse_move, 533, 44, 2, 107, 209]
+[:mouse_move, 525, 44, 2, 108, 210]
+[:mouse_move, 520, 44, 2, 109, 211]
+[:mouse_move, 505, 44, 2, 110, 212]
+[:mouse_move, 501, 45, 2, 111, 213]
+[:mouse_move, 489, 46, 2, 112, 214]
+[:mouse_move, 487, 46, 2, 113, 215]
+[:mouse_move, 480, 48, 2, 114, 216]
+[:mouse_move, 477, 48, 2, 115, 217]
+[:mouse_move, 471, 51, 2, 116, 218]
+[:mouse_move, 467, 53, 2, 117, 219]
+[:mouse_move, 462, 55, 2, 118, 220]
+[:mouse_move, 459, 57, 2, 119, 221]
+[:mouse_move, 456, 59, 2, 120, 222]
+[:mouse_move, 455, 60, 2, 121, 223]
+[:mouse_move, 454, 61, 2, 122, 224]
+[:mouse_move, 453, 61, 2, 123, 225]
+[:mouse_move, 457, 61, 2, 124, 242]
+[:mouse_move, 465, 63, 2, 125, 243]
+[:mouse_move, 471, 64, 2, 126, 244]
+[:mouse_move, 486, 67, 2, 127, 245]
+[:mouse_move, 498, 68, 2, 128, 246]
+[:mouse_move, 523, 70, 2, 129, 247]
+[:mouse_move, 535, 70, 2, 130, 248]
+[:mouse_move, 551, 70, 2, 131, 249]
+[:mouse_move, 560, 70, 2, 132, 250]
+[:mouse_move, 571, 70, 2, 133, 251]
+[:mouse_move, 578, 70, 2, 134, 252]
+[:mouse_move, 583, 70, 2, 135, 253]
+[:mouse_move, 588, 70, 2, 136, 254]
+[:mouse_move, 590, 70, 2, 137, 255]
+[:mouse_move, 592, 70, 2, 138, 256]
+[:mouse_move, 593, 70, 2, 139, 257]
+[:mouse_move, 595, 70, 2, 140, 258]
+[:mouse_move, 596, 70, 2, 141, 259]
+[:mouse_move, 597, 70, 2, 142, 260]
+[:mouse_move, 598, 70, 2, 143, 261]
+[:mouse_move, 600, 70, 2, 144, 262]
+[:mouse_move, 601, 70, 2, 145, 263]
+[:mouse_move, 603, 70, 2, 146, 264]
+[:mouse_move, 605, 70, 2, 147, 265]
+[:mouse_move, 608, 70, 2, 148, 266]
+[:mouse_move, 609, 70, 2, 149, 267]
+[:mouse_move, 613, 70, 2, 150, 268]
+[:mouse_move, 614, 70, 2, 151, 269]
+[:mouse_move, 616, 69, 2, 152, 270]
+[:mouse_move, 617, 69, 2, 153, 271]
+[:mouse_move, 619, 68, 2, 154, 272]
+[:mouse_move, 620, 68, 2, 155, 273]
+[:mouse_move, 621, 68, 2, 156, 274]
+[:mouse_move, 622, 67, 2, 157, 275]
+[:mouse_move, 623, 67, 2, 158, 276]
+[:mouse_move, 624, 67, 2, 159, 278]
+[:mouse_move, 625, 67, 2, 160, 279]
+[:mouse_move, 626, 66, 2, 161, 280]
+[:mouse_move, 628, 66, 2, 162, 281]
+[:mouse_move, 629, 66, 2, 163, 282]
+[:mouse_move, 631, 66, 2, 164, 283]
+[:mouse_move, 633, 66, 2, 165, 284]
+[:mouse_move, 638, 65, 2, 166, 285]
+[:mouse_move, 640, 65, 2, 167, 286]
+[:mouse_move, 646, 65, 2, 168, 287]
+[:mouse_move, 648, 65, 2, 169, 288]
+[:mouse_move, 656, 65, 2, 170, 289]
+[:mouse_move, 659, 65, 2, 171, 290]
+[:mouse_move, 666, 64, 2, 172, 291]
+[:mouse_move, 668, 64, 2, 173, 292]
+[:mouse_move, 675, 63, 2, 174, 293]
+[:mouse_move, 677, 63, 2, 175, 294]
+[:mouse_move, 682, 63, 2, 176, 295]
+[:mouse_move, 684, 62, 2, 177, 296]
+[:mouse_move, 688, 62, 2, 178, 297]
+[:mouse_move, 690, 61, 2, 179, 298]
+[:mouse_move, 693, 61, 2, 180, 299]
+[:mouse_move, 696, 60, 2, 181, 300]
+[:mouse_move, 699, 59, 2, 182, 301]
+[:mouse_move, 701, 58, 2, 183, 302]
+[:mouse_move, 706, 58, 2, 184, 303]
+[:mouse_move, 708, 57, 2, 185, 304]
+[:mouse_move, 715, 56, 2, 186, 305]
+[:mouse_move, 718, 56, 2, 187, 306]
+[:mouse_move, 721, 56, 2, 188, 307]
+[:mouse_move, 726, 54, 2, 189, 308]
+[:mouse_move, 731, 53, 2, 190, 309]
+[:mouse_move, 732, 53, 2, 191, 325]
+[:mouse_move, 736, 54, 2, 192, 326]
+[:mouse_move, 739, 55, 2, 193, 327]
+[:mouse_move, 745, 57, 2, 194, 328]
+[:mouse_move, 747, 58, 2, 195, 329]
+[:mouse_move, 752, 59, 2, 196, 330]
+[:mouse_move, 757, 61, 2, 197, 331]
+[:mouse_move, 760, 61, 2, 198, 332]
+[:mouse_move, 767, 63, 2, 199, 333]
+[:mouse_move, 771, 63, 2, 200, 334]
+[:mouse_move, 775, 63, 2, 201, 335]
+[:mouse_move, 778, 63, 2, 202, 336]
+[:mouse_move, 781, 64, 2, 203, 337]
+[:mouse_move, 782, 64, 2, 204, 338]
+[:mouse_move, 783, 64, 2, 205, 339]
+[:mouse_move, 784, 64, 2, 206, 340]
+[:mouse_move, 784, 65, 2, 207, 341]
+[:mouse_move, 785, 65, 2, 208, 342]
+[:mouse_move, 787, 65, 2, 209, 343]
+[:mouse_move, 789, 66, 2, 210, 344]
+[:mouse_move, 795, 67, 2, 211, 345]
+[:mouse_move, 797, 67, 2, 212, 346]
+[:mouse_move, 803, 67, 2, 213, 347]
+[:mouse_move, 805, 67, 2, 214, 348]
+[:mouse_move, 810, 67, 2, 215, 349]
+[:mouse_move, 811, 66, 2, 216, 350]
+[:mouse_move, 814, 64, 2, 217, 351]
+[:mouse_move, 814, 63, 2, 218, 352]
+[:mouse_move, 815, 61, 2, 219, 353]
+[:mouse_move, 816, 58, 2, 220, 354]
+[:mouse_move, 817, 55, 2, 221, 355]
+[:mouse_move, 817, 53, 2, 222, 356]
+[:mouse_move, 818, 49, 2, 223, 357]
+[:mouse_move, 818, 47, 2, 224, 358]
+[:mouse_move, 818, 46, 2, 225, 359]
+[:mouse_move, 817, 42, 2, 226, 360]
+[:mouse_move, 815, 40, 2, 227, 361]
+[:mouse_move, 811, 38, 2, 228, 362]
+[:mouse_move, 805, 35, 2, 229, 363]
+[:mouse_move, 803, 35, 2, 230, 364]
+[:mouse_move, 798, 34, 2, 231, 365]
+[:mouse_move, 796, 34, 2, 232, 366]
+[:mouse_move, 794, 34, 2, 233, 367]
+[:mouse_move, 788, 34, 2, 234, 368]
+[:mouse_move, 785, 34, 2, 235, 369]
+[:mouse_move, 779, 34, 2, 236, 370]
+[:mouse_move, 778, 35, 2, 237, 371]
+[:mouse_move, 772, 37, 2, 238, 372]
+[:mouse_move, 771, 38, 2, 239, 373]
+[:mouse_move, 768, 41, 2, 240, 374]
+[:mouse_move, 767, 42, 2, 241, 375]
+[:mouse_move, 764, 46, 2, 242, 376]
+[:mouse_move, 764, 48, 2, 243, 377]
+[:mouse_move, 762, 53, 2, 244, 378]
+[:mouse_move, 762, 55, 2, 245, 379]
+[:mouse_move, 762, 59, 2, 246, 380]
+[:mouse_move, 762, 62, 2, 247, 381]
+[:mouse_move, 762, 64, 2, 248, 382]
+[:mouse_move, 762, 66, 2, 249, 383]
+[:mouse_move, 762, 68, 2, 250, 384]
+[:mouse_move, 764, 69, 2, 251, 385]
+[:mouse_move, 766, 71, 2, 252, 386]
+[:mouse_move, 773, 73, 2, 253, 387]
+[:mouse_move, 776, 74, 2, 254, 388]
+[:mouse_move, 784, 76, 2, 255, 389]
+[:mouse_move, 793, 76, 2, 256, 390]
+[:mouse_move, 797, 76, 2, 257, 391]
+[:mouse_move, 800, 75, 2, 258, 392]
+[:mouse_move, 806, 71, 2, 259, 393]
+[:mouse_move, 809, 68, 2, 260, 394]
+[:mouse_move, 811, 66, 2, 261, 395]
+[:mouse_move, 814, 63, 2, 262, 396]
+[:mouse_move, 816, 60, 2, 263, 397]
+[:mouse_move, 817, 57, 2, 264, 398]
+[:mouse_move, 819, 51, 2, 265, 399]
+[:mouse_move, 819, 48, 2, 266, 400]
+[:mouse_move, 818, 42, 2, 267, 401]
+[:mouse_move, 817, 39, 2, 268, 402]
+[:mouse_move, 812, 35, 2, 269, 403]
+[:mouse_move, 808, 33, 2, 270, 404]
+[:mouse_move, 800, 30, 2, 271, 405]
+[:mouse_move, 795, 29, 2, 272, 406]
+[:mouse_move, 784, 29, 2, 273, 407]
+[:mouse_move, 778, 29, 2, 274, 408]
+[:mouse_move, 767, 29, 2, 275, 409]
+[:mouse_move, 761, 29, 2, 276, 410]
+[:mouse_move, 752, 34, 2, 277, 411]
+[:mouse_move, 747, 36, 2, 278, 412]
+[:mouse_move, 743, 40, 2, 279, 413]
+[:mouse_move, 741, 43, 2, 280, 414]
+[:mouse_move, 740, 45, 2, 281, 415]
+[:mouse_move, 738, 49, 2, 282, 416]
+[:mouse_move, 738, 53, 2, 283, 417]
+[:mouse_move, 743, 58, 2, 284, 418]
+[:mouse_move, 747, 60, 2, 285, 419]
+[:mouse_move, 756, 62, 2, 286, 420]
+[:mouse_move, 767, 64, 2, 287, 421]
+[:mouse_move, 773, 64, 2, 288, 422]
+[:mouse_move, 785, 64, 2, 289, 423]
+[:mouse_move, 790, 64, 2, 290, 424]
+[:mouse_move, 792, 63, 2, 291, 425]
+[:mouse_move, 798, 61, 2, 292, 426]
+[:mouse_move, 800, 61, 2, 293, 427]
+[:mouse_move, 802, 61, 2, 294, 428]
+[:mouse_move, 802, 60, 2, 295, 429]
+[:mouse_move, 803, 60, 2, 296, 440]
+[:mouse_move, 808, 60, 2, 297, 441]
+[:mouse_move, 814, 60, 2, 298, 442]
+[:mouse_move, 823, 60, 2, 299, 443]
+[:mouse_move, 832, 59, 2, 300, 444]
+[:mouse_move, 836, 59, 2, 301, 445]
+[:mouse_move, 839, 59, 2, 302, 446]
+[:mouse_move, 844, 58, 2, 303, 447]
+[:mouse_move, 845, 58, 2, 304, 449]
+[:mouse_move, 846, 58, 2, 305, 450]
+[:mouse_move, 846, 61, 2, 306, 470]
+[:mouse_move, 846, 64, 2, 307, 471]
+[:mouse_move, 846, 70, 2, 308, 472]
+[:mouse_move, 844, 73, 2, 309, 473]
+[:mouse_move, 835, 83, 2, 310, 474]
+[:mouse_move, 827, 89, 2, 311, 475]
+[:mouse_move, 796, 103, 2, 312, 476]
+[:mouse_move, 778, 107, 2, 313, 477]
+[:mouse_move, 733, 113, 2, 314, 478]
+[:mouse_move, 710, 113, 2, 315, 479]
+[:mouse_move, 675, 114, 2, 316, 480]
+[:mouse_move, 655, 114, 2, 317, 481]
+[:mouse_move, 619, 108, 2, 318, 482]
+[:mouse_move, 613, 107, 2, 319, 483]
+[:mouse_move, 591, 100, 2, 320, 484]
+[:mouse_move, 582, 97, 2, 321, 485]
+[:mouse_move, 567, 93, 2, 322, 486]
+[:mouse_move, 560, 92, 2, 323, 487]
+[:mouse_move, 546, 89, 2, 324, 488]
+[:mouse_move, 538, 88, 2, 325, 489]
+[:mouse_move, 525, 86, 2, 326, 490]
+[:mouse_move, 519, 86, 2, 327, 491]
+[:mouse_move, 510, 85, 2, 328, 492]
+[:mouse_move, 503, 85, 2, 329, 493]
+[:mouse_move, 495, 85, 2, 330, 494]
+[:mouse_move, 492, 85, 2, 331, 495]
+[:mouse_move, 488, 85, 2, 332, 496]
+[:mouse_move, 479, 85, 2, 333, 497]
+[:mouse_move, 473, 85, 2, 334, 498]
+[:mouse_move, 466, 85, 2, 335, 499]
+[:mouse_move, 462, 85, 2, 336, 500]
+[:mouse_move, 457, 85, 2, 337, 501]
+[:mouse_move, 455, 85, 2, 338, 502]
+[:mouse_move, 453, 85, 2, 339, 503]
+[:mouse_move, 452, 85, 2, 340, 504]
+[:mouse_move, 451, 85, 2, 341, 506]
+[:mouse_move, 454, 85, 2, 342, 513]
+[:mouse_move, 457, 85, 2, 343, 514]
+[:mouse_move, 461, 85, 2, 344, 515]
+[:mouse_move, 465, 85, 2, 345, 516]
+[:mouse_move, 471, 85, 2, 346, 517]
+[:mouse_move, 473, 85, 2, 347, 518]
+[:mouse_move, 479, 85, 2, 348, 519]
+[:mouse_move, 484, 85, 2, 349, 520]
+[:mouse_move, 488, 85, 2, 350, 521]
+[:mouse_move, 490, 85, 2, 351, 522]
+[:mouse_move, 492, 85, 2, 352, 523]
+[:mouse_move, 497, 85, 2, 353, 524]
+[:mouse_move, 500, 84, 2, 354, 525]
+[:mouse_move, 505, 84, 2, 355, 526]
+[:mouse_move, 509, 84, 2, 356, 527]
+[:mouse_move, 515, 84, 2, 357, 528]
+[:mouse_move, 518, 84, 2, 358, 529]
+[:mouse_move, 525, 83, 2, 359, 530]
+[:mouse_move, 529, 83, 2, 360, 531]
+[:mouse_move, 537, 82, 2, 361, 532]
+[:mouse_move, 541, 82, 2, 362, 533]
+[:mouse_move, 550, 81, 2, 363, 534]
+[:mouse_move, 554, 80, 2, 364, 535]
+[:mouse_move, 562, 79, 2, 365, 536]
+[:mouse_move, 566, 79, 2, 366, 537]
+[:mouse_move, 574, 78, 2, 367, 538]
+[:mouse_move, 577, 78, 2, 368, 539]
+[:mouse_move, 585, 77, 2, 369, 540]
+[:mouse_move, 587, 77, 2, 370, 541]
+[:mouse_move, 593, 77, 2, 371, 542]
+[:mouse_move, 596, 77, 2, 372, 543]
+[:mouse_move, 600, 77, 2, 373, 544]
+[:mouse_move, 604, 77, 2, 374, 545]
+[:mouse_move, 608, 77, 2, 375, 546]
+[:mouse_move, 610, 77, 2, 376, 547]
+[:mouse_move, 616, 77, 2, 377, 548]
+[:mouse_move, 619, 77, 2, 378, 549]
+[:mouse_move, 621, 78, 2, 379, 550]
+[:mouse_move, 628, 80, 2, 380, 551]
+[:mouse_move, 631, 80, 2, 381, 552]
+[:mouse_move, 637, 82, 2, 382, 553]
+[:mouse_move, 641, 83, 2, 383, 554]
+[:mouse_move, 648, 84, 2, 384, 555]
+[:mouse_move, 651, 84, 2, 385, 556]
+[:mouse_move, 657, 84, 2, 386, 557]
+[:mouse_move, 660, 84, 2, 387, 558]
+[:mouse_move, 665, 84, 2, 388, 559]
+[:mouse_move, 668, 84, 2, 389, 560]
+[:mouse_move, 671, 83, 2, 390, 561]
+[:mouse_move, 673, 83, 2, 391, 562]
+[:mouse_move, 674, 83, 2, 392, 563]
+[:mouse_move, 675, 83, 2, 393, 564]
+[:mouse_move, 676, 83, 2, 394, 566]
+[:mouse_move, 674, 83, 2, 395, 587]
+[:mouse_move, 667, 83, 2, 396, 588]
+[:mouse_move, 661, 84, 2, 397, 589]
+[:mouse_move, 642, 86, 2, 398, 590]
+[:mouse_move, 629, 87, 2, 399, 591]
+[:mouse_move, 598, 89, 2, 400, 592]
+[:mouse_move, 582, 90, 2, 401, 593]
+[:mouse_move, 553, 90, 2, 402, 594]
+[:mouse_move, 547, 90, 2, 403, 595]
+[:mouse_move, 529, 91, 2, 404, 596]
+[:mouse_move, 521, 91, 2, 405, 597]
+[:mouse_move, 514, 91, 2, 406, 598]
+[:mouse_move, 509, 92, 2, 407, 599]
+[:mouse_move, 501, 92, 2, 408, 600]
+[:mouse_move, 499, 93, 2, 409, 601]
+[:mouse_move, 492, 93, 2, 410, 602]
+[:mouse_move, 489, 94, 2, 411, 603]
+[:mouse_move, 485, 94, 2, 412, 604]
+[:mouse_move, 474, 95, 2, 413, 605]
+[:mouse_move, 469, 96, 2, 414, 606]
+[:mouse_move, 462, 96, 2, 415, 607]
+[:mouse_move, 459, 96, 2, 416, 608]
+[:mouse_move, 456, 96, 2, 417, 609]
+[:mouse_move, 454, 96, 2, 418, 610]
+[:mouse_move, 453, 96, 2, 419, 611]
+[:mouse_move, 453, 97, 2, 420, 615]
+[:mouse_move, 455, 98, 2, 421, 617]
+[:mouse_move, 457, 99, 2, 422, 618]
+[:mouse_move, 465, 102, 2, 423, 619]
+[:mouse_move, 470, 104, 2, 424, 620]
+[:mouse_move, 481, 106, 2, 425, 621]
+[:mouse_move, 487, 107, 2, 426, 622]
+[:mouse_move, 499, 109, 2, 427, 623]
+[:mouse_move, 504, 109, 2, 428, 624]
+[:mouse_move, 513, 110, 2, 429, 625]
+[:mouse_move, 518, 110, 2, 430, 626]
+[:mouse_move, 527, 110, 2, 431, 627]
+[:mouse_move, 531, 110, 2, 432, 628]
+[:mouse_move, 538, 108, 2, 433, 629]
+[:mouse_move, 542, 108, 2, 434, 630]
+[:mouse_move, 548, 106, 2, 435, 631]
+[:mouse_move, 549, 106, 2, 436, 632]
+[:mouse_move, 554, 105, 2, 437, 633]
+[:mouse_move, 557, 104, 2, 438, 634]
+[:mouse_move, 560, 104, 2, 439, 635]
+[:mouse_move, 565, 103, 2, 440, 636]
+[:mouse_move, 568, 103, 2, 441, 637]
+[:mouse_move, 573, 102, 2, 442, 638]
+[:mouse_move, 575, 102, 2, 443, 639]
+[:mouse_move, 581, 102, 2, 444, 640]
+[:mouse_move, 585, 102, 2, 445, 641]
+[:mouse_move, 592, 102, 2, 446, 642]
+[:mouse_move, 596, 102, 2, 447, 643]
+[:mouse_move, 604, 102, 2, 448, 644]
+[:mouse_move, 608, 102, 2, 449, 645]
+[:mouse_move, 617, 102, 2, 450, 646]
+[:mouse_move, 622, 102, 2, 451, 647]
+[:mouse_move, 634, 102, 2, 452, 648]
+[:mouse_move, 641, 102, 2, 453, 649]
+[:mouse_move, 655, 102, 2, 454, 650]
+[:mouse_move, 668, 102, 2, 455, 651]
+[:mouse_move, 680, 102, 2, 456, 652]
+[:mouse_move, 687, 102, 2, 457, 653]
+[:mouse_move, 699, 102, 2, 458, 654]
+[:mouse_move, 705, 102, 2, 459, 655]
+[:mouse_move, 712, 102, 2, 460, 656]
+[:mouse_move, 715, 102, 2, 461, 657]
+[:mouse_move, 718, 102, 2, 462, 658]
+[:mouse_move, 719, 102, 2, 463, 660]
+[:mouse_move, 718, 102, 2, 464, 663]
+[:mouse_move, 717, 102, 2, 465, 664]
+[:mouse_move, 713, 102, 2, 466, 665]
+[:mouse_move, 709, 101, 2, 467, 666]
+[:mouse_move, 693, 100, 2, 468, 667]
+[:mouse_move, 673, 99, 2, 469, 668]
+[:mouse_move, 640, 99, 2, 470, 669]
+[:mouse_move, 622, 99, 2, 471, 670]
+[:mouse_move, 585, 99, 2, 472, 671]
+[:mouse_move, 578, 99, 2, 473, 672]
+[:mouse_move, 554, 100, 2, 474, 673]
+[:mouse_move, 550, 100, 2, 475, 674]
+[:mouse_move, 538, 100, 2, 476, 675]
+[:mouse_move, 535, 100, 2, 477, 676]
+[:mouse_move, 532, 100, 2, 478, 677]
+[:mouse_move, 531, 100, 2, 479, 678]
+[:mouse_move, 530, 100, 2, 480, 679]
+[:mouse_move, 529, 100, 2, 481, 681]
+[:mouse_move, 530, 100, 2, 482, 686]
+[:mouse_move, 532, 100, 2, 483, 687]
+[:mouse_move, 542, 104, 2, 484, 688]
+[:mouse_move, 546, 104, 2, 485, 689]
+[:mouse_move, 560, 107, 2, 486, 690]
+[:mouse_move, 567, 107, 2, 487, 691]
+[:mouse_move, 581, 107, 2, 488, 692]
+[:mouse_move, 587, 107, 2, 489, 693]
+[:mouse_move, 593, 103, 2, 490, 694]
+[:mouse_move, 595, 101, 2, 491, 695]
+[:mouse_move, 598, 96, 2, 492, 696]
+[:mouse_move, 599, 93, 2, 493, 697]
+[:mouse_move, 599, 88, 2, 494, 698]
+[:mouse_move, 598, 86, 2, 495, 699]
+[:mouse_move, 589, 78, 2, 496, 700]
+[:mouse_move, 583, 75, 2, 497, 701]
+[:mouse_move, 570, 70, 2, 498, 702]
+[:mouse_move, 563, 68, 2, 499, 703]
+[:mouse_move, 546, 66, 2, 500, 704]
+[:mouse_move, 540, 65, 2, 501, 705]
+[:mouse_move, 526, 65, 2, 502, 706]
+[:mouse_move, 521, 65, 2, 503, 707]
+[:mouse_move, 513, 66, 2, 504, 708]
+[:mouse_move, 510, 68, 2, 505, 709]
+[:mouse_move, 504, 71, 2, 506, 710]
+[:mouse_move, 502, 72, 2, 507, 711]
+[:mouse_move, 499, 76, 2, 508, 712]
+[:mouse_move, 498, 78, 2, 509, 713]
+[:mouse_move, 498, 81, 2, 510, 714]
+[:mouse_move, 498, 87, 2, 511, 715]
+[:mouse_move, 498, 90, 2, 512, 716]
+[:mouse_move, 500, 97, 2, 513, 717]
+[:mouse_move, 500, 98, 2, 514, 718]
+[:mouse_move, 506, 105, 2, 515, 719]
+[:mouse_move, 512, 110, 2, 516, 720]
+[:mouse_move, 523, 115, 2, 517, 721]
+[:mouse_move, 531, 118, 2, 518, 722]
+[:mouse_move, 550, 121, 2, 519, 723]
+[:mouse_move, 555, 121, 2, 520, 724]
+[:mouse_move, 571, 121, 2, 521, 725]
+[:mouse_move, 577, 119, 2, 522, 726]
+[:mouse_move, 586, 113, 2, 523, 727]
+[:mouse_move, 590, 110, 2, 524, 728]
+[:mouse_move, 595, 101, 2, 525, 729]
+[:mouse_move, 598, 94, 2, 526, 730]
+[:mouse_move, 599, 83, 2, 527, 731]
+[:mouse_move, 599, 80, 2, 528, 732]
+[:mouse_move, 599, 69, 2, 529, 733]
+[:mouse_move, 597, 66, 2, 530, 734]
+[:mouse_move, 593, 62, 2, 531, 735]
+[:mouse_move, 581, 60, 2, 532, 736]
+[:mouse_move, 561, 59, 2, 533, 737]
+[:mouse_move, 551, 59, 2, 534, 738]
+[:mouse_move, 535, 59, 2, 535, 739]
+[:mouse_move, 526, 60, 2, 536, 740]
+[:mouse_move, 518, 62, 2, 537, 741]
+[:mouse_move, 506, 65, 2, 538, 742]
+[:mouse_move, 504, 67, 2, 539, 743]
+[:mouse_move, 498, 70, 2, 540, 744]
+[:mouse_move, 496, 72, 2, 541, 745]
+[:mouse_move, 493, 77, 2, 542, 746]
+[:mouse_move, 493, 79, 2, 543, 747]
+[:mouse_move, 493, 86, 2, 544, 748]
+[:mouse_move, 493, 88, 2, 545, 749]
+[:mouse_move, 495, 96, 2, 546, 750]
+[:mouse_move, 497, 98, 2, 547, 751]
+[:mouse_move, 502, 104, 2, 548, 752]
+[:mouse_move, 504, 106, 2, 549, 753]
+[:mouse_move, 509, 110, 2, 550, 754]
+[:mouse_move, 513, 112, 2, 551, 755]
+[:mouse_move, 521, 116, 2, 552, 756]
+[:mouse_move, 525, 118, 2, 553, 757]
+[:mouse_move, 535, 120, 2, 554, 758]
+[:mouse_move, 540, 121, 2, 555, 759]
+[:mouse_move, 549, 122, 2, 556, 760]
+[:mouse_move, 553, 122, 2, 557, 761]
+[:mouse_move, 560, 121, 2, 558, 762]
+[:mouse_move, 561, 120, 2, 559, 763]
+[:mouse_move, 564, 119, 2, 560, 764]
+[:mouse_move, 565, 118, 2, 561, 765]
+[:mouse_move, 566, 118, 2, 562, 766]
+[:key_down_raw, 104, 0, 2, 563, 817]
+[:key_up_raw, 104, 0, 2, 564, 820]
+[:mouse_move, 566, 115, 2, 565, 843]
+[:mouse_move, 564, 113, 2, 566, 844]
+[:mouse_move, 562, 110, 2, 567, 845]
+[:mouse_move, 560, 107, 2, 568, 846]
+[:mouse_move, 557, 104, 2, 569, 847]
+[:mouse_move, 556, 103, 2, 570, 848]
+[:mouse_move, 555, 102, 2, 571, 849]
+[:mouse_move, 554, 101, 2, 572, 850]
+[:mouse_move, 553, 101, 2, 573, 851]
+[:mouse_move, 552, 100, 2, 574, 853]
+[:mouse_move, 549, 99, 2, 575, 854]
+[:mouse_move, 548, 99, 2, 576, 855]
+[:mouse_move, 543, 98, 2, 577, 856]
+[:mouse_move, 541, 98, 2, 578, 857]
+[:mouse_move, 538, 98, 2, 579, 858]
+[:mouse_move, 536, 98, 2, 580, 859]
+[:mouse_move, 535, 98, 2, 581, 860]
+[:mouse_move, 537, 99, 2, 582, 862]
+[:mouse_move, 544, 101, 2, 583, 863]
+[:mouse_move, 555, 105, 2, 584, 864]
+[:mouse_move, 569, 108, 2, 585, 865]
+[:mouse_move, 590, 112, 2, 586, 866]
+[:mouse_move, 595, 112, 2, 587, 867]
+[:mouse_move, 612, 114, 2, 588, 868]
+[:mouse_move, 619, 115, 2, 589, 869]
+[:mouse_move, 631, 115, 2, 590, 870]
+[:mouse_move, 636, 115, 2, 591, 871]
+[:mouse_move, 640, 115, 2, 592, 872]
+[:mouse_move, 643, 115, 2, 593, 873]
+[:mouse_move, 646, 115, 2, 594, 874]
+[:mouse_move, 646, 114, 2, 595, 875]
+[:mouse_move, 646, 113, 2, 596, 877]
+[:mouse_move, 645, 113, 2, 597, 879]
+[:mouse_move, 644, 112, 2, 598, 880]
+[:mouse_move, 644, 111, 2, 599, 882]
+[:mouse_move, 644, 110, 2, 600, 883]
+[:mouse_move, 647, 110, 2, 601, 884]
+[:mouse_move, 656, 110, 2, 602, 885]
+[:mouse_move, 665, 110, 2, 603, 886]
+[:mouse_move, 676, 109, 2, 604, 887]
+[:mouse_move, 683, 108, 2, 605, 888]
+[:mouse_move, 690, 106, 2, 606, 889]
+[:mouse_move, 693, 105, 2, 607, 890]
+[:mouse_move, 695, 104, 2, 608, 891]
+[:mouse_move, 695, 103, 2, 609, 892]
+[:mouse_move, 690, 103, 2, 610, 893]
+[:mouse_move, 688, 103, 2, 611, 894]
+[:mouse_move, 683, 103, 2, 612, 895]
+[:mouse_move, 682, 103, 2, 613, 896]
+[:mouse_move, 680, 103, 2, 614, 897]
+[:mouse_move, 682, 103, 2, 615, 901]
+[:mouse_move, 683, 103, 2, 616, 902]
+[:mouse_move, 685, 103, 2, 617, 904]
+[:mouse_move, 685, 102, 2, 618, 905]
+[:mouse_move, 676, 102, 2, 619, 908]
+[:mouse_move, 673, 102, 2, 620, 909]
+[:mouse_move, 667, 102, 2, 621, 910]
+[:mouse_move, 664, 102, 2, 622, 911]
+[:mouse_move, 661, 102, 2, 623, 912]
+[:mouse_move, 660, 102, 2, 624, 913]
+[:mouse_move, 662, 102, 2, 625, 915]
+[:mouse_move, 668, 102, 2, 626, 916]
+[:mouse_move, 670, 102, 2, 627, 917]
+[:mouse_move, 675, 102, 2, 628, 918]
+[:mouse_move, 676, 102, 2, 629, 919]
+[:mouse_move, 677, 102, 2, 630, 920]
+[:mouse_move, 674, 102, 2, 631, 922]
+[:mouse_move, 671, 102, 2, 632, 923]
+[:mouse_move, 665, 102, 2, 633, 924]
+[:mouse_move, 663, 103, 2, 634, 925]
+[:mouse_move, 660, 103, 2, 635, 926]
+[:mouse_move, 661, 103, 2, 636, 928]
+[:mouse_move, 663, 103, 2, 637, 929]
+[:mouse_move, 667, 103, 2, 638, 930]
+[:mouse_move, 669, 103, 2, 639, 931]
+[:mouse_move, 671, 103, 2, 640, 932]
+[:mouse_move, 673, 103, 2, 641, 933]
+[:key_down_raw, 104, 0, 2, 642, 949]
+[:key_up_raw, 104, 0, 2, 643, 955]
+[:mouse_move, 665, 102, 2, 644, 985]
+[:mouse_move, 657, 101, 2, 645, 986]
+[:mouse_move, 647, 101, 2, 646, 987]
+[:mouse_move, 646, 101, 2, 647, 988]
+[:mouse_move, 641, 101, 2, 648, 989]
+[:mouse_move, 640, 101, 2, 649, 990]
+[:mouse_move, 640, 102, 2, 650, 991]
+[:mouse_move, 642, 102, 2, 651, 992]
+[:mouse_move, 655, 103, 2, 652, 993]
+[:mouse_move, 663, 104, 2, 653, 994]
+[:mouse_move, 676, 104, 2, 654, 995]
+[:mouse_move, 679, 104, 2, 655, 996]
+[:mouse_move, 689, 104, 2, 656, 997]
+[:mouse_move, 691, 104, 2, 657, 998]
+[:mouse_move, 695, 104, 2, 658, 999]
+[:mouse_move, 695, 103, 2, 659, 1000]
+[:mouse_move, 692, 102, 2, 660, 1002]
+[:mouse_move, 681, 102, 2, 661, 1003]
+[:mouse_move, 677, 102, 2, 662, 1004]
+[:mouse_move, 670, 103, 2, 663, 1005]
+[:mouse_move, 667, 103, 2, 664, 1006]
+[:mouse_move, 663, 104, 2, 665, 1007]
+[:mouse_move, 662, 104, 2, 666, 1008]
+[:mouse_move, 663, 104, 2, 667, 1009]
+[:mouse_move, 666, 104, 2, 668, 1010]
+[:mouse_move, 674, 103, 2, 669, 1011]
+[:mouse_move, 678, 102, 2, 670, 1012]
+[:mouse_move, 680, 102, 2, 671, 1013]
+[:mouse_move, 687, 101, 2, 672, 1014]
+[:mouse_move, 689, 101, 2, 673, 1015]
+[:mouse_move, 691, 101, 2, 674, 1016]
+[:mouse_move, 686, 101, 2, 675, 1018]
+[:mouse_move, 682, 101, 2, 676, 1019]
+[:mouse_move, 676, 102, 2, 677, 1020]
+[:mouse_move, 673, 103, 2, 678, 1021]
+[:mouse_move, 670, 104, 2, 679, 1022]
+[:mouse_move, 669, 104, 2, 680, 1023]
+[:mouse_move, 672, 104, 2, 681, 1025]
+[:mouse_move, 677, 104, 2, 682, 1026]
+[:mouse_move, 680, 104, 2, 683, 1027]
+[:mouse_move, 685, 103, 2, 684, 1028]
+[:mouse_move, 686, 103, 2, 685, 1029]
+[:mouse_move, 687, 103, 2, 686, 1030]
+[:mouse_move, 676, 103, 2, 687, 1032]
+[:mouse_move, 672, 103, 2, 688, 1033]
+[:mouse_move, 663, 104, 2, 689, 1034]
+[:mouse_move, 660, 104, 2, 690, 1035]
+[:mouse_move, 655, 105, 2, 691, 1036]
+[:mouse_move, 657, 105, 2, 692, 1038]
+[:mouse_move, 659, 105, 2, 693, 1039]
+[:mouse_move, 660, 105, 2, 694, 1040]
+[:mouse_move, 663, 105, 2, 695, 1041]
+[:mouse_move, 664, 105, 2, 696, 1042]
+[:mouse_move, 665, 105, 2, 697, 1043]
+[:key_down_raw, 104, 0, 2, 698, 1052]
+[:key_up_raw, 104, 0, 2, 699, 1056]
+[:mouse_move, 664, 105, 2, 700, 1074]
+[:mouse_move, 666, 105, 2, 701, 1079]
+[:mouse_move, 673, 105, 2, 702, 1080]
+[:mouse_move, 677, 104, 2, 703, 1081]
+[:mouse_move, 689, 103, 2, 704, 1082]
+[:mouse_move, 695, 102, 2, 705, 1083]
+[:mouse_move, 702, 101, 2, 706, 1084]
+[:mouse_move, 705, 99, 2, 707, 1085]
+[:mouse_move, 710, 97, 2, 708, 1086]
+[:mouse_move, 711, 96, 2, 709, 1087]
+[:mouse_move, 711, 93, 2, 710, 1088]
+[:mouse_move, 711, 91, 2, 711, 1089]
+[:mouse_move, 711, 86, 2, 712, 1090]
+[:mouse_move, 710, 83, 2, 713, 1091]
+[:mouse_move, 706, 78, 2, 714, 1092]
+[:mouse_move, 703, 75, 2, 715, 1093]
+[:mouse_move, 699, 74, 2, 716, 1094]
+[:mouse_move, 690, 73, 2, 717, 1095]
+[:mouse_move, 683, 73, 2, 718, 1096]
+[:mouse_move, 675, 73, 2, 719, 1097]
+[:mouse_move, 670, 73, 2, 720, 1098]
+[:mouse_move, 662, 73, 2, 721, 1099]
+[:mouse_move, 660, 73, 2, 722, 1100]
+[:mouse_move, 655, 75, 2, 723, 1101]
+[:mouse_move, 652, 77, 2, 724, 1102]
+[:mouse_move, 649, 81, 2, 725, 1103]
+[:mouse_move, 648, 83, 2, 726, 1104]
+[:mouse_move, 647, 87, 2, 727, 1105]
+[:mouse_move, 647, 89, 2, 728, 1106]
+[:mouse_move, 646, 92, 2, 729, 1107]
+[:mouse_move, 646, 95, 2, 730, 1108]
+[:mouse_move, 648, 99, 2, 731, 1109]
+[:mouse_move, 652, 102, 2, 732, 1110]
+[:mouse_move, 664, 107, 2, 733, 1111]
+[:mouse_move, 668, 108, 2, 734, 1112]
+[:mouse_move, 682, 111, 2, 735, 1113]
+[:mouse_move, 688, 111, 2, 736, 1114]
+[:mouse_move, 696, 111, 2, 737, 1115]
+[:mouse_move, 703, 110, 2, 738, 1116]
+[:mouse_move, 707, 107, 2, 739, 1117]
+[:mouse_move, 709, 105, 2, 740, 1118]
+[:mouse_move, 712, 102, 2, 741, 1119]
+[:mouse_move, 712, 100, 2, 742, 1120]
+[:mouse_move, 712, 96, 2, 743, 1121]
+[:mouse_move, 710, 94, 2, 744, 1122]
+[:mouse_move, 709, 94, 2, 745, 1123]
+[:mouse_move, 704, 92, 2, 746, 1124]
+[:mouse_move, 701, 89, 2, 747, 1125]
+[:mouse_move, 696, 84, 2, 748, 1126]
+[:mouse_move, 691, 78, 2, 749, 1127]
+[:mouse_move, 682, 63, 2, 750, 1128]
+[:mouse_move, 679, 59, 2, 751, 1129]
+[:mouse_move, 668, 46, 2, 752, 1130]
+[:mouse_move, 666, 44, 2, 753, 1131]
+[:mouse_move, 656, 33, 2, 754, 1132]
+[:mouse_move, 652, 30, 2, 755, 1133]
+[:mouse_move, 647, 25, 2, 756, 1134]
+[:mouse_move, 643, 23, 2, 757, 1135]
+[:mouse_move, 638, 20, 2, 758, 1136]
+[:mouse_move, 636, 19, 2, 759, 1137]
+[:mouse_move, 631, 18, 2, 760, 1138]
+[:mouse_move, 629, 17, 2, 761, 1139]
+[:mouse_move, 625, 17, 2, 762, 1140]
+[:mouse_move, 624, 17, 2, 763, 1141]
+[:mouse_move, 620, 17, 2, 764, 1142]
+[:mouse_move, 618, 17, 2, 765, 1143]
+[:mouse_move, 615, 17, 2, 766, 1144]
+[:mouse_move, 614, 17, 2, 767, 1145]
+[:mouse_move, 612, 18, 2, 768, 1146]
+[:mouse_move, 611, 18, 2, 769, 1147]
+[:mouse_move, 611, 19, 2, 770, 1150]
+[:mouse_move, 612, 19, 2, 771, 1151]
+[:mouse_move, 615, 20, 2, 772, 1152]
+[:mouse_move, 624, 22, 2, 773, 1153]
+[:mouse_move, 629, 23, 2, 774, 1154]
+[:mouse_move, 640, 24, 2, 775, 1155]
+[:mouse_move, 646, 24, 2, 776, 1156]
+[:mouse_move, 652, 25, 2, 777, 1157]
+[:mouse_move, 656, 25, 2, 778, 1158]
+[:mouse_move, 661, 25, 2, 779, 1159]
+[:mouse_move, 663, 25, 2, 780, 1160]
+[:mouse_move, 665, 25, 2, 781, 1161]
+[:mouse_move, 666, 25, 2, 782, 1162]
+[:mouse_move, 667, 25, 2, 783, 1163]
+[:mouse_move, 665, 25, 2, 784, 1166]
+[:mouse_move, 659, 25, 2, 785, 1167]
+[:mouse_move, 650, 26, 2, 786, 1168]
+[:mouse_move, 644, 26, 2, 787, 1169]
+[:mouse_move, 635, 26, 2, 788, 1170]
+[:mouse_move, 629, 26, 2, 789, 1171]
+[:mouse_move, 627, 26, 2, 790, 1172]
+[:mouse_move, 624, 26, 2, 791, 1173]
+[:mouse_move, 623, 26, 2, 792, 1174]
+[:mouse_move, 624, 26, 2, 793, 1178]
+[:mouse_move, 626, 26, 2, 794, 1179]
+[:mouse_move, 634, 26, 2, 795, 1180]
+[:mouse_move, 636, 26, 2, 796, 1181]
+[:mouse_move, 641, 26, 2, 797, 1182]
+[:mouse_move, 643, 26, 2, 798, 1183]
+[:mouse_move, 646, 26, 2, 799, 1184]
+[:mouse_move, 645, 26, 2, 800, 1187]
+[:mouse_move, 634, 26, 2, 801, 1188]
+[:mouse_move, 631, 26, 2, 802, 1189]
+[:mouse_move, 623, 26, 2, 803, 1190]
+[:mouse_move, 620, 26, 2, 804, 1191]
+[:mouse_move, 615, 26, 2, 805, 1192]
+[:mouse_move, 614, 26, 2, 806, 1193]
+[:mouse_move, 613, 26, 2, 807, 1195]
+[:mouse_move, 613, 27, 2, 808, 1197]
+[:key_down_raw, 1073742051, 1024, 2, 809, 1282]
+[:key_down_raw, 113, 1024, 2, 810, 1282]
diff --git a/samples/02_input_basics/02_mouse/app/main.rb b/samples/02_input_basics/02_mouse/app/main.rb
new file mode 100644
index 0000000..43217f5
--- /dev/null
+++ b/samples/02_input_basics/02_mouse/app/main.rb
@@ -0,0 +1,87 @@
+=begin
+
+APIs that haven't been encountered in a previous sample apps:
+
+- args.inputs.mouse.click: This property will be set if the mouse was clicked.
+- args.inputs.mouse.click.point.(x|y): The x and y location of the mouse.
+- args.inputs.mouse.click.point.created_at: The frame the mouse click occurred in.
+- args.inputs.mouse.click.point.created_at_elapsed: How many frames have passed
+ since the click event.
+
+Reminder:
+
+- args.state.PROPERTY: The state property on args is a dynamic
+ structure. You can define ANY property here with ANY type of
+ arbitrary nesting. Properties defined on args.state will be retained
+ across frames. If you attempt access a property that doesn't exist
+ on args.state, it will simply return nil (no exception will be thrown).
+
+=end
+
+# This code demonstrates DragonRuby mouse input
+
+# To see if the a mouse click occurred
+# Use args.inputs.mouse.click
+# Which returns a boolean
+
+# To see where a mouse click occurred
+# Use args.inputs.mouse.click.point.x AND
+# args.inputs.mouse.click.point.y
+
+# To see which frame the click occurred
+# Use args.inputs.mouse.click.created_at
+
+# To see how many frames its been since the click occurred
+# Use args.inputs.mouse.click.creat_at_elapsed
+
+# Saving the click in args.state can be quite useful
+
+def tick args
+ tick_instructions args, "Sample app shows how mouse events are registered and how to measure elapsed time."
+ x = 460
+
+ args.outputs.labels << small_label(args, x, 11, "Mouse input: args.inputs.mouse")
+
+ if args.inputs.mouse.click
+ args.state.last_mouse_click = args.inputs.mouse.click
+ end
+
+ if args.state.last_mouse_click
+ click = args.state.last_mouse_click
+ args.outputs.labels << small_label(args, x, 12, "Mouse click happened at: #{click.created_at}")
+ args.outputs.labels << small_label(args, x, 13, "Mouse clicked #{click.created_at_elapsed} ticks ago")
+ args.outputs.labels << small_label(args, x, 14, "Mouse click location: #{click.point.x}, #{click.point.y}")
+ else
+ args.outputs.labels << small_label(args, x, 12, "Mouse click has not occurred yet.")
+ args.outputs.labels << small_label(args, x, 13, "Please click mouse.")
+ end
+end
+
+def small_label args, x, row, message
+ # This method effectively combines the row_to_px and small_font methods
+ # It changes the given row value to a DragonRuby pixel value
+ # and adds the customization parameters
+ [x, row_to_px(args, row), message, small_font]
+end
+
+def small_font
+ [-2, 0, 0, 0, 0, 255]
+end
+
+def row_to_px args, row_number
+ args.grid.top.shift_down(5).shift_down(20 * row_number)
+end
+
+def tick_instructions args, text, y = 715
+ return if args.state.key_event_occurred
+ if args.inputs.mouse.click ||
+ args.inputs.keyboard.directional_vector ||
+ args.inputs.keyboard.key_down.enter ||
+ args.inputs.keyboard.key_down.escape
+ args.state.key_event_occurred = true
+ end
+
+ args.outputs.debug << [0, y - 50, 1280, 60].solid
+ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label
+ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label
+end
diff --git a/samples/02_input_basics/02_mouse/license-for-sample.txt b/samples/02_input_basics/02_mouse/license-for-sample.txt
new file mode 100644
index 0000000..100dcec
--- /dev/null
+++ b/samples/02_input_basics/02_mouse/license-for-sample.txt
@@ -0,0 +1,9 @@
+Copyright 2019 DragonRuby LLC
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/samples/02_input_basics/02_mouse/replay.txt b/samples/02_input_basics/02_mouse/replay.txt
new file mode 100644
index 0000000..61b4bd1
--- /dev/null
+++ b/samples/02_input_basics/02_mouse/replay.txt
@@ -0,0 +1,893 @@
+replay_version 2.0
+stopped_at 1510
+seed 100
+recorded_at Sun Sep 29 21:33:51 2019
+[:mouse_move, 312, 285, 2, 1, 87]
+[:mouse_move, 316, 285, 2, 2, 88]
+[:mouse_move, 323, 285, 2, 3, 89]
+[:mouse_move, 328, 285, 2, 4, 90]
+[:mouse_move, 334, 285, 2, 5, 91]
+[:mouse_move, 338, 285, 2, 6, 92]
+[:mouse_move, 354, 285, 2, 7, 93]
+[:mouse_move, 363, 285, 2, 8, 94]
+[:mouse_move, 375, 284, 2, 9, 95]
+[:mouse_move, 382, 284, 2, 10, 96]
+[:mouse_move, 395, 282, 2, 11, 97]
+[:mouse_move, 407, 280, 2, 12, 98]
+[:mouse_move, 424, 279, 2, 13, 99]
+[:mouse_move, 429, 279, 2, 14, 100]
+[:mouse_move, 432, 278, 2, 15, 101]
+[:mouse_move, 441, 278, 2, 16, 102]
+[:mouse_move, 444, 278, 2, 17, 103]
+[:mouse_move, 447, 278, 2, 18, 104]
+[:mouse_move, 448, 278, 2, 19, 106]
+[:mouse_move, 447, 277, 2, 20, 110]
+[:mouse_move, 445, 276, 2, 21, 111]
+[:mouse_move, 444, 273, 2, 22, 112]
+[:mouse_move, 444, 271, 2, 23, 113]
+[:mouse_move, 444, 268, 2, 24, 114]
+[:mouse_move, 444, 266, 2, 25, 115]
+[:mouse_move, 446, 263, 2, 26, 116]
+[:mouse_move, 447, 262, 2, 27, 117]
+[:mouse_move, 448, 261, 2, 28, 118]
+[:mouse_move, 449, 261, 2, 29, 120]
+[:mouse_move, 453, 261, 2, 30, 137]
+[:mouse_move, 457, 261, 2, 31, 138]
+[:mouse_move, 469, 260, 2, 32, 139]
+[:mouse_move, 477, 260, 2, 33, 140]
+[:mouse_move, 492, 260, 2, 34, 141]
+[:mouse_move, 499, 260, 2, 35, 142]
+[:mouse_move, 512, 261, 2, 36, 143]
+[:mouse_move, 517, 261, 2, 37, 144]
+[:mouse_move, 526, 262, 2, 38, 145]
+[:mouse_move, 528, 262, 2, 39, 146]
+[:mouse_move, 536, 262, 2, 40, 147]
+[:mouse_move, 539, 262, 2, 41, 148]
+[:mouse_move, 544, 262, 2, 42, 149]
+[:mouse_move, 546, 262, 2, 43, 150]
+[:mouse_move, 550, 262, 2, 44, 151]
+[:mouse_move, 551, 262, 2, 45, 152]
+[:mouse_move, 553, 262, 2, 46, 153]
+[:mouse_move, 557, 262, 2, 47, 154]
+[:mouse_move, 563, 262, 2, 48, 155]
+[:mouse_move, 565, 262, 2, 49, 156]
+[:mouse_move, 568, 262, 2, 50, 157]
+[:mouse_move, 575, 261, 2, 51, 158]
+[:mouse_move, 579, 260, 2, 52, 159]
+[:mouse_move, 586, 259, 2, 53, 160]
+[:mouse_move, 590, 258, 2, 54, 161]
+[:mouse_move, 598, 257, 2, 55, 162]
+[:mouse_move, 602, 257, 2, 56, 163]
+[:mouse_move, 610, 257, 2, 57, 164]
+[:mouse_move, 613, 257, 2, 58, 165]
+[:mouse_move, 619, 257, 2, 59, 166]
+[:mouse_move, 625, 256, 2, 60, 167]
+[:mouse_move, 631, 256, 2, 61, 168]
+[:mouse_move, 635, 256, 2, 62, 169]
+[:mouse_move, 640, 255, 2, 63, 170]
+[:mouse_move, 645, 255, 2, 64, 171]
+[:mouse_move, 649, 254, 2, 65, 172]
+[:mouse_move, 652, 254, 2, 66, 173]
+[:mouse_move, 657, 254, 2, 67, 174]
+[:mouse_move, 659, 253, 2, 68, 175]
+[:mouse_move, 663, 253, 2, 69, 176]
+[:mouse_move, 666, 253, 2, 70, 177]
+[:mouse_move, 669, 253, 2, 71, 178]
+[:mouse_move, 673, 252, 2, 72, 179]
+[:mouse_move, 677, 252, 2, 73, 180]
+[:mouse_move, 680, 251, 2, 74, 181]
+[:mouse_move, 685, 250, 2, 75, 182]
+[:mouse_move, 686, 250, 2, 76, 183]
+[:mouse_move, 688, 249, 2, 77, 184]
+[:mouse_move, 691, 248, 2, 78, 185]
+[:mouse_move, 692, 248, 2, 79, 186]
+[:mouse_move, 693, 248, 2, 80, 187]
+[:mouse_move, 694, 248, 2, 81, 189]
+[:mouse_move, 692, 248, 2, 82, 207]
+[:mouse_move, 690, 248, 2, 83, 208]
+[:mouse_move, 681, 248, 2, 84, 209]
+[:mouse_move, 676, 249, 2, 85, 210]
+[:mouse_move, 669, 249, 2, 86, 211]
+[:mouse_move, 655, 250, 2, 87, 212]
+[:mouse_move, 641, 251, 2, 88, 213]
+[:mouse_move, 622, 251, 2, 89, 214]
+[:mouse_move, 610, 251, 2, 90, 215]
+[:mouse_move, 594, 251, 2, 91, 216]
+[:mouse_move, 578, 251, 2, 92, 217]
+[:mouse_move, 570, 251, 2, 93, 218]
+[:mouse_move, 563, 251, 2, 94, 219]
+[:mouse_move, 544, 251, 2, 95, 220]
+[:mouse_move, 539, 251, 2, 96, 221]
+[:mouse_move, 525, 251, 2, 97, 222]
+[:mouse_move, 512, 252, 2, 98, 223]
+[:mouse_move, 507, 252, 2, 99, 224]
+[:mouse_move, 501, 252, 2, 100, 225]
+[:mouse_move, 488, 252, 2, 101, 226]
+[:mouse_move, 481, 252, 2, 102, 227]
+[:mouse_move, 466, 253, 2, 103, 228]
+[:mouse_move, 458, 253, 2, 104, 229]
+[:mouse_move, 445, 254, 2, 105, 230]
+[:mouse_move, 439, 254, 2, 106, 231]
+[:mouse_move, 434, 255, 2, 107, 232]
+[:mouse_move, 431, 256, 2, 108, 233]
+[:mouse_move, 428, 256, 2, 109, 234]
+[:mouse_move, 427, 257, 2, 110, 235]
+[:mouse_move, 426, 257, 2, 111, 236]
+[:mouse_move, 426, 258, 2, 112, 239]
+[:mouse_move, 427, 259, 2, 113, 240]
+[:mouse_move, 433, 263, 2, 114, 241]
+[:mouse_move, 436, 264, 2, 115, 242]
+[:mouse_move, 445, 268, 2, 116, 243]
+[:mouse_move, 450, 269, 2, 117, 244]
+[:mouse_move, 461, 270, 2, 118, 245]
+[:mouse_move, 474, 270, 2, 119, 246]
+[:mouse_move, 481, 270, 2, 120, 247]
+[:mouse_move, 488, 270, 2, 121, 248]
+[:mouse_move, 501, 269, 2, 122, 249]
+[:mouse_move, 507, 268, 2, 123, 250]
+[:mouse_move, 518, 266, 2, 124, 251]
+[:mouse_move, 523, 265, 2, 125, 252]
+[:mouse_move, 533, 264, 2, 126, 253]
+[:mouse_move, 538, 264, 2, 127, 254]
+[:mouse_move, 548, 263, 2, 128, 255]
+[:mouse_move, 553, 262, 2, 129, 256]
+[:mouse_move, 563, 262, 2, 130, 257]
+[:mouse_move, 569, 261, 2, 131, 258]
+[:mouse_move, 578, 261, 2, 132, 259]
+[:mouse_move, 583, 261, 2, 133, 260]
+[:mouse_move, 592, 261, 2, 134, 261]
+[:mouse_move, 596, 261, 2, 135, 262]
+[:mouse_move, 605, 261, 2, 136, 263]
+[:mouse_move, 609, 261, 2, 137, 264]
+[:mouse_move, 611, 261, 2, 138, 265]
+[:mouse_move, 621, 261, 2, 139, 266]
+[:mouse_move, 624, 261, 2, 140, 267]
+[:mouse_move, 631, 261, 2, 141, 268]
+[:mouse_move, 635, 261, 2, 142, 269]
+[:mouse_move, 642, 261, 2, 143, 270]
+[:mouse_move, 646, 261, 2, 144, 271]
+[:mouse_move, 653, 262, 2, 145, 272]
+[:mouse_move, 656, 262, 2, 146, 273]
+[:mouse_move, 664, 263, 2, 147, 274]
+[:mouse_move, 666, 263, 2, 148, 275]
+[:mouse_move, 673, 264, 2, 149, 276]
+[:mouse_move, 678, 264, 2, 150, 277]
+[:mouse_move, 685, 264, 2, 151, 278]
+[:mouse_move, 689, 265, 2, 152, 279]
+[:mouse_move, 694, 265, 2, 153, 280]
+[:mouse_move, 697, 265, 2, 154, 281]
+[:mouse_move, 702, 265, 2, 155, 282]
+[:mouse_move, 704, 265, 2, 156, 283]
+[:mouse_move, 706, 265, 2, 157, 284]
+[:mouse_move, 706, 266, 2, 158, 285]
+[:mouse_move, 708, 266, 2, 159, 286]
+[:mouse_move, 709, 266, 2, 160, 288]
+[:mouse_move, 708, 269, 2, 161, 318]
+[:mouse_move, 693, 283, 2, 162, 319]
+[:mouse_move, 680, 294, 2, 163, 320]
+[:mouse_move, 641, 322, 2, 164, 321]
+[:mouse_move, 618, 340, 2, 165, 322]
+[:mouse_move, 609, 346, 2, 166, 323]
+[:mouse_move, 583, 363, 2, 167, 324]
+[:mouse_move, 570, 371, 2, 168, 325]
+[:mouse_move, 552, 378, 2, 169, 326]
+[:mouse_move, 546, 379, 2, 170, 327]
+[:mouse_move, 538, 379, 2, 171, 328]
+[:mouse_move, 536, 379, 2, 172, 329]
+[:mouse_move, 531, 372, 2, 173, 330]
+[:mouse_move, 526, 365, 2, 174, 331]
+[:mouse_move, 517, 352, 2, 175, 332]
+[:mouse_move, 510, 344, 2, 176, 333]
+[:mouse_move, 496, 334, 2, 177, 334]
+[:mouse_move, 488, 328, 2, 178, 335]
+[:mouse_move, 474, 319, 2, 179, 336]
+[:mouse_move, 467, 315, 2, 180, 337]
+[:mouse_move, 458, 307, 2, 181, 338]
+[:mouse_move, 454, 304, 2, 182, 339]
+[:mouse_move, 449, 300, 2, 183, 340]
+[:mouse_move, 447, 298, 2, 184, 341]
+[:mouse_move, 445, 294, 2, 185, 342]
+[:mouse_move, 444, 292, 2, 186, 343]
+[:mouse_move, 443, 291, 2, 187, 344]
+[:mouse_move, 442, 290, 2, 188, 345]
+[:mouse_move, 442, 289, 2, 189, 346]
+[:mouse_move, 442, 288, 2, 190, 349]
+[:mouse_move, 442, 287, 2, 191, 353]
+[:mouse_move, 444, 287, 2, 192, 354]
+[:mouse_move, 449, 287, 2, 193, 355]
+[:mouse_move, 454, 287, 2, 194, 356]
+[:mouse_move, 470, 287, 2, 195, 357]
+[:mouse_move, 480, 287, 2, 196, 358]
+[:mouse_move, 504, 288, 2, 197, 359]
+[:mouse_move, 517, 289, 2, 198, 360]
+[:mouse_move, 534, 290, 2, 199, 361]
+[:mouse_move, 546, 290, 2, 200, 362]
+[:mouse_move, 565, 290, 2, 201, 363]
+[:mouse_move, 573, 290, 2, 202, 364]
+[:mouse_move, 583, 290, 2, 203, 365]
+[:mouse_move, 587, 290, 2, 204, 366]
+[:mouse_move, 595, 290, 2, 205, 367]
+[:mouse_move, 598, 290, 2, 206, 368]
+[:mouse_move, 602, 290, 2, 207, 369]
+[:mouse_move, 604, 290, 2, 208, 370]
+[:mouse_move, 607, 290, 2, 209, 371]
+[:mouse_move, 608, 291, 2, 210, 372]
+[:mouse_move, 611, 291, 2, 211, 373]
+[:mouse_move, 612, 291, 2, 212, 374]
+[:mouse_move, 613, 291, 2, 213, 375]
+[:mouse_move, 615, 291, 2, 214, 376]
+[:mouse_move, 616, 292, 2, 215, 377]
+[:mouse_move, 617, 292, 2, 216, 380]
+[:mouse_move, 616, 294, 2, 217, 395]
+[:mouse_move, 604, 307, 2, 218, 396]
+[:mouse_move, 592, 318, 2, 219, 397]
+[:mouse_move, 569, 336, 2, 220, 398]
+[:mouse_move, 562, 340, 2, 221, 399]
+[:mouse_move, 549, 348, 2, 222, 400]
+[:mouse_move, 544, 352, 2, 223, 401]
+[:mouse_move, 540, 354, 2, 224, 402]
+[:mouse_move, 536, 357, 2, 225, 403]
+[:mouse_move, 539, 357, 2, 226, 407]
+[:mouse_move, 541, 357, 2, 227, 408]
+[:mouse_move, 544, 357, 2, 228, 409]
+[:mouse_move, 548, 357, 2, 229, 410]
+[:mouse_move, 553, 357, 2, 230, 411]
+[:mouse_move, 557, 357, 2, 231, 412]
+[:mouse_move, 566, 358, 2, 232, 413]
+[:mouse_move, 570, 358, 2, 233, 414]
+[:mouse_move, 575, 358, 2, 234, 415]
+[:mouse_move, 577, 358, 2, 235, 416]
+[:mouse_move, 581, 358, 2, 236, 417]
+[:mouse_move, 583, 358, 2, 237, 418]
+[:mouse_move, 584, 358, 2, 238, 419]
+[:mouse_move, 585, 358, 2, 239, 420]
+[:mouse_button_pressed, 1, 0, 1, 240, 428]
+[:mouse_button_up, 1, 0, 1, 241, 437]
+[:mouse_move, 583, 359, 2, 242, 463]
+[:mouse_move, 583, 360, 2, 243, 464]
+[:mouse_move, 585, 360, 2, 244, 466]
+[:mouse_move, 595, 359, 2, 245, 467]
+[:mouse_move, 605, 357, 2, 246, 468]
+[:mouse_move, 627, 351, 2, 247, 469]
+[:mouse_move, 632, 349, 2, 248, 470]
+[:mouse_move, 642, 346, 2, 249, 471]
+[:mouse_move, 660, 342, 2, 250, 472]
+[:mouse_move, 672, 338, 2, 251, 473]
+[:mouse_move, 677, 336, 2, 252, 474]
+[:mouse_move, 684, 332, 2, 253, 475]
+[:mouse_move, 686, 330, 2, 254, 476]
+[:mouse_move, 689, 327, 2, 255, 477]
+[:mouse_move, 691, 325, 2, 256, 478]
+[:mouse_move, 693, 322, 2, 257, 479]
+[:mouse_move, 693, 321, 2, 258, 480]
+[:mouse_move, 693, 318, 2, 259, 481]
+[:mouse_move, 692, 318, 2, 260, 482]
+[:mouse_move, 688, 316, 2, 261, 483]
+[:mouse_move, 684, 314, 2, 262, 484]
+[:mouse_move, 683, 314, 2, 263, 485]
+[:mouse_move, 678, 312, 2, 264, 486]
+[:mouse_move, 676, 311, 2, 265, 487]
+[:mouse_move, 673, 310, 2, 266, 488]
+[:mouse_move, 672, 310, 2, 267, 489]
+[:mouse_move, 669, 310, 2, 268, 490]
+[:mouse_move, 667, 309, 2, 269, 491]
+[:mouse_move, 663, 309, 2, 270, 492]
+[:mouse_move, 661, 309, 2, 271, 493]
+[:mouse_move, 657, 308, 2, 272, 494]
+[:mouse_move, 655, 308, 2, 273, 495]
+[:mouse_move, 652, 307, 2, 274, 496]
+[:mouse_move, 651, 306, 2, 275, 497]
+[:mouse_move, 650, 306, 2, 276, 498]
+[:mouse_move, 649, 306, 2, 277, 503]
+[:mouse_move, 648, 306, 2, 278, 508]
+[:mouse_move, 647, 305, 2, 279, 509]
+[:mouse_move, 645, 305, 2, 280, 510]
+[:mouse_move, 636, 301, 2, 281, 511]
+[:mouse_move, 628, 298, 2, 282, 512]
+[:mouse_move, 605, 293, 2, 283, 513]
+[:mouse_move, 593, 291, 2, 284, 514]
+[:mouse_move, 581, 289, 2, 285, 515]
+[:mouse_move, 565, 287, 2, 286, 516]
+[:mouse_move, 555, 286, 2, 287, 517]
+[:mouse_move, 550, 285, 2, 288, 518]
+[:mouse_move, 544, 284, 2, 289, 519]
+[:mouse_move, 542, 284, 2, 290, 520]
+[:mouse_move, 541, 283, 2, 291, 521]
+[:mouse_move, 540, 283, 2, 292, 523]
+[:mouse_move, 541, 283, 2, 293, 529]
+[:mouse_move, 543, 283, 2, 294, 531]
+[:mouse_move, 545, 283, 2, 295, 532]
+[:mouse_move, 550, 282, 2, 296, 533]
+[:mouse_move, 553, 282, 2, 297, 534]
+[:mouse_move, 558, 282, 2, 298, 535]
+[:mouse_move, 561, 282, 2, 299, 536]
+[:mouse_move, 566, 282, 2, 300, 537]
+[:mouse_move, 570, 282, 2, 301, 538]
+[:mouse_move, 571, 282, 2, 302, 539]
+[:mouse_move, 576, 282, 2, 303, 540]
+[:mouse_move, 578, 282, 2, 304, 541]
+[:mouse_move, 584, 282, 2, 305, 542]
+[:mouse_move, 588, 282, 2, 306, 543]
+[:mouse_move, 590, 282, 2, 307, 544]
+[:mouse_move, 592, 282, 2, 308, 545]
+[:mouse_move, 595, 282, 2, 309, 546]
+[:mouse_move, 597, 282, 2, 310, 547]
+[:mouse_move, 599, 282, 2, 311, 548]
+[:mouse_move, 601, 281, 2, 312, 549]
+[:mouse_move, 602, 281, 2, 313, 550]
+[:mouse_move, 602, 280, 2, 314, 551]
+[:mouse_move, 604, 279, 2, 315, 552]
+[:mouse_move, 605, 278, 2, 316, 554]
+[:mouse_move, 606, 277, 2, 317, 555]
+[:mouse_move, 606, 276, 2, 318, 556]
+[:mouse_move, 607, 274, 2, 319, 557]
+[:mouse_move, 607, 272, 2, 320, 558]
+[:mouse_move, 607, 270, 2, 321, 559]
+[:mouse_move, 607, 267, 2, 322, 560]
+[:mouse_move, 607, 265, 2, 323, 561]
+[:mouse_move, 606, 262, 2, 324, 562]
+[:mouse_move, 605, 261, 2, 325, 563]
+[:mouse_move, 603, 259, 2, 326, 564]
+[:mouse_move, 598, 256, 2, 327, 565]
+[:mouse_move, 597, 255, 2, 328, 566]
+[:mouse_move, 592, 253, 2, 329, 567]
+[:mouse_move, 590, 253, 2, 330, 568]
+[:mouse_move, 585, 251, 2, 331, 569]
+[:mouse_move, 581, 250, 2, 332, 570]
+[:mouse_move, 575, 250, 2, 333, 571]
+[:mouse_move, 573, 250, 2, 334, 572]
+[:mouse_move, 569, 251, 2, 335, 573]
+[:mouse_move, 565, 253, 2, 336, 574]
+[:mouse_move, 564, 254, 2, 337, 575]
+[:mouse_move, 562, 255, 2, 338, 576]
+[:mouse_move, 560, 258, 2, 339, 577]
+[:mouse_move, 559, 259, 2, 340, 578]
+[:mouse_move, 558, 262, 2, 341, 579]
+[:mouse_move, 558, 264, 2, 342, 580]
+[:mouse_move, 558, 267, 2, 343, 581]
+[:mouse_move, 558, 269, 2, 344, 582]
+[:mouse_move, 559, 271, 2, 345, 583]
+[:mouse_move, 561, 274, 2, 346, 584]
+[:mouse_move, 562, 274, 2, 347, 585]
+[:mouse_move, 565, 276, 2, 348, 586]
+[:mouse_move, 571, 279, 2, 349, 587]
+[:mouse_move, 573, 279, 2, 350, 588]
+[:mouse_move, 580, 280, 2, 351, 589]
+[:mouse_move, 581, 280, 2, 352, 590]
+[:mouse_move, 586, 280, 2, 353, 591]
+[:mouse_move, 590, 280, 2, 354, 592]
+[:mouse_move, 592, 279, 2, 355, 593]
+[:mouse_move, 596, 278, 2, 356, 594]
+[:mouse_move, 597, 277, 2, 357, 595]
+[:mouse_move, 599, 275, 2, 358, 596]
+[:mouse_move, 599, 274, 2, 359, 597]
+[:mouse_move, 600, 272, 2, 360, 598]
+[:mouse_move, 600, 271, 2, 361, 599]
+[:mouse_move, 601, 269, 2, 362, 600]
+[:mouse_move, 602, 267, 2, 363, 601]
+[:mouse_move, 602, 265, 2, 364, 602]
+[:mouse_move, 603, 263, 2, 365, 603]
+[:mouse_move, 603, 260, 2, 366, 604]
+[:mouse_move, 603, 258, 2, 367, 605]
+[:mouse_move, 602, 254, 2, 368, 606]
+[:mouse_move, 600, 252, 2, 369, 607]
+[:mouse_move, 594, 249, 2, 370, 608]
+[:mouse_move, 590, 248, 2, 371, 609]
+[:mouse_move, 580, 247, 2, 372, 610]
+[:mouse_move, 578, 247, 2, 373, 611]
+[:mouse_move, 571, 247, 2, 374, 612]
+[:mouse_move, 568, 247, 2, 375, 613]
+[:mouse_move, 565, 248, 2, 376, 614]
+[:mouse_move, 564, 249, 2, 377, 615]
+[:mouse_move, 563, 252, 2, 378, 616]
+[:mouse_move, 563, 254, 2, 379, 617]
+[:mouse_move, 567, 261, 2, 380, 618]
+[:mouse_move, 573, 266, 2, 381, 619]
+[:mouse_move, 585, 275, 2, 382, 620]
+[:mouse_move, 608, 288, 2, 383, 621]
+[:mouse_move, 623, 296, 2, 384, 622]
+[:mouse_move, 641, 305, 2, 385, 623]
+[:mouse_move, 645, 307, 2, 386, 624]
+[:mouse_move, 658, 314, 2, 387, 625]
+[:mouse_move, 661, 315, 2, 388, 626]
+[:mouse_move, 659, 315, 2, 389, 637]
+[:mouse_move, 658, 315, 2, 390, 638]
+[:mouse_move, 656, 315, 2, 391, 639]
+[:mouse_move, 653, 313, 2, 392, 640]
+[:mouse_move, 640, 309, 2, 393, 641]
+[:mouse_move, 635, 308, 2, 394, 642]
+[:mouse_move, 626, 305, 2, 395, 643]
+[:mouse_move, 625, 305, 2, 396, 644]
+[:mouse_move, 619, 304, 2, 397, 645]
+[:mouse_move, 618, 303, 2, 398, 646]
+[:mouse_move, 616, 303, 2, 399, 648]
+[:mouse_move, 617, 303, 2, 400, 651]
+[:mouse_move, 624, 303, 2, 401, 652]
+[:mouse_move, 627, 303, 2, 402, 653]
+[:mouse_move, 645, 303, 2, 403, 654]
+[:mouse_move, 654, 304, 2, 404, 655]
+[:mouse_move, 669, 304, 2, 405, 656]
+[:mouse_move, 678, 304, 2, 406, 657]
+[:mouse_move, 692, 304, 2, 407, 658]
+[:mouse_move, 697, 304, 2, 408, 659]
+[:mouse_move, 703, 304, 2, 409, 660]
+[:mouse_move, 707, 304, 2, 410, 661]
+[:mouse_move, 712, 304, 2, 411, 662]
+[:mouse_move, 717, 304, 2, 412, 663]
+[:mouse_move, 722, 304, 2, 413, 664]
+[:mouse_move, 725, 304, 2, 414, 665]
+[:mouse_move, 730, 304, 2, 415, 666]
+[:mouse_move, 732, 304, 2, 416, 667]
+[:mouse_move, 736, 304, 2, 417, 668]
+[:mouse_move, 737, 304, 2, 418, 670]
+[:mouse_move, 733, 303, 2, 419, 672]
+[:mouse_move, 726, 303, 2, 420, 673]
+[:mouse_move, 716, 303, 2, 421, 674]
+[:mouse_move, 691, 303, 2, 422, 675]
+[:mouse_move, 675, 303, 2, 423, 676]
+[:mouse_move, 651, 304, 2, 424, 677]
+[:mouse_move, 638, 305, 2, 425, 678]
+[:mouse_move, 624, 306, 2, 426, 679]
+[:mouse_move, 618, 306, 2, 427, 680]
+[:mouse_move, 612, 307, 2, 428, 681]
+[:mouse_move, 611, 307, 2, 429, 682]
+[:mouse_move, 610, 307, 2, 430, 683]
+[:mouse_move, 615, 307, 2, 431, 685]
+[:mouse_move, 620, 308, 2, 432, 686]
+[:mouse_move, 640, 309, 2, 433, 687]
+[:mouse_move, 651, 311, 2, 434, 688]
+[:mouse_move, 667, 312, 2, 435, 689]
+[:mouse_move, 671, 312, 2, 436, 690]
+[:mouse_move, 683, 313, 2, 437, 691]
+[:mouse_move, 687, 313, 2, 438, 692]
+[:mouse_move, 690, 313, 2, 439, 693]
+[:mouse_move, 691, 313, 2, 440, 695]
+[:mouse_move, 695, 311, 2, 441, 699]
+[:mouse_move, 704, 305, 2, 442, 700]
+[:mouse_move, 717, 299, 2, 443, 701]
+[:mouse_move, 782, 275, 2, 444, 702]
+[:mouse_move, 821, 262, 2, 445, 703]
+[:mouse_move, 919, 230, 2, 446, 704]
+[:mouse_move, 973, 212, 2, 447, 705]
+[:mouse_move, 1042, 188, 2, 448, 706]
+[:mouse_move, 1084, 173, 2, 449, 707]
+[:mouse_move, 1126, 157, 2, 450, 708]
+[:mouse_move, 1135, 154, 2, 451, 709]
+[:mouse_move, 1163, 139, 2, 452, 710]
+[:mouse_move, 1166, 138, 2, 453, 711]
+[:mouse_move, 1175, 131, 2, 454, 712]
+[:mouse_move, 1177, 129, 2, 455, 713]
+[:mouse_move, 1180, 124, 2, 456, 714]
+[:mouse_move, 1180, 123, 2, 457, 715]
+[:mouse_move, 1181, 120, 2, 458, 716]
+[:mouse_move, 1182, 118, 2, 459, 717]
+[:mouse_move, 1183, 113, 2, 460, 718]
+[:mouse_move, 1183, 109, 2, 461, 719]
+[:mouse_move, 1187, 99, 2, 462, 720]
+[:mouse_move, 1189, 91, 2, 463, 721]
+[:mouse_move, 1198, 72, 2, 464, 722]
+[:mouse_move, 1203, 61, 2, 465, 723]
+[:mouse_move, 1213, 45, 2, 466, 724]
+[:mouse_move, 1219, 37, 2, 467, 725]
+[:mouse_move, 1232, 24, 2, 468, 726]
+[:mouse_move, 1237, 19, 2, 469, 727]
+[:mouse_move, 1242, 17, 2, 470, 728]
+[:mouse_move, 1247, 15, 2, 471, 729]
+[:mouse_move, 1250, 14, 2, 472, 730]
+[:mouse_move, 1251, 14, 2, 473, 754]
+[:mouse_move, 1252, 14, 2, 474, 755]
+[:mouse_move, 1255, 14, 2, 475, 756]
+[:mouse_move, 1256, 14, 2, 476, 757]
+[:mouse_move, 1258, 14, 2, 477, 758]
+[:mouse_move, 1260, 13, 2, 478, 760]
+[:mouse_button_pressed, 1, 0, 1, 479, 768]
+[:mouse_button_up, 1, 0, 1, 480, 776]
+[:mouse_move, 1254, 17, 2, 481, 801]
+[:mouse_move, 1242, 23, 2, 482, 802]
+[:mouse_move, 1193, 43, 2, 483, 803]
+[:mouse_move, 1154, 56, 2, 484, 804]
+[:mouse_move, 1045, 90, 2, 485, 805]
+[:mouse_move, 978, 113, 2, 486, 806]
+[:mouse_move, 845, 154, 2, 487, 807]
+[:mouse_move, 821, 161, 2, 488, 808]
+[:mouse_move, 772, 176, 2, 489, 809]
+[:mouse_move, 722, 190, 2, 490, 810]
+[:mouse_move, 713, 193, 2, 491, 811]
+[:mouse_move, 689, 200, 2, 492, 812]
+[:mouse_move, 678, 203, 2, 493, 813]
+[:mouse_move, 666, 207, 2, 494, 814]
+[:mouse_move, 663, 208, 2, 495, 815]
+[:mouse_move, 656, 211, 2, 496, 816]
+[:mouse_move, 654, 212, 2, 497, 817]
+[:mouse_move, 649, 215, 2, 498, 818]
+[:mouse_move, 646, 217, 2, 499, 819]
+[:mouse_move, 641, 222, 2, 500, 820]
+[:mouse_move, 638, 224, 2, 501, 821]
+[:mouse_move, 632, 231, 2, 502, 822]
+[:mouse_move, 630, 235, 2, 503, 823]
+[:mouse_move, 625, 245, 2, 504, 824]
+[:mouse_move, 621, 255, 2, 505, 825]
+[:mouse_move, 618, 265, 2, 506, 826]
+[:mouse_move, 618, 267, 2, 507, 827]
+[:mouse_move, 616, 275, 2, 508, 828]
+[:mouse_move, 616, 277, 2, 509, 829]
+[:mouse_move, 616, 285, 2, 510, 830]
+[:mouse_move, 616, 288, 2, 511, 831]
+[:mouse_move, 616, 293, 2, 512, 832]
+[:mouse_move, 617, 295, 2, 513, 833]
+[:mouse_move, 617, 298, 2, 514, 834]
+[:mouse_move, 618, 300, 2, 515, 835]
+[:mouse_move, 618, 302, 2, 516, 837]
+[:mouse_move, 618, 303, 2, 517, 839]
+[:mouse_move, 619, 303, 2, 518, 841]
+[:mouse_move, 621, 303, 2, 519, 842]
+[:mouse_move, 626, 303, 2, 520, 843]
+[:mouse_move, 630, 303, 2, 521, 844]
+[:mouse_move, 642, 303, 2, 522, 845]
+[:mouse_move, 649, 302, 2, 523, 846]
+[:mouse_move, 664, 300, 2, 524, 847]
+[:mouse_move, 669, 299, 2, 525, 848]
+[:mouse_move, 680, 298, 2, 526, 849]
+[:mouse_move, 685, 298, 2, 527, 850]
+[:mouse_move, 695, 298, 2, 528, 851]
+[:mouse_move, 699, 298, 2, 529, 852]
+[:mouse_move, 705, 298, 2, 530, 853]
+[:mouse_move, 708, 298, 2, 531, 854]
+[:mouse_move, 714, 299, 2, 532, 855]
+[:mouse_move, 718, 301, 2, 533, 856]
+[:mouse_move, 725, 303, 2, 534, 857]
+[:mouse_move, 729, 304, 2, 535, 858]
+[:mouse_move, 736, 306, 2, 536, 859]
+[:mouse_move, 743, 309, 2, 537, 861]
+[:mouse_move, 745, 309, 2, 538, 862]
+[:mouse_move, 747, 309, 2, 539, 863]
+[:mouse_move, 748, 309, 2, 540, 864]
+[:mouse_move, 749, 309, 2, 541, 866]
+[:mouse_move, 750, 309, 2, 542, 867]
+[:mouse_move, 762, 316, 2, 543, 889]
+[:mouse_move, 793, 340, 2, 544, 890]
+[:mouse_move, 824, 367, 2, 545, 891]
+[:mouse_move, 905, 445, 2, 546, 892]
+[:mouse_move, 926, 465, 2, 547, 893]
+[:mouse_move, 966, 506, 2, 548, 894]
+[:mouse_move, 1010, 548, 2, 549, 895]
+[:mouse_move, 1033, 569, 2, 550, 896]
+[:mouse_move, 1072, 604, 2, 551, 897]
+[:mouse_move, 1087, 619, 2, 552, 898]
+[:mouse_move, 1113, 647, 2, 553, 899]
+[:mouse_move, 1118, 653, 2, 554, 900]
+[:mouse_move, 1134, 670, 2, 555, 901]
+[:mouse_move, 1136, 673, 2, 556, 902]
+[:mouse_move, 1144, 680, 2, 557, 903]
+[:mouse_move, 1150, 685, 2, 558, 904]
+[:mouse_move, 1153, 687, 2, 559, 905]
+[:mouse_move, 1155, 687, 2, 560, 918]
+[:mouse_move, 1160, 687, 2, 561, 919]
+[:mouse_move, 1173, 688, 2, 562, 920]
+[:mouse_move, 1179, 691, 2, 563, 921]
+[:mouse_move, 1197, 698, 2, 564, 922]
+[:mouse_move, 1203, 701, 2, 565, 923]
+[:mouse_move, 1216, 705, 2, 566, 924]
+[:mouse_move, 1222, 708, 2, 567, 925]
+[:mouse_move, 1231, 711, 2, 568, 926]
+[:mouse_move, 1238, 712, 2, 569, 927]
+[:mouse_move, 1245, 713, 2, 570, 928]
+[:mouse_move, 1249, 713, 2, 571, 929]
+[:mouse_move, 1254, 713, 2, 572, 930]
+[:mouse_move, 1256, 713, 2, 573, 931]
+[:mouse_move, 1259, 713, 2, 574, 932]
+[:mouse_move, 1261, 713, 2, 575, 934]
+[:mouse_move, 1261, 712, 2, 576, 936]
+[:mouse_move, 1261, 710, 2, 577, 938]
+[:mouse_move, 1261, 709, 2, 578, 939]
+[:mouse_move, 1261, 707, 2, 579, 940]
+[:mouse_move, 1261, 706, 2, 580, 941]
+[:mouse_move, 1261, 703, 2, 581, 942]
+[:mouse_move, 1261, 702, 2, 582, 943]
+[:mouse_move, 1261, 700, 2, 583, 944]
+[:mouse_move, 1261, 699, 2, 584, 945]
+[:mouse_move, 1261, 697, 2, 585, 947]
+[:mouse_move, 1261, 696, 2, 586, 949]
+[:mouse_move, 1261, 695, 2, 587, 951]
+[:mouse_button_pressed, 1, 0, 1, 588, 953]
+[:mouse_button_up, 1, 0, 1, 589, 959]
+[:mouse_move, 1243, 677, 2, 590, 974]
+[:mouse_move, 1229, 666, 2, 591, 975]
+[:mouse_move, 1186, 633, 2, 592, 976]
+[:mouse_move, 1134, 597, 2, 593, 977]
+[:mouse_move, 1024, 527, 2, 594, 978]
+[:mouse_move, 1003, 516, 2, 595, 979]
+[:mouse_move, 924, 478, 2, 596, 980]
+[:mouse_move, 911, 474, 2, 597, 981]
+[:mouse_move, 851, 449, 2, 598, 982]
+[:mouse_move, 829, 440, 2, 599, 983]
+[:mouse_move, 804, 427, 2, 600, 984]
+[:mouse_move, 793, 422, 2, 601, 985]
+[:mouse_move, 782, 416, 2, 602, 986]
+[:mouse_move, 771, 409, 2, 603, 987]
+[:mouse_move, 759, 399, 2, 604, 988]
+[:mouse_move, 754, 395, 2, 605, 989]
+[:mouse_move, 746, 389, 2, 606, 990]
+[:mouse_move, 742, 386, 2, 607, 991]
+[:mouse_move, 733, 380, 2, 608, 992]
+[:mouse_move, 727, 377, 2, 609, 993]
+[:mouse_move, 709, 368, 2, 610, 994]
+[:mouse_move, 699, 363, 2, 611, 995]
+[:mouse_move, 686, 355, 2, 612, 996]
+[:mouse_move, 679, 350, 2, 613, 997]
+[:mouse_move, 672, 346, 2, 614, 998]
+[:mouse_move, 669, 343, 2, 615, 999]
+[:mouse_move, 667, 341, 2, 616, 1000]
+[:mouse_move, 663, 339, 2, 617, 1001]
+[:mouse_move, 662, 337, 2, 618, 1002]
+[:mouse_move, 658, 332, 2, 619, 1003]
+[:mouse_move, 655, 329, 2, 620, 1004]
+[:mouse_move, 652, 325, 2, 621, 1005]
+[:mouse_move, 650, 322, 2, 622, 1006]
+[:mouse_move, 646, 318, 2, 623, 1007]
+[:mouse_move, 645, 317, 2, 624, 1008]
+[:mouse_move, 644, 315, 2, 625, 1009]
+[:mouse_move, 643, 314, 2, 626, 1010]
+[:mouse_move, 640, 313, 2, 627, 1011]
+[:mouse_move, 639, 312, 2, 628, 1012]
+[:mouse_move, 636, 310, 2, 629, 1013]
+[:mouse_move, 635, 310, 2, 630, 1014]
+[:mouse_move, 634, 309, 2, 631, 1015]
+[:mouse_move, 633, 308, 2, 632, 1016]
+[:mouse_move, 632, 308, 2, 633, 1017]
+[:mouse_move, 633, 308, 2, 634, 1024]
+[:mouse_move, 634, 308, 2, 635, 1025]
+[:mouse_move, 635, 308, 2, 636, 1027]
+[:mouse_move, 637, 308, 2, 637, 1028]
+[:mouse_move, 639, 308, 2, 638, 1029]
+[:mouse_move, 643, 308, 2, 639, 1030]
+[:mouse_move, 646, 308, 2, 640, 1031]
+[:mouse_move, 650, 308, 2, 641, 1032]
+[:mouse_move, 652, 308, 2, 642, 1033]
+[:mouse_move, 658, 308, 2, 643, 1034]
+[:mouse_move, 661, 308, 2, 644, 1035]
+[:mouse_move, 670, 308, 2, 645, 1036]
+[:mouse_move, 674, 308, 2, 646, 1037]
+[:mouse_move, 680, 307, 2, 647, 1038]
+[:mouse_move, 683, 307, 2, 648, 1039]
+[:mouse_move, 691, 306, 2, 649, 1040]
+[:mouse_move, 694, 305, 2, 650, 1041]
+[:mouse_move, 702, 304, 2, 651, 1042]
+[:mouse_move, 705, 304, 2, 652, 1043]
+[:mouse_move, 712, 303, 2, 653, 1044]
+[:mouse_move, 715, 303, 2, 654, 1045]
+[:mouse_move, 722, 303, 2, 655, 1046]
+[:mouse_move, 727, 303, 2, 656, 1047]
+[:mouse_move, 735, 303, 2, 657, 1048]
+[:mouse_move, 740, 303, 2, 658, 1049]
+[:mouse_move, 748, 303, 2, 659, 1050]
+[:mouse_move, 750, 303, 2, 660, 1051]
+[:mouse_move, 756, 303, 2, 661, 1052]
+[:mouse_move, 758, 304, 2, 662, 1053]
+[:mouse_move, 760, 304, 2, 663, 1054]
+[:mouse_move, 762, 304, 2, 664, 1055]
+[:mouse_move, 763, 304, 2, 665, 1056]
+[:mouse_move, 764, 304, 2, 666, 1057]
+[:mouse_move, 756, 304, 2, 667, 1075]
+[:mouse_move, 744, 306, 2, 668, 1076]
+[:mouse_move, 707, 310, 2, 669, 1077]
+[:mouse_move, 682, 311, 2, 670, 1078]
+[:mouse_move, 548, 334, 2, 671, 1079]
+[:mouse_move, 472, 350, 2, 672, 1080]
+[:mouse_move, 432, 363, 2, 673, 1081]
+[:mouse_move, 289, 420, 2, 674, 1082]
+[:mouse_move, 226, 452, 2, 675, 1083]
+[:mouse_move, 156, 504, 2, 676, 1084]
+[:mouse_move, 124, 536, 2, 677, 1085]
+[:mouse_move, 97, 576, 2, 678, 1086]
+[:mouse_move, 93, 584, 2, 679, 1087]
+[:mouse_move, 84, 606, 2, 680, 1088]
+[:mouse_move, 81, 610, 2, 681, 1100]
+[:mouse_move, 75, 620, 2, 682, 1101]
+[:mouse_move, 59, 642, 2, 683, 1102]
+[:mouse_move, 52, 649, 2, 684, 1103]
+[:mouse_move, 45, 658, 2, 685, 1104]
+[:mouse_move, 39, 666, 2, 686, 1105]
+[:mouse_move, 31, 676, 2, 687, 1106]
+[:mouse_move, 30, 678, 2, 688, 1107]
+[:mouse_move, 28, 681, 2, 689, 1108]
+[:mouse_move, 27, 682, 2, 690, 1109]
+[:mouse_move, 27, 683, 2, 691, 1111]
+[:mouse_move, 27, 684, 2, 692, 1113]
+[:mouse_move, 27, 685, 2, 693, 1116]
+[:mouse_move, 27, 686, 2, 694, 1117]
+[:mouse_move, 27, 689, 2, 695, 1119]
+[:mouse_move, 26, 690, 2, 696, 1120]
+[:mouse_move, 23, 694, 2, 697, 1121]
+[:mouse_move, 22, 695, 2, 698, 1122]
+[:mouse_move, 18, 697, 2, 699, 1123]
+[:mouse_move, 17, 698, 2, 700, 1124]
+[:mouse_move, 16, 699, 2, 701, 1125]
+[:mouse_move, 15, 699, 2, 702, 1126]
+[:mouse_move, 15, 700, 2, 703, 1127]
+[:mouse_move, 15, 701, 2, 704, 1131]
+[:mouse_button_pressed, 1, 0, 1, 705, 1141]
+[:mouse_button_up, 1, 0, 1, 706, 1148]
+[:mouse_move, 21, 699, 2, 707, 1160]
+[:mouse_move, 31, 694, 2, 708, 1161]
+[:mouse_move, 77, 673, 2, 709, 1162]
+[:mouse_move, 153, 638, 2, 710, 1163]
+[:mouse_move, 225, 604, 2, 711, 1164]
+[:mouse_move, 406, 525, 2, 712, 1165]
+[:mouse_move, 512, 479, 2, 713, 1166]
+[:mouse_move, 655, 417, 2, 714, 1167]
+[:mouse_move, 737, 382, 2, 715, 1168]
+[:mouse_move, 788, 360, 2, 716, 1169]
+[:mouse_move, 831, 339, 2, 717, 1170]
+[:mouse_move, 849, 332, 2, 718, 1171]
+[:mouse_move, 864, 325, 2, 719, 1172]
+[:mouse_move, 879, 317, 2, 720, 1173]
+[:mouse_move, 880, 316, 2, 721, 1174]
+[:mouse_move, 877, 316, 2, 722, 1175]
+[:mouse_move, 875, 316, 2, 723, 1176]
+[:mouse_move, 871, 316, 2, 724, 1177]
+[:mouse_move, 866, 315, 2, 725, 1178]
+[:mouse_move, 855, 314, 2, 726, 1179]
+[:mouse_move, 842, 313, 2, 727, 1180]
+[:mouse_move, 808, 313, 2, 728, 1181]
+[:mouse_move, 783, 313, 2, 729, 1182]
+[:mouse_move, 728, 313, 2, 730, 1183]
+[:mouse_move, 715, 313, 2, 731, 1184]
+[:mouse_move, 670, 313, 2, 732, 1185]
+[:mouse_move, 652, 313, 2, 733, 1186]
+[:mouse_move, 641, 313, 2, 734, 1187]
+[:mouse_move, 634, 313, 2, 735, 1188]
+[:mouse_move, 625, 313, 2, 736, 1189]
+[:mouse_move, 623, 313, 2, 737, 1190]
+[:mouse_move, 622, 313, 2, 738, 1191]
+[:mouse_move, 621, 312, 2, 739, 1192]
+[:mouse_move, 622, 312, 2, 740, 1201]
+[:mouse_move, 624, 312, 2, 741, 1202]
+[:mouse_move, 626, 312, 2, 742, 1203]
+[:mouse_move, 632, 311, 2, 743, 1204]
+[:mouse_move, 636, 311, 2, 744, 1205]
+[:mouse_move, 647, 311, 2, 745, 1206]
+[:mouse_move, 653, 311, 2, 746, 1207]
+[:mouse_move, 665, 310, 2, 747, 1208]
+[:mouse_move, 669, 310, 2, 748, 1209]
+[:mouse_move, 676, 310, 2, 749, 1210]
+[:mouse_move, 683, 310, 2, 750, 1211]
+[:mouse_move, 687, 310, 2, 751, 1212]
+[:mouse_move, 689, 310, 2, 752, 1213]
+[:mouse_move, 693, 310, 2, 753, 1214]
+[:mouse_move, 696, 310, 2, 754, 1215]
+[:mouse_move, 702, 310, 2, 755, 1216]
+[:mouse_move, 706, 310, 2, 756, 1217]
+[:mouse_move, 709, 310, 2, 757, 1218]
+[:mouse_move, 714, 310, 2, 758, 1219]
+[:mouse_move, 716, 310, 2, 759, 1220]
+[:mouse_move, 721, 310, 2, 760, 1221]
+[:mouse_move, 724, 310, 2, 761, 1222]
+[:mouse_move, 727, 310, 2, 762, 1223]
+[:mouse_move, 728, 310, 2, 763, 1224]
+[:mouse_move, 730, 310, 2, 764, 1225]
+[:mouse_move, 731, 310, 2, 765, 1227]
+[:mouse_move, 730, 310, 2, 766, 1245]
+[:mouse_move, 687, 306, 2, 767, 1246]
+[:mouse_move, 658, 303, 2, 768, 1247]
+[:mouse_move, 570, 289, 2, 769, 1248]
+[:mouse_move, 503, 280, 2, 770, 1249]
+[:mouse_move, 371, 259, 2, 771, 1250]
+[:mouse_move, 345, 254, 2, 772, 1251]
+[:mouse_move, 248, 229, 2, 773, 1252]
+[:mouse_move, 212, 215, 2, 774, 1253]
+[:mouse_move, 177, 195, 2, 775, 1254]
+[:mouse_move, 159, 184, 2, 776, 1255]
+[:mouse_move, 141, 168, 2, 777, 1256]
+[:mouse_move, 123, 151, 2, 778, 1257]
+[:mouse_move, 96, 121, 2, 779, 1258]
+[:mouse_move, 91, 114, 2, 780, 1259]
+[:mouse_move, 71, 87, 2, 781, 1260]
+[:mouse_move, 62, 74, 2, 782, 1261]
+[:mouse_move, 51, 59, 2, 783, 1262]
+[:mouse_move, 45, 52, 2, 784, 1263]
+[:mouse_move, 36, 40, 2, 785, 1264]
+[:mouse_move, 34, 39, 2, 786, 1279]
+[:mouse_move, 32, 39, 2, 787, 1280]
+[:mouse_move, 30, 37, 2, 788, 1281]
+[:mouse_move, 29, 35, 2, 789, 1282]
+[:mouse_move, 26, 32, 2, 790, 1283]
+[:mouse_move, 25, 31, 2, 791, 1284]
+[:mouse_move, 24, 30, 2, 792, 1285]
+[:mouse_move, 23, 29, 2, 793, 1286]
+[:mouse_move, 22, 27, 2, 794, 1287]
+[:mouse_move, 22, 26, 2, 795, 1289]
+[:mouse_move, 21, 25, 2, 796, 1290]
+[:mouse_move, 21, 23, 2, 797, 1291]
+[:mouse_move, 21, 22, 2, 798, 1292]
+[:mouse_move, 20, 20, 2, 799, 1293]
+[:mouse_move, 20, 19, 2, 800, 1295]
+[:mouse_move, 19, 19, 2, 801, 1296]
+[:mouse_move, 19, 18, 2, 802, 1297]
+[:mouse_move, 18, 17, 2, 803, 1298]
+[:mouse_move, 17, 16, 2, 804, 1299]
+[:mouse_move, 16, 15, 2, 805, 1300]
+[:mouse_move, 15, 14, 2, 806, 1302]
+[:mouse_move, 15, 13, 2, 807, 1303]
+[:mouse_move, 14, 13, 2, 808, 1304]
+[:mouse_move, 14, 12, 2, 809, 1307]
+[:mouse_button_pressed, 1, 0, 1, 810, 1322]
+[:mouse_button_up, 1, 0, 1, 811, 1328]
+[:mouse_move, 36, 23, 2, 812, 1345]
+[:mouse_move, 57, 34, 2, 813, 1346]
+[:mouse_move, 231, 131, 2, 814, 1347]
+[:mouse_move, 347, 196, 2, 815, 1348]
+[:mouse_move, 530, 298, 2, 816, 1349]
+[:mouse_move, 582, 323, 2, 817, 1350]
+[:mouse_move, 707, 381, 2, 818, 1351]
+[:mouse_move, 769, 405, 2, 819, 1352]
+[:mouse_move, 786, 409, 2, 820, 1353]
+[:mouse_move, 807, 414, 2, 821, 1354]
+[:mouse_move, 826, 420, 2, 822, 1355]
+[:mouse_move, 844, 425, 2, 823, 1356]
+[:mouse_move, 850, 426, 2, 824, 1357]
+[:mouse_move, 850, 425, 2, 825, 1358]
+[:mouse_move, 847, 423, 2, 826, 1359]
+[:mouse_move, 838, 418, 2, 827, 1360]
+[:mouse_move, 833, 414, 2, 828, 1361]
+[:mouse_move, 816, 403, 2, 829, 1362]
+[:mouse_move, 809, 398, 2, 830, 1363]
+[:mouse_move, 781, 378, 2, 831, 1364]
+[:mouse_move, 773, 373, 2, 832, 1365]
+[:mouse_move, 745, 360, 2, 833, 1366]
+[:mouse_move, 730, 354, 2, 834, 1367]
+[:mouse_move, 709, 348, 2, 835, 1368]
+[:mouse_move, 697, 345, 2, 836, 1369]
+[:mouse_move, 685, 342, 2, 837, 1370]
+[:mouse_move, 680, 342, 2, 838, 1371]
+[:mouse_move, 672, 340, 2, 839, 1372]
+[:mouse_move, 670, 340, 2, 840, 1373]
+[:mouse_move, 666, 340, 2, 841, 1374]
+[:mouse_move, 665, 339, 2, 842, 1375]
+[:mouse_move, 661, 339, 2, 843, 1376]
+[:mouse_move, 660, 338, 2, 844, 1377]
+[:mouse_move, 655, 337, 2, 845, 1378]
+[:mouse_move, 652, 336, 2, 846, 1379]
+[:mouse_move, 650, 333, 2, 847, 1380]
+[:mouse_move, 644, 328, 2, 848, 1381]
+[:mouse_move, 642, 326, 2, 849, 1382]
+[:mouse_move, 638, 322, 2, 850, 1383]
+[:mouse_move, 637, 321, 2, 851, 1384]
+[:mouse_move, 636, 318, 2, 852, 1385]
+[:mouse_move, 635, 318, 2, 853, 1386]
+[:mouse_move, 635, 317, 2, 854, 1387]
+[:mouse_move, 636, 317, 2, 855, 1392]
+[:mouse_move, 642, 317, 2, 856, 1393]
+[:mouse_move, 648, 317, 2, 857, 1394]
+[:mouse_move, 658, 318, 2, 858, 1395]
+[:mouse_move, 664, 318, 2, 859, 1396]
+[:mouse_move, 671, 318, 2, 860, 1397]
+[:mouse_move, 676, 318, 2, 861, 1398]
+[:mouse_move, 684, 318, 2, 862, 1399]
+[:mouse_move, 687, 318, 2, 863, 1400]
+[:mouse_move, 693, 318, 2, 864, 1401]
+[:mouse_move, 694, 318, 2, 865, 1402]
+[:mouse_move, 701, 318, 2, 866, 1403]
+[:mouse_move, 702, 318, 2, 867, 1404]
+[:mouse_move, 708, 318, 2, 868, 1405]
+[:mouse_move, 711, 318, 2, 869, 1406]
+[:mouse_move, 713, 318, 2, 870, 1407]
+[:mouse_move, 718, 318, 2, 871, 1408]
+[:mouse_move, 721, 318, 2, 872, 1409]
+[:mouse_move, 726, 317, 2, 873, 1410]
+[:mouse_move, 728, 317, 2, 874, 1411]
+[:mouse_move, 731, 317, 2, 875, 1412]
+[:mouse_move, 733, 317, 2, 876, 1413]
+[:mouse_move, 736, 317, 2, 877, 1414]
+[:mouse_move, 738, 317, 2, 878, 1415]
+[:mouse_move, 739, 317, 2, 879, 1416]
+[:mouse_move, 740, 317, 2, 880, 1417]
+[:mouse_move, 741, 317, 2, 881, 1418]
+[:mouse_move, 705, 270, 2, 882, 1455]
+[:mouse_move, 659, 221, 2, 883, 1456]
+[:mouse_move, 515, 112, 2, 884, 1457]
+[:mouse_move, 474, 92, 2, 885, 1458]
+[:mouse_move, 315, 31, 2, 886, 1459]
+[:mouse_move, 238, 13, 2, 887, 1460]
+[:mouse_move, 168, 3, 2, 888, 1461]
+[:mouse_move, 92, 0, 2, 889, 1462]
diff --git a/samples/02_input_basics/03_mouse_point_to_rect/app/main.rb b/samples/02_input_basics/03_mouse_point_to_rect/app/main.rb
new file mode 100644
index 0000000..7dd627f
--- /dev/null
+++ b/samples/02_input_basics/03_mouse_point_to_rect/app/main.rb
@@ -0,0 +1,90 @@
+=begin
+
+APIs that haven't been encountered in a previous sample apps:
+
+- args.outputus.borders: An array. Values in this array will be rendered as
+ unfilled rectangles on the screen.
+- ARRAY#inside_rect?: An array with at least two values is considered a point. An array
+ with at least four values is considered a rect. The inside_rect? function returns true
+ or false depending on if the point is inside the rect.
+
+ ```
+ # Point: x: 100, y: 100
+ # Rect: x: 0, y: 0, w: 500, h: 500
+ # Result: true
+
+ [100, 100].inside_rect? [0, 0, 500, 500]
+ ```
+
+ ```
+ # Point: x: 100, y: 100
+ # Rect: x: 300, y: 300, w: 100, h: 100
+ # Result: false
+
+ [100, 100].inside_rect? [300, 300, 100, 100]
+ ```
+
+- args.inputs.mouse.click.point.created_at: The frame the mouse click occurred in.
+- args.inputs.mouse.click.point.created_at_elapsed: How many frames have passed
+ since the click event.
+
+=end
+
+# To determine whether a point is in a rect
+# Use point.inside_rect? rect
+
+# This is useful to determine if a click occurred in a rect
+
+def tick args
+ tick_instructions args, "Sample app shows how to determing if a click happened inside a rectangle."
+
+ x = 460
+
+ args.outputs.labels << small_label(args, x, 15, "Click inside the blue box maybe ---->")
+
+ box = [785, 370, 50, 50, 0, 0, 170]
+ args.outputs.borders << box
+
+ # Saves the most recent click into args.state
+ # Unlike the other components of args,
+ # args.state does not reset every tick.
+ if args.inputs.mouse.click
+ args.state.last_mouse_click = args.inputs.mouse.click
+ end
+
+ if args.state.last_mouse_click
+ if args.state.last_mouse_click.point.inside_rect? box
+ args.outputs.labels << small_label(args, x, 16, "Mouse click happened *inside* the box.")
+ else
+ args.outputs.labels << small_label(args, x, 16, "Mouse click happened *outside* the box.")
+ end
+ else
+ args.outputs.labels << small_label(args, x, 16, "Mouse click has not occurred yet.")
+ end
+end
+
+def small_label args, x, row, message
+ [x, row_to_px(args, row), message, small_font]
+end
+
+def small_font
+ [-2, 0, 0, 0, 0, 255]
+end
+
+def row_to_px args, row_number
+ args.grid.top.shift_down(5).shift_down(20 * row_number)
+end
+
+def tick_instructions args, text, y = 715
+ return if args.state.key_event_occurred
+ if args.inputs.mouse.click ||
+ args.inputs.keyboard.directional_vector ||
+ args.inputs.keyboard.key_down.enter ||
+ args.inputs.keyboard.key_down.escape
+ args.state.key_event_occurred = true
+ end
+
+ args.outputs.debug << [0, y - 50, 1280, 60].solid
+ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label
+ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label
+end
diff --git a/samples/02_input_basics/03_mouse_point_to_rect/license-for-sample.txt b/samples/02_input_basics/03_mouse_point_to_rect/license-for-sample.txt
new file mode 100644
index 0000000..100dcec
--- /dev/null
+++ b/samples/02_input_basics/03_mouse_point_to_rect/license-for-sample.txt
@@ -0,0 +1,9 @@
+Copyright 2019 DragonRuby LLC
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/samples/02_input_basics/03_mouse_point_to_rect/replay.txt b/samples/02_input_basics/03_mouse_point_to_rect/replay.txt
new file mode 100644
index 0000000..8da3bad
--- /dev/null
+++ b/samples/02_input_basics/03_mouse_point_to_rect/replay.txt
@@ -0,0 +1,515 @@
+replay_version 2.0
+stopped_at 796
+seed 100
+recorded_at Sun Sep 29 21:34:41 2019
+[:mouse_move, 1191, 0, 2, 1, 90]
+[:mouse_move, 1115, 68, 2, 2, 90]
+[:mouse_move, 1039, 143, 2, 3, 91]
+[:mouse_move, 963, 216, 2, 4, 92]
+[:mouse_move, 928, 249, 2, 5, 92]
+[:mouse_move, 866, 308, 2, 6, 93]
+[:mouse_move, 843, 329, 2, 7, 94]
+[:mouse_move, 787, 381, 2, 8, 95]
+[:mouse_move, 776, 391, 2, 9, 96]
+[:mouse_move, 755, 410, 2, 10, 97]
+[:mouse_move, 745, 418, 2, 11, 98]
+[:mouse_move, 738, 424, 2, 12, 99]
+[:mouse_move, 736, 425, 2, 13, 100]
+[:mouse_move, 736, 424, 2, 14, 103]
+[:mouse_move, 736, 423, 2, 15, 105]
+[:mouse_move, 736, 422, 2, 16, 106]
+[:mouse_move, 736, 421, 2, 17, 107]
+[:mouse_move, 736, 419, 2, 18, 107]
+[:mouse_move, 736, 416, 2, 19, 108]
+[:mouse_move, 735, 413, 2, 20, 109]
+[:mouse_move, 735, 411, 2, 21, 109]
+[:mouse_move, 734, 408, 2, 22, 110]
+[:mouse_move, 732, 404, 2, 23, 111]
+[:mouse_move, 731, 401, 2, 24, 111]
+[:mouse_move, 729, 393, 2, 25, 112]
+[:mouse_move, 728, 385, 2, 26, 113]
+[:mouse_move, 728, 376, 2, 27, 113]
+[:mouse_move, 729, 367, 2, 28, 114]
+[:mouse_move, 734, 355, 2, 29, 115]
+[:mouse_move, 741, 344, 2, 30, 115]
+[:mouse_move, 748, 333, 2, 31, 116]
+[:mouse_move, 752, 329, 2, 32, 117]
+[:mouse_move, 755, 326, 2, 33, 117]
+[:mouse_move, 758, 322, 2, 34, 118]
+[:mouse_move, 760, 319, 2, 35, 119]
+[:mouse_move, 762, 317, 2, 36, 119]
+[:mouse_move, 762, 316, 2, 37, 120]
+[:mouse_move, 755, 318, 2, 38, 122]
+[:mouse_move, 748, 321, 2, 39, 123]
+[:mouse_move, 721, 326, 2, 40, 124]
+[:mouse_move, 705, 329, 2, 41, 125]
+[:mouse_move, 674, 330, 2, 42, 126]
+[:mouse_move, 645, 328, 2, 43, 127]
+[:mouse_move, 602, 310, 2, 44, 128]
+[:mouse_move, 590, 304, 2, 45, 129]
+[:mouse_move, 577, 298, 2, 46, 130]
+[:mouse_move, 567, 293, 2, 47, 131]
+[:mouse_move, 555, 287, 2, 48, 132]
+[:mouse_move, 553, 286, 2, 49, 133]
+[:mouse_move, 551, 284, 2, 50, 134]
+[:mouse_move, 550, 284, 2, 51, 134]
+[:mouse_move, 550, 285, 2, 52, 140]
+[:mouse_move, 550, 286, 2, 53, 141]
+[:mouse_move, 549, 288, 2, 54, 142]
+[:mouse_move, 548, 291, 2, 55, 142]
+[:mouse_move, 546, 295, 2, 56, 143]
+[:mouse_move, 542, 302, 2, 57, 144]
+[:mouse_move, 539, 305, 2, 58, 144]
+[:mouse_move, 535, 311, 2, 59, 145]
+[:mouse_move, 530, 317, 2, 60, 146]
+[:mouse_move, 524, 321, 2, 61, 146]
+[:mouse_move, 518, 327, 2, 62, 147]
+[:mouse_move, 513, 331, 2, 63, 148]
+[:mouse_move, 507, 335, 2, 64, 148]
+[:mouse_move, 504, 336, 2, 65, 149]
+[:mouse_move, 500, 338, 2, 66, 150]
+[:mouse_move, 494, 341, 2, 67, 151]
+[:mouse_move, 492, 342, 2, 68, 152]
+[:mouse_move, 491, 342, 2, 69, 152]
+[:mouse_move, 489, 342, 2, 70, 153]
+[:mouse_move, 486, 343, 2, 71, 154]
+[:mouse_move, 482, 343, 2, 72, 155]
+[:mouse_move, 480, 343, 2, 73, 156]
+[:mouse_move, 477, 343, 2, 74, 157]
+[:mouse_move, 475, 343, 2, 75, 158]
+[:mouse_move, 473, 343, 2, 76, 159]
+[:mouse_move, 472, 343, 2, 77, 160]
+[:mouse_move, 471, 343, 2, 78, 162]
+[:mouse_move, 471, 342, 2, 79, 163]
+[:mouse_move, 471, 341, 2, 80, 167]
+[:mouse_move, 471, 340, 2, 81, 169]
+[:mouse_move, 472, 340, 2, 82, 171]
+[:mouse_move, 473, 340, 2, 83, 172]
+[:mouse_move, 473, 339, 2, 84, 173]
+[:mouse_move, 474, 339, 2, 85, 174]
+[:mouse_move, 475, 339, 2, 86, 175]
+[:mouse_move, 476, 339, 2, 87, 178]
+[:mouse_move, 479, 338, 2, 88, 180]
+[:mouse_move, 482, 338, 2, 89, 181]
+[:mouse_move, 489, 336, 2, 90, 182]
+[:mouse_move, 493, 335, 2, 91, 183]
+[:mouse_move, 502, 334, 2, 92, 184]
+[:mouse_move, 505, 334, 2, 93, 185]
+[:mouse_move, 515, 333, 2, 94, 186]
+[:mouse_move, 525, 333, 2, 95, 187]
+[:mouse_move, 529, 333, 2, 96, 188]
+[:mouse_move, 536, 333, 2, 97, 188]
+[:mouse_move, 539, 333, 2, 98, 189]
+[:mouse_move, 544, 332, 2, 99, 190]
+[:mouse_move, 548, 332, 2, 100, 190]
+[:mouse_move, 555, 332, 2, 101, 191]
+[:mouse_move, 559, 332, 2, 102, 192]
+[:mouse_move, 563, 332, 2, 103, 192]
+[:mouse_move, 568, 332, 2, 104, 193]
+[:mouse_move, 572, 332, 2, 105, 194]
+[:mouse_move, 577, 332, 2, 106, 194]
+[:mouse_move, 579, 332, 2, 107, 195]
+[:mouse_move, 583, 332, 2, 108, 196]
+[:mouse_move, 585, 332, 2, 109, 196]
+[:mouse_move, 588, 332, 2, 110, 197]
+[:mouse_move, 589, 332, 2, 111, 198]
+[:mouse_move, 591, 332, 2, 112, 198]
+[:mouse_move, 594, 332, 2, 113, 199]
+[:mouse_move, 597, 332, 2, 114, 200]
+[:mouse_move, 600, 332, 2, 115, 200]
+[:mouse_move, 602, 332, 2, 116, 201]
+[:mouse_move, 605, 332, 2, 117, 202]
+[:mouse_move, 610, 332, 2, 118, 202]
+[:mouse_move, 614, 332, 2, 119, 203]
+[:mouse_move, 618, 332, 2, 120, 204]
+[:mouse_move, 634, 333, 2, 121, 205]
+[:mouse_move, 638, 334, 2, 122, 206]
+[:mouse_move, 654, 337, 2, 123, 207]
+[:mouse_move, 660, 338, 2, 124, 208]
+[:mouse_move, 675, 340, 2, 125, 209]
+[:mouse_move, 681, 340, 2, 126, 210]
+[:mouse_move, 688, 341, 2, 127, 211]
+[:mouse_move, 692, 341, 2, 128, 212]
+[:mouse_move, 696, 341, 2, 129, 212]
+[:mouse_move, 698, 341, 2, 130, 213]
+[:mouse_move, 700, 340, 2, 131, 214]
+[:mouse_move, 702, 340, 2, 132, 215]
+[:mouse_move, 703, 339, 2, 133, 215]
+[:mouse_move, 704, 339, 2, 134, 216]
+[:mouse_move, 705, 338, 2, 135, 217]
+[:mouse_move, 706, 338, 2, 136, 217]
+[:mouse_move, 707, 338, 2, 137, 220]
+[:mouse_move, 707, 337, 2, 138, 221]
+[:mouse_move, 704, 337, 2, 139, 242]
+[:mouse_move, 697, 337, 2, 140, 242]
+[:mouse_move, 683, 337, 2, 141, 243]
+[:mouse_move, 666, 337, 2, 142, 244]
+[:mouse_move, 655, 337, 2, 143, 244]
+[:mouse_move, 638, 337, 2, 144, 245]
+[:mouse_move, 619, 337, 2, 145, 246]
+[:mouse_move, 602, 338, 2, 146, 246]
+[:mouse_move, 586, 340, 2, 147, 247]
+[:mouse_move, 572, 342, 2, 148, 248]
+[:mouse_move, 559, 344, 2, 149, 248]
+[:mouse_move, 547, 347, 2, 150, 249]
+[:mouse_move, 542, 348, 2, 151, 250]
+[:mouse_move, 532, 349, 2, 152, 250]
+[:mouse_move, 525, 351, 2, 153, 251]
+[:mouse_move, 517, 352, 2, 154, 252]
+[:mouse_move, 512, 352, 2, 155, 252]
+[:mouse_move, 506, 353, 2, 156, 253]
+[:mouse_move, 501, 353, 2, 157, 254]
+[:mouse_move, 495, 354, 2, 158, 254]
+[:mouse_move, 490, 354, 2, 159, 255]
+[:mouse_move, 488, 354, 2, 160, 256]
+[:mouse_move, 484, 354, 2, 161, 256]
+[:mouse_move, 481, 354, 2, 162, 257]
+[:mouse_move, 480, 354, 2, 163, 258]
+[:mouse_move, 477, 354, 2, 164, 259]
+[:mouse_move, 476, 354, 2, 165, 260]
+[:mouse_move, 474, 354, 2, 166, 261]
+[:mouse_move, 473, 354, 2, 167, 262]
+[:mouse_move, 471, 354, 2, 168, 263]
+[:mouse_move, 470, 354, 2, 169, 265]
+[:mouse_move, 470, 355, 2, 170, 267]
+[:mouse_move, 473, 355, 2, 171, 269]
+[:mouse_move, 481, 356, 2, 172, 269]
+[:mouse_move, 492, 357, 2, 173, 270]
+[:mouse_move, 508, 357, 2, 174, 271]
+[:mouse_move, 519, 357, 2, 175, 271]
+[:mouse_move, 536, 357, 2, 176, 272]
+[:mouse_move, 544, 357, 2, 177, 273]
+[:mouse_move, 556, 357, 2, 178, 273]
+[:mouse_move, 568, 357, 2, 179, 274]
+[:mouse_move, 578, 355, 2, 180, 275]
+[:mouse_move, 588, 355, 2, 181, 275]
+[:mouse_move, 597, 353, 2, 182, 276]
+[:mouse_move, 605, 353, 2, 183, 277]
+[:mouse_move, 612, 353, 2, 184, 277]
+[:mouse_move, 619, 352, 2, 185, 278]
+[:mouse_move, 625, 352, 2, 186, 279]
+[:mouse_move, 631, 352, 2, 187, 279]
+[:mouse_move, 637, 352, 2, 188, 280]
+[:mouse_move, 642, 352, 2, 189, 281]
+[:mouse_move, 647, 352, 2, 190, 281]
+[:mouse_move, 652, 352, 2, 191, 282]
+[:mouse_move, 659, 352, 2, 192, 283]
+[:mouse_move, 665, 351, 2, 193, 283]
+[:mouse_move, 671, 351, 2, 194, 284]
+[:mouse_move, 673, 350, 2, 195, 285]
+[:mouse_move, 679, 349, 2, 196, 286]
+[:mouse_move, 681, 348, 2, 197, 287]
+[:mouse_move, 683, 347, 2, 198, 288]
+[:mouse_move, 684, 347, 2, 199, 289]
+[:mouse_move, 687, 347, 2, 200, 298]
+[:mouse_move, 691, 347, 2, 201, 299]
+[:mouse_move, 698, 347, 2, 202, 300]
+[:mouse_move, 714, 347, 2, 203, 300]
+[:mouse_move, 728, 347, 2, 204, 301]
+[:mouse_move, 738, 346, 2, 205, 302]
+[:mouse_move, 752, 343, 2, 206, 302]
+[:mouse_move, 759, 342, 2, 207, 303]
+[:mouse_move, 770, 340, 2, 208, 304]
+[:mouse_move, 779, 338, 2, 209, 304]
+[:mouse_move, 782, 337, 2, 210, 305]
+[:mouse_move, 794, 335, 2, 211, 306]
+[:mouse_move, 796, 335, 2, 212, 306]
+[:mouse_move, 801, 334, 2, 213, 307]
+[:mouse_move, 804, 333, 2, 214, 308]
+[:mouse_move, 806, 332, 2, 215, 308]
+[:mouse_move, 808, 332, 2, 216, 309]
+[:mouse_move, 810, 331, 2, 217, 310]
+[:mouse_move, 811, 331, 2, 218, 310]
+[:mouse_move, 812, 330, 2, 219, 311]
+[:mouse_move, 813, 329, 2, 220, 313]
+[:mouse_move, 814, 327, 2, 221, 315]
+[:mouse_move, 814, 326, 2, 222, 316]
+[:mouse_move, 814, 324, 2, 223, 317]
+[:mouse_move, 815, 323, 2, 224, 319]
+[:mouse_button_pressed, 1, 0, 1, 225, 326]
+[:mouse_button_up, 1, 0, 1, 226, 334]
+[:mouse_move, 815, 324, 2, 227, 367]
+[:mouse_move, 814, 327, 2, 228, 369]
+[:mouse_move, 811, 330, 2, 229, 370]
+[:mouse_move, 800, 337, 2, 230, 371]
+[:mouse_move, 791, 341, 2, 231, 372]
+[:mouse_move, 753, 353, 2, 232, 373]
+[:mouse_move, 743, 355, 2, 233, 374]
+[:mouse_move, 708, 362, 2, 234, 375]
+[:mouse_move, 692, 364, 2, 235, 376]
+[:mouse_move, 676, 364, 2, 236, 377]
+[:mouse_move, 656, 365, 2, 237, 378]
+[:mouse_move, 645, 365, 2, 238, 379]
+[:mouse_move, 628, 365, 2, 239, 380]
+[:mouse_move, 623, 364, 2, 240, 381]
+[:mouse_move, 612, 364, 2, 241, 382]
+[:mouse_move, 610, 364, 2, 242, 383]
+[:mouse_move, 600, 363, 2, 243, 384]
+[:mouse_move, 599, 362, 2, 244, 385]
+[:mouse_move, 595, 361, 2, 245, 386]
+[:mouse_move, 594, 361, 2, 246, 387]
+[:mouse_move, 593, 361, 2, 247, 388]
+[:mouse_move, 597, 361, 2, 248, 392]
+[:mouse_move, 601, 361, 2, 249, 393]
+[:mouse_move, 609, 361, 2, 250, 394]
+[:mouse_move, 612, 361, 2, 251, 395]
+[:mouse_move, 620, 360, 2, 252, 396]
+[:mouse_move, 626, 360, 2, 253, 397]
+[:mouse_move, 633, 358, 2, 254, 398]
+[:mouse_move, 637, 357, 2, 255, 399]
+[:mouse_move, 646, 354, 2, 256, 400]
+[:mouse_move, 650, 352, 2, 257, 401]
+[:mouse_move, 658, 349, 2, 258, 402]
+[:mouse_move, 662, 346, 2, 259, 403]
+[:mouse_move, 663, 344, 2, 260, 404]
+[:mouse_move, 671, 339, 2, 261, 405]
+[:mouse_move, 672, 338, 2, 262, 406]
+[:mouse_move, 677, 334, 2, 263, 407]
+[:mouse_move, 678, 332, 2, 264, 408]
+[:mouse_move, 681, 330, 2, 265, 409]
+[:mouse_move, 681, 329, 2, 266, 410]
+[:mouse_move, 683, 327, 2, 267, 411]
+[:mouse_move, 684, 326, 2, 268, 412]
+[:mouse_move, 685, 323, 2, 269, 413]
+[:mouse_move, 685, 322, 2, 270, 414]
+[:mouse_move, 686, 319, 2, 271, 415]
+[:mouse_move, 686, 317, 2, 272, 416]
+[:mouse_move, 686, 312, 2, 273, 417]
+[:mouse_move, 685, 311, 2, 274, 418]
+[:mouse_move, 680, 307, 2, 275, 419]
+[:mouse_move, 677, 305, 2, 276, 420]
+[:mouse_move, 672, 303, 2, 277, 421]
+[:mouse_move, 669, 302, 2, 278, 422]
+[:mouse_move, 663, 299, 2, 279, 423]
+[:mouse_move, 658, 299, 2, 280, 424]
+[:mouse_move, 652, 299, 2, 281, 425]
+[:mouse_move, 649, 299, 2, 282, 426]
+[:mouse_move, 645, 300, 2, 283, 427]
+[:mouse_move, 642, 301, 2, 284, 428]
+[:mouse_move, 639, 303, 2, 285, 429]
+[:mouse_move, 637, 304, 2, 286, 430]
+[:mouse_move, 633, 308, 2, 287, 431]
+[:mouse_move, 631, 311, 2, 288, 432]
+[:mouse_move, 629, 313, 2, 289, 433]
+[:mouse_move, 623, 319, 2, 290, 434]
+[:mouse_move, 620, 322, 2, 291, 435]
+[:mouse_move, 616, 327, 2, 292, 436]
+[:mouse_move, 614, 331, 2, 293, 437]
+[:mouse_move, 611, 336, 2, 294, 438]
+[:mouse_move, 610, 338, 2, 295, 439]
+[:mouse_move, 609, 345, 2, 296, 440]
+[:mouse_move, 610, 350, 2, 297, 441]
+[:mouse_move, 617, 360, 2, 298, 442]
+[:mouse_move, 620, 364, 2, 299, 443]
+[:mouse_move, 629, 373, 2, 300, 444]
+[:mouse_move, 634, 376, 2, 301, 445]
+[:mouse_move, 640, 379, 2, 302, 446]
+[:mouse_move, 646, 380, 2, 303, 447]
+[:mouse_move, 651, 380, 2, 304, 448]
+[:mouse_move, 654, 378, 2, 305, 449]
+[:mouse_move, 659, 373, 2, 306, 450]
+[:mouse_move, 662, 370, 2, 307, 451]
+[:mouse_move, 667, 362, 2, 308, 452]
+[:mouse_move, 670, 358, 2, 309, 453]
+[:mouse_move, 673, 354, 2, 310, 454]
+[:mouse_move, 676, 349, 2, 311, 455]
+[:mouse_move, 679, 343, 2, 312, 456]
+[:mouse_move, 680, 340, 2, 313, 457]
+[:mouse_move, 681, 332, 2, 314, 458]
+[:mouse_move, 682, 327, 2, 315, 459]
+[:mouse_move, 682, 321, 2, 316, 460]
+[:mouse_move, 682, 310, 2, 317, 461]
+[:mouse_move, 682, 308, 2, 318, 462]
+[:mouse_move, 681, 301, 2, 319, 463]
+[:mouse_move, 679, 296, 2, 320, 464]
+[:mouse_move, 674, 291, 2, 321, 465]
+[:mouse_move, 670, 289, 2, 322, 466]
+[:mouse_move, 659, 287, 2, 323, 467]
+[:mouse_move, 654, 287, 2, 324, 468]
+[:mouse_move, 644, 287, 2, 325, 469]
+[:mouse_move, 642, 287, 2, 326, 470]
+[:mouse_move, 633, 288, 2, 327, 471]
+[:mouse_move, 629, 289, 2, 328, 472]
+[:mouse_move, 623, 295, 2, 329, 473]
+[:mouse_move, 619, 298, 2, 330, 474]
+[:mouse_move, 613, 306, 2, 331, 475]
+[:mouse_move, 611, 310, 2, 332, 476]
+[:mouse_move, 608, 315, 2, 333, 477]
+[:mouse_move, 608, 318, 2, 334, 478]
+[:mouse_move, 607, 323, 2, 335, 479]
+[:mouse_move, 607, 327, 2, 336, 480]
+[:mouse_move, 607, 334, 2, 337, 481]
+[:mouse_move, 608, 337, 2, 338, 482]
+[:mouse_move, 613, 344, 2, 339, 483]
+[:mouse_move, 617, 347, 2, 340, 484]
+[:mouse_move, 625, 355, 2, 341, 485]
+[:mouse_move, 630, 358, 2, 342, 486]
+[:mouse_move, 635, 361, 2, 343, 487]
+[:mouse_move, 648, 366, 2, 344, 488]
+[:mouse_move, 654, 367, 2, 345, 489]
+[:mouse_move, 667, 368, 2, 346, 490]
+[:mouse_move, 672, 368, 2, 347, 491]
+[:mouse_move, 681, 364, 2, 348, 492]
+[:mouse_move, 684, 360, 2, 349, 493]
+[:mouse_move, 690, 354, 2, 350, 494]
+[:mouse_move, 690, 352, 2, 351, 495]
+[:mouse_move, 693, 346, 2, 352, 496]
+[:mouse_move, 693, 343, 2, 353, 497]
+[:mouse_move, 694, 335, 2, 354, 498]
+[:mouse_move, 693, 332, 2, 355, 499]
+[:mouse_move, 687, 326, 2, 356, 500]
+[:mouse_move, 684, 323, 2, 357, 501]
+[:mouse_move, 679, 320, 2, 358, 502]
+[:mouse_move, 677, 319, 2, 359, 503]
+[:mouse_move, 674, 318, 2, 360, 504]
+[:mouse_move, 674, 317, 2, 361, 505]
+[:mouse_move, 675, 317, 2, 362, 519]
+[:mouse_move, 682, 317, 2, 363, 520]
+[:mouse_move, 700, 321, 2, 364, 521]
+[:mouse_move, 710, 324, 2, 365, 522]
+[:mouse_move, 726, 326, 2, 366, 523]
+[:mouse_move, 741, 328, 2, 367, 524]
+[:mouse_move, 774, 330, 2, 368, 525]
+[:mouse_move, 779, 330, 2, 369, 526]
+[:mouse_move, 799, 330, 2, 370, 527]
+[:mouse_move, 808, 330, 2, 371, 528]
+[:mouse_move, 832, 330, 2, 372, 529]
+[:mouse_move, 835, 331, 2, 373, 530]
+[:mouse_move, 850, 331, 2, 374, 531]
+[:mouse_move, 852, 332, 2, 375, 532]
+[:mouse_move, 860, 332, 2, 376, 533]
+[:mouse_move, 863, 332, 2, 377, 534]
+[:mouse_move, 868, 332, 2, 378, 535]
+[:mouse_move, 870, 332, 2, 379, 536]
+[:mouse_move, 873, 332, 2, 380, 537]
+[:mouse_move, 875, 332, 2, 381, 538]
+[:mouse_move, 878, 332, 2, 382, 539]
+[:mouse_move, 881, 332, 2, 383, 540]
+[:mouse_move, 883, 332, 2, 384, 541]
+[:mouse_move, 887, 331, 2, 385, 542]
+[:mouse_move, 890, 331, 2, 386, 543]
+[:mouse_move, 894, 330, 2, 387, 544]
+[:mouse_move, 895, 330, 2, 388, 545]
+[:mouse_move, 898, 330, 2, 389, 546]
+[:mouse_move, 899, 330, 2, 390, 547]
+[:mouse_move, 900, 330, 2, 391, 548]
+[:mouse_move, 901, 330, 2, 392, 549]
+[:mouse_button_pressed, 1, 0, 1, 393, 552]
+[:mouse_button_up, 1, 0, 1, 394, 560]
+[:mouse_move, 895, 336, 2, 395, 598]
+[:mouse_move, 888, 341, 2, 396, 599]
+[:mouse_move, 856, 356, 2, 397, 600]
+[:mouse_move, 834, 364, 2, 398, 601]
+[:mouse_move, 779, 375, 2, 399, 602]
+[:mouse_move, 747, 379, 2, 400, 603]
+[:mouse_move, 701, 382, 2, 401, 604]
+[:mouse_move, 675, 382, 2, 402, 605]
+[:mouse_move, 650, 382, 2, 403, 606]
+[:mouse_move, 637, 381, 2, 404, 607]
+[:mouse_move, 626, 378, 2, 405, 608]
+[:mouse_move, 622, 376, 2, 406, 609]
+[:mouse_move, 616, 372, 2, 407, 610]
+[:mouse_move, 615, 371, 2, 408, 611]
+[:mouse_move, 614, 369, 2, 409, 612]
+[:mouse_move, 614, 368, 2, 410, 614]
+[:mouse_move, 614, 367, 2, 411, 615]
+[:mouse_move, 614, 366, 2, 412, 616]
+[:mouse_move, 615, 365, 2, 413, 618]
+[:mouse_move, 616, 364, 2, 414, 620]
+[:mouse_move, 617, 364, 2, 415, 623]
+[:mouse_move, 617, 363, 2, 416, 624]
+[:mouse_move, 618, 363, 2, 417, 626]
+[:mouse_move, 623, 363, 2, 418, 627]
+[:mouse_move, 626, 364, 2, 419, 628]
+[:mouse_move, 635, 367, 2, 420, 629]
+[:mouse_move, 641, 368, 2, 421, 630]
+[:mouse_move, 654, 370, 2, 422, 631]
+[:mouse_move, 661, 370, 2, 423, 632]
+[:mouse_move, 678, 369, 2, 424, 633]
+[:mouse_move, 681, 367, 2, 425, 634]
+[:mouse_move, 694, 361, 2, 426, 635]
+[:mouse_move, 699, 356, 2, 427, 636]
+[:mouse_move, 707, 348, 2, 428, 637]
+[:mouse_move, 709, 346, 2, 429, 638]
+[:mouse_move, 714, 338, 2, 430, 639]
+[:mouse_move, 715, 335, 2, 431, 640]
+[:mouse_move, 715, 327, 2, 432, 641]
+[:mouse_move, 715, 323, 2, 433, 642]
+[:mouse_move, 709, 315, 2, 434, 643]
+[:mouse_move, 706, 311, 2, 435, 644]
+[:mouse_move, 697, 304, 2, 436, 645]
+[:mouse_move, 688, 299, 2, 437, 646]
+[:mouse_move, 672, 296, 2, 438, 647]
+[:mouse_move, 667, 296, 2, 439, 648]
+[:mouse_move, 654, 295, 2, 440, 649]
+[:mouse_move, 647, 295, 2, 441, 650]
+[:mouse_move, 642, 295, 2, 442, 651]
+[:mouse_move, 631, 296, 2, 443, 652]
+[:mouse_move, 625, 298, 2, 444, 653]
+[:mouse_move, 619, 301, 2, 445, 654]
+[:mouse_move, 616, 303, 2, 446, 655]
+[:mouse_move, 611, 306, 2, 447, 656]
+[:mouse_move, 608, 309, 2, 448, 657]
+[:mouse_move, 607, 314, 2, 449, 658]
+[:mouse_move, 606, 317, 2, 450, 659]
+[:mouse_move, 606, 324, 2, 451, 660]
+[:mouse_move, 606, 329, 2, 452, 661]
+[:mouse_move, 611, 338, 2, 453, 662]
+[:mouse_move, 612, 340, 2, 454, 663]
+[:mouse_move, 615, 345, 2, 455, 664]
+[:mouse_move, 617, 347, 2, 456, 665]
+[:mouse_move, 622, 351, 2, 457, 666]
+[:mouse_move, 624, 352, 2, 458, 667]
+[:mouse_move, 632, 355, 2, 459, 668]
+[:mouse_move, 636, 356, 2, 460, 669]
+[:mouse_move, 645, 358, 2, 461, 670]
+[:mouse_move, 650, 359, 2, 462, 671]
+[:mouse_move, 667, 360, 2, 463, 672]
+[:mouse_move, 675, 360, 2, 464, 673]
+[:mouse_move, 686, 360, 2, 465, 674]
+[:mouse_move, 693, 360, 2, 466, 675]
+[:mouse_move, 699, 360, 2, 467, 676]
+[:mouse_move, 707, 356, 2, 468, 677]
+[:mouse_move, 710, 354, 2, 469, 678]
+[:mouse_move, 716, 348, 2, 470, 679]
+[:mouse_move, 717, 343, 2, 471, 680]
+[:mouse_move, 718, 334, 2, 472, 681]
+[:mouse_move, 718, 329, 2, 473, 682]
+[:mouse_move, 717, 319, 2, 474, 683]
+[:mouse_move, 714, 314, 2, 475, 684]
+[:mouse_move, 705, 305, 2, 476, 685]
+[:mouse_move, 699, 301, 2, 477, 686]
+[:mouse_move, 688, 295, 2, 478, 687]
+[:mouse_move, 682, 293, 2, 479, 688]
+[:mouse_move, 674, 290, 2, 480, 689]
+[:mouse_move, 666, 288, 2, 481, 690]
+[:mouse_move, 657, 287, 2, 482, 691]
+[:mouse_move, 651, 287, 2, 483, 692]
+[:mouse_move, 642, 288, 2, 484, 693]
+[:mouse_move, 638, 290, 2, 485, 694]
+[:mouse_move, 628, 295, 2, 486, 695]
+[:mouse_move, 624, 298, 2, 487, 696]
+[:mouse_move, 617, 305, 2, 488, 697]
+[:mouse_move, 614, 309, 2, 489, 698]
+[:mouse_move, 611, 317, 2, 490, 699]
+[:mouse_move, 610, 322, 2, 491, 700]
+[:mouse_move, 610, 329, 2, 492, 701]
+[:mouse_move, 610, 333, 2, 493, 702]
+[:mouse_move, 615, 341, 2, 494, 703]
+[:mouse_move, 618, 345, 2, 495, 704]
+[:mouse_move, 622, 348, 2, 496, 705]
+[:mouse_move, 631, 355, 2, 497, 706]
+[:mouse_move, 636, 359, 2, 498, 707]
+[:mouse_move, 646, 365, 2, 499, 708]
+[:mouse_move, 650, 368, 2, 500, 709]
+[:mouse_move, 659, 371, 2, 501, 710]
+[:mouse_move, 663, 372, 2, 502, 711]
+[:mouse_move, 668, 372, 2, 503, 712]
+[:mouse_move, 671, 372, 2, 504, 713]
+[:mouse_move, 676, 372, 2, 505, 714]
+[:mouse_move, 678, 371, 2, 506, 715]
+[:mouse_move, 681, 369, 2, 507, 716]
+[:mouse_move, 682, 369, 2, 508, 717]
+[:mouse_move, 683, 368, 2, 509, 718]
+[:key_down_raw, 1073742051, 1024, 2, 510, 794]
+[:key_down_raw, 113, 1024, 2, 511, 795]
diff --git a/samples/02_input_basics/04_mouse_rect_to_rect/app/main.rb b/samples/02_input_basics/04_mouse_rect_to_rect/app/main.rb
new file mode 100644
index 0000000..1a00a41
--- /dev/null
+++ b/samples/02_input_basics/04_mouse_rect_to_rect/app/main.rb
@@ -0,0 +1,97 @@
+=begin
+
+APIs that haven't been encountered in a previous sample apps:
+
+- args.outputs.borders: An array. Values in this array will be rendered as
+ unfilled rectangles on the screen.
+- ARRAY#intersect_rect?: An array with at least four values is
+ considered a rect. The intersect_rect? function returns true
+ or false depending on if the two rectangles intersect.
+
+ ```
+ # Rect One: x: 100, y: 100, w: 100, h: 100
+ # Rect Two: x: 0, y: 0, w: 500, h: 500
+ # Result: true
+
+ [100, 100, 100, 100].intersect_rect? [0, 0, 500, 500]
+ ```
+
+ ```
+ # Rect One: x: 100, y: 100, w: 10, h: 10
+ # Rect Two: x: 500, y: 500, w: 10, h: 10
+ # Result: false
+
+ [100, 100, 10, 10].intersect_rect? [500, 500, 10, 10]
+ ```
+
+=end
+
+# Similarly, whether rects intersect can be found through
+# rect1.intersect_rect? rect2
+
+def tick args
+ tick_instructions args, "Sample app shows how to determine if two rectangles intersect."
+ x = 460
+
+ args.outputs.labels << small_label(args, x, 3, "Click anywhere on the screen")
+ # red_box = [460, 250, 355, 90, 170, 0, 0]
+ # args.outputs.borders << red_box
+
+ # args.state.box_collision_one and args.state.box_collision_two
+ # Are given values of a solid when they should be rendered
+ # They are stored in game so that they do not get reset every tick
+ if args.inputs.mouse.click
+ if !args.state.box_collision_one
+ args.state.box_collision_one = [args.inputs.mouse.click.point.x - 25, args.inputs.mouse.click.point.y - 25, 125, 125, 180, 0, 0, 180]
+ elsif !args.state.box_collision_two
+ args.state.box_collision_two = [args.inputs.mouse.click.point.x - 25, args.inputs.mouse.click.point.y - 25, 125, 125, 0, 0, 180, 180]
+ else
+ args.state.box_collision_one = nil
+ args.state.box_collision_two = nil
+ end
+ end
+
+ if args.state.box_collision_one
+ args.outputs.solids << args.state.box_collision_one
+ end
+
+ if args.state.box_collision_two
+ args.outputs.solids << args.state.box_collision_two
+ end
+
+ if args.state.box_collision_one && args.state.box_collision_two
+ if args.state.box_collision_one.intersect_rect? args.state.box_collision_two
+ args.outputs.labels << small_label(args, x, 4, 'The boxes intersect.')
+ else
+ args.outputs.labels << small_label(args, x, 4, 'The boxes do not intersect.')
+ end
+ else
+ args.outputs.labels << small_label(args, x, 4, '--')
+ end
+end
+
+def small_label args, x, row, message
+ [x, row_to_px(args, row), message, small_font]
+end
+
+def small_font
+ [-2, 0, 0, 0, 0, 255]
+end
+
+def row_to_px args, row_number
+ args.grid.top.shift_down(5).shift_down(20 * row_number)
+end
+
+def tick_instructions args, text, y = 715
+ return if args.state.key_event_occurred
+ if args.inputs.mouse.click ||
+ args.inputs.keyboard.directional_vector ||
+ args.inputs.keyboard.key_down.enter ||
+ args.inputs.keyboard.key_down.escape
+ args.state.key_event_occurred = true
+ end
+
+ args.outputs.debug << [0, y - 50, 1280, 60].solid
+ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label
+ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label
+end
diff --git a/samples/02_input_basics/04_mouse_rect_to_rect/license-for-sample.txt b/samples/02_input_basics/04_mouse_rect_to_rect/license-for-sample.txt
new file mode 100644
index 0000000..100dcec
--- /dev/null
+++ b/samples/02_input_basics/04_mouse_rect_to_rect/license-for-sample.txt
@@ -0,0 +1,9 @@
+Copyright 2019 DragonRuby LLC
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/samples/02_input_basics/04_mouse_rect_to_rect/replay.txt b/samples/02_input_basics/04_mouse_rect_to_rect/replay.txt
new file mode 100644
index 0000000..7ddec95
--- /dev/null
+++ b/samples/02_input_basics/04_mouse_rect_to_rect/replay.txt
@@ -0,0 +1,376 @@
+replay_version 2.0
+stopped_at 909
+seed 100
+recorded_at Sun Sep 29 21:35:19 2019
+[:mouse_move, 670, 363, 2, 1, 87]
+[:mouse_move, 642, 353, 2, 2, 88]
+[:mouse_move, 631, 351, 2, 3, 89]
+[:mouse_move, 578, 338, 2, 4, 90]
+[:mouse_move, 555, 332, 2, 5, 91]
+[:mouse_move, 521, 326, 2, 6, 92]
+[:mouse_move, 503, 323, 2, 7, 93]
+[:mouse_move, 495, 322, 2, 8, 94]
+[:mouse_move, 479, 319, 2, 9, 95]
+[:mouse_move, 472, 318, 2, 10, 96]
+[:mouse_move, 463, 317, 2, 11, 97]
+[:mouse_move, 461, 317, 2, 12, 98]
+[:mouse_move, 457, 316, 2, 13, 99]
+[:mouse_move, 455, 315, 2, 14, 101]
+[:mouse_move, 454, 315, 2, 15, 102]
+[:mouse_move, 454, 314, 2, 16, 105]
+[:mouse_button_pressed, 1, 0, 1, 17, 110]
+[:mouse_button_up, 1, 0, 1, 18, 118]
+[:mouse_move, 455, 314, 2, 19, 201]
+[:mouse_move, 472, 314, 2, 20, 202]
+[:mouse_move, 490, 314, 2, 21, 203]
+[:mouse_move, 528, 313, 2, 22, 204]
+[:mouse_move, 585, 307, 2, 23, 205]
+[:mouse_move, 625, 301, 2, 24, 206]
+[:mouse_move, 697, 288, 2, 25, 207]
+[:mouse_move, 729, 283, 2, 26, 208]
+[:mouse_move, 763, 279, 2, 27, 209]
+[:mouse_move, 784, 278, 2, 28, 210]
+[:mouse_move, 788, 278, 2, 29, 211]
+[:mouse_move, 797, 278, 2, 30, 212]
+[:mouse_move, 802, 278, 2, 31, 213]
+[:mouse_move, 809, 278, 2, 32, 214]
+[:mouse_move, 810, 278, 2, 33, 215]
+[:mouse_move, 811, 279, 2, 34, 216]
+[:mouse_move, 812, 279, 2, 35, 218]
+[:mouse_move, 810, 279, 2, 36, 222]
+[:mouse_move, 801, 276, 2, 37, 223]
+[:mouse_move, 793, 273, 2, 38, 224]
+[:mouse_move, 784, 271, 2, 39, 225]
+[:mouse_move, 757, 268, 2, 40, 226]
+[:mouse_move, 738, 266, 2, 41, 227]
+[:mouse_move, 734, 266, 2, 42, 228]
+[:mouse_move, 721, 266, 2, 43, 229]
+[:mouse_move, 717, 266, 2, 44, 230]
+[:mouse_move, 715, 266, 2, 45, 231]
+[:mouse_move, 712, 266, 2, 46, 232]
+[:mouse_move, 711, 266, 2, 47, 234]
+[:mouse_move, 711, 267, 2, 48, 238]
+[:mouse_move, 710, 267, 2, 49, 242]
+[:mouse_move, 709, 267, 2, 50, 246]
+[:mouse_button_pressed, 1, 0, 1, 51, 247]
+[:mouse_button_up, 1, 0, 1, 52, 254]
+[:mouse_move, 708, 264, 2, 53, 296]
+[:mouse_move, 706, 261, 2, 54, 297]
+[:mouse_move, 696, 249, 2, 55, 298]
+[:mouse_move, 688, 242, 2, 56, 299]
+[:mouse_move, 671, 228, 2, 57, 300]
+[:mouse_move, 632, 204, 2, 58, 301]
+[:mouse_move, 582, 176, 2, 59, 302]
+[:mouse_move, 571, 169, 2, 60, 303]
+[:mouse_move, 543, 153, 2, 61, 304]
+[:mouse_move, 521, 140, 2, 62, 306]
+[:mouse_move, 516, 137, 2, 63, 307]
+[:mouse_move, 512, 135, 2, 64, 308]
+[:mouse_move, 510, 134, 2, 65, 309]
+[:mouse_move, 508, 133, 2, 66, 310]
+[:mouse_move, 504, 132, 2, 67, 311]
+[:mouse_move, 500, 132, 2, 68, 312]
+[:mouse_move, 497, 132, 2, 69, 313]
+[:mouse_move, 491, 132, 2, 70, 315]
+[:mouse_move, 488, 132, 2, 71, 316]
+[:mouse_move, 487, 132, 2, 72, 317]
+[:mouse_move, 484, 131, 2, 73, 318]
+[:mouse_move, 482, 130, 2, 74, 319]
+[:mouse_move, 481, 129, 2, 75, 320]
+[:mouse_move, 477, 127, 2, 76, 321]
+[:mouse_move, 475, 125, 2, 77, 322]
+[:mouse_move, 472, 123, 2, 78, 323]
+[:mouse_move, 470, 122, 2, 79, 324]
+[:mouse_move, 468, 120, 2, 80, 325]
+[:mouse_move, 466, 120, 2, 81, 326]
+[:mouse_move, 463, 117, 2, 82, 327]
+[:mouse_move, 461, 116, 2, 83, 328]
+[:mouse_move, 459, 115, 2, 84, 329]
+[:mouse_move, 458, 114, 2, 85, 330]
+[:mouse_move, 457, 112, 2, 86, 331]
+[:mouse_move, 456, 112, 2, 87, 332]
+[:mouse_move, 456, 111, 2, 88, 335]
+[:mouse_move, 457, 111, 2, 89, 340]
+[:mouse_move, 458, 111, 2, 90, 342]
+[:mouse_move, 459, 111, 2, 91, 343]
+[:mouse_move, 461, 111, 2, 92, 346]
+[:mouse_move, 463, 111, 2, 93, 347]
+[:mouse_move, 468, 110, 2, 94, 348]
+[:mouse_move, 471, 109, 2, 95, 349]
+[:mouse_move, 475, 109, 2, 96, 350]
+[:mouse_move, 483, 107, 2, 97, 351]
+[:mouse_move, 491, 106, 2, 98, 352]
+[:mouse_move, 496, 106, 2, 99, 353]
+[:mouse_move, 505, 105, 2, 100, 354]
+[:mouse_move, 510, 104, 2, 101, 355]
+[:mouse_move, 520, 104, 2, 102, 356]
+[:mouse_move, 525, 104, 2, 103, 357]
+[:mouse_move, 529, 104, 2, 104, 358]
+[:mouse_move, 537, 104, 2, 105, 359]
+[:mouse_move, 540, 104, 2, 106, 360]
+[:mouse_move, 548, 104, 2, 107, 361]
+[:mouse_move, 553, 104, 2, 108, 362]
+[:mouse_move, 560, 106, 2, 109, 363]
+[:mouse_move, 562, 106, 2, 110, 364]
+[:mouse_move, 571, 108, 2, 111, 365]
+[:mouse_move, 576, 110, 2, 112, 366]
+[:mouse_move, 578, 110, 2, 113, 367]
+[:mouse_move, 584, 112, 2, 114, 368]
+[:mouse_move, 585, 112, 2, 115, 369]
+[:mouse_move, 588, 112, 2, 116, 370]
+[:mouse_move, 592, 113, 2, 117, 371]
+[:mouse_move, 596, 113, 2, 118, 372]
+[:mouse_move, 597, 113, 2, 119, 373]
+[:mouse_move, 599, 113, 2, 120, 374]
+[:mouse_move, 604, 113, 2, 121, 375]
+[:mouse_move, 606, 113, 2, 122, 376]
+[:mouse_move, 610, 113, 2, 123, 377]
+[:mouse_move, 612, 113, 2, 124, 378]
+[:mouse_move, 617, 113, 2, 125, 379]
+[:mouse_move, 618, 113, 2, 126, 380]
+[:mouse_move, 620, 113, 2, 127, 381]
+[:mouse_move, 625, 113, 2, 128, 382]
+[:mouse_move, 629, 113, 2, 129, 383]
+[:mouse_move, 632, 113, 2, 130, 384]
+[:mouse_move, 633, 113, 2, 131, 385]
+[:mouse_move, 639, 112, 2, 132, 386]
+[:mouse_move, 644, 111, 2, 133, 387]
+[:mouse_move, 647, 111, 2, 134, 388]
+[:mouse_move, 648, 111, 2, 135, 389]
+[:mouse_move, 653, 110, 2, 136, 390]
+[:mouse_move, 659, 110, 2, 137, 391]
+[:mouse_move, 663, 109, 2, 138, 392]
+[:mouse_move, 667, 109, 2, 139, 393]
+[:mouse_move, 669, 109, 2, 140, 394]
+[:mouse_move, 672, 109, 2, 141, 395]
+[:mouse_move, 673, 109, 2, 142, 396]
+[:mouse_move, 674, 109, 2, 143, 397]
+[:mouse_move, 675, 109, 2, 144, 398]
+[:mouse_move, 674, 117, 2, 145, 426]
+[:mouse_move, 663, 166, 2, 146, 427]
+[:mouse_move, 654, 205, 2, 147, 428]
+[:mouse_move, 636, 260, 2, 148, 429]
+[:mouse_move, 617, 308, 2, 149, 430]
+[:mouse_move, 606, 332, 2, 150, 431]
+[:mouse_move, 595, 354, 2, 151, 432]
+[:mouse_move, 591, 361, 2, 152, 433]
+[:mouse_move, 579, 388, 2, 153, 434]
+[:mouse_move, 571, 406, 2, 154, 435]
+[:mouse_move, 570, 409, 2, 155, 436]
+[:mouse_move, 566, 418, 2, 156, 437]
+[:mouse_move, 564, 421, 2, 157, 438]
+[:mouse_move, 563, 423, 2, 158, 439]
+[:mouse_move, 560, 427, 2, 159, 440]
+[:mouse_move, 558, 428, 2, 160, 441]
+[:mouse_move, 553, 431, 2, 161, 442]
+[:mouse_move, 545, 433, 2, 162, 443]
+[:mouse_move, 542, 434, 2, 163, 444]
+[:mouse_move, 540, 435, 2, 164, 445]
+[:mouse_move, 535, 436, 2, 165, 446]
+[:mouse_move, 533, 436, 2, 166, 447]
+[:mouse_move, 530, 437, 2, 167, 448]
+[:mouse_move, 529, 437, 2, 168, 449]
+[:mouse_button_pressed, 1, 0, 1, 169, 456]
+[:mouse_button_up, 1, 0, 1, 170, 466]
+[:mouse_move, 529, 435, 2, 171, 509]
+[:mouse_move, 529, 433, 2, 172, 510]
+[:mouse_move, 528, 426, 2, 173, 511]
+[:mouse_move, 527, 418, 2, 174, 512]
+[:mouse_move, 526, 410, 2, 175, 513]
+[:mouse_move, 525, 400, 2, 176, 514]
+[:mouse_move, 523, 388, 2, 177, 515]
+[:mouse_move, 521, 369, 2, 178, 516]
+[:mouse_move, 521, 356, 2, 179, 517]
+[:mouse_move, 520, 347, 2, 180, 518]
+[:mouse_move, 520, 344, 2, 181, 519]
+[:mouse_move, 519, 341, 2, 182, 520]
+[:mouse_move, 519, 340, 2, 183, 522]
+[:mouse_move, 519, 341, 2, 184, 524]
+[:mouse_move, 519, 345, 2, 185, 525]
+[:mouse_move, 519, 348, 2, 186, 526]
+[:mouse_move, 519, 352, 2, 187, 527]
+[:mouse_move, 519, 356, 2, 188, 528]
+[:mouse_move, 519, 364, 2, 189, 529]
+[:mouse_move, 519, 371, 2, 190, 530]
+[:mouse_move, 520, 373, 2, 191, 531]
+[:mouse_move, 522, 377, 2, 192, 532]
+[:mouse_move, 523, 379, 2, 193, 533]
+[:mouse_move, 524, 380, 2, 194, 534]
+[:mouse_move, 525, 382, 2, 195, 535]
+[:mouse_move, 526, 382, 2, 196, 536]
+[:mouse_move, 527, 383, 2, 197, 537]
+[:mouse_button_pressed, 1, 0, 1, 198, 540]
+[:mouse_button_up, 1, 0, 1, 199, 549]
+[:mouse_move, 530, 383, 2, 200, 563]
+[:mouse_move, 533, 383, 2, 201, 564]
+[:mouse_move, 537, 381, 2, 202, 565]
+[:mouse_move, 542, 379, 2, 203, 566]
+[:mouse_move, 543, 377, 2, 204, 567]
+[:mouse_move, 548, 371, 2, 205, 568]
+[:mouse_move, 551, 364, 2, 206, 569]
+[:mouse_move, 553, 358, 2, 207, 570]
+[:mouse_move, 557, 345, 2, 208, 571]
+[:mouse_move, 558, 342, 2, 209, 572]
+[:mouse_move, 559, 338, 2, 210, 573]
+[:mouse_move, 562, 331, 2, 211, 574]
+[:mouse_move, 562, 330, 2, 212, 575]
+[:mouse_move, 562, 329, 2, 213, 576]
+[:mouse_move, 563, 329, 2, 214, 578]
+[:mouse_move, 563, 332, 2, 215, 579]
+[:mouse_move, 564, 334, 2, 216, 580]
+[:mouse_move, 564, 337, 2, 217, 581]
+[:mouse_move, 565, 339, 2, 218, 582]
+[:mouse_move, 565, 341, 2, 219, 583]
+[:mouse_move, 565, 342, 2, 220, 584]
+[:mouse_move, 566, 343, 2, 221, 585]
+[:mouse_move, 567, 343, 2, 222, 593]
+[:mouse_move, 568, 343, 2, 223, 594]
+[:mouse_move, 570, 343, 2, 224, 595]
+[:mouse_move, 571, 343, 2, 225, 596]
+[:mouse_move, 574, 344, 2, 226, 597]
+[:mouse_move, 575, 344, 2, 227, 598]
+[:mouse_move, 577, 344, 2, 228, 599]
+[:mouse_move, 583, 344, 2, 229, 600]
+[:mouse_move, 588, 345, 2, 230, 601]
+[:mouse_move, 603, 346, 2, 231, 602]
+[:mouse_move, 614, 346, 2, 232, 603]
+[:mouse_move, 622, 346, 2, 233, 604]
+[:mouse_move, 632, 347, 2, 234, 605]
+[:mouse_move, 636, 347, 2, 235, 606]
+[:mouse_move, 639, 347, 2, 236, 607]
+[:mouse_move, 643, 347, 2, 237, 608]
+[:mouse_move, 642, 347, 2, 238, 611]
+[:mouse_move, 641, 347, 2, 239, 612]
+[:mouse_move, 640, 347, 2, 240, 613]
+[:mouse_move, 639, 347, 2, 241, 614]
+[:mouse_move, 638, 347, 2, 242, 615]
+[:mouse_move, 636, 347, 2, 243, 617]
+[:mouse_move, 635, 347, 2, 244, 618]
+[:mouse_move, 634, 347, 2, 245, 619]
+[:mouse_move, 633, 347, 2, 246, 620]
+[:mouse_move, 632, 347, 2, 247, 621]
+[:mouse_move, 631, 347, 2, 248, 623]
+[:mouse_move, 630, 347, 2, 249, 627]
+[:mouse_move, 630, 346, 2, 250, 629]
+[:mouse_move, 631, 346, 2, 251, 635]
+[:mouse_move, 631, 345, 2, 252, 636]
+[:mouse_button_pressed, 1, 0, 1, 253, 642]
+[:mouse_button_up, 1, 0, 1, 254, 651]
+[:mouse_move, 630, 340, 2, 255, 701]
+[:mouse_move, 628, 330, 2, 256, 702]
+[:mouse_move, 619, 293, 2, 257, 703]
+[:mouse_move, 615, 278, 2, 258, 704]
+[:mouse_move, 606, 251, 2, 259, 705]
+[:mouse_move, 601, 236, 2, 260, 706]
+[:mouse_move, 591, 213, 2, 261, 707]
+[:mouse_move, 574, 195, 2, 262, 708]
+[:mouse_move, 552, 182, 2, 263, 709]
+[:mouse_move, 539, 176, 2, 264, 710]
+[:mouse_move, 521, 168, 2, 265, 711]
+[:mouse_move, 510, 162, 2, 266, 712]
+[:mouse_move, 500, 157, 2, 267, 713]
+[:mouse_move, 473, 144, 2, 268, 714]
+[:mouse_move, 452, 130, 2, 269, 715]
+[:mouse_move, 443, 121, 2, 270, 716]
+[:mouse_move, 439, 118, 2, 271, 717]
+[:mouse_move, 427, 104, 2, 272, 718]
+[:mouse_move, 425, 102, 2, 273, 719]
+[:mouse_move, 420, 95, 2, 274, 720]
+[:mouse_move, 419, 93, 2, 275, 721]
+[:mouse_move, 418, 92, 2, 276, 722]
+[:mouse_move, 417, 90, 2, 277, 723]
+[:mouse_move, 417, 89, 2, 278, 724]
+[:mouse_move, 417, 88, 2, 279, 726]
+[:mouse_move, 418, 88, 2, 280, 728]
+[:mouse_move, 419, 88, 2, 281, 729]
+[:mouse_move, 423, 89, 2, 282, 730]
+[:mouse_move, 427, 91, 2, 283, 731]
+[:mouse_move, 436, 95, 2, 284, 732]
+[:mouse_move, 440, 98, 2, 285, 733]
+[:mouse_move, 445, 100, 2, 286, 734]
+[:mouse_move, 453, 106, 2, 287, 735]
+[:mouse_move, 458, 109, 2, 288, 736]
+[:mouse_move, 466, 116, 2, 289, 737]
+[:mouse_move, 469, 119, 2, 290, 738]
+[:mouse_move, 478, 125, 2, 291, 739]
+[:mouse_move, 486, 131, 2, 292, 740]
+[:mouse_move, 497, 136, 2, 293, 741]
+[:mouse_move, 504, 139, 2, 294, 742]
+[:mouse_move, 511, 141, 2, 295, 743]
+[:mouse_move, 527, 143, 2, 296, 744]
+[:mouse_move, 542, 143, 2, 297, 745]
+[:mouse_move, 581, 137, 2, 298, 746]
+[:mouse_move, 589, 135, 2, 299, 747]
+[:mouse_move, 616, 126, 2, 300, 748]
+[:mouse_move, 623, 124, 2, 301, 749]
+[:mouse_move, 645, 114, 2, 302, 750]
+[:mouse_move, 654, 109, 2, 303, 752]
+[:mouse_move, 661, 104, 2, 304, 753]
+[:mouse_move, 662, 102, 2, 305, 754]
+[:mouse_move, 663, 101, 2, 306, 755]
+[:mouse_move, 664, 97, 2, 307, 756]
+[:mouse_move, 661, 91, 2, 308, 757]
+[:mouse_move, 657, 88, 2, 309, 758]
+[:mouse_move, 652, 83, 2, 310, 759]
+[:mouse_move, 625, 68, 2, 311, 760]
+[:mouse_move, 586, 53, 2, 312, 761]
+[:mouse_move, 576, 50, 2, 313, 762]
+[:mouse_move, 555, 45, 2, 314, 763]
+[:mouse_move, 531, 39, 2, 315, 764]
+[:mouse_move, 494, 33, 2, 316, 765]
+[:mouse_move, 482, 32, 2, 317, 766]
+[:mouse_move, 470, 32, 2, 318, 767]
+[:mouse_move, 448, 32, 2, 319, 768]
+[:mouse_move, 435, 33, 2, 320, 769]
+[:mouse_move, 427, 36, 2, 321, 770]
+[:mouse_move, 420, 39, 2, 322, 771]
+[:mouse_move, 409, 46, 2, 323, 772]
+[:mouse_move, 398, 63, 2, 324, 774]
+[:mouse_move, 395, 69, 2, 325, 775]
+[:mouse_move, 394, 77, 2, 326, 776]
+[:mouse_move, 394, 81, 2, 327, 777]
+[:mouse_move, 394, 90, 2, 328, 778]
+[:mouse_move, 396, 96, 2, 329, 780]
+[:mouse_move, 406, 107, 2, 330, 781]
+[:mouse_move, 417, 116, 2, 331, 782]
+[:mouse_move, 428, 125, 2, 332, 783]
+[:mouse_move, 449, 135, 2, 333, 784]
+[:mouse_move, 461, 141, 2, 334, 785]
+[:mouse_move, 489, 151, 2, 335, 786]
+[:mouse_move, 503, 154, 2, 336, 787]
+[:mouse_move, 521, 158, 2, 337, 788]
+[:mouse_move, 541, 161, 2, 338, 789]
+[:mouse_move, 552, 161, 2, 339, 790]
+[:mouse_move, 569, 161, 2, 340, 791]
+[:mouse_move, 596, 154, 2, 341, 793]
+[:mouse_move, 612, 148, 2, 342, 794]
+[:mouse_move, 619, 144, 2, 343, 795]
+[:mouse_move, 628, 139, 2, 344, 796]
+[:mouse_move, 631, 137, 2, 345, 797]
+[:mouse_move, 633, 134, 2, 346, 798]
+[:mouse_move, 637, 129, 2, 347, 799]
+[:mouse_move, 637, 125, 2, 348, 800]
+[:mouse_move, 631, 118, 2, 349, 801]
+[:mouse_move, 620, 109, 2, 350, 802]
+[:mouse_move, 611, 102, 2, 351, 803]
+[:mouse_move, 592, 90, 2, 352, 804]
+[:mouse_move, 581, 83, 2, 353, 805]
+[:mouse_move, 567, 77, 2, 354, 806]
+[:mouse_move, 535, 65, 2, 355, 807]
+[:mouse_move, 519, 61, 2, 356, 808]
+[:mouse_move, 498, 59, 2, 357, 809]
+[:mouse_move, 476, 57, 2, 358, 810]
+[:mouse_move, 452, 58, 2, 359, 811]
+[:mouse_move, 442, 62, 2, 360, 812]
+[:mouse_move, 424, 74, 2, 361, 813]
+[:mouse_move, 416, 83, 2, 362, 814]
+[:mouse_move, 402, 111, 2, 363, 815]
+[:mouse_move, 398, 127, 2, 364, 816]
+[:mouse_move, 397, 135, 2, 365, 817]
+[:mouse_move, 395, 151, 2, 366, 818]
+[:mouse_move, 395, 158, 2, 367, 819]
+[:mouse_move, 396, 176, 2, 368, 820]
+[:mouse_move, 404, 181, 2, 369, 821]
+[:mouse_move, 422, 186, 2, 370, 822]
+[:key_down_raw, 1073742051, 1024, 2, 371, 904]
+[:key_down_raw, 113, 1024, 2, 372, 908]
diff --git a/samples/02_input_basics/05_controller/app/main.rb b/samples/02_input_basics/05_controller/app/main.rb
new file mode 100644
index 0000000..99cca15
--- /dev/null
+++ b/samples/02_input_basics/05_controller/app/main.rb
@@ -0,0 +1,126 @@
+=begin
+
+ APIs listing that haven't been encountered in previous sample apps:
+
+ - args.inputs.controller_one.key_held.KEY: Will check to see if a specific key
+ is being held down on the controller.
+ If there is more than one controller being used, they can be differentiated by
+ using names like controller_one and controller_two.
+
+ For a full listing of buttons, take a look at mygame/documentation/08-controllers.md.
+
+ Reminder:
+
+ - args.state.PROPERTY: The state property on args is a dynamic
+ structure. You can define ANY property here with ANY type of
+ arbitrary nesting. Properties defined on args.state will be retained
+ across frames. If you attempt to access a property that doesn't exist
+ on args.state, it will simply return nil (no exception will be thrown).
+
+ In this sample app, args.state.BUTTONS is an array that stores the buttons of the controller.
+ The parameters of a button are:
+ 1. the position (x, y)
+ 2. the input key held on the controller
+ 3. the text or name of the button
+
+=end
+
+# This sample app provides a visual demonstration of a standard controller, including
+# the placement and function of all buttons.
+
+class ControllerDemo
+ attr_accessor :inputs, :state, :outputs
+
+ # Calls the methods necessary for the app to run successfully.
+ def tick
+ process_inputs
+ render
+ end
+
+ # Starts with an empty collection of buttons.
+ # Adds buttons that are on the controller to the collection.
+ def process_inputs
+ state.buttons = []
+
+ state.buttons << [100, 500, inputs.controller_one.key_held.l1, "L1"]
+ state.buttons << [100, 600, inputs.controller_one.key_held.l2, "L2"]
+
+ state.buttons << [1100, 500, inputs.controller_one.key_held.r1, "R1"]
+ state.buttons << [1100, 600, inputs.controller_one.key_held.r2, "R2"]
+
+ state.buttons << [540, 450, inputs.controller_one.key_held.select, "Select"]
+ state.buttons << [660, 450, inputs.controller_one.key_held.start, "Start"]
+
+ state.buttons << [200, 300, inputs.controller_one.key_held.left, "Left"]
+ state.buttons << [300, 400, inputs.controller_one.key_held.up, "Up"]
+ state.buttons << [400, 300, inputs.controller_one.key_held.right, "Right"]
+ state.buttons << [300, 200, inputs.controller_one.key_held.down, "Down"]
+
+ state.buttons << [800, 300, inputs.controller_one.key_held.x, "X"]
+ state.buttons << [900, 400, inputs.controller_one.key_held.y, "Y"]
+ state.buttons << [1000, 300, inputs.controller_one.key_held.a, "A"]
+ state.buttons << [900, 200, inputs.controller_one.key_held.b, "B"]
+
+ state.buttons << [450 + inputs.controller_one.left_analog_x_perc * 100,
+ 100 + inputs.controller_one.left_analog_y_perc * 100,
+ inputs.controller_one.key_held.l3,
+ "L3"]
+
+ state.buttons << [750 + inputs.controller_one.right_analog_x_perc * 100,
+ 100 + inputs.controller_one.right_analog_y_perc * 100,
+ inputs.controller_one.key_held.r3,
+ "R3"]
+ end
+
+ # Gives each button a square shape.
+ # If the button is being pressed or held (which means it is considered active),
+ # the square is filled in. Otherwise, the button simply has a border.
+ def render
+ state.buttons.each do |x, y, active, text|
+ rect = [x, y, 75, 75]
+
+ if active # if button is pressed
+ outputs.solids << rect # rect is output as solid (filled in)
+ else
+ outputs.borders << rect # otherwise, output as border
+ end
+
+ # Outputs the text of each button using labels.
+ outputs.labels << [x, y + 95, text] # add 95 to place label above button
+ end
+
+ outputs.labels << [10, 60, "Left Analog x: #{inputs.controller_one.left_analog_x_raw} (#{inputs.controller_one.left_analog_x_perc * 100}%)"]
+ outputs.labels << [10, 30, "Left Analog y: #{inputs.controller_one.left_analog_y_raw} (#{inputs.controller_one.left_analog_y_perc * 100}%)"]
+ outputs.labels << [900, 60, "Right Analog x: #{inputs.controller_one.right_analog_x_raw} (#{inputs.controller_one.right_analog_x_perc * 100}%)"]
+ outputs.labels << [900, 30, "Right Analog y: #{inputs.controller_one.right_analog_y_raw} (#{inputs.controller_one.right_analog_y_perc * 100}%)"]
+ end
+end
+
+$controller_demo = ControllerDemo.new
+
+def tick args
+ tick_instructions args, "Sample app shows how controller input is handled. You'll need to connect a USB controller."
+ $controller_demo.inputs = args.inputs
+ $controller_demo.state = args.state
+ $controller_demo.outputs = args.outputs
+ $controller_demo.tick
+end
+
+# Resets the app.
+def r
+ $gtk.reset
+end
+
+def tick_instructions args, text, y = 715
+ return if args.state.key_event_occurred
+ if args.inputs.mouse.click ||
+ args.inputs.keyboard.directional_vector ||
+ args.inputs.keyboard.key_down.enter ||
+ args.inputs.keyboard.key_down.escape
+ args.state.key_event_occurred = true
+ end
+
+ args.outputs.debug << [0, y - 50, 1280, 60].solid
+ args.outputs.debug << [640, y, text, 1, 1, 255, 255, 255].label
+ args.outputs.debug << [640, y - 25, "(click to dismiss instructions)" , -2, 1, 255, 255, 255].label
+end
diff --git a/samples/02_input_basics/05_controller/license-for-sample.txt b/samples/02_input_basics/05_controller/license-for-sample.txt
new file mode 100644
index 0000000..100dcec
--- /dev/null
+++ b/samples/02_input_basics/05_controller/license-for-sample.txt
@@ -0,0 +1,9 @@
+Copyright 2019 DragonRuby LLC
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/samples/02_input_basics/05_controller/replay.txt b/samples/02_input_basics/05_controller/replay.txt
new file mode 100644
index 0000000..859e01a
--- /dev/null
+++ b/samples/02_input_basics/05_controller/replay.txt
@@ -0,0 +1,1062 @@
+replay_version 2.0
+stopped_at 1530
+seed 100
+recorded_at Sun Sep 29 21:36:37 2019
+[:mouse_move, 41, 311, 2, 1, 140]
+[:mouse_move, 173, 294, 2, 2, 141]
+[:mouse_move, 233, 281, 2, 3, 142]
+[:mouse_move, 344, 249, 2, 4, 143]
+[:mouse_move, 365, 240, 2, 5, 144]
+[:mouse_move, 422, 219, 2, 6, 145]
+[:mouse_move, 452, 206, 2, 7, 146]
+[:mouse_move, 468, 198, 2, 8, 147]
+[:mouse_move, 481, 192, 2, 9, 148]
+[:mouse_move, 507, 182, 2, 10, 149]
+[:mouse_move, 513, 181, 2, 11, 150]
+[:mouse_move, 525, 179, 2, 12, 151]
+[:mouse_move, 535, 176, 2, 13, 152]
+[:mouse_move, 542, 174, 2, 14, 153]
+[:mouse_move, 561, 164, 2, 15, 154]
+[:mouse_move, 572, 156, 2, 16, 155]
+[:mouse_move, 594, 136, 2, 17, 156]
+[:mouse_move, 604, 125, 2, 18, 157]
+[:mouse_move, 623, 99, 2, 19, 158]
+[:mouse_move, 631, 85, 2, 20, 159]
+[:mouse_move, 640, 68, 2, 21, 160]
+[:mouse_move, 644, 58, 2, 22, 161]
+[:mouse_move, 652, 42, 2, 23, 162]
+[:mouse_move, 656, 36, 2, 24, 163]
+[:mouse_move, 663, 26, 2, 25, 164]
+[:mouse_move, 666, 21, 2, 26, 165]
+[:mouse_move, 675, 10, 2, 27, 166]
+[:mouse_move, 679, 5, 2, 28, 167]
+[:mouse_move, 686, 0, 2, 29, 168]
+[:mouse_move, 679, 2, 2, 30, 192]
+[:mouse_move, 672, 12, 2, 31, 193]
+[:mouse_move, 669, 18, 2, 32, 194]
+[:mouse_move, 665, 24, 2, 33, 195]
+[:mouse_move, 664, 26, 2, 34, 196]
+[:mouse_move, 662, 29, 2, 35, 197]
+[:mouse_move, 662, 30, 2, 36, 198]
+[:mouse_move, 661, 31, 2, 37, 199]
+[:mouse_move, 660, 31, 2, 38, 206]
+[:mouse_move, 660, 32, 2, 39, 208]
+[:mouse_move, 658, 34, 2, 40, 212]
+[:mouse_move, 656, 39, 2, 41, 213]
+[:mouse_move, 644, 63, 2, 42, 214]
+[:mouse_move, 639, 74, 2, 43, 215]
+[:mouse_move, 625, 107, 2, 44, 216]
+[:mouse_move, 622, 114, 2, 45, 217]
+[:mouse_move, 616, 131, 2, 46, 218]
+[:mouse_move, 613, 140, 2, 47, 219]
+[:key_down_player_one, 13, 0, 1, 48, 302]
+[:key_held_player_one, 13, 0, 1, 49, 303]
+[:key_held_player_one, 13, 0, 1, 50, 304]
+[:key_held_player_one, 13, 0, 1, 51, 305]
+[:key_held_player_one, 13, 0, 1, 52, 306]
+[:key_held_player_one, 13, 0, 1, 53, 307]
+[:key_held_player_one, 13, 0, 1, 54, 308]
+[:key_held_player_one, 13, 0, 1, 55, 309]
+[:key_held_player_one, 13, 0, 1, 56, 310]
+[:key_held_player_one, 13, 0, 1, 57, 311]
+[:key_up_player_one, 13, 0, 1, 58, 312]
+[:key_down_player_one, 13, 0, 1, 59, 357]
+[:key_held_player_one, 13, 0, 1, 60, 358]
+[:key_held_player_one, 13, 0, 1, 61, 359]
+[:key_held_player_one, 13, 0, 1, 62, 360]
+[:key_held_player_one, 13, 0, 1, 63, 361]
+[:key_held_player_one, 13, 0, 1, 64, 362]
+[:key_held_player_one, 13, 0, 1, 65, 363]
+[:key_held_player_one, 13, 0, 1, 66, 364]
+[:key_up_player_one, 13, 0, 1, 67, 365]
+[:key_down_player_one, 13, 0, 1, 68, 371]
+[:key_held_player_one, 13, 0, 1, 69, 372]
+[:key_held_player_one, 13, 0, 1, 70, 373]
+[:key_held_player_one, 13, 0, 1, 71, 374]
+[:key_held_player_one, 13, 0, 1, 72, 375]
+[:key_held_player_one, 13, 0, 1, 73, 376]
+[:key_held_player_one, 13, 0, 1, 74, 377]
+[:key_held_player_one, 13, 0, 1, 75, 378]
+[:key_up_player_one, 13, 0, 1, 76, 379]
+[:key_down_player_one, 13, 0, 1, 77, 393]
+[:key_held_player_one, 13, 0, 1, 78, 394]
+[:key_held_player_one, 13, 0, 1, 79, 395]
+[:key_held_player_one, 13, 0, 1, 80, 396]
+[:key_held_player_one, 13, 0, 1, 81, 397]
+[:key_held_player_one, 13, 0, 1, 82, 398]
+[:key_held_player_one, 13, 0, 1, 83, 399]
+[:key_held_player_one, 13, 0, 1, 84, 400]
+[:key_held_player_one, 13, 0, 1, 85, 401]
+[:key_held_player_one, 13, 0, 1, 86, 402]
+[:key_held_player_one, 13, 0, 1, 87, 403]
+[:key_up_player_one, 13, 0, 1, 88, 404]
+[:key_down_player_one, 13, 0, 1, 89, 419]
+[:key_held_player_one, 13, 0, 1, 90, 420]
+[:key_held_player_one, 13, 0, 1, 91, 421]
+[:key_held_player_one, 13, 0, 1, 92, 422]
+[:key_held_player_one, 13, 0, 1, 93, 423]
+[:key_held_player_one, 13, 0, 1, 94, 424]
+[:key_up_player_one, 13, 0, 1, 95, 425]
+[:key_down_player_one, 13, 0, 1, 96, 431]
+[:key_held_player_one, 13, 0, 1, 97, 432]
+[:key_held_player_one, 13, 0, 1, 98, 433]
+[:key_held_player_one, 13, 0, 1, 99, 434]
+[:key_up_player_one, 13, 0, 1, 100, 435]
+[:key_down_player_one, 13, 0, 1, 101, 441]
+[:key_held_player_one, 13, 0, 1, 102, 442]
+[:key_held_player_one, 13, 0, 1, 103, 443]
+[:key_held_player_one, 13, 0, 1, 104, 444]
+[:key_held_player_one, 13, 0, 1, 105, 445]
+[:key_held_player_one, 13, 0, 1, 106, 446]
+[:key_up_player_one, 13, 0, 1, 107, 447]
+[:key_down_player_one, 17, 0, 1, 108, 503]
+[:key_held_player_one, 17, 0, 1, 109, 504]
+[:key_held_player_one, 17, 0, 1, 110, 505]
+[:key_held_player_one, 17, 0, 1, 111, 506]
+[:key_held_player_one, 17, 0, 1, 112, 507]
+[:key_held_player_one, 17, 0, 1, 113, 508]
+[:key_held_player_one, 17, 0, 1, 114, 509]
+[:key_up_player_one, 17, 0, 1, 115, 510]
+[:key_down_player_one, 16, 0, 1, 116, 540]
+[:key_held_player_one, 16, 0, 1, 117, 541]
+[:key_held_player_one, 16, 0, 1, 118, 542]
+[:key_held_player_one, 16, 0, 1, 119, 543]
+[:key_held_player_one, 16, 0, 1, 120, 544]
+[:key_held_player_one, 16, 0, 1, 121, 545]
+[:key_held_player_one, 16, 0, 1, 122, 546]
+[:key_held_player_one, 16, 0, 1, 123, 547]
+[:key_held_player_one, 16, 0, 1, 124, 548]
+[:key_held_player_one, 16, 0, 1, 125, 549]
+[:key_held_player_one, 16, 0, 1, 126, 550]
+[:key_held_player_one, 16, 0, 1, 127, 551]
+[:key_held_player_one, 16, 0, 1, 128, 552]
+[:key_held_player_one, 16, 0, 1, 129, 553]
+[:key_held_player_one, 16, 0, 1, 130, 554]
+[:key_held_player_one, 16, 0, 1, 131, 555]
+[:key_held_player_one, 16, 0, 1, 132, 556]
+[:key_held_player_one, 16, 0, 1, 133, 557]
+[:key_up_player_one, 16, 0, 1, 134, 558]
+[:key_down_player_one, 14, 0, 1, 135, 589]
+[:key_held_player_one, 14, 0, 1, 136, 590]
+[:key_held_player_one, 14, 0, 1, 137, 591]
+[:key_held_player_one, 14, 0, 1, 138, 592]
+[:key_held_player_one, 14, 0, 1, 139, 593]
+[:key_held_player_one, 14, 0, 1, 140, 594]
+[:key_held_player_one, 14, 0, 1, 141, 595]
+[:key_held_player_one, 14, 0, 1, 142, 596]
+[:key_held_player_one, 14, 0, 1, 143, 597]
+[:key_held_player_one, 14, 0, 1, 144, 598]
+[:key_held_player_one, 14, 0, 1, 145, 599]
+[:key_held_player_one, 14, 0, 1, 146, 600]
+[:key_held_player_one, 14, 0, 1, 147, 601]
+[:key_held_player_one, 14, 0, 1, 148, 602]
+[:key_held_player_one, 14, 0, 1, 149, 603]
+[:key_held_player_one, 14, 0, 1, 150, 604]
+[:key_held_player_one, 14, 0, 1, 151, 605]
+[:key_held_player_one, 14, 0, 1, 152, 606]
+[:key_up_player_one, 14, 0, 1, 153, 607]
+[:key_down_player_one, 14, 0, 1, 154, 638]
+[:key_held_player_one, 14, 0, 1, 155, 639]
+[:key_held_player_one, 14, 0, 1, 156, 640]
+[:key_held_player_one, 14, 0, 1, 157, 641]
+[:key_held_player_one, 14, 0, 1, 158, 642]
+[:key_held_player_one, 14, 0, 1, 159, 643]
+[:key_held_player_one, 14, 0, 1, 160, 644]
+[:key_held_player_one, 14, 0, 1, 161, 645]
+[:key_held_player_one, 14, 0, 1, 162, 646]
+[:key_held_player_one, 14, 0, 1, 163, 647]
+[:key_held_player_one, 14, 0, 1, 164, 648]
+[:key_held_player_one, 14, 0, 1, 165, 649]
+[:key_held_player_one, 14, 0, 1, 166, 650]
+[:key_held_player_one, 14, 0, 1, 167, 651]
+[:key_held_player_one, 14, 0, 1, 168, 652]
+[:key_held_player_one, 14, 0, 1, 169, 653]
+[:key_held_player_one, 14, 0, 1, 170, 654]
+[:key_up_player_one, 14, 0, 1, 171, 655]
+[:key_down_player_one, 15, 0, 1, 172, 673]
+[:key_held_player_one, 15, 0, 1, 173, 674]
+[:key_held_player_one, 15, 0, 1, 174, 675]
+[:key_held_player_one, 15, 0, 1, 175, 676]
+[:key_held_player_one, 15, 0, 1, 176, 677]
+[:key_held_player_one, 15, 0, 1, 177, 678]
+[:key_held_player_one, 15, 0, 1, 178, 679]
+[:key_held_player_one, 15, 0, 1, 179, 680]
+[:key_held_player_one, 15, 0, 1, 180, 681]
+[:key_held_player_one, 15, 0, 1, 181, 682]
+[:key_held_player_one, 15, 0, 1, 182, 683]
+[:key_held_player_one, 15, 0, 1, 183, 684]
+[:key_held_player_one, 15, 0, 1, 184, 685]
+[:key_held_player_one, 15, 0, 1, 185, 686]
+[:key_held_player_one, 15, 0, 1, 186, 687]
+[:key_held_player_one, 15, 0, 1, 187, 688]
+[:key_held_player_one, 15, 0, 1, 188, 689]
+[:key_held_player_one, 15, 0, 1, 189, 690]
+[:key_held_player_one, 15, 0, 1, 190, 691]
+[:key_held_player_one, 15, 0, 1, 191, 692]
+[:key_up_player_one, 15, 0, 1, 192, 693]
+[:key_down_player_one, 15, 0, 1, 193, 708]
+[:key_held_player_one, 15, 0, 1, 194, 709]
+[:key_held_player_one, 15, 0, 1, 195, 710]
+[:key_held_player_one, 15, 0, 1, 196, 711]
+[:key_held_player_one, 15, 0, 1, 197, 712]
+[:key_held_player_one, 15, 0, 1, 198, 713]
+[:key_held_player_one, 15, 0, 1, 199, 714]
+[:key_held_player_one, 15, 0, 1, 200, 715]
+[:key_held_player_one, 15, 0, 1, 201, 716]
+[:key_held_player_one, 15, 0, 1, 202, 717]
+[:key_up_player_one, 15, 0, 1, 203, 718]
+[:key_down_player_one, 19, 0, 1, 204, 795]
+[:key_held_player_one, 19, 0, 1, 205, 796]
+[:key_held_player_one, 19, 0, 1, 206, 797]
+[:key_held_player_one, 19, 0, 1, 207, 798]
+[:key_held_player_one, 19, 0, 1, 208, 799]
+[:key_held_player_one, 19, 0, 1, 209, 800]
+[:key_held_player_one, 19, 0, 1, 210, 801]
+[:key_held_player_one, 19, 0, 1, 211, 802]
+[:key_held_player_one, 19, 0, 1, 212, 803]
+[:key_held_player_one, 19, 0, 1, 213, 804]
+[:key_held_player_one, 19, 0, 1, 214, 805]
+[:key_held_player_one, 19, 0, 1, 215, 806]
+[:key_up_player_one, 19, 0, 1, 216, 807]
+[:key_down_player_one, 18, 0, 1, 217, 822]
+[:key_held_player_one, 18, 0, 1, 218, 823]
+[:key_held_player_one, 18, 0, 1, 219, 824]
+[:key_held_player_one, 18, 0, 1, 220, 825]
+[:key_held_player_one, 18, 0, 1, 221, 826]
+[:key_held_player_one, 18, 0, 1, 222, 827]
+[:key_held_player_one, 18, 0, 1, 223, 828]
+[:key_held_player_one, 18, 0, 1, 224, 829]
+[:key_held_player_one, 18, 0, 1, 225, 830]
+[:key_held_player_one, 18, 0, 1, 226, 831]
+[:key_held_player_one, 18, 0, 1, 227, 832]
+[:key_held_player_one, 18, 0, 1, 228, 833]
+[:key_up_player_one, 18, 0, 1, 229, 834]
+[:key_down_player_one, 23, 0, 1, 230, 860]
+[:key_held_player_one, 23, 0, 1, 231, 861]
+[:key_held_player_one, 23, 0, 1, 232, 862]
+[:key_held_player_one, 23, 0, 1, 233, 863]
+[:key_held_player_one, 23, 0, 1, 234, 864]
+[:key_held_player_one, 23, 0, 1, 235, 865]
+[:key_held_player_one, 23, 0, 1, 236, 866]
+[:key_held_player_one, 23, 0, 1, 237, 867]
+[:key_held_player_one, 23, 0, 1, 238, 868]
+[:key_held_player_one, 23, 0, 1, 239, 869]
+[:key_held_player_one, 23, 0, 1, 240, 870]
+[:key_held_player_one, 23, 0, 1, 241, 871]
+[:key_held_player_one, 23, 0, 1, 242, 872]
+[:key_up_player_one, 23, 0, 1, 243, 873]
+[:key_down_player_one, 22, 0, 1, 244, 886]
+[:key_held_player_one, 22, 0, 1, 245, 887]
+[:key_held_player_one, 22, 0, 1, 246, 888]
+[:key_held_player_one, 22, 0, 1, 247, 889]
+[:key_held_player_one, 22, 0, 1, 248, 890]
+[:key_held_player_one, 22, 0, 1, 249, 891]
+[:key_held_player_one, 22, 0, 1, 250, 892]
+[:key_held_player_one, 22, 0, 1, 251, 893]
+[:key_held_player_one, 22, 0, 1, 252, 894]
+[:key_held_player_one, 22, 0, 1, 253, 895]
+[:key_held_player_one, 22, 0, 1, 254, 896]
+[:key_held_player_one, 22, 0, 1, 255, 897]
+[:key_held_player_one, 22, 0, 1, 256, 898]
+[:key_up_player_one, 22, 0, 1, 257, 899]
+[:key_down_player_one, 3, 0, 1, 258, 956]
+[:key_down_player_one, 26, 0, 1, 259, 956]
+[:key_held_player_one, 3, 0, 1, 260, 957]
+[:key_held_player_one, 26, 0, 1, 261, 957]
+[:key_held_player_one, 3, 0, 1, 262, 958]
+[:key_held_player_one, 26, 0, 1, 263, 958]
+[:key_held_player_one, 3, 0, 1, 264, 959]
+[:key_held_player_one, 26, 0, 1, 265, 959]
+[:key_held_player_one, 3, 0, 1, 266, 960]
+[:key_held_player_one, 26, 0, 1, 267, 960]
+[:key_held_player_one, 3, 0, 1, 268, 961]
+[:key_held_player_one, 26, 0, 1, 269, 961]
+[:key_held_player_one, 3, 0, 1, 270, 962]
+[:key_held_player_one, 26, 0, 1, 271, 962]
+[:key_held_player_one, 3, 0, 1, 272, 963]
+[:key_held_player_one, 26, 0, 1, 273, 963]
+[:key_held_player_one, 3, 0, 1, 274, 964]
+[:key_held_player_one, 26, 0, 1, 275, 964]
+[:key_held_player_one, 3, 0, 1, 276, 965]
+[:key_held_player_one, 26, 0, 1, 277, 965]
+[:key_held_player_one, 3, 0, 1, 278, 966]
+[:key_held_player_one, 26, 0, 1, 279, 966]
+[:key_held_player_one, 3, 0, 1, 280, 967]
+[:key_held_player_one, 26, 0, 1, 281, 967]
+[:key_up_player_one, 3, 0, 1, 282, 968]
+[:key_up_player_one, 26, 0, 1, 283, 968]
+[:key_down_player_one, 4, 0, 1, 284, 986]
+[:key_down_player_one, 27, 0, 1, 285, 986]
+[:key_held_player_one, 4, 0, 1, 286, 987]
+[:key_held_player_one, 27, 0, 1, 287, 987]
+[:key_held_player_one, 4, 0, 1, 288, 988]
+[:key_held_player_one, 27, 0, 1, 289, 988]
+[:key_held_player_one, 4, 0, 1, 290, 989]
+[:key_held_player_one, 27, 0, 1, 291, 989]
+[:key_held_player_one, 4, 0, 1, 292, 990]
+[:key_held_player_one, 27, 0, 1, 293, 990]
+[:key_held_player_one, 4, 0, 1, 294, 991]
+[:key_held_player_one, 27, 0, 1, 295, 991]
+[:key_held_player_one, 4, 0, 1, 296, 992]
+[:key_held_player_one, 27, 0, 1, 297, 992]
+[:key_held_player_one, 4, 0, 1, 298, 993]
+[:key_held_player_one, 27, 0, 1, 299, 993]
+[:key_held_player_one, 4, 0, 1, 300, 994]
+[:key_held_player_one, 27, 0, 1, 301, 994]
+[:key_held_player_one, 4, 0, 1, 302, 995]
+[:key_held_player_one, 27, 0, 1, 303, 995]
+[:key_held_player_one, 4, 0, 1, 304, 996]
+[:key_held_player_one, 27, 0, 1, 305, 996]
+[:key_up_player_one, 4, 0, 1, 306, 997]
+[:key_up_player_one, 27, 0, 1, 307, 997]
+[:key_down_player_one, 1, 0, 1, 308, 1010]
+[:key_down_player_one, 24, 0, 1, 309, 1010]
+[:key_held_player_one, 1, 0, 1, 310, 1011]
+[:key_held_player_one, 24, 0, 1, 311, 1011]
+[:key_held_player_one, 1, 0, 1, 312, 1012]
+[:key_held_player_one, 24, 0, 1, 313, 1012]
+[:key_held_player_one, 1, 0, 1, 314, 1013]
+[:key_held_player_one, 24, 0, 1, 315, 1013]
+[:key_held_player_one, 1, 0, 1, 316, 1014]
+[:key_held_player_one, 24, 0, 1, 317, 1014]
+[:key_held_player_one, 1, 0, 1, 318, 1015]
+[:key_held_player_one, 24, 0, 1, 319, 1015]
+[:key_held_player_one, 1, 0, 1, 320, 1016]
+[:key_held_player_one, 24, 0, 1, 321, 1016]
+[:key_held_player_one, 1, 0, 1, 322, 1017]
+[:key_held_player_one, 24, 0, 1, 323, 1017]
+[:key_held_player_one, 1, 0, 1, 324, 1018]
+[:key_held_player_one, 24, 0, 1, 325, 1018]
+[:key_held_player_one, 1, 0, 1, 326, 1019]
+[:key_held_player_one, 24, 0, 1, 327, 1019]
+[:key_held_player_one, 1, 0, 1, 328, 1020]
+[:key_held_player_one, 24, 0, 1, 329, 1020]
+[:key_held_player_one, 1, 0, 1, 330, 1021]
+[:key_held_player_one, 24, 0, 1, 331, 1021]
+[:key_up_player_one, 1, 0, 1, 332, 1022]
+[:key_up_player_one, 24, 0, 1, 333, 1022]
+[:key_down_player_one, 2, 0, 1, 334, 1035]
+[:key_down_player_one, 25, 0, 1, 335, 1035]
+[:key_held_player_one, 2, 0, 1, 336, 1036]
+[:key_held_player_one, 25, 0, 1, 337, 1036]
+[:key_held_player_one, 2, 0, 1, 338, 1037]
+[:key_held_player_one, 25, 0, 1, 339, 1037]
+[:key_held_player_one, 2, 0, 1, 340, 1038]
+[:key_held_player_one, 25, 0, 1, 341, 1038]
+[:key_held_player_one, 2, 0, 1, 342, 1039]
+[:key_held_player_one, 25, 0, 1, 343, 1039]
+[:key_held_player_one, 2, 0, 1, 344, 1040]
+[:key_held_player_one, 25, 0, 1, 345, 1040]
+[:key_held_player_one, 2, 0, 1, 346, 1041]
+[:key_held_player_one, 25, 0, 1, 347, 1041]
+[:key_held_player_one, 2, 0, 1, 348, 1042]
+[:key_held_player_one, 25, 0, 1, 349, 1042]
+[:key_held_player_one, 2, 0, 1, 350, 1043]
+[:key_held_player_one, 25, 0, 1, 351, 1043]
+[:key_held_player_one, 2, 0, 1, 352, 1044]
+[:key_held_player_one, 25, 0, 1, 353, 1044]
+[:key_held_player_one, 2, 0, 1, 354, 1045]
+[:key_held_player_one, 25, 0, 1, 355, 1045]
+[:key_up_player_one, 2, 0, 1, 356, 1046]
+[:key_up_player_one, 25, 0, 1, 357, 1046]
+[:left_analog_y_player_1, -5000, 0, 1, 358, 1065]
+[:left_analog_x_player_1, 5000, 0, 1, 359, 1066]
+[:left_analog_y_player_1, -12000, 0, 1, 360, 1066]
+[:left_analog_x_player_1, 10000, 0, 1, 361, 1067]
+[:left_analog_y_player_1, -18000, 0, 1, 362, 1067]
+[:left_analog_x_player_1, 15000, 0, 1, 363, 1068]
+[:left_analog_y_player_1, -27000, 0, 1, 364, 1068]
+[:key_down_player_one, 1, 0, 1, 365, 1069]
+[:left_analog_x_player_1, 18000, 0, 1, 366, 1069]
+[:left_analog_y_player_1, -32000, 0, 1, 367, 1069]
+[:key_held_player_one, 1, 0, 1, 368, 1070]
+[:left_analog_x_player_1, 19000, 0, 1, 369, 1070]
+[:key_held_player_one, 1, 0, 1, 370, 1071]
+[:left_analog_x_player_1, 21000, 0, 1, 371, 1071]
+[:key_held_player_one, 1, 0, 1, 372, 1072]
+[:key_down_player_one, 4, 0, 1, 373, 1072]
+[:key_held_player_one, 1, 0, 1, 374, 1073]
+[:key_held_player_one, 4, 0, 1, 375, 1073]
+[:key_held_player_one, 1, 0, 1, 376, 1074]
+[:key_held_player_one, 4, 0, 1, 377, 1074]
+[:key_held_player_one, 1, 0, 1, 378, 1075]
+[:key_held_player_one, 4, 0, 1, 379, 1075]
+[:left_analog_x_player_1, 18000, 0, 1, 380, 1075]
+[:key_held_player_one, 1, 0, 1, 381, 1076]
+[:key_up_player_one, 4, 0, 1, 382, 1076]
+[:left_analog_x_player_1, 11000, 0, 1, 383, 1076]
+[:key_held_player_one, 1, 0, 1, 384, 1077]
+[:left_analog_x_player_1, 7000, 0, 1, 385, 1077]
+[:key_held_player_one, 1, 0, 1, 386, 1078]
+[:left_analog_x_player_1, 2000, 0, 1, 387, 1078]
+[:key_held_player_one, 1, 0, 1, 388, 1079]
+[:left_analog_x_player_1, 0, 0, 1, 389, 1079]
+[:key_held_player_one, 1, 0, 1, 390, 1080]
+[:left_analog_x_player_1, -1000, 0, 1, 391, 1080]
+[:key_held_player_one, 1, 0, 1, 392, 1081]
+[:left_analog_x_player_1, -7000, 0, 1, 393, 1081]
+[:key_held_player_one, 1, 0, 1, 394, 1082]
+[:left_analog_x_player_1, -11000, 0, 1, 395, 1082]
+[:key_held_player_one, 1, 0, 1, 396, 1083]
+[:left_analog_x_player_1, -17000, 0, 1, 397, 1083]
+[:key_held_player_one, 1, 0, 1, 398, 1084]
+[:left_analog_x_player_1, -21000, 0, 1, 399, 1084]
+[:left_analog_y_player_1, -31000, 0, 1, 400, 1084]
+[:key_held_player_one, 1, 0, 1, 401, 1085]
+[:key_down_player_one, 3, 0, 1, 402, 1085]
+[:left_analog_x_player_1, -24000, 0, 1, 403, 1085]
+[:left_analog_y_player_1, -30000, 0, 1, 404, 1085]
+[:key_held_player_one, 1, 0, 1, 405, 1086]
+[:key_held_player_one, 3, 0, 1, 406, 1086]
+[:left_analog_x_player_1, -27000, 0, 1, 407, 1086]
+[:left_analog_y_player_1, -28000, 0, 1, 408, 1086]
+[:key_held_player_one, 1, 0, 1, 409, 1087]
+[:key_held_player_one, 3, 0, 1, 410, 1087]
+[:left_analog_x_player_1, -30000, 0, 1, 411, 1087]
+[:left_analog_y_player_1, -25000, 0, 1, 412, 1087]
+[:key_held_player_one, 1, 0, 1, 413, 1088]
+[:key_held_player_one, 3, 0, 1, 414, 1088]
+[:left_analog_x_player_1, -31000, 0, 1, 415, 1088]
+[:left_analog_y_player_1, -22000, 0, 1, 416, 1088]
+[:key_held_player_one, 1, 0, 1, 417, 1089]
+[:key_held_player_one, 3, 0, 1, 418, 1089]
+[:left_analog_x_player_1, -32000, 0, 1, 419, 1089]
+[:left_analog_y_player_1, -18000, 0, 1, 420, 1089]
+[:key_up_player_one, 1, 0, 1, 421, 1090]
+[:key_held_player_one, 3, 0, 1, 422, 1090]
+[:left_analog_y_player_1, -15000, 0, 1, 423, 1090]
+[:key_held_player_one, 3, 0, 1, 424, 1091]
+[:left_analog_y_player_1, -10000, 0, 1, 425, 1091]
+[:key_held_player_one, 3, 0, 1, 426, 1092]
+[:left_analog_y_player_1, -4000, 0, 1, 427, 1092]
+[:key_held_player_one, 3, 0, 1, 428, 1093]
+[:left_analog_y_player_1, 0, 0, 1, 429, 1093]
+[:key_held_player_one, 3, 0, 1, 430, 1094]
+[:left_analog_y_player_1, 3000, 0, 1, 431, 1094]
+[:key_held_player_one, 3, 0, 1, 432, 1095]
+[:left_analog_y_player_1, 9000, 0, 1, 433, 1095]
+[:key_held_player_one, 3, 0, 1, 434, 1096]
+[:left_analog_y_player_1, 12000, 0, 1, 435, 1096]
+[:key_held_player_one, 3, 0, 1, 436, 1097]
+[:left_analog_y_player_1, 16000, 0, 1, 437, 1097]
+[:key_held_player_one, 3, 0, 1, 438, 1098]
+[:left_analog_y_player_1, 19000, 0, 1, 439, 1098]
+[:key_held_player_one, 3, 0, 1, 440, 1099]
+[:left_analog_x_player_1, -31000, 0, 1, 441, 1099]
+[:left_analog_y_player_1, 21000, 0, 1, 442, 1099]
+[:key_down_player_one, 2, 0, 1, 443, 1100]
+[:key_held_player_one, 3, 0, 1, 444, 1100]
+[:left_analog_x_player_1, -28000, 0, 1, 445, 1100]
+[:left_analog_y_player_1, 25000, 0, 1, 446, 1100]
+[:key_held_player_one, 2, 0, 1, 447, 1101]
+[:key_held_player_one, 3, 0, 1, 448, 1101]
+[:left_analog_x_player_1, -26000, 0, 1, 449, 1101]
+[:left_analog_y_player_1, 28000, 0, 1, 450, 1101]
+[:key_held_player_one, 2, 0, 1, 451, 1102]
+[:key_held_player_one, 3, 0, 1, 452, 1102]
+[:left_analog_x_player_1, -22000, 0, 1, 453, 1102]
+[:left_analog_y_player_1, 30000, 0, 1, 454, 1102]
+[:key_held_player_one, 2, 0, 1, 455, 1103]
+[:key_held_player_one, 3, 0, 1, 456, 1103]
+[:left_analog_x_player_1, -19000, 0, 1, 457, 1103]
+[:left_analog_y_player_1, 31000, 0, 1, 458, 1103]
+[:key_held_player_one, 2, 0, 1, 459, 1104]
+[:key_up_player_one, 3, 0, 1, 460, 1104]
+[:left_analog_x_player_1, -14000, 0, 1, 461, 1104]
+[:left_analog_y_player_1, 32000, 0, 1, 462, 1104]
+[:key_held_player_one, 2, 0, 1, 463, 1105]
+[:left_analog_x_player_1, -9000, 0, 1, 464, 1105]
+[:key_held_player_one, 2, 0, 1, 465, 1106]
+[:left_analog_x_player_1, -2000, 0, 1, 466, 1106]
+[:key_held_player_one, 2, 0, 1, 467, 1107]
+[:left_analog_x_player_1, 0, 0, 1, 468, 1107]
+[:key_held_player_one, 2, 0, 1, 469, 1108]
+[:left_analog_x_player_1, 11000, 0, 1, 470, 1108]
+[:key_held_player_one, 2, 0, 1, 471, 1109]
+[:left_analog_x_player_1, 18000, 0, 1, 472, 1109]
+[:key_held_player_one, 2, 0, 1, 473, 1110]
+[:left_analog_x_player_1, 25000, 0, 1, 474, 1110]
+[:left_analog_y_player_1, 29000, 0, 1, 475, 1110]
+[:key_held_player_one, 2, 0, 1, 476, 1111]
+[:key_down_player_one, 4, 0, 1, 477, 1111]
+[:left_analog_x_player_1, 30000, 0, 1, 478, 1111]
+[:left_analog_y_player_1, 25000, 0, 1, 479, 1111]
+[:key_held_player_one, 2, 0, 1, 480, 1112]
+[:key_held_player_one, 4, 0, 1, 481, 1112]
+[:left_analog_x_player_1, 32000, 0, 1, 482, 1112]
+[:left_analog_y_player_1, 20000, 0, 1, 483, 1112]
+[:key_held_player_one, 2, 0, 1, 484, 1113]
+[:key_held_player_one, 4, 0, 1, 485, 1113]
+[:left_analog_y_player_1, 11000, 0, 1, 486, 1113]
+[:key_up_player_one, 2, 0, 1, 487, 1114]
+[:key_held_player_one, 4, 0, 1, 488, 1114]
+[:left_analog_y_player_1, 4000, 0, 1, 489, 1114]
+[:key_held_player_one, 4, 0, 1, 490, 1115]
+[:left_analog_y_player_1, 0, 0, 1, 491, 1115]
+[:key_held_player_one, 4, 0, 1, 492, 1116]
+[:key_held_player_one, 4, 0, 1, 493, 1117]
+[:left_analog_y_player_1, -4000, 0, 1, 494, 1117]
+[:key_held_player_one, 4, 0, 1, 495, 1118]
+[:left_analog_y_player_1, -10000, 0, 1, 496, 1118]
+[:key_held_player_one, 4, 0, 1, 497, 1119]
+[:left_analog_y_player_1, -13000, 0, 1, 498, 1119]
+[:key_held_player_one, 4, 0, 1, 499, 1120]
+[:left_analog_y_player_1, -17000, 0, 1, 500, 1120]
+[:key_held_player_one, 4, 0, 1, 501, 1121]
+[:left_analog_x_player_1, 31000, 0, 1, 502, 1121]
+[:left_analog_y_player_1, -21000, 0, 1, 503, 1121]
+[:key_down_player_one, 1, 0, 1, 504, 1122]
+[:key_held_player_one, 4, 0, 1, 505, 1122]
+[:left_analog_x_player_1, 29000, 0, 1, 506, 1122]
+[:left_analog_y_player_1, -25000, 0, 1, 507, 1122]
+[:key_held_player_one, 1, 0, 1, 508, 1123]
+[:key_held_player_one, 4, 0, 1, 509, 1123]
+[:left_analog_x_player_1, 27000, 0, 1, 510, 1123]
+[:left_analog_y_player_1, -27000, 0, 1, 511, 1123]
+[:key_held_player_one, 1, 0, 1, 512, 1124]
+[:key_held_player_one, 4, 0, 1, 513, 1124]
+[:left_analog_x_player_1, 26000, 0, 1, 514, 1124]
+[:left_analog_y_player_1, -28000, 0, 1, 515, 1124]
+[:key_held_player_one, 1, 0, 1, 516, 1125]
+[:key_held_player_one, 4, 0, 1, 517, 1125]
+[:left_analog_x_player_1, 22000, 0, 1, 518, 1125]
+[:left_analog_y_player_1, -30000, 0, 1, 519, 1125]
+[:key_held_player_one, 1, 0, 1, 520, 1126]
+[:key_held_player_one, 4, 0, 1, 521, 1126]
+[:left_analog_x_player_1, 20000, 0, 1, 522, 1126]
+[:left_analog_y_player_1, -31000, 0, 1, 523, 1126]
+[:key_held_player_one, 1, 0, 1, 524, 1127]
+[:key_held_player_one, 4, 0, 1, 525, 1127]
+[:left_analog_x_player_1, 16000, 0, 1, 526, 1127]
+[:left_analog_y_player_1, -32000, 0, 1, 527, 1127]
+[:key_held_player_one, 1, 0, 1, 528, 1128]
+[:key_up_player_one, 4, 0, 1, 529, 1128]
+[:left_analog_x_player_1, 11000, 0, 1, 530, 1128]
+[:key_held_player_one, 1, 0, 1, 531, 1129]
+[:left_analog_x_player_1, 7000, 0, 1, 532, 1129]
+[:key_held_player_one, 1, 0, 1, 533, 1130]
+[:left_analog_x_player_1, 4000, 0, 1, 534, 1130]
+[:key_held_player_one, 1, 0, 1, 535, 1131]
+[:left_analog_x_player_1, 0, 0, 1, 536, 1131]
+[:key_held_player_one, 1, 0, 1, 537, 1132]
+[:key_held_player_one, 1, 0, 1, 538, 1133]
+[:left_analog_x_player_1, -3000, 0, 1, 539, 1133]
+[:key_held_player_one, 1, 0, 1, 540, 1134]
+[:left_analog_x_player_1, -7000, 0, 1, 541, 1134]
+[:key_held_player_one, 1, 0, 1, 542, 1135]
+[:left_analog_x_player_1, -11000, 0, 1, 543, 1135]
+[:key_held_player_one, 1, 0, 1, 544, 1136]
+[:left_analog_x_player_1, -16000, 0, 1, 545, 1136]
+[:key_held_player_one, 1, 0, 1, 546, 1137]
+[:left_analog_x_player_1, -19000, 0, 1, 547, 1137]
+[:left_analog_y_player_1, -30000, 0, 1, 548, 1137]
+[:key_held_player_one, 1, 0, 1, 549, 1138]
+[:left_analog_x_player_1, -23000, 0, 1, 550, 1138]
+[:left_analog_y_player_1, -29000, 0, 1, 551, 1138]
+[:key_held_player_one, 1, 0, 1, 552, 1139]
+[:key_down_player_one, 3, 0, 1, 553, 1139]
+[:left_analog_x_player_1, -25000, 0, 1, 554, 1139]
+[:left_analog_y_player_1, -27000, 0, 1, 555, 1139]
+[:key_held_player_one, 1, 0, 1, 556, 1140]
+[:key_held_player_one, 3, 0, 1, 557, 1140]
+[:left_analog_x_player_1, -27000, 0, 1, 558, 1140]
+[:left_analog_y_player_1, -25000, 0, 1, 559, 1140]
+[:key_held_player_one, 1, 0, 1, 560, 1141]
+[:key_held_player_one, 3, 0, 1, 561, 1141]
+[:left_analog_x_player_1, -28000, 0, 1, 562, 1141]
+[:left_analog_y_player_1, -23000, 0, 1, 563, 1141]
+[:key_held_player_one, 1, 0, 1, 564, 1142]
+[:key_held_player_one, 3, 0, 1, 565, 1142]
+[:left_analog_x_player_1, -30000, 0, 1, 566, 1142]
+[:left_analog_y_player_1, -20000, 0, 1, 567, 1142]
+[:key_held_player_one, 1, 0, 1, 568, 1143]
+[:key_held_player_one, 3, 0, 1, 569, 1143]
+[:left_analog_x_player_1, -32000, 0, 1, 570, 1143]
+[:left_analog_y_player_1, -18000, 0, 1, 571, 1143]
+[:key_up_player_one, 1, 0, 1, 572, 1144]
+[:key_held_player_one, 3, 0, 1, 573, 1144]
+[:left_analog_y_player_1, -14000, 0, 1, 574, 1144]
+[:key_held_player_one, 3, 0, 1, 575, 1145]
+[:left_analog_y_player_1, -11000, 0, 1, 576, 1145]
+[:key_held_player_one, 3, 0, 1, 577, 1146]
+[:left_analog_y_player_1, -6000, 0, 1, 578, 1146]
+[:key_held_player_one, 3, 0, 1, 579, 1147]
+[:left_analog_y_player_1, -1000, 0, 1, 580, 1147]
+[:key_held_player_one, 3, 0, 1, 581, 1148]
+[:left_analog_y_player_1, 2000, 0, 1, 582, 1148]
+[:key_held_player_one, 3, 0, 1, 583, 1149]
+[:left_analog_y_player_1, 7000, 0, 1, 584, 1149]
+[:key_held_player_one, 3, 0, 1, 585, 1150]
+[:left_analog_y_player_1, 12000, 0, 1, 586, 1150]
+[:key_held_player_one, 3, 0, 1, 587, 1151]
+[:left_analog_y_player_1, 17000, 0, 1, 588, 1151]
+[:key_held_player_one, 3, 0, 1, 589, 1152]
+[:left_analog_x_player_1, -31000, 0, 1, 590, 1152]
+[:left_analog_y_player_1, 20000, 0, 1, 591, 1152]
+[:key_down_player_one, 2, 0, 1, 592, 1153]
+[:key_held_player_one, 3, 0, 1, 593, 1153]
+[:left_analog_x_player_1, -28000, 0, 1, 594, 1153]
+[:left_analog_y_player_1, 24000, 0, 1, 595, 1153]
+[:key_held_player_one, 2, 0, 1, 596, 1154]
+[:key_held_player_one, 3, 0, 1, 597, 1154]
+[:left_analog_x_player_1, -25000, 0, 1, 598, 1154]
+[:left_analog_y_player_1, 28000, 0, 1, 599, 1154]
+[:key_held_player_one, 2, 0, 1, 600, 1155]
+[:key_held_player_one, 3, 0, 1, 601, 1155]
+[:left_analog_x_player_1, -22000, 0, 1, 602, 1155]
+[:left_analog_y_player_1, 29000, 0, 1, 603, 1155]
+[:key_held_player_one, 2, 0, 1, 604, 1156]
+[:key_held_player_one, 3, 0, 1, 605, 1156]
+[:left_analog_x_player_1, -19000, 0, 1, 606, 1156]
+[:left_analog_y_player_1, 31000, 0, 1, 607, 1156]
+[:key_held_player_one, 2, 0, 1, 608, 1157]
+[:key_up_player_one, 3, 0, 1, 609, 1157]
+[:left_analog_x_player_1, -15000, 0, 1, 610, 1157]
+[:left_analog_y_player_1, 32000, 0, 1, 611, 1157]
+[:key_held_player_one, 2, 0, 1, 612, 1158]
+[:left_analog_x_player_1, -11000, 0, 1, 613, 1158]
+[:key_held_player_one, 2, 0, 1, 614, 1159]
+[:left_analog_x_player_1, -3000, 0, 1, 615, 1159]
+[:key_held_player_one, 2, 0, 1, 616, 1160]
+[:left_analog_x_player_1, 0, 0, 1, 617, 1160]
+[:key_held_player_one, 2, 0, 1, 618, 1161]
+[:left_analog_x_player_1, 5000, 0, 1, 619, 1161]
+[:key_held_player_one, 2, 0, 1, 620, 1162]
+[:left_analog_x_player_1, 12000, 0, 1, 621, 1162]
+[:key_held_player_one, 2, 0, 1, 622, 1163]
+[:left_analog_x_player_1, 17000, 0, 1, 623, 1163]
+[:key_held_player_one, 2, 0, 1, 624, 1164]
+[:left_analog_x_player_1, 22000, 0, 1, 625, 1164]
+[:left_analog_y_player_1, 31000, 0, 1, 626, 1164]
+[:key_held_player_one, 2, 0, 1, 627, 1165]
+[:key_down_player_one, 4, 0, 1, 628, 1165]
+[:left_analog_x_player_1, 26000, 0, 1, 629, 1165]
+[:left_analog_y_player_1, 28000, 0, 1, 630, 1165]
+[:key_held_player_one, 2, 0, 1, 631, 1166]
+[:key_held_player_one, 4, 0, 1, 632, 1166]
+[:left_analog_x_player_1, 29000, 0, 1, 633, 1166]
+[:left_analog_y_player_1, 24000, 0, 1, 634, 1166]
+[:key_held_player_one, 2, 0, 1, 635, 1167]
+[:key_held_player_one, 4, 0, 1, 636, 1167]
+[:left_analog_x_player_1, 31000, 0, 1, 637, 1167]
+[:left_analog_y_player_1, 20000, 0, 1, 638, 1167]
+[:key_held_player_one, 2, 0, 1, 639, 1168]
+[:key_held_player_one, 4, 0, 1, 640, 1168]
+[:left_analog_x_player_1, 32000, 0, 1, 641, 1168]
+[:left_analog_y_player_1, 15000, 0, 1, 642, 1168]
+[:key_up_player_one, 2, 0, 1, 643, 1169]
+[:key_held_player_one, 4, 0, 1, 644, 1169]
+[:left_analog_y_player_1, 9000, 0, 1, 645, 1169]
+[:key_held_player_one, 4, 0, 1, 646, 1170]
+[:left_analog_y_player_1, 4000, 0, 1, 647, 1170]
+[:key_held_player_one, 4, 0, 1, 648, 1171]
+[:left_analog_y_player_1, 0, 0, 1, 649, 1171]
+[:key_held_player_one, 4, 0, 1, 650, 1172]
+[:left_analog_y_player_1, -4000, 0, 1, 651, 1172]
+[:key_held_player_one, 4, 0, 1, 652, 1173]
+[:left_analog_y_player_1, -10000, 0, 1, 653, 1173]
+[:key_held_player_one, 4, 0, 1, 654, 1174]
+[:left_analog_y_player_1, -16000, 0, 1, 655, 1174]
+[:key_held_player_one, 4, 0, 1, 656, 1175]
+[:left_analog_x_player_1, 30000, 0, 1, 657, 1175]
+[:left_analog_y_player_1, -24000, 0, 1, 658, 1175]
+[:key_down_player_one, 1, 0, 1, 659, 1176]
+[:key_held_player_one, 4, 0, 1, 660, 1176]
+[:left_analog_x_player_1, 27000, 0, 1, 661, 1176]
+[:left_analog_y_player_1, -26000, 0, 1, 662, 1176]
+[:key_held_player_one, 1, 0, 1, 663, 1177]
+[:key_held_player_one, 4, 0, 1, 664, 1177]
+[:left_analog_x_player_1, 24000, 0, 1, 665, 1177]
+[:left_analog_y_player_1, -29000, 0, 1, 666, 1177]
+[:key_held_player_one, 1, 0, 1, 667, 1178]
+[:key_held_player_one, 4, 0, 1, 668, 1178]
+[:left_analog_x_player_1, 20000, 0, 1, 669, 1178]
+[:left_analog_y_player_1, -31000, 0, 1, 670, 1178]
+[:key_held_player_one, 1, 0, 1, 671, 1179]
+[:key_held_player_one, 4, 0, 1, 672, 1179]
+[:left_analog_x_player_1, 15000, 0, 1, 673, 1179]
+[:left_analog_y_player_1, -32000, 0, 1, 674, 1179]
+[:key_held_player_one, 1, 0, 1, 675, 1180]
+[:key_up_player_one, 4, 0, 1, 676, 1180]
+[:left_analog_x_player_1, 10000, 0, 1, 677, 1180]
+[:key_held_player_one, 1, 0, 1, 678, 1181]
+[:left_analog_x_player_1, 6000, 0, 1, 679, 1181]
+[:key_held_player_one, 1, 0, 1, 680, 1182]
+[:left_analog_x_player_1, 1000, 0, 1, 681, 1182]
+[:key_held_player_one, 1, 0, 1, 682, 1183]
+[:left_analog_x_player_1, 0, 0, 1, 683, 1183]
+[:key_held_player_one, 1, 0, 1, 684, 1184]
+[:left_analog_x_player_1, -4000, 0, 1, 685, 1184]
+[:key_held_player_one, 1, 0, 1, 686, 1185]
+[:left_analog_x_player_1, -10000, 0, 1, 687, 1185]
+[:key_held_player_one, 1, 0, 1, 688, 1186]
+[:left_analog_x_player_1, -14000, 0, 1, 689, 1186]
+[:key_held_player_one, 1, 0, 1, 690, 1187]
+[:left_analog_x_player_1, -20000, 0, 1, 691, 1187]
+[:left_analog_y_player_1, -30000, 0, 1, 692, 1187]
+[:key_held_player_one, 1, 0, 1, 693, 1188]
+[:key_down_player_one, 3, 0, 1, 694, 1188]
+[:left_analog_x_player_1, -24000, 0, 1, 695, 1188]
+[:left_analog_y_player_1, -28000, 0, 1, 696, 1188]
+[:key_held_player_one, 1, 0, 1, 697, 1189]
+[:key_held_player_one, 3, 0, 1, 698, 1189]
+[:left_analog_x_player_1, -27000, 0, 1, 699, 1189]
+[:left_analog_y_player_1, -25000, 0, 1, 700, 1189]
+[:key_held_player_one, 1, 0, 1, 701, 1190]
+[:key_held_player_one, 3, 0, 1, 702, 1190]
+[:left_analog_x_player_1, -30000, 0, 1, 703, 1190]
+[:left_analog_y_player_1, -20000, 0, 1, 704, 1190]
+[:key_held_player_one, 1, 0, 1, 705, 1191]
+[:key_held_player_one, 3, 0, 1, 706, 1191]
+[:left_analog_x_player_1, -32000, 0, 1, 707, 1191]
+[:left_analog_y_player_1, -15000, 0, 1, 708, 1191]
+[:key_up_player_one, 1, 0, 1, 709, 1192]
+[:key_held_player_one, 3, 0, 1, 710, 1192]
+[:left_analog_y_player_1, -9000, 0, 1, 711, 1192]
+[:key_held_player_one, 3, 0, 1, 712, 1193]
+[:left_analog_y_player_1, -5000, 0, 1, 713, 1193]
+[:key_held_player_one, 3, 0, 1, 714, 1194]
+[:left_analog_y_player_1, -1000, 0, 1, 715, 1194]
+[:key_held_player_one, 3, 0, 1, 716, 1195]
+[:left_analog_y_player_1, 0, 0, 1, 717, 1195]
+[:key_held_player_one, 3, 0, 1, 718, 1196]
+[:left_analog_y_player_1, 2000, 0, 1, 719, 1196]
+[:key_held_player_one, 3, 0, 1, 720, 1197]
+[:left_analog_y_player_1, 3000, 0, 1, 721, 1197]
+[:key_held_player_one, 3, 0, 1, 722, 1198]
+[:left_analog_x_player_1, -30000, 0, 1, 723, 1198]
+[:left_analog_y_player_1, 4000, 0, 1, 724, 1198]
+[:key_held_player_one, 3, 0, 1, 725, 1199]
+[:left_analog_x_player_1, -19000, 0, 1, 726, 1199]
+[:key_up_player_one, 3, 0, 1, 727, 1200]
+[:left_analog_x_player_1, 0, 0, 1, 728, 1200]
+[:left_analog_y_player_1, 0, 0, 1, 729, 1200]
+[:right_analog_x_player_1, 1000, 0, 1, 730, 1225]
+[:right_analog_x_player_1, 5000, 0, 1, 731, 1226]
+[:right_analog_x_player_1, 11000, 0, 1, 732, 1227]
+[:right_analog_x_player_1, 17000, 0, 1, 733, 1228]
+[:right_analog_x_player_1, 22000, 0, 1, 734, 1229]
+[:key_down_player_one, 4, 0, 1, 735, 1230]
+[:right_analog_x_player_1, 26000, 0, 1, 736, 1230]
+[:right_analog_y_player_1, -2000, 0, 1, 737, 1230]
+[:key_held_player_one, 4, 0, 1, 738, 1231]
+[:right_analog_x_player_1, 31000, 0, 1, 739, 1231]
+[:right_analog_y_player_1, -10000, 0, 1, 740, 1231]
+[:key_held_player_one, 4, 0, 1, 741, 1232]
+[:right_analog_x_player_1, 32000, 0, 1, 742, 1232]
+[:right_analog_y_player_1, -21000, 0, 1, 743, 1232]
+[:key_down_player_one, 1, 0, 1, 744, 1233]
+[:key_held_player_one, 4, 0, 1, 745, 1233]
+[:right_analog_y_player_1, -24000, 0, 1, 746, 1233]
+[:key_held_player_one, 1, 0, 1, 747, 1234]
+[:key_held_player_one, 4, 0, 1, 748, 1234]
+[:right_analog_x_player_1, 31000, 0, 1, 749, 1234]
+[:right_analog_y_player_1, -28000, 0, 1, 750, 1234]
+[:key_held_player_one, 1, 0, 1, 751, 1235]
+[:key_held_player_one, 4, 0, 1, 752, 1235]
+[:right_analog_x_player_1, 29000, 0, 1, 753, 1235]
+[:right_analog_y_player_1, -31000, 0, 1, 754, 1235]
+[:key_held_player_one, 1, 0, 1, 755, 1236]
+[:key_held_player_one, 4, 0, 1, 756, 1236]
+[:right_analog_x_player_1, 24000, 0, 1, 757, 1236]
+[:right_analog_y_player_1, -32000, 0, 1, 758, 1236]
+[:key_held_player_one, 1, 0, 1, 759, 1237]
+[:key_held_player_one, 4, 0, 1, 760, 1237]
+[:right_analog_x_player_1, 19000, 0, 1, 761, 1237]
+[:key_held_player_one, 1, 0, 1, 762, 1238]
+[:key_up_player_one, 4, 0, 1, 763, 1238]
+[:right_analog_x_player_1, 15000, 0, 1, 764, 1238]
+[:key_held_player_one, 1, 0, 1, 765, 1239]
+[:right_analog_x_player_1, 11000, 0, 1, 766, 1239]
+[:key_held_player_one, 1, 0, 1, 767, 1240]
+[:right_analog_x_player_1, 10000, 0, 1, 768, 1240]
+[:key_held_player_one, 1, 0, 1, 769, 1241]
+[:right_analog_x_player_1, 8000, 0, 1, 770, 1241]
+[:key_held_player_one, 1, 0, 1, 771, 1242]
+[:right_analog_x_player_1, 6000, 0, 1, 772, 1242]
+[:key_held_player_one, 1, 0, 1, 773, 1243]
+[:right_analog_x_player_1, 2000, 0, 1, 774, 1243]
+[:key_held_player_one, 1, 0, 1, 775, 1244]
+[:right_analog_x_player_1, 0, 0, 1, 776, 1244]
+[:key_held_player_one, 1, 0, 1, 777, 1245]
+[:right_analog_x_player_1, -9000, 0, 1, 778, 1245]
+[:key_held_player_one, 1, 0, 1, 779, 1246]
+[:right_analog_x_player_1, -20000, 0, 1, 780, 1246]
+[:key_held_player_one, 1, 0, 1, 781, 1247]
+[:key_down_player_one, 3, 0, 1, 782, 1247]
+[:right_analog_x_player_1, -26000, 0, 1, 783, 1247]
+[:right_analog_y_player_1, -31000, 0, 1, 784, 1247]
+[:key_held_player_one, 1, 0, 1, 785, 1248]
+[:key_held_player_one, 3, 0, 1, 786, 1248]
+[:right_analog_x_player_1, -30000, 0, 1, 787, 1248]
+[:right_analog_y_player_1, -28000, 0, 1, 788, 1248]
+[:key_held_player_one, 1, 0, 1, 789, 1249]
+[:key_held_player_one, 3, 0, 1, 790, 1249]
+[:right_analog_x_player_1, -32000, 0, 1, 791, 1249]
+[:right_analog_y_player_1, -23000, 0, 1, 792, 1249]
+[:key_held_player_one, 1, 0, 1, 793, 1250]
+[:key_held_player_one, 3, 0, 1, 794, 1250]
+[:right_analog_y_player_1, -20000, 0, 1, 795, 1250]
+[:key_held_player_one, 1, 0, 1, 796, 1251]
+[:key_held_player_one, 3, 0, 1, 797, 1251]
+[:right_analog_y_player_1, -15000, 0, 1, 798, 1251]
+[:key_up_player_one, 1, 0, 1, 799, 1252]
+[:key_held_player_one, 3, 0, 1, 800, 1252]
+[:right_analog_y_player_1, -11000, 0, 1, 801, 1252]
+[:key_held_player_one, 3, 0, 1, 802, 1253]
+[:right_analog_y_player_1, -7000, 0, 1, 803, 1253]
+[:key_held_player_one, 3, 0, 1, 804, 1254]
+[:right_analog_y_player_1, -3000, 0, 1, 805, 1254]
+[:key_held_player_one, 3, 0, 1, 806, 1255]
+[:right_analog_y_player_1, 0, 0, 1, 807, 1255]
+[:key_held_player_one, 3, 0, 1, 808, 1256]
+[:key_held_player_one, 3, 0, 1, 809, 1257]
+[:right_analog_y_player_1, 5000, 0, 1, 810, 1257]
+[:key_held_player_one, 3, 0, 1, 811, 1258]
+[:right_analog_y_player_1, 11000, 0, 1, 812, 1258]
+[:key_held_player_one, 3, 0, 1, 813, 1259]
+[:right_analog_y_player_1, 16000, 0, 1, 814, 1259]
+[:key_held_player_one, 3, 0, 1, 815, 1260]
+[:right_analog_x_player_1, -31000, 0, 1, 816, 1260]
+[:right_analog_y_player_1, 20000, 0, 1, 817, 1260]
+[:key_down_player_one, 2, 0, 1, 818, 1261]
+[:key_held_player_one, 3, 0, 1, 819, 1261]
+[:right_analog_x_player_1, -30000, 0, 1, 820, 1261]
+[:right_analog_y_player_1, 23000, 0, 1, 821, 1261]
+[:key_held_player_one, 2, 0, 1, 822, 1262]
+[:key_held_player_one, 3, 0, 1, 823, 1262]
+[:right_analog_x_player_1, -27000, 0, 1, 824, 1262]
+[:right_analog_y_player_1, 27000, 0, 1, 825, 1262]
+[:key_held_player_one, 2, 0, 1, 826, 1263]
+[:key_held_player_one, 3, 0, 1, 827, 1263]
+[:right_analog_x_player_1, -25000, 0, 1, 828, 1263]
+[:right_analog_y_player_1, 29000, 0, 1, 829, 1263]
+[:key_held_player_one, 2, 0, 1, 830, 1264]
+[:key_held_player_one, 3, 0, 1, 831, 1264]
+[:right_analog_x_player_1, -22000, 0, 1, 832, 1264]
+[:right_analog_y_player_1, 31000, 0, 1, 833, 1264]
+[:key_held_player_one, 2, 0, 1, 834, 1265]
+[:key_held_player_one, 3, 0, 1, 835, 1265]
+[:right_analog_x_player_1, -19000, 0, 1, 836, 1265]
+[:right_analog_y_player_1, 32000, 0, 1, 837, 1265]
+[:key_held_player_one, 2, 0, 1, 838, 1266]
+[:key_up_player_one, 3, 0, 1, 839, 1266]
+[:right_analog_x_player_1, -15000, 0, 1, 840, 1266]
+[:key_held_player_one, 2, 0, 1, 841, 1267]
+[:right_analog_x_player_1, -11000, 0, 1, 842, 1267]
+[:key_held_player_one, 2, 0, 1, 843, 1268]
+[:right_analog_x_player_1, -9000, 0, 1, 844, 1268]
+[:key_held_player_one, 2, 0, 1, 845, 1269]
+[:right_analog_x_player_1, -7000, 0, 1, 846, 1269]
+[:key_held_player_one, 2, 0, 1, 847, 1270]
+[:right_analog_x_player_1, -3000, 0, 1, 848, 1270]
+[:key_held_player_one, 2, 0, 1, 849, 1271]
+[:right_analog_x_player_1, 0, 0, 1, 850, 1271]
+[:key_held_player_one, 2, 0, 1, 851, 1272]
+[:right_analog_x_player_1, 5000, 0, 1, 852, 1272]
+[:key_held_player_one, 2, 0, 1, 853, 1273]
+[:right_analog_x_player_1, 17000, 0, 1, 854, 1273]
+[:key_held_player_one, 2, 0, 1, 855, 1274]
+[:right_analog_x_player_1, 30000, 0, 1, 856, 1274]
+[:right_analog_y_player_1, 25000, 0, 1, 857, 1274]
+[:key_held_player_one, 2, 0, 1, 858, 1275]
+[:key_down_player_one, 4, 0, 1, 859, 1275]
+[:right_analog_x_player_1, 32000, 0, 1, 860, 1275]
+[:right_analog_y_player_1, 14000, 0, 1, 861, 1275]
+[:key_up_player_one, 2, 0, 1, 862, 1276]
+[:key_held_player_one, 4, 0, 1, 863, 1276]
+[:right_analog_y_player_1, 11000, 0, 1, 864, 1276]
+[:key_held_player_one, 4, 0, 1, 865, 1277]
+[:right_analog_y_player_1, 8000, 0, 1, 866, 1277]
+[:key_held_player_one, 4, 0, 1, 867, 1278]
+[:right_analog_y_player_1, 5000, 0, 1, 868, 1278]
+[:key_held_player_one, 4, 0, 1, 869, 1279]
+[:right_analog_y_player_1, 1000, 0, 1, 870, 1279]
+[:key_held_player_one, 4, 0, 1, 871, 1280]
+[:right_analog_y_player_1, -2000, 0, 1, 872, 1280]
+[:key_held_player_one, 4, 0, 1, 873, 1281]
+[:right_analog_y_player_1, -9000, 0, 1, 874, 1281]
+[:key_held_player_one, 4, 0, 1, 875, 1282]
+[:right_analog_y_player_1, -18000, 0, 1, 876, 1282]
+[:key_held_player_one, 4, 0, 1, 877, 1283]
+[:right_analog_x_player_1, 31000, 0, 1, 878, 1283]
+[:right_analog_y_player_1, -23000, 0, 1, 879, 1283]
+[:key_down_player_one, 1, 0, 1, 880, 1284]
+[:key_held_player_one, 4, 0, 1, 881, 1284]
+[:right_analog_x_player_1, 29000, 0, 1, 882, 1284]
+[:right_analog_y_player_1, -26000, 0, 1, 883, 1284]
+[:key_held_player_one, 1, 0, 1, 884, 1285]
+[:key_held_player_one, 4, 0, 1, 885, 1285]
+[:right_analog_x_player_1, 26000, 0, 1, 886, 1285]
+[:right_analog_y_player_1, -29000, 0, 1, 887, 1285]
+[:key_held_player_one, 1, 0, 1, 888, 1286]
+[:key_held_player_one, 4, 0, 1, 889, 1286]
+[:right_analog_x_player_1, 23000, 0, 1, 890, 1286]
+[:right_analog_y_player_1, -31000, 0, 1, 891, 1286]
+[:key_held_player_one, 1, 0, 1, 892, 1287]
+[:key_held_player_one, 4, 0, 1, 893, 1287]
+[:right_analog_x_player_1, 16000, 0, 1, 894, 1287]
+[:right_analog_y_player_1, -32000, 0, 1, 895, 1287]
+[:key_held_player_one, 1, 0, 1, 896, 1288]
+[:key_up_player_one, 4, 0, 1, 897, 1288]
+[:right_analog_x_player_1, 11000, 0, 1, 898, 1288]
+[:key_held_player_one, 1, 0, 1, 899, 1289]
+[:right_analog_x_player_1, 8000, 0, 1, 900, 1289]
+[:key_held_player_one, 1, 0, 1, 901, 1290]
+[:right_analog_x_player_1, 2000, 0, 1, 902, 1290]
+[:key_held_player_one, 1, 0, 1, 903, 1291]
+[:right_analog_x_player_1, 0, 0, 1, 904, 1291]
+[:key_held_player_one, 1, 0, 1, 905, 1292]
+[:right_analog_x_player_1, -3000, 0, 1, 906, 1292]
+[:key_held_player_one, 1, 0, 1, 907, 1293]
+[:right_analog_x_player_1, -12000, 0, 1, 908, 1293]
+[:key_held_player_one, 1, 0, 1, 909, 1294]
+[:right_analog_x_player_1, -23000, 0, 1, 910, 1294]
+[:right_analog_y_player_1, -31000, 0, 1, 911, 1294]
+[:key_held_player_one, 1, 0, 1, 912, 1295]
+[:key_down_player_one, 3, 0, 1, 913, 1295]
+[:right_analog_x_player_1, -29000, 0, 1, 914, 1295]
+[:right_analog_y_player_1, -26000, 0, 1, 915, 1295]
+[:key_held_player_one, 1, 0, 1, 916, 1296]
+[:key_held_player_one, 3, 0, 1, 917, 1296]
+[:right_analog_x_player_1, -31000, 0, 1, 918, 1296]
+[:right_analog_y_player_1, -22000, 0, 1, 919, 1296]
+[:key_held_player_one, 1, 0, 1, 920, 1297]
+[:key_held_player_one, 3, 0, 1, 921, 1297]
+[:right_analog_x_player_1, -32000, 0, 1, 922, 1297]
+[:right_analog_y_player_1, -18000, 0, 1, 923, 1297]
+[:key_up_player_one, 1, 0, 1, 924, 1298]
+[:key_held_player_one, 3, 0, 1, 925, 1298]
+[:right_analog_y_player_1, -15000, 0, 1, 926, 1298]
+[:key_held_player_one, 3, 0, 1, 927, 1299]
+[:right_analog_y_player_1, -12000, 0, 1, 928, 1299]
+[:key_held_player_one, 3, 0, 1, 929, 1300]
+[:right_analog_y_player_1, -9000, 0, 1, 930, 1300]
+[:key_held_player_one, 3, 0, 1, 931, 1301]
+[:right_analog_y_player_1, -5000, 0, 1, 932, 1301]
+[:key_held_player_one, 3, 0, 1, 933, 1302]
+[:right_analog_y_player_1, -1000, 0, 1, 934, 1302]
+[:key_held_player_one, 3, 0, 1, 935, 1303]
+[:right_analog_y_player_1, 0, 0, 1, 936, 1303]
+[:key_held_player_one, 3, 0, 1, 937, 1304]
+[:right_analog_y_player_1, 3000, 0, 1, 938, 1304]
+[:key_held_player_one, 3, 0, 1, 939, 1305]
+[:right_analog_y_player_1, 8000, 0, 1, 940, 1305]
+[:key_held_player_one, 3, 0, 1, 941, 1306]
+[:right_analog_y_player_1, 13000, 0, 1, 942, 1306]
+[:key_held_player_one, 3, 0, 1, 943, 1307]
+[:right_analog_y_player_1, 17000, 0, 1, 944, 1307]
+[:key_held_player_one, 3, 0, 1, 945, 1308]
+[:right_analog_x_player_1, -30000, 0, 1, 946, 1308]
+[:right_analog_y_player_1, 20000, 0, 1, 947, 1308]
+[:key_down_player_one, 2, 0, 1, 948, 1309]
+[:key_held_player_one, 3, 0, 1, 949, 1309]
+[:right_analog_x_player_1, -28000, 0, 1, 950, 1309]
+[:right_analog_y_player_1, 23000, 0, 1, 951, 1309]
+[:key_held_player_one, 2, 0, 1, 952, 1310]
+[:key_held_player_one, 3, 0, 1, 953, 1310]
+[:right_analog_x_player_1, -26000, 0, 1, 954, 1310]
+[:right_analog_y_player_1, 26000, 0, 1, 955, 1310]
+[:key_held_player_one, 2, 0, 1, 956, 1311]
+[:key_held_player_one, 3, 0, 1, 957, 1311]
+[:right_analog_x_player_1, -22000, 0, 1, 958, 1311]
+[:right_analog_y_player_1, 29000, 0, 1, 959, 1311]
+[:key_held_player_one, 2, 0, 1, 960, 1312]
+[:key_held_player_one, 3, 0, 1, 961, 1312]
+[:right_analog_x_player_1, -19000, 0, 1, 962, 1312]
+[:right_analog_y_player_1, 31000, 0, 1, 963, 1312]
+[:key_held_player_one, 2, 0, 1, 964, 1313]
+[:key_up_player_one, 3, 0, 1, 965, 1313]
+[:right_analog_x_player_1, -16000, 0, 1, 966, 1313]
+[:right_analog_y_player_1, 32000, 0, 1, 967, 1313]
+[:key_held_player_one, 2, 0, 1, 968, 1314]
+[:right_analog_x_player_1, -12000, 0, 1, 969, 1314]
+[:key_held_player_one, 2, 0, 1, 970, 1315]
+[:right_analog_x_player_1, -10000, 0, 1, 971, 1315]
+[:key_held_player_one, 2, 0, 1, 972, 1316]
+[:right_analog_x_player_1, -7000, 0, 1, 973, 1316]
+[:key_held_player_one, 2, 0, 1, 974, 1317]
+[:right_analog_x_player_1, -2000, 0, 1, 975, 1317]
+[:key_held_player_one, 2, 0, 1, 976, 1318]
+[:right_analog_x_player_1, 0, 0, 1, 977, 1318]
+[:key_held_player_one, 2, 0, 1, 978, 1319]
+[:right_analog_x_player_1, 3000, 0, 1, 979, 1319]
+[:key_held_player_one, 2, 0, 1, 980, 1320]
+[:right_analog_x_player_1, 8000, 0, 1, 981, 1320]
+[:key_held_player_one, 2, 0, 1, 982, 1321]
+[:right_analog_x_player_1, 12000, 0, 1, 983, 1321]
+[:key_held_player_one, 2, 0, 1, 984, 1322]
+[:right_analog_x_player_1, 16000, 0, 1, 985, 1322]
+[:key_held_player_one, 2, 0, 1, 986, 1323]
+[:right_analog_x_player_1, 21000, 0, 1, 987, 1323]
+[:right_analog_y_player_1, 31000, 0, 1, 988, 1323]
+[:key_held_player_one, 2, 0, 1, 989, 1324]
+[:key_down_player_one, 4, 0, 1, 990, 1324]
+[:right_analog_x_player_1, 26000, 0, 1, 991, 1324]
+[:right_analog_y_player_1, 28000, 0, 1, 992, 1324]
+[:key_held_player_one, 2, 0, 1, 993, 1325]
+[:key_held_player_one, 4, 0, 1, 994, 1325]
+[:right_analog_x_player_1, 29000, 0, 1, 995, 1325]
+[:right_analog_y_player_1, 24000, 0, 1, 996, 1325]
+[:key_held_player_one, 2, 0, 1, 997, 1326]
+[:key_held_player_one, 4, 0, 1, 998, 1326]
+[:right_analog_x_player_1, 31000, 0, 1, 999, 1326]
+[:right_analog_y_player_1, 20000, 0, 1, 1000, 1326]
+[:key_held_player_one, 2, 0, 1, 1001, 1327]
+[:key_held_player_one, 4, 0, 1, 1002, 1327]
+[:right_analog_x_player_1, 32000, 0, 1, 1003, 1327]
+[:right_analog_y_player_1, 14000, 0, 1, 1004, 1327]
+[:key_up_player_one, 2, 0, 1, 1005, 1328]
+[:key_held_player_one, 4, 0, 1, 1006, 1328]
+[:right_analog_y_player_1, 2000, 0, 1, 1007, 1328]
+[:key_held_player_one, 4, 0, 1, 1008, 1329]
+[:right_analog_x_player_1, 27000, 0, 1, 1009, 1329]
+[:right_analog_y_player_1, -9000, 0, 1, 1010, 1329]
+[:key_held_player_one, 4, 0, 1, 1011, 1330]
+[:right_analog_x_player_1, 21000, 0, 1, 1012, 1330]
+[:right_analog_y_player_1, -11000, 0, 1, 1013, 1330]
+[:key_held_player_one, 4, 0, 1, 1014, 1331]
+[:right_analog_x_player_1, 17000, 0, 1, 1015, 1331]
+[:right_analog_y_player_1, -10000, 0, 1, 1016, 1331]
+[:key_up_player_one, 4, 0, 1, 1017, 1332]
+[:right_analog_x_player_1, 11000, 0, 1, 1018, 1332]
+[:right_analog_y_player_1, -4000, 0, 1, 1019, 1332]
+[:right_analog_x_player_1, 6000, 0, 1, 1020, 1333]
+[:right_analog_y_player_1, 0, 0, 1, 1021, 1333]
+[:right_analog_x_player_1, 0, 0, 1, 1022, 1334]
+[:right_analog_y_player_1, 1000, 0, 1, 1023, 1366]
+[:right_analog_y_player_1, 0, 0, 1, 1024, 1367]
+[:right_analog_y_player_1, 1000, 0, 1, 1025, 1369]
+[:key_down_player_one, 21, 0, 1, 1026, 1370]
+[:key_held_player_one, 21, 0, 1, 1027, 1371]
+[:key_held_player_one, 21, 0, 1, 1028, 1372]
+[:key_held_player_one, 21, 0, 1, 1029, 1373]
+[:key_held_player_one, 21, 0, 1, 1030, 1374]
+[:right_analog_x_player_1, 1000, 0, 1, 1031, 1374]
+[:right_analog_y_player_1, 2000, 0, 1, 1032, 1374]
+[:key_held_player_one, 21, 0, 1, 1033, 1375]
+[:right_analog_y_player_1, 1000, 0, 1, 1034, 1375]
+[:key_held_player_one, 21, 0, 1, 1035, 1376]
+[:key_held_player_one, 21, 0, 1, 1036, 1377]
+[:right_analog_y_player_1, 0, 0, 1, 1037, 1377]
+[:key_held_player_one, 21, 0, 1, 1038, 1378]
+[:right_analog_x_player_1, 0, 0, 1, 1039, 1378]
+[:key_held_player_one, 21, 0, 1, 1040, 1379]
+[:key_held_player_one, 21, 0, 1, 1041, 1380]
+[:key_held_player_one, 21, 0, 1, 1042, 1381]
+[:key_up_player_one, 21, 0, 1, 1043, 1382]
+[:key_down_player_one, 20, 0, 1, 1044, 1411]
+[:key_held_player_one, 20, 0, 1, 1045, 1412]
+[:key_held_player_one, 20, 0, 1, 1046, 1413]
+[:key_held_player_one, 20, 0, 1, 1047, 1414]
+[:key_held_player_one, 20, 0, 1, 1048, 1415]
+[:key_held_player_one, 20, 0, 1, 1049, 1416]
+[:key_held_player_one, 20, 0, 1, 1050, 1417]
+[:key_held_player_one, 20, 0, 1, 1051, 1418]
+[:key_held_player_one, 20, 0, 1, 1052, 1419]
+[:key_up_player_one, 20, 0, 1, 1053, 1420]
+[:left_analog_x_player_1, -1000, 0, 1, 1054, 1422]
+[:left_analog_x_player_1, 0, 0, 1, 1055, 1423]
+[:key_down_raw, 1073742051, 1024, 2, 1056, 1529]
+[:key_down_raw, 113, 1024, 2, 1057, 1529]
+[:key_up_raw, 113, 1024, 2, 1058, 1529]