essytas 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (174) hide show
  1. data/LICENSE +19 -0
  2. data/README +3 -0
  3. data/Rakefile +44 -0
  4. data/bin/essytas +2 -0
  5. data/lib/animation.rb +74 -0
  6. data/lib/config.rb +63 -0
  7. data/lib/core.rb +242 -0
  8. data/lib/cursor.rb +43 -0
  9. data/lib/def/animations/explosion1.anim +103 -0
  10. data/lib/def/characters.def +132 -0
  11. data/lib/def/de/dialogues/test.dlg +4 -0
  12. data/lib/def/de/enemies.trans +6 -0
  13. data/lib/def/de/items.trans +84 -0
  14. data/lib/def/de/skills.trans +48 -0
  15. data/lib/def/de/spells.trans +31 -0
  16. data/lib/def/en/dialogues/test.dlg +4 -0
  17. data/lib/def/en/enemies.trans +6 -0
  18. data/lib/def/en/items.trans +78 -0
  19. data/lib/def/en/skills.trans +48 -0
  20. data/lib/def/en/spells.trans +31 -0
  21. data/lib/def/enemies.def +8 -0
  22. data/lib/def/enemies/wolf.bhv +11 -0
  23. data/lib/def/init.def +5 -0
  24. data/lib/def/items.def +153 -0
  25. data/lib/def/loot.def +2 -0
  26. data/lib/def/particles.def +66 -0
  27. data/lib/def/recipies.def +18 -0
  28. data/lib/def/skills.def +40 -0
  29. data/lib/def/spells.def +42 -0
  30. data/lib/def/spells.rb +16 -0
  31. data/lib/def/weapons.def +9 -0
  32. data/lib/ext/astar/AMap.rb +146 -0
  33. data/lib/ext/astar/node.rb +72 -0
  34. data/lib/ext/astar/priority_queue.rb +44 -0
  35. data/lib/ext/shader.rb +116 -0
  36. data/lib/game/alchemy/recipe.rb +26 -0
  37. data/lib/game/character.rb +102 -0
  38. data/lib/game/combat/bar.rb +119 -0
  39. data/lib/game/combat/battle.rb +345 -0
  40. data/lib/game/combat/control.rb +18 -0
  41. data/lib/game/combat/gui.rb +190 -0
  42. data/lib/game/combat/gui/select_item.rb +11 -0
  43. data/lib/game/combat/gui/select_spell.rb +38 -0
  44. data/lib/game/constitution.rb +48 -0
  45. data/lib/game/equipment.rb +34 -0
  46. data/lib/game/inventory.rb +37 -0
  47. data/lib/game/item.rb +54 -0
  48. data/lib/game/magic.rb +33 -0
  49. data/lib/game/map/events.rb +29 -0
  50. data/lib/game/map/fog.rb +41 -0
  51. data/lib/game/map/map.rb +247 -0
  52. data/lib/game/map/map_animation.rb +26 -0
  53. data/lib/game/map/map_loader.rb +177 -0
  54. data/lib/game/map/map_object.rb +208 -0
  55. data/lib/game/map/map_particle.rb +27 -0
  56. data/lib/game/map/player.rb +78 -0
  57. data/lib/game/map/tile.rb +35 -0
  58. data/lib/game/mind.rb +24 -0
  59. data/lib/game/npc/behaviour.rb +45 -0
  60. data/lib/game/npc/bubble.rb +28 -0
  61. data/lib/game/npc/goal.rb +93 -0
  62. data/lib/game/npc/npc.rb +95 -0
  63. data/lib/game/npc/task.rb +73 -0
  64. data/lib/game/osd/magic.rb +24 -0
  65. data/lib/game/party.rb +42 -0
  66. data/lib/game/skills.rb +64 -0
  67. data/lib/game/spell.rb +35 -0
  68. data/lib/game_window.rb +95 -0
  69. data/lib/glsl/contrast.frag +12 -0
  70. data/lib/glsl/fade.frag +11 -0
  71. data/lib/glsl/mezzotint.frag +20 -0
  72. data/lib/glsl/noise.frag +20 -0
  73. data/lib/glsl/pixelate.frag +42 -0
  74. data/lib/glsl/radialblur.frag +28 -0
  75. data/lib/glsl/sepia.frag +15 -0
  76. data/lib/glsl/shockwave.frag +24 -0
  77. data/lib/glsl/tv_screen.frag +17 -0
  78. data/lib/graphics/animations/credits.txt +1 -0
  79. data/lib/graphics/animations/explosion2.png +0 -0
  80. data/lib/graphics/backgrounds/white_ties_grass.png +0 -0
  81. data/lib/graphics/chars/ejera.png +0 -0
  82. data/lib/graphics/chars/salyjea.png +0 -0
  83. data/lib/graphics/chars/tharat.png +0 -0
  84. data/lib/graphics/combat/tharat.png +0 -0
  85. data/lib/graphics/cursors/normal.png +0 -0
  86. data/lib/graphics/fog/clouds1.png +0 -0
  87. data/lib/graphics/gui/bar_center.png +0 -0
  88. data/lib/graphics/gui/bar_left.png +0 -0
  89. data/lib/graphics/gui/bar_right.png +0 -0
  90. data/lib/graphics/gui/button_background.png +0 -0
  91. data/lib/graphics/gui/button_close.png +0 -0
  92. data/lib/graphics/gui/button_close_hi.png +0 -0
  93. data/lib/graphics/gui/button_highlight.png +0 -0
  94. data/lib/graphics/gui/charequip_background.png +0 -0
  95. data/lib/graphics/gui/charselect_background.png +0 -0
  96. data/lib/graphics/gui/container_background.png +0 -0
  97. data/lib/graphics/gui/drop_item.png +0 -0
  98. data/lib/graphics/gui/equip_Etarae.png +0 -0
  99. data/lib/graphics/gui/equip_Mensch.png +0 -0
  100. data/lib/graphics/gui/equipslot_background.png +0 -0
  101. data/lib/graphics/gui/iteminfo_background.png +0 -0
  102. data/lib/graphics/gui/msg_background.png +0 -0
  103. data/lib/graphics/gui/scrollbar_background.png +0 -0
  104. data/lib/graphics/gui/scroller.png +0 -0
  105. data/lib/graphics/gui/tile_32.png +0 -0
  106. data/lib/graphics/gui/tile_32_highlight.png +0 -0
  107. data/lib/graphics/icons/items/arrow.png +0 -0
  108. data/lib/graphics/icons/items/bandage.png +0 -0
  109. data/lib/graphics/icons/items/boots_leather.png +0 -0
  110. data/lib/graphics/icons/items/bow.png +0 -0
  111. data/lib/graphics/icons/items/credits.txt +8 -0
  112. data/lib/graphics/icons/items/harness_leather.png +0 -0
  113. data/lib/graphics/icons/items/knife.png +0 -0
  114. data/lib/graphics/icons/items/shirt_linen.png +0 -0
  115. data/lib/graphics/items/none.png +0 -0
  116. data/lib/graphics/menu/ingame_background.png +0 -0
  117. data/lib/graphics/menu/ingame_background.xcf +0 -0
  118. data/lib/graphics/menu/start_background.png +0 -0
  119. data/lib/graphics/missing.png +0 -0
  120. data/lib/graphics/osd/magic_bg.png +0 -0
  121. data/lib/graphics/particles/leaf.png +0 -0
  122. data/lib/graphics/particles/smoke.png +0 -0
  123. data/lib/graphics/pixel.png +0 -0
  124. data/lib/graphics/tiles/test.png +0 -0
  125. data/lib/gui/base.rb +278 -0
  126. data/lib/gui/button.rb +93 -0
  127. data/lib/gui/char_equip.rb +118 -0
  128. data/lib/gui/char_selector.rb +54 -0
  129. data/lib/gui/context_menu.rb +115 -0
  130. data/lib/gui/draggable.rb +18 -0
  131. data/lib/gui/grid.rb +118 -0
  132. data/lib/gui/image.rb +17 -0
  133. data/lib/gui/inventory.rb +42 -0
  134. data/lib/gui/item_info.rb +33 -0
  135. data/lib/gui/slider.rb +10 -0
  136. data/lib/gui/textfield.rb +57 -0
  137. data/lib/layer.rb +64 -0
  138. data/lib/load.rb +31 -0
  139. data/lib/main.rb +18 -0
  140. data/lib/maps/def/test.bhv +26 -0
  141. data/lib/maps/def/test.rb +14 -0
  142. data/lib/maps/test.tmx +133 -0
  143. data/lib/maps/test2.tmx +94 -0
  144. data/lib/maps/test3.tmx +29 -0
  145. data/lib/maps/test3_lower.tmx +25 -0
  146. data/lib/maps/test3_upper.tmx +25 -0
  147. data/lib/maps/test_left.tmx +25 -0
  148. data/lib/maps/test_upper.tmx +25 -0
  149. data/lib/music/Butterfly Tea - A New Hope 2K11.mp3 +0 -0
  150. data/lib/music/Greendjohn - Rebirth.mp3 +0 -0
  151. data/lib/music/credits.txt +8 -0
  152. data/lib/parse.rb +605 -0
  153. data/lib/parse_tmx.rb +114 -0
  154. data/lib/particles.rb +127 -0
  155. data/lib/sample.rb +29 -0
  156. data/lib/save.rb +44 -0
  157. data/lib/song.rb +41 -0
  158. data/lib/sounds/click1.wav +0 -0
  159. data/lib/sounds/credits.txt +2 -0
  160. data/lib/sounds/error1.wav +0 -0
  161. data/lib/sprite.rb +35 -0
  162. data/lib/states/menus.rb +17 -0
  163. data/lib/states/menus/alchemy.rb +53 -0
  164. data/lib/states/menus/equip.rb +79 -0
  165. data/lib/states/menus/ingame.rb +34 -0
  166. data/lib/states/menus/magic.rb +31 -0
  167. data/lib/states/menus/options.rb +54 -0
  168. data/lib/states/menus/start.rb +38 -0
  169. data/lib/states/states.rb +154 -0
  170. data/lib/tileset.rb +42 -0
  171. data/lib/tools/world.rb +103 -0
  172. data/lib/tools/worldmap_editor.rb +221 -0
  173. data/lib/translate.rb +368 -0
  174. metadata +255 -0
