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/99_genre_platformer/the_little_probe | |
| parent | 958cf43779d2bf528869e80511c4c4f2a433b2db (diff) | |
| download | dragonruby-game-toolkit-contrib-33ec37b141e896b47ed642923fd33b0c658ae9fb.tar.gz dragonruby-game-toolkit-contrib-33ec37b141e896b47ed642923fd33b0c658ae9fb.zip | |
synced samples
Diffstat (limited to 'samples/99_genre_platformer/the_little_probe')
52 files changed, 2618 insertions, 0 deletions
diff --git a/samples/99_genre_platformer/the_little_probe/app/main.rb b/samples/99_genre_platformer/the_little_probe/app/main.rb new file mode 100644 index 0000000..1c90218 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/app/main.rb @@ -0,0 +1,887 @@ +class FallingCircle + attr_gtk + + def tick + fiddle + defaults + render + input + calc + end + + def fiddle + state.gravity = -0.02 + circle.radius = 15 + circle.elasticity = 0.4 + camera.follow_speed = 0.4 * 0.4 + end + + def render + render_stage_editor + render_debug + render_game + end + + def defaults + if state.tick_count == 0 + outputs.sounds << "sounds/bg.ogg" + end + + state.storyline ||= [ + { text: "<- -> to aim, hold space to charge", distance_gate: 0 }, + { text: "the little probe - by @amirrajan, made with DragonRuby Game Toolkit", distance_gate: 0 }, + { text: "mission control, this is sasha. landing on europa successful.", distance_gate: 0 }, + { text: "operation \"find earth 2.0\", initiated at 8-29-2036 14:00.", distance_gate: 0 }, + { text: "jupiter's sure is beautiful...", distance_gate: 4000 }, + { text: "hmm, it seems there's some kind of anomoly in the sky", distance_gate: 7000 }, + { text: "dancing lights, i'll call them whisps.", distance_gate: 8000 }, + { text: "#todo... look i ran out of time -_-", distance_gate: 9000 }, + { text: "there's never enough time", distance_gate: 9000 }, + { text: "the game jam was fun though ^_^", distance_gate: 10000 }, + ] + + load_level force: args.state.tick_count == 0 + state.line_mode ||= :terrain + + state.sound_index ||= 1 + circle.potential_lift ||= 0 + circle.angle ||= 90 + circle.check_point_at ||= -1000 + circle.game_over_at ||= -1000 + circle.x ||= -485 + circle.y ||= 12226 + circle.check_point_x ||= circle.x + circle.check_point_y ||= circle.y + circle.dy ||= 0 + circle.dx ||= 0 + circle.previous_dy ||= 0 + circle.previous_dx ||= 0 + circle.angle ||= 0 + circle.after_images ||= [] + circle.terrains_to_monitor ||= {} + circle.impact_history ||= [] + + camera.x ||= 0 + camera.y ||= 0 + camera.target_x ||= 0 + camera.target_y ||= 0 + state.snaps ||= { } + state.snap_number = 10 + + args.state.storyline_x ||= -1000 + args.state.storyline_y ||= -1000 + end + + def render_game + outputs.background_color = [0, 0, 0] + outputs.sprites << [-circle.x + 1100, + -circle.y - 100, + 2416 * 4, + 3574 * 4, + 'sprites/jupiter.png'] + outputs.sprites << [-circle.x, + -circle.y, + 2416 * 4, + 3574 * 4, + 'sprites/level.png'] + outputs.sprites << state.whisp_queue + render_aiming_retical + render_circle + render_notification + end + + def render_notification + toast_length = 500 + if circle.game_over_at.elapsed_time < toast_length + label_text = "..." + elsif circle.check_point_at.elapsed_time > toast_length + args.state.current_storyline = nil + return + end + if circle.check_point_at && + circle.check_point_at.elapsed_time == 1 && + !args.state.current_storyline + if args.state.storyline.length > 0 && args.state.distance_traveled > args.state.storyline[0][:distance_gate] + args.state.current_storyline = args.state.storyline.shift[:text] + args.state.distance_traveled ||= 0 + args.state.storyline_x = circle.x + args.state.storyline_y = circle.y + end + return unless args.state.current_storyline + end + label_text = args.state.current_storyline + return unless label_text + x = circle.x + camera.x + y = circle.y + camera.y - 40 + w = 900 + h = 30 + outputs.primitives << [x - w.idiv(2), y - h, w, h, 255, 255, 255, 255].solid + outputs.primitives << [x - w.idiv(2), y - h, w, h, 0, 0, 0, 255].border + outputs.labels << [x, y - 4, label_text, 1, 1, 0, 0, 0, 255] + end + + def render_aiming_retical + outputs.sprites << [state.camera.x + circle.x + circle.angle.vector_x(circle.potential_lift * 10) - 5, + state.camera.y + circle.y + circle.angle.vector_y(circle.potential_lift * 10) - 5, + 10, 10, 'sprites/circle-orange.png'] + outputs.sprites << [state.camera.x + circle.x + circle.angle.vector_x(circle.radius * 3) - 5, + state.camera.y + circle.y + circle.angle.vector_y(circle.radius * 3) - 5, + 10, 10, 'sprites/circle-orange.png', 0, 128] + if rand > 0.9 + outputs.sprites << [state.camera.x + circle.x + circle.angle.vector_x(circle.radius * 3) - 5, + state.camera.y + circle.y + circle.angle.vector_y(circle.radius * 3) - 5, + 10, 10, 'sprites/circle-white.png', 0, 128] + end + end + + def render_circle + outputs.sprites << circle.after_images.map do |ai| + ai.merge(x: ai.x + state.camera.x - circle.radius, + y: ai.y + state.camera.y - circle.radius, + w: circle.radius * 2, + h: circle.radius * 2, + path: 'sprites/circle-white.png') + end + + outputs.sprites << [(circle.x - circle.radius) + state.camera.x, + (circle.y - circle.radius) + state.camera.y, + circle.radius * 2, + circle.radius * 2, + 'sprites/probe.png'] + end + + def render_debug + return unless state.debug_mode + + outputs.labels << [10, 30, state.line_mode, 0, 0, 0, 0, 0] + outputs.labels << [12, 32, state.line_mode, 0, 0, 255, 255, 255] + + args.outputs.lines << trajectory(circle).line.to_hash.tap do |h| + h[:x] += state.camera.x + h[:y] += state.camera.y + h[:x2] += state.camera.x + h[:y2] += state.camera.y + end + + outputs.primitives << state.terrain.find_all do |t| + circle.x.between?(t.x - 640, t.x2 + 640) || circle.y.between?(t.y - 360, t.y2 + 360) + end.map do |t| + [ + t.line.associate(r: 0, g: 255, b: 0) do |h| + h.x += state.camera.x + h.y += state.camera.y + h.x2 += state.camera.x + h.y2 += state.camera.y + if circle.rect.intersect_rect? t[:rect] + h[:r] = 255 + h[:g] = 0 + end + h + end, + t[:rect].border.associate(r: 255, g: 0, b: 0) do |h| + h.x += state.camera.x + h.y += state.camera.y + h.b = 255 if line_near_rect? circle.rect, t + h + end + ] + end + + outputs.primitives << state.lava.find_all do |t| + circle.x.between?(t.x - 640, t.x2 + 640) || circle.y.between?(t.y - 360, t.y2 + 360) + end.map do |t| + [ + t.line.associate(r: 0, g: 0, b: 255) do |h| + h.x += state.camera.x + h.y += state.camera.y + h.x2 += state.camera.x + h.y2 += state.camera.y + if circle.rect.intersect_rect? t[:rect] + h[:r] = 255 + h[:b] = 0 + end + h + end, + t[:rect].border.associate(r: 255, g: 0, b: 0) do |h| + h.x += state.camera.x + h.y += state.camera.y + h.b = 255 if line_near_rect? circle.rect, t + h + end + ] + end + + if state.god_mode + border = circle.rect.merge(x: circle.rect.x + state.camera.x, + y: circle.rect.y + state.camera.y, + g: 255) + else + border = circle.rect.merge(x: circle.rect.x + state.camera.x, + y: circle.rect.y + state.camera.y, + b: 255) + end + + outputs.borders << border + + overlapping ||= {} + + circle.impact_history.each do |h| + label_mod = 300 + x = (h[:body][:x].-(150).idiv(label_mod)) * label_mod + camera.x + y = (h[:body][:y].+(150).idiv(label_mod)) * label_mod + camera.y + 10.times do + if overlapping[x] && overlapping[x][y] + y -= 52 + else + break + end + end + + overlapping[x] ||= {} + overlapping[x][y] ||= true + outputs.primitives << [x, y - 25, 300, 50, 0, 0, 0, 128].solid + outputs.labels << [x + 10, y + 24, "dy: %.2f" % h[:body][:new_dy], -2, 0, 255, 255, 255] + outputs.labels << [x + 10, y + 9, "dx: %.2f" % h[:body][:new_dx], -2, 0, 255, 255, 255] + outputs.labels << [x + 10, y - 5, " ?: #{h[:body][:new_reason]}", -2, 0, 255, 255, 255] + + outputs.labels << [x + 100, y + 24, "angle: %.2f" % h[:impact][:angle], -2, 0, 255, 255, 255] + outputs.labels << [x + 100, y + 9, "m(l): %.2f" % h[:terrain][:slope], -2, 0, 255, 255, 255] + outputs.labels << [x + 100, y - 5, "m(c): %.2f" % h[:body][:slope], -2, 0, 255, 255, 255] + + outputs.labels << [x + 200, y + 24, "ray: #{h[:impact][:ray]}", -2, 0, 255, 255, 255] + outputs.labels << [x + 200, y + 9, "nxt: #{h[:impact][:ray_next]}", -2, 0, 255, 255, 255] + outputs.labels << [x + 200, y - 5, "typ: #{h[:impact][:type]}", -2, 0, 255, 255, 255] + end + + if circle.floor + outputs.labels << [circle.x + camera.x + 30, circle.y + camera.y + 100, "point: #{circle.floor_point.slice(:x, :y).values}", -2, 0] + outputs.labels << [circle.x + camera.x + 31, circle.y + camera.y + 101, "point: #{circle.floor_point.slice(:x, :y).values}", -2, 0, 255, 255, 255] + outputs.labels << [circle.x + camera.x + 30, circle.y + camera.y + 85, "circle: #{circle.hash.slice(:x, :y).values}", -2, 0] + outputs.labels << [circle.x + camera.x + 31, circle.y + camera.y + 86, "circle: #{circle.hash.slice(:x, :y).values}", -2, 0, 255, 255, 255] + outputs.labels << [circle.x + camera.x + 30, circle.y + camera.y + 70, "rel: #{circle.floor_relative_x} #{circle.floor_relative_y}", -2, 0] + outputs.labels << [circle.x + camera.x + 31, circle.y + camera.y + 71, "rel: #{circle.floor_relative_x} #{circle.floor_relative_y}", -2, 0, 255, 255, 255] + end + end + + def render_stage_editor + return unless state.god_mode + return unless state.point_one + args.lines << [state.point_one, inputs.mouse.point, 0, 255, 255] + end + + def trajectory body + [body.x + body.dx, + body.y + body.dy, + body.x + body.dx * 1000, + body.y + body.dy * 1000, + 0, 255, 255] + end + + def lengthen_line line, num + line = normalize_line(line) + slope = geometry.line_slope(line, replace_infinity: 10).abs + if slope < 2 + [line.x - num, line.y, line.x2 + num, line.y2].line.to_hash + else + [line.x, line.y, line.x2, line.y2].line.to_hash + end + end + + def normalize_line line + if line.x > line.x2 + x = line.x2 + y = line.y2 + x2 = line.x + y2 = line.y + else + x = line.x + y = line.y + x2 = line.x2 + y2 = line.y2 + end + [x, y, x2, y2] + end + + def rect_for_line line + if line.x > line.x2 + x = line.x2 + y = line.y2 + x2 = line.x + y2 = line.y + else + x = line.x + y = line.y + x2 = line.x2 + y2 = line.y2 + end + + w = x2 - x + h = y2 - y + + if h < 0 + y += h + h = h.abs + end + + if w < circle.radius + x -= circle.radius + w = circle.radius * 2 + end + + if h < circle.radius + y -= circle.radius + h = circle.radius * 2 + end + + { x: x, y: y, w: w, h: h } + end + + def snap_to_grid x, y, snaps + snap_number = 10 + x = x.to_i + y = y.to_i + + x_floor = x.idiv(snap_number) * snap_number + x_mod = x % snap_number + x_ceil = (x.idiv(snap_number) + 1) * snap_number + + y_floor = y.idiv(snap_number) * snap_number + y_mod = y % snap_number + y_ceil = (y.idiv(snap_number) + 1) * snap_number + + if snaps[x_floor] + x_result = x_floor + elsif snaps[x_ceil] + x_result = x_ceil + elsif x_mod < snap_number.idiv(2) + x_result = x_floor + else + x_result = x_ceil + end + + snaps[x_result] ||= {} + + if snaps[x_result][y_floor] + y_result = y_floor + elsif snaps[x_result][y_ceil] + y_result = y_ceil + elsif y_mod < snap_number.idiv(2) + y_result = y_floor + else + y_result = y_ceil + end + + snaps[x_result][y_result] = true + return [x_result, y_result] + + end + + def snap_line line + x, y, x2, y2 = line + end + + def string_to_line s + x, y, x2, y2 = s.split(',').map(&:to_f) + + if x > x2 + x2, x = x, x2 + y2, y = y, y2 + end + + x, y = snap_to_grid x, y, state.snaps + x2, y2 = snap_to_grid x2, y2, state.snaps + [x, y, x2, y2].line.to_hash + end + + def load_lines file + data = gtk.read_file(file) || "" + data.each_line + .reject { |l| l.strip.length == 0 } + .map { |l| string_to_line l } + .map { |h| h.merge(rect: rect_for_line(h)) } + end + + def load_terrain + load_lines 'level.txt' + end + + def load_lava + load_lines 'level_lava.txt' + end + + def load_level force: false + if force + state.snaps = {} + state.terrain = load_terrain + state.lava = load_lava + else + state.terrain ||= load_terrain + state.lava ||= load_lava + end + end + + def save_lines lines, file + s = lines.map do |l| + "#{l.x1},#{l.y1},#{l.x2},#{l.y2}" + end.join("\n") + gtk.write_file(file, s) + end + + def save_level + save_lines(state.terrain, 'level.txt') + save_lines(state.lava, 'level_lava.txt') + load_level force: true + end + + def line_near_rect? rect, terrain + geometry.intersect_rect?(rect, terrain[:rect]) + end + + def point_within_line? point, line + return false if !point + return false if !line + return true + end + + def calc_impacts x, dx, y, dy, radius + results = { } + results[:x] = x + results[:y] = y + results[:dx] = x + results[:dy] = y + results[:point] = { x: x, y: y } + results[:rect] = { x: x - radius, y: y - radius, w: radius * 2, h: radius * 2 } + results[:trajectory] = trajectory(results) + results[:impacts] = terrain.find_all { |t| line_near_rect? results[:rect], t }.map do |t| + { + terrain: t, + point: geometry.line_intersect(results[:trajectory], t), + type: :terrain + } + end.reject { |t| !point_within_line? t[:point], t[:terrain] } + + results[:impacts] += lava.find_all { |t| line_near_rect? results[:rect], t }.map do |t| + { + terrain: t, + point: geometry.line_intersect(results[:trajectory], t), + type: :lava + } + end.reject { |t| !point_within_line? t[:point], t[:terrain] } + + results + end + + def calc_potential_impacts + impact_results = calc_impacts circle.x, circle.dx, circle.y, circle.dy, circle.radius + circle.rect = impact_results[:rect] + circle.trajectory = impact_results[:trajectory] + circle.impacts = impact_results[:impacts] + end + + def calc_terrains_to_monitor + circle.impact = nil + circle.impacts.each do |i| + circle.terrains_to_monitor[i[:terrain]] ||= { + ray_start: geometry.ray_test(circle, i[:terrain]), + } + + circle.terrains_to_monitor[i[:terrain]][:ray_current] = geometry.ray_test(circle, i[:terrain]) + if circle.terrains_to_monitor[i[:terrain]][:ray_start] != circle.terrains_to_monitor[i[:terrain]][:ray_current] + if circle.x.between?(i[:terrain].x, i[:terrain].x2) || circle.y.between?(i[:terrain].y, i[:terrain].y2) + circle.impact = i + circle.ray_current = circle.terrains_to_monitor[i[:terrain]][:ray_current] + end + end + end + end + + def impact_result body, impact + infinity_alias = 1000 + r = { + body: {}, + terrain: {}, + impact: {} + } + + r[:body][:line] = body.trajectory.dup + r[:body][:slope] = geometry.line_slope(body.trajectory, replace_infinity: infinity_alias) + r[:body][:slope_sign] = r[:body][:slope].sign + r[:body][:x] = body.x + r[:body][:y] = body.y + r[:body][:dy] = body.dy + r[:body][:dx] = body.dx + + r[:terrain][:line] = impact[:terrain].dup + r[:terrain][:slope] = geometry.line_slope(impact[:terrain], replace_infinity: infinity_alias) + r[:terrain][:slope_sign] = r[:terrain][:slope].sign + + r[:impact][:angle] = geometry.angle_between_lines(body.trajectory, impact[:terrain], replace_infinity: infinity_alias) + r[:impact][:point] = { x: impact[:point].x, y: impact[:point].y } + r[:impact][:same_slope_sign] = r[:body][:slope_sign] == r[:terrain][:slope_sign] + r[:impact][:ray] = body.ray_current + r[:body][:new_on_floor] = body.on_floor + r[:body][:new_floor] = r[:terrain][:line] + + if r[:impact][:angle].abs < 90 && r[:terrain][:slope].abs < 3 + play_sound + r[:body][:new_dy] = r[:body][:dy] * circle.elasticity * -1 + r[:body][:new_dx] = r[:body][:dx] * circle.elasticity + r[:impact][:type] = :horizontal + r[:body][:new_reason] = "-" + elsif r[:impact][:angle].abs < 90 && r[:terrain][:slope].abs > 3 + play_sound + r[:body][:new_dy] = r[:body][:dy] * 1.1 + r[:body][:new_dx] = r[:body][:dx] * -circle.elasticity + r[:impact][:type] = :vertical + r[:body][:new_reason] = "|" + else + play_sound + r[:body][:new_dx] = r[:body][:dx] * -circle.elasticity + r[:body][:new_dy] = r[:body][:dy] * -circle.elasticity + r[:impact][:type] = :slanted + r[:body][:new_reason] = "/" + end + + r[:impact][:energy] = r[:body][:new_dx].abs + r[:body][:new_dy].abs + + if r[:impact][:energy] <= 0.3 && r[:terrain][:slope].abs < 4 + r[:body][:new_dx] = 0 + r[:body][:new_dy] = 0 + r[:impact][:energy] = 0 + r[:body][:new_on_floor] = true + r[:body][:new_floor] = r[:terrain][:line] + r[:body][:new_reason] = "0" + end + + r[:impact][:ray_next] = geometry.ray_test({ x: r[:body][:x] - (r[:body][:dx] * 1.1) + r[:body][:new_dx], + y: r[:body][:y] - (r[:body][:dy] * 1.1) + r[:body][:new_dy] + state.gravity }, + r[:terrain][:line]) + + if r[:impact][:ray_next] == r[:impact][:ray] + r[:body][:new_dx] *= -1 + r[:body][:new_dy] *= -1 + r[:body][:new_reason] = "clip" + end + + r + end + + def game_over! + circle.x = circle.check_point_x + circle.y = circle.check_point_y + circle.dx = 0 + circle.dy = 0 + circle.game_over_at = state.tick_count + end + + def not_game_over! + impact_history_entry = impact_result circle, circle.impact + circle.impact_history << impact_history_entry + circle.x -= circle.dx * 1.1 + circle.y -= circle.dy * 1.1 + circle.dx = impact_history_entry[:body][:new_dx] + circle.dy = impact_history_entry[:body][:new_dy] + circle.on_floor = impact_history_entry[:body][:new_on_floor] + + if circle.on_floor + circle.check_point_at = state.tick_count + circle.check_point_x = circle.x + circle.check_point_y = circle.y + end + + circle.previous_floor = circle.floor || {} + circle.floor = impact_history_entry[:body][:new_floor] || {} + circle.floor_point = impact_history_entry[:impact][:point] + if circle.floor.slice(:x, :y, :x2, :y2) != circle.previous_floor.slice(:x, :y, :x2, :y2) + new_relative_x = if circle.dx > 0 + :right + elsif circle.dx < 0 + :left + else + nil + end + + new_relative_y = if circle.dy > 0 + :above + elsif circle.dy < 0 + :below + else + nil + end + + circle.floor_relative_x = new_relative_x + circle.floor_relative_y = new_relative_y + end + + circle.impact = nil + circle.terrains_to_monitor.clear + end + + def calc_physics + if args.state.god_mode + calc_potential_impacts + calc_terrains_to_monitor + return + end + + if circle.y < -700 + game_over + return + end + + return if state.game_over + return if circle.on_floor + circle.previous_dy = circle.dy + circle.previous_dx = circle.dx + circle.x += circle.dx + circle.y += circle.dy + args.state.distance_traveled ||= 0 + args.state.distance_traveled += circle.dx.abs + circle.dy.abs + circle.dy += state.gravity + calc_potential_impacts + calc_terrains_to_monitor + return unless circle.impact + if circle.impact && circle.impact[:type] == :lava + game_over! + else + not_game_over! + end + end + + def input_god_mode + state.debug_mode = !state.debug_mode if inputs.keyboard.key_down.forward_slash + + # toggle god mode + if inputs.keyboard.key_down.g + state.god_mode = !state.god_mode + state.potential_lift = 0 + circle.floor = nil + circle.floor_point = nil + circle.floor_relative_x = nil + circle.floor_relative_y = nil + circle.impact = nil + circle.terrains_to_monitor.clear + return + end + + return unless state.god_mode + + circle.x = circle.x.to_i + circle.y = circle.y.to_i + + # move god circle + if inputs.keyboard.left || inputs.keyboard.a + circle.x -= 20 + elsif inputs.keyboard.right || inputs.keyboard.d || inputs.keyboard.f + circle.x += 20 + end + + if inputs.keyboard.up || inputs.keyboard.w + circle.y += 20 + elsif inputs.keyboard.down || inputs.keyboard.s + circle.y -= 20 + end + + # delete terrain + if inputs.keyboard.key_down.x + calc_terrains_to_monitor + state.terrain = state.terrain.reject do |t| + t[:rect].intersect_rect? circle.rect + end + + state.lava = state.lava.reject do |t| + t[:rect].intersect_rect? circle.rect + end + + calc_potential_impacts + save_level + end + + # change terrain type + if inputs.keyboard.key_down.l + if state.line_mode == :terrain + state.line_mode = :lava + else + state.line_mode = :terrain + end + end + + if inputs.mouse.click && !state.point_one + state.point_one = inputs.mouse.click.point + elsif inputs.mouse.click && state.point_one + l = [*state.point_one, *inputs.mouse.click.point] + l = [l.x - state.camera.x, + l.y - state.camera.y, + l.x2 - state.camera.x, + l.y2 - state.camera.y].line.to_hash + l[:rect] = rect_for_line l + if state.line_mode == :terrain + state.terrain << l + else + state.lava << l + end + save_level + next_x = inputs.mouse.click.point.x - 640 + next_y = inputs.mouse.click.point.y - 360 + circle.x += next_x + circle.y += next_y + state.point_one = nil + elsif inputs.keyboard.one + state.point_one = [circle.x + camera.x, circle.y+ camera.y] + end + + # cancel chain lines + if inputs.keyboard.key_down.nine || inputs.keyboard.key_down.escape || inputs.keyboard.key_up.six || inputs.keyboard.key_up.one + state.point_one = nil + end + end + + def play_sound + return if state.sound_debounce > 0 + state.sound_debounce = 5 + outputs.sounds << "sounds/03#{"%02d" % state.sound_index}.wav" + state.sound_index += 1 + if state.sound_index > 21 + state.sound_index = 1 + end + end + + def input_game + if inputs.keyboard.down || inputs.keyboard.space + circle.potential_lift += 0.03 + circle.potential_lift = circle.potential_lift.lesser(10) + elsif inputs.keyboard.key_up.down || inputs.keyboard.key_up.space + play_sound + circle.dy += circle.angle.vector_y circle.potential_lift + circle.dx += circle.angle.vector_x circle.potential_lift + + if circle.on_floor + if circle.floor_relative_y == :above + circle.y += circle.potential_lift.abs * 2 + elsif circle.floor_relative_y == :below + circle.y -= circle.potential_lift.abs * 2 + end + end + + circle.on_floor = false + circle.potential_lift = 0 + circle.terrains_to_monitor.clear + circle.impact_history.clear + circle.impact = nil + calc_physics + end + + # aim probe + if inputs.keyboard.right || inputs.keyboard.a + circle.angle -= 2 + elsif inputs.keyboard.left || inputs.keyboard.d + circle.angle += 2 + end + end + + def input + input_god_mode + input_game + end + + def calc_camera + state.camera.target_x = 640 - circle.x + state.camera.target_y = 360 - circle.y + xdiff = state.camera.target_x - state.camera.x + ydiff = state.camera.target_y - state.camera.y + state.camera.x += xdiff * camera.follow_speed + state.camera.y += ydiff * camera.follow_speed + end + + def calc + state.sound_debounce ||= 0 + state.sound_debounce -= 1 + state.sound_debounce = 0 if state.sound_debounce < 0 + if state.god_mode + circle.dy *= 0.1 + circle.dx *= 0.1 + end + calc_camera + state.whisp_queue ||= [] + if state.tick_count.mod_zero?(4) + state.whisp_queue << { + x: -300, + y: 1400 * rand, + speed: 2.randomize(:ratio) + 3, + w: 20, + h: 20, path: 'sprites/whisp.png', + a: 0, + created_at: state.tick_count, + angle: 0, + r: 100, + g: 128 + 128 * rand, + b: 128 + 128 * rand + } + end + + state.whisp_queue.each do |w| + w.x += w[:speed] * 2 + w.x -= circle.dx * 0.3 + w.y -= w[:speed] + w.y -= circle.dy * 0.3 + w.angle += w[:speed] + w.a = w[:created_at].ease(30) * 255 + end + + state.whisp_queue = state.whisp_queue.reject { |w| w[:x] > 1280 } + + if state.tick_count.mod_zero?(2) && (circle.dx != 0 || circle.dy != 0) + circle.after_images << { + x: circle.x, + y: circle.y, + w: circle.radius, + h: circle.radius, + a: 255, + created_at: state.tick_count + } + end + + circle.after_images.each do |ai| + ai.a = ai[:created_at].ease(10, :flip) * 255 + end + + circle.after_images = circle.after_images.reject { |ai| ai[:created_at].elapsed_time > 10 } + calc_physics + end + + def circle + state.circle + end + + def camera + state.camera + end + + def terrain + state.terrain + end + + def lava + state.lava + end +end + +# $gtk.reset + +def tick args + args.outputs.background_color = [0, 0, 0] + if args.inputs.keyboard.r + args.gtk.reset + return + end + # uncomment the line below to slow down the game so you + # can see each tick as it passes + # args.gtk.slowmo! 30 + $game ||= FallingCircle.new + $game.args = args + $game.tick +end + +def reset + $game = nil +end diff --git a/samples/99_genre_platformer/the_little_probe/level.txt b/samples/99_genre_platformer/the_little_probe/level.txt new file mode 100644 index 0000000..62caf2d --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/level.txt @@ -0,0 +1,1481 @@ +640,8840,1180,8840 +-60,10220,0,9960 +-60,10220,0,10500 +0,10500,0,10780 +0,10780,40,10900 +500,10920,760,10960 +300,10560,820,10600 +420,10320,700,10300 +820,10600,1500,10600 +1500,10600,1940,10600 +1940,10600,2380,10580 +2380,10580,2800,10620 +2240,11080,2480,11020 +2000,11120,2240,11080 +1760,11180,2000,11120 +1620,11180,1760,11180 +1500,11220,1620,11180 +1180,11280,1340,11220 +1040,11240,1180,11280 +840,11280,1040,11240 +640,11280,840,11280 +500,11220,640,11280 +420,11140,500,11220 +240,11100,420,11140 +100,11120,240,11100 +0,11180,100,11120 +-160,11220,0,11180 +-260,11240,-160,11220 +1340,11220,1500,11220 +960,13300,1280,13060 +1280,13060,1540,12860 +1540,12860,1820,12700 +1820,12700,2080,12520 +2080,12520,2240,12400 +2240,12400,2240,12240 +2240,12240,2400,12080 +2400,12080,2560,11920 +2560,11920,2640,11740 +2640,11740,2740,11580 +2740,11580,2800,11400 +2800,11400,2800,11240 +2740,11140,2800,11240 +2700,11040,2740,11140 +2700,11040,2740,10960 +2740,10960,2740,10920 +2700,10900,2740,10920 +2380,10900,2700,10900 +2040,10920,2380,10900 +1720,10940,2040,10920 +1380,11000,1720,10940 +1180,10980,1380,11000 +900,10980,1180,10980 +760,10960,900,10980 +240,10960,500,10920 +40,10900,240,10960 +0,9700,0,9960 +-60,9500,0,9700 +-60,9420,-60,9500 +-60,9420,-60,9340 +-60,9340,-60,9280 +-60,9120,-60,9280 +-60,8940,-60,9120 +-60,8940,-60,8780 +-60,8780,0,8700 +0,8700,40,8680 +40,8680,240,8700 +240,8700,360,8780 +360,8780,640,8840 +1420,8400,1540,8480 +1540,8480,1680,8500 +1680,8500,1940,8460 +1180,8840,1280,8880 +1280,8880,1340,8860 +1340,8860,1720,8860 +1720,8860,1820,8920 +1820,8920,1820,9140 +1820,9140,1820,9280 +1820,9460,1820,9280 +1760,9480,1820,9460 +1640,9480,1760,9480 +1540,9500,1640,9480 +1340,9500,1540,9500 +1100,9500,1340,9500 +1040,9540,1100,9500 +960,9540,1040,9540 +300,9420,360,9460 +240,9440,300,9420 +180,9600,240,9440 +120,9660,180,9600 +100,9820,120,9660 +100,9820,120,9860 +120,9860,140,9900 +140,9900,140,10000 +140,10440,180,10540 +100,10080,140,10000 +100,10080,140,10100 +140,10100,140,10440 +180,10540,300,10560 +2140,9560,2140,9640 +2140,9720,2140,9640 +1880,9780,2140,9720 +1720,9780,1880,9780 +1620,9740,1720,9780 +1500,9780,1620,9740 +1380,9780,1500,9780 +1340,9820,1380,9780 +1200,9820,1340,9820 +1100,9780,1200,9820 +900,9780,1100,9780 +820,9720,900,9780 +540,9720,820,9720 +360,9840,540,9720 +360,9840,360,9960 +360,9960,360,10080 +360,10140,360,10080 +360,10140,360,10240 +360,10240,420,10320 +700,10300,820,10280 +820,10280,820,10280 +820,10280,900,10320 +900,10320,1040,10300 +1040,10300,1200,10320 +1200,10320,1380,10280 +1380,10280,1500,10300 +1500,10300,1760,10300 +2800,10620,2840,10600 +2840,10600,2900,10600 +2900,10600,3000,10620 +3000,10620,3080,10620 +3080,10620,3140,10600 +3140,10540,3140,10600 +3140,10540,3140,10460 +3140,10460,3140,10360 +3140,10360,3140,10260 +3140,10260,3140,10140 +3140,10140,3140,10000 +3140,10000,3140,9860 +3140,9860,3160,9720 +3160,9720,3160,9580 +3160,9580,3160,9440 +3160,9300,3160,9440 +3160,9300,3160,9140 +3160,9140,3160,8980 +3160,8980,3160,8820 +3160,8820,3160,8680 +3160,8680,3160,8520 +1760,10300,1880,10300 +660,9500,960,9540 +640,9460,660,9500 +360,9460,640,9460 +-480,10760,-440,10880 +-480,11020,-440,10880 +-480,11160,-260,11240 +-480,11020,-480,11160 +-600,11420,-380,11320 +-380,11320,-200,11340 +-200,11340,0,11340 +0,11340,180,11340 +960,13420,960,13300 +960,13420,960,13520 +960,13520,1000,13560 +1000,13560,1040,13540 +1040,13540,1200,13440 +1200,13440,1380,13380 +1380,13380,1620,13300 +1620,13300,1820,13220 +1820,13220,2000,13200 +2000,13200,2240,13200 +2240,13200,2440,13160 +2440,13160,2640,13040 +-480,10760,-440,10620 +-440,10620,-360,10560 +-380,10460,-360,10560 +-380,10460,-360,10300 +-380,10140,-360,10300 +-380,10140,-380,10040 +-380,9880,-380,10040 +-380,9720,-380,9880 +-380,9720,-380,9540 +-380,9360,-380,9540 +-380,9180,-380,9360 +-380,9180,-380,9000 +-380,8840,-380,9000 +-380,8840,-380,8760 +-380,8760,-380,8620 +-380,8620,-380,8520 +-380,8520,-360,8400 +-360,8400,-100,8400 +-100,8400,-60,8420 +-60,8420,240,8440 +240,8440,240,8380 +240,8380,500,8440 +500,8440,760,8460 +760,8460,1000,8400 +1000,8400,1180,8420 +1180,8420,1420,8400 +1940,8460,2140,8420 +2140,8420,2200,8520 +2200,8680,2200,8520 +2140,8840,2200,8680 +2140,8840,2140,9020 +2140,9100,2140,9020 +2140,9200,2140,9100 +2140,9200,2200,9320 +2200,9320,2200,9440 +2140,9560,2200,9440 +1880,10300,2200,10280 +2200,10280,2480,10260 +2480,10260,2700,10240 +2700,10240,2840,10180 +2840,10180,2900,10060 +2900,9860,2900,10060 +2900,9640,2900,9860 +2900,9640,2900,9500 +2900,9460,2900,9500 +2740,9460,2900,9460 +2700,9460,2740,9460 +2700,9360,2700,9460 +2700,9320,2700,9360 +2600,9320,2700,9320 +2600,9260,2600,9320 +2600,9200,2600,9260 +2480,9120,2600,9200 +2440,9080,2480,9120 +2380,9080,2440,9080 +2320,9060,2380,9080 +2320,8860,2320,9060 +2320,8860,2380,8840 +2380,8840,2480,8860 +2480,8860,2600,8840 +2600,8840,2740,8840 +2740,8840,2840,8800 +2840,8800,2900,8700 +2900,8600,2900,8700 +2900,8480,2900,8600 +2900,8380,2900,8480 +2900,8380,2900,8260 +2900,8260,2900,8140 +2900,8140,2900,8020 +2900,8020,2900,7900 +2900,7820,2900,7900 +2900,7820,2900,7740 +2900,7660,2900,7740 +2900,7560,2900,7660 +2900,7460,2900,7560 +2900,7460,2900,7360 +2900,7260,2900,7360 +2840,7160,2900,7260 +2800,7080,2840,7160 +2700,7100,2800,7080 +2560,7120,2700,7100 +2400,7100,2560,7120 +2320,7100,2400,7100 +2140,7100,2320,7100 +2040,7080,2140,7100 +1940,7080,2040,7080 +1820,7140,1940,7080 +1680,7140,1820,7140 +1540,7140,1680,7140 +1420,7220,1540,7140 +1280,7220,1380,7220 +1140,7200,1280,7220 +1000,7220,1140,7200 +760,7280,900,7320 +540,7220,760,7280 +300,7180,540,7220 +180,7120,180,7160 +40,7140,180,7120 +-60,7160,40,7140 +-200,7120,-60,7160 +180,7160,300,7180 +-260,7060,-200,7120 +-260,6980,-260,7060 +-260,6880,-260,6980 +-260,6880,-260,6820 +-260,6820,-200,6760 +-200,6760,-100,6740 +-100,6740,-60,6740 +-60,6740,40,6740 +40,6740,300,6800 +300,6800,420,6760 +420,6760,500,6740 +500,6740,540,6760 +540,6760,540,6760 +540,6760,640,6780 +640,6660,640,6780 +580,6580,640,6660 +580,6440,580,6580 +580,6440,640,6320 +640,6320,640,6180 +580,6080,640,6180 +580,6080,640,5960 +640,5960,640,5840 +640,5840,640,5700 +640,5700,660,5560 +660,5560,660,5440 +660,5440,660,5300 +660,5140,660,5300 +660,5140,660,5000 +660,5000,660,4880 +660,4880,820,4860 +820,4860,1000,4840 +1000,4840,1100,4860 +1100,4860,1280,4860 +1280,4860,1420,4840 +1420,4840,1580,4860 +1580,4860,1720,4820 +1720,4820,1880,4860 +1880,4860,2000,4840 +2000,4840,2140,4840 +2140,4840,2320,4860 +2320,4860,2440,4880 +2440,4880,2600,4880 +2600,4880,2800,4880 +2800,4880,2900,4880 +2900,4880,2900,4820 +2900,4740,2900,4820 +2800,4700,2900,4740 +2520,4680,2800,4700 +2240,4660,2520,4680 +1940,4620,2240,4660 +1820,4580,1940,4620 +1820,4500,1820,4580 +1820,4500,1880,4420 +1880,4420,2000,4420 +2000,4420,2200,4420 +2200,4420,2400,4440 +2400,4440,2600,4440 +2600,4440,2840,4440 +2840,4440,2900,4400 +2740,4260,2900,4280 +2600,4240,2740,4260 +2480,4280,2600,4240 +2320,4240,2480,4280 +2140,4220,2320,4240 +1940,4220,2140,4220 +1880,4160,1940,4220 +1880,4160,1880,4080 +1880,4080,2040,4040 +2040,4040,2240,4060 +2240,4060,2400,4040 +2400,4040,2600,4060 +2600,4060,2740,4020 +2740,4020,2840,3940 +2840,3780,2840,3940 +2740,3660,2840,3780 +2700,3680,2740,3660 +2520,3700,2700,3680 +2380,3700,2520,3700 +2200,3720,2380,3700 +2040,3720,2200,3720 +1880,3700,2040,3720 +1820,3680,1880,3700 +1760,3600,1820,3680 +1760,3600,1820,3480 +1820,3480,1880,3440 +1880,3440,1960,3460 +1960,3460,2140,3460 +2140,3460,2380,3460 +2380,3460,2640,3440 +2640,3440,2900,3380 +2840,3280,2900,3380 +2840,3280,2900,3200 +2900,3200,2900,3140 +2840,3020,2900,3140 +2800,2960,2840,3020 +2700,3000,2800,2960 +2600,2980,2700,3000 +2380,3000,2600,2980 +2140,3000,2380,3000 +1880,3000,2140,3000 +1720,3040,1880,3000 +1640,2960,1720,3040 +1500,2940,1640,2960 +1340,3000,1500,2940 +1240,3000,1340,3000 +1140,3020,1240,3000 +1040,3000,1140,3020 +960,2960,1040,3000 +900,2960,960,2960 +840,2840,900,2960 +700,2820,840,2840 +540,2820,700,2820 +420,2820,540,2820 +180,2800,420,2820 +60,2780,180,2800 +-60,2800,60,2780 +-160,2760,-60,2800 +-260,2740,-160,2760 +-300,2640,-260,2740 +-360,2560,-300,2640 +-380,2460,-360,2560 +-380,2460,-300,2380 +-300,2300,-300,2380 +-300,2300,-300,2220 +-300,2100,-300,2220 +-300,2100,-300,2040 +-300,2040,-160,2040 +-160,2040,-60,2040 +-60,2040,60,2040 +60,2040,180,2040 +180,2040,360,2040 +360,2040,540,2040 +540,2040,700,2080 +660,2160,700,2080 +660,2160,700,2260 +660,2380,700,2260 +500,2340,660,2380 +360,2340,500,2340 +240,2340,360,2340 +40,2320,240,2340 +-60,2320,40,2320 +-100,2380,-60,2320 +-100,2380,-100,2460 +-100,2460,-100,2540 +-100,2540,0,2560 +0,2560,140,2600 +140,2600,300,2600 +300,2600,460,2600 +460,2600,640,2600 +640,2600,760,2580 +760,2580,820,2560 +820,2560,820,2500 +820,2500,820,2400 +820,2400,840,2320 +840,2320,840,2240 +820,2120,840,2240 +820,2020,820,2120 +820,1900,820,2020 +760,1840,820,1900 +640,1840,760,1840 +500,1840,640,1840 +300,1860,420,1880 +180,1840,300,1860 +420,1880,500,1840 +0,1840,180,1840 +-60,1860,0,1840 +-160,1840,-60,1860 +-200,1800,-160,1840 +-260,1760,-200,1800 +-260,1680,-260,1760 +-260,1620,-260,1680 +-260,1540,-260,1620 +-260,1540,-260,1460 +-300,1420,-260,1460 +-300,1420,-300,1340 +-300,1340,-260,1260 +-260,1260,-260,1160 +-260,1060,-260,1160 +-260,1060,-260,960 +-260,880,-260,960 +-260,880,-260,780 +-260,780,-260,680 +-300,580,-260,680 +-300,580,-300,480 +-300,480,-260,400 +-300,320,-260,400 +-300,320,-300,240 +-300,240,-200,220 +-200,220,-200,160 +-200,160,-100,140 +-100,140,0,120 +0,120,60,120 +60,120,180,120 +180,120,300,120 +300,120,420,140 +420,140,580,180 +580,180,760,180 +760,180,900,180 +960,180,1100,180 +1100,180,1340,200 +1340,200,1580,200 +1580,200,1720,180 +1720,180,2000,140 +2000,140,2240,140 +2240,140,2480,140 +2520,140,2800,160 +2800,160,3000,160 +3000,160,3140,160 +3140,260,3140,160 +3140,260,3140,380 +3080,500,3140,380 +3080,620,3080,500 +3080,620,3080,740 +3080,740,3080,840 +3080,960,3080,840 +3080,1080,3080,960 +3080,1080,3080,1200 +3080,1200,3080,1340 +3080,1340,3080,1460 +3080,1580,3080,1460 +3080,1700,3080,1580 +3080,1700,3080,1760 +3080,1760,3200,1760 +3200,1760,3320,1760 +3320,1760,3520,1760 +3520,1760,3680,1740 +3680,1740,3780,1700 +3780,1700,3840,1620 +3840,1620,3840,1520 +3840,1520,3840,1420 +3840,1320,3840,1420 +3840,1120,3840,1320 +3840,1120,3840,940 +3840,940,3840,760 +3780,600,3840,760 +3780,600,3780,440 +3780,320,3780,440 +3780,320,3780,160 +3780,60,3780,160 +3780,60,4020,60 +4020,60,4260,40 +4260,40,4500,40 +4500,40,4740,40 +4740,40,4840,20 +4840,20,4880,80 +4880,80,5080,40 +5080,40,5280,20 +5280,20,5500,0 +5500,0,5720,0 +5720,0,5940,60 +5940,60,6240,60 +6240,60,6540,20 +6540,20,6840,20 +6840,20,7040,0 +7040,0,7140,0 +7140,0,7400,20 +7400,20,7680,0 +7680,0,7940,0 +7940,0,8200,-20 +8200,-20,8360,20 +8360,20,8560,-40 +8560,-40,8760,0 +8760,0,8880,40 +8880,120,8880,40 +8840,220,8840,120 +8620,240,8840,220 +8420,260,8620,240 +8200,280,8420,260 +7940,280,8200,280 +7760,240,7940,280 +7560,220,7760,240 +7360,280,7560,220 +7140,260,7360,280 +6940,240,7140,260 +6720,220,6940,240 +6480,220,6720,220 +6360,300,6480,220 +6240,300,6360,300 +6200,500,6240,300 +6200,500,6360,540 +6360,540,6540,520 +6540,520,6720,480 +6720,480,6880,460 +6880,460,7080,500 +7080,500,7320,500 +7320,500,7680,500 +7680,620,7680,500 +7520,640,7680,620 +7360,640,7520,640 +7200,640,7360,640 +7040,660,7200,640 +6880,720,7040,660 +6720,700,6880,720 +6540,700,6720,700 +6420,760,6540,700 +6280,740,6420,760 +6240,760,6280,740 +6200,920,6240,760 +6200,920,6360,960 +6360,960,6540,960 +6540,960,6720,960 +6720,960,6760,980 +6760,980,6880,940 +6880,940,7080,940 +7080,940,7280,940 +7280,940,7520,920 +7520,920,7760,900 +7760,900,7980,860 +7980,860,8100,880 +8100,880,8280,900 +8280,900,8500,820 +8500,820,8700,820 +8700,820,8760,840 +8760,960,8760,840 +8700,1040,8760,960 +8560,1060,8700,1040 +8460,1080,8560,1060 +8360,1040,8460,1080 +8280,1080,8360,1040 +8160,1120,8280,1080 +8040,1120,8160,1120 +7940,1100,8040,1120 +7800,1120,7940,1100 +7680,1120,7800,1120 +7520,1100,7680,1120 +7360,1100,7520,1100 +7200,1120,7360,1100 +7040,1180,7200,1120 +6880,1160,7040,1180 +6720,1160,6880,1160 +6540,1160,6720,1160 +6360,1160,6540,1160 +6200,1160,6360,1160 +6040,1220,6200,1160 +6040,1220,6040,1400 +6040,1400,6200,1440 +6200,1440,6320,1440 +6320,1440,6440,1440 +6600,1440,6760,1440 +6760,1440,6940,1420 +6440,1440,6600,1440 +6940,1420,7280,1400 +7280,1400,7560,1400 +7560,1400,7760,1400 +7760,1400,7940,1360 +7940,1360,8100,1380 +8100,1380,8280,1340 +8280,1340,8460,1320 +8660,1300,8760,1360 +8460,1320,8660,1300 +8760,1360,8800,1500 +8800,1660,8800,1500 +8800,1660,8800,1820 +8700,1840,8800,1820 +8620,1860,8700,1840 +8560,1800,8620,1860 +8560,1800,8620,1680 +8500,1640,8620,1680 +8420,1680,8500,1640 +8280,1680,8420,1680 +8160,1680,8280,1680 +7900,1680,8160,1680 +7680,1680,7900,1680 +7400,1660,7680,1680 +7140,1680,7400,1660 +6880,1640,7140,1680 +6040,1820,6320,1780 +5900,1840,6040,1820 +6640,1700,6880,1640 +6320,1780,6640,1700 +5840,2040,5900,1840 +5840,2040,5840,2220 +5840,2220,5840,2320 +5840,2460,5840,2320 +5840,2560,5840,2460 +5840,2560,5960,2620 +5960,2620,6200,2620 +6200,2620,6380,2600 +6380,2600,6600,2580 +6600,2580,6800,2600 +6800,2600,7040,2580 +7040,2580,7280,2580 +7280,2580,7480,2560 +7760,2540,7980,2520 +7980,2520,8160,2500 +7480,2560,7760,2540 +8160,2500,8160,2420 +8160,2420,8160,2320 +8160,2180,8160,2320 +7980,2160,8160,2180 +7800,2180,7980,2160 +7600,2200,7800,2180 +7400,2200,7600,2200 +6960,2200,7200,2200 +7200,2200,7400,2200 +6720,2200,6960,2200 +6540,2180,6720,2200 +6320,2200,6540,2180 +6240,2160,6320,2200 +6240,2160,6240,2040 +6240,2040,6240,1940 +6240,1940,6440,1940 +6440,1940,6720,1940 +6720,1940,6940,1920 +7520,1920,7760,1920 +6940,1920,7280,1920 +7280,1920,7520,1920 +7760,1920,8100,1900 +8100,1900,8420,1900 +8420,1900,8460,1940 +8460,2120,8460,1940 +8460,2280,8460,2120 +8460,2280,8560,2420 +8560,2420,8660,2380 +8660,2380,8800,2340 +8800,2340,8840,2400 +8840,2520,8840,2400 +8800,2620,8840,2520 +8800,2740,8800,2620 +8800,2860,8800,2740 +8800,2940,8800,2860 +8760,2980,8800,2940 +8660,2980,8760,2980 +8620,2960,8660,2980 +8560,2880,8620,2960 +8560,2880,8560,2780 +8500,2740,8560,2780 +8420,2760,8500,2740 +8420,2840,8420,2760 +8420,2840,8420,2940 +8420,3040,8420,2940 +8420,3160,8420,3040 +8420,3280,8420,3380 +8420,3280,8420,3160 +8420,3380,8620,3460 +8620,3460,8760,3460 +8760,3460,8840,3400 +8840,3400,8960,3400 +8960,3400,9000,3500 +9000,3700,9000,3500 +9000,3900,9000,3700 +9000,4080,9000,3900 +9000,4280,9000,4080 +9000,4500,9000,4280 +9000,4620,9000,4500 +9000,4780,9000,4620 +9000,4780,9000,4960 +9000,5120,9000,4960 +9000,5120,9000,5300 +8960,5460,9000,5300 +8920,5620,8960,5460 +8920,5620,8920,5800 +8920,5800,8920,5960 +8920,5960,8920,6120 +8920,6120,8960,6300 +8960,6300,8960,6480 +8960,6660,8960,6480 +8960,6860,8960,6660 +8960,7040,8960,6860 +8920,7420,8920,7220 +8920,7420,8960,7620 +8960,7620,8960,7800 +8960,7800,8960,8000 +8960,8000,8960,8180 +8960,8180,8960,8380 +8960,8580,8960,8380 +8920,8800,8960,8580 +8880,9000,8920,8800 +8840,9180,8880,9000 +8800,9220,8840,9180 +8800,9220,8840,9340 +8760,9380,8840,9340 +8560,9340,8760,9380 +8360,9360,8560,9340 +8160,9360,8360,9360 +8040,9340,8160,9360 +7860,9360,8040,9340 +7680,9360,7860,9360 +7520,9360,7680,9360 +7420,9260,7520,9360 +7400,9080,7420,9260 +7400,9080,7420,8860 +7420,8860,7440,8720 +7440,8720,7480,8660 +7480,8660,7520,8540 +7520,8540,7600,8460 +7600,8460,7800,8480 +7800,8480,8040,8480 +8040,8480,8280,8480 +8280,8480,8500,8460 +8500,8460,8620,8440 +8620,8440,8660,8340 +8660,8340,8660,8220 +8660,8220,8700,8080 +8700,8080,8700,7920 +8700,7920,8700,7760 +8700,7760,8700,7620 +8700,7480,8700,7620 +8700,7480,8700,7320 +8700,7160,8700,7320 +8920,7220,8960,7040 +8660,7040,8700,7160 +8660,7040,8700,6880 +8660,6700,8700,6880 +8660,6700,8700,6580 +8700,6460,8700,6580 +8700,6460,8700,6320 +8700,6160,8700,6320 +8700,6160,8760,6020 +8760,6020,8760,5860 +8760,5860,8760,5700 +8760,5700,8760,5540 +8760,5540,8760,5360 +8760,5360,8760,5180 +8760,5000,8760,5180 +8700,4820,8760,5000 +8560,4740,8700,4820 +8420,4700,8560,4740 +8280,4700,8420,4700 +8100,4700,8280,4700 +7980,4700,8100,4700 +7820,4740,7980,4700 +7800,4920,7820,4740 +7800,4920,7900,4960 +7900,4960,8060,4980 +8060,4980,8220,5000 +8220,5000,8420,5040 +8420,5040,8460,5120 +8460,5180,8460,5120 +8360,5200,8460,5180 +8360,5280,8360,5200 +8160,5300,8360,5280 +8040,5260,8160,5300 +7860,5220,8040,5260 +7720,5160,7860,5220 +7640,5120,7720,5160 +7480,5120,7640,5120 +7240,5120,7480,5120 +7000,5120,7240,5120 +6800,5160,7000,5120 +6640,5220,6800,5160 +6600,5360,6640,5220 +6600,5460,6600,5360 +6480,5520,6600,5460 +6240,5540,6480,5520 +5980,5540,6240,5540 +5740,5540,5980,5540 +5500,5520,5740,5540 +5400,5520,5500,5520 +5280,5540,5400,5520 +5080,5540,5280,5540 +4940,5540,5080,5540 +4760,5540,4940,5540 +4600,5540,4760,5540 +4440,5560,4600,5540 +4040,5580,4120,5520 +4260,5540,4440,5560 +4120,5520,4260,5540 +4020,5720,4040,5580 +4020,5840,4020,5720 +4020,5840,4080,5940 +4080,5940,4120,6040 +4120,6040,4200,6080 +4200,6080,4340,6080 +4340,6080,4500,6060 +4500,6060,4700,6060 +4700,6060,4880,6060 +4880,6060,5080,6060 +5080,6060,5280,6080 +5280,6080,5440,6100 +5440,6100,5660,6100 +5660,6100,5900,6080 +5900,6080,6120,6080 +6120,6080,6360,6080 +6360,6080,6480,6100 +6480,6100,6540,6060 +6540,6060,6720,6060 +6720,6060,6940,6060 +6940,6060,7140,6060 +7400,6060,7600,6060 +7140,6060,7400,6060 +7600,6060,7800,6060 +7800,6060,7860,6080 +7860,6080,8060,6080 +8060,6080,8220,6080 +8220,6080,8320,6140 +8320,6140,8360,6300 +8320,6460,8360,6300 +8320,6620,8320,6460 +8320,6800,8320,6620 +8320,6960,8320,6800 +8320,6960,8360,7120 +8320,7280,8360,7120 +8320,7440,8320,7280 +8320,7600,8320,7440 +8100,7580,8220,7600 +8220,7600,8320,7600 +7900,7560,8100,7580 +7680,7560,7900,7560 +7480,7580,7680,7560 +7280,7580,7480,7580 +7080,7580,7280,7580 +7000,7600,7080,7580 +6880,7600,7000,7600 +6800,7580,6880,7600 +6640,7580,6800,7580 +6540,7580,6640,7580 +6380,7600,6540,7580 +6280,7620,6380,7600 +6240,7700,6280,7620 +6240,7700,6240,7800 +6240,7840,6240,7800 +6080,7840,6240,7840 +5960,7820,6080,7840 +5660,7840,5800,7840 +5500,7800,5660,7840 +5440,7700,5500,7800 +5800,7840,5960,7820 +5440,7540,5440,7700 +5440,7440,5440,7540 +5440,7320,5440,7440 +5400,7320,5440,7320 +5340,7400,5400,7320 +5340,7400,5340,7500 +5340,7600,5340,7500 +5340,7600,5340,7720 +5340,7720,5340,7860 +5340,7860,5340,7960 +5340,7960,5440,8020 +5440,8020,5560,8020 +5560,8020,5720,8040 +5720,8040,5900,8060 +5900,8060,6080,8060 +6080,8060,6240,8060 +6720,8040,6840,8060 +6240,8060,6480,8040 +6480,8040,6720,8040 +6840,8060,6940,8060 +6940,8060,7080,8120 +7080,8120,7140,8180 +7140,8460,7140,8320 +7140,8620,7140,8460 +7140,8620,7140,8740 +7140,8860,7140,8740 +7140,8960,7140,8860 +7140,8960,7200,9080 +7140,9200,7200,9080 +7140,9200,7200,9320 +7200,9320,7200,9460 +7200,9760,7200,9900 +7200,9620,7200,9460 +7200,9620,7200,9760 +7200,9900,7200,10060 +7200,10220,7200,10060 +7200,10360,7200,10220 +7140,10400,7200,10360 +6880,10400,7140,10400 +6640,10360,6880,10400 +6420,10360,6640,10360 +6160,10380,6420,10360 +5940,10340,6160,10380 +5720,10320,5940,10340 +5500,10340,5720,10320 +5280,10300,5500,10340 +5080,10300,5280,10300 +4840,10280,5080,10300 +4700,10280,4840,10280 +4540,10280,4700,10280 +4360,10280,4540,10280 +4200,10300,4360,10280 +4040,10380,4200,10300 +4020,10500,4040,10380 +3980,10640,4020,10500 +3980,10640,3980,10760 +3980,10760,4020,10920 +4020,10920,4080,11000 +4080,11000,4340,11020 +4340,11020,4600,11060 +4600,11060,4840,11040 +4840,11040,4880,10960 +4880,10740,4880,10960 +4880,10740,4880,10600 +4880,10600,5080,10560 +5080,10560,5340,10620 +5340,10620,5660,10620 +5660,10620,6040,10600 +6040,10600,6120,10620 +6120,10620,6240,10720 +6240,10720,6420,10740 +6420,10740,6640,10760 +6640,10760,6880,10780 +7140,10780,7400,10780 +6880,10780,7140,10780 +7400,10780,7680,10780 +7680,10780,8100,10760 +8100,10760,8460,10740 +8460,10740,8700,10760 +8800,10840,8800,10980 +8700,10760,8800,10840 +8760,11200,8800,10980 +8760,11200,8760,11380 +8760,11380,8800,11560 +8760,11680,8800,11560 +8760,11760,8760,11680 +8760,11760,8760,11920 +8760,11920,8800,12080 +8800,12200,8800,12080 +8700,12240,8800,12200 +8560,12220,8700,12240 +8360,12220,8560,12220 +8160,12240,8360,12220 +7720,12220,7980,12220 +7980,12220,8160,12240 +7400,12200,7720,12220 +7200,12180,7400,12200 +7000,12160,7200,12180 +6800,12160,7000,12160 +6280,12140,6380,12180 +6120,12180,6280,12140 +6540,12180,6800,12160 +6380,12180,6540,12180 +5900,12200,6120,12180 +5620,12180,5900,12200 +5340,12120,5620,12180 +5140,12100,5340,12120 +4980,12120,5140,12100 +4840,12120,4980,12120 +4700,12200,4840,12120 +4700,12380,4700,12200 +4740,12480,4940,12520 +4700,12380,4740,12480 +4940,12520,5160,12560 +5160,12560,5340,12600 +5340,12600,5400,12600 +5400,12600,5500,12600 +5500,12600,5620,12600 +5620,12600,5720,12560 +5720,12560,5800,12440 +5800,12440,5900,12380 +5900,12380,6120,12420 +6120,12420,6380,12440 +6380,12440,6600,12460 +6720,12460,6840,12520 +6840,12520,6960,12520 +6600,12460,6720,12460 +6960,12520,7040,12500 +7040,12500,7140,12440 +7200,12440,7360,12500 +7360,12500,7600,12560 +7600,12560,7860,12600 +7860,12600,8060,12500 +8100,12500,8200,12340 +8200,12340,8360,12360 +8360,12360,8560,12400 +8560,12400,8660,12420 +8660,12420,8840,12400 +8840,12400,9000,12360 +9000,12360,9000,12360 +2900,4400,2900,4280 +900,7320,1000,7220 +2640,13040,2900,12920 +2900,12920,3160,12840 +3480,12760,3780,12620 +3780,12620,4020,12460 +4300,12360,4440,12260 +4020,12460,4300,12360 +3160,12840,3480,12760 +4440,12080,4440,12260 +4440,12080,4440,11880 +4440,11880,4440,11720 +4440,11720,4600,11720 +4600,11720,4760,11740 +4760,11740,4980,11760 +4980,11760,5160,11760 +5160,11760,5340,11780 +6000,11860,6120,11820 +5340,11780,5620,11820 +5620,11820,6000,11860 +6120,11820,6360,11820 +6360,11820,6640,11860 +6940,11920,7240,11940 +7240,11940,7520,11960 +7520,11960,7860,11960 +7860,11960,8100,11920 +8100,11920,8420,11940 +8420,11940,8460,11960 +8460,11960,8500,11860 +8460,11760,8500,11860 +8320,11720,8460,11760 +8160,11720,8320,11720 +7940,11720,8160,11720 +7720,11700,7940,11720 +7520,11680,7720,11700 +7320,11680,7520,11680 +7200,11620,7320,11680 +7200,11620,7200,11500 +7200,11500,7280,11440 +7280,11440,7420,11440 +7420,11440,7600,11440 +7600,11440,7980,11460 +7980,11460,8160,11460 +8160,11460,8360,11460 +8360,11460,8460,11400 +8420,11060,8500,11200 +8280,11040,8420,11060 +8100,11060,8280,11040 +8460,11400,8500,11200 +7800,11060,8100,11060 +7520,11060,7800,11060 +7240,11060,7520,11060 +6940,11040,7240,11060 +6640,11000,6940,11040 +6420,10980,6640,11000 +6360,11060,6420,10980 +6360,11180,6360,11060 +6200,11280,6360,11180 +5960,11300,6200,11280 +5720,11280,5960,11300 +5500,11280,5720,11280 +4940,11300,5200,11280 +4660,11260,4940,11300 +4440,11280,4660,11260 +4260,11280,4440,11280 +4220,11220,4260,11280 +4080,11280,4220,11220 +3980,11420,4080,11280 +3980,11420,4040,11620 +4040,11620,4040,11820 +3980,11960,4040,11820 +3840,12000,3980,11960 +3720,11940,3840,12000 +3680,11800,3720,11940 +3680,11580,3680,11800 +3680,11360,3680,11580 +3680,11360,3680,11260 +3680,11080,3680,11260 +3680,11080,3680,10880 +3680,10700,3680,10880 +3680,10700,3680,10620 +3680,10480,3680,10620 +3680,10480,3680,10300 +3680,10300,3680,10100 +3680,10100,3680,9940 +3680,9940,3720,9860 +3720,9860,3920,9900 +3920,9900,4220,9880 +4980,9940,5340,9960 +4220,9880,4540,9900 +4540,9900,4980,9940 +5340,9960,5620,9960 +5620,9960,5900,9960 +5900,9960,6160,10000 +6160,10000,6480,10000 +6480,10000,6720,10000 +6720,10000,6880,9860 +6880,9860,6880,9520 +6880,9520,6940,9340 +6940,9120,6940,9340 +6940,9120,6940,8920 +6940,8700,6940,8920 +6880,8500,6940,8700 +6880,8320,6880,8500 +7140,8320,7140,8180 +6760,8260,6880,8320 +6540,8240,6760,8260 +6420,8180,6540,8240 +6280,8240,6420,8180 +6160,8300,6280,8240 +6120,8400,6160,8300 +6080,8520,6120,8400 +5840,8480,6080,8520 +5620,8500,5840,8480 +5500,8500,5620,8500 +5340,8560,5500,8500 +5160,8540,5340,8560 +4620,8520,4880,8520 +4360,8480,4620,8520 +4880,8520,5160,8540 +4140,8440,4360,8480 +3920,8460,4140,8440 +3720,8380,3920,8460 +3680,8160,3720,8380 +3680,8160,3720,7940 +3720,7720,3720,7940 +3680,7580,3720,7720 +3680,7580,3720,7440 +3720,7440,3720,7300 +3720,7160,3720,7300 +3720,7160,3720,7020 +3720,7020,3780,6900 +3780,6900,4080,6940 +4080,6940,4340,6980 +4340,6980,4600,6980 +4600,6980,4880,6980 +4880,6980,5160,6980 +5160,6980,5400,7000 +5400,7000,5560,7020 +5560,7020,5660,7080 +5660,7080,5660,7280 +5660,7280,5660,7440 +5660,7440,5740,7520 +5740,7520,5740,7600 +5740,7600,5900,7600 +5900,7600,6040,7540 +6040,7540,6040,7320 +6040,7320,6120,7200 +6120,7200,6120,7040 +6120,7040,6240,7000 +6240,7000,6480,7060 +6480,7060,6800,7060 +6800,7060,7080,7080 +7080,7080,7320,7100 +7940,7100,7980,6920 +7860,6860,7980,6920 +7640,6860,7860,6860 +7400,6840,7640,6860 +7320,7100,7560,7120 +7560,7120,7760,7120 +7760,7120,7940,7100 +7200,6820,7400,6840 +7040,6820,7200,6820 +6600,6840,6840,6840 +6380,6800,6600,6840 +6120,6800,6380,6800 +5900,6840,6120,6800 +5620,6820,5900,6840 +5400,6800,5620,6820 +5140,6800,5400,6800 +4880,6780,5140,6800 +4600,6760,4880,6780 +4340,6760,4600,6760 +4080,6760,4340,6760 +3840,6740,4080,6760 +3680,6720,3840,6740 +3680,6720,3680,6560 +3680,6560,3720,6400 +3720,6400,3720,6200 +3720,6200,3780,6000 +3720,5780,3780,6000 +3720,5580,3720,5780 +3720,5360,3720,5580 +3720,5360,3840,5240 +3840,5240,4200,5260 +4200,5260,4600,5280 +4600,5280,4880,5280 +4880,5280,5140,5200 +5140,5200,5220,5100 +5220,5100,5280,4900 +5280,4900,5340,4840 +5340,4840,5720,4880 +6120,4880,6480,4860 +6880,4840,7200,4860 +6480,4860,6880,4840 +7200,4860,7320,4860 +7320,4860,7360,4740 +7360,4600,7440,4520 +7360,4600,7360,4740 +7440,4520,7640,4520 +7640,4520,7800,4480 +7800,4480,7800,4280 +7800,4280,7800,4040 +7800,4040,7800,3780 +7800,3560,7800,3780 +7800,3560,7860,3440 +7860,3440,8060,3460 +8060,3460,8160,3340 +8160,3340,8160,3140 +8160,3140,8160,2960 +8000,2900,8160,2960 +7860,2900,8000,2900 +7640,2940,7860,2900 +7400,2980,7640,2940 +7100,2980,7400,2980 +6840,3000,7100,2980 +5620,2980,5840,2980 +5840,2980,6500,3000 +6500,3000,6840,3000 +5560,2780,5620,2980 +5560,2780,5560,2580 +5560,2580,5560,2380 +5560,2140,5560,2380 +5560,2140,5560,1900 +5560,1900,5620,1660 +5620,1660,5660,1460 +5660,1460,5660,1300 +5500,1260,5660,1300 +5340,1260,5500,1260 +4600,1220,4840,1240 +4440,1220,4600,1220 +4440,1080,4440,1220 +4440,1080,4600,1020 +5080,1260,5340,1260 +4840,1240,5080,1260 +4600,1020,4940,1020 +4940,1020,5220,1020 +5220,1020,5560,960 +5560,960,5660,860 +5660,740,5660,860 +5280,740,5660,740 +4940,780,5280,740 +4660,760,4940,780 +4500,700,4660,760 +4500,520,4500,700 +4500,520,4700,460 +4700,460,5080,440 +5440,420,5740,420 +5080,440,5440,420 +5740,420,5840,360 +5800,280,5840,360 +5560,280,5800,280 +4980,300,5280,320 +4360,320,4660,300 +4200,360,4360,320 +5280,320,5560,280 +4660,300,4980,300 +4140,480,4200,360 +4140,480,4140,640 +4140,640,4200,780 +4200,780,4200,980 +4200,980,4220,1180 +4220,1400,4220,1180 +4220,1400,4260,1540 +4260,1540,4500,1540 +4500,1540,4700,1520 +4700,1520,4980,1540 +5280,1560,5400,1560 +4980,1540,5280,1560 +5400,1560,5400,1700 +5400,1780,5400,1700 +5340,1900,5400,1780 +5340,2020,5340,1900 +5340,2220,5340,2020 +5340,2220,5340,2420 +5340,2420,5340,2520 +5080,2600,5220,2580 +5220,2580,5340,2520 +4900,2580,5080,2600 +4700,2540,4900,2580 +4500,2540,4700,2540 +4220,2580,4340,2540 +4200,2700,4220,2580 +4340,2540,4500,2540 +3980,2740,4200,2700 +3840,2740,3980,2740 +3780,2640,3840,2740 +3780,2640,3780,2460 +3780,2280,3780,2460 +3620,2020,3780,2100 +3780,2280,3780,2100 +3360,2040,3620,2020 +3080,2040,3360,2040 +2840,2020,3080,2040 +2740,1940,2840,2020 +2740,1940,2800,1800 +2800,1640,2800,1800 +2800,1640,2800,1460 +2800,1300,2800,1460 +2700,1180,2800,1300 +2480,1140,2700,1180 +1580,1200,1720,1200 +2240,1180,2480,1140 +1960,1180,2240,1180 +1720,1200,1960,1180 +1500,1320,1580,1200 +1500,1440,1500,1320 +1500,1440,1760,1480 +1760,1480,1940,1480 +1940,1480,2140,1500 +2140,1500,2320,1520 +2400,1560,2400,1700 +2280,1820,2380,1780 +2320,1520,2400,1560 +2380,1780,2400,1700 +2080,1840,2280,1820 +1720,1820,2080,1840 +1420,1800,1720,1820 +1280,1800,1420,1800 +1240,1720,1280,1800 +1240,1720,1240,1600 +1240,1600,1280,1480 +1280,1340,1280,1480 +1180,1280,1280,1340 +1000,1280,1180,1280 +760,1280,1000,1280 +360,1240,540,1260 +180,1220,360,1240 +540,1260,760,1280 +180,1080,180,1220 +180,1080,180,1000 +180,1000,360,940 +360,940,540,960 +540,960,820,980 +1100,980,1200,920 +820,980,1100,980 +6640,11860,6940,11920 +5200,11280,5500,11280 +4120,7330,4120,7230 +4120,7230,4660,7250 +4660,7250,4940,7250 +4940,7250,5050,7340 +5010,7400,5050,7340 +4680,7380,5010,7400 +4380,7370,4680,7380 +4120,7330,4360,7370 +4120,7670,4120,7760 +4120,7670,4280,7650 +4280,7650,4540,7660 +4550,7660,4820,7680 +4820,7680,4900,7730 +4880,7800,4900,7730 +4620,7820,4880,7800 +4360,7790,4620,7820 +4120,7760,4360,7790 +6840,6840,7040,6820 +5720,4880,6120,4880 +1200,920,1340,810 +1340,810,1520,790 +1520,790,1770,800 +2400,790,2600,750 +2600,750,2640,520 +2520,470,2640,520 +2140,470,2520,470 +1760,800,2090,800 +2080,800,2400,790 +1760,450,2140,470 +1420,450,1760,450 +1180,440,1420,450 +900,480,1180,440 +640,450,900,480 +360,440,620,450 +120,430,360,440 +0,520,120,430 +-20,780,0,520 +-20,780,-20,1020 +-20,1020,-20,1150 +-20,1150,0,1300 +0,1470,60,1530 +0,1300,0,1470 +60,1530,360,1530 +360,1530,660,1520 +660,1520,980,1520 +980,1520,1040,1520 +1040,1520,1070,1560 +1070,1770,1070,1560 +1070,1770,1100,2010 +1070,2230,1100,2010 +1070,2240,1180,2340 +1180,2340,1580,2340 +1580,2340,1940,2350 +1940,2350,2440,2350 +2440,2350,2560,2380 +2560,2380,2600,2540 +2810,2640,3140,2680 +2600,2540,2810,2640 +3140,2680,3230,2780 +3230,2780,3260,2970 +3230,3220,3260,2970 +3200,3470,3230,3220 +3200,3480,3210,3760 +3210,3760,3210,4040 +3200,4040,3230,4310 +3210,4530,3230,4310 +3210,4530,3230,4730 +3230,4960,3230,4730 +3230,4960,3260,5190 +3170,5330,3260,5190 +2920,5330,3170,5330 +2660,5360,2920,5330 +2420,5330,2660,5360 +2200,5280,2400,5330 +2020,5280,2200,5280 +1840,5260,2020,5280 +1660,5280,1840,5260 +1500,5300,1660,5280 +1360,5270,1500,5300 +1200,5290,1340,5270 +1070,5400,1200,5290 +1040,5630,1070,5400 +1000,5900,1040,5630 +980,6170,1000,5900 +980,6280,980,6170 +980,6540,980,6280 +980,6540,1040,6720 +1040,6720,1360,6730 +1360,6730,1760,6710 +2110,6720,2420,6730 +1760,6710,2110,6720 +2420,6730,2640,6720 +2640,6720,2970,6720 +2970,6720,3160,6700 +3160,6700,3240,6710 +3240,6710,3260,6890 +3260,7020,3260,6890 +3230,7180,3260,7020 +3230,7350,3230,7180 +3210,7510,3230,7350 +3210,7510,3210,7690 +3210,7870,3210,7690 +3210,7870,3210,7980 +3200,8120,3210,7980 +3200,8330,3200,8120 +3160,8520,3200,8330 +2460,11100,2480,11020 +2200,11180,2460,11100 +1260,11350,1600,11320 +600,11430,930,11400 +180,11340,620,11430 +1600,11320,1910,11280 +1910,11280,2200,11180 +923.0029599285435,11398.99893503157,1264.002959928544,11351.99893503157
\ No newline at end of file diff --git a/samples/99_genre_platformer/the_little_probe/level_lava.txt b/samples/99_genre_platformer/the_little_probe/level_lava.txt new file mode 100644 index 0000000..e2bc2bd --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/level_lava.txt @@ -0,0 +1,235 @@ +100,10740,500,10780 +500,10780,960,10760 +960,10760,1340,10760 +1380,10760,1820,10780 +1820,10780,2240,10780 +2280,10780,2740,10740 +2740,10740,3000,10780 +3000,10780,3140,11020 +-520,8820,-480,9160 +-520,8480,-520,8820 +-520,8480,-480,8180 +-480,8180,-200,8120 +-200,8120,100,8220 +100,8220,420,8240 +420,8240,760,8260 +760,8260,1140,8280 +1140,8280,1500,8200 +1500,8200,1880,8240 +1880,8240,2240,8260 +2240,8260,2320,8480 +2320,8480,2380,8680 +2240,8860,2380,8680 +2240,9080,2240,8860 +2240,9080,2320,9260 +2320,9260,2480,9440 +2480,9440,2600,9640 +2480,9840,2600,9640 +2400,10020,2480,9840 +2240,10080,2400,10020 +1960,10080,2240,10080 +1720,10080,1960,10080 +1460,10080,1720,10080 +1180,10080,1420,10080 +900,10080,1180,10080 +640,10080,900,10080 +640,10080,640,9900 +60,10520,100,10740 +40,10240,60,10520 +40,10240,40,9960 +40,9960,40,9680 +40,9680,40,9360 +40,9360,60,9080 +60,9080,100,8860 +100,8860,460,9040 +460,9040,760,9220 +760,9220,1140,9220 +1140,9220,1720,9200 +-660,11580,-600,11420 +-660,11800,-660,11580 +-660,12000,-660,11800 +-660,12000,-600,12220 +-600,12220,-600,12440 +-600,12440,-600,12640 +-600,11240,-260,11280 +-260,11280,100,11240 +9000,12360,9020,12400 +9020,12620,9020,12400 +9020,12840,9020,12620 +9020,13060,9020,12840 +9020,13060,9020,13240 +9020,13240,9020,13420 +9020,13420,9020,13600 +9020,13600,9020,13780 +8880,13900,9020,13780 +8560,13800,8880,13900 +8220,13780,8560,13800 +7860,13760,8220,13780 +7640,13780,7860,13760 +7360,13800,7640,13780 +7100,13800,7360,13800 +6540,13760,6800,13780 +6800,13780,7100,13800 +6280,13760,6540,13760 +5760,13760,6280,13760 +5220,13780,5760,13760 +4700,13760,5220,13780 +4200,13740,4700,13760 +3680,13720,4200,13740 +3140,13700,3680,13720 +2600,13680,3140,13700 +2040,13940,2600,13680 +1640,13940,2040,13940 +1200,13960,1640,13940 +840,14000,1200,13960 +300,13960,840,14000 +-200,13900,300,13960 +-600,12840,-600,12640 +-600,13140,-600,12840 +-600,13140,-600,13420 +-600,13700,-600,13420 +-600,13700,-600,13820 +-600,13820,-200,13900 +-600,11240,-560,11000 +-560,11000,-480,10840 +-520,10660,-480,10840 +-520,10660,-520,10480 +-520,10480,-520,10300 +-520,10260,-480,10080 +-480,9880,-440,10060 +-520,9680,-480,9880 +-520,9680,-480,9400 +-480,9400,-480,9160 +1820,9880,2140,9800 +1540,9880,1820,9880 +1200,9920,1500,9880 +900,9880,1200,9920 +640,9900,840,9880 +2380,8760,2800,8760 +2800,8760,2840,8660 +2840,8660,2840,8420 +2840,8160,2840,8420 +2800,7900,2840,8160 +2800,7900,2800,7720 +2800,7540,2800,7720 +2800,7540,2800,7360 +2700,7220,2800,7360 +2400,7220,2700,7220 +2080,7240,2400,7220 +1760,7320,2080,7240 +1380,7360,1720,7320 +1040,7400,1340,7360 +640,7400,1000,7420 +300,7380,640,7400 +0,7300,240,7380 +-300,7180,-60,7300 +-380,6860,-360,7180 +-380,6880,-360,6700 +-360,6700,-260,6540 +-260,6540,0,6520 +0,6520,240,6640 +240,6640,460,6640 +460,6640,500,6480 +500,6260,500,6480 +460,6060,500,6260 +460,5860,460,6060 +460,5860,500,5640 +500,5640,540,5440 +540,5440,580,5220 +580,5220,580,5000 +580,4960,580,4740 +580,4740,960,4700 +960,4700,1140,4760 +1140,4760,1420,4740 +1420,4740,1720,4700 +1720,4700,2000,4740 +2000,4740,2380,4760 +2380,4760,2700,4800 +1720,4600,1760,4300 +1760,4300,2200,4340 +2200,4340,2560,4340 +2560,4340,2740,4340 +2160,12580,2440,12400 +1820,12840,2160,12580 +1500,13080,1820,12840 +1140,13340,1500,13080 +1140,13340,1580,13220 +2110,13080,2520,13000 +2520,13000,2900,12800 +1580,13220,2110,13080 +2900,12800,3200,12680 +3200,12680,3440,12640 +3440,12640,3720,12460 +3720,12460,4040,12320 +4040,12320,4360,12200 +4360,11940,4380,12180 +4360,11700,4360,11940 +4360,11700,4540,11500 +4540,11500,4880,11540 +6000,11660,6280,11640 +5440,11600,5720,11610 +5720,11610,6000,11660 +6280,11640,6760,11720 +6760,11720,7060,11780 +7060,11780,7360,11810 +7360,11810,7640,11840 +7640,11840,8000,11830 +8000,11830,8320,11850 +8320,11850,8390,11800 +8330,11760,8390,11800 +8160,11760,8330,11760 +7910,11750,8160,11760 +7660,11740,7900,11750 +7400,11730,7660,11740 +7160,11680,7400,11730 +7080,11570,7160,11680 +7080,11570,7100,11350 +7100,11350,7440,11280 +7440,11280,7940,11280 +7960,11280,8360,11280 +5840,11540,6650,11170 +4880,11540,5440,11600 +3410,11830,3420,11300 +3410,11260,3520,10920 +3520,10590,3520,10920 +3520,10590,3540,10260 +3520,9900,3540,10240 +3520,9900,3640,9590 +3640,9570,4120,9590 +4140,9590,4600,9680 +4620,9680,5030,9730 +5120,9750,5520,9800 +5620,9820,6080,9800 +6130,9810,6580,9820 +6640,9820,6800,9700 +6780,9400,6800,9700 +6780,9400,6840,9140 +6820,8860,6840,9120 +6780,8600,6820,8830 +6720,8350,6780,8570 +6480,8340,6720,8320 +6260,8400,6480,8340 +6050,8580,6240,8400 +5760,8630,6040,8590 +5520,8690,5740,8630 +5120,8690,5450,8700 +4570,8670,5080,8690 +4020,8610,4540,8670 +3540,8480,4020,8610 +3520,8230,3520,8480 +3520,7930,3520,8230 +3520,7930,3540,7630 +3480,7320,3540,7610 +3480,7280,3500,7010 +3500,6980,3680,6850 +3680,6850,4220,6840 +4230,6840,4760,6850 +4780,6850,5310,6860 +5310,6860,5720,6940 +5720,6940,5880,7250 +5880,7250,5900,7520 +100,11240,440,11300 +440,11300,760,11330 +1480,11280,1840,11230 +2200,11130,2360,11090 +1840,11230,2200,11130
\ No newline at end of file diff --git a/samples/99_genre_platformer/the_little_probe/license-for-sample.txt b/samples/99_genre_platformer/the_little_probe/license-for-sample.txt new file mode 100644 index 0000000..b1005ed --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/license-for-sample.txt @@ -0,0 +1,9 @@ +Copyright 2019 DragonRuby LLC, Amir Rajan + +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_platformer/the_little_probe/metadata/game_metadata.txt b/samples/99_genre_platformer/the_little_probe/metadata/game_metadata.txt new file mode 100644 index 0000000..cba2788 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/metadata/game_metadata.txt @@ -0,0 +1,6 @@ +devid=amirrajan +devtitle=Amir Rajan +gameid=the-little-probe +gametitle=The Little Probe +version=1.0 +icon=sprites/probe.png diff --git a/samples/99_genre_platformer/the_little_probe/sounds/0301.wav b/samples/99_genre_platformer/the_little_probe/sounds/0301.wav Binary files differnew file mode 100644 index 0000000..13bdf5a --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sounds/0301.wav diff --git a/samples/99_genre_platformer/the_little_probe/sounds/0302.wav b/samples/99_genre_platformer/the_little_probe/sounds/0302.wav Binary files differnew file mode 100644 index 0000000..b3e5849 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sounds/0302.wav diff --git a/samples/99_genre_platformer/the_little_probe/sounds/0303.wav b/samples/99_genre_platformer/the_little_probe/sounds/0303.wav Binary files differnew file mode 100644 index 0000000..0871983 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sounds/0303.wav diff --git a/samples/99_genre_platformer/the_little_probe/sounds/0304.wav b/samples/99_genre_platformer/the_little_probe/sounds/0304.wav Binary files differnew file mode 100644 index 0000000..9ee599e --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sounds/0304.wav diff --git a/samples/99_genre_platformer/the_little_probe/sounds/0305.wav b/samples/99_genre_platformer/the_little_probe/sounds/0305.wav Binary files differnew file mode 100644 index 0000000..d2f919f --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sounds/0305.wav diff --git a/samples/99_genre_platformer/the_little_probe/sounds/0306.wav b/samples/99_genre_platformer/the_little_probe/sounds/0306.wav Binary files differnew file mode 100644 index 0000000..4f15476 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sounds/0306.wav diff --git a/samples/99_genre_platformer/the_little_probe/sounds/0307.wav b/samples/99_genre_platformer/the_little_probe/sounds/0307.wav Binary files differnew file mode 100644 index 0000000..ffb55f9 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sounds/0307.wav diff --git a/samples/99_genre_platformer/the_little_probe/sounds/0308.wav b/samples/99_genre_platformer/the_little_probe/sounds/0308.wav Binary files differnew file mode 100644 index 0000000..86cae87 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sounds/0308.wav diff --git a/samples/99_genre_platformer/the_little_probe/sounds/0309.wav b/samples/99_genre_platformer/the_little_probe/sounds/0309.wav Binary files differnew file mode 100644 index 0000000..1dd2a65 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sounds/0309.wav diff --git a/samples/99_genre_platformer/the_little_probe/sounds/0310.wav b/samples/99_genre_platformer/the_little_probe/sounds/0310.wav Binary files differnew file mode 100644 index 0000000..cc0df6f --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sounds/0310.wav diff --git a/samples/99_genre_platformer/the_little_probe/sounds/0311.wav b/samples/99_genre_platformer/the_little_probe/sounds/0311.wav Binary files differnew file mode 100644 index 0000000..0e85a2d --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sounds/0311.wav diff --git a/samples/99_genre_platformer/the_little_probe/sounds/0312.wav b/samples/99_genre_platformer/the_little_probe/sounds/0312.wav Binary files differnew file mode 100644 index 0000000..0680440 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sounds/0312.wav diff --git a/samples/99_genre_platformer/the_little_probe/sounds/0313.wav b/samples/99_genre_platformer/the_little_probe/sounds/0313.wav Binary files differnew file mode 100644 index 0000000..466851b --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sounds/0313.wav diff --git a/samples/99_genre_platformer/the_little_probe/sounds/0314.wav b/samples/99_genre_platformer/the_little_probe/sounds/0314.wav Binary files differnew file mode 100644 index 0000000..81784c6 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sounds/0314.wav diff --git a/samples/99_genre_platformer/the_little_probe/sounds/0315.wav b/samples/99_genre_platformer/the_little_probe/sounds/0315.wav Binary files differnew file mode 100644 index 0000000..f6d0036 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sounds/0315.wav diff --git a/samples/99_genre_platformer/the_little_probe/sounds/0316.wav b/samples/99_genre_platformer/the_little_probe/sounds/0316.wav Binary files differnew file mode 100644 index 0000000..942c6d3 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sounds/0316.wav diff --git a/samples/99_genre_platformer/the_little_probe/sounds/0317.wav b/samples/99_genre_platformer/the_little_probe/sounds/0317.wav Binary files differnew file mode 100644 index 0000000..75e35ed --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sounds/0317.wav diff --git a/samples/99_genre_platformer/the_little_probe/sounds/0318.wav b/samples/99_genre_platformer/the_little_probe/sounds/0318.wav Binary files differnew file mode 100644 index 0000000..1fff907 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sounds/0318.wav diff --git a/samples/99_genre_platformer/the_little_probe/sounds/0319.wav b/samples/99_genre_platformer/the_little_probe/sounds/0319.wav Binary files differnew file mode 100644 index 0000000..016a76f --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sounds/0319.wav diff --git a/samples/99_genre_platformer/the_little_probe/sounds/0320.wav b/samples/99_genre_platformer/the_little_probe/sounds/0320.wav Binary files differnew file mode 100644 index 0000000..a41bafe --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sounds/0320.wav diff --git a/samples/99_genre_platformer/the_little_probe/sounds/0321.wav b/samples/99_genre_platformer/the_little_probe/sounds/0321.wav Binary files differnew file mode 100644 index 0000000..dede4f1 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sounds/0321.wav diff --git a/samples/99_genre_platformer/the_little_probe/sounds/bg.ogg b/samples/99_genre_platformer/the_little_probe/sounds/bg.ogg Binary files differnew file mode 100644 index 0000000..8a02a75 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sounds/bg.ogg diff --git a/samples/99_genre_platformer/the_little_probe/sprites/area_one.png b/samples/99_genre_platformer/the_little_probe/sprites/area_one.png Binary files differnew file mode 100644 index 0000000..afd2f46 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/area_one.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/circle-black.png b/samples/99_genre_platformer/the_little_probe/sprites/circle-black.png Binary files differnew file mode 100644 index 0000000..c98e23d --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/circle-black.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/circle-blue.png b/samples/99_genre_platformer/the_little_probe/sprites/circle-blue.png Binary files differnew file mode 100644 index 0000000..1726d2a --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/circle-blue.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/circle-gray.png b/samples/99_genre_platformer/the_little_probe/sprites/circle-gray.png Binary files differnew file mode 100644 index 0000000..960f191 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/circle-gray.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/circle-green.png b/samples/99_genre_platformer/the_little_probe/sprites/circle-green.png Binary files differnew file mode 100644 index 0000000..43cf7ee --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/circle-green.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/circle-indigo.png b/samples/99_genre_platformer/the_little_probe/sprites/circle-indigo.png Binary files differnew file mode 100644 index 0000000..598e240 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/circle-indigo.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/circle-orange.png b/samples/99_genre_platformer/the_little_probe/sprites/circle-orange.png Binary files differnew file mode 100644 index 0000000..5604a42 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/circle-orange.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/circle-red.png b/samples/99_genre_platformer/the_little_probe/sprites/circle-red.png Binary files differnew file mode 100644 index 0000000..7f17ca6 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/circle-red.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/circle-violet.png b/samples/99_genre_platformer/the_little_probe/sprites/circle-violet.png Binary files differnew file mode 100644 index 0000000..681d210 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/circle-violet.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/circle-white.png b/samples/99_genre_platformer/the_little_probe/sprites/circle-white.png Binary files differnew file mode 100644 index 0000000..bd32155 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/circle-white.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/circle-yellow.png b/samples/99_genre_platformer/the_little_probe/sprites/circle-yellow.png Binary files differnew file mode 100644 index 0000000..94992eb --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/circle-yellow.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/jupiter.png b/samples/99_genre_platformer/the_little_probe/sprites/jupiter.png Binary files differnew file mode 100644 index 0000000..7982713 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/jupiter.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/level.png b/samples/99_genre_platformer/the_little_probe/sprites/level.png Binary files differnew file mode 100644 index 0000000..1ce0f1a --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/level.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/probe.png b/samples/99_genre_platformer/the_little_probe/sprites/probe.png Binary files differnew file mode 100644 index 0000000..e29b144 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/probe.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/square-black.png b/samples/99_genre_platformer/the_little_probe/sprites/square-black.png Binary files differnew file mode 100644 index 0000000..cea7bd7 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/square-black.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/square-blue.png b/samples/99_genre_platformer/the_little_probe/sprites/square-blue.png Binary files differnew file mode 100644 index 0000000..b840849 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/square-blue.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/square-gray.png b/samples/99_genre_platformer/the_little_probe/sprites/square-gray.png Binary files differnew file mode 100644 index 0000000..2142b30 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/square-gray.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/square-green.png b/samples/99_genre_platformer/the_little_probe/sprites/square-green.png Binary files differnew file mode 100644 index 0000000..5ef7f75 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/square-green.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/square-indigo.png b/samples/99_genre_platformer/the_little_probe/sprites/square-indigo.png Binary files differnew file mode 100644 index 0000000..2384108 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/square-indigo.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/square-orange.png b/samples/99_genre_platformer/the_little_probe/sprites/square-orange.png Binary files differnew file mode 100644 index 0000000..bb1eee7 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/square-orange.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/square-red.png b/samples/99_genre_platformer/the_little_probe/sprites/square-red.png Binary files differnew file mode 100644 index 0000000..3ed5f13 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/square-red.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/square-violet.png b/samples/99_genre_platformer/the_little_probe/sprites/square-violet.png Binary files differnew file mode 100644 index 0000000..333540c --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/square-violet.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/square-white.png b/samples/99_genre_platformer/the_little_probe/sprites/square-white.png Binary files differnew file mode 100644 index 0000000..378c565 --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/square-white.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/square-yellow.png b/samples/99_genre_platformer/the_little_probe/sprites/square-yellow.png Binary files differnew file mode 100644 index 0000000..0edeeec --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/square-yellow.png diff --git a/samples/99_genre_platformer/the_little_probe/sprites/whisp.png b/samples/99_genre_platformer/the_little_probe/sprites/whisp.png Binary files differnew file mode 100644 index 0000000..07154ee --- /dev/null +++ b/samples/99_genre_platformer/the_little_probe/sprites/whisp.png |
