diff options
| author | Amir Rajan <[email protected]> | 2020-09-11 02:02:01 -0500 |
|---|---|---|
| committer | Amir Rajan <[email protected]> | 2020-09-11 02:02:57 -0500 |
| commit | 33ec37b141e896b47ed642923fd33b0c658ae9fb (patch) | |
| tree | a40d3e5d41beeb06508200078f6f26b0ee57d6a4 /samples/05_mouse | |
| parent | 958cf43779d2bf528869e80511c4c4f2a433b2db (diff) | |
| download | dragonruby-game-toolkit-contrib-33ec37b141e896b47ed642923fd33b0c658ae9fb.tar.gz dragonruby-game-toolkit-contrib-33ec37b141e896b47ed642923fd33b0c658ae9fb.zip | |
synced samples
Diffstat (limited to 'samples/05_mouse')
25 files changed, 3092 insertions, 0 deletions
diff --git a/samples/05_mouse/03_mouse_click/app/main.rb b/samples/05_mouse/03_mouse_click/app/main.rb new file mode 100644 index 0000000..8969a6e --- /dev/null +++ b/samples/05_mouse/03_mouse_click/app/main.rb @@ -0,0 +1,244 @@ +=begin + + APIs listing that haven't been encountered in previous sample apps: + + - product: Returns an array of all combinations of elements from all arrays. + + For example, [1,2].product([1,2]) would return the following array... + [[1,1], [1,2], [2,1], [2,2]] + More than two arrays can be given to product and it will still work, + such as [1,2].product([1,2],[3,4]). What would product return in this case? + + Answer: + [[1,1,3],[1,1,4],[1,2,3],[1,2,4],[2,1,3],[2,1,4],[2,2,3],[2,2,4]] + + - num1.fdiv(num2): Returns the float division (will have a decimal) of the two given numbers. + For example, 5.fdiv(2) = 2.5 and 5.fdiv(5) = 1.0 + + - yield: Allows you to call a method with a code block and yield to that block. + + Reminders: + + - ARRAY#inside_rect?: Returns true or false depending on if the point is inside the rect. + + - String interpolation: Uses #{} syntax; everything between the #{ and the } is evaluated + as Ruby code, and the placeholder is replaced with its corresponding value or result. + + - args.inputs.mouse.click: This property will be set if the mouse was clicked. + + - Ternary operator (?): Will evaluate a statement (just like an if statement) + and perform an action if the result is true or another action if it is false. + + - reject: Removes elements from a collection if they meet certain requirements. + + - args.outputs.borders: An array. The values generate a border. + The parameters are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE] + For more information about borders, go to mygame/documentation/03-solids-and-borders.md. + + - args.outputs.labels: An array. The values generate a label. + The parameters are [X, Y, TEXT, SIZE, ALIGNMENT, RED, GREEN, BLUE, ALPHA, FONT STYLE] + For more information about labels, go to mygame/documentation/02-labels. + +=end + +# This sample app is a classic game of Tic Tac Toe. + +class TicTacToe + attr_accessor :_, :state, :outputs, :inputs, :grid, :gtk + + # Starts the game with player x's turn and creates an array (to_a) for space combinations. + # Calls methods necessary for the game to run properly. + def tick + state.current_turn ||= :x + state.space_combinations = [-1, 0, 1].product([-1, 0, 1]).to_a + render_board + input_board + end + + # Uses borders to create grid squares for the game's board. Also outputs the game pieces using labels. + def render_board + square_size = 80 + + # Positions the game's board in the center of the screen. + # Try removing what follows grid.w_half or grid.h_half and see how the position changes! + board_left = grid.w_half - square_size * 1.5 + board_top = grid.h_half - square_size * 1.5 + + # At first glance, the add(1) looks pretty trivial. But if you remove it, + # you'll see that the positioning of the board would be skewed without it! + # Or if you put 2 in the parenthesis, the pieces will be placed in the wrong squares + # due to the change in board placement. + outputs.borders << all_spaces do |x, y, space| # outputs borders for all board spaces + space.border ||= [ + board_left + x.add(1) * square_size, # space.border is initialized using this definition + board_top + y.add(1) * square_size, + square_size, + square_size + ] + end + + # Again, the calculations ensure that the piece is placed in the center of the grid square. + # Remove the '- 20' and the piece will be placed at the top of the grid square instead of the center. + outputs.labels << filled_spaces do |x, y, space| # put label in each filled space of board + label board_left + x.add(1) * square_size + square_size.fdiv(2), + board_top + y.add(1) * square_size + square_size - 20, + space.piece # text of label, either "x" or "o" + end + + # Uses a label to output whether x or o won, or if a draw occurred. + # If the game is ongoing, a label shows whose turn it currently is. + outputs.labels << if state.x_won + label grid.w_half, grid.top - 80, "x won" # the '-80' positions the label 80 pixels lower than top + elsif state.o_won + label grid.w_half, grid.top - 80, "o won" # grid.w_half positions the label in the center horizontally + elsif state.draw + label grid.w_half, grid.top - 80, "a draw" + else # if no one won and the game is ongoing + label grid.w_half, grid.top - 80, "turn: #{state.current_turn}" + end + end + + # Calls the methods responsible for handling user input and determining the winner. + # Does nothing unless the mouse is clicked. + def input_board + return unless inputs.mouse.click + input_place_piece + input_restart_game + determine_winner + end + + # Handles user input for placing pieces on the board. + def input_place_piece + return if state.game_over + + # Checks to find the space that the mouse was clicked inside of, and makes sure the space does not already + # have a piece in it. + __, __, space = all_spaces.find do |__, __, space| + inputs.mouse.click.point.inside_rect?(space.border) && !space.piece + end + + # The piece that goes into the space belongs to the player whose turn it currently is. + return unless space + space.piece = state.current_turn + + # This ternary operator statement allows us to change the current player's turn. + # If it is currently x's turn, it becomes o's turn. If it is not x's turn, it become's x's turn. + state.current_turn = state.current_turn == :x ? :o : :x + end + + # Resets the game. + def input_restart_game + return unless state.game_over + gtk.reset + end + + # Checks if x or o won the game. + # If neither player wins and all nine squares are filled, a draw happens. + # Once a player is chosen as the winner or a draw happens, the game is over. + def determine_winner + state.x_won = won? :x # evaluates to either true or false (boolean values) + state.o_won = won? :o + state.draw = true if filled_spaces.length == 9 && !state.x_won && !state.o_won + state.game_over = state.x_won || state.o_won || state.draw + end + + # Determines if a player won by checking if there is a horizontal match or vertical match. + # Horizontal_match and vertical_match have boolean values. If either is true, the game has been won. + def won? piece + # performs action on all space combinations + won = [[-1, 0, 1]].product([-1, 0, 1]).map do |xs, y| + + # Checks if the 3 grid spaces with the same y value (or same row) and + # x values that are next to each other have pieces that belong to the same player. + # Remember, the value of piece is equal to the current turn (which is the player). + horizontal_match = state.spaces[xs[0]][y].piece == piece && + state.spaces[xs[1]][y].piece == piece && + state.spaces[xs[2]][y].piece == piece + + # Checks if the 3 grid spaces with the same x value (or same column) and + # y values that are next to each other have pieces that belong to the same player. + # The && represents an "and" statement: if even one part of the statement is false, + # the entire statement evaluates to false. + vertical_match = state.spaces[y][xs[0]].piece == piece && + state.spaces[y][xs[1]].piece == piece && + state.spaces[y][xs[2]].piece == piece + + horizontal_match || vertical_match # if either is true, true is returned + end + + # Sees if there is a diagonal match, starting from the bottom left and ending at the top right. + # Is added to won regardless of whether the statement is true or false. + won << (state.spaces[-1][-1].piece == piece && # bottom left + state.spaces[ 0][ 0].piece == piece && # center + state.spaces[ 1][ 1].piece == piece) # top right + + # Sees if there is a diagonal match, starting at the bottom right and ending at the top left + # and is added to won. + won << (state.spaces[ 1][-1].piece == piece && # bottom right + state.spaces[ 0][ 0].piece == piece && # center + state.spaces[-1][ 1].piece == piece) # top left + + # Any false statements (meaning false diagonal matches) are rejected from won + won.reject_false.any? + end + + # Defines filled spaces on the board by rejecting all spaces that do not have game pieces in them. + # The ! before a statement means "not". For example, we are rejecting any space combinations that do + # NOT have pieces in them. + def filled_spaces + state.space_combinations + .reject { |x, y| !state.spaces[x][y].piece } # reject spaces with no pieces in them + .map do |x, y| + if block_given? + yield x, y, state.spaces[x][y] + else + [x, y, state.spaces[x][y]] # sets definition of space + end + end + end + + # Defines all spaces on the board. + def all_spaces + if !block_given? + state.space_combinations.map do |x, y| + [x, y, state.spaces[x][y]] # sets definition of space + end + else # if a block is given (block_given? is true) + state.space_combinations.map do |x, y| + yield x, y, state.spaces[x][y] # yield if a block is given + end + end + end + + # Sets values for a label, such as the position, value, size, alignment, and color. + def label x, y, value + [x, y + 10, value, 20, 1, 0, 0, 0] + end +end + +$tic_tac_toe = TicTacToe.new + +def tick args + $tic_tac_toe._ = args + $tic_tac_toe.state = args.state + $tic_tac_toe.outputs = args.outputs + $tic_tac_toe.inputs = args.inputs + $tic_tac_toe.grid = args.grid + $tic_tac_toe.gtk = args.gtk + $tic_tac_toe.tick + tick_instructions args, "Sample app shows how to work with mouse clicks." +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/05_mouse/03_mouse_click/license-for-sample.txt b/samples/05_mouse/03_mouse_click/license-for-sample.txt new file mode 100644 index 0000000..100dcec --- /dev/null +++ b/samples/05_mouse/03_mouse_click/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/05_mouse/03_mouse_click/replay.txt b/samples/05_mouse/03_mouse_click/replay.txt new file mode 100644 index 0000000..1ea08dc --- /dev/null +++ b/samples/05_mouse/03_mouse_click/replay.txt @@ -0,0 +1,870 @@ +replay_version 2.0 +stopped_at 1699 +seed 100 +recorded_at Sun Sep 29 21:49:02 2019 +[:mouse_move, 297, 112, 2, 1, 34] +[:mouse_move, 305, 112, 2, 2, 35] +[:mouse_move, 311, 112, 2, 3, 36] +[:mouse_move, 337, 111, 2, 4, 38] +[:mouse_move, 359, 110, 2, 5, 40] +[:mouse_move, 398, 112, 2, 6, 41] +[:mouse_move, 415, 118, 2, 7, 42] +[:mouse_move, 422, 124, 2, 8, 43] +[:mouse_move, 441, 140, 2, 9, 44] +[:mouse_move, 448, 148, 2, 10, 45] +[:mouse_move, 455, 163, 2, 11, 46] +[:mouse_move, 457, 174, 2, 12, 47] +[:mouse_move, 450, 183, 2, 13, 48] +[:mouse_move, 441, 187, 2, 14, 49] +[:mouse_move, 420, 190, 2, 15, 50] +[:mouse_move, 414, 190, 2, 16, 51] +[:mouse_move, 409, 190, 2, 17, 52] +[:mouse_move, 398, 188, 2, 18, 53] +[:mouse_move, 395, 187, 2, 19, 54] +[:mouse_move, 390, 185, 2, 20, 55] +[:mouse_move, 390, 184, 2, 21, 57] +[:mouse_move, 401, 189, 2, 22, 121] +[:mouse_move, 444, 221, 2, 23, 123] +[:mouse_move, 485, 255, 2, 24, 124] +[:mouse_move, 510, 280, 2, 25, 125] +[:mouse_move, 526, 296, 2, 26, 126] +[:mouse_move, 530, 301, 2, 27, 127] +[:mouse_move, 545, 317, 2, 28, 128] +[:mouse_move, 548, 321, 2, 29, 129] +[:mouse_move, 550, 324, 2, 30, 130] +[:mouse_move, 550, 326, 2, 31, 131] +[:mouse_move, 548, 324, 2, 32, 133] +[:mouse_move, 546, 319, 2, 33, 134] +[:mouse_move, 546, 306, 2, 34, 136] +[:mouse_move, 546, 301, 2, 35, 137] +[:mouse_move, 553, 282, 2, 36, 138] +[:mouse_move, 557, 271, 2, 37, 139] +[:mouse_move, 566, 232, 2, 38, 140] +[:mouse_move, 567, 215, 2, 39, 142] +[:mouse_move, 567, 203, 2, 40, 143] +[:mouse_move, 565, 184, 2, 41, 144] +[:mouse_move, 560, 177, 2, 42, 145] +[:mouse_move, 547, 163, 2, 43, 146] +[:mouse_move, 540, 159, 2, 44, 148] +[:mouse_move, 539, 157, 2, 45, 149] +[:mouse_move, 536, 156, 2, 46, 150] +[:mouse_move, 535, 154, 2, 47, 151] +[:mouse_move, 534, 153, 2, 48, 153] +[:mouse_move, 534, 152, 2, 49, 155] +[:mouse_move, 534, 151, 2, 50, 156] +[:mouse_move, 534, 150, 2, 51, 158] +[:mouse_move, 537, 150, 2, 52, 159] +[:mouse_move, 542, 149, 2, 53, 160] +[:mouse_move, 587, 152, 2, 54, 161] +[:mouse_move, 612, 155, 2, 55, 162] +[:mouse_move, 669, 161, 2, 56, 163] +[:mouse_move, 681, 161, 2, 57, 164] +[:mouse_move, 713, 160, 2, 58, 165] +[:mouse_move, 741, 155, 2, 59, 167] +[:mouse_move, 744, 154, 2, 60, 168] +[:mouse_move, 758, 151, 2, 61, 169] +[:mouse_move, 759, 151, 2, 62, 170] +[:mouse_move, 760, 151, 2, 63, 171] +[:mouse_move, 761, 151, 2, 64, 172] +[:mouse_move, 761, 152, 2, 65, 187] +[:mouse_move, 757, 160, 2, 66, 188] +[:mouse_move, 724, 198, 2, 67, 190] +[:mouse_move, 706, 214, 2, 68, 191] +[:mouse_move, 659, 243, 2, 69, 192] +[:mouse_move, 617, 259, 2, 70, 194] +[:mouse_move, 603, 264, 2, 71, 195] +[:mouse_move, 597, 265, 2, 72, 196] +[:mouse_move, 589, 268, 2, 73, 197] +[:mouse_move, 578, 271, 2, 74, 198] +[:mouse_move, 572, 272, 2, 75, 199] +[:mouse_move, 571, 272, 2, 76, 200] +[:mouse_move, 570, 272, 2, 77, 201] +[:mouse_move, 568, 273, 2, 78, 202] +[:mouse_move, 565, 273, 2, 79, 204] +[:mouse_move, 562, 275, 2, 80, 205] +[:mouse_move, 560, 276, 2, 81, 206] +[:mouse_move, 558, 276, 2, 82, 207] +[:mouse_move, 555, 277, 2, 83, 208] +[:mouse_move, 554, 278, 2, 84, 209] +[:mouse_move, 552, 279, 2, 85, 210] +[:mouse_move, 551, 279, 2, 86, 212] +[:mouse_button_pressed, 1, 0, 1, 87, 217] +[:mouse_button_up, 1, 0, 1, 88, 225] +[:mouse_move, 551, 280, 2, 89, 270] +[:mouse_move, 551, 283, 2, 90, 271] +[:mouse_move, 552, 296, 2, 91, 272] +[:mouse_move, 553, 314, 2, 92, 273] +[:mouse_move, 560, 391, 2, 93, 274] +[:mouse_move, 562, 409, 2, 94, 275] +[:mouse_move, 566, 440, 2, 95, 276] +[:mouse_move, 567, 448, 2, 96, 277] +[:mouse_move, 568, 464, 2, 97, 278] +[:mouse_move, 570, 482, 2, 98, 279] +[:mouse_move, 571, 488, 2, 99, 280] +[:mouse_move, 571, 489, 2, 100, 281] +[:mouse_move, 570, 489, 2, 101, 285] +[:mouse_move, 570, 488, 2, 102, 286] +[:mouse_move, 570, 487, 2, 103, 287] +[:mouse_move, 570, 486, 2, 104, 288] +[:mouse_move, 569, 483, 2, 105, 289] +[:mouse_move, 569, 475, 2, 106, 290] +[:mouse_move, 568, 473, 2, 107, 291] +[:mouse_move, 568, 467, 2, 108, 292] +[:mouse_move, 567, 464, 2, 109, 293] +[:mouse_move, 567, 461, 2, 110, 294] +[:mouse_move, 567, 460, 2, 111, 295] +[:mouse_move, 567, 459, 2, 112, 296] +[:mouse_move, 567, 458, 2, 113, 298] +[:mouse_move, 567, 457, 2, 114, 300] +[:mouse_move, 567, 456, 2, 115, 301] +[:mouse_move, 567, 455, 2, 116, 303] +[:mouse_button_pressed, 1, 0, 1, 117, 305] +[:mouse_button_up, 1, 0, 1, 118, 311] +[:mouse_move, 576, 455, 2, 119, 325] +[:mouse_move, 585, 455, 2, 120, 326] +[:mouse_move, 592, 455, 2, 121, 327] +[:mouse_move, 616, 457, 2, 122, 328] +[:mouse_move, 637, 458, 2, 123, 329] +[:mouse_move, 656, 458, 2, 124, 331] +[:mouse_move, 665, 458, 2, 125, 332] +[:mouse_move, 670, 458, 2, 126, 333] +[:mouse_move, 673, 458, 2, 127, 334] +[:mouse_move, 679, 458, 2, 128, 335] +[:mouse_move, 680, 458, 2, 129, 336] +[:mouse_move, 685, 458, 2, 130, 337] +[:mouse_move, 686, 458, 2, 131, 338] +[:mouse_move, 687, 458, 2, 132, 339] +[:mouse_move, 691, 458, 2, 133, 340] +[:mouse_move, 693, 458, 2, 134, 341] +[:mouse_move, 696, 458, 2, 135, 342] +[:mouse_move, 700, 458, 2, 136, 343] +[:mouse_move, 702, 458, 2, 137, 344] +[:mouse_move, 706, 458, 2, 138, 345] +[:mouse_move, 707, 458, 2, 139, 346] +[:mouse_move, 708, 458, 2, 140, 347] +[:mouse_move, 709, 458, 2, 141, 349] +[:mouse_button_pressed, 1, 0, 1, 142, 351] +[:mouse_button_up, 1, 0, 1, 143, 358] +[:mouse_move, 708, 458, 2, 144, 365] +[:mouse_move, 704, 455, 2, 145, 366] +[:mouse_move, 702, 454, 2, 146, 367] +[:mouse_move, 696, 448, 2, 147, 368] +[:mouse_move, 693, 444, 2, 148, 369] +[:mouse_move, 686, 437, 2, 149, 370] +[:mouse_move, 683, 433, 2, 150, 371] +[:mouse_move, 673, 419, 2, 151, 372] +[:mouse_move, 666, 410, 2, 152, 373] +[:mouse_move, 660, 402, 2, 153, 374] +[:mouse_move, 654, 394, 2, 154, 375] +[:mouse_move, 651, 390, 2, 155, 376] +[:mouse_move, 646, 384, 2, 156, 377] +[:mouse_move, 644, 381, 2, 157, 378] +[:mouse_move, 643, 379, 2, 158, 379] +[:mouse_move, 640, 375, 2, 159, 380] +[:mouse_move, 639, 374, 2, 160, 381] +[:mouse_move, 638, 371, 2, 161, 382] +[:mouse_move, 637, 369, 2, 162, 383] +[:mouse_move, 637, 367, 2, 163, 385] +[:mouse_move, 636, 366, 2, 164, 386] +[:mouse_move, 636, 365, 2, 165, 387] +[:mouse_button_pressed, 1, 0, 1, 166, 389] +[:mouse_button_up, 1, 0, 1, 167, 395] +[:mouse_move, 638, 364, 2, 168, 409] +[:mouse_move, 648, 356, 2, 169, 410] +[:mouse_move, 655, 350, 2, 170, 411] +[:mouse_move, 664, 342, 2, 171, 412] +[:mouse_move, 673, 334, 2, 172, 413] +[:mouse_move, 685, 325, 2, 173, 414] +[:mouse_move, 692, 319, 2, 174, 415] +[:mouse_move, 699, 312, 2, 175, 416] +[:mouse_move, 708, 304, 2, 176, 417] +[:mouse_move, 712, 301, 2, 177, 418] +[:mouse_move, 713, 300, 2, 178, 419] +[:mouse_move, 716, 297, 2, 179, 420] +[:mouse_move, 718, 296, 2, 180, 421] +[:mouse_move, 720, 293, 2, 181, 422] +[:mouse_move, 721, 292, 2, 182, 423] +[:mouse_move, 722, 292, 2, 183, 426] +[:mouse_move, 722, 291, 2, 184, 427] +[:mouse_button_pressed, 1, 0, 1, 185, 443] +[:mouse_button_up, 1, 0, 1, 186, 450] +[:mouse_move, 719, 291, 2, 187, 488] +[:mouse_move, 716, 290, 2, 188, 489] +[:mouse_move, 707, 288, 2, 189, 490] +[:mouse_move, 696, 287, 2, 190, 491] +[:mouse_move, 689, 286, 2, 191, 492] +[:mouse_move, 677, 286, 2, 192, 493] +[:mouse_move, 672, 286, 2, 193, 494] +[:mouse_move, 664, 286, 2, 194, 495] +[:mouse_move, 660, 286, 2, 195, 496] +[:mouse_move, 654, 286, 2, 196, 497] +[:mouse_move, 650, 286, 2, 197, 499] +[:mouse_move, 648, 286, 2, 198, 501] +[:mouse_button_pressed, 1, 0, 1, 199, 503] +[:mouse_button_up, 1, 0, 1, 200, 509] +[:mouse_move, 648, 287, 2, 201, 514] +[:mouse_move, 648, 288, 2, 202, 515] +[:mouse_move, 648, 289, 2, 203, 518] +[:mouse_move, 648, 290, 2, 204, 521] +[:mouse_move, 652, 296, 2, 205, 522] +[:mouse_move, 657, 303, 2, 206, 523] +[:mouse_move, 667, 314, 2, 207, 524] +[:mouse_move, 676, 323, 2, 208, 526] +[:mouse_move, 688, 334, 2, 209, 527] +[:mouse_move, 694, 340, 2, 210, 528] +[:mouse_move, 697, 342, 2, 211, 529] +[:mouse_move, 700, 344, 2, 212, 530] +[:mouse_move, 703, 346, 2, 213, 531] +[:mouse_move, 705, 347, 2, 214, 532] +[:mouse_move, 707, 348, 2, 215, 533] +[:mouse_move, 708, 349, 2, 216, 534] +[:mouse_move, 708, 350, 2, 217, 535] +[:mouse_move, 709, 352, 2, 218, 536] +[:mouse_move, 710, 353, 2, 219, 537] +[:mouse_move, 711, 354, 2, 220, 538] +[:mouse_move, 712, 354, 2, 221, 539] +[:mouse_move, 712, 355, 2, 222, 540] +[:mouse_move, 713, 355, 2, 223, 543] +[:mouse_button_pressed, 1, 0, 1, 224, 543] +[:mouse_button_up, 1, 0, 1, 225, 550] +[:mouse_move, 713, 353, 2, 226, 572] +[:mouse_move, 715, 341, 2, 227, 574] +[:mouse_move, 716, 333, 2, 228, 575] +[:mouse_move, 718, 310, 2, 229, 576] +[:mouse_move, 719, 290, 2, 230, 577] +[:mouse_move, 717, 259, 2, 231, 578] +[:mouse_move, 711, 247, 2, 232, 580] +[:mouse_move, 701, 233, 2, 233, 581] +[:mouse_move, 696, 227, 2, 234, 582] +[:mouse_move, 689, 222, 2, 235, 583] +[:mouse_move, 668, 208, 2, 236, 584] +[:mouse_move, 656, 201, 2, 237, 585] +[:mouse_move, 650, 197, 2, 238, 586] +[:mouse_move, 638, 189, 2, 239, 587] +[:mouse_move, 627, 181, 2, 240, 588] +[:mouse_move, 623, 179, 2, 241, 589] +[:mouse_move, 605, 164, 2, 242, 590] +[:mouse_move, 600, 160, 2, 243, 591] +[:mouse_move, 592, 153, 2, 244, 592] +[:mouse_move, 583, 145, 2, 245, 593] +[:mouse_move, 580, 143, 2, 246, 594] +[:mouse_move, 576, 140, 2, 247, 595] +[:mouse_move, 572, 139, 2, 248, 597] +[:mouse_move, 571, 138, 2, 249, 598] +[:mouse_move, 586, 146, 2, 250, 603] +[:mouse_move, 600, 152, 2, 251, 604] +[:mouse_move, 636, 161, 2, 252, 605] +[:mouse_move, 665, 164, 2, 253, 607] +[:mouse_move, 672, 164, 2, 254, 608] +[:mouse_move, 704, 162, 2, 255, 609] +[:mouse_move, 715, 156, 2, 256, 611] +[:mouse_move, 723, 148, 2, 257, 612] +[:mouse_move, 725, 144, 2, 258, 613] +[:mouse_move, 729, 135, 2, 259, 614] +[:mouse_move, 730, 131, 2, 260, 615] +[:mouse_move, 730, 126, 2, 261, 616] +[:mouse_move, 730, 117, 2, 262, 617] +[:mouse_move, 721, 101, 2, 263, 618] +[:mouse_move, 713, 92, 2, 264, 619] +[:mouse_move, 705, 83, 2, 265, 620] +[:mouse_move, 691, 71, 2, 266, 621] +[:mouse_move, 682, 65, 2, 267, 622] +[:mouse_move, 666, 55, 2, 268, 623] +[:mouse_move, 657, 52, 2, 269, 624] +[:mouse_move, 635, 48, 2, 270, 625] +[:mouse_move, 621, 48, 2, 271, 626] +[:mouse_move, 613, 48, 2, 272, 627] +[:mouse_move, 589, 52, 2, 273, 628] +[:mouse_move, 570, 61, 2, 274, 630] +[:mouse_move, 544, 85, 2, 275, 632] +[:mouse_move, 540, 90, 2, 276, 633] +[:mouse_move, 532, 101, 2, 277, 634] +[:mouse_move, 525, 116, 2, 278, 636] +[:mouse_move, 523, 123, 2, 279, 637] +[:mouse_move, 523, 127, 2, 280, 638] +[:mouse_move, 526, 139, 2, 281, 639] +[:mouse_move, 531, 145, 2, 282, 640] +[:mouse_move, 550, 159, 2, 283, 641] +[:mouse_move, 563, 166, 2, 284, 642] +[:mouse_move, 587, 175, 2, 285, 643] +[:mouse_move, 655, 186, 2, 286, 644] +[:mouse_move, 674, 186, 2, 287, 645] +[:mouse_move, 718, 186, 2, 288, 646] +[:mouse_move, 745, 183, 2, 289, 647] +[:mouse_move, 757, 180, 2, 290, 648] +[:mouse_move, 760, 178, 2, 291, 649] +[:mouse_move, 773, 173, 2, 292, 650] +[:mouse_move, 778, 169, 2, 293, 651] +[:mouse_move, 781, 161, 2, 294, 652] +[:mouse_move, 782, 154, 2, 295, 653] +[:mouse_move, 780, 146, 2, 296, 654] +[:mouse_move, 765, 125, 2, 297, 655] +[:mouse_move, 730, 95, 2, 298, 657] +[:mouse_move, 713, 84, 2, 299, 658] +[:mouse_move, 678, 69, 2, 300, 659] +[:mouse_move, 658, 65, 2, 301, 661] +[:mouse_move, 636, 63, 2, 302, 662] +[:mouse_move, 609, 65, 2, 303, 663] +[:mouse_move, 601, 68, 2, 304, 664] +[:mouse_move, 594, 71, 2, 305, 665] +[:mouse_move, 587, 76, 2, 306, 666] +[:mouse_move, 573, 92, 2, 307, 667] +[:mouse_move, 561, 125, 2, 308, 668] +[:mouse_move, 557, 145, 2, 309, 669] +[:mouse_move, 555, 168, 2, 310, 670] +[:mouse_move, 557, 220, 2, 311, 671] +[:mouse_move, 566, 247, 2, 312, 672] +[:mouse_move, 595, 302, 2, 313, 673] +[:mouse_move, 603, 311, 2, 314, 674] +[:mouse_move, 620, 337, 2, 315, 675] +[:mouse_move, 629, 348, 2, 316, 676] +[:mouse_move, 633, 353, 2, 317, 677] +[:mouse_move, 635, 356, 2, 318, 678] +[:mouse_move, 637, 358, 2, 319, 679] +[:mouse_move, 638, 359, 2, 320, 681] +[:mouse_button_pressed, 1, 0, 1, 321, 685] +[:mouse_button_up, 1, 0, 1, 322, 691] +[:mouse_move, 631, 359, 2, 323, 707] +[:mouse_move, 626, 358, 2, 324, 708] +[:mouse_move, 622, 357, 2, 325, 709] +[:mouse_move, 618, 354, 2, 326, 710] +[:mouse_move, 612, 347, 2, 327, 711] +[:mouse_move, 608, 342, 2, 328, 712] +[:mouse_move, 598, 325, 2, 329, 713] +[:mouse_move, 593, 313, 2, 330, 714] +[:mouse_move, 588, 303, 2, 331, 715] +[:mouse_move, 586, 296, 2, 332, 716] +[:mouse_move, 580, 284, 2, 333, 717] +[:mouse_move, 577, 279, 2, 334, 719] +[:mouse_move, 576, 278, 2, 335, 720] +[:mouse_move, 574, 277, 2, 336, 721] +[:mouse_move, 572, 276, 2, 337, 722] +[:mouse_move, 569, 276, 2, 338, 723] +[:mouse_move, 567, 275, 2, 339, 724] +[:mouse_move, 566, 275, 2, 340, 725] +[:mouse_move, 565, 275, 2, 341, 726] +[:mouse_move, 564, 275, 2, 342, 729] +[:mouse_button_pressed, 1, 0, 1, 343, 736] +[:mouse_button_up, 1, 0, 1, 344, 743] +[:mouse_move, 572, 275, 2, 345, 761] +[:mouse_move, 577, 275, 2, 346, 762] +[:mouse_move, 591, 275, 2, 347, 763] +[:mouse_move, 596, 275, 2, 348, 764] +[:mouse_move, 603, 274, 2, 349, 765] +[:mouse_move, 606, 274, 2, 350, 766] +[:mouse_move, 619, 273, 2, 351, 767] +[:mouse_move, 620, 273, 2, 352, 768] +[:mouse_move, 623, 273, 2, 353, 769] +[:mouse_move, 625, 273, 2, 354, 771] +[:mouse_move, 626, 273, 2, 355, 774] +[:mouse_button_pressed, 1, 0, 1, 356, 781] +[:mouse_button_up, 1, 0, 1, 357, 788] +[:mouse_move, 629, 273, 2, 358, 795] +[:mouse_move, 637, 273, 2, 359, 796] +[:mouse_move, 646, 273, 2, 360, 797] +[:mouse_move, 654, 273, 2, 361, 798] +[:mouse_move, 664, 273, 2, 362, 799] +[:mouse_move, 677, 273, 2, 363, 800] +[:mouse_move, 687, 273, 2, 364, 801] +[:mouse_move, 692, 273, 2, 365, 802] +[:mouse_move, 697, 273, 2, 366, 803] +[:mouse_move, 702, 273, 2, 367, 804] +[:mouse_move, 704, 273, 2, 368, 805] +[:mouse_move, 705, 273, 2, 369, 806] +[:mouse_move, 707, 273, 2, 370, 807] +[:mouse_move, 708, 273, 2, 371, 808] +[:mouse_move, 711, 274, 2, 372, 809] +[:mouse_move, 713, 274, 2, 373, 810] +[:mouse_move, 715, 274, 2, 374, 811] +[:mouse_move, 716, 274, 2, 375, 812] +[:mouse_move, 717, 274, 2, 376, 814] +[:mouse_move, 718, 274, 2, 377, 815] +[:mouse_button_pressed, 1, 0, 1, 378, 817] +[:mouse_button_up, 1, 0, 1, 379, 825] +[:mouse_move, 717, 274, 2, 380, 829] +[:mouse_move, 711, 276, 2, 381, 830] +[:mouse_move, 708, 277, 2, 382, 831] +[:mouse_move, 701, 280, 2, 383, 832] +[:mouse_move, 697, 283, 2, 384, 833] +[:mouse_move, 693, 284, 2, 385, 834] +[:mouse_move, 679, 291, 2, 386, 835] +[:mouse_move, 672, 296, 2, 387, 836] +[:mouse_move, 668, 299, 2, 388, 837] +[:mouse_move, 662, 305, 2, 389, 838] +[:mouse_move, 658, 308, 2, 390, 839] +[:mouse_move, 653, 314, 2, 391, 840] +[:mouse_move, 649, 321, 2, 392, 842] +[:mouse_move, 648, 323, 2, 393, 843] +[:mouse_move, 647, 325, 2, 394, 844] +[:mouse_move, 645, 329, 2, 395, 845] +[:mouse_move, 644, 331, 2, 396, 846] +[:mouse_move, 642, 336, 2, 397, 847] +[:mouse_move, 641, 337, 2, 398, 848] +[:mouse_move, 639, 341, 2, 399, 849] +[:mouse_move, 638, 343, 2, 400, 850] +[:mouse_move, 637, 344, 2, 401, 851] +[:mouse_move, 636, 345, 2, 402, 852] +[:mouse_move, 635, 346, 2, 403, 853] +[:mouse_move, 635, 347, 2, 404, 854] +[:mouse_move, 634, 348, 2, 405, 855] +[:mouse_move, 634, 349, 2, 406, 857] +[:mouse_button_pressed, 1, 0, 1, 407, 858] +[:mouse_button_up, 1, 0, 1, 408, 866] +[:mouse_move, 634, 350, 2, 409, 887] +[:mouse_move, 634, 351, 2, 410, 889] +[:mouse_move, 633, 352, 2, 411, 891] +[:mouse_move, 632, 352, 2, 412, 893] +[:mouse_move, 628, 352, 2, 413, 894] +[:mouse_move, 625, 353, 2, 414, 895] +[:mouse_move, 617, 354, 2, 415, 896] +[:mouse_move, 613, 356, 2, 416, 897] +[:mouse_move, 605, 359, 2, 417, 898] +[:mouse_move, 603, 360, 2, 418, 899] +[:mouse_move, 600, 362, 2, 419, 900] +[:mouse_move, 596, 364, 2, 420, 901] +[:mouse_move, 592, 366, 2, 421, 902] +[:mouse_move, 590, 367, 2, 422, 904] +[:mouse_move, 588, 367, 2, 423, 905] +[:mouse_move, 581, 367, 2, 424, 906] +[:mouse_move, 579, 366, 2, 425, 907] +[:mouse_move, 577, 366, 2, 426, 908] +[:mouse_move, 575, 365, 2, 427, 909] +[:mouse_move, 571, 364, 2, 428, 910] +[:mouse_move, 570, 363, 2, 429, 911] +[:mouse_move, 568, 362, 2, 430, 912] +[:mouse_button_pressed, 1, 0, 1, 431, 913] +[:mouse_button_up, 1, 0, 1, 432, 921] +[:mouse_move, 568, 366, 2, 433, 927] +[:mouse_move, 568, 369, 2, 434, 928] +[:mouse_move, 568, 373, 2, 435, 929] +[:mouse_move, 568, 376, 2, 436, 930] +[:mouse_move, 569, 384, 2, 437, 931] +[:mouse_move, 571, 388, 2, 438, 932] +[:mouse_move, 580, 401, 2, 439, 933] +[:mouse_move, 592, 413, 2, 440, 934] +[:mouse_move, 596, 416, 2, 441, 935] +[:mouse_move, 607, 426, 2, 442, 936] +[:mouse_move, 612, 431, 2, 443, 937] +[:mouse_move, 618, 435, 2, 444, 938] +[:mouse_move, 620, 437, 2, 445, 939] +[:mouse_move, 625, 441, 2, 446, 940] +[:mouse_move, 627, 442, 2, 447, 941] +[:mouse_move, 630, 444, 2, 448, 942] +[:mouse_move, 631, 444, 2, 449, 943] +[:mouse_move, 634, 445, 2, 450, 944] +[:mouse_move, 635, 446, 2, 451, 945] +[:mouse_move, 636, 446, 2, 452, 946] +[:mouse_move, 638, 447, 2, 453, 947] +[:mouse_move, 639, 447, 2, 454, 949] +[:mouse_button_pressed, 1, 0, 1, 455, 953] +[:mouse_button_up, 1, 0, 1, 456, 961] +[:mouse_move, 639, 446, 2, 457, 977] +[:mouse_move, 640, 443, 2, 458, 978] +[:mouse_move, 641, 438, 2, 459, 979] +[:mouse_move, 641, 430, 2, 460, 980] +[:mouse_move, 644, 395, 2, 461, 981] +[:mouse_move, 645, 373, 2, 462, 982] +[:mouse_move, 645, 315, 2, 463, 983] +[:mouse_move, 644, 275, 2, 464, 984] +[:mouse_move, 642, 266, 2, 465, 985] +[:mouse_move, 636, 236, 2, 466, 986] +[:mouse_move, 633, 226, 2, 467, 987] +[:mouse_move, 630, 217, 2, 468, 988] +[:mouse_move, 618, 200, 2, 469, 989] +[:mouse_move, 610, 192, 2, 470, 990] +[:mouse_move, 604, 188, 2, 471, 991] +[:mouse_move, 594, 181, 2, 472, 992] +[:mouse_move, 591, 180, 2, 473, 993] +[:mouse_move, 584, 176, 2, 474, 994] +[:mouse_move, 579, 174, 2, 475, 995] +[:mouse_move, 576, 173, 2, 476, 996] +[:mouse_move, 571, 172, 2, 477, 997] +[:mouse_move, 569, 172, 2, 478, 998] +[:mouse_move, 565, 171, 2, 479, 999] +[:mouse_move, 564, 170, 2, 480, 1000] +[:mouse_move, 562, 170, 2, 481, 1001] +[:mouse_move, 565, 172, 2, 482, 1005] +[:mouse_move, 570, 175, 2, 483, 1006] +[:mouse_move, 599, 185, 2, 484, 1007] +[:mouse_move, 616, 189, 2, 485, 1008] +[:mouse_move, 647, 192, 2, 486, 1009] +[:mouse_move, 665, 193, 2, 487, 1010] +[:mouse_move, 685, 193, 2, 488, 1011] +[:mouse_move, 719, 186, 2, 489, 1012] +[:mouse_move, 735, 177, 2, 490, 1013] +[:mouse_move, 751, 167, 2, 491, 1014] +[:mouse_move, 755, 161, 2, 492, 1015] +[:mouse_move, 758, 156, 2, 493, 1016] +[:mouse_move, 761, 145, 2, 494, 1017] +[:mouse_move, 762, 139, 2, 495, 1018] +[:mouse_move, 762, 133, 2, 496, 1019] +[:mouse_move, 757, 123, 2, 497, 1020] +[:mouse_move, 753, 117, 2, 498, 1021] +[:mouse_move, 739, 101, 2, 499, 1022] +[:mouse_move, 722, 88, 2, 500, 1023] +[:mouse_move, 711, 81, 2, 501, 1024] +[:mouse_move, 685, 65, 2, 502, 1025] +[:mouse_move, 671, 57, 2, 503, 1026] +[:mouse_move, 656, 49, 2, 504, 1027] +[:mouse_move, 637, 40, 2, 505, 1028] +[:mouse_move, 627, 36, 2, 506, 1029] +[:mouse_move, 617, 33, 2, 507, 1030] +[:mouse_move, 602, 31, 2, 508, 1031] +[:mouse_move, 589, 31, 2, 509, 1032] +[:mouse_move, 582, 31, 2, 510, 1033] +[:mouse_move, 570, 36, 2, 511, 1034] +[:mouse_move, 554, 47, 2, 512, 1035] +[:mouse_move, 547, 53, 2, 513, 1036] +[:mouse_move, 540, 59, 2, 514, 1037] +[:mouse_move, 533, 66, 2, 515, 1038] +[:mouse_move, 517, 84, 2, 516, 1039] +[:mouse_move, 516, 87, 2, 517, 1040] +[:mouse_move, 511, 95, 2, 518, 1041] +[:mouse_move, 506, 107, 2, 519, 1042] +[:mouse_move, 506, 114, 2, 520, 1043] +[:mouse_move, 506, 122, 2, 521, 1044] +[:mouse_move, 515, 139, 2, 522, 1045] +[:mouse_move, 521, 148, 2, 523, 1046] +[:mouse_move, 550, 169, 2, 524, 1047] +[:mouse_move, 576, 178, 2, 525, 1048] +[:mouse_move, 593, 182, 2, 526, 1049] +[:mouse_move, 613, 184, 2, 527, 1050] +[:mouse_move, 650, 184, 2, 528, 1051] +[:mouse_move, 683, 180, 2, 529, 1052] +[:mouse_move, 696, 176, 2, 530, 1053] +[:mouse_move, 709, 171, 2, 531, 1054] +[:mouse_move, 723, 162, 2, 532, 1055] +[:mouse_move, 731, 156, 2, 533, 1056] +[:mouse_move, 744, 142, 2, 534, 1057] +[:mouse_move, 748, 136, 2, 535, 1058] +[:mouse_move, 752, 123, 2, 536, 1059] +[:mouse_move, 753, 117, 2, 537, 1060] +[:mouse_move, 754, 112, 2, 538, 1061] +[:mouse_move, 754, 102, 2, 539, 1062] +[:mouse_move, 750, 93, 2, 540, 1063] +[:mouse_move, 745, 85, 2, 541, 1064] +[:mouse_move, 733, 76, 2, 542, 1065] +[:mouse_move, 728, 73, 2, 543, 1066] +[:mouse_move, 721, 69, 2, 544, 1067] +[:mouse_move, 700, 59, 2, 545, 1068] +[:mouse_move, 678, 51, 2, 546, 1069] +[:mouse_move, 666, 48, 2, 547, 1070] +[:mouse_move, 639, 44, 2, 548, 1071] +[:mouse_move, 627, 42, 2, 549, 1072] +[:mouse_move, 620, 42, 2, 550, 1073] +[:mouse_move, 600, 42, 2, 551, 1074] +[:mouse_move, 590, 44, 2, 552, 1075] +[:mouse_move, 568, 52, 2, 553, 1076] +[:mouse_move, 557, 58, 2, 554, 1077] +[:mouse_move, 550, 62, 2, 555, 1078] +[:mouse_move, 545, 66, 2, 556, 1079] +[:mouse_move, 535, 75, 2, 557, 1080] +[:mouse_move, 526, 87, 2, 558, 1081] +[:mouse_move, 522, 95, 2, 559, 1082] +[:mouse_move, 517, 108, 2, 560, 1083] +[:mouse_move, 515, 116, 2, 561, 1084] +[:mouse_move, 512, 127, 2, 562, 1085] +[:mouse_move, 510, 138, 2, 563, 1086] +[:mouse_move, 510, 143, 2, 564, 1087] +[:mouse_move, 517, 163, 2, 565, 1088] +[:mouse_move, 542, 181, 2, 566, 1089] +[:mouse_move, 552, 185, 2, 567, 1090] +[:mouse_move, 605, 204, 2, 568, 1091] +[:mouse_move, 668, 208, 2, 569, 1093] +[:mouse_move, 677, 208, 2, 570, 1094] +[:mouse_move, 694, 207, 2, 571, 1095] +[:mouse_move, 710, 207, 2, 572, 1096] +[:mouse_move, 714, 207, 2, 573, 1097] +[:mouse_move, 720, 214, 2, 574, 1098] +[:mouse_move, 720, 223, 2, 575, 1099] +[:mouse_move, 720, 240, 2, 576, 1100] +[:mouse_move, 712, 280, 2, 577, 1101] +[:mouse_move, 707, 293, 2, 578, 1102] +[:mouse_move, 696, 319, 2, 579, 1103] +[:mouse_move, 684, 341, 2, 580, 1104] +[:mouse_move, 682, 343, 2, 581, 1105] +[:mouse_move, 677, 350, 2, 582, 1106] +[:mouse_move, 672, 356, 2, 583, 1107] +[:mouse_move, 670, 359, 2, 584, 1108] +[:mouse_move, 669, 359, 2, 585, 1109] +[:mouse_move, 668, 360, 2, 586, 1110] +[:mouse_move, 668, 361, 2, 587, 1112] +[:mouse_button_pressed, 1, 0, 1, 588, 1113] +[:mouse_button_up, 1, 0, 1, 589, 1124] +[:mouse_move, 667, 361, 2, 590, 1141] +[:mouse_move, 661, 356, 2, 591, 1142] +[:mouse_move, 648, 343, 2, 592, 1143] +[:mouse_move, 639, 335, 2, 593, 1144] +[:mouse_move, 625, 324, 2, 594, 1145] +[:mouse_move, 603, 311, 2, 595, 1147] +[:mouse_move, 597, 308, 2, 596, 1148] +[:mouse_move, 585, 302, 2, 597, 1149] +[:mouse_move, 580, 299, 2, 598, 1150] +[:mouse_move, 575, 297, 2, 599, 1151] +[:mouse_move, 574, 296, 2, 600, 1152] +[:mouse_move, 569, 293, 2, 601, 1153] +[:mouse_move, 568, 292, 2, 602, 1154] +[:mouse_move, 567, 291, 2, 603, 1155] +[:mouse_move, 566, 291, 2, 604, 1156] +[:mouse_button_pressed, 1, 0, 1, 605, 1168] +[:mouse_button_up, 1, 0, 1, 606, 1175] +[:mouse_move, 567, 291, 2, 607, 1188] +[:mouse_move, 575, 302, 2, 608, 1189] +[:mouse_move, 580, 307, 2, 609, 1190] +[:mouse_move, 586, 314, 2, 610, 1191] +[:mouse_move, 601, 329, 2, 611, 1192] +[:mouse_move, 609, 337, 2, 612, 1193] +[:mouse_move, 623, 349, 2, 613, 1194] +[:mouse_move, 625, 351, 2, 614, 1195] +[:mouse_move, 633, 358, 2, 615, 1196] +[:mouse_move, 637, 361, 2, 616, 1197] +[:mouse_move, 638, 362, 2, 617, 1198] +[:mouse_move, 639, 363, 2, 618, 1199] +[:mouse_move, 640, 363, 2, 619, 1200] +[:mouse_move, 640, 364, 2, 620, 1201] +[:mouse_move, 640, 365, 2, 621, 1213] +[:mouse_move, 641, 365, 2, 622, 1218] +[:mouse_button_pressed, 1, 0, 1, 623, 1238] +[:mouse_button_up, 1, 0, 1, 624, 1245] +[:mouse_move, 644, 369, 2, 625, 1258] +[:mouse_move, 652, 380, 2, 626, 1259] +[:mouse_move, 656, 384, 2, 627, 1260] +[:mouse_move, 663, 394, 2, 628, 1261] +[:mouse_move, 669, 402, 2, 629, 1262] +[:mouse_move, 682, 415, 2, 630, 1263] +[:mouse_move, 688, 421, 2, 631, 1264] +[:mouse_move, 692, 424, 2, 632, 1265] +[:mouse_move, 694, 427, 2, 633, 1266] +[:mouse_move, 698, 430, 2, 634, 1267] +[:mouse_move, 699, 431, 2, 635, 1268] +[:mouse_move, 700, 432, 2, 636, 1269] +[:mouse_move, 701, 433, 2, 637, 1270] +[:mouse_move, 702, 434, 2, 638, 1271] +[:mouse_move, 703, 435, 2, 639, 1274] +[:mouse_button_pressed, 1, 0, 1, 640, 1279] +[:mouse_button_up, 1, 0, 1, 641, 1285] +[:mouse_move, 701, 435, 2, 642, 1297] +[:mouse_move, 695, 435, 2, 643, 1298] +[:mouse_move, 685, 435, 2, 644, 1299] +[:mouse_move, 680, 435, 2, 645, 1300] +[:mouse_move, 669, 437, 2, 646, 1301] +[:mouse_move, 663, 439, 2, 647, 1302] +[:mouse_move, 661, 439, 2, 648, 1303] +[:mouse_move, 657, 440, 2, 649, 1304] +[:mouse_move, 651, 441, 2, 650, 1305] +[:mouse_move, 646, 442, 2, 651, 1306] +[:mouse_move, 645, 442, 2, 652, 1307] +[:mouse_move, 643, 443, 2, 653, 1308] +[:mouse_move, 642, 443, 2, 654, 1309] +[:mouse_move, 641, 443, 2, 655, 1311] +[:mouse_button_pressed, 1, 0, 1, 656, 1314] +[:mouse_button_up, 1, 0, 1, 657, 1322] +[:mouse_move, 641, 441, 2, 658, 1324] +[:mouse_move, 641, 433, 2, 659, 1325] +[:mouse_move, 641, 425, 2, 660, 1326] +[:mouse_move, 641, 408, 2, 661, 1327] +[:mouse_move, 641, 398, 2, 662, 1328] +[:mouse_move, 641, 373, 2, 663, 1329] +[:mouse_move, 641, 358, 2, 664, 1330] +[:mouse_move, 641, 337, 2, 665, 1331] +[:mouse_move, 641, 323, 2, 666, 1332] +[:mouse_move, 641, 312, 2, 667, 1333] +[:mouse_move, 641, 305, 2, 668, 1334] +[:mouse_move, 641, 301, 2, 669, 1335] +[:mouse_move, 641, 294, 2, 670, 1336] +[:mouse_move, 641, 292, 2, 671, 1337] +[:mouse_move, 641, 290, 2, 672, 1338] +[:mouse_move, 641, 289, 2, 673, 1339] +[:mouse_move, 641, 288, 2, 674, 1341] +[:mouse_move, 641, 287, 2, 675, 1344] +[:mouse_move, 640, 286, 2, 676, 1345] +[:mouse_move, 640, 285, 2, 677, 1346] +[:mouse_move, 640, 284, 2, 678, 1348] +[:mouse_button_pressed, 1, 0, 1, 679, 1349] +[:mouse_button_up, 1, 0, 1, 680, 1356] +[:mouse_move, 642, 284, 2, 681, 1360] +[:mouse_move, 651, 284, 2, 682, 1361] +[:mouse_move, 660, 284, 2, 683, 1362] +[:mouse_move, 671, 284, 2, 684, 1363] +[:mouse_move, 684, 284, 2, 685, 1364] +[:mouse_move, 702, 284, 2, 686, 1365] +[:mouse_move, 714, 284, 2, 687, 1366] +[:mouse_move, 718, 284, 2, 688, 1367] +[:mouse_move, 722, 284, 2, 689, 1368] +[:mouse_move, 726, 284, 2, 690, 1369] +[:mouse_move, 727, 284, 2, 691, 1371] +[:mouse_button_pressed, 1, 0, 1, 692, 1378] +[:mouse_button_up, 1, 0, 1, 693, 1385] +[:mouse_move, 725, 288, 2, 694, 1389] +[:mouse_move, 717, 298, 2, 695, 1390] +[:mouse_move, 710, 306, 2, 696, 1391] +[:mouse_move, 696, 322, 2, 697, 1392] +[:mouse_move, 689, 332, 2, 698, 1393] +[:mouse_move, 674, 353, 2, 699, 1394] +[:mouse_move, 660, 373, 2, 700, 1395] +[:mouse_move, 652, 384, 2, 701, 1396] +[:mouse_move, 650, 387, 2, 702, 1397] +[:mouse_move, 640, 400, 2, 703, 1398] +[:mouse_move, 639, 402, 2, 704, 1399] +[:mouse_move, 634, 409, 2, 705, 1400] +[:mouse_move, 632, 411, 2, 706, 1401] +[:mouse_move, 630, 414, 2, 707, 1402] +[:mouse_move, 629, 415, 2, 708, 1403] +[:mouse_move, 628, 416, 2, 709, 1404] +[:mouse_move, 626, 417, 2, 710, 1405] +[:mouse_move, 626, 418, 2, 711, 1406] +[:mouse_move, 623, 420, 2, 712, 1408] +[:mouse_move, 619, 423, 2, 713, 1409] +[:mouse_move, 618, 424, 2, 714, 1410] +[:mouse_move, 615, 427, 2, 715, 1411] +[:mouse_move, 610, 430, 2, 716, 1412] +[:mouse_move, 604, 433, 2, 717, 1413] +[:mouse_move, 603, 433, 2, 718, 1414] +[:mouse_move, 598, 435, 2, 719, 1415] +[:mouse_move, 595, 437, 2, 720, 1417] +[:mouse_move, 594, 437, 2, 721, 1418] +[:mouse_move, 591, 438, 2, 722, 1419] +[:mouse_move, 590, 439, 2, 723, 1420] +[:mouse_move, 587, 440, 2, 724, 1421] +[:mouse_move, 586, 440, 2, 725, 1422] +[:mouse_move, 585, 440, 2, 726, 1423] +[:mouse_move, 585, 441, 2, 727, 1424] +[:mouse_move, 584, 441, 2, 728, 1425] +[:mouse_button_pressed, 1, 0, 1, 729, 1427] +[:mouse_button_up, 1, 0, 1, 730, 1437] +[:mouse_move, 584, 439, 2, 731, 1446] +[:mouse_move, 584, 438, 2, 732, 1447] +[:mouse_move, 584, 430, 2, 733, 1448] +[:mouse_move, 583, 421, 2, 734, 1449] +[:mouse_move, 582, 416, 2, 735, 1450] +[:mouse_move, 579, 405, 2, 736, 1451] +[:mouse_move, 577, 398, 2, 737, 1452] +[:mouse_move, 570, 381, 2, 738, 1453] +[:mouse_move, 567, 374, 2, 739, 1454] +[:mouse_move, 563, 365, 2, 740, 1455] +[:mouse_move, 560, 357, 2, 741, 1456] +[:mouse_move, 558, 352, 2, 742, 1457] +[:mouse_move, 556, 345, 2, 743, 1458] +[:mouse_move, 555, 343, 2, 744, 1459] +[:mouse_move, 554, 341, 2, 745, 1460] +[:mouse_move, 554, 340, 2, 746, 1461] +[:mouse_move, 553, 340, 2, 747, 1468] +[:mouse_button_pressed, 1, 0, 1, 748, 1476] +[:mouse_button_up, 1, 0, 1, 749, 1484] +[:mouse_move, 554, 340, 2, 750, 1489] +[:mouse_move, 557, 340, 2, 751, 1490] +[:mouse_move, 576, 343, 2, 752, 1491] +[:mouse_move, 582, 344, 2, 753, 1492] +[:mouse_move, 608, 350, 2, 754, 1493] +[:mouse_move, 622, 352, 2, 755, 1494] +[:mouse_move, 639, 353, 2, 756, 1495] +[:mouse_move, 660, 355, 2, 757, 1496] +[:mouse_move, 668, 355, 2, 758, 1497] +[:mouse_move, 684, 355, 2, 759, 1498] +[:mouse_move, 696, 355, 2, 760, 1500] +[:mouse_move, 697, 355, 2, 761, 1501] +[:mouse_move, 705, 355, 2, 762, 1502] +[:mouse_move, 708, 355, 2, 763, 1503] +[:mouse_move, 714, 355, 2, 764, 1504] +[:mouse_move, 716, 355, 2, 765, 1505] +[:mouse_move, 720, 355, 2, 766, 1506] +[:mouse_move, 722, 355, 2, 767, 1507] +[:mouse_move, 724, 355, 2, 768, 1508] +[:mouse_move, 725, 355, 2, 769, 1509] +[:mouse_move, 726, 354, 2, 770, 1510] +[:mouse_button_pressed, 1, 0, 1, 771, 1513] +[:mouse_button_up, 1, 0, 1, 772, 1520] +[:mouse_move, 726, 350, 2, 773, 1539] +[:mouse_move, 726, 344, 2, 774, 1540] +[:mouse_move, 724, 328, 2, 775, 1541] +[:mouse_move, 721, 319, 2, 776, 1542] +[:mouse_move, 707, 271, 2, 777, 1543] +[:mouse_move, 698, 248, 2, 778, 1544] +[:mouse_move, 679, 209, 2, 779, 1545] +[:mouse_move, 674, 201, 2, 780, 1546] +[:mouse_move, 656, 171, 2, 781, 1547] +[:mouse_move, 647, 161, 2, 782, 1548] +[:mouse_move, 640, 153, 2, 783, 1549] +[:mouse_move, 618, 136, 2, 784, 1550] +[:mouse_move, 613, 132, 2, 785, 1551] +[:mouse_move, 609, 130, 2, 786, 1552] +[:mouse_move, 607, 130, 2, 787, 1553] +[:mouse_move, 596, 126, 2, 788, 1554] +[:mouse_move, 593, 125, 2, 789, 1555] +[:mouse_move, 585, 124, 2, 790, 1556] +[:mouse_move, 581, 124, 2, 791, 1557] +[:mouse_move, 575, 124, 2, 792, 1558] +[:mouse_move, 571, 124, 2, 793, 1559] +[:mouse_move, 565, 124, 2, 794, 1560] +[:mouse_move, 560, 124, 2, 795, 1561] +[:mouse_move, 558, 124, 2, 796, 1562] +[:mouse_move, 556, 124, 2, 797, 1563] +[:mouse_move, 555, 124, 2, 798, 1564] +[:mouse_move, 555, 126, 2, 799, 1565] +[:mouse_move, 555, 128, 2, 800, 1566] +[:mouse_move, 555, 130, 2, 801, 1567] +[:mouse_move, 561, 137, 2, 802, 1568] +[:mouse_move, 567, 141, 2, 803, 1569] +[:mouse_move, 586, 148, 2, 804, 1570] +[:mouse_move, 599, 152, 2, 805, 1571] +[:mouse_move, 630, 155, 2, 806, 1572] +[:mouse_move, 661, 156, 2, 807, 1573] +[:mouse_move, 670, 156, 2, 808, 1574] +[:mouse_move, 728, 151, 2, 809, 1575] +[:mouse_move, 743, 147, 2, 810, 1576] +[:mouse_move, 762, 140, 2, 811, 1577] +[:mouse_move, 773, 135, 2, 812, 1578] +[:mouse_move, 781, 130, 2, 813, 1579] +[:mouse_move, 795, 120, 2, 814, 1580] +[:mouse_move, 800, 115, 2, 815, 1581] +[:mouse_move, 804, 109, 2, 816, 1582] +[:mouse_move, 810, 97, 2, 817, 1583] +[:mouse_move, 812, 91, 2, 818, 1584] +[:mouse_move, 812, 74, 2, 819, 1585] +[:mouse_move, 811, 72, 2, 820, 1586] +[:mouse_move, 802, 60, 2, 821, 1587] +[:mouse_move, 793, 52, 2, 822, 1588] +[:mouse_move, 775, 44, 2, 823, 1589] +[:mouse_move, 763, 40, 2, 824, 1590] +[:mouse_move, 737, 33, 2, 825, 1591] +[:mouse_move, 708, 28, 2, 826, 1592] +[:mouse_move, 694, 27, 2, 827, 1593] +[:mouse_move, 679, 26, 2, 828, 1594] +[:mouse_move, 651, 26, 2, 829, 1595] +[:mouse_move, 646, 26, 2, 830, 1596] +[:mouse_move, 616, 31, 2, 831, 1597] +[:mouse_move, 611, 33, 2, 832, 1598] +[:mouse_move, 585, 43, 2, 833, 1599] +[:mouse_move, 581, 46, 2, 834, 1600] +[:mouse_move, 565, 56, 2, 835, 1601] +[:mouse_move, 558, 60, 2, 836, 1602] +[:mouse_move, 542, 76, 2, 837, 1603] +[:mouse_move, 536, 84, 2, 838, 1604] +[:mouse_move, 527, 104, 2, 839, 1605] +[:mouse_move, 522, 115, 2, 840, 1606] +[:mouse_move, 520, 129, 2, 841, 1607] +[:mouse_move, 519, 137, 2, 842, 1608] +[:mouse_move, 519, 145, 2, 843, 1609] +[:mouse_move, 526, 162, 2, 844, 1610] +[:mouse_move, 545, 172, 2, 845, 1611] +[:mouse_move, 564, 180, 2, 846, 1612] +[:mouse_move, 574, 181, 2, 847, 1613] +[:mouse_move, 629, 191, 2, 848, 1614] +[:mouse_move, 658, 192, 2, 849, 1615] +[:mouse_move, 716, 193, 2, 850, 1616] +[:mouse_move, 729, 193, 2, 851, 1617] +[:mouse_move, 773, 183, 2, 852, 1618] +[:mouse_move, 779, 179, 2, 853, 1619] +[:mouse_move, 800, 168, 2, 854, 1620] +[:mouse_move, 806, 163, 2, 855, 1621] +[:mouse_move, 812, 154, 2, 856, 1622] +[:mouse_move, 813, 149, 2, 857, 1623] +[:mouse_move, 814, 140, 2, 858, 1624] +[:mouse_move, 815, 134, 2, 859, 1625] +[:mouse_move, 815, 123, 2, 860, 1626] +[:mouse_move, 815, 121, 2, 861, 1627] +[:mouse_move, 815, 115, 2, 862, 1628] +[:mouse_move, 815, 113, 2, 863, 1629] +[:mouse_move, 816, 111, 2, 864, 1630] +[:key_down_raw, 1073742051, 1024, 2, 865, 1698] +[:key_down_raw, 113, 1024, 2, 866, 1698] diff --git a/samples/05_mouse/05_mouse_move/app/main.rb b/samples/05_mouse/05_mouse_move/app/main.rb new file mode 100644 index 0000000..97edbe7 --- /dev/null +++ b/samples/05_mouse/05_mouse_move/app/main.rb @@ -0,0 +1,296 @@ +=begin + + Reminders: + + - num1.greater(num2): Returns the greater value. + For example, if we have the command + puts 4.greater(3) + the number 4 would be printed to the console since it has a greater value than 3. + Similar to lesser, which returns the lesser value. + + - find_all: Finds all elements of a collection that meet certain requirements. + For example, in this sample app, we're using find_all to find all zombies that have intersected + or hit the player's sprite since these zombies have been killed. + + - args.inputs.keyboard.key_down.KEY: Determines if a key is being held or pressed. + Stores the frame the "down" event occurred. + For more information about the keyboard, go to mygame/documentation/06-keyboard.md. + + - args.outputs.sprites: An array. The values generate a sprite. + The parameters are [X, Y, WIDTH, HEIGHT, PATH, ANGLE, ALPHA, RED, GREEN, BLUE] + For more information about sprites, go to mygame/documentation/05-sprites.md. + + - args.state.new_entity: Used when we want to create a new object, like a sprite or button. + When we want to create a new object, we can declare it as a new entity and then define + its properties. (Remember, you can use state to define ANY property and it will + be retained across frames.) + + - String interpolation: Uses #{} syntax; everything between the #{ and the } is evaluated + as Ruby code, and the placeholder is replaced with its corresponding value or result. + + - map: Ruby method used to transform data; used in arrays, hashes, and collections. + Can be used to perform an action on every element of a collection, such as multiplying + each element by 2 or declaring every element as a new entity. + + - sample: Chooses a random element from the array. + + - reject: Removes elements that meet certain requirements. + In this sample app, we're removing/rejecting zombies that reach the center of the screen. We're also + rejecting zombies that were killed more than 30 frames ago. + +=end + +# This sample app allows users to move around the screen in order to kill zombies. Zombies appear from every direction so the goal +# is to kill the zombies as fast as possible! + +class ProtectThePuppiesFromTheZombies + attr_accessor :grid, :inputs, :state, :outputs + + # Calls the methods necessary for the game to run properly. + def tick + defaults + render + calc + input + end + + # Sets default values for the zombies and for the player. + # Initialization happens only in the first frame. + def defaults + state.flash_at ||= 0 + state.zombie_min_spawn_rate ||= 60 + state.zombie_spawn_countdown ||= random_spawn_countdown state.zombie_min_spawn_rate + state.zombies ||= [] + state.killed_zombies ||= [] + + # Declares player as a new entity and sets its properties. + # The player begins the game in the center of the screen, not moving in any direction. + state.player ||= state.new_entity(:player, { x: 640, + y: 360, + attack_angle: 0, + dx: 0, + dy: 0 }) + end + + # Outputs a gray background. + # Calls the methods needed to output the player, zombies, etc onto the screen. + def render + outputs.solids << [grid.rect, 100, 100, 100] + render_zombies + render_killed_zombies + render_player + render_flash + end + + # Outputs the zombies on the screen and sets values for the sprites, such as the position, width, height, and animation. + def render_zombies + outputs.sprites << state.zombies.map do |z| # performs action on all zombies in the collection + z.sprite = [z.x, z.y, 4 * 3, 8 * 3, animation_sprite(z)].sprite # sets definition for sprite, calls animation_sprite method + z.sprite + end + end + + # Outputs sprites of killed zombies, and displays a slash image to show that a zombie has been killed. + def render_killed_zombies + outputs.sprites << state.killed_zombies.map do |z| # performs action on all killed zombies in collection + z.sprite = [z.x, + z.y, + 4 * 3, + 8 * 3, + animation_sprite(z, z.death_at), # calls animation_sprite method + 0, # angle + 255 * z.death_at.ease(30, :flip)].sprite # transparency of a zombie changes when they die + # change the value of 30 and see what happens when a zombie is killed + + # Sets values to output the slash over the zombie's sprite when a zombie is killed. + # The slash is tilted 45 degrees from the angle of the player's attack. + # Change the 3 inside scale_rect to 30 and the slash will be HUGE! Scale_rect positions + # the slash over the killed zombie's sprite. + [z.sprite, [z.sprite.rect, 'sprites/slash.png', 45 + state.player.attack_angle_on_click, z.sprite.a].scale_rect(3, 0.5, 0.5)] + end + end + + # Outputs the player sprite using the images in the sprites folder. + def render_player + state.player_sprite = [state.player.x, + state.player.y, + 4 * 3, + 8 * 3, "sprites/player-#{animation_index(state.player.created_at_elapsed)}.png"] # string interpolation + outputs.sprites << state.player_sprite + + # Outputs a small red square that previews the angles that the player can attack in. + # It can be moved in a perfect circle around the player to show possible movements. + # Change the 60 in the parenthesis and see what happens to the movement of the red square. + outputs.solids << [state.player.x + state.player.attack_angle.vector_x(60), + state.player.y + state.player.attack_angle.vector_y(60), + 3, 3, 255, 0, 0] + end + + # Renders flash as a solid. The screen turns white for 10 frames when a zombie is killed. + def render_flash + return if state.flash_at.elapsed_time > 10 # return if more than 10 frames have passed since flash. + # Transparency gradually changes (or eases) during the 10 frames of flash. + outputs.primitives << [grid.rect, 255, 255, 255, 255 * state.flash_at.ease(10, :flip)].solid + end + + # Calls all methods necessary for performing calculations. + def calc + calc_spawn_zombie + calc_move_zombies + calc_player + calc_kill_zombie + end + + # Decreases the zombie spawn countdown by 1 if it has a value greater than 0. + def calc_spawn_zombie + if state.zombie_spawn_countdown > 0 + state.zombie_spawn_countdown -= 1 + return + end + + # New zombies are created, positioned on the screen, and added to the zombies collection. + state.zombies << state.new_entity(:zombie) do |z| # each zombie is declared a new entity + if rand > 0.5 + z.x = grid.rect.w.randomize(:ratio) # random x position on screen (within grid scope) + z.y = [-10, 730].sample # y position is set to either -10 or 730 (randomly chosen) + # the possible values exceed the screen's scope so zombies appear to be coming from far away + else + z.x = [-10, 1290].sample # x position is set to either -10 or 1290 (randomly chosen) + z.y = grid.rect.w.randomize(:ratio) # random y position on screen + end + end + + # Calls random_spawn_countdown method (determines how fast new zombies appear) + state.zombie_spawn_countdown = random_spawn_countdown state.zombie_min_spawn_rate + state.zombie_min_spawn_rate -= 1 + # set to either the current zombie_min_spawn_rate or 0, depending on which value is greater + state.zombie_min_spawn_rate = state.zombie_min_spawn_rate.greater(0) + end + + # Moves all zombies towards the center of the screen. + # All zombies that reach the center (640, 360) are rejected from the zombies collection and disappear. + def calc_move_zombies + state.zombies.each do |z| # for each zombie in the collection + z.y = z.y.towards(360, 0.1) # move the zombie towards the center (640, 360) at a rate of 0.1 + z.x = z.x.towards(640, 0.1) # change 0.1 to 1.1 and see how much faster the zombies move to the center + end + state.zombies = state.zombies.reject { |z| z.y == 360 && z.x == 640 } # remove zombies that are in center + end + + # Calculates the position and movement of the player on the screen. + def calc_player + state.player.x += state.player.dx # changes x based on dx (change in x) + state.player.y += state.player.dy # changes y based on dy (change in y) + + state.player.dx *= 0.9 # scales dx down + state.player.dy *= 0.9 # scales dy down + + # Compares player's x to 1280 to find lesser value, then compares result to 0 to find greater value. + # This ensures that the player remains within the screen's scope. + state.player.x = state.player.x.lesser(1280).greater(0) + state.player.y = state.player.y.lesser(720).greater(0) # same with player's y + end + + # Finds all zombies that intersect with the player's sprite. These zombies are removed from the zombies collection + # and added to the killed_zombies collection since any zombie that intersects with the player is killed. + def calc_kill_zombie + + # Find all zombies that intersect with the player. They are considered killed. + killed_this_frame = state.zombies.find_all { |z| z.sprite.intersect_rect? state.player_sprite } + state.zombies = state.zombies - killed_this_frame # remove newly killed zombies from zombies collection + state.killed_zombies += killed_this_frame # add newly killed zombies to killed zombies + + if killed_this_frame.length > 0 # if atleast one zombie was killed in the frame + state.flash_at = state.tick_count # flash_at set to the frame when the zombie was killed + # Don't forget, the rendered flash lasts for 10 frames after the zombie is killed (look at render_flash method) + end + + # Sets the tick_count (passage of time) as the value of the death_at variable for each killed zombie. + # Death_at stores the frame a zombie was killed. + killed_this_frame.each do |z| + z.death_at = state.tick_count + end + + # Zombies are rejected from the killed_zombies collection depending on when they were killed. + # They are rejected if more than 30 frames have passed since their death. + state.killed_zombies = state.killed_zombies.reject { |z| state.tick_count - z.death_at > 30 } + end + + # Uses input from the user to move the player around the screen. + def input + + # If the "a" key or left key is pressed, the x position of the player decreases. + # Otherwise, if the "d" key or right key is pressed, the x position of the player increases. + if inputs.keyboard.key_held.a || inputs.keyboard.key_held.left + state.player.x -= 5 + elsif inputs.keyboard.key_held.d || inputs.keyboard.key_held.right + state.player.x += 5 + end + + # If the "w" or up key is pressed, the y position of the player increases. + # Otherwise, if the "s" or down key is pressed, the y position of the player decreases. + if inputs.keyboard.key_held.w || inputs.keyboard.key_held.up + state.player.y += 5 + elsif inputs.keyboard.key_held.s || inputs.keyboard.key_held.down + state.player.y -= 5 + end + + # Sets the attack angle so the player can move and attack in the precise direction it wants to go. + # If the mouse is moved, the attack angle is changed (based on the player's position and mouse position). + # Attack angle also contributes to the position of red square. + if inputs.mouse.moved + state.player.attack_angle = inputs.mouse.position.angle_from [state.player.x, state.player.y] + end + + if inputs.mouse.click && state.player.dx < 0.5 && state.player.dy < 0.5 + state.player.attack_angle_on_click = inputs.mouse.position.angle_from [state.player.x, state.player.y] + state.player.attack_angle = state.player.attack_angle_on_click # player's attack angle is set + state.player.dx = state.player.attack_angle.vector_x(25) # change in player's position + state.player.dy = state.player.attack_angle.vector_y(25) + end + end + + # Sets the zombie spawn's countdown to a random number. + # How fast zombies appear (change the 60 to 6 and too many zombies will appear at once!) + def random_spawn_countdown minimum + 10.randomize(:ratio, :sign).to_i + 60 + end + + # Helps to iterate through the images in the sprites folder by setting the animation index. + # 3 frames is how long to show an image, and 6 is how many images to flip through. + def animation_index at + at.idiv(3).mod(6) + end + + # Animates the zombies by using the animation index to go through the images in the sprites folder. + def animation_sprite zombie, at = nil + at ||= zombie.created_at_elapsed # how long it is has been since a zombie was created + index = animation_index at + "sprites/zombie-#{index}.png" # string interpolation to iterate through images + end +end + +$protect_the_puppies_from_the_zombies = ProtectThePuppiesFromTheZombies.new + +def tick args + $protect_the_puppies_from_the_zombies.grid = args.grid + $protect_the_puppies_from_the_zombies.inputs = args.inputs + $protect_the_puppies_from_the_zombies.state = args.state + $protect_the_puppies_from_the_zombies.outputs = args.outputs + $protect_the_puppies_from_the_zombies.tick + tick_instructions args, "How to get the mouse position and translate it to an x, y position using .vector_x and .vector_y. CLICK to play." +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/05_mouse/05_mouse_move/license-for-sample.txt b/samples/05_mouse/05_mouse_move/license-for-sample.txt new file mode 100644 index 0000000..100dcec --- /dev/null +++ b/samples/05_mouse/05_mouse_move/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/05_mouse/05_mouse_move/replay.txt b/samples/05_mouse/05_mouse_move/replay.txt new file mode 100644 index 0000000..78c183c --- /dev/null +++ b/samples/05_mouse/05_mouse_move/replay.txt @@ -0,0 +1,550 @@ +replay_version 2.0 +stopped_at 1127 +seed 100 +recorded_at Sun Sep 29 23:57:44 2019 +[:mouse_move, 1057, 15, 2, 1, 74] +[:mouse_move, 1029, 68, 2, 2, 75] +[:mouse_move, 1014, 86, 2, 3, 76] +[:mouse_move, 1014, 105, 2, 4, 89] +[:mouse_move, 1009, 132, 2, 5, 92] +[:mouse_move, 984, 181, 2, 6, 93] +[:mouse_move, 966, 213, 2, 7, 93] +[:mouse_move, 945, 245, 2, 8, 94] +[:mouse_move, 922, 276, 2, 9, 95] +[:mouse_move, 899, 305, 2, 10, 95] +[:mouse_move, 889, 316, 2, 11, 96] +[:mouse_move, 868, 336, 2, 12, 97] +[:mouse_move, 849, 353, 2, 13, 97] +[:mouse_move, 831, 365, 2, 14, 98] +[:mouse_move, 801, 384, 2, 15, 99] +[:mouse_move, 792, 386, 2, 16, 99] +[:mouse_move, 760, 399, 2, 17, 100] +[:mouse_move, 750, 400, 2, 18, 101] +[:mouse_move, 732, 403, 2, 19, 101] +[:mouse_move, 697, 406, 2, 20, 102] +[:mouse_move, 676, 406, 2, 21, 103] +[:mouse_move, 666, 406, 2, 22, 103] +[:mouse_move, 647, 401, 2, 23, 104] +[:mouse_move, 628, 395, 2, 24, 105] +[:mouse_move, 610, 388, 2, 25, 105] +[:mouse_move, 594, 378, 2, 26, 106] +[:mouse_move, 565, 360, 2, 27, 107] +[:mouse_move, 546, 346, 2, 28, 107] +[:mouse_move, 538, 339, 2, 29, 108] +[:mouse_move, 523, 326, 2, 30, 109] +[:mouse_move, 518, 322, 2, 31, 109] +[:mouse_move, 515, 318, 2, 32, 110] +[:mouse_move, 509, 312, 2, 33, 111] +[:mouse_move, 507, 311, 2, 34, 111] +[:mouse_move, 501, 305, 2, 35, 112] +[:mouse_move, 499, 302, 2, 36, 113] +[:mouse_move, 497, 300, 2, 37, 114] +[:mouse_move, 497, 299, 2, 38, 115] +[:mouse_move, 497, 295, 2, 39, 116] +[:mouse_move, 498, 290, 2, 40, 131] +[:mouse_move, 498, 287, 2, 41, 132] +[:mouse_move, 498, 284, 2, 42, 132] +[:mouse_move, 497, 279, 2, 43, 133] +[:mouse_move, 490, 240, 2, 44, 135] +[:mouse_move, 486, 221, 2, 45, 136] +[:mouse_move, 480, 198, 2, 46, 136] +[:mouse_move, 477, 187, 2, 47, 137] +[:mouse_move, 469, 165, 2, 48, 138] +[:mouse_move, 458, 146, 2, 49, 138] +[:mouse_move, 436, 115, 2, 50, 139] +[:mouse_move, 416, 99, 2, 51, 140] +[:mouse_move, 369, 82, 2, 52, 141] +[:mouse_move, 341, 79, 2, 53, 142] +[:mouse_move, 288, 79, 2, 54, 143] +[:mouse_move, 277, 82, 2, 55, 144] +[:mouse_move, 238, 97, 2, 56, 145] +[:mouse_move, 224, 107, 2, 57, 146] +[:mouse_move, 196, 130, 2, 58, 147] +[:mouse_move, 187, 143, 2, 59, 148] +[:mouse_move, 179, 159, 2, 60, 149] +[:mouse_move, 175, 176, 2, 61, 149] +[:mouse_move, 175, 192, 2, 62, 150] +[:mouse_move, 175, 207, 2, 63, 151] +[:mouse_move, 175, 213, 2, 64, 151] +[:mouse_move, 178, 223, 2, 65, 152] +[:mouse_move, 181, 232, 2, 66, 153] +[:mouse_move, 184, 238, 2, 67, 153] +[:mouse_move, 187, 242, 2, 68, 154] +[:mouse_move, 191, 247, 2, 69, 155] +[:mouse_move, 196, 251, 2, 70, 155] +[:mouse_move, 202, 254, 2, 71, 156] +[:mouse_move, 206, 257, 2, 72, 157] +[:mouse_move, 208, 258, 2, 73, 157] +[:mouse_move, 212, 260, 2, 74, 158] +[:mouse_move, 213, 261, 2, 75, 159] +[:mouse_move, 215, 262, 2, 76, 159] +[:mouse_move, 216, 262, 2, 77, 160] +[:mouse_move, 217, 262, 2, 78, 161] +[:mouse_move, 217, 263, 2, 79, 161] +[:mouse_button_pressed, 1, 0, 1, 80, 168] +[:mouse_button_up, 1, 0, 1, 81, 175] +[:mouse_move, 218, 263, 2, 82, 193] +[:mouse_move, 219, 264, 2, 83, 194] +[:mouse_move, 221, 267, 2, 84, 195] +[:mouse_move, 222, 270, 2, 85, 196] +[:mouse_move, 222, 281, 2, 86, 197] +[:mouse_move, 222, 286, 2, 87, 198] +[:mouse_move, 212, 299, 2, 88, 199] +[:mouse_move, 207, 302, 2, 89, 200] +[:mouse_move, 184, 304, 2, 90, 201] +[:mouse_move, 171, 298, 2, 91, 202] +[:mouse_move, 154, 284, 2, 92, 203] +[:mouse_move, 130, 255, 2, 93, 204] +[:mouse_move, 116, 237, 2, 94, 205] +[:mouse_move, 104, 213, 2, 95, 206] +[:mouse_move, 98, 201, 2, 96, 207] +[:mouse_move, 90, 181, 2, 97, 208] +[:mouse_move, 87, 166, 2, 98, 209] +[:mouse_move, 83, 154, 2, 99, 210] +[:mouse_move, 81, 147, 2, 100, 211] +[:mouse_move, 79, 139, 2, 101, 212] +[:mouse_move, 78, 136, 2, 102, 213] +[:mouse_move, 76, 132, 2, 103, 214] +[:mouse_move, 76, 131, 2, 104, 215] +[:mouse_move, 75, 130, 2, 105, 216] +[:mouse_move, 74, 130, 2, 106, 218] +[:mouse_move, 73, 130, 2, 107, 219] +[:mouse_move, 71, 132, 2, 108, 220] +[:mouse_move, 69, 133, 2, 109, 221] +[:mouse_move, 66, 138, 2, 110, 222] +[:mouse_move, 65, 140, 2, 111, 223] +[:mouse_move, 63, 147, 2, 112, 224] +[:mouse_move, 62, 150, 2, 113, 225] +[:mouse_move, 62, 161, 2, 114, 226] +[:mouse_move, 62, 165, 2, 115, 227] +[:mouse_move, 62, 173, 2, 116, 228] +[:mouse_move, 62, 177, 2, 117, 229] +[:mouse_move, 62, 180, 2, 118, 230] +[:mouse_move, 62, 184, 2, 119, 231] +[:mouse_move, 62, 185, 2, 120, 232] +[:mouse_move, 62, 187, 2, 121, 233] +[:mouse_move, 62, 188, 2, 122, 234] +[:mouse_move, 62, 190, 2, 123, 235] +[:mouse_move, 61, 191, 2, 124, 236] +[:mouse_move, 60, 193, 2, 125, 237] +[:mouse_move, 60, 194, 2, 126, 238] +[:mouse_move, 59, 195, 2, 127, 239] +[:mouse_move, 59, 196, 2, 128, 240] +[:mouse_move, 59, 197, 2, 129, 243] +[:mouse_move, 59, 196, 2, 130, 252] +[:mouse_move, 59, 195, 2, 131, 257] +[:mouse_move, 59, 194, 2, 132, 258] +[:mouse_move, 59, 193, 2, 133, 260] +[:mouse_move, 58, 193, 2, 134, 267] +[:mouse_move, 57, 193, 2, 135, 272] +[:mouse_move, 56, 194, 2, 136, 274] +[:mouse_move, 55, 195, 2, 137, 276] +[:mouse_move, 54, 195, 2, 138, 278] +[:mouse_button_pressed, 1, 0, 1, 139, 281] +[:mouse_button_up, 1, 0, 1, 140, 289] +[:mouse_move, 53, 195, 2, 141, 318] +[:mouse_move, 51, 195, 2, 142, 319] +[:mouse_move, 47, 195, 2, 143, 320] +[:mouse_move, 45, 195, 2, 144, 321] +[:mouse_move, 42, 195, 2, 145, 322] +[:mouse_move, 41, 194, 2, 146, 323] +[:mouse_move, 40, 194, 2, 147, 324] +[:mouse_move, 40, 193, 2, 148, 325] +[:mouse_move, 39, 193, 2, 149, 326] +[:mouse_move, 38, 192, 2, 150, 328] +[:mouse_button_pressed, 1, 0, 1, 151, 330] +[:mouse_button_up, 1, 0, 1, 152, 338] +[:mouse_move, 38, 193, 2, 153, 347] +[:mouse_move, 39, 197, 2, 154, 348] +[:mouse_move, 47, 216, 2, 155, 349] +[:mouse_move, 61, 246, 2, 156, 350] +[:mouse_move, 93, 319, 2, 157, 351] +[:mouse_move, 116, 361, 2, 158, 352] +[:mouse_move, 145, 412, 2, 159, 353] +[:mouse_move, 164, 440, 2, 160, 354] +[:mouse_move, 192, 468, 2, 161, 355] +[:mouse_move, 209, 480, 2, 162, 356] +[:mouse_move, 227, 487, 2, 163, 357] +[:mouse_move, 243, 489, 2, 164, 358] +[:mouse_move, 269, 479, 2, 165, 359] +[:mouse_move, 282, 466, 2, 166, 360] +[:mouse_move, 295, 451, 2, 167, 361] +[:mouse_move, 309, 437, 2, 168, 362] +[:mouse_move, 315, 431, 2, 169, 363] +[:mouse_move, 320, 427, 2, 170, 364] +[:mouse_move, 327, 421, 2, 171, 365] +[:mouse_move, 328, 421, 2, 172, 366] +[:mouse_button_pressed, 1, 0, 1, 173, 367] +[:mouse_move, 329, 420, 2, 174, 367] +[:mouse_button_up, 1, 0, 1, 175, 375] +[:mouse_move, 326, 423, 2, 176, 388] +[:mouse_move, 316, 431, 2, 177, 389] +[:mouse_move, 290, 450, 2, 178, 390] +[:mouse_move, 266, 463, 2, 179, 391] +[:mouse_move, 180, 494, 2, 180, 392] +[:mouse_move, 159, 497, 2, 181, 393] +[:mouse_move, 121, 504, 2, 182, 394] +[:mouse_move, 93, 509, 2, 183, 395] +[:mouse_move, 70, 514, 2, 184, 396] +[:mouse_move, 52, 517, 2, 185, 397] +[:mouse_move, 44, 518, 2, 186, 398] +[:mouse_move, 36, 519, 2, 187, 399] +[:mouse_move, 34, 519, 2, 188, 400] +[:mouse_move, 32, 519, 2, 189, 401] +[:mouse_move, 31, 518, 2, 190, 404] +[:mouse_move, 31, 516, 2, 191, 405] +[:mouse_move, 30, 515, 2, 192, 406] +[:mouse_move, 28, 509, 2, 193, 407] +[:mouse_move, 27, 506, 2, 194, 408] +[:mouse_move, 23, 500, 2, 195, 409] +[:mouse_move, 22, 498, 2, 196, 410] +[:mouse_move, 19, 494, 2, 197, 411] +[:mouse_move, 18, 492, 2, 198, 412] +[:mouse_move, 17, 491, 2, 199, 413] +[:mouse_move, 16, 490, 2, 200, 414] +[:mouse_move, 15, 490, 2, 201, 415] +[:mouse_button_pressed, 1, 0, 1, 202, 421] +[:mouse_button_up, 1, 0, 1, 203, 431] +[:mouse_move, 16, 490, 2, 204, 443] +[:mouse_move, 17, 490, 2, 205, 444] +[:mouse_move, 20, 491, 2, 206, 445] +[:mouse_move, 22, 493, 2, 207, 446] +[:mouse_move, 24, 493, 2, 208, 447] +[:mouse_move, 25, 494, 2, 209, 448] +[:mouse_move, 26, 495, 2, 210, 449] +[:mouse_move, 27, 495, 2, 211, 450] +[:mouse_move, 27, 496, 2, 212, 453] +[:mouse_move, 28, 496, 2, 213, 455] +[:mouse_move, 30, 497, 2, 214, 465] +[:mouse_move, 32, 498, 2, 215, 466] +[:mouse_move, 43, 505, 2, 216, 467] +[:mouse_move, 50, 510, 2, 217, 468] +[:mouse_move, 74, 526, 2, 218, 469] +[:mouse_move, 87, 536, 2, 219, 470] +[:mouse_move, 100, 545, 2, 220, 471] +[:mouse_move, 126, 565, 2, 221, 472] +[:mouse_move, 150, 584, 2, 222, 473] +[:mouse_move, 160, 594, 2, 223, 474] +[:mouse_move, 165, 598, 2, 224, 475] +[:mouse_move, 185, 622, 2, 225, 476] +[:mouse_move, 187, 626, 2, 226, 477] +[:mouse_move, 192, 637, 2, 227, 478] +[:mouse_move, 194, 642, 2, 228, 479] +[:mouse_move, 196, 647, 2, 229, 480] +[:mouse_move, 197, 649, 2, 230, 481] +[:mouse_move, 197, 650, 2, 231, 482] +[:mouse_move, 198, 651, 2, 232, 483] +[:mouse_button_pressed, 1, 0, 1, 233, 484] +[:mouse_button_up, 1, 0, 1, 234, 495] +[:mouse_move, 201, 649, 2, 235, 510] +[:mouse_move, 231, 638, 2, 236, 511] +[:mouse_move, 265, 631, 2, 237, 512] +[:mouse_move, 312, 622, 2, 238, 513] +[:mouse_move, 474, 600, 2, 239, 514] +[:mouse_move, 528, 593, 2, 240, 515] +[:mouse_move, 544, 590, 2, 241, 516] +[:mouse_move, 555, 589, 2, 242, 517] +[:mouse_move, 559, 589, 2, 243, 530] +[:mouse_move, 567, 592, 2, 244, 531] +[:mouse_move, 594, 607, 2, 245, 532] +[:mouse_move, 602, 612, 2, 246, 533] +[:mouse_move, 624, 627, 2, 247, 534] +[:mouse_move, 645, 640, 2, 248, 536] +[:mouse_move, 651, 644, 2, 249, 537] +[:mouse_move, 666, 654, 2, 250, 538] +[:mouse_move, 672, 659, 2, 251, 539] +[:mouse_move, 680, 668, 2, 252, 540] +[:mouse_move, 682, 670, 2, 253, 541] +[:mouse_move, 687, 675, 2, 254, 542] +[:mouse_move, 689, 677, 2, 255, 543] +[:mouse_move, 691, 680, 2, 256, 544] +[:mouse_move, 692, 680, 2, 257, 545] +[:mouse_move, 693, 681, 2, 258, 546] +[:mouse_move, 694, 682, 2, 259, 547] +[:mouse_move, 695, 682, 2, 260, 548] +[:mouse_button_pressed, 1, 0, 1, 261, 549] +[:mouse_move, 695, 683, 2, 262, 549] +[:mouse_button_up, 1, 0, 1, 263, 560] +[:mouse_move, 696, 683, 2, 264, 565] +[:mouse_move, 698, 683, 2, 265, 566] +[:mouse_move, 705, 683, 2, 266, 567] +[:mouse_move, 716, 683, 2, 267, 568] +[:mouse_move, 726, 683, 2, 268, 569] +[:mouse_move, 734, 683, 2, 269, 570] +[:mouse_move, 748, 683, 2, 270, 571] +[:mouse_move, 761, 683, 2, 271, 573] +[:mouse_move, 765, 683, 2, 272, 574] +[:mouse_move, 771, 683, 2, 273, 575] +[:mouse_move, 774, 683, 2, 274, 577] +[:mouse_move, 777, 683, 2, 275, 578] +[:mouse_move, 779, 683, 2, 276, 579] +[:mouse_move, 780, 683, 2, 277, 582] +[:mouse_move, 781, 683, 2, 278, 586] +[:mouse_button_pressed, 1, 0, 1, 279, 590] +[:mouse_button_up, 1, 0, 1, 280, 600] +[:mouse_move, 781, 679, 2, 281, 646] +[:mouse_move, 780, 675, 2, 282, 647] +[:mouse_move, 777, 659, 2, 283, 648] +[:mouse_move, 775, 648, 2, 284, 649] +[:mouse_move, 760, 580, 2, 285, 650] +[:mouse_move, 750, 537, 2, 286, 651] +[:mouse_move, 715, 420, 2, 287, 652] +[:mouse_move, 700, 393, 2, 288, 653] +[:mouse_move, 644, 307, 2, 289, 654] +[:mouse_move, 599, 268, 2, 290, 656] +[:mouse_move, 569, 248, 2, 291, 657] +[:mouse_move, 555, 240, 2, 292, 658] +[:mouse_button_pressed, 1, 0, 1, 293, 659] +[:mouse_move, 546, 236, 2, 294, 659] +[:mouse_button_up, 1, 0, 1, 295, 670] +[:mouse_move, 540, 236, 2, 296, 675] +[:mouse_move, 535, 236, 2, 297, 676] +[:mouse_move, 524, 232, 2, 298, 677] +[:mouse_move, 506, 224, 2, 299, 678] +[:mouse_move, 495, 219, 2, 300, 679] +[:mouse_move, 483, 213, 2, 301, 680] +[:mouse_move, 457, 202, 2, 302, 681] +[:mouse_move, 433, 193, 2, 303, 682] +[:mouse_move, 427, 193, 2, 304, 683] +[:mouse_move, 424, 192, 2, 305, 684] +[:mouse_move, 418, 191, 2, 306, 685] +[:mouse_move, 412, 189, 2, 307, 686] +[:mouse_move, 406, 187, 2, 308, 687] +[:mouse_move, 401, 186, 2, 309, 688] +[:mouse_button_pressed, 1, 0, 1, 310, 689] +[:mouse_move, 400, 185, 2, 311, 689] +[:mouse_button_up, 1, 0, 1, 312, 698] +[:mouse_move, 400, 182, 2, 313, 714] +[:mouse_move, 400, 176, 2, 314, 715] +[:mouse_move, 395, 157, 2, 315, 716] +[:mouse_move, 391, 146, 2, 316, 717] +[:mouse_move, 386, 130, 2, 317, 718] +[:mouse_move, 384, 127, 2, 318, 719] +[:mouse_move, 380, 114, 2, 319, 720] +[:mouse_move, 376, 103, 2, 320, 721] +[:mouse_move, 375, 101, 2, 321, 722] +[:mouse_move, 373, 95, 2, 322, 723] +[:mouse_move, 372, 94, 2, 323, 724] +[:mouse_move, 371, 92, 2, 324, 725] +[:mouse_button_pressed, 1, 0, 1, 325, 726] +[:mouse_button_up, 1, 0, 1, 326, 735] +[:mouse_move, 371, 90, 2, 327, 747] +[:mouse_move, 371, 89, 2, 328, 748] +[:mouse_move, 371, 88, 2, 329, 749] +[:mouse_move, 371, 86, 2, 330, 750] +[:mouse_move, 370, 84, 2, 331, 752] +[:mouse_move, 370, 83, 2, 332, 753] +[:mouse_move, 368, 80, 2, 333, 754] +[:mouse_move, 367, 76, 2, 334, 755] +[:mouse_move, 365, 74, 2, 335, 756] +[:mouse_move, 363, 70, 2, 336, 757] +[:mouse_move, 358, 61, 2, 337, 758] +[:mouse_move, 356, 56, 2, 338, 759] +[:mouse_move, 352, 48, 2, 339, 760] +[:mouse_move, 351, 45, 2, 340, 761] +[:mouse_move, 348, 40, 2, 341, 762] +[:mouse_move, 347, 38, 2, 342, 763] +[:mouse_move, 346, 37, 2, 343, 764] +[:mouse_move, 345, 36, 2, 344, 765] +[:mouse_move, 344, 36, 2, 345, 766] +[:mouse_move, 343, 36, 2, 346, 768] +[:mouse_move, 342, 36, 2, 347, 770] +[:mouse_move, 341, 36, 2, 348, 772] +[:mouse_move, 340, 36, 2, 349, 774] +[:mouse_move, 339, 35, 2, 350, 777] +[:mouse_move, 338, 33, 2, 351, 778] +[:mouse_move, 338, 32, 2, 352, 779] +[:mouse_move, 337, 32, 2, 353, 780] +[:mouse_move, 337, 31, 2, 354, 781] +[:mouse_move, 336, 30, 2, 355, 783] +[:mouse_button_pressed, 1, 0, 1, 356, 784] +[:mouse_button_up, 1, 0, 1, 357, 795] +[:mouse_move, 336, 31, 2, 358, 825] +[:mouse_move, 335, 32, 2, 359, 827] +[:mouse_move, 335, 33, 2, 360, 828] +[:mouse_move, 334, 35, 2, 361, 829] +[:mouse_move, 333, 35, 2, 362, 830] +[:mouse_move, 332, 37, 2, 363, 831] +[:mouse_move, 332, 39, 2, 364, 832] +[:mouse_move, 332, 41, 2, 365, 833] +[:mouse_move, 332, 46, 2, 366, 834] +[:mouse_move, 332, 59, 2, 367, 835] +[:mouse_move, 335, 85, 2, 368, 836] +[:mouse_move, 336, 111, 2, 369, 837] +[:mouse_move, 336, 133, 2, 370, 838] +[:mouse_move, 336, 188, 2, 371, 839] +[:mouse_move, 335, 220, 2, 372, 840] +[:mouse_move, 335, 266, 2, 373, 841] +[:mouse_move, 335, 291, 2, 374, 842] +[:mouse_move, 347, 327, 2, 375, 843] +[:mouse_move, 361, 352, 2, 376, 844] +[:mouse_move, 403, 378, 2, 377, 845] +[:mouse_move, 435, 385, 2, 378, 846] +[:mouse_move, 523, 396, 2, 379, 847] +[:mouse_move, 544, 396, 2, 380, 848] +[:mouse_move, 585, 395, 2, 381, 849] +[:mouse_move, 600, 390, 2, 382, 850] +[:mouse_move, 647, 367, 2, 383, 851] +[:mouse_move, 662, 355, 2, 384, 852] +[:mouse_move, 679, 316, 2, 385, 853] +[:mouse_move, 679, 302, 2, 386, 854] +[:mouse_move, 654, 244, 2, 387, 855] +[:mouse_move, 603, 180, 2, 388, 857] +[:mouse_move, 552, 131, 2, 389, 858] +[:mouse_move, 531, 116, 2, 390, 859] +[:mouse_move, 512, 104, 2, 391, 860] +[:mouse_move, 477, 91, 2, 392, 861] +[:mouse_move, 460, 89, 2, 393, 862] +[:mouse_move, 442, 88, 2, 394, 863] +[:mouse_move, 409, 88, 2, 395, 864] +[:mouse_move, 402, 88, 2, 396, 865] +[:mouse_move, 373, 92, 2, 397, 866] +[:mouse_move, 363, 96, 2, 398, 867] +[:mouse_move, 335, 105, 2, 399, 868] +[:mouse_move, 326, 110, 2, 400, 869] +[:mouse_move, 314, 115, 2, 401, 870] +[:mouse_move, 306, 120, 2, 402, 871] +[:mouse_move, 293, 129, 2, 403, 872] +[:mouse_move, 288, 134, 2, 404, 873] +[:mouse_move, 277, 151, 2, 405, 874] +[:mouse_move, 272, 172, 2, 406, 875] +[:mouse_move, 272, 185, 2, 407, 876] +[:mouse_move, 273, 210, 2, 408, 877] +[:mouse_move, 282, 224, 2, 409, 878] +[:mouse_move, 288, 235, 2, 410, 879] +[:mouse_move, 294, 243, 2, 411, 880] +[:mouse_move, 298, 247, 2, 412, 881] +[:mouse_move, 302, 251, 2, 413, 882] +[:mouse_move, 304, 252, 2, 414, 883] +[:mouse_button_pressed, 1, 0, 1, 415, 885] +[:mouse_move, 305, 252, 2, 416, 885] +[:mouse_move, 306, 252, 2, 417, 895] +[:mouse_button_up, 1, 0, 1, 418, 896] +[:mouse_move, 314, 252, 2, 419, 896] +[:mouse_move, 337, 252, 2, 420, 896] +[:mouse_move, 364, 252, 2, 421, 897] +[:mouse_move, 402, 252, 2, 422, 898] +[:mouse_move, 494, 266, 2, 423, 899] +[:mouse_move, 597, 295, 2, 424, 900] +[:mouse_move, 629, 309, 2, 425, 901] +[:mouse_move, 753, 372, 2, 426, 902] +[:mouse_move, 788, 393, 2, 427, 903] +[:mouse_move, 800, 400, 2, 428, 904] +[:mouse_move, 827, 414, 2, 429, 905] +[:mouse_move, 840, 420, 2, 430, 906] +[:mouse_move, 846, 425, 2, 431, 907] +[:mouse_move, 851, 428, 2, 432, 908] +[:mouse_move, 854, 433, 2, 433, 909] +[:mouse_move, 854, 434, 2, 434, 910] +[:mouse_move, 849, 434, 2, 435, 912] +[:mouse_move, 846, 434, 2, 436, 913] +[:mouse_move, 834, 430, 2, 437, 914] +[:mouse_move, 827, 426, 2, 438, 915] +[:mouse_move, 798, 409, 2, 439, 916] +[:mouse_move, 779, 401, 2, 440, 917] +[:mouse_move, 726, 384, 2, 441, 918] +[:mouse_move, 659, 371, 2, 442, 919] +[:mouse_move, 599, 364, 2, 443, 920] +[:mouse_move, 538, 356, 2, 444, 922] +[:mouse_move, 525, 353, 2, 445, 923] +[:mouse_move, 454, 338, 2, 446, 924] +[:mouse_move, 416, 324, 2, 447, 925] +[:mouse_move, 407, 319, 2, 448, 926] +[:mouse_move, 391, 314, 2, 449, 927] +[:mouse_move, 379, 307, 2, 450, 928] +[:mouse_move, 373, 305, 2, 451, 929] +[:mouse_move, 367, 301, 2, 452, 930] +[:mouse_move, 366, 300, 2, 453, 931] +[:mouse_move, 366, 294, 2, 454, 932] +[:mouse_move, 370, 291, 2, 455, 933] +[:mouse_move, 396, 277, 2, 456, 934] +[:mouse_move, 405, 272, 2, 457, 935] +[:mouse_move, 426, 260, 2, 458, 936] +[:mouse_move, 447, 246, 2, 459, 937] +[:mouse_move, 457, 236, 2, 460, 938] +[:mouse_move, 466, 222, 2, 461, 939] +[:mouse_move, 474, 206, 2, 462, 940] +[:mouse_move, 476, 185, 2, 463, 941] +[:mouse_move, 476, 173, 2, 464, 942] +[:mouse_move, 466, 139, 2, 465, 943] +[:mouse_move, 461, 133, 2, 466, 944] +[:mouse_move, 440, 114, 2, 467, 945] +[:mouse_move, 428, 106, 2, 468, 946] +[:mouse_move, 400, 96, 2, 469, 947] +[:mouse_move, 385, 93, 2, 470, 948] +[:mouse_move, 355, 92, 2, 471, 949] +[:mouse_move, 324, 92, 2, 472, 950] +[:mouse_move, 309, 92, 2, 473, 951] +[:mouse_move, 302, 92, 2, 474, 952] +[:mouse_move, 271, 101, 2, 475, 953] +[:mouse_move, 260, 105, 2, 476, 954] +[:mouse_move, 245, 113, 2, 477, 955] +[:mouse_move, 224, 129, 2, 478, 956] +[:mouse_move, 218, 137, 2, 479, 957] +[:mouse_move, 203, 157, 2, 480, 958] +[:mouse_move, 195, 170, 2, 481, 959] +[:mouse_move, 187, 183, 2, 482, 960] +[:mouse_move, 174, 209, 2, 483, 961] +[:mouse_move, 169, 221, 2, 484, 962] +[:mouse_move, 161, 244, 2, 485, 963] +[:mouse_move, 158, 258, 2, 486, 964] +[:mouse_move, 156, 272, 2, 487, 965] +[:mouse_move, 160, 327, 2, 488, 966] +[:mouse_move, 163, 334, 2, 489, 967] +[:mouse_move, 177, 367, 2, 490, 968] +[:mouse_move, 195, 387, 2, 491, 970] +[:mouse_move, 231, 416, 2, 492, 971] +[:mouse_move, 251, 429, 2, 493, 972] +[:mouse_move, 272, 442, 2, 494, 973] +[:mouse_move, 301, 458, 2, 495, 974] +[:mouse_move, 319, 467, 2, 496, 975] +[:mouse_move, 352, 478, 2, 497, 976] +[:mouse_move, 381, 482, 2, 498, 977] +[:mouse_move, 405, 482, 2, 499, 978] +[:mouse_move, 420, 480, 2, 500, 979] +[:mouse_move, 453, 461, 2, 501, 980] +[:mouse_move, 479, 431, 2, 502, 981] +[:mouse_move, 492, 413, 2, 503, 982] +[:mouse_move, 510, 383, 2, 504, 983] +[:mouse_move, 521, 362, 2, 505, 984] +[:mouse_move, 528, 346, 2, 506, 985] +[:mouse_move, 538, 314, 2, 507, 986] +[:mouse_move, 540, 299, 2, 508, 987] +[:mouse_move, 541, 285, 2, 509, 988] +[:mouse_move, 541, 256, 2, 510, 989] +[:mouse_move, 538, 241, 2, 511, 990] +[:mouse_move, 526, 211, 2, 512, 991] +[:mouse_move, 516, 192, 2, 513, 993] +[:mouse_move, 507, 179, 2, 514, 994] +[:mouse_move, 492, 164, 2, 515, 995] +[:mouse_move, 484, 156, 2, 516, 996] +[:mouse_move, 466, 144, 2, 517, 997] +[:mouse_move, 455, 139, 2, 518, 998] +[:mouse_move, 430, 132, 2, 519, 999] +[:mouse_move, 405, 128, 2, 520, 1000] +[:mouse_move, 365, 127, 2, 521, 1001] +[:mouse_move, 341, 127, 2, 522, 1002] +[:mouse_move, 304, 129, 2, 523, 1003] +[:mouse_move, 283, 132, 2, 524, 1004] +[:mouse_move, 247, 141, 2, 525, 1005] +[:mouse_move, 231, 146, 2, 526, 1006] +[:mouse_move, 205, 159, 2, 527, 1007] +[:mouse_move, 194, 167, 2, 528, 1008] +[:mouse_move, 166, 197, 2, 529, 1009] +[:mouse_move, 156, 215, 2, 530, 1010] +[:mouse_move, 140, 260, 2, 531, 1011] +[:mouse_move, 135, 286, 2, 532, 1012] +[:mouse_move, 133, 325, 2, 533, 1013] +[:mouse_move, 134, 348, 2, 534, 1014] +[:mouse_move, 161, 410, 2, 535, 1015] +[:mouse_move, 239, 475, 2, 536, 1016] +[:mouse_move, 283, 495, 2, 537, 1017] +[:mouse_move, 304, 500, 2, 538, 1018] +[:mouse_move, 345, 504, 2, 539, 1019] +[:mouse_move, 409, 503, 2, 540, 1020] +[:mouse_move, 420, 495, 2, 541, 1021] +[:mouse_move, 475, 456, 2, 542, 1022] +[:mouse_move, 492, 436, 2, 543, 1023] +[:key_down_raw, 1073742051, 1024, 2, 544, 1126] +[:key_down_raw, 113, 1024, 2, 545, 1126] +[:key_up_raw, 113, 1024, 2, 546, 1126] diff --git a/samples/05_mouse/05_mouse_move/sprites/player-0.png b/samples/05_mouse/05_mouse_move/sprites/player-0.png Binary files differnew file mode 100644 index 0000000..c34dbed --- /dev/null +++ b/samples/05_mouse/05_mouse_move/sprites/player-0.png diff --git a/samples/05_mouse/05_mouse_move/sprites/player-1.png b/samples/05_mouse/05_mouse_move/sprites/player-1.png Binary files differnew file mode 100644 index 0000000..54fce3e --- /dev/null +++ b/samples/05_mouse/05_mouse_move/sprites/player-1.png diff --git a/samples/05_mouse/05_mouse_move/sprites/player-2.png b/samples/05_mouse/05_mouse_move/sprites/player-2.png Binary files differnew file mode 100644 index 0000000..0007c28 --- /dev/null +++ b/samples/05_mouse/05_mouse_move/sprites/player-2.png diff --git a/samples/05_mouse/05_mouse_move/sprites/player-3.png b/samples/05_mouse/05_mouse_move/sprites/player-3.png Binary files differnew file mode 100644 index 0000000..c34dbed --- /dev/null +++ b/samples/05_mouse/05_mouse_move/sprites/player-3.png diff --git a/samples/05_mouse/05_mouse_move/sprites/player-4.png b/samples/05_mouse/05_mouse_move/sprites/player-4.png Binary files differnew file mode 100644 index 0000000..9897a29 --- /dev/null +++ b/samples/05_mouse/05_mouse_move/sprites/player-4.png diff --git a/samples/05_mouse/05_mouse_move/sprites/player-5.png b/samples/05_mouse/05_mouse_move/sprites/player-5.png Binary files differnew file mode 100644 index 0000000..69d9c7b --- /dev/null +++ b/samples/05_mouse/05_mouse_move/sprites/player-5.png diff --git a/samples/05_mouse/05_mouse_move/sprites/slash.png b/samples/05_mouse/05_mouse_move/sprites/slash.png Binary files differnew file mode 100644 index 0000000..33c45e9 --- /dev/null +++ b/samples/05_mouse/05_mouse_move/sprites/slash.png diff --git a/samples/05_mouse/05_mouse_move/sprites/zombie-0.png b/samples/05_mouse/05_mouse_move/sprites/zombie-0.png Binary files differnew file mode 100644 index 0000000..2fcc35d --- /dev/null +++ b/samples/05_mouse/05_mouse_move/sprites/zombie-0.png diff --git a/samples/05_mouse/05_mouse_move/sprites/zombie-1.png b/samples/05_mouse/05_mouse_move/sprites/zombie-1.png Binary files differnew file mode 100644 index 0000000..2b631ef --- /dev/null +++ b/samples/05_mouse/05_mouse_move/sprites/zombie-1.png diff --git a/samples/05_mouse/05_mouse_move/sprites/zombie-2.png b/samples/05_mouse/05_mouse_move/sprites/zombie-2.png Binary files differnew file mode 100644 index 0000000..10e0491 --- /dev/null +++ b/samples/05_mouse/05_mouse_move/sprites/zombie-2.png diff --git a/samples/05_mouse/05_mouse_move/sprites/zombie-3.png b/samples/05_mouse/05_mouse_move/sprites/zombie-3.png Binary files differnew file mode 100644 index 0000000..2fcc35d --- /dev/null +++ b/samples/05_mouse/05_mouse_move/sprites/zombie-3.png diff --git a/samples/05_mouse/05_mouse_move/sprites/zombie-4.png b/samples/05_mouse/05_mouse_move/sprites/zombie-4.png Binary files differnew file mode 100644 index 0000000..cbd3f79 --- /dev/null +++ b/samples/05_mouse/05_mouse_move/sprites/zombie-4.png diff --git a/samples/05_mouse/05_mouse_move/sprites/zombie-5.png b/samples/05_mouse/05_mouse_move/sprites/zombie-5.png Binary files differnew file mode 100644 index 0000000..f146666 --- /dev/null +++ b/samples/05_mouse/05_mouse_move/sprites/zombie-5.png diff --git a/samples/05_mouse/05_mouse_move_paint_app/app/main.rb b/samples/05_mouse/05_mouse_move_paint_app/app/main.rb new file mode 100644 index 0000000..9303949 --- /dev/null +++ b/samples/05_mouse/05_mouse_move_paint_app/app/main.rb @@ -0,0 +1,240 @@ +=begin + + APIs listing that haven't been encountered in previous sample apps: + + - Floor: Method that returns an integer number smaller than or equal to the original with no decimal. + + For example, if we have a variable, a = 13.7, and we called floor on it, it would look like this... + puts a.floor() + which would print out 13. + (There is also a ceil method, which returns an integer number greater than or equal to the original + with no decimal. If we had called ceil on the variable a, the result would have been 14.) + + Reminders: + + - Hashes: Collection of unique keys and their corresponding values. The value can be found + using their keys. + + For example, if we have a "numbers" hash that stores numbers in English as the + key and numbers in Spanish as the value, we'd have a hash that looks like this... + numbers = { "one" => "uno", "two" => "dos", "three" => "tres" } + and on it goes. + + Now if we wanted to find the corresponding value of the "one" key, we could say + puts numbers["one"] + which would print "uno" to the console. + + - args.state.new_entity: Used when we want to create a new object, like a sprite or button. + In this sample app, new_entity is used to create a new button that clears the grid. + (Remember, you can use state to define ANY property and it will be retained across frames.) + + - 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.outputs.labels: An array. The values in the array generate a label. + The parameters are [X, Y, TEXT, SIZE, ALIGN, RED, GREEN, BLUE, ALPHA, FONT STYLE] + For more information about labels, go to mygame/documentation/02-labels.md. + + - ARRAY#inside_rect?: Returns true or false depending on if the point is inside the rect. + +=end + +# This sample app shows an empty grid that the user can paint on. +# To paint, the user must keep their mouse presssed and drag it around the grid. +# The "clear" button allows users to clear the grid so they can start over. + +class PaintApp + attr_accessor :inputs, :state, :outputs, :grid, :args + + # Runs methods necessary for the game to function properly. + def tick + print_title + add_grid + check_click + draw_buttons + end + + # Prints the title onto the screen by using a label. + # Also separates the title from the grid with a line as a horizontal separator. + def print_title + args.outputs.labels << [ 640, 700, 'Paint!', 0, 1 ] + outputs.lines << horizontal_separator(660, 0, 1280) + end + + # Sets the starting position, ending position, and color for the horizontal separator. + # The starting and ending positions have the same y values. + def horizontal_separator y, x, x2 + [x, y, x2, y, 150, 150, 150] + end + + # Sets the starting position, ending position, and color for the vertical separator. + # The starting and ending positions have the same x values. + def vertical_separator x, y, y2 + [x, y, x, y2, 150, 150, 150] + end + + # Outputs a border and a grid containing empty squares onto the screen. + def add_grid + + # Sets the x, y, height, and width of the grid. + # There are 31 horizontal lines and 31 vertical lines in the grid. + # Feel free to count them yourself before continuing! + x, y, h, w = 640 - 500/2, 640 - 500, 500, 500 # calculations done so the grid appears in screen's center + lines_h = 31 + lines_v = 31 + + # Sets values for the grid's border, grid lines, and filled squares. + # The filled_squares variable is initially set to an empty array. + state.grid_border ||= [ x, y, h, w ] # definition of grid's outer border + state.grid_lines ||= draw_grid(x, y, h, w, lines_h, lines_v) # calls draw_grid method + state.filled_squares ||= [] # there are no filled squares until the user fills them in + + # Outputs the grid lines, border, and filled squares onto the screen. + outputs.lines.concat state.grid_lines + outputs.borders << state.grid_border + outputs.solids << state.filled_squares + end + + # Draws the grid by adding in vertical and horizontal separators. + def draw_grid x, y, h, w, lines_h, lines_v + + # The grid starts off empty. + grid = [] + + # Calculates the placement and adds horizontal lines or separators into the grid. + curr_y = y # start at the bottom of the box + dist_y = h / (lines_h + 1) # finds distance to place horizontal lines evenly throughout 500 height of grid + lines_h.times do + curr_y += dist_y # increment curr_y by the distance between the horizontal lines + grid << horizontal_separator(curr_y, x, x + w - 1) # add a separator into the grid + end + + # Calculates the placement and adds vertical lines or separators into the grid. + curr_x = x # now start at the left of the box + dist_x = w / (lines_v + 1) # finds distance to place vertical lines evenly throughout 500 width of grid + lines_v.times do + curr_x += dist_x # increment curr_x by the distance between the vertical lines + grid << vertical_separator(curr_x, y + 1, y + h) # add separator + end + + # paint_grid uses a hash to assign values to keys. + state.paint_grid ||= {"x" => x, "y" => y, "h" => h, "w" => w, "lines_h" => lines_h, + "lines_v" => lines_v, "dist_x" => dist_x, + "dist_y" => dist_y } + + return grid + end + + # Checks if the user is keeping the mouse pressed down and sets the mouse_hold variable accordingly using boolean values. + # If the mouse is up, the user cannot drag the mouse. + def check_click + if inputs.mouse.down #is mouse up or down? + state.mouse_held = true # mouse is being held down + elsif inputs.mouse.up # if mouse is up + state.mouse_held = false # mouse is not being held down or dragged + state.mouse_dragging = false + end + + if state.mouse_held && # mouse needs to be down + !inputs.mouse.click && # must not be first click + ((inputs.mouse.previous_click.point.x - inputs.mouse.position.x).abs > 15) # Need to move 15 pixels before "drag" + state.mouse_dragging = true + end + + # If the user clicks their mouse inside the grid, the search_lines method is called with a click input type. + if ((inputs.mouse.click) && (inputs.mouse.click.point.inside_rect? state.grid_border)) + search_lines(inputs.mouse.click.point, :click) + + # If the user drags their mouse inside the grid, the search_lines method is called with a drag input type. + elsif ((state.mouse_dragging) && (inputs.mouse.position.inside_rect? state.grid_border)) + search_lines(inputs.mouse.position, :drag) + end + end + + # Sets the definition of a grid box and handles user input to fill in or clear grid boxes. + def search_lines (point, input_type) + point.x -= state.paint_grid["x"] # subtracts the value assigned to the "x" key in the paint_grid hash + point.y -= state.paint_grid["y"] # subtracts the value assigned to the "y" key in the paint_grid hash + + # Remove code following the .floor and see what happens when you try to fill in grid squares + point.x = (point.x / state.paint_grid["dist_x"]).floor * state.paint_grid["dist_x"] + point.y = (point.y / state.paint_grid["dist_y"]).floor * state.paint_grid["dist_y"] + + point.x += state.paint_grid["x"] + point.y += state.paint_grid["y"] + + # Sets definition of a grid box, meaning its x, y, width, and height. + # Floor is called on the point.x and point.y variables. + # Ceil method is called on values of the distance hash keys, setting the width and height of a box. + grid_box = [ point.x.floor, point.y.floor, state.paint_grid["dist_x"].ceil, state.paint_grid["dist_y"].ceil ] + + if input_type == :click # if user clicks their mouse + if state.filled_squares.include? grid_box # if grid box is already filled in + state.filled_squares.delete grid_box # box is cleared and removed from filled_squares + else + state.filled_squares << grid_box # otherwise, box is filled in and added to filled_squares + end + elsif input_type == :drag # if user drags mouse + unless state.filled_squares.include? grid_box # unless the grid box dragged over is already filled in + state.filled_squares << grid_box # the box is filled in and added to filled_squares + end + end + end + + # Creates and outputs a "Clear" button on the screen using a label and a border. + # If the button is clicked, the filled squares are cleared, making the filled_squares collection empty. + def draw_buttons + x, y, w, h = 390, 50, 240, 50 + state.clear_button ||= state.new_entity(:button_with_fade) + + # The x and y positions are set to display the label in the center of the button. + # Try changing the first two parameters to simply x, y and see what happens to the text placement! + state.clear_button.label ||= [x + w.half, y + h.half + 10, "Clear", 0, 1] # placed in center of border + state.clear_button.border ||= [x, y, w, h] + + # If the mouse is clicked inside the borders of the clear button, + # the filled_squares collection is emptied and the squares are cleared. + if inputs.mouse.click && inputs.mouse.click.point.inside_rect?(state.clear_button.border) + state.clear_button.clicked_at = inputs.mouse.click.created_at # time (frame) the click occurred + state.filled_squares.clear + inputs.mouse.previous_click = nil + end + + outputs.labels << state.clear_button.label + outputs.borders << state.clear_button.border + + # When the clear button is clicked, the color of the button changes + # and the transparency changes, as well. If you change the time from + # 0.25.seconds to 1.25.seconds or more, the change will last longer. + if state.clear_button.clicked_at + outputs.solids << [x, y, w, h, 0, 180, 80, 255 * state.clear_button.clicked_at.ease(0.25.seconds, :flip)] + end + end +end + +$paint_app = PaintApp.new + +def tick args + $paint_app.inputs = args.inputs + $paint_app.state = args.state + $paint_app.grid = args.grid + $paint_app.args = args + $paint_app.outputs = args.outputs + $paint_app.tick + tick_instructions args, "How to create a simple paint app. CLICK and HOLD to draw." +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/05_mouse/05_mouse_move_paint_app/license-for-sample.txt b/samples/05_mouse/05_mouse_move_paint_app/license-for-sample.txt new file mode 100644 index 0000000..5c0563d --- /dev/null +++ b/samples/05_mouse/05_mouse_move_paint_app/license-for-sample.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 DragonRuby LLC, Ananth Vivekanand, Sahil Jain + +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/05_mouse/05_mouse_move_paint_app/replay.txt b/samples/05_mouse/05_mouse_move_paint_app/replay.txt new file mode 100644 index 0000000..2f4753c --- /dev/null +++ b/samples/05_mouse/05_mouse_move_paint_app/replay.txt @@ -0,0 +1,238 @@ +replay_version 2.0 +stopped_at 629 +seed 100 +recorded_at Sun Sep 29 22:17:52 2019 +[:mouse_move, 539, 647, 2, 1, 151] +[:mouse_move, 545, 636, 2, 2, 152] +[:mouse_move, 552, 618, 2, 3, 153] +[:mouse_move, 556, 607, 2, 4, 154] +[:mouse_move, 572, 557, 2, 5, 155] +[:mouse_move, 576, 542, 2, 6, 156] +[:mouse_move, 593, 468, 2, 7, 157] +[:mouse_move, 594, 454, 2, 8, 158] +[:mouse_move, 600, 410, 2, 9, 159] +[:mouse_move, 602, 354, 2, 10, 160] +[:mouse_move, 603, 327, 2, 11, 161] +[:mouse_move, 605, 290, 2, 12, 162] +[:mouse_move, 605, 281, 2, 13, 163] +[:mouse_move, 606, 265, 2, 14, 164] +[:mouse_move, 606, 256, 2, 15, 165] +[:mouse_move, 606, 246, 2, 16, 166] +[:mouse_move, 606, 242, 2, 17, 167] +[:mouse_move, 606, 240, 2, 18, 168] +[:mouse_move, 606, 239, 2, 19, 171] +[:mouse_move, 606, 238, 2, 20, 174] +[:mouse_move, 606, 239, 2, 21, 191] +[:mouse_move, 606, 241, 2, 22, 199] +[:mouse_move, 606, 243, 2, 23, 200] +[:mouse_move, 606, 249, 2, 24, 201] +[:mouse_move, 605, 253, 2, 25, 203] +[:mouse_move, 603, 254, 2, 26, 204] +[:mouse_move, 601, 257, 2, 27, 205] +[:mouse_move, 599, 258, 2, 28, 206] +[:mouse_move, 595, 259, 2, 29, 207] +[:mouse_move, 594, 260, 2, 30, 208] +[:mouse_move, 589, 260, 2, 31, 209] +[:mouse_move, 587, 260, 2, 32, 210] +[:mouse_move, 580, 259, 2, 33, 211] +[:mouse_move, 579, 258, 2, 34, 212] +[:mouse_move, 576, 257, 2, 35, 214] +[:mouse_move, 575, 257, 2, 36, 215] +[:mouse_move, 574, 257, 2, 37, 216] +[:mouse_move, 573, 257, 2, 38, 217] +[:mouse_move, 570, 257, 2, 39, 218] +[:mouse_move, 566, 257, 2, 40, 219] +[:mouse_move, 562, 258, 2, 41, 220] +[:mouse_move, 558, 259, 2, 42, 222] +[:mouse_move, 557, 259, 2, 43, 223] +[:mouse_move, 554, 260, 2, 44, 224] +[:mouse_move, 553, 260, 2, 45, 226] +[:mouse_move, 552, 260, 2, 46, 228] +[:mouse_move, 551, 260, 2, 47, 229] +[:mouse_move, 550, 260, 2, 48, 230] +[:mouse_move, 548, 259, 2, 49, 232] +[:mouse_move, 547, 259, 2, 50, 234] +[:mouse_move, 546, 259, 2, 51, 235] +[:mouse_move, 545, 259, 2, 52, 239] +[:mouse_move, 544, 259, 2, 53, 242] +[:mouse_move, 542, 259, 2, 54, 243] +[:mouse_move, 540, 259, 2, 55, 245] +[:mouse_move, 539, 259, 2, 56, 246] +[:mouse_move, 537, 259, 2, 57, 247] +[:mouse_move, 536, 259, 2, 58, 248] +[:mouse_move, 535, 259, 2, 59, 249] +[:mouse_move, 534, 259, 2, 60, 250] +[:mouse_move, 533, 259, 2, 61, 251] +[:mouse_button_pressed, 1, 0, 1, 62, 257] +[:mouse_button_up, 1, 0, 1, 63, 265] +[:mouse_move, 535, 261, 2, 64, 278] +[:mouse_move, 544, 266, 2, 65, 279] +[:mouse_move, 550, 270, 2, 66, 280] +[:mouse_move, 559, 274, 2, 67, 281] +[:mouse_move, 581, 280, 2, 68, 282] +[:mouse_move, 606, 287, 2, 69, 283] +[:mouse_move, 635, 291, 2, 70, 284] +[:mouse_move, 654, 293, 2, 71, 285] +[:mouse_move, 677, 293, 2, 72, 286] +[:mouse_move, 691, 293, 2, 73, 287] +[:mouse_move, 721, 290, 2, 74, 288] +[:mouse_move, 734, 286, 2, 75, 290] +[:mouse_move, 740, 283, 2, 76, 291] +[:mouse_move, 746, 279, 2, 77, 292] +[:mouse_move, 748, 277, 2, 78, 293] +[:mouse_move, 752, 273, 2, 79, 294] +[:mouse_move, 753, 271, 2, 80, 295] +[:mouse_move, 754, 268, 2, 81, 296] +[:mouse_move, 755, 265, 2, 82, 297] +[:mouse_move, 756, 265, 2, 83, 298] +[:mouse_move, 756, 263, 2, 84, 299] +[:mouse_move, 757, 262, 2, 85, 300] +[:mouse_move, 757, 261, 2, 86, 302] +[:mouse_move, 756, 260, 2, 87, 311] +[:mouse_move, 755, 260, 2, 88, 312] +[:mouse_move, 752, 259, 2, 89, 313] +[:mouse_move, 751, 258, 2, 90, 314] +[:mouse_move, 748, 258, 2, 91, 315] +[:mouse_move, 747, 258, 2, 92, 316] +[:mouse_move, 746, 257, 2, 93, 317] +[:mouse_move, 745, 257, 2, 94, 318] +[:mouse_move, 743, 257, 2, 95, 330] +[:mouse_move, 742, 258, 2, 96, 331] +[:mouse_move, 738, 259, 2, 97, 332] +[:mouse_move, 736, 260, 2, 98, 334] +[:mouse_move, 735, 260, 2, 99, 335] +[:mouse_move, 734, 260, 2, 100, 336] +[:mouse_move, 733, 260, 2, 101, 338] +[:mouse_move, 732, 260, 2, 102, 340] +[:mouse_move, 731, 260, 2, 103, 341] +[:mouse_move, 730, 260, 2, 104, 343] +[:mouse_move, 729, 260, 2, 105, 347] +[:mouse_move, 727, 260, 2, 106, 349] +[:mouse_move, 723, 260, 2, 107, 351] +[:mouse_move, 721, 260, 2, 108, 353] +[:mouse_move, 720, 260, 2, 109, 354] +[:mouse_button_pressed, 1, 0, 1, 110, 363] +[:mouse_button_up, 1, 0, 1, 111, 368] +[:mouse_move, 720, 271, 2, 112, 382] +[:mouse_move, 720, 279, 2, 113, 383] +[:mouse_move, 714, 297, 2, 114, 384] +[:mouse_move, 710, 307, 2, 115, 385] +[:mouse_move, 687, 346, 2, 116, 386] +[:mouse_move, 670, 365, 2, 117, 387] +[:mouse_move, 632, 399, 2, 118, 388] +[:mouse_move, 612, 411, 2, 119, 389] +[:mouse_move, 584, 420, 2, 120, 390] +[:mouse_move, 577, 420, 2, 121, 391] +[:mouse_move, 548, 422, 2, 122, 392] +[:mouse_move, 537, 416, 2, 123, 394] +[:mouse_move, 533, 411, 2, 124, 395] +[:mouse_move, 526, 401, 2, 125, 396] +[:mouse_move, 524, 396, 2, 126, 397] +[:mouse_move, 520, 386, 2, 127, 398] +[:mouse_move, 518, 381, 2, 128, 399] +[:mouse_move, 514, 371, 2, 129, 400] +[:mouse_move, 513, 370, 2, 130, 401] +[:mouse_move, 510, 366, 2, 131, 402] +[:mouse_move, 509, 364, 2, 132, 403] +[:mouse_move, 507, 362, 2, 133, 404] +[:mouse_move, 501, 362, 2, 134, 405] +[:mouse_move, 496, 362, 2, 135, 406] +[:mouse_move, 487, 362, 2, 136, 407] +[:mouse_move, 482, 362, 2, 137, 408] +[:mouse_move, 475, 362, 2, 138, 409] +[:mouse_move, 472, 362, 2, 139, 410] +[:mouse_move, 468, 363, 2, 140, 411] +[:mouse_move, 467, 363, 2, 141, 412] +[:mouse_move, 466, 363, 2, 142, 413] +[:mouse_move, 470, 363, 2, 143, 442] +[:mouse_move, 473, 363, 2, 144, 443] +[:mouse_move, 474, 362, 2, 145, 444] +[:mouse_move, 474, 361, 2, 146, 445] +[:mouse_move, 476, 360, 2, 147, 446] +[:mouse_move, 477, 358, 2, 148, 447] +[:mouse_move, 478, 355, 2, 149, 448] +[:mouse_move, 479, 354, 2, 150, 449] +[:mouse_move, 480, 351, 2, 151, 450] +[:mouse_move, 481, 350, 2, 152, 452] +[:mouse_move, 481, 349, 2, 153, 453] +[:mouse_button_pressed, 1, 0, 1, 154, 474] +[:mouse_move, 481, 350, 2, 155, 474] +[:mouse_move, 483, 354, 2, 156, 475] +[:mouse_move, 484, 359, 2, 157, 476] +[:mouse_move, 491, 374, 2, 158, 477] +[:mouse_move, 495, 383, 2, 159, 479] +[:mouse_move, 497, 388, 2, 160, 480] +[:mouse_move, 499, 391, 2, 161, 481] +[:mouse_move, 503, 398, 2, 162, 482] +[:mouse_move, 509, 408, 2, 163, 483] +[:mouse_move, 511, 411, 2, 164, 485] +[:mouse_move, 515, 417, 2, 165, 486] +[:mouse_move, 517, 421, 2, 166, 487] +[:mouse_move, 521, 425, 2, 167, 488] +[:mouse_move, 523, 428, 2, 168, 489] +[:mouse_move, 526, 431, 2, 169, 490] +[:mouse_move, 528, 433, 2, 170, 491] +[:mouse_move, 533, 437, 2, 171, 492] +[:mouse_move, 536, 440, 2, 172, 493] +[:mouse_move, 546, 447, 2, 173, 494] +[:mouse_move, 551, 451, 2, 174, 495] +[:mouse_move, 566, 461, 2, 175, 496] +[:mouse_move, 582, 470, 2, 176, 497] +[:mouse_move, 590, 473, 2, 177, 498] +[:mouse_move, 597, 476, 2, 178, 499] +[:mouse_move, 611, 482, 2, 179, 500] +[:mouse_move, 622, 486, 2, 180, 501] +[:mouse_move, 628, 488, 2, 181, 502] +[:mouse_move, 632, 489, 2, 182, 503] +[:mouse_move, 638, 491, 2, 183, 504] +[:mouse_move, 644, 491, 2, 184, 505] +[:mouse_move, 651, 492, 2, 185, 506] +[:mouse_move, 660, 492, 2, 186, 507] +[:mouse_move, 665, 492, 2, 187, 508] +[:mouse_move, 669, 491, 2, 188, 509] +[:mouse_move, 681, 489, 2, 189, 510] +[:mouse_move, 685, 489, 2, 190, 512] +[:mouse_move, 692, 487, 2, 191, 513] +[:mouse_move, 697, 485, 2, 192, 514] +[:mouse_move, 705, 482, 2, 193, 515] +[:mouse_move, 709, 480, 2, 194, 516] +[:mouse_move, 717, 475, 2, 195, 517] +[:mouse_move, 721, 473, 2, 196, 518] +[:mouse_move, 730, 467, 2, 197, 519] +[:mouse_move, 733, 464, 2, 198, 520] +[:mouse_move, 741, 458, 2, 199, 521] +[:mouse_move, 746, 455, 2, 200, 522] +[:mouse_move, 753, 448, 2, 201, 523] +[:mouse_move, 761, 440, 2, 202, 524] +[:mouse_move, 763, 438, 2, 203, 525] +[:mouse_move, 767, 434, 2, 204, 526] +[:mouse_move, 772, 426, 2, 205, 527] +[:mouse_move, 774, 423, 2, 206, 528] +[:mouse_move, 778, 415, 2, 207, 529] +[:mouse_move, 782, 407, 2, 208, 530] +[:mouse_move, 783, 402, 2, 209, 531] +[:mouse_move, 785, 396, 2, 210, 532] +[:mouse_move, 789, 385, 2, 211, 533] +[:mouse_move, 791, 377, 2, 212, 534] +[:mouse_move, 791, 373, 2, 213, 535] +[:mouse_move, 792, 369, 2, 214, 536] +[:mouse_move, 793, 357, 2, 215, 537] +[:mouse_move, 794, 354, 2, 216, 539] +[:mouse_move, 795, 348, 2, 217, 540] +[:mouse_move, 795, 346, 2, 218, 541] +[:mouse_move, 796, 342, 2, 219, 542] +[:mouse_move, 796, 341, 2, 220, 543] +[:mouse_move, 796, 340, 2, 221, 544] +[:mouse_move, 796, 339, 2, 222, 545] +[:mouse_move, 797, 339, 2, 223, 546] +[:mouse_move, 797, 338, 2, 224, 547] +[:mouse_button_up, 1, 0, 1, 225, 564] +[:mouse_move, 807, 344, 2, 226, 564] +[:mouse_move, 834, 357, 2, 227, 566] +[:mouse_move, 858, 367, 2, 228, 567] +[:mouse_move, 870, 370, 2, 229, 568] +[:mouse_move, 912, 379, 2, 230, 569] +[:mouse_move, 929, 380, 2, 231, 570] +[:key_down_raw, 1073742051, 1024, 2, 232, 627] +[:key_down_raw, 113, 1024, 2, 233, 628] +[:key_up_raw, 113, 1024, 2, 234, 628] diff --git a/samples/05_mouse/06_coordinate_systems/app/main.rb b/samples/05_mouse/06_coordinate_systems/app/main.rb new file mode 100644 index 0000000..fcfa090 --- /dev/null +++ b/samples/05_mouse/06_coordinate_systems/app/main.rb @@ -0,0 +1,80 @@ +=begin + + APIs listing that haven't been encountered in previous sample apps: + + - args.inputs.mouse.click.position: Coordinates of the mouse's position on the screen. + Unlike args.inputs.mouse.click.point, the mouse does not need to be pressed down for + position to know the mouse's coordinates. + For more information about the mouse, go to mygame/documentation/07-mouse.md. + + Reminders: + + - 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. + + - String interpolation: Uses #{} syntax; everything between the #{ and the } is evaluated + as Ruby code, and the placeholder is replaced with its corresponding value or result. + + In this sample app, string interpolation is used to show the current position of the mouse + in a label. + + - args.outputs.labels: An array that generates a label. + The parameters are [X, Y, TEXT, SIZE, ALIGN, RED, GREEN, BLUE, ALPHA, FONT STYLE] + For more information about labels, go to mygame/documentation/02-labels.md. + + - args.outputs.solids: An array that generates a solid. + The parameters are [X, Y, WIDTH, HEIGHT, RED, GREEN, BLUE, ALPHA] + For more information about solids, go to mygame/documentation/03-solids-and-borders.md. + + - args.outputs.lines: An array that generates a line. + The parameters are [X, Y, X2, Y2, RED, GREEN, BLUE, ALPHA] + For more information about lines, go to mygame/documentation/04-lines.md. + +=end + +# This sample app shows a coordinate system or grid. The user can move their mouse around the screen and the +# coordinates of their position on the screen will be displayed. Users can choose to view one quadrant or +# four quadrants by pressing the button. + +def tick args + + # The addition and subtraction in the first two parameters of the label and solid + # ensure that the outputs don't overlap each other. Try removing them and see what happens. + pos = args.inputs.mouse.position # stores coordinates of mouse's position + args.outputs.labels << [pos.x + 10, pos.y + 10, "#{pos}"] # outputs label of coordinates + args.outputs.solids << [pos.x - 2, pos.y - 2, 5, 5] # outputs small blackk box placed where mouse is hovering + + button = [0, 0, 370, 50] # sets definition of toggle button + args.outputs.borders << button # outputs button as border (not filled in) + args.outputs.labels << [10, 35, "click here toggle coordinate system"] # label of button + args.outputs.lines << [ 0, -720, 0, 720] # vertical line dividing quadrants + args.outputs.lines << [-1280, 0, 1280, 0] # horizontal line dividing quadrants + + if args.inputs.mouse.click # if the user clicks the mouse + pos = args.inputs.mouse.click.point # pos's value is point where user clicked (coordinates) + if pos.inside_rect? button # if the click occurred inside the button + if args.grid.name == :bottom_left # if the grid shows bottom left as origin + args.grid.origin_center! # origin will be shown in center + else + args.grid.origin_bottom_left! # otherwise, the view will change to show bottom left as origin + end + end + end + + tick_instructions args, "Sample app shows the two supported coordinate systems in Game Toolkit." +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/05_mouse/06_coordinate_systems/license-for-sample.txt b/samples/05_mouse/06_coordinate_systems/license-for-sample.txt new file mode 100644 index 0000000..100dcec --- /dev/null +++ b/samples/05_mouse/06_coordinate_systems/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/05_mouse/06_coordinate_systems/replay.txt b/samples/05_mouse/06_coordinate_systems/replay.txt new file mode 100644 index 0000000..d426464 --- /dev/null +++ b/samples/05_mouse/06_coordinate_systems/replay.txt @@ -0,0 +1,526 @@ +replay_version 2.0 +stopped_at 1360 +seed 100 +recorded_at Sun Sep 29 22:19:52 2019 +[:mouse_move, 1084, 546, 2, 1, 72] +[:mouse_move, 1074, 545, 2, 2, 73] +[:mouse_move, 1022, 539, 2, 3, 74] +[:mouse_move, 984, 535, 2, 4, 75] +[:mouse_move, 885, 523, 2, 5, 76] +[:mouse_move, 862, 521, 2, 6, 77] +[:mouse_move, 755, 515, 2, 7, 78] +[:mouse_move, 712, 515, 2, 8, 79] +[:mouse_move, 660, 515, 2, 9, 80] +[:mouse_move, 629, 516, 2, 10, 81] +[:mouse_move, 579, 524, 2, 11, 82] +[:mouse_move, 558, 530, 2, 12, 83] +[:mouse_move, 518, 543, 2, 13, 84] +[:mouse_move, 500, 550, 2, 14, 85] +[:mouse_move, 467, 562, 2, 15, 86] +[:mouse_move, 454, 567, 2, 16, 87] +[:mouse_move, 439, 573, 2, 17, 88] +[:mouse_move, 431, 577, 2, 18, 89] +[:mouse_move, 412, 586, 2, 19, 90] +[:mouse_move, 404, 589, 2, 20, 91] +[:mouse_move, 384, 597, 2, 21, 92] +[:mouse_move, 371, 601, 2, 22, 93] +[:mouse_move, 358, 605, 2, 23, 94] +[:mouse_move, 341, 611, 2, 24, 95] +[:mouse_move, 330, 615, 2, 25, 96] +[:mouse_move, 311, 622, 2, 26, 97] +[:mouse_move, 302, 625, 2, 27, 98] +[:mouse_move, 280, 635, 2, 28, 99] +[:mouse_move, 274, 637, 2, 29, 100] +[:mouse_move, 261, 642, 2, 30, 101] +[:mouse_move, 256, 642, 2, 31, 119] +[:mouse_move, 255, 641, 2, 32, 120] +[:mouse_move, 252, 641, 2, 33, 121] +[:mouse_move, 248, 640, 2, 34, 122] +[:mouse_move, 243, 639, 2, 35, 123] +[:mouse_move, 240, 637, 2, 36, 124] +[:mouse_move, 238, 636, 2, 37, 125] +[:mouse_move, 235, 634, 2, 38, 126] +[:mouse_move, 234, 633, 2, 39, 127] +[:mouse_move, 230, 631, 2, 40, 128] +[:mouse_move, 230, 630, 2, 41, 129] +[:mouse_move, 225, 628, 2, 42, 130] +[:mouse_move, 223, 628, 2, 43, 131] +[:mouse_move, 216, 626, 2, 44, 132] +[:mouse_move, 212, 626, 2, 45, 133] +[:mouse_move, 203, 626, 2, 46, 134] +[:mouse_move, 198, 626, 2, 47, 135] +[:mouse_move, 188, 626, 2, 48, 136] +[:mouse_move, 183, 626, 2, 49, 137] +[:mouse_move, 173, 626, 2, 50, 138] +[:mouse_move, 171, 626, 2, 51, 139] +[:mouse_move, 165, 625, 2, 52, 140] +[:mouse_move, 163, 625, 2, 53, 141] +[:mouse_move, 161, 624, 2, 54, 142] +[:mouse_move, 160, 624, 2, 55, 143] +[:mouse_move, 160, 623, 2, 56, 144] +[:mouse_move, 158, 622, 2, 57, 147] +[:mouse_move, 157, 621, 2, 58, 148] +[:mouse_move, 149, 618, 2, 59, 149] +[:mouse_move, 145, 616, 2, 60, 150] +[:mouse_move, 135, 613, 2, 61, 151] +[:mouse_move, 132, 612, 2, 62, 152] +[:mouse_move, 125, 610, 2, 63, 153] +[:mouse_move, 122, 609, 2, 64, 154] +[:mouse_move, 114, 608, 2, 65, 155] +[:mouse_move, 111, 608, 2, 66, 156] +[:mouse_move, 107, 608, 2, 67, 157] +[:mouse_move, 104, 608, 2, 68, 158] +[:mouse_move, 99, 608, 2, 69, 159] +[:mouse_move, 95, 608, 2, 70, 160] +[:mouse_move, 89, 607, 2, 71, 161] +[:mouse_move, 85, 607, 2, 72, 162] +[:mouse_move, 75, 605, 2, 73, 163] +[:mouse_move, 70, 604, 2, 74, 164] +[:mouse_move, 60, 602, 2, 75, 165] +[:mouse_move, 55, 601, 2, 76, 166] +[:mouse_move, 48, 599, 2, 77, 167] +[:mouse_move, 44, 598, 2, 78, 168] +[:mouse_move, 35, 595, 2, 79, 169] +[:mouse_move, 35, 598, 2, 80, 190] +[:mouse_move, 35, 601, 2, 81, 191] +[:mouse_move, 34, 608, 2, 82, 192] +[:mouse_move, 33, 613, 2, 83, 193] +[:mouse_move, 32, 625, 2, 84, 194] +[:mouse_move, 31, 630, 2, 85, 195] +[:mouse_move, 29, 636, 2, 86, 196] +[:mouse_move, 29, 640, 2, 87, 197] +[:mouse_move, 27, 645, 2, 88, 198] +[:mouse_move, 26, 647, 2, 89, 199] +[:mouse_move, 25, 650, 2, 90, 200] +[:mouse_move, 24, 657, 2, 91, 201] +[:mouse_move, 24, 661, 2, 92, 202] +[:mouse_move, 23, 672, 2, 93, 203] +[:mouse_move, 23, 678, 2, 94, 204] +[:mouse_move, 23, 684, 2, 95, 205] +[:mouse_move, 23, 689, 2, 96, 219] +[:mouse_move, 22, 692, 2, 97, 220] +[:mouse_move, 22, 697, 2, 98, 221] +[:mouse_move, 22, 699, 2, 99, 222] +[:mouse_move, 20, 705, 2, 100, 223] +[:mouse_move, 20, 707, 2, 101, 224] +[:mouse_move, 19, 709, 2, 102, 225] +[:mouse_move, 19, 710, 2, 103, 226] +[:mouse_move, 18, 711, 2, 104, 228] +[:mouse_move, 17, 712, 2, 105, 229] +[:mouse_move, 16, 712, 2, 106, 230] +[:mouse_move, 15, 712, 2, 107, 231] +[:mouse_move, 14, 713, 2, 108, 232] +[:mouse_move, 13, 714, 2, 109, 233] +[:mouse_move, 12, 714, 2, 110, 234] +[:mouse_move, 10, 715, 2, 111, 236] +[:mouse_move, 8, 715, 2, 112, 238] +[:mouse_move, 6, 715, 2, 113, 240] +[:mouse_move, 5, 715, 2, 114, 241] +[:mouse_move, 4, 714, 2, 115, 242] +[:mouse_move, 3, 713, 2, 116, 243] +[:mouse_move, 3, 712, 2, 117, 244] +[:mouse_move, 2, 712, 2, 118, 245] +[:mouse_move, 2, 711, 2, 119, 246] +[:mouse_move, 2, 710, 2, 120, 249] +[:mouse_move, 2, 709, 2, 121, 261] +[:mouse_move, 3, 709, 2, 122, 262] +[:mouse_move, 3, 710, 2, 123, 275] +[:mouse_move, 4, 710, 2, 124, 292] +[:mouse_move, 5, 710, 2, 125, 296] +[:mouse_move, 6, 710, 2, 126, 302] +[:mouse_move, 5, 710, 2, 127, 336] +[:mouse_move, 5, 711, 2, 128, 339] +[:mouse_move, 4, 711, 2, 129, 342] +[:mouse_move, 3, 711, 2, 130, 347] +[:mouse_move, 3, 712, 2, 131, 350] +[:mouse_move, 3, 713, 2, 132, 355] +[:mouse_move, 3, 714, 2, 133, 359] +[:mouse_move, 9, 713, 2, 134, 394] +[:mouse_move, 19, 712, 2, 135, 395] +[:mouse_move, 24, 711, 2, 136, 396] +[:mouse_move, 30, 711, 2, 137, 397] +[:mouse_move, 41, 710, 2, 138, 398] +[:mouse_move, 46, 710, 2, 139, 399] +[:mouse_move, 55, 710, 2, 140, 400] +[:mouse_move, 57, 710, 2, 141, 401] +[:mouse_move, 63, 709, 2, 142, 402] +[:mouse_move, 66, 709, 2, 143, 403] +[:mouse_move, 69, 709, 2, 144, 404] +[:mouse_move, 70, 708, 2, 145, 405] +[:mouse_move, 71, 708, 2, 146, 406] +[:mouse_move, 72, 708, 2, 147, 408] +[:mouse_move, 73, 707, 2, 148, 410] +[:mouse_move, 74, 707, 2, 149, 413] +[:mouse_move, 75, 707, 2, 150, 414] +[:mouse_move, 75, 706, 2, 151, 415] +[:mouse_move, 76, 706, 2, 152, 416] +[:mouse_move, 77, 706, 2, 153, 417] +[:mouse_move, 78, 705, 2, 154, 420] +[:mouse_button_pressed, 1, 0, 1, 155, 433] +[:mouse_button_up, 1, 0, 1, 156, 439] +[:mouse_move, 86, 704, 2, 157, 464] +[:mouse_move, 95, 702, 2, 158, 465] +[:mouse_move, 117, 697, 2, 159, 466] +[:mouse_move, 144, 690, 2, 160, 467] +[:mouse_move, 210, 668, 2, 161, 468] +[:mouse_move, 246, 654, 2, 162, 469] +[:mouse_move, 319, 621, 2, 163, 470] +[:mouse_move, 352, 605, 2, 164, 471] +[:mouse_move, 384, 590, 2, 165, 472] +[:mouse_move, 423, 571, 2, 166, 473] +[:mouse_move, 442, 562, 2, 167, 474] +[:mouse_move, 473, 544, 2, 168, 475] +[:mouse_move, 484, 535, 2, 169, 476] +[:mouse_move, 497, 523, 2, 170, 477] +[:mouse_move, 505, 516, 2, 171, 478] +[:mouse_move, 514, 505, 2, 172, 479] +[:mouse_move, 520, 500, 2, 173, 480] +[:mouse_move, 528, 490, 2, 174, 481] +[:mouse_move, 531, 486, 2, 175, 482] +[:mouse_move, 538, 479, 2, 176, 483] +[:mouse_move, 541, 475, 2, 177, 484] +[:mouse_move, 551, 461, 2, 178, 485] +[:mouse_move, 555, 453, 2, 179, 486] +[:mouse_move, 567, 432, 2, 180, 487] +[:mouse_move, 575, 421, 2, 181, 488] +[:mouse_move, 594, 392, 2, 182, 489] +[:mouse_move, 603, 380, 2, 183, 490] +[:mouse_move, 616, 363, 2, 184, 491] +[:mouse_move, 619, 360, 2, 185, 492] +[:mouse_move, 627, 351, 2, 186, 493] +[:mouse_move, 629, 349, 2, 187, 494] +[:mouse_move, 631, 349, 2, 188, 507] +[:mouse_move, 632, 350, 2, 189, 508] +[:mouse_move, 633, 350, 2, 190, 509] +[:mouse_move, 633, 351, 2, 191, 510] +[:mouse_move, 634, 351, 2, 192, 511] +[:mouse_move, 634, 352, 2, 193, 513] +[:mouse_move, 635, 353, 2, 194, 514] +[:mouse_move, 636, 354, 2, 195, 515] +[:mouse_move, 636, 356, 2, 196, 516] +[:mouse_move, 637, 356, 2, 197, 517] +[:mouse_move, 637, 357, 2, 198, 518] +[:mouse_move, 638, 357, 2, 199, 520] +[:mouse_move, 638, 358, 2, 200, 521] +[:mouse_move, 639, 358, 2, 201, 523] +[:mouse_move, 639, 359, 2, 202, 531] +[:mouse_move, 640, 359, 2, 203, 537] +[:mouse_move, 640, 360, 2, 204, 545] +[:mouse_move, 641, 360, 2, 205, 547] +[:mouse_move, 641, 361, 2, 206, 550] +[:mouse_move, 641, 360, 2, 207, 573] +[:mouse_move, 640, 360, 2, 208, 617] +[:mouse_move, 639, 360, 2, 209, 623] +[:mouse_move, 638, 360, 2, 210, 626] +[:mouse_move, 639, 360, 2, 211, 648] +[:mouse_move, 640, 360, 2, 212, 664] +[:mouse_move, 639, 360, 2, 213, 792] +[:mouse_move, 636, 361, 2, 214, 793] +[:mouse_move, 617, 369, 2, 215, 794] +[:mouse_move, 599, 375, 2, 216, 795] +[:mouse_move, 524, 405, 2, 217, 796] +[:mouse_move, 486, 421, 2, 218, 797] +[:mouse_move, 467, 431, 2, 219, 798] +[:mouse_move, 394, 468, 2, 220, 799] +[:mouse_move, 361, 484, 2, 221, 800] +[:mouse_move, 324, 502, 2, 222, 801] +[:mouse_move, 304, 512, 2, 223, 802] +[:mouse_move, 285, 522, 2, 224, 803] +[:mouse_move, 273, 528, 2, 225, 804] +[:mouse_move, 257, 536, 2, 226, 805] +[:mouse_move, 251, 538, 2, 227, 806] +[:mouse_move, 240, 543, 2, 228, 807] +[:mouse_move, 236, 545, 2, 229, 808] +[:mouse_move, 227, 549, 2, 230, 809] +[:mouse_move, 223, 551, 2, 231, 810] +[:mouse_move, 212, 557, 2, 232, 811] +[:mouse_move, 205, 560, 2, 233, 812] +[:mouse_move, 193, 565, 2, 234, 813] +[:mouse_move, 187, 568, 2, 235, 814] +[:mouse_move, 173, 574, 2, 236, 815] +[:mouse_move, 165, 577, 2, 237, 816] +[:mouse_move, 151, 583, 2, 238, 817] +[:mouse_move, 139, 590, 2, 239, 818] +[:mouse_move, 124, 600, 2, 240, 819] +[:mouse_move, 115, 606, 2, 241, 820] +[:mouse_move, 103, 617, 2, 242, 821] +[:mouse_move, 96, 623, 2, 243, 822] +[:mouse_move, 85, 636, 2, 244, 823] +[:mouse_move, 80, 641, 2, 245, 824] +[:mouse_move, 78, 644, 2, 246, 825] +[:mouse_move, 71, 653, 2, 247, 826] +[:mouse_move, 67, 659, 2, 248, 827] +[:mouse_move, 64, 665, 2, 249, 828] +[:mouse_move, 63, 668, 2, 250, 829] +[:mouse_move, 61, 672, 2, 251, 830] +[:mouse_move, 60, 675, 2, 252, 831] +[:mouse_move, 59, 678, 2, 253, 832] +[:mouse_move, 59, 680, 2, 254, 833] +[:mouse_move, 58, 682, 2, 255, 834] +[:mouse_move, 58, 683, 2, 256, 835] +[:mouse_move, 57, 684, 2, 257, 836] +[:mouse_move, 57, 685, 2, 258, 837] +[:mouse_move, 57, 686, 2, 259, 838] +[:mouse_move, 56, 686, 2, 260, 839] +[:mouse_move, 55, 687, 2, 261, 840] +[:mouse_move, 54, 688, 2, 262, 841] +[:mouse_move, 50, 689, 2, 263, 842] +[:mouse_move, 48, 689, 2, 264, 843] +[:mouse_move, 43, 690, 2, 265, 844] +[:mouse_move, 41, 691, 2, 266, 845] +[:mouse_move, 36, 692, 2, 267, 846] +[:mouse_move, 34, 692, 2, 268, 847] +[:mouse_move, 31, 693, 2, 269, 848] +[:mouse_move, 30, 693, 2, 270, 849] +[:mouse_move, 28, 694, 2, 271, 850] +[:mouse_move, 27, 694, 2, 272, 853] +[:mouse_move, 26, 695, 2, 273, 855] +[:mouse_move, 25, 696, 2, 274, 858] +[:mouse_move, 25, 697, 2, 275, 859] +[:mouse_move, 25, 698, 2, 276, 861] +[:mouse_move, 24, 699, 2, 277, 863] +[:mouse_move, 24, 700, 2, 278, 865] +[:mouse_move, 24, 701, 2, 279, 867] +[:mouse_move, 24, 702, 2, 280, 869] +[:mouse_move, 23, 703, 2, 281, 872] +[:mouse_move, 23, 704, 2, 282, 875] +[:mouse_move, 22, 704, 2, 283, 878] +[:mouse_move, 23, 704, 2, 284, 925] +[:mouse_move, 24, 703, 2, 285, 928] +[:mouse_move, 27, 702, 2, 286, 929] +[:mouse_move, 33, 699, 2, 287, 930] +[:mouse_move, 62, 686, 2, 288, 931] +[:mouse_move, 101, 668, 2, 289, 932] +[:mouse_move, 186, 626, 2, 290, 933] +[:mouse_move, 242, 597, 2, 291, 934] +[:mouse_move, 344, 544, 2, 292, 935] +[:mouse_move, 451, 486, 2, 293, 936] +[:mouse_move, 518, 450, 2, 294, 937] +[:mouse_move, 602, 404, 2, 295, 938] +[:mouse_move, 647, 378, 2, 296, 939] +[:mouse_move, 716, 337, 2, 297, 940] +[:mouse_move, 744, 321, 2, 298, 941] +[:mouse_move, 776, 300, 2, 299, 942] +[:mouse_move, 783, 295, 2, 300, 943] +[:mouse_move, 808, 276, 2, 301, 944] +[:mouse_move, 817, 268, 2, 302, 945] +[:mouse_move, 836, 248, 2, 303, 946] +[:mouse_move, 840, 244, 2, 304, 947] +[:mouse_move, 853, 229, 2, 305, 948] +[:mouse_move, 859, 223, 2, 306, 949] +[:mouse_move, 868, 214, 2, 307, 950] +[:mouse_move, 872, 211, 2, 308, 951] +[:mouse_move, 878, 206, 2, 309, 952] +[:mouse_move, 880, 205, 2, 310, 953] +[:mouse_move, 882, 204, 2, 311, 954] +[:mouse_move, 883, 204, 2, 312, 956] +[:mouse_move, 882, 208, 2, 313, 958] +[:mouse_move, 880, 211, 2, 314, 959] +[:mouse_move, 875, 219, 2, 315, 960] +[:mouse_move, 872, 223, 2, 316, 961] +[:mouse_move, 865, 231, 2, 317, 962] +[:mouse_move, 850, 243, 2, 318, 963] +[:mouse_move, 843, 249, 2, 319, 964] +[:mouse_move, 830, 260, 2, 320, 965] +[:mouse_move, 822, 265, 2, 321, 966] +[:mouse_move, 811, 276, 2, 322, 967] +[:mouse_move, 807, 281, 2, 323, 968] +[:mouse_move, 799, 290, 2, 324, 969] +[:mouse_move, 796, 295, 2, 325, 970] +[:mouse_move, 792, 303, 2, 326, 971] +[:mouse_move, 790, 307, 2, 327, 972] +[:mouse_move, 788, 313, 2, 328, 973] +[:mouse_move, 787, 316, 2, 329, 974] +[:mouse_move, 786, 318, 2, 330, 975] +[:mouse_move, 786, 319, 2, 331, 976] +[:mouse_move, 786, 320, 2, 332, 978] +[:mouse_move, 785, 320, 2, 333, 989] +[:mouse_move, 785, 321, 2, 334, 990] +[:mouse_move, 784, 322, 2, 335, 991] +[:mouse_move, 783, 324, 2, 336, 992] +[:mouse_move, 782, 325, 2, 337, 993] +[:mouse_move, 781, 326, 2, 338, 994] +[:mouse_move, 781, 327, 2, 339, 995] +[:mouse_button_pressed, 1, 0, 1, 340, 998] +[:mouse_button_up, 1, 0, 1, 341, 1006] +[:mouse_move, 771, 327, 2, 342, 1023] +[:mouse_move, 761, 330, 2, 343, 1024] +[:mouse_move, 704, 344, 2, 344, 1025] +[:mouse_move, 667, 355, 2, 345, 1026] +[:mouse_move, 578, 386, 2, 346, 1027] +[:mouse_move, 532, 407, 2, 347, 1028] +[:mouse_move, 468, 440, 2, 348, 1029] +[:mouse_move, 428, 462, 2, 349, 1030] +[:mouse_move, 360, 505, 2, 350, 1031] +[:mouse_move, 330, 523, 2, 351, 1032] +[:mouse_move, 296, 548, 2, 352, 1033] +[:mouse_move, 275, 564, 2, 353, 1034] +[:mouse_move, 239, 594, 2, 354, 1035] +[:mouse_move, 223, 609, 2, 355, 1036] +[:mouse_move, 194, 634, 2, 356, 1037] +[:mouse_move, 180, 647, 2, 357, 1038] +[:mouse_move, 155, 669, 2, 358, 1039] +[:mouse_move, 143, 680, 2, 359, 1040] +[:mouse_move, 135, 686, 2, 360, 1041] +[:mouse_move, 129, 690, 2, 361, 1042] +[:mouse_move, 119, 690, 2, 362, 1056] +[:mouse_move, 113, 690, 2, 363, 1057] +[:mouse_move, 94, 690, 2, 364, 1058] +[:mouse_move, 89, 690, 2, 365, 1059] +[:mouse_move, 72, 691, 2, 366, 1060] +[:mouse_move, 65, 691, 2, 367, 1061] +[:mouse_move, 57, 691, 2, 368, 1062] +[:mouse_move, 49, 691, 2, 369, 1063] +[:mouse_move, 41, 691, 2, 370, 1064] +[:mouse_move, 38, 691, 2, 371, 1065] +[:mouse_move, 33, 692, 2, 372, 1066] +[:mouse_move, 30, 693, 2, 373, 1067] +[:mouse_move, 22, 695, 2, 374, 1068] +[:mouse_move, 20, 697, 2, 375, 1069] +[:mouse_move, 17, 699, 2, 376, 1070] +[:mouse_move, 14, 702, 2, 377, 1071] +[:mouse_move, 12, 704, 2, 378, 1072] +[:mouse_move, 10, 706, 2, 379, 1073] +[:mouse_move, 9, 707, 2, 380, 1074] +[:mouse_move, 7, 710, 2, 381, 1075] +[:mouse_move, 6, 712, 2, 382, 1076] +[:mouse_move, 5, 714, 2, 383, 1077] +[:mouse_move, 5, 716, 2, 384, 1078] +[:mouse_move, 4, 718, 2, 385, 1079] +[:mouse_move, 4, 719, 2, 386, 1080] +[:mouse_move, 4, 719, 2, 387, 1081] +[:mouse_move, 5, 719, 2, 388, 1099] +[:mouse_move, 5, 718, 2, 389, 1099] +[:mouse_move, 6, 717, 2, 390, 1100] +[:mouse_move, 7, 715, 2, 391, 1101] +[:mouse_move, 7, 714, 2, 392, 1102] +[:mouse_move, 8, 713, 2, 393, 1103] +[:mouse_move, 9, 713, 2, 394, 1106] +[:mouse_move, 8, 713, 2, 395, 1118] +[:mouse_move, 20, 706, 2, 396, 1138] +[:mouse_move, 45, 692, 2, 397, 1139] +[:mouse_move, 77, 672, 2, 398, 1140] +[:mouse_move, 213, 586, 2, 399, 1141] +[:mouse_move, 285, 539, 2, 400, 1142] +[:mouse_move, 393, 465, 2, 401, 1143] +[:mouse_move, 460, 422, 2, 402, 1144] +[:mouse_move, 535, 375, 2, 403, 1145] +[:mouse_move, 577, 352, 2, 404, 1146] +[:mouse_move, 619, 330, 2, 405, 1147] +[:mouse_move, 642, 317, 2, 406, 1148] +[:mouse_move, 665, 304, 2, 407, 1149] +[:mouse_move, 678, 297, 2, 408, 1150] +[:mouse_move, 695, 287, 2, 409, 1151] +[:mouse_move, 702, 282, 2, 410, 1152] +[:mouse_move, 708, 280, 2, 411, 1153] +[:mouse_move, 713, 277, 2, 412, 1153] +[:mouse_move, 719, 275, 2, 413, 1154] +[:mouse_move, 724, 273, 2, 414, 1155] +[:mouse_move, 730, 272, 2, 415, 1155] +[:mouse_move, 735, 270, 2, 416, 1156] +[:mouse_move, 740, 269, 2, 417, 1157] +[:mouse_move, 746, 268, 2, 418, 1157] +[:mouse_move, 752, 266, 2, 419, 1158] +[:mouse_move, 763, 264, 2, 420, 1159] +[:mouse_move, 771, 261, 2, 421, 1159] +[:mouse_move, 779, 259, 2, 422, 1160] +[:mouse_move, 791, 255, 2, 423, 1161] +[:mouse_move, 812, 245, 2, 424, 1161] +[:mouse_move, 821, 241, 2, 425, 1162] +[:mouse_move, 837, 232, 2, 426, 1163] +[:mouse_move, 863, 214, 2, 427, 1163] +[:mouse_move, 872, 209, 2, 428, 1178] +[:mouse_move, 881, 203, 2, 429, 1179] +[:mouse_move, 890, 198, 2, 430, 1180] +[:mouse_move, 901, 192, 2, 431, 1180] +[:mouse_move, 913, 187, 2, 432, 1181] +[:mouse_move, 926, 181, 2, 433, 1182] +[:mouse_move, 950, 169, 2, 434, 1182] +[:mouse_move, 975, 157, 2, 435, 1183] +[:mouse_move, 986, 151, 2, 436, 1184] +[:mouse_move, 994, 147, 2, 437, 1184] +[:mouse_move, 1009, 138, 2, 438, 1185] +[:mouse_move, 1024, 129, 2, 439, 1186] +[:mouse_move, 1035, 122, 2, 440, 1186] +[:mouse_move, 1051, 110, 2, 441, 1187] +[:mouse_move, 1061, 104, 2, 442, 1188] +[:mouse_move, 1069, 98, 2, 443, 1188] +[:mouse_move, 1073, 95, 2, 444, 1189] +[:mouse_move, 1081, 90, 2, 445, 1190] +[:mouse_move, 1086, 86, 2, 446, 1190] +[:mouse_move, 1088, 84, 2, 447, 1191] +[:mouse_move, 1097, 79, 2, 448, 1192] +[:mouse_move, 1101, 76, 2, 449, 1192] +[:mouse_move, 1105, 74, 2, 450, 1193] +[:mouse_move, 1110, 73, 2, 451, 1194] +[:mouse_move, 1112, 72, 2, 452, 1194] +[:mouse_move, 1118, 70, 2, 453, 1195] +[:mouse_move, 1119, 70, 2, 454, 1196] +[:mouse_move, 1124, 68, 2, 455, 1197] +[:mouse_move, 1127, 67, 2, 456, 1198] +[:mouse_move, 1131, 66, 2, 457, 1199] +[:mouse_move, 1132, 65, 2, 458, 1200] +[:mouse_move, 1133, 64, 2, 459, 1201] +[:mouse_move, 1134, 64, 2, 460, 1201] +[:mouse_move, 1134, 63, 2, 461, 1203] +[:mouse_move, 1132, 62, 2, 462, 1204] +[:mouse_move, 1127, 62, 2, 463, 1205] +[:mouse_move, 1124, 62, 2, 464, 1206] +[:mouse_move, 1120, 62, 2, 465, 1207] +[:mouse_move, 1116, 62, 2, 466, 1207] +[:mouse_move, 1111, 62, 2, 467, 1208] +[:mouse_move, 1109, 62, 2, 468, 1209] +[:mouse_move, 1105, 62, 2, 469, 1209] +[:mouse_move, 1103, 63, 2, 470, 1210] +[:mouse_move, 1100, 63, 2, 471, 1211] +[:mouse_move, 1097, 64, 2, 472, 1211] +[:mouse_move, 1096, 64, 2, 473, 1212] +[:mouse_move, 1095, 65, 2, 474, 1213] +[:mouse_move, 1094, 65, 2, 475, 1213] +[:mouse_move, 1093, 65, 2, 476, 1214] +[:mouse_move, 1092, 65, 2, 477, 1216] +[:mouse_move, 1092, 64, 2, 478, 1217] +[:mouse_move, 1091, 63, 2, 479, 1218] +[:mouse_move, 1089, 61, 2, 480, 1219] +[:mouse_move, 1087, 60, 2, 481, 1219] +[:mouse_move, 1085, 59, 2, 482, 1220] +[:mouse_move, 1083, 58, 2, 483, 1221] +[:mouse_move, 1081, 57, 2, 484, 1221] +[:mouse_move, 1079, 56, 2, 485, 1222] +[:mouse_move, 1078, 55, 2, 486, 1223] +[:mouse_move, 1077, 54, 2, 487, 1223] +[:mouse_move, 1076, 54, 2, 488, 1224] +[:mouse_move, 1076, 53, 2, 489, 1225] +[:mouse_move, 1076, 52, 2, 490, 1226] +[:mouse_move, 1076, 51, 2, 491, 1227] +[:mouse_move, 1077, 51, 2, 492, 1228] +[:mouse_move, 1078, 50, 2, 493, 1229] +[:mouse_move, 1079, 50, 2, 494, 1230] +[:mouse_move, 1081, 49, 2, 495, 1231] +[:mouse_move, 1084, 48, 2, 496, 1232] +[:mouse_move, 1085, 48, 2, 497, 1233] +[:mouse_move, 1087, 47, 2, 498, 1234] +[:mouse_move, 1089, 46, 2, 499, 1234] +[:mouse_move, 1092, 45, 2, 500, 1235] +[:mouse_move, 1092, 44, 2, 501, 1236] +[:mouse_move, 1095, 44, 2, 502, 1236] +[:mouse_move, 1097, 43, 2, 503, 1237] +[:mouse_move, 1099, 42, 2, 504, 1238] +[:mouse_move, 1100, 42, 2, 505, 1238] +[:mouse_move, 1102, 41, 2, 506, 1239] +[:mouse_move, 1103, 41, 2, 507, 1240] +[:mouse_move, 1105, 41, 2, 508, 1240] +[:mouse_move, 1107, 40, 2, 509, 1241] +[:mouse_move, 1110, 40, 2, 510, 1242] +[:mouse_move, 1111, 40, 2, 511, 1242] +[:mouse_move, 1113, 40, 2, 512, 1243] +[:mouse_move, 1114, 40, 2, 513, 1244] +[:mouse_move, 1117, 40, 2, 514, 1244] +[:mouse_move, 1118, 40, 2, 515, 1245] +[:mouse_move, 1119, 40, 2, 516, 1246] +[:mouse_move, 1121, 40, 2, 517, 1246] +[:mouse_move, 1122, 40, 2, 518, 1248] +[:mouse_move, 1123, 40, 2, 519, 1249] +[:mouse_move, 1123, 41, 2, 520, 1250] +[:key_down_raw, 1073742051, 1024, 2, 521, 1356] +[:key_down_raw, 113, 1024, 2, 522, 1359] |