@@ -0,0 +1,17 @@
1
+
2
+ module Core::GUI
3
+
4
+ class Image < Element
5
+ attr_accessor :color
6
+ def initialize(x, y, img)
7
+ @img = Core.sprite("gui/#{img}")
8
+ w, h, = @img.width, @img.height
9
+ super(x, y, w, h)
10
+ @color = Gosu::Color.new(255, 255, 255, 255)
11
+ end
12
+ def draw
13
+ @img.draw(@x, @y, Core::GUI_Z + 10, 1, 1, @color)
14
+ end
15
+ end
16
+
17
+ end
@@ -0,0 +1,42 @@
1
+
2
+ module Core::GUI
3
+ class Inventory < Container
4
+ include Core
5
+ attr_reader :inv
6
+ def initialize(x, y, w, h, char, filter=[:all], item_height=24)
7
+ super(x, y, w, h, item_height)
8
+ @item_height = item_height
9
+ @inv = char.inventory
10
+ @filter = filter
11
+ @item = nil
12
+ assemble_items
13
+ end
14
+
15
+ def assemble_items
16
+ @items = []
17
+ items = {}
18
+ y = 0
19
+ @inv.each { |item|
20
+ if @filter.include?(:all) or @filter.include?(item.type)
21
+ if items[item.name] != nil
22
+ items[item.name][1] += 1
23
+ else
24
+ items.store(item.name, [item, 1])
25
+ end
26
+ end
27
+ }
28
+ items.each_value { |ary|
29
+ item = ary[0]
30
+ amount = ary[1]
31
+ @items.push(Button.new(@x, @y+(y*@item_height), @w-24, @item_height, "#{amount}x #{Trans.item(item.name)}", lambda { clicked(item) }, false, :left, 24))
32
+ y += 1
33
+ }
34
+ end
35
+
36
+ def inventory=(inv)
37
+ @inv = inv
38
+ assemble_items
39
+ end
40
+
41
+ end
42
+ end
@@ -0,0 +1,33 @@
1
+
2
+ module Core::GUI
3
+
4
+ class ItemInfo < Element
5
+ include Core
6
+ def initialize(x, y)
7
+ super(x, y, 672, 160)
8
+ @bg = Core.sprite("gui/iteminfo_background")
9
+ @img = Core.sprite("items/none")
10
+ @bigfont = Core.font(Core::DEFAULT_FONT, 32)
11
+ @font = Core.font(Core::DEFAULT_FONT, 24)
12
+ @item = nil
13
+ end
14
+ def item=(item)
15
+ @item = item
16
+ if @item
17
+ @img = @item.img
18
+ else
19
+ @img = Core.sprite("items/none")
20
+ end
21
+ end
22
+ def draw
23
+ super
24
+ @bg.draw(@x, @y, Core::GUI_Z + 9, @w/@bg.width.to_f, @h/@bg.height.to_f)
25
+ @img.draw(@x, @y, Core::GUI_Z + 10, @h/@img.width.to_f, @h/@img.height.to_f)
26
+ if @item
27
+ @bigfont.draw(Trans.item(@item.name), @x+@h+4, @y+4, Core::GUI_Z + 11, 1, 1, Gosu::Color::BLACK)
28
+ @font.draw(Trans.item("#{@item.name}_desc"), @x+@h+4, @y+36, Core::GUI_Z + 11, 1, 1, Gosu::Color::BLACK)
29
+ end
30
+ end
31
+ end
32
+
33
+ end
@@ -0,0 +1,10 @@
1
+
2
+ module Core::GUI
3
+ class Slider < Element
4
+ attr_accessor :value
5
+ def initialize(x, y, w, h)
6
+ super
7
+ @value = 0
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,57 @@
1
+
2
+ module Core::GUI
3
+ # Displays text in the given font and alignment
4
+ class Textfield < Element
5
+
6
+ attr_accessor :max_width
7
+
8
+ def initialize(x, y, w, h, txt="", size=20, align=:left, fixed=true, maxw=w)
9
+ super(x, y, w, h)
10
+ @bg = Core.sprite("gui/container_background")
11
+ @font = Core.font(Core::DEFAULT_FONT, size)
12
+ @align = align
13
+ @fixed = fixed
14
+ @max_width = maxw
15
+ set_text(txt)
16
+ end
17
+
18
+ def text=(text)
19
+ if !@fixed
20
+ @w = @max_width
21
+ end
22
+ @text = Core.multiline(text, @w, @font)
23
+ if !@fixed
24
+ @w = 8 + @font.text_width(@text.sort_by { |line| line.length}.reverse!.first)
25
+ @h = 8 + @text.size * (@font.height)
26
+ end
27
+ @fws = []
28
+ @text.each { |line|
29
+ @fws.push(@font.text_width(line))
30
+ }
31
+ end
32
+
33
+ alias :set_text :text=
34
+
35
+ def draw
36
+ @bg.draw(@x+@xoff, @y+@yoff, Core::GUI_Z + @zoff, (@w)/@bg.width.to_f, @h/@bg.height.to_f)
37
+ y = 0
38
+ if @text.size == 1
39
+ y += 4
40
+ end
41
+ i = 0
42
+ @text.each { |line|
43
+ case @align
44
+ when :center
45
+ @font.draw(line, @x + @xoff + (@w/2) - (@fws[i]/2), @y + @yoff + (@font.height/9) + y, Core::GUI_Z + 10 + @zoff, 1, 1, Gosu::Color::BLACK)
46
+ when :left
47
+ @font.draw(line, @x + @xoff + 4, @y + @yoff + (@font.height/9) + y, Core::GUI_Z + 10 + @zoff, 1, 1, Gosu::Color::BLACK)
48
+ when :right
49
+ @font.draw(line, @x + @xoff + (@w-@fws[i]), @y + @yoff + (@font.height/9) + y, Core::GUI_Z + 10 + @zoff, 1, 1, Gosu::Color::BLACK)
50
+ end
51
+ y += @font.height
52
+ i += 1
53
+ }
54
+ end
55
+
56
+ end
57
+ end
@@ -0,0 +1,64 @@
1
+
2
+ module Core
3
+ class Layer
4
+ attr_reader :properties, :tileset
5
+ attr_accessor :filled
6
+ def initialize(w, h, props, tiles, tileset=nil)
7
+ @properties = props
8
+ @z = Core::MAP_Z
9
+ @z += props[:z].to_i if props[:z]
10
+ create_tilemap(w, h, tiles)
11
+ if tileset
12
+ fill_tilemap(tileset)
13
+ end
14
+ end
15
+
16
+ def create_tilemap(w, h, tiles)
17
+ @tiles = Array.new(h) { [] }
18
+ @filled = @tiles.dup
19
+ wi = hi = 0
20
+ tiles.each { |int|
21
+ @tiles[hi].push(int)
22
+ wi += 1
23
+ if wi >= w
24
+ wi = 0
25
+ hi += 1
26
+ end
27
+ }
28
+ end
29
+ def fill_tilemap(tileset)
30
+ @tileset = tileset
31
+ @filled = Array.new(@tiles.size) { [] }
32
+ h = w = 0
33
+ @tiles.each { |ary|
34
+ ary.each { |gid|
35
+ @filled[h][w] = tileset.tile(gid-1, w*32, h*32, @z)
36
+ w += 1
37
+ }
38
+ w = 0
39
+ h += 1
40
+ }
41
+ return @filled
42
+ end
43
+ end
44
+
45
+ class CollisionLayer
46
+ attr_reader :tiles
47
+ def initialize(w, h, tiles)
48
+ create_tilemap(w, h, tiles)
49
+ end
50
+ def create_tilemap(w, h, tiles)
51
+ @tiles = Array.new(h) { [] }
52
+ wi = hi = 0
53
+ tiles.each { |int|
54
+ @tiles[hi].push(int)
55
+ wi += 1
56
+ if wi >= w
57
+ wi = 0
58
+ hi += 1
59
+ end
60
+ }
61
+ end
62
+ end
63
+
64
+ end
@@ -0,0 +1,31 @@
1
+
2
+ module Core
3
+
4
+ def self.load_game(name="autosave")
5
+ f = File.open("#{Core::SAVE_DIR}#{name}.esf")
6
+ inflate = Zlib::Inflate.new
7
+ str = Base64.decode64(inflate.inflate(f.read))
8
+ inflate.close
9
+ f.close
10
+ map_obj = []
11
+ map_misc = []
12
+ lines = str.lines.to_a
13
+ puts Core::States.constants.inspect
14
+ state = Core::States.const_get("#{lines.shift.sub("\n", "")}".to_sym)
15
+ lines.each do |line|
16
+ line.sub!("\n", "")
17
+ puts line.inspect
18
+ end
19
+ party = nil
20
+ Core.window.advance(state.new(Core.window, party))
21
+ end
22
+
23
+ private
24
+
25
+ def self.map_object(line)
26
+ end
27
+
28
+ def self.map_misc(line)
29
+ end
30
+
31
+ end
@@ -0,0 +1,18 @@
1
+
2
+ require "rubygems"
3
+ require_relative "core.rb"
4
+ require_relative "game_window.rb"
5
+
6
+ # :main:EH
7
+
8
+ begin
9
+ g = Core::GameWindow.new
10
+ g.show
11
+ Core.exit(0)
12
+ rescue Interrupt
13
+ warn("Interrupted!")
14
+ Core.exit(1)
15
+ rescue => ex
16
+ puts("#{ex.class}: #{ex}\n#{ex.backtrace.join("\n").gsub("#{Core::LIBRARY_PATH}/", "")}")
17
+ Core.exit(1)
18
+ end
@@ -0,0 +1,26 @@
1
+
2
+ npc_1 {
3
+ init = [
4
+ <particles @x|@y smoke follow>
5
+ ]
6
+ trigger = [
7
+ ]
8
+ update = [
9
+ ]
10
+ motion = [
11
+ <path_to 19|14 wait>
12
+ <path_to 0|0 wait>
13
+ ]
14
+ }
15
+
16
+ npc_2 {
17
+ init = [
18
+ ]
19
+ trigger = [
20
+ <msg :test_npc2_greeting>
21
+ ]
22
+ update = [
23
+ ]
24
+ motion = [
25
+ ]
26
+ }
@@ -0,0 +1,14 @@
1
+
2
+ module Maps
3
+
4
+ module Test
5
+
6
+ def self.pre_spawn
7
+ end
8
+
9
+ def self.event(ev)
10
+ end
11
+
12
+ end
13
+
14
+ end
@@ -0,0 +1,133 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <map version="1.0" orientation="orthogonal" width="20" height="15" tilewidth="32" tileheight="32">
3
+ <properties>
4
+ <property name="fog" value="clouds1"/>
5
+ <property name="foga" value="125"/>
6
+ <property name="fogb" value="130"/>
7
+ <property name="fogg" value="255"/>
8
+ <property name="fogr" value="130"/>
9
+ <property name="fogx" value="0.5"/>
10
+ <property name="fogy" value="0.25"/>
11
+ <property name="left" value="test_left"/>
12
+ <property name="lower" value="test2"/>
13
+ <property name="music" value="Butterfly Tea - A New Hope 2K11"/>
14
+ <property name="name" value="Test 1"/>
15
+ <property name="right" value="test3"/>
16
+ <property name="tonea" value="20"/>
17
+ <property name="toneb" value="100"/>
18
+ <property name="toneg" value="100"/>
19
+ <property name="toner" value="255"/>
20
+ <property name="upper" value="test_upper"/>
21
+ </properties>
22
+ <tileset firstgid="1" name="Test1" tilewidth="32" tileheight="32">
23
+ <image source="../graphics/tiles/test.png" width="256" height="1312"/>
24
+ <tile id="98">
25
+ <properties>
26
+ <property name="collide" value="true"/>
27
+ </properties>
28
+ </tile>
29
+ </tileset>
30
+ <layer name="ground1" width="20" height="15">
31
+ <properties>
32
+ <property name="z" value="1"/>
33
+ </properties>
34
+ <data encoding="csv">
35
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
36
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
37
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
38
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
39
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
40
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
41
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
42
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
43
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
44
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
45
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
46
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
47
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
48
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
49
+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
50
+ </data>
51
+ </layer>
52
+ <layer name="ground2" width="20" height="15">
53
+ <properties>
54
+ <property name="z" value="2"/>
55
+ </properties>
56
+ <data encoding="csv">
57
+ 0,0,0,0,0,0,0,0,0,0,10,11,12,0,0,0,0,0,0,0,
58
+ 0,0,0,0,0,0,0,0,0,0,10,11,12,0,0,0,0,0,0,0,
59
+ 0,0,0,0,0,0,0,0,0,2,3,11,12,0,0,0,0,0,0,0,
60
+ 0,0,0,0,0,0,0,0,0,10,11,11,12,0,0,0,0,0,0,0,
61
+ 0,0,0,0,0,0,0,0,0,10,11,19,20,0,0,0,0,0,0,0,
62
+ 0,0,0,0,0,0,0,2,3,3,11,3,4,0,0,0,0,0,0,0,
63
+ 0,0,0,0,0,0,2,3,11,11,11,11,12,0,0,0,0,0,0,0,
64
+ 0,0,0,0,0,0,10,11,11,11,11,11,12,0,0,0,0,0,0,0,
65
+ 0,0,0,0,0,0,10,11,11,11,11,11,12,0,0,0,0,0,0,0,
66
+ 0,0,0,0,0,0,18,19,11,11,11,19,20,0,0,0,0,0,0,0,
67
+ 0,0,0,0,0,0,0,18,19,11,19,20,0,0,0,0,0,0,0,0,
68
+ 0,0,0,0,2,3,3,3,3,11,12,0,0,0,0,0,0,0,0,0,
69
+ 0,2,3,3,3,11,11,11,11,11,12,0,0,0,0,0,0,0,0,0,
70
+ 0,10,11,11,11,11,19,19,19,19,20,0,0,0,0,0,0,0,0,0,
71
+ 0,10,11,19,19,19,20,0,0,0,0,0,0,0,0,0,0,0,0,0
72
+ </data>
73
+ </layer>
74
+ <layer name="ground3" width="20" height="15">
75
+ <properties>
76
+ <property name="z" value="3"/>
77
+ </properties>
78
+ <data encoding="csv">
79
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
80
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,26,0,0,
81
+ 0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,
82
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
83
+ 0,0,0,0,25,26,0,0,0,0,0,12,0,0,0,0,0,0,0,0,
84
+ 0,0,0,0,0,0,0,0,0,10,0,12,0,0,0,0,0,0,0,0,
85
+ 0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,
86
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,97,98,99,100,101,0,0,
87
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,105,106,107,108,109,0,0,
88
+ 0,0,0,0,0,0,0,10,0,0,0,12,0,0,0,0,0,0,0,0,
89
+ 0,0,25,26,0,0,0,0,10,0,12,0,0,0,0,0,0,0,0,0,
90
+ 0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,
91
+ 0,0,0,0,10,0,0,0,0,0,0,0,25,26,0,0,0,0,0,0,
92
+ 0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,
93
+ 0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
94
+ </data>
95
+ </layer>
96
+ <layer name="air1" width="20" height="15">
97
+ <properties>
98
+ <property name="nocollide" value="true"/>
99
+ <property name="z" value="400"/>
100
+ </properties>
101
+ <data encoding="csv">
102
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
103
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
104
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,57,58,59,60,61,0,0,
105
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,65,66,67,68,69,0,0,
106
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,73,74,75,76,77,0,0,
107
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,81,82,83,84,85,0,0,
108
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,89,90,91,92,93,0,0,
109
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
110
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
111
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
112
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
113
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
114
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
115
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
116
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
117
+ </data>
118
+ </layer>
119
+ <objectgroup color="#00aa00" name="events1" width="20" height="15">
120
+ <object name="npc_1" type="npc" x="224" y="64" width="32" height="32">
121
+ <properties>
122
+ <property name="file" value="ejera"/>
123
+ <property name="name" value="Ejera"/>
124
+ </properties>
125
+ </object>
126
+ <object name="npc_2" type="npc" x="160" y="224" width="32" height="32">
127
+ <properties>
128
+ <property name="file" value="salyjea"/>
129
+ <property name="name" value="Salyjea"/>
130
+ </properties>
131
+ </object>
132
+ </objectgroup>
133
+ </map>