summaryrefslogtreecommitdiffhomepage
path: root/samples/99_genre_rpg_tactical
diff options
context:
space:
mode:
authorAmir Rajan <[email protected]>2020-09-22 06:27:46 -0500
committerAmir Rajan <[email protected]>2020-09-22 06:27:46 -0500
commit20d5b4057b44ffcf92478b2a8e9476ace2fdc0f5 (patch)
treeb4742e4f9acfd5400a04f314164812606a71df9f /samples/99_genre_rpg_tactical
parent5b2311900072cfff9582bb0296140cfb354cb911 (diff)
downloaddragonruby-game-toolkit-contrib-20d5b4057b44ffcf92478b2a8e9476ace2fdc0f5.tar.gz
dragonruby-game-toolkit-contrib-20d5b4057b44ffcf92478b2a8e9476ace2fdc0f5.zip
synced with 1.22
Diffstat (limited to 'samples/99_genre_rpg_tactical')
-rw-r--r--samples/99_genre_rpg_tactical/hexagonal_grid/app/main.rb68
-rw-r--r--samples/99_genre_rpg_tactical/hexagonal_grid/license-for-sample.txt9
-rw-r--r--samples/99_genre_rpg_tactical/hexagonal_grid/replay.txt276
-rw-r--r--samples/99_genre_rpg_tactical/hexagonal_grid/sprites/hexagon-black.pngbin0 -> 2602 bytes
-rw-r--r--samples/99_genre_rpg_tactical/hexagonal_grid/sprites/hexagon-gray.pngbin0 -> 5184 bytes
-rw-r--r--samples/99_genre_rpg_tactical/isometric_grid/app/main.rb262
-rw-r--r--samples/99_genre_rpg_tactical/isometric_grid/license-for-sample.txt9
-rw-r--r--samples/99_genre_rpg_tactical/isometric_grid/metadata/game_metadata.txt6
-rw-r--r--samples/99_genre_rpg_tactical/isometric_grid/metadata/icon.pngbin0 -> 157056 bytes
-rw-r--r--samples/99_genre_rpg_tactical/isometric_grid/replay.txt579
-rw-r--r--samples/99_genre_rpg_tactical/isometric_grid/sprites/leftSide.pngbin0 -> 1888 bytes
-rw-r--r--samples/99_genre_rpg_tactical/isometric_grid/sprites/mountain.pngbin0 -> 4155 bytes
-rw-r--r--samples/99_genre_rpg_tactical/isometric_grid/sprites/ocean.pngbin0 -> 2339 bytes
-rw-r--r--samples/99_genre_rpg_tactical/isometric_grid/sprites/rightSide.pngbin0 -> 1755 bytes
-rw-r--r--samples/99_genre_rpg_tactical/isometric_grid/sprites/river.pngbin0 -> 4285 bytes
-rw-r--r--samples/99_genre_rpg_tactical/isometric_grid/sprites/selectedTile.pngbin0 -> 2335 bytes
-rw-r--r--samples/99_genre_rpg_tactical/isometric_grid/sprites/tile.pngbin0 -> 2341 bytes
17 files changed, 1209 insertions, 0 deletions
diff --git a/samples/99_genre_rpg_tactical/hexagonal_grid/app/main.rb b/samples/99_genre_rpg_tactical/hexagonal_grid/app/main.rb
new file mode 100644
index 0000000..b522ace
--- /dev/null
+++ b/samples/99_genre_rpg_tactical/hexagonal_grid/app/main.rb
@@ -0,0 +1,68 @@
+class HexagonTileGame
+ attr_gtk
+
+ def defaults
+ state.tile_scale = 1.3
+ state.tile_size = 80
+ state.tile_w = Math.sqrt(3) * state.tile_size.half
+ state.tile_h = state.tile_size * 3/4
+ state.tiles_x_count = 1280.idiv(state.tile_w) - 1
+ state.tiles_y_count = 720.idiv(state.tile_h) - 1
+ state.world_width_px = state.tiles_x_count * state.tile_w
+ state.world_height_px = state.tiles_y_count * state.tile_h
+ state.world_x_offset = (1280 - state.world_width_px).half
+ state.world_y_offset = (720 - state.world_height_px).half
+ state.tiles ||= state.tiles_x_count.map_with_ys(state.tiles_y_count) do |ordinal_x, ordinal_y|
+ {
+ ordinal_x: ordinal_x,
+ ordinal_y: ordinal_y,
+ offset_x: (ordinal_y.even?) ?
+ (state.world_x_offset + state.tile_w.half.half) :
+ (state.world_x_offset - state.tile_w.half.half),
+ offset_y: state.world_y_offset,
+ w: state.tile_w,
+ h: state.tile_h,
+ type: :blank,
+ path: "sprites/hexagon-gray.png",
+ a: 20
+ }.associate do |h|
+ h.merge(x: h[:offset_x] + h[:ordinal_x] * h[:w],
+ y: h[:offset_y] + h[:ordinal_y] * h[:h]).scale_rect(state.tile_scale)
+ end.associate do |h|
+ h.merge(center: {
+ x: h[:x] + h[:w].half,
+ y: h[:y] + h[:h].half
+ }, radius: [h[:w].half, h[:h].half].max)
+ end
+ end
+ end
+
+ def input
+ if inputs.click
+ tile = state.tiles.find { |t| inputs.click.point_inside_circle? t[:center], t[:radius] }
+ if tile
+ tile[:a] = 255
+ tile[:path] = "sprites/hexagon-black.png"
+ end
+ end
+ end
+
+ def tick
+ defaults
+ input
+ render
+ end
+
+ def render
+ outputs.sprites << state.tiles
+ end
+end
+
+$game = HexagonTileGame.new
+
+def tick args
+ $game.args = args
+ $game.tick
+end
+
+$gtk.reset
diff --git a/samples/99_genre_rpg_tactical/hexagonal_grid/license-for-sample.txt b/samples/99_genre_rpg_tactical/hexagonal_grid/license-for-sample.txt
new file mode 100644
index 0000000..100dcec
--- /dev/null
+++ b/samples/99_genre_rpg_tactical/hexagonal_grid/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/99_genre_rpg_tactical/hexagonal_grid/replay.txt b/samples/99_genre_rpg_tactical/hexagonal_grid/replay.txt
new file mode 100644
index 0000000..9e646bc
--- /dev/null
+++ b/samples/99_genre_rpg_tactical/hexagonal_grid/replay.txt
@@ -0,0 +1,276 @@
+replay_version 2.0
+stopped_at 488
+seed 100
+recorded_at Sat Feb 01 20:02:13 2020
+[:mouse_move, 643, 259, 2, 1, 46]
+[:mouse_move, 618, 246, 2, 2, 47]
+[:mouse_move, 544, 211, 2, 3, 48]
+[:mouse_move, 477, 179, 2, 4, 49]
+[:mouse_move, 435, 158, 2, 5, 50]
+[:mouse_move, 350, 117, 2, 6, 51]
+[:mouse_move, 304, 96, 2, 7, 52]
+[:mouse_move, 267, 84, 2, 8, 53]
+[:mouse_move, 242, 76, 2, 9, 54]
+[:mouse_move, 188, 72, 2, 10, 55]
+[:mouse_move, 164, 75, 2, 11, 56]
+[:mouse_move, 151, 81, 2, 12, 57]
+[:mouse_move, 135, 89, 2, 13, 58]
+[:mouse_move, 117, 102, 2, 14, 59]
+[:mouse_move, 114, 105, 2, 15, 59]
+[:mouse_move, 99, 116, 2, 16, 60]
+[:mouse_move, 90, 121, 2, 17, 61]
+[:mouse_move, 81, 130, 2, 18, 62]
+[:mouse_move, 75, 136, 2, 19, 63]
+[:mouse_move, 72, 149, 2, 20, 64]
+[:mouse_move, 66, 183, 2, 21, 65]
+[:mouse_move, 64, 218, 2, 22, 66]
+[:mouse_move, 64, 273, 2, 23, 67]
+[:mouse_move, 70, 305, 2, 24, 68]
+[:mouse_move, 85, 347, 2, 25, 69]
+[:mouse_move, 133, 418, 2, 26, 70]
+[:mouse_move, 174, 441, 2, 27, 71]
+[:mouse_move, 225, 453, 2, 28, 72]
+[:mouse_move, 277, 453, 2, 29, 73]
+[:mouse_move, 328, 448, 2, 30, 74]
+[:mouse_move, 421, 434, 2, 31, 75]
+[:mouse_move, 492, 433, 2, 32, 76]
+[:mouse_move, 571, 433, 2, 33, 77]
+[:mouse_move, 656, 432, 2, 34, 78]
+[:mouse_move, 824, 403, 2, 35, 79]
+[:mouse_move, 903, 386, 2, 36, 80]
+[:mouse_move, 996, 373, 2, 37, 81]
+[:mouse_move, 1053, 371, 2, 38, 82]
+[:mouse_move, 1092, 371, 2, 39, 83]
+[:mouse_move, 1098, 372, 2, 40, 84]
+[:mouse_move, 1117, 368, 2, 41, 92]
+[:mouse_move, 1148, 368, 2, 42, 93]
+[:mouse_move, 1212, 381, 2, 43, 94]
+[:mouse_move, 1246, 398, 2, 44, 95]
+[:mouse_move, 1282, 423, 2, 45, 96]
+[:mouse_move, 1303, 449, 2, 46, 97]
+[:mouse_move, 1309, 465, 2, 47, 98]
+[:mouse_move, 1314, 481, 2, 48, 99]
+[:mouse_move, 1314, 497, 2, 49, 100]
+[:mouse_move, 1301, 504, 2, 50, 101]
+[:mouse_move, 1288, 507, 2, 51, 102]
+[:mouse_move, 1259, 515, 2, 52, 103]
+[:mouse_move, 1238, 523, 2, 53, 104]
+[:mouse_move, 1225, 529, 2, 54, 105]
+[:mouse_move, 1216, 531, 2, 55, 106]
+[:mouse_move, 1207, 533, 2, 56, 107]
+[:mouse_move, 1205, 532, 2, 57, 108]
+[:mouse_move, 1207, 526, 2, 58, 109]
+[:mouse_move, 1213, 518, 2, 59, 110]
+[:mouse_move, 1222, 507, 2, 60, 111]
+[:mouse_move, 1233, 493, 2, 61, 112]
+[:mouse_move, 1237, 482, 2, 62, 113]
+[:mouse_move, 1239, 468, 2, 63, 114]
+[:mouse_move, 1239, 444, 2, 64, 115]
+[:mouse_move, 1237, 413, 2, 65, 116]
+[:mouse_move, 1235, 403, 2, 66, 117]
+[:mouse_move, 1234, 395, 2, 67, 118]
+[:mouse_move, 1234, 392, 2, 68, 119]
+[:mouse_move, 1234, 390, 2, 69, 120]
+[:mouse_move, 1234, 389, 2, 70, 122]
+[:mouse_move, 1234, 386, 2, 71, 123]
+[:mouse_move, 1233, 386, 2, 72, 125]
+[:mouse_move, 1190, 395, 2, 73, 126]
+[:mouse_move, 1054, 412, 2, 74, 127]
+[:mouse_move, 862, 421, 2, 75, 128]
+[:mouse_move, 720, 421, 2, 76, 129]
+[:mouse_move, 616, 419, 2, 77, 130]
+[:mouse_move, 580, 416, 2, 78, 131]
+[:mouse_move, 567, 410, 2, 79, 140]
+[:mouse_move, 518, 394, 2, 80, 141]
+[:mouse_move, 422, 388, 2, 81, 142]
+[:mouse_move, 292, 398, 2, 82, 143]
+[:mouse_move, 217, 420, 2, 83, 144]
+[:mouse_move, 139, 449, 2, 84, 145]
+[:mouse_move, 116, 460, 2, 85, 146]
+[:mouse_move, 99, 472, 2, 86, 147]
+[:mouse_move, 91, 485, 2, 87, 148]
+[:mouse_move, 91, 494, 2, 88, 149]
+[:mouse_move, 94, 514, 2, 89, 150]
+[:mouse_move, 99, 530, 2, 90, 151]
+[:mouse_move, 101, 545, 2, 91, 152]
+[:mouse_move, 102, 566, 2, 92, 153]
+[:mouse_move, 98, 582, 2, 93, 154]
+[:mouse_move, 89, 601, 2, 94, 155]
+[:mouse_move, 87, 610, 2, 95, 156]
+[:mouse_move, 84, 617, 2, 96, 157]
+[:mouse_move, 83, 622, 2, 97, 158]
+[:mouse_move, 83, 624, 2, 98, 159]
+[:mouse_move, 83, 625, 2, 99, 160]
+[:mouse_move, 82, 628, 2, 100, 165]
+[:mouse_move, 81, 635, 2, 101, 166]
+[:mouse_move, 78, 651, 2, 102, 167]
+[:mouse_move, 76, 658, 2, 103, 168]
+[:mouse_move, 75, 663, 2, 104, 169]
+[:mouse_move, 74, 665, 2, 105, 170]
+[:mouse_move, 73, 665, 2, 106, 171]
+[:mouse_move, 73, 663, 2, 107, 173]
+[:mouse_move, 73, 661, 2, 108, 174]
+[:mouse_move, 73, 658, 2, 109, 175]
+[:mouse_move, 74, 653, 2, 110, 176]
+[:mouse_move, 74, 652, 2, 111, 177]
+[:mouse_move, 75, 651, 2, 112, 178]
+[:mouse_move, 75, 650, 2, 113, 180]
+[:mouse_button_pressed, 1, 0, 1, 114, 184]
+[:mouse_button_up, 1, 0, 1, 115, 187]
+[:mouse_move, 77, 650, 2, 116, 194]
+[:mouse_move, 86, 650, 2, 117, 195]
+[:mouse_move, 117, 650, 2, 118, 196]
+[:mouse_move, 136, 650, 2, 119, 197]
+[:mouse_move, 156, 648, 2, 120, 198]
+[:mouse_move, 164, 647, 2, 121, 199]
+[:mouse_move, 167, 646, 2, 122, 200]
+[:mouse_move, 168, 646, 2, 123, 201]
+[:mouse_move, 167, 646, 2, 124, 202]
+[:mouse_move, 165, 647, 2, 125, 203]
+[:mouse_move, 164, 647, 2, 126, 205]
+[:mouse_move, 163, 647, 2, 127, 206]
+[:mouse_button_pressed, 1, 0, 1, 128, 210]
+[:mouse_button_up, 1, 0, 1, 129, 214]
+[:mouse_move, 170, 647, 2, 130, 224]
+[:mouse_move, 179, 647, 2, 131, 225]
+[:mouse_move, 200, 647, 2, 132, 226]
+[:mouse_move, 215, 647, 2, 133, 227]
+[:mouse_move, 222, 647, 2, 134, 228]
+[:mouse_move, 227, 647, 2, 135, 229]
+[:mouse_move, 228, 647, 2, 136, 230]
+[:mouse_button_pressed, 1, 0, 1, 137, 232]
+[:mouse_button_up, 1, 0, 1, 138, 237]
+[:mouse_move, 236, 645, 2, 139, 250]
+[:mouse_move, 246, 644, 2, 140, 251]
+[:mouse_move, 260, 643, 2, 141, 252]
+[:mouse_move, 274, 643, 2, 142, 253]
+[:mouse_move, 286, 645, 2, 143, 254]
+[:mouse_move, 291, 646, 2, 144, 255]
+[:mouse_move, 293, 646, 2, 145, 256]
+[:mouse_button_pressed, 1, 0, 1, 146, 257]
+[:mouse_move, 294, 647, 2, 147, 257]
+[:mouse_button_up, 1, 0, 1, 148, 262]
+[:mouse_move, 293, 642, 2, 149, 279]
+[:mouse_move, 285, 616, 2, 150, 280]
+[:mouse_move, 233, 414, 2, 151, 281]
+[:mouse_move, 177, 198, 2, 152, 282]
+[:mouse_move, 158, 131, 2, 153, 283]
+[:mouse_move, 148, 98, 2, 154, 284]
+[:mouse_move, 135, 65, 2, 155, 285]
+[:mouse_move, 130, 58, 2, 156, 286]
+[:mouse_move, 126, 56, 2, 157, 287]
+[:mouse_move, 122, 55, 2, 158, 288]
+[:mouse_move, 120, 55, 2, 159, 289]
+[:mouse_move, 117, 55, 2, 160, 290]
+[:mouse_move, 113, 55, 2, 161, 291]
+[:mouse_move, 109, 56, 2, 162, 292]
+[:mouse_move, 105, 56, 2, 163, 293]
+[:mouse_move, 101, 56, 2, 164, 294]
+[:mouse_move, 92, 57, 2, 165, 295]
+[:mouse_move, 89, 57, 2, 166, 296]
+[:mouse_move, 86, 57, 2, 167, 297]
+[:mouse_move, 85, 57, 2, 168, 298]
+[:mouse_move, 84, 57, 2, 169, 299]
+[:mouse_button_pressed, 1, 0, 1, 170, 299]
+[:mouse_button_up, 1, 0, 1, 171, 302]
+[:mouse_move, 85, 57, 2, 172, 305]
+[:mouse_move, 90, 57, 2, 173, 306]
+[:mouse_move, 98, 57, 2, 174, 307]
+[:mouse_move, 117, 57, 2, 175, 308]
+[:mouse_move, 124, 57, 2, 176, 309]
+[:mouse_move, 131, 57, 2, 177, 310]
+[:mouse_move, 133, 57, 2, 178, 311]
+[:mouse_move, 134, 57, 2, 179, 312]
+[:mouse_move, 135, 57, 2, 180, 314]
+[:mouse_button_pressed, 1, 0, 1, 181, 314]
+[:mouse_button_up, 1, 0, 1, 182, 318]
+[:mouse_move, 137, 57, 2, 183, 320]
+[:mouse_move, 146, 57, 2, 184, 321]
+[:mouse_move, 155, 57, 2, 185, 322]
+[:mouse_move, 169, 57, 2, 186, 323]
+[:mouse_move, 184, 57, 2, 187, 324]
+[:mouse_move, 190, 57, 2, 188, 324]
+[:mouse_move, 200, 57, 2, 189, 325]
+[:mouse_move, 206, 57, 2, 190, 326]
+[:mouse_move, 211, 57, 2, 191, 327]
+[:mouse_move, 216, 57, 2, 192, 328]
+[:mouse_move, 217, 57, 2, 193, 330]
+[:mouse_button_pressed, 1, 0, 1, 194, 332]
+[:mouse_button_up, 1, 0, 1, 195, 335]
+[:mouse_move, 220, 57, 2, 196, 337]
+[:mouse_move, 243, 57, 2, 197, 338]
+[:mouse_move, 267, 57, 2, 198, 339]
+[:mouse_move, 283, 57, 2, 199, 340]
+[:mouse_move, 292, 57, 2, 200, 341]
+[:mouse_move, 299, 57, 2, 201, 342]
+[:mouse_move, 298, 57, 2, 202, 346]
+[:mouse_move, 297, 57, 2, 203, 348]
+[:mouse_move, 296, 57, 2, 204, 350]
+[:mouse_button_pressed, 1, 0, 1, 205, 352]
+[:mouse_button_up, 1, 0, 1, 206, 355]
+[:mouse_move, 298, 57, 2, 207, 364]
+[:mouse_move, 405, 53, 2, 208, 365]
+[:mouse_move, 681, 55, 2, 209, 366]
+[:mouse_move, 983, 86, 2, 210, 367]
+[:mouse_move, 1117, 92, 2, 211, 368]
+[:mouse_move, 1249, 93, 2, 212, 369]
+[:mouse_move, 1299, 89, 2, 213, 370]
+[:mouse_move, 1321, 85, 2, 214, 371]
+[:mouse_move, 1314, 72, 2, 215, 378]
+[:mouse_move, 1277, 66, 2, 216, 379]
+[:mouse_move, 1249, 61, 2, 217, 380]
+[:mouse_move, 1223, 56, 2, 218, 381]
+[:mouse_move, 1212, 54, 2, 219, 382]
+[:mouse_move, 1203, 50, 2, 220, 383]
+[:mouse_move, 1200, 49, 2, 221, 384]
+[:mouse_move, 1195, 46, 2, 222, 385]
+[:mouse_move, 1191, 44, 2, 223, 386]
+[:mouse_move, 1186, 42, 2, 224, 387]
+[:mouse_move, 1184, 41, 2, 225, 388]
+[:mouse_move, 1181, 41, 2, 226, 389]
+[:mouse_button_pressed, 1, 0, 1, 227, 390]
+[:mouse_move, 1181, 40, 2, 228, 390]
+[:mouse_button_up, 1, 0, 1, 229, 393]
+[:mouse_move, 1157, 44, 2, 230, 400]
+[:mouse_move, 1085, 71, 2, 231, 401]
+[:mouse_move, 1011, 102, 2, 232, 402]
+[:mouse_move, 928, 141, 2, 233, 403]
+[:mouse_move, 763, 235, 2, 234, 404]
+[:mouse_move, 702, 276, 2, 235, 405]
+[:mouse_move, 644, 318, 2, 236, 406]
+[:mouse_move, 620, 338, 2, 237, 407]
+[:mouse_move, 599, 357, 2, 238, 408]
+[:mouse_move, 592, 363, 2, 239, 409]
+[:mouse_move, 589, 365, 2, 240, 410]
+[:mouse_move, 588, 365, 2, 241, 411]
+[:mouse_move, 588, 366, 2, 242, 412]
+[:mouse_move, 588, 365, 2, 243, 415]
+[:mouse_move, 590, 365, 2, 244, 417]
+[:mouse_move, 592, 364, 2, 245, 418]
+[:mouse_move, 592, 363, 2, 246, 420]
+[:mouse_move, 593, 362, 2, 247, 421]
+[:mouse_button_pressed, 1, 0, 1, 248, 422]
+[:mouse_button_up, 1, 0, 1, 249, 427]
+[:mouse_move, 587, 359, 2, 250, 454]
+[:mouse_move, 554, 341, 2, 251, 455]
+[:mouse_move, 325, 237, 2, 252, 456]
+[:mouse_move, 196, 188, 2, 253, 457]
+[:mouse_move, 141, 167, 2, 254, 458]
+[:mouse_move, 94, 147, 2, 255, 459]
+[:mouse_move, 56, 125, 2, 256, 460]
+[:mouse_move, 46, 119, 2, 257, 461]
+[:mouse_move, 39, 113, 2, 258, 462]
+[:mouse_move, 37, 110, 2, 259, 463]
+[:mouse_move, 35, 105, 2, 260, 464]
+[:mouse_move, 33, 101, 2, 261, 465]
+[:mouse_move, 28, 90, 2, 262, 466]
+[:mouse_move, 26, 82, 2, 263, 467]
+[:mouse_move, 20, 66, 2, 264, 468]
+[:mouse_move, 9, 42, 2, 265, 469]
+[:mouse_move, 3, 32, 2, 266, 470]
+[:mouse_move, -4, 18, 2, 267, 471]
+[:mouse_move, -8, 11, 2, 268, 472]
+[:mouse_move, -11, 7, 2, 269, 473]
+[:mouse_move, -13, 5, 2, 270, 474]
+[:mouse_move, -17, 1, 2, 271, 475]
+[:mouse_move, -19, 0, 2, 272, 476]
diff --git a/samples/99_genre_rpg_tactical/hexagonal_grid/sprites/hexagon-black.png b/samples/99_genre_rpg_tactical/hexagonal_grid/sprites/hexagon-black.png
new file mode 100644
index 0000000..f50c872
--- /dev/null
+++ b/samples/99_genre_rpg_tactical/hexagonal_grid/sprites/hexagon-black.png
Binary files differ
diff --git a/samples/99_genre_rpg_tactical/hexagonal_grid/sprites/hexagon-gray.png b/samples/99_genre_rpg_tactical/hexagonal_grid/sprites/hexagon-gray.png
new file mode 100644
index 0000000..e8c4c5a
--- /dev/null
+++ b/samples/99_genre_rpg_tactical/hexagonal_grid/sprites/hexagon-gray.png
Binary files differ
diff --git a/samples/99_genre_rpg_tactical/isometric_grid/app/main.rb b/samples/99_genre_rpg_tactical/isometric_grid/app/main.rb
new file mode 100644
index 0000000..28bea32
--- /dev/null
+++ b/samples/99_genre_rpg_tactical/isometric_grid/app/main.rb
@@ -0,0 +1,262 @@
+class Isometric
+ attr_accessor :grid, :inputs, :state, :outputs
+
+ def tick
+ defaults
+ render
+ calc
+ process_inputs
+ end
+
+ def defaults
+ state.quantity ||= 6 #Size of grid
+ state.tileSize ||= [262 / 2, 194 / 2] #width and heigth of orange tiles
+ state.tileGrid ||= [] #Holds ordering of tiles
+ state.currentSpriteLocation ||= -1 #Current Sprite hovering location
+ state.tileCords ||= [] #Physical, rendering cordinates
+ state.initCords ||= [640 - (state.quantity / 2 * state.tileSize[0]), 330] #Location of tile (0, 0)
+ state.sideSize ||= [state.tileSize[0] / 2, 242 / 2] #Purple & green cube face size
+ state.mode ||= :delete #Switches between :delete and :insert
+ state.spriteSelection ||= [['river', 0, 0, 262 / 2, 194 / 2],
+ ['mountain', 0, 0, 262 / 2, 245 / 2],
+ ['ocean', 0, 0, 262 / 2, 194 / 2]] #Storage for sprite information
+ #['name', deltaX, deltaY, sizeW, sizeH]
+ #^delta refers to distance from tile cords
+
+ #Orders tiles based on tile placement and fancy math. Very left: 0,0. Very bottom: quantity-1, 0, etc
+ if state.tileGrid == []
+ tempX = 0
+ tempY = 0
+ tempLeft = false
+ tempRight = false
+ count = 0
+ (state.quantity * state.quantity).times do
+ if tempY == 0
+ tempLeft = true
+ end
+ if tempX == (state.quantity - 1)
+ tempRight = true
+ end
+ state.tileGrid.push([tempX, tempY, true, tempLeft, tempRight, count])
+ #orderX, orderY, exists?, leftSide, rightSide, order
+ tempX += 1
+ if tempX == state.quantity
+ tempX = 0
+ tempY += 1
+ end
+ tempLeft = false
+ tempRight = false
+ count += 1
+ end
+ end
+
+ #Calculates physical cordinates for tiles
+ if state.tileCords == []
+ state.tileCords = state.tileGrid.map do
+ |val|
+ x = (state.initCords[0]) + ((val[0] + val[1]) * state.tileSize[0] / 2)
+ y = (state.initCords[1]) + (-1 * val[0] * state.tileSize[1] / 2) + (val[1] * state.tileSize[1] / 2)
+ [x, y, val[2], val[3], val[4], val[5], -1] #-1 represents sprite on top of tile. -1 for now
+ end
+ end
+
+ end
+
+ def render
+ renderBackground
+ renderLeft
+ renderRight
+ renderTiles
+ renderObjects
+ renderLabels
+ end
+
+ def renderBackground
+ outputs.solids << [0, 0, 1280, 720, 0, 0, 0] #Background color
+ end
+
+ def renderLeft
+ #Shows the pink left cube face
+ outputs.sprites << state.tileCords.map do
+ |val|
+ if val[2] == true && val[3] == true #Checks if the tile exists and right face needs to be rendered
+ [val[0], val[1] + (state.tileSize[1] / 2) - state.sideSize[1], state.sideSize[0],
+ state.sideSize[1], 'sprites/leftSide.png']
+ end
+ end
+ end
+
+ def renderRight
+ #Shows the green right cube face
+ outputs.sprites << state.tileCords.map do
+ |val|
+ if val[2] == true && val[4] == true #Checks if it exists & checks if right face needs to be rendered
+ [val[0] + state.tileSize[0] / 2, val[1] + (state.tileSize[1] / 2) - state.sideSize[1], state.sideSize[0],
+ state.sideSize[1], 'sprites/rightSide.png']
+ end
+ end
+ end
+
+ def renderTiles
+ #Shows the tile itself. Important that it's rendered after the two above!
+ outputs.sprites << state.tileCords.map do
+ |val|
+ if val[2] == true #Chcekcs if tile needs to be rendered
+ if val[5] == state.currentSpriteLocation
+ [val[0], val[1], state.tileSize[0], state.tileSize[1], 'sprites/selectedTile.png']
+ else
+ [val[0], val[1], state.tileSize[0], state.tileSize[1], 'sprites/tile.png']
+ end
+ end
+ end
+ end
+
+ def renderObjects
+ #Renders the sprites on top of the tiles. Order of rendering: top corner to right corner and cascade down until left corner
+ #to bottom corner.
+ a = (state.quantity * state.quantity) - state.quantity
+ iter = 0
+ loop do
+ if state.tileCords[a][2] == true && state.tileCords[a][6] != -1
+ outputs.sprites << [state.tileCords[a][0] + state.spriteSelection[state.tileCords[a][6]][1],
+ state.tileCords[a][1] + state.spriteSelection[state.tileCords[a][6]][2],
+ state.spriteSelection[state.tileCords[a][6]][3], state.spriteSelection[state.tileCords[a][6]][4],
+ 'sprites/' + state.spriteSelection[state.tileCords[a][6]][0] + '.png']
+ end
+ iter += 1
+ a += 1
+ a -= state.quantity * 2 if iter == state.quantity
+ iter = 0 if iter == state.quantity
+ break if a < 0
+ end
+ end
+
+ def renderLabels
+ #Labels
+ outputs.labels << [50, 680, 'Click to delete!', 5, 0, 255, 255, 255, 255] if state.mode == :delete
+ outputs.labels << [50, 640, 'Press \'i\' for insert mode!', 5, 0, 255, 255, 255, 255] if state.mode == :delete
+ outputs.labels << [50, 680, 'Click to insert!', 5, 0, 255, 255, 255, 255] if state.mode == :insert
+ outputs.labels << [50, 640, 'Press \'d\' for delete mode!', 5, 0, 255, 255, 255, 255] if state.mode == :insert
+ end
+
+ def calc
+ calcCurrentHover
+ end
+
+ def calcCurrentHover
+ #This determines what tile the mouse is hovering (or last hovering) over
+ x = inputs.mouse.position.x
+ y = inputs.mouse.position.y
+ m = (state.tileSize[1] / state.tileSize[0]) #slope
+ state.tileCords.map do
+ |val|
+ #Conditions that makes runtime faster. Checks if the mouse click was between tile dimensions (rectangle collision)
+ next unless val[0] < x && x < val[0] + state.tileSize[0]
+ next unless val[1] < y && y < val[1] + state.tileSize[1]
+ next unless val[2] == true
+ tempBool = false
+ if x == val[0] + (state.tileSize[0] / 2)
+ #The height of a diamond is the height of the diamond, so if x equals that exact point, it must be inside the diamond
+ tempBool = true
+ elsif x < state.tileSize[0] / 2 + val[0]
+ #Uses y = (m) * (x - x1) + y1 to determine the y values for the two diamond lines on the left half of diamond
+ tempY1 = (m * (x - val[0])) + val[1] + (state.tileSize[1] / 2)
+ tempY2 = (-1 * m * (x - val[0])) + val[1] + (state.tileSize[1] / 2)
+ #Checks to see if the mouse click y value is between those temp y values
+ tempBool = true if y < tempY1 && y > tempY2
+ elsif x > state.tileSize[0] / 2 + val[0]
+ #Uses y = (m) * (x - x1) + y1 to determine the y values for the two diamond lines on the right half of diamond
+ tempY1 = (m * (x - val[0] - (state.tileSize[0] / 2))) + val[1]
+ tempY2 = (-1 * m * (x - val[0] - (state.tileSize[0] / 2))) + val[1] + state.tileSize[1]
+ #Checks to see if the mouse click y value is between those temp y values
+ tempBool = true if y > tempY1 && y < tempY2
+ end
+
+ if tempBool == true
+ state.currentSpriteLocation = val[5] #Current sprite location set to the order value
+ end
+ end
+ end
+
+ def process_inputs
+ #Makes development much faster and easier
+ if inputs.keyboard.key_up.r
+ $dragon.reset
+ end
+ checkTileSelected
+ switchModes
+ end
+
+ def checkTileSelected
+ if inputs.mouse.down
+ x = inputs.mouse.down.point.x
+ y = inputs.mouse.down.point.y
+ m = (state.tileSize[1] / state.tileSize[0]) #slope
+ state.tileCords.map do
+ |val|
+ #Conditions that makes runtime faster. Checks if the mouse click was between tile dimensions (rectangle collision)
+ next unless val[0] < x && x < val[0] + state.tileSize[0]
+ next unless val[1] < y && y < val[1] + state.tileSize[1]
+ next unless val[2] == true
+ tempBool = false
+ if x == val[0] + (state.tileSize[0] / 2)
+ #The height of a diamond is the height of the diamond, so if x equals that exact point, it must be inside the diamond
+ tempBool = true
+ elsif x < state.tileSize[0] / 2 + val[0]
+ #Uses y = (m) * (x - x1) + y1 to determine the y values for the two diamond lines on the left half of diamond
+ tempY1 = (m * (x - val[0])) + val[1] + (state.tileSize[1] / 2)
+ tempY2 = (-1 * m * (x - val[0])) + val[1] + (state.tileSize[1] / 2)
+ #Checks to see if the mouse click y value is between those temp y values
+ tempBool = true if y < tempY1 && y > tempY2
+ elsif x > state.tileSize[0] / 2 + val[0]
+ #Uses y = (m) * (x - x1) + y1 to determine the y values for the two diamond lines on the right half of diamond
+ tempY1 = (m * (x - val[0] - (state.tileSize[0] / 2))) + val[1]
+ tempY2 = (-1 * m * (x - val[0] - (state.tileSize[0] / 2))) + val[1] + state.tileSize[1]
+ #Checks to see if the mouse click y value is between those temp y values
+ tempBool = true if y > tempY1 && y < tempY2
+ end
+
+ if tempBool == true
+ if state.mode == :delete
+ val[2] = false
+ state.tileGrid[val[5]][2] = false #Unnecessary because never used again but eh, I like consistency
+ state.tileCords[val[5]][2] = false #Ensures that the tile isn't rendered
+ unless state.tileGrid[val[5]][0] == 0 #If tile is the left most tile in the row, right doesn't get rendered
+ state.tileGrid[val[5] - 1][4] = true #Why the order value is amazing
+ state.tileCords[val[5] - 1][4] = true
+ end
+ unless state.tileGrid[val[5]][1] == state.quantity - 1 #Same but left side
+ state.tileGrid[val[5] + state.quantity][3] = true
+ state.tileCords[val[5] + state.quantity][3] = true
+ end
+ elsif state.mode == :insert
+ #adds the current sprite value selected to tileCords. (changes from the -1 earlier)
+ val[6] = rand(state.spriteSelection.length)
+ end
+ end
+ end
+ end
+ end
+
+ def switchModes
+ #Switches between insert and delete modes
+ if inputs.keyboard.key_up.i && state.mode == :delete
+ state.mode = :insert
+ inputs.keyboard.clear
+ elsif inputs.keyboard.key_up.d && state.mode == :insert
+ state.mode = :delete
+ inputs.keyboard.clear
+ end
+ end
+
+end
+
+$isometric = Isometric.new
+
+def tick args
+ $isometric.grid = args.grid
+ $isometric.inputs = args.inputs
+ $isometric.state = args.state
+ $isometric.outputs = args.outputs
+ $isometric.tick
+end
diff --git a/samples/99_genre_rpg_tactical/isometric_grid/license-for-sample.txt b/samples/99_genre_rpg_tactical/isometric_grid/license-for-sample.txt
new file mode 100644
index 0000000..100dcec
--- /dev/null
+++ b/samples/99_genre_rpg_tactical/isometric_grid/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/99_genre_rpg_tactical/isometric_grid/metadata/game_metadata.txt b/samples/99_genre_rpg_tactical/isometric_grid/metadata/game_metadata.txt
new file mode 100644
index 0000000..1b03500
--- /dev/null
+++ b/samples/99_genre_rpg_tactical/isometric_grid/metadata/game_metadata.txt
@@ -0,0 +1,6 @@
+#devid=myname
+#devtitle=My Name
+#gameid=mygame
+#gametitle=My Game
+#version=0.1
+#icon=metadata/icon.png
diff --git a/samples/99_genre_rpg_tactical/isometric_grid/metadata/icon.png b/samples/99_genre_rpg_tactical/isometric_grid/metadata/icon.png
new file mode 100644
index 0000000..e20e8c2
--- /dev/null
+++ b/samples/99_genre_rpg_tactical/isometric_grid/metadata/icon.png
Binary files differ
diff --git a/samples/99_genre_rpg_tactical/isometric_grid/replay.txt b/samples/99_genre_rpg_tactical/isometric_grid/replay.txt
new file mode 100644
index 0000000..1cf14a2
--- /dev/null
+++ b/samples/99_genre_rpg_tactical/isometric_grid/replay.txt
@@ -0,0 +1,579 @@
+replay_version 2.0
+stopped_at 1116
+seed 100
+recorded_at Sat Feb 01 20:04:50 2020
+[:mouse_move, -27, 201, 2, 1, 76]
+[:mouse_move, -23, 204, 2, 2, 77]
+[:mouse_move, -12, 212, 2, 3, 78]
+[:mouse_move, -5, 220, 2, 4, 79]
+[:mouse_move, -2, 219, 2, 5, 96]
+[:mouse_move, 4, 217, 2, 6, 97]
+[:mouse_move, 24, 209, 2, 7, 98]
+[:mouse_move, 38, 202, 2, 8, 99]
+[:mouse_move, 66, 194, 2, 9, 100]
+[:mouse_move, 71, 192, 2, 10, 101]
+[:mouse_move, 86, 187, 2, 11, 102]
+[:mouse_move, 92, 185, 2, 12, 103]
+[:mouse_move, 99, 183, 2, 13, 104]
+[:mouse_move, 100, 182, 2, 14, 105]
+[:mouse_move, 101, 182, 2, 15, 106]
+[:mouse_move, 102, 181, 2, 16, 107]
+[:mouse_move, 102, 180, 2, 17, 112]
+[:mouse_button_pressed, 1, 0, 1, 18, 114]
+[:mouse_button_up, 1, 0, 1, 19, 120]
+[:mouse_move, 103, 174, 2, 20, 135]
+[:mouse_move, 105, 169, 2, 21, 136]
+[:mouse_move, 107, 156, 2, 22, 137]
+[:mouse_move, 108, 147, 2, 23, 138]
+[:mouse_move, 108, 122, 2, 24, 139]
+[:mouse_move, 104, 108, 2, 25, 140]
+[:mouse_move, 101, 102, 2, 26, 141]
+[:mouse_move, 94, 92, 2, 27, 142]
+[:mouse_move, 90, 89, 2, 28, 143]
+[:mouse_move, 83, 85, 2, 29, 144]
+[:mouse_move, 78, 83, 2, 30, 145]
+[:mouse_move, 72, 81, 2, 31, 146]
+[:mouse_move, 69, 80, 2, 32, 147]
+[:mouse_move, 66, 78, 2, 33, 148]
+[:mouse_move, 65, 78, 2, 34, 149]
+[:mouse_move, 64, 78, 2, 35, 150]
+[:mouse_move, 64, 77, 2, 36, 151]
+[:mouse_move, 69, 77, 2, 37, 154]
+[:mouse_move, 74, 77, 2, 38, 155]
+[:mouse_move, 96, 76, 2, 39, 156]
+[:mouse_move, 118, 76, 2, 40, 157]
+[:mouse_move, 145, 75, 2, 41, 158]
+[:mouse_move, 162, 74, 2, 42, 159]
+[:mouse_move, 183, 73, 2, 43, 160]
+[:mouse_move, 196, 72, 2, 44, 161]
+[:mouse_move, 215, 70, 2, 45, 162]
+[:mouse_move, 218, 70, 2, 46, 163]
+[:mouse_move, 228, 69, 2, 47, 164]
+[:mouse_move, 232, 69, 2, 48, 165]
+[:mouse_move, 233, 69, 2, 49, 166]
+[:mouse_move, 236, 69, 2, 50, 167]
+[:mouse_move, 237, 69, 2, 51, 168]
+[:mouse_move, 243, 70, 2, 52, 169]
+[:mouse_move, 244, 70, 2, 53, 170]
+[:mouse_move, 247, 70, 2, 54, 171]
+[:mouse_move, 249, 70, 2, 55, 172]
+[:mouse_move, 250, 70, 2, 56, 173]
+[:mouse_move, 251, 70, 2, 57, 175]
+[:mouse_move, 249, 70, 2, 58, 184]
+[:mouse_move, 236, 70, 2, 59, 185]
+[:mouse_move, 222, 70, 2, 60, 186]
+[:mouse_move, 170, 71, 2, 61, 187]
+[:mouse_move, 138, 75, 2, 62, 188]
+[:mouse_move, 70, 87, 2, 63, 189]
+[:mouse_move, 56, 91, 2, 64, 190]
+[:mouse_move, 21, 100, 2, 65, 191]
+[:mouse_move, 1, 107, 2, 66, 192]
+[:mouse_move, -7, 110, 2, 67, 193]
+[:mouse_move, -14, 114, 2, 68, 194]
+[:mouse_move, -17, 115, 2, 69, 195]
+[:mouse_move, -17, 116, 2, 70, 196]
+[:mouse_move, -9, 117, 2, 71, 197]
+[:mouse_move, 22, 119, 2, 72, 198]
+[:mouse_move, 44, 119, 2, 73, 199]
+[:mouse_move, 84, 120, 2, 74, 200]
+[:mouse_move, 107, 120, 2, 75, 201]
+[:mouse_move, 120, 120, 2, 76, 202]
+[:mouse_move, 132, 120, 2, 77, 203]
+[:mouse_move, 145, 120, 2, 78, 204]
+[:mouse_move, 148, 120, 2, 79, 205]
+[:mouse_move, 150, 120, 2, 80, 206]
+[:mouse_move, 151, 120, 2, 81, 207]
+[:mouse_move, 152, 120, 2, 82, 220]
+[:mouse_move, 153, 120, 2, 83, 301]
+[:mouse_move, 156, 120, 2, 84, 302]
+[:mouse_move, 158, 120, 2, 85, 303]
+[:mouse_move, 163, 120, 2, 86, 304]
+[:mouse_move, 165, 120, 2, 87, 305]
+[:mouse_move, 168, 118, 2, 88, 306]
+[:mouse_move, 170, 116, 2, 89, 307]
+[:mouse_move, 172, 113, 2, 90, 308]
+[:mouse_move, 173, 110, 2, 91, 309]
+[:mouse_move, 176, 104, 2, 92, 310]
+[:mouse_move, 176, 101, 2, 93, 311]
+[:mouse_move, 176, 93, 2, 94, 312]
+[:mouse_move, 176, 89, 2, 95, 313]
+[:mouse_move, 173, 85, 2, 96, 314]
+[:mouse_move, 172, 83, 2, 97, 315]
+[:mouse_move, 171, 78, 2, 98, 316]
+[:mouse_move, 170, 76, 2, 99, 317]
+[:mouse_move, 169, 73, 2, 100, 318]
+[:mouse_move, 168, 72, 2, 101, 319]
+[:mouse_move, 164, 70, 2, 102, 320]
+[:mouse_move, 161, 68, 2, 103, 321]
+[:mouse_move, 152, 68, 2, 104, 322]
+[:mouse_move, 147, 68, 2, 105, 323]
+[:mouse_move, 140, 68, 2, 106, 324]
+[:mouse_move, 134, 68, 2, 107, 325]
+[:mouse_move, 126, 70, 2, 108, 326]
+[:mouse_move, 123, 72, 2, 109, 327]
+[:mouse_move, 118, 77, 2, 110, 328]
+[:mouse_move, 116, 82, 2, 111, 329]
+[:mouse_move, 112, 94, 2, 112, 330]
+[:mouse_move, 110, 101, 2, 113, 331]
+[:mouse_move, 110, 114, 2, 114, 332]
+[:mouse_move, 110, 122, 2, 115, 333]
+[:mouse_move, 114, 126, 2, 116, 334]
+[:mouse_move, 120, 130, 2, 117, 335]
+[:mouse_move, 125, 132, 2, 118, 336]
+[:mouse_move, 139, 133, 2, 119, 337]
+[:mouse_move, 147, 133, 2, 120, 338]
+[:mouse_move, 162, 133, 2, 121, 339]
+[:mouse_move, 168, 131, 2, 122, 340]
+[:mouse_move, 178, 125, 2, 123, 341]
+[:mouse_move, 179, 124, 2, 124, 342]
+[:mouse_move, 186, 117, 2, 125, 343]
+[:mouse_move, 188, 113, 2, 126, 344]
+[:mouse_move, 189, 101, 2, 127, 345]
+[:mouse_move, 189, 97, 2, 128, 346]
+[:mouse_move, 186, 87, 2, 129, 347]
+[:mouse_move, 183, 82, 2, 130, 348]
+[:mouse_move, 176, 75, 2, 131, 349]
+[:mouse_move, 167, 71, 2, 132, 350]
+[:mouse_move, 155, 71, 2, 133, 351]
+[:mouse_move, 149, 71, 2, 134, 352]
+[:mouse_move, 140, 71, 2, 135, 353]
+[:mouse_move, 137, 73, 2, 136, 354]
+[:mouse_move, 134, 74, 2, 137, 355]
+[:mouse_move, 131, 76, 2, 138, 356]
+[:mouse_move, 130, 76, 2, 139, 357]
+[:mouse_move, 130, 77, 2, 140, 358]
+[:mouse_move, 130, 78, 2, 141, 360]
+[:mouse_move, 131, 78, 2, 142, 362]
+[:key_down_raw, 105, 0, 2, 143, 365]
+[:key_up_raw, 105, 0, 2, 144, 370]
+[:mouse_move, 135, 78, 2, 145, 391]
+[:mouse_move, 141, 78, 2, 146, 392]
+[:mouse_move, 176, 87, 2, 147, 393]
+[:mouse_move, 216, 103, 2, 148, 394]
+[:mouse_move, 384, 182, 2, 149, 395]
+[:mouse_move, 464, 234, 2, 150, 396]
+[:mouse_move, 574, 322, 2, 151, 397]
+[:mouse_move, 599, 344, 2, 152, 398]
+[:mouse_move, 649, 384, 2, 153, 399]
+[:mouse_move, 648, 388, 2, 154, 413]
+[:mouse_move, 646, 393, 2, 155, 414]
+[:mouse_move, 641, 403, 2, 156, 415]
+[:mouse_move, 635, 410, 2, 157, 416]
+[:mouse_move, 626, 422, 2, 158, 417]
+[:mouse_move, 614, 433, 2, 159, 418]
+[:mouse_move, 613, 435, 2, 160, 419]
+[:mouse_move, 608, 438, 2, 161, 420]
+[:mouse_move, 605, 440, 2, 162, 421]
+[:mouse_move, 604, 440, 2, 163, 422]
+[:mouse_move, 603, 441, 2, 164, 423]
+[:mouse_move, 602, 441, 2, 165, 431]
+[:mouse_button_pressed, 1, 0, 1, 166, 433]
+[:mouse_button_up, 1, 0, 1, 167, 439]
+[:mouse_move, 603, 441, 2, 168, 444]
+[:mouse_move, 606, 438, 2, 169, 445]
+[:mouse_move, 613, 434, 2, 170, 446]
+[:mouse_move, 622, 426, 2, 171, 447]
+[:mouse_move, 624, 423, 2, 172, 448]
+[:mouse_move, 634, 413, 2, 173, 449]
+[:mouse_move, 635, 411, 2, 174, 450]
+[:mouse_move, 641, 404, 2, 175, 451]
+[:mouse_move, 642, 403, 2, 176, 452]
+[:mouse_move, 644, 400, 2, 177, 453]
+[:mouse_move, 645, 398, 2, 178, 454]
+[:mouse_move, 646, 397, 2, 179, 455]
+[:mouse_move, 646, 396, 2, 180, 457]
+[:mouse_button_pressed, 1, 0, 1, 181, 459]
+[:mouse_button_up, 1, 0, 1, 182, 465]
+[:mouse_move, 649, 396, 2, 183, 468]
+[:mouse_move, 653, 396, 2, 184, 469]
+[:mouse_move, 664, 397, 2, 185, 470]
+[:mouse_move, 666, 398, 2, 186, 471]
+[:mouse_move, 676, 405, 2, 187, 472]
+[:mouse_move, 679, 408, 2, 188, 473]
+[:mouse_move, 684, 416, 2, 189, 474]
+[:mouse_move, 685, 417, 2, 190, 475]
+[:mouse_move, 688, 420, 2, 191, 476]
+[:mouse_move, 688, 422, 2, 192, 477]
+[:mouse_move, 689, 424, 2, 193, 478]
+[:mouse_move, 690, 426, 2, 194, 479]
+[:mouse_move, 692, 428, 2, 195, 480]
+[:mouse_move, 693, 429, 2, 196, 481]
+[:mouse_move, 694, 430, 2, 197, 482]
+[:mouse_move, 695, 432, 2, 198, 483]
+[:mouse_button_pressed, 1, 0, 1, 199, 485]
+[:mouse_move, 696, 432, 2, 200, 485]
+[:mouse_button_up, 1, 0, 1, 201, 492]
+[:mouse_move, 699, 430, 2, 202, 496]
+[:mouse_move, 705, 427, 2, 203, 497]
+[:mouse_move, 709, 425, 2, 204, 498]
+[:mouse_move, 718, 421, 2, 205, 499]
+[:mouse_move, 725, 418, 2, 206, 500]
+[:mouse_move, 736, 412, 2, 207, 501]
+[:mouse_move, 742, 410, 2, 208, 502]
+[:mouse_move, 750, 406, 2, 209, 503]
+[:mouse_move, 753, 405, 2, 210, 504]
+[:mouse_move, 759, 402, 2, 211, 505]
+[:mouse_move, 761, 400, 2, 212, 506]
+[:mouse_move, 764, 398, 2, 213, 507]
+[:mouse_move, 765, 397, 2, 214, 508]
+[:mouse_move, 768, 397, 2, 215, 509]
+[:mouse_move, 769, 396, 2, 216, 510]
+[:mouse_move, 770, 396, 2, 217, 512]
+[:mouse_button_pressed, 1, 0, 1, 218, 514]
+[:mouse_move, 770, 395, 2, 219, 514]
+[:mouse_button_up, 1, 0, 1, 220, 523]
+[:mouse_move, 770, 394, 2, 221, 528]
+[:mouse_move, 770, 393, 2, 222, 530]
+[:mouse_move, 762, 389, 2, 223, 532]
+[:mouse_move, 757, 387, 2, 224, 533]
+[:mouse_move, 741, 379, 2, 225, 534]
+[:mouse_move, 737, 377, 2, 226, 535]
+[:mouse_move, 718, 369, 2, 227, 536]
+[:mouse_move, 711, 364, 2, 228, 537]
+[:mouse_move, 701, 356, 2, 229, 538]
+[:mouse_move, 699, 354, 2, 230, 539]
+[:mouse_move, 694, 348, 2, 231, 540]
+[:mouse_move, 692, 346, 2, 232, 541]
+[:mouse_move, 690, 344, 2, 233, 542]
+[:mouse_move, 690, 343, 2, 234, 543]
+[:mouse_move, 689, 342, 2, 235, 544]
+[:mouse_button_pressed, 1, 0, 1, 236, 546]
+[:mouse_button_up, 1, 0, 1, 237, 554]
+[:mouse_move, 689, 340, 2, 238, 555]
+[:mouse_move, 689, 339, 2, 239, 556]
+[:mouse_move, 686, 333, 2, 240, 557]
+[:mouse_move, 684, 330, 2, 241, 558]
+[:mouse_move, 681, 325, 2, 242, 559]
+[:mouse_move, 678, 322, 2, 243, 560]
+[:mouse_move, 673, 315, 2, 244, 561]
+[:mouse_move, 669, 312, 2, 245, 562]
+[:mouse_move, 665, 308, 2, 246, 563]
+[:mouse_move, 664, 307, 2, 247, 564]
+[:mouse_move, 660, 304, 2, 248, 565]
+[:mouse_move, 659, 302, 2, 249, 566]
+[:mouse_move, 656, 301, 2, 250, 567]
+[:mouse_move, 653, 300, 2, 251, 568]
+[:mouse_move, 651, 299, 2, 252, 569]
+[:mouse_move, 650, 298, 2, 253, 570]
+[:mouse_move, 649, 298, 2, 254, 571]
+[:mouse_move, 648, 297, 2, 255, 572]
+[:mouse_button_pressed, 1, 0, 1, 256, 573]
+[:mouse_button_up, 1, 0, 1, 257, 580]
+[:mouse_move, 645, 297, 2, 258, 582]
+[:mouse_move, 641, 297, 2, 259, 583]
+[:mouse_move, 628, 297, 2, 260, 584]
+[:mouse_move, 620, 297, 2, 261, 585]
+[:mouse_move, 606, 297, 2, 262, 586]
+[:mouse_move, 590, 297, 2, 263, 587]
+[:mouse_move, 571, 297, 2, 264, 588]
+[:mouse_move, 567, 297, 2, 265, 589]
+[:mouse_move, 550, 297, 2, 266, 590]
+[:mouse_move, 544, 297, 2, 267, 591]
+[:mouse_move, 535, 296, 2, 268, 592]
+[:mouse_move, 531, 295, 2, 269, 593]
+[:mouse_move, 526, 293, 2, 270, 594]
+[:mouse_move, 525, 293, 2, 271, 595]
+[:mouse_move, 523, 291, 2, 272, 596]
+[:mouse_move, 522, 290, 2, 273, 598]
+[:mouse_move, 522, 289, 2, 274, 599]
+[:mouse_move, 522, 288, 2, 275, 601]
+[:mouse_button_pressed, 1, 0, 1, 276, 604]
+[:mouse_move, 521, 288, 2, 277, 604]
+[:mouse_button_up, 1, 0, 1, 278, 612]
+[:mouse_move, 514, 283, 2, 279, 652]
+[:mouse_move, 505, 277, 2, 280, 653]
+[:mouse_move, 477, 262, 2, 281, 654]
+[:mouse_move, 443, 241, 2, 282, 655]
+[:mouse_move, 348, 187, 2, 283, 656]
+[:mouse_move, 288, 155, 2, 284, 657]
+[:mouse_move, 169, 90, 2, 285, 658]
+[:mouse_move, 147, 77, 2, 286, 659]
+[:mouse_move, 118, 61, 2, 287, 660]
+[:mouse_move, 94, 48, 2, 288, 661]
+[:mouse_move, 62, 28, 2, 289, 662]
+[:mouse_move, 51, 20, 2, 290, 663]
+[:mouse_move, 44, 17, 2, 291, 664]
+[:mouse_move, 39, 12, 2, 292, 665]
+[:mouse_move, 38, 11, 2, 293, 666]
+[:mouse_move, 36, 11, 2, 294, 667]
+[:mouse_move, 36, 10, 2, 295, 668]
+[:mouse_move, 38, 19, 2, 296, 671]
+[:mouse_move, 41, 24, 2, 297, 672]
+[:mouse_move, 45, 36, 2, 298, 673]
+[:mouse_move, 48, 39, 2, 299, 674]
+[:mouse_move, 51, 49, 2, 300, 675]
+[:mouse_move, 53, 53, 2, 301, 676]
+[:mouse_move, 56, 60, 2, 302, 677]
+[:mouse_move, 57, 62, 2, 303, 678]
+[:mouse_move, 60, 70, 2, 304, 679]
+[:mouse_move, 65, 77, 2, 305, 680]
+[:mouse_move, 73, 86, 2, 306, 681]
+[:mouse_move, 77, 91, 2, 307, 682]
+[:mouse_move, 89, 101, 2, 308, 683]
+[:mouse_move, 97, 105, 2, 309, 684]
+[:mouse_move, 117, 114, 2, 310, 685]
+[:mouse_move, 122, 116, 2, 311, 686]
+[:mouse_move, 137, 118, 2, 312, 687]
+[:mouse_move, 150, 119, 2, 313, 688]
+[:mouse_move, 155, 119, 2, 314, 689]
+[:mouse_move, 165, 119, 2, 315, 690]
+[:mouse_move, 170, 117, 2, 316, 691]
+[:mouse_move, 174, 114, 2, 317, 692]
+[:mouse_move, 177, 112, 2, 318, 693]
+[:mouse_move, 180, 108, 2, 319, 694]
+[:mouse_move, 181, 106, 2, 320, 695]
+[:mouse_move, 182, 99, 2, 321, 696]
+[:mouse_move, 182, 96, 2, 322, 697]
+[:mouse_move, 180, 91, 2, 323, 698]
+[:mouse_move, 179, 88, 2, 324, 699]
+[:mouse_move, 173, 83, 2, 325, 700]
+[:mouse_move, 168, 80, 2, 326, 701]
+[:mouse_move, 154, 78, 2, 327, 702]
+[:mouse_move, 150, 78, 2, 328, 703]
+[:mouse_move, 141, 78, 2, 329, 704]
+[:mouse_move, 138, 78, 2, 330, 705]
+[:mouse_move, 132, 78, 2, 331, 706]
+[:mouse_move, 130, 78, 2, 332, 707]
+[:mouse_move, 128, 78, 2, 333, 708]
+[:mouse_move, 126, 80, 2, 334, 709]
+[:mouse_move, 124, 83, 2, 335, 710]
+[:mouse_move, 124, 85, 2, 336, 711]
+[:mouse_move, 123, 88, 2, 337, 712]
+[:mouse_move, 122, 91, 2, 338, 713]
+[:mouse_move, 122, 96, 2, 339, 714]
+[:mouse_move, 122, 97, 2, 340, 715]
+[:mouse_move, 122, 100, 2, 341, 716]
+[:mouse_move, 122, 101, 2, 342, 717]
+[:mouse_move, 125, 103, 2, 343, 718]
+[:mouse_move, 128, 103, 2, 344, 719]
+[:mouse_move, 135, 104, 2, 345, 720]
+[:mouse_move, 146, 104, 2, 346, 721]
+[:mouse_move, 152, 104, 2, 347, 722]
+[:mouse_move, 160, 102, 2, 348, 723]
+[:mouse_move, 164, 101, 2, 349, 724]
+[:mouse_move, 169, 98, 2, 350, 725]
+[:mouse_move, 171, 97, 2, 351, 726]
+[:mouse_move, 173, 91, 2, 352, 727]
+[:mouse_move, 173, 88, 2, 353, 728]
+[:mouse_move, 172, 75, 2, 354, 729]
+[:mouse_move, 167, 68, 2, 355, 730]
+[:mouse_move, 153, 53, 2, 356, 731]
+[:mouse_move, 146, 45, 2, 357, 732]
+[:mouse_move, 122, 35, 2, 358, 733]
+[:mouse_move, 109, 33, 2, 359, 734]
+[:mouse_move, 83, 30, 2, 360, 735]
+[:mouse_move, 70, 30, 2, 361, 736]
+[:mouse_move, 54, 34, 2, 362, 737]
+[:mouse_move, 45, 37, 2, 363, 738]
+[:mouse_move, 35, 44, 2, 364, 739]
+[:mouse_move, 26, 53, 2, 365, 740]
+[:mouse_move, 21, 72, 2, 366, 741]
+[:mouse_move, 20, 87, 2, 367, 742]
+[:mouse_move, 20, 110, 2, 368, 743]
+[:mouse_move, 20, 122, 2, 369, 744]
+[:mouse_move, 32, 147, 2, 370, 745]
+[:mouse_move, 46, 158, 2, 371, 746]
+[:mouse_move, 76, 168, 2, 372, 747]
+[:mouse_move, 122, 177, 2, 373, 748]
+[:mouse_move, 149, 182, 2, 374, 749]
+[:mouse_move, 186, 185, 2, 375, 750]
+[:mouse_move, 208, 185, 2, 376, 751]
+[:mouse_move, 228, 182, 2, 377, 752]
+[:mouse_move, 240, 177, 2, 378, 753]
+[:mouse_move, 259, 160, 2, 379, 754]
+[:mouse_move, 264, 148, 2, 380, 755]
+[:mouse_move, 268, 120, 2, 381, 756]
+[:mouse_move, 269, 103, 2, 382, 757]
+[:mouse_move, 268, 82, 2, 383, 758]
+[:mouse_move, 261, 61, 2, 384, 759]
+[:mouse_move, 237, 35, 2, 385, 760]
+[:mouse_move, 221, 26, 2, 386, 761]
+[:mouse_move, 174, 17, 2, 387, 762]
+[:mouse_move, 161, 17, 2, 388, 763]
+[:mouse_move, 107, 17, 2, 389, 764]
+[:mouse_move, 84, 19, 2, 390, 765]
+[:mouse_move, 59, 26, 2, 391, 766]
+[:mouse_move, 48, 30, 2, 392, 767]
+[:mouse_move, 23, 46, 2, 393, 768]
+[:mouse_move, 18, 55, 2, 394, 769]
+[:mouse_move, 13, 69, 2, 395, 770]
+[:mouse_move, 12, 76, 2, 396, 771]
+[:mouse_move, 12, 85, 2, 397, 772]
+[:mouse_move, 13, 97, 2, 398, 773]
+[:mouse_move, 19, 102, 2, 399, 774]
+[:mouse_move, 36, 105, 2, 400, 775]
+[:mouse_move, 46, 106, 2, 401, 776]
+[:mouse_move, 62, 107, 2, 402, 777]
+[:mouse_move, 73, 107, 2, 403, 778]
+[:mouse_move, 83, 107, 2, 404, 779]
+[:mouse_move, 112, 118, 2, 405, 818]
+[:mouse_move, 141, 134, 2, 406, 819]
+[:mouse_move, 230, 194, 2, 407, 820]
+[:mouse_move, 324, 265, 2, 408, 821]
+[:mouse_move, 423, 340, 2, 409, 822]
+[:key_down_raw, 100, 0, 2, 410, 823]
+[:key_up_raw, 100, 0, 2, 411, 823]
+[:mouse_move, 452, 361, 2, 412, 823]
+[:mouse_move, 473, 376, 2, 413, 823]
+[:mouse_move, 487, 385, 2, 414, 824]
+[:mouse_move, 490, 382, 2, 415, 837]
+[:mouse_move, 497, 379, 2, 416, 838]
+[:mouse_move, 509, 371, 2, 417, 839]
+[:mouse_move, 517, 366, 2, 418, 840]
+[:mouse_move, 528, 360, 2, 419, 841]
+[:mouse_move, 532, 358, 2, 420, 842]
+[:mouse_move, 538, 354, 2, 421, 843]
+[:mouse_move, 541, 352, 2, 422, 844]
+[:mouse_move, 545, 348, 2, 423, 845]
+[:mouse_move, 546, 346, 2, 424, 846]
+[:mouse_move, 548, 343, 2, 425, 847]
+[:mouse_move, 549, 340, 2, 426, 848]
+[:mouse_move, 552, 329, 2, 427, 849]
+[:mouse_move, 554, 324, 2, 428, 850]
+[:mouse_move, 558, 314, 2, 429, 851]
+[:mouse_move, 562, 309, 2, 430, 852]
+[:mouse_move, 567, 298, 2, 431, 853]
+[:mouse_move, 568, 296, 2, 432, 854]
+[:mouse_move, 571, 290, 2, 433, 855]
+[:mouse_move, 572, 286, 2, 434, 856]
+[:mouse_move, 573, 285, 2, 435, 857]
+[:mouse_move, 574, 283, 2, 436, 858]
+[:mouse_move, 574, 282, 2, 437, 860]
+[:mouse_move, 574, 281, 2, 438, 861]
+[:mouse_move, 576, 280, 2, 439, 863]
+[:mouse_move, 576, 279, 2, 440, 864]
+[:mouse_move, 576, 277, 2, 441, 865]
+[:mouse_move, 577, 274, 2, 442, 866]
+[:mouse_move, 577, 273, 2, 443, 867]
+[:mouse_move, 578, 269, 2, 444, 868]
+[:mouse_move, 579, 268, 2, 445, 869]
+[:mouse_move, 580, 265, 2, 446, 870]
+[:mouse_move, 581, 265, 2, 447, 871]
+[:mouse_move, 583, 263, 2, 448, 872]
+[:mouse_move, 585, 262, 2, 449, 873]
+[:mouse_move, 589, 260, 2, 450, 874]
+[:mouse_move, 593, 259, 2, 451, 875]
+[:mouse_move, 599, 258, 2, 452, 876]
+[:mouse_move, 603, 258, 2, 453, 877]
+[:mouse_move, 606, 258, 2, 454, 878]
+[:mouse_move, 610, 259, 2, 455, 879]
+[:mouse_move, 613, 260, 2, 456, 880]
+[:mouse_move, 614, 261, 2, 457, 881]
+[:mouse_move, 616, 264, 2, 458, 882]
+[:mouse_move, 617, 265, 2, 459, 883]
+[:mouse_move, 618, 267, 2, 460, 884]
+[:mouse_move, 618, 269, 2, 461, 885]
+[:mouse_move, 619, 272, 2, 462, 886]
+[:mouse_move, 619, 273, 2, 463, 887]
+[:mouse_move, 620, 274, 2, 464, 888]
+[:mouse_move, 620, 275, 2, 465, 889]
+[:mouse_button_pressed, 1, 0, 1, 466, 893]
+[:mouse_button_up, 1, 0, 1, 467, 899]
+[:mouse_move, 618, 275, 2, 468, 906]
+[:mouse_move, 603, 279, 2, 469, 907]
+[:mouse_move, 595, 282, 2, 470, 908]
+[:mouse_move, 568, 291, 2, 471, 909]
+[:mouse_move, 553, 294, 2, 472, 910]
+[:mouse_move, 533, 298, 2, 473, 911]
+[:mouse_move, 522, 300, 2, 474, 912]
+[:mouse_move, 512, 302, 2, 475, 913]
+[:mouse_move, 503, 304, 2, 476, 914]
+[:mouse_move, 502, 304, 2, 477, 915]
+[:mouse_move, 500, 304, 2, 478, 916]
+[:mouse_move, 499, 304, 2, 479, 917]
+[:mouse_button_pressed, 1, 0, 1, 480, 921]
+[:mouse_button_up, 1, 0, 1, 481, 926]
+[:mouse_move, 499, 305, 2, 482, 930]
+[:mouse_move, 499, 307, 2, 483, 931]
+[:mouse_move, 506, 328, 2, 484, 932]
+[:mouse_move, 513, 344, 2, 485, 933]
+[:mouse_move, 525, 372, 2, 486, 934]
+[:mouse_move, 528, 377, 2, 487, 935]
+[:mouse_move, 535, 393, 2, 488, 936]
+[:mouse_move, 545, 409, 2, 489, 937]
+[:mouse_move, 549, 414, 2, 490, 938]
+[:mouse_move, 552, 420, 2, 491, 939]
+[:mouse_move, 554, 421, 2, 492, 940]
+[:mouse_move, 556, 424, 2, 493, 941]
+[:mouse_move, 558, 425, 2, 494, 942]
+[:mouse_move, 560, 427, 2, 495, 943]
+[:mouse_move, 561, 429, 2, 496, 944]
+[:mouse_move, 563, 430, 2, 497, 945]
+[:mouse_move, 564, 432, 2, 498, 946]
+[:mouse_move, 564, 434, 2, 499, 947]
+[:mouse_move, 565, 434, 2, 500, 948]
+[:mouse_move, 565, 435, 2, 501, 949]
+[:mouse_move, 566, 435, 2, 502, 950]
+[:mouse_button_pressed, 1, 0, 1, 503, 953]
+[:mouse_button_up, 1, 0, 1, 504, 959]
+[:mouse_move, 566, 436, 2, 505, 963]
+[:mouse_move, 566, 437, 2, 506, 964]
+[:mouse_move, 570, 445, 2, 507, 965]
+[:mouse_move, 576, 454, 2, 508, 966]
+[:mouse_move, 579, 459, 2, 509, 967]
+[:mouse_move, 584, 465, 2, 510, 968]
+[:mouse_move, 586, 468, 2, 511, 969]
+[:mouse_move, 590, 471, 2, 512, 970]
+[:mouse_move, 593, 472, 2, 513, 971]
+[:mouse_move, 597, 473, 2, 514, 972]
+[:mouse_move, 598, 473, 2, 515, 973]
+[:mouse_move, 602, 474, 2, 516, 974]
+[:mouse_move, 603, 474, 2, 517, 975]
+[:mouse_move, 609, 474, 2, 518, 976]
+[:mouse_move, 610, 474, 2, 519, 977]
+[:mouse_move, 613, 474, 2, 520, 978]
+[:mouse_move, 614, 474, 2, 521, 979]
+[:mouse_move, 615, 474, 2, 522, 980]
+[:mouse_move, 616, 474, 2, 523, 981]
+[:mouse_button_pressed, 1, 0, 1, 524, 982]
+[:mouse_button_up, 1, 0, 1, 525, 988]
+[:mouse_move, 617, 474, 2, 526, 991]
+[:mouse_move, 625, 473, 2, 527, 992]
+[:mouse_move, 632, 472, 2, 528, 993]
+[:mouse_move, 653, 466, 2, 529, 994]
+[:mouse_move, 663, 462, 2, 530, 995]
+[:mouse_move, 696, 453, 2, 531, 996]
+[:mouse_move, 713, 449, 2, 532, 997]
+[:mouse_move, 723, 446, 2, 533, 998]
+[:mouse_move, 730, 445, 2, 534, 999]
+[:mouse_move, 732, 444, 2, 535, 1000]
+[:mouse_move, 736, 444, 2, 536, 1001]
+[:mouse_move, 734, 444, 2, 537, 1005]
+[:mouse_button_pressed, 1, 0, 1, 538, 1009]
+[:mouse_button_up, 1, 0, 1, 539, 1017]
+[:mouse_move, 734, 442, 2, 540, 1020]
+[:mouse_move, 734, 440, 2, 541, 1021]
+[:mouse_move, 727, 434, 2, 542, 1022]
+[:mouse_move, 715, 427, 2, 543, 1023]
+[:mouse_move, 690, 418, 2, 544, 1024]
+[:mouse_move, 682, 416, 2, 545, 1025]
+[:mouse_move, 666, 408, 2, 546, 1026]
+[:mouse_move, 663, 407, 2, 547, 1027]
+[:mouse_move, 652, 401, 2, 548, 1028]
+[:mouse_move, 649, 397, 2, 549, 1029]
+[:mouse_move, 646, 394, 2, 550, 1030]
+[:mouse_move, 645, 393, 2, 551, 1031]
+[:mouse_move, 645, 390, 2, 552, 1032]
+[:mouse_move, 645, 388, 2, 553, 1033]
+[:mouse_move, 645, 387, 2, 554, 1034]
+[:mouse_move, 645, 386, 2, 555, 1035]
+[:mouse_button_pressed, 1, 0, 1, 556, 1037]
+[:mouse_button_up, 1, 0, 1, 557, 1043]
+[:mouse_move, 644, 386, 2, 558, 1063]
+[:mouse_move, 638, 382, 2, 559, 1064]
+[:mouse_move, 629, 376, 2, 560, 1065]
+[:mouse_move, 617, 368, 2, 561, 1066]
+[:mouse_move, 553, 329, 2, 562, 1067]
+[:mouse_move, 507, 299, 2, 563, 1068]
+[:mouse_move, 331, 208, 2, 564, 1069]
+[:mouse_move, 288, 186, 2, 565, 1070]
+[:mouse_move, 125, 107, 2, 566, 1071]
+[:mouse_move, 98, 93, 2, 567, 1072]
+[:mouse_move, 37, 55, 2, 568, 1073]
+[:mouse_move, 5, 35, 2, 569, 1074]
+[:mouse_move, -23, 10, 2, 570, 1075]
+[:mouse_move, -23, 7, 2, 571, 1094]
+[:mouse_move, -23, 5, 2, 572, 1095]
+[:mouse_move, -24, 2, 2, 573, 1096]
+[:mouse_move, -24, 0, 2, 574, 1097]
+[:mouse_move, -24, 0, 2, 575, 1099]
diff --git a/samples/99_genre_rpg_tactical/isometric_grid/sprites/leftSide.png b/samples/99_genre_rpg_tactical/isometric_grid/sprites/leftSide.png
new file mode 100644
index 0000000..1fc0060
--- /dev/null
+++ b/samples/99_genre_rpg_tactical/isometric_grid/sprites/leftSide.png
Binary files differ
diff --git a/samples/99_genre_rpg_tactical/isometric_grid/sprites/mountain.png b/samples/99_genre_rpg_tactical/isometric_grid/sprites/mountain.png
new file mode 100644
index 0000000..5794464
--- /dev/null
+++ b/samples/99_genre_rpg_tactical/isometric_grid/sprites/mountain.png
Binary files differ
diff --git a/samples/99_genre_rpg_tactical/isometric_grid/sprites/ocean.png b/samples/99_genre_rpg_tactical/isometric_grid/sprites/ocean.png
new file mode 100644
index 0000000..fbf5fc1
--- /dev/null
+++ b/samples/99_genre_rpg_tactical/isometric_grid/sprites/ocean.png
Binary files differ
diff --git a/samples/99_genre_rpg_tactical/isometric_grid/sprites/rightSide.png b/samples/99_genre_rpg_tactical/isometric_grid/sprites/rightSide.png
new file mode 100644
index 0000000..d74ff14
--- /dev/null
+++ b/samples/99_genre_rpg_tactical/isometric_grid/sprites/rightSide.png
Binary files differ
diff --git a/samples/99_genre_rpg_tactical/isometric_grid/sprites/river.png b/samples/99_genre_rpg_tactical/isometric_grid/sprites/river.png
new file mode 100644
index 0000000..eb51890
--- /dev/null
+++ b/samples/99_genre_rpg_tactical/isometric_grid/sprites/river.png
Binary files differ
diff --git a/samples/99_genre_rpg_tactical/isometric_grid/sprites/selectedTile.png b/samples/99_genre_rpg_tactical/isometric_grid/sprites/selectedTile.png
new file mode 100644
index 0000000..3719cac
--- /dev/null
+++ b/samples/99_genre_rpg_tactical/isometric_grid/sprites/selectedTile.png
Binary files differ
diff --git a/samples/99_genre_rpg_tactical/isometric_grid/sprites/tile.png b/samples/99_genre_rpg_tactical/isometric_grid/sprites/tile.png
new file mode 100644
index 0000000..4a4f690
--- /dev/null
+++ b/samples/99_genre_rpg_tactical/isometric_grid/sprites/tile.png
Binary files differ