magicmaze-1_4_3_6/0000755000175000017500000000000011177247755012547 5ustar kentkentmagicmaze-1_4_3_6/magicmaze/0000755000175000017500000000000011177247755014504 5ustar kentkentmagicmaze-1_4_3_6/magicmaze/test_magicmaze.rb0000644000175000017500000000046311104655653020016 0ustar kentkentrequire 'test/unit' require 'magicmaze/test_tile' require 'magicmaze/test_filemap' require 'magicmaze/test_map' require 'magicmaze/test_movement' require 'magicmaze/test_player' require 'magicmaze/test_game' require 'magicmaze/test_graphics' require 'magicmaze/test_images' require 'magicmaze/test_sound' magicmaze-1_4_3_6/magicmaze/inventory.rb0000644000175000017500000000247511074403330017051 0ustar kentkent############################################################ # Magic Maze - a simple and low-tech monster-bashing maze game. # Copyright (C) 2004-2008 Kent Dahl # # This game is FREE as in both BEER and SPEECH. # It is available and can be distributed under the terms of # the GPL license (version 2) or alternatively # the dual-licensing terms of Ruby itself. # Please see README.txt and COPYING_GPL.txt for details. ############################################################ require 'magicmaze/spelltile' module MagicMaze ## # the backpack of our ol' wizard. class Inventory MAX_KEYS = 3 tiles = DEFAULT_KEY_TILES KEY_TILES = Hash.new tiles.each{|hashkey, keytile| KEY_TILES[keytile.color] = keytile } # :red => tiles[:red_key], # :blue => tiles[:blue_key], # :yellow => tiles[:yellow_key] #} def initialize @keys = Hash.new(0) end def add_key( color ) have = @keys[color] if have0 @keys[color]-=1 true else false end end end # Inventory end magicmaze-1_4_3_6/magicmaze/map.rb0000644000175000017500000001507211104655653015601 0ustar kentkent############################################################ # Magic Maze - a simple and low-tech monster-bashing maze game. # Copyright (C) 2004-2008 Kent Dahl # # This game is FREE as in both BEER and SPEECH. # It is available and can be distributed under the terms of # the GPL license (version 2) or alternatively # the dual-licensing terms of Ruby itself. # Please see README.txt and COPYING_GPL.txt for details. ############################################################ require 'magicmaze/tile' require 'magicmaze/entity' module MagicMaze ######################################## # A map containing objects, meant for usage during # the game itself. class GameMap MAP_X_SIZE = 128 MAP_Y_SIZE = 128 class Grid < Array ## # create a grid for one layer in the map. # The default tiles are: # inner - used to fill all empty blocks. # outer - returned for blocks outside the map. def initialize(map, tile_type = Tile, default_inner_tile = nil, default_outer_tile = nil ) @map = map @default_tile = default_outer_tile @tile_type = tile_type (0...MAP_Y_SIZE).each{|i| self.push Array.new(MAP_X_SIZE, default_inner_tile) } end def is_within?( x, y ) x.between?(0, @map.max_x) && y.between?(0, @map.max_y) end ## # return the object tile for the given coordinate. def get( x, y ) if is_within?( x, y ) then self[y][x] else @default_tile end end ## # set the entity tile for the given coordinate. def set( x, y, object ) unless !object or object.kind_of? @tile_type raise ArgumentError, "Expected #{@tile_type}." end if is_within?( x, y ) then self[y][x] = object else raise ArgumentError, "Outside map." end end end ## # holds a list of active entities that # need to recieve regular action_tick calls. class ActiveEntities def initialize @entities = Array.new end def add_entity( entity ) @entities << entity end def each_tick( *args ) @entities.each{|entity| entity.action_tick( *args ) } @entities.reject!{|entity| not entity.active? } end def remove_all @entities.each{|entity| entity.remove_entity } @entities.clear end end attr_reader :max_x, :max_y attr_reader :start_x, :start_y ## The layers of objects in the game. # background - solid walls, floor tiles # object - objects on the floor; keys, chests etc # entity - solid blocking objects; monsters, doors # spiritual - ephemeral objects; spells, etc. attr_reader :background, :object, :entity, :spiritual ## # the walkable area all in-map tiles default to. attr_reader :default_background_tile ## # the non-walkable tile any reference outside the map default to. attr_reader :default_surrounding_wall ## # active entities that may move. attr_reader :active_entities ## # create an empty map. def initialize(default_background_tile, default_surrounding_wall, startx = 0, starty = 0) raise ArgumentError, "Expected Tile." unless default_background_tile.kind_of? BackgroundTile raise ArgumentError, "Expected Tile." unless default_surrounding_wall.kind_of? BackgroundTile @start_x = startx @start_y = starty @max_x = MAP_X_SIZE - 1 @max_y = MAP_Y_SIZE - 1 @default_background_tile = default_background_tile @default_surrounding_wall = default_surrounding_wall @background = create_grid(BackgroundTile, @default_background_tile, @default_surrounding_wall ) @object = create_grid(ObjectTile) # inanimate objects @entity = create_grid(Object) # monsters, players, doors. @spiritual = create_grid(Object) # spells, missiles @active_entities = ActiveEntities.new end def create_grid(tile_type = Tile, default_inner_tile = nil, default_outer_tile = nil ) Grid.new(self, tile_type, default_inner_tile, default_outer_tile) end private :create_grid ## # is the coordinate within our map area? def is_within?( x, y ) x.between?(0, @max_x) && y.between?(0, @max_y) end ## # return the background tile for the given coordinate. def get_background( x, y ) return @background.get(x,y) end ## # set the background tile for the given coordinate. def set_background( x, y, background ) return @background.set(x,y,background) end ## # return the object tile for the given coordinate. def get_object( x, y ) return @object.get(x,y) end ## # set the object tile for the given coordinate. def set_object( x, y, object ) return @object.set(x,y,object) end ## # insert object into correct grid depending on type. def set_any_object( x, y, object ) if object.kind_of? EntityTile entity = object.create_entity(self,x,y) add_active_entity( entity ) if entity.kind_of? Entity @entity.set( x,y, entity ) else @object.set( x,y, object ) end end ## # yields all tiles, from background to front. def each_tile_at( x, y ) yield @background.get(x,y) yield @object.get(x,y) yield @entity.get(x,y) yield @spiritual.get(x,y) end def all_tiles_at( x, y ) yield @background.get(x,y), @object.get(x,y), @entity.get(x,y), @spiritual.get(x,y) end ## # add an Entity that needs to have its action_tick called # during the game loop. def add_active_entity( entity ) @active_entities.add_entity( entity ) end # protected :add_active_entity def purge @active_entities.remove_all end def iterate_all_cells( offset = 0, &block ) (0-offset...MAP_Y_SIZE+offset).each do |y| (0-offset...MAP_X_SIZE+offset).each do |x| all_tiles_at( x, y ) do |b,o,e,s| yield x, y, b, o, e, s end end end end def iterate_all_rows( offset = 0, &block ) (0-offset...MAP_Y_SIZE+offset).each do |y| yield y, offset end end def iterate_all_columns( offset = 0, &block ) (0-offset...MAP_X_SIZE+offset).each do |x| yield x, offset end end end end magicmaze-1_4_3_6/magicmaze/test_images.rb0000644000175000017500000000255111075721122017316 0ustar kentkentrequire 'test/unit' require 'magicmaze/magicmaze' require 'magicmaze/images' class TestGraphicsImages < Test::Unit::TestCase include MagicMaze::Images alias :old_sleep_delay :sleep_delay def sleep_delay(sleep_ms=0) # speed tests up. @last_sleep_delay = sleep_ms end def set_palette( pal, start_color = 0 ) @last_set_palette = pal end def setup @sprite_palette = [ [5,5,5], [5,0,0], [0,5,0], [0,0,5] ] end def todo_test_fade_in @sprite_palette = [ [5,5,5], [5,0,0], [0,5,0], [0,0,5] ] expected_palette = (0...5).collect{|j| i = j.to_f [ [i,i,i], [i,0,0], [0,i,0], [0,0,i] ] } fade_in(5){|i,range| assert_equal( 4, range ) assert_equal( expected_palette.shift, @last_set_palette ) } end def todo_test_fade_out @sprite_palette = [ [25,25,25], [25,0,0], [0,25,0], [0,0,25] ] expected_palette = (0..25).collect{|i| [ [i,i,i], [i,0,0], [0,i,0], [0,0,i] ] } fade_out(5,5,5, 21){|i,range| assert_equal( 21, range ) assert_equal( expected_palette.pop, @last_set_palette ) } end def test_fade_in_and_out @last_sleep_delay = 0 count = 0 self.fade_in_and_out(25){ count += 1 } assert( count > 0 ) assert_equal( 25, @last_sleep_delay ) end def test_delay self.old_sleep_delay end end magicmaze-1_4_3_6/magicmaze/entity.rb0000644000175000017500000001772011104400063016321 0ustar kentkent############################################################ # Magic Maze - a simple and low-tech monster-bashing maze game. # Copyright (C) 2004-2008 Kent Dahl # # This game is FREE as in both BEER and SPEECH. # It is available and can be distributed under the terms of # the GPL license (version 2) or alternatively # the dual-licensing terms of Ruby itself. # Please see README.txt and COPYING_GPL.txt for details. ############################################################ require 'magicmaze/movement' module MagicMaze ############################### # Basic game objects. class Entity attr_reader :location def initialize( map = nil, x = 0, y = 0, tile = nil ) @location = EntityLocation.new( self, map, x, y ) @tile = tile end def sprite_id (@tile ? @tile.sprite_id : 0) end def active? true end ## # try to move in the facing direction def move_forward(*a) @location.add!( @direction ) end ## # any clean-up. # (remove entity from map, lists etc) # def remove_entity @location.remove_old_entity end end class Being < Entity MAX_LIFE = MAX_MANA = 100 attr_reader :direction def initialize( *args ) super(*args) @direction = Direction.new end ## # a short method called every chance the Being # may do an action, such as move, turn etc. def action_tick( *args ) end def add_life( diff ) old_life = @life @life += diff @life = MAX_LIFE if @life > MAX_LIFE if @life <= 0 @life = 0 location.remove_old_entity unless location.get(:object) location.set(:object, DEFAULT_TILES[ :BLOOD_SPLAT ]) end (old_life > 0 ? :died : :dead) end end def add_mana( diff ) @mana += diff @mana = 0 if @mana < 0 @mana = MAX_MANA if @mana > MAX_MANA end def alive? @life > 0 end def active? alive? end end # Being class Door < Entity def initialize( *args ) super(*args) end end ############################### # Missiles, such as attack spells class Missile < Entity def initialize( caster, map = nil, x = 0, y = 0, tile = nil ) @location = SpiritualLocation.new( self, map, x, y ) @tile = tile @caster = caster @direction = @caster.direction.dup @active = true @movements = 10 # How far the missile goes. end def action_tick( *args ) return unless @active background = @location.get(:background) entity = @location.get(:entity) if background.blocked? remove_missile elsif entity and entity != @caster hit_entity( entity ) else @movements -= 1 remove_missile if not move_forward or @movements < 1 end end def hit_entity( entity ) if entity.kind_of?(Monster) && entity.add_life( -@tile.damage ) == :died # puts "SMACK! #{entity.alive?}" @caster.play_sound( :argh ) @caster.increase_score( 10 ) # whats the value again? end remove_missile end def remove_missile @tile.remove_missile( self ) @active = false @location.remove_old_entity end def remove_entity remove_missile end def active? @active end end ############################### # The Astral body - sort of like the spy spell, but generic. class AstralBody < Entity def initialize( caster, map = nil, x = 0, y = 0, tile = nil ) @location = SpiritualLocation.new( self, map, x, y ) @tile = tile @caster = caster @direction = @caster.direction.dup @active = true @input = @caster.game_config.input.class.new(self, :in_game) end def action_tick( *args ) return false if !@active if @direction and @tile.have_mana? then move_forward @tile.use_mana end @active end def run @input.check_input end def remove_entity @location.remove_old_entity @active = false end def active? @active end def move_left @direction = Direction::WEST action_tick end def move_right @direction = Direction::EAST action_tick end def move_up @direction = Direction::NORTH action_tick end def move_down @direction = Direction::SOUTH action_tick end def cancel_spell puts "Cancelled spell." @active = false end alias :cast_primary_spell :cancel_spell alias :cast_alternative_spell :cancel_spell alias :escape :cancel_spell end ############################### # The SpyEye Eyeball spell. class Eyeball < AstralBody def initialize( caster, map = nil, x = 0, y = 0, tile = nil ) super(caster,map,x,y,tile) @movements = 50 # How far the eye goes. end def action_tick( *args ) @movements -= 1 remove_entity if @movements < 1 super(*args) end def run @caster.game_config.follow_entity(self) super end end ############################### # Movable Map spell. class MovableMapManifestation < AstralBody # Bigger jumps in the map view. def move_forward(*a) 5.times{ @location.add!( @direction ) } end def run @caster.game_config.time_synchronized_drawing do if @old_loc && @old_loc.to_a != self.location.to_a then @tile.draw_map_at(self, false) @caster.game_config.graphics.flip end @old_loc = self.location.dup super # checks input end end end ############################### # Monsters # class DumbMonster < Being def initialize( map, x, y, tile ) super( map, x, y, tile ) @life = tile.start_health @sleep = 8 end def action_tick( *args ) @sleep -= 1 if @sleep < 0 ox = @location.x oy = @location.y was_moved = move_forward if was_moved # puts "Monster#action_tick - #{@location.x-ox}, #{@location.y-oy}" @sleep = 8 else @direction.rotate_clockwise @sleep = 4 end end end # action_tick end ## # Monster moving fairly close to the original Magic Maze monsters. # Translated the Pascal code almost directly. # class OriginalMotionMonster < Being def initialize( map, x, y, tile ) super( map, x, y, tile ) @life = tile.start_health # @sleep = 8 @sleep = ((x.hash+y.hash)&7) # Spread out the first sleep. end def action_tick( *args ) @sleep -= 1 if @sleep < 0 attempt_movement( *args ) end end def attempt_movement( game_data = {}, *args ) # Monster location mx = @location.x my = @location.y # Player location ploc = game_data[:player_location] || @location px = ploc.x py = ploc.y jp = Direction::COMPASS_DIRECTIONS.collect{|i| rand(35) + 175 } # FOR j:=0 TO 3 DO jp[j]:=0+Random(35)+175; if ( py < my ) jp[0] += 1000 jp[2] -= 200 end if ( py > my ) jp[2] += 1000 jp[0] -= 200 end if ( px > mx ) jp[1] += 1000 jp[3] -= 200 end if ( px < mx ) jp[3] += 1000 jp[1] -= 200 end mp = -3000 m = -1 jp.each_with_index {|desire, curr_direction| if direction == @direction.value desire += 15 # Prefer to go straight end # if blocked, set desire = 0 location = @location.to_maplocation + Direction.get_constant( curr_direction ) if location and not @location.allowed_access_to?( location.x, location.y ) desire = 0 end if not location puts "Orig Location(#{@location.x}, #{@location.y}) - #{direction}" end if desire > mp # Store the direction we desire the most. mp = desire m = curr_direction end } if mp > 0 @direction = Direction.get_constant( m ) was_moved = move_forward if was_moved @sleep = 8 else @sleep = 2 # Short delay since we couldn't move. end end # end end # OriginalMotionMonster Monster = OriginalMotionMonster end magicmaze-1_4_3_6/magicmaze/spelltile.rb0000644000175000017500000001071011076641460017012 0ustar kentkent############################################################ # Magic Maze - a simple and low-tech monster-bashing maze game. # Copyright (C) 2004-2008 Kent Dahl # # This game is FREE as in both BEER and SPEECH. # It is available and can be distributed under the terms of # the GPL license (version 2) or alternatively # the dual-licensing terms of Ruby itself. # Please see README.txt and COPYING_GPL.txt for details. ############################################################ require 'magicmaze/tile' module MagicMaze ######################################## ## # Spell tiles. For the Spellbook. class SpellTile < Tile def initialize(*a) @mana_cost = a.pop super(*a) end def have_mana? @caster.have_mana?( @mana_cost ) end def use_mana @caster.add_mana( - @mana_cost ) end def restore_mana @caster.add_mana( @mana_cost ) end ## # Cast a spell if there is enough mana. # Restore the mana if the spell fails. # The actual magic is relegated to do_magic. def cast_spell( caster, *args ) @caster = caster if have_mana? then do_magic and caster.add_mana( -@mana_cost ) end end # Consume release of trigger key... def consume_key_press @caster.game_config.input.get_key_press end ## # Return a true value if magic was done. def do_magic abstract_method_called end end class AttackSpellTile < SpellTile attr_reader :damage def initialize(*a) @damage = a.pop @missiles = Array.new super(*a) end def do_magic return false if @missiles.size > 3 location = @caster.location @caster.play_sound( :zap ) missile = Missile.new( @caster, location.map, location.x, location.y, self ) location.map.add_active_entity( missile ) @missiles.push( missile ) true end def remove_missile( missile ) @missiles.delete( missile ) end end class MagicMapSpellTile < SpellTile include SuperInit def draw_map_at( location = @caster, flip = true ) @caster.game_config.graphics.draw_map( location, flip ) @caster.game_config.draw_hud end def do_old_magic draw_map_at( @caster, true ) consume_key_press # Release of trigger... consume_key_press # And another push to return. true end def do_more_magic draw_map_at( @caster, true ) consume_key_press # Release of trigger... location = @caster.location manifestation = MovableMapManifestation.new( @caster, location.map, location.x, location.y, self ) location.map.add_active_entity( manifestation ) begin manifestation.run end while manifestation.active? manifestation.remove_entity end def do_magic do_more_magic end end class HealSpellTile < SpellTile def initialize(*a) @heal_gain = a.pop super(*a) end def do_magic @caster.heal( @heal_gain ) end end class SummonManaSpellTile < SpellTile def initialize(*a) @mana_gain = a.pop @heal_cost = a.pop super(*a) end def cast_spell( caster, *args ) if caster.life > @heal_cost + Player::MAX_LIFE >> 2 and caster.mana + @mana_gain <= Player::MAX_MANA then caster.add_life( -@heal_cost ) caster.add_mana( @mana_gain ) true else false end end end class SpyEyeSpellTile < SpellTile include SuperInit def do_magic @caster.game_config.input.get_key_press # Release of trigger... @caster.play_sound( :zap ) location = @caster.location eyeball = Eyeball.new( @caster, location.map, location.x, location.y, self ) location.map.add_active_entity( eyeball ) begin eyeball.run end while eyeball.active? eyeball.remove_entity true end end ### Default Spells in Spellbook === DEFAULT_ATTACK_SPELL_TILES = { :spell_lightning => AttackSpellTile.new( 10, 1, 4), :spell_bigball => AttackSpellTile.new( 11, 2, 9), :spell_coolcube => AttackSpellTile.new( 12, 4, 20), } DEFAULT_OTHER_SPELL_TILES = { :spell_magic_map => MagicMapSpellTile.new( 13, 1 ), :spell_heal => HealSpellTile.new( 14, 2, 2 ), :spell_summon_mana => SummonManaSpellTile.new( 15, 0, 3, 2 ), :spell_spy_eye => SpyEyeSpellTile.new( 16, 1 ), # :spell_x2 => SpellTile.new( 18 ), } end magicmaze-1_4_3_6/magicmaze/spellbook.rb0000644000175000017500000000450011074403330016775 0ustar kentkent############################################################ # Magic Maze - a simple and low-tech monster-bashing maze game. # Copyright (C) 2004-2008 Kent Dahl # # This game is FREE as in both BEER and SPEECH. # It is available and can be distributed under the terms of # the GPL license (version 2) or alternatively # the dual-licensing terms of Ruby itself. # Please see README.txt and COPYING_GPL.txt for details. ############################################################ require 'magicmaze/spelltile' module MagicMaze ################################################## # class SpellBook SPELL_NAMES = { :primary => [:spell_lightning, :spell_bigball, :spell_coolcube], :secondary => [:spell_heal, :spell_summon_mana, :spell_magic_map, :spell_spy_eye] } ## # takes two hashes containing spell tiles. def initialize( primary_spells = DEFAULT_ATTACK_SPELL_TILES, secondary_spells = DEFAULT_OTHER_SPELL_TILES ) @spell_list = Hash.new tiles = nil insertion = proc {|spell_name| @spell_list[ spell_name ] = tiles[spell_name] } tiles = primary_spells SPELL_NAMES[:primary].each(&insertion) tiles = secondary_spells SPELL_NAMES[:secondary].each(&insertion) #:primary => primary_spells, # :secondary => secondary_spells #} @spell_index = Hash.new(0) end def spell( spell_type = :primary ) @spell_list[ SPELL_NAMES[spell_type][ @spell_index[spell_type]] ] end def primary_spell spell( :primary ) end def secondary_spell spell( :secondary ) end def page_spell( spell_type = :primary, diff = 1 ) @spell_index[ spell_type ] += diff bound_index!( spell_type ) end def bound_index!( spell_type = :primary ) index = @spell_index[ spell_type ] max = SPELL_NAMES[ spell_type ].size index = if index<0 max + index else if index>= max index - max else index end end @spell_index[ spell_type ] = index nil end private :bound_index! end # SpellBook end magicmaze-1_4_3_6/magicmaze/test_graphics.rb0000644000175000017500000000712111104655653017657 0ustar kentkentrequire 'test/unit' require 'magicmaze/magicmaze' require 'magicmaze/graphics' class TestGraphics < Test::Unit::TestCase def setup @g = MagicMaze::Graphics.get_graphics def @g.sleep_delay(sleep_ms=0) # speed tests up. end end def teardown # MagicMaze::Graphics.shutdown_graphics end def test_initialize assert_not_nil( @g.instance_eval{ @screen } ) assert_not_nil( @g.instance_eval{ @sprite_images } ) end def test_font_init assert_not_nil( @g.instance_eval{ @font } ) assert_not_nil( @g.instance_eval{ @font16 } ) assert_not_nil( @g.instance_eval{ @font32 } ) end def test_load_background_images assert_equal( 3, @g.instance_eval{ @background_images.size } ) end def test_load_new_sprites assert_not_nil( @g.instance_eval{ @sprite_palette } ) assert_not_nil( @g.instance_eval{ @sprite_images } ) assert_equal( 90, @g.instance_eval{ @sprite_images.size } ) end def test_write_score @g.write_score(0) @g.write_score(9999999) @g.write_score(-9999999.99999) end def test_show_message @g.show_message("Test") @g.show_message("Testing the message box", false) # @g.show_message("Testing the message box... \n" * 5 + "And stop!") # Failed for RubySDL2.0.1 and Ruby1.9.1-p1 end def test_show_long_message @g.show_long_message("Test long") @g.show_long_message("Testing the LONG message box", false) @g.show_long_message("Testing the LONG message box... \n" * 5) @g.show_long_message("Testing the LONG message box", true, true) @g.show_long_message("Testing the LONG message box!!! \n" * 20, true, true) end def test_update_life_and_mana @g.update_life_and_mana(0,0) @g.update_life_and_mana(50,0) @g.update_life_and_mana(100,50) @g.update_life_and_mana(100,100) end def test_update_inventory @g.update_inventory( [] ) @g.update_inventory( [1] ) @g.update_inventory( [1,2,3,4,5] ) end def test_update_spells # @g.update_spells(nil,nil) @g.update_spells(1,2) @g.update_spells(3,5) end #################################### def test_show_help @g.show_help end def todo_test_draw_map player = @g.draw_map(player) end def test_scrolltext @g.prepare_scrolltext("This is a" + "long, " * 50 + " long text string... ") 500.times { @g.update_scrolltext; } end def test_rotating_palette @g.setup_rotating_palette(1..255) 50.times { @g.rotate_palette } end def test_setup_menu @g.setup_menu( %w{OK Cancel} ) assert_not_nil( @g.instance_eval { @menu_items } ) assert( ! @g.instance_eval { @menu_truncate_size } ) @g.setup_menu( %w{Yes No OK Cancel}, "OK" ) assert_equal( "OK", @g.instance_eval { @menu_chosen_item} ) @g.setup_menu( ("Repeat... "*50).split ) assert( @g.instance_eval { @menu_truncate_size } ) end def test_draw_menu @g.setup_menu( (1..5).collect{|i| "Choice #{i}"} ) 10.times { @g.draw_menu @g.next_menu_item } end def test_next_menu_item @g.setup_menu( (0...50).collect{|i| "Choice #{i}"} ) 50.times {|i| assert_equal( "Choice #{i}", @g.menu_chosen_item ) @g.next_menu_item } 50.times {|i| assert_equal( "Choice #{i}", @g.menu_chosen_item ) @g.next_menu_item } end def test_previous_menu_item @g.setup_menu( (30..50).collect{|i| "Choice #{i}"} ) 21.times {|i| @g.previous_menu_item assert_equal( "Choice #{50-i}", @g.menu_chosen_item ) } 21.times {|i| @g.previous_menu_item assert_equal( "Choice #{50-i}", @g.menu_chosen_item ) } end end magicmaze-1_4_3_6/magicmaze/test_player.rb0000644000175000017500000000117211074400350017337 0ustar kentkentrequire 'test/unit' require 'magicmaze/spellbook' class TestSpellBook < Test::Unit::TestCase include MagicMaze def setup @spellbook = SpellBook.new end def test_lookup lightning = @spellbook.spell assert_equal( DEFAULT_ATTACK_SPELL_TILES[:spell_lightning], lightning ) end def test_loop orig_spell = @spellbook.spell( :primary ) @spellbook.page_spell(:primary) spell = @spellbook.spell(:primary) assert_equal( DEFAULT_ATTACK_SPELL_TILES[:spell_bigball], spell) @spellbook.page_spell(:primary, -1) spell = @spellbook.spell(:primary) assert_equal( orig_spell, spell ) end end magicmaze-1_4_3_6/magicmaze/mapeditor.rb0000644000175000017500000000302211077435312016775 0ustar kentkent############################################################ # Magic Maze - a simple and low-tech monster-bashing maze game. # Copyright (C) 2008 Kent Dahl # # This game is FREE as in both BEER and SPEECH. # It is available and can be distributed under the terms of # the GPL license (version 2) or alternatively # the dual-licensing terms of Ruby itself. # Please see README.txt and COPYING_GPL.txt for details. ############################################################ require 'magicmaze/graphics' require 'magicmaze/map' module MagicMaze ######################################## # class MapEditor def initialize(game_config, savedir) @game_config = game_config @graphics = game_config.graphics @savedir = savedir @input = Input::Control.new( self, :in_game ) end def start @graphics.clear_screen filename = choose_level_to_load if filename then load_map_file( filename ) else return end start_editor_loop end def choose_level_to_load menu_items = [ Dir["data/maps/mm_map.*"], Dir[@savedir+"/*.map"] ] menu_items.push "Exit" selection = @graphics.choose_from_menu( menu_items.flatten, @input ) if selection == "Exit" then selection=nil end return selection end def load_map_file(filename) # if @map then maybe_save end' @filemap = MagicMaze::FileMap.new(filename) @gamemap = @filemap.to_gamemap end def save_map_file end end # MapEditor end # MagicMaze magicmaze-1_4_3_6/magicmaze/movement.rb0000644000175000017500000001441111076572045016653 0ustar kentkent############################################################ # Magic Maze - a simple and low-tech monster-bashing maze game. # Copyright (C) 2004-2008 Kent Dahl # # This game is FREE as in both BEER and SPEECH. # It is available and can be distributed under the terms of # the GPL license (version 2) or alternatively # the dual-licensing terms of Ruby itself. # Please see README.txt and COPYING_GPL.txt for details. ############################################################ module MagicMaze ## # a 2D location class Location attr_reader :x, :y def initialize( ax = 0, ay = 0 ) set_coords!(ax,ay) end ## # this is the only method that is allowed to alter the # value of the location! # It must return a value that evaluates to true # if coordinates were altered and false if not. # def set_coords!( x, y ) @x = x @y = y self end def add!( diff ) case diff when Location dx = diff.x dy = diff.y when Direction dx, dy = diff.to_2D_vector else raise ArgumentError, "Could not add #{diff.class} to Location." end # puts "#{@x}+#{dx}, #{@y}+#{dy}" set_coords!( @x+dx, @y+dy ) end def +( diff ) ret = self.dup ret.add!(diff) ret # add! should ret self anyway? end def to_a [@x, @y] end def <=>(o) puts "Location<=>" self.to_a.<=>(o.to_a) end include Comparable end # Location ## # a 2D location inside and constrained by a map. class MapLocation < Location attr_reader :map def initialize( map, *args) @map = map super(*args) end ## # conditional setting of coordinates. # Returns self if coordinates were set. # Returns nil if new coordinates were disallowed. def set_coords!(x,y) if @map.is_within?( x, y ) and allowed_access_to?( x, y ) super(x,y) else nil end end ## # may someone go to x,y? def allowed_access_to?( x, y ) not @map.get_background(x,y).blocked? end def allowed_access_to_relative?( dx = 0, dy = 0 ) allowed_access_to?( @x + dx, @y + dy ) end ## # get the tile/object/entity from the given grid # at the current location on the map. def get(grid_type = :object) @map.send(grid_type).get( @x, @y ) end def set(grid_type = :object, object = nil ) @map.send(grid_type).set( @x, @y, object ) end def to_maplocation MapLocation.new(@map,@x,@y) end end ## # an entity on the map. class GeneralEntityLocation < MapLocation attr_reader :entity def initialize( entity_type, entity, *args) @entity = entity @entity_type = entity_type @x = @y = nil # Due to set_coords! implementation below. super(*args) end def remove_old_entity @grid = @map.send(@entity_type) old_entity = @grid.get(@x, @y) if old_entity == @entity @grid.set(@x,@y, nil) end end def set_coords!(x,y) oldx, oldy = @x, @y was_moved = super(x,y) if was_moved @grid = @map.send(@entity_type) old_entity = @grid.get(oldx, oldy) if oldx && oldy replaced_entity = @grid.get(x,y) warn_could_not_find_old_entity unless not old_entity or old_entity == @entity warn_replacing_existing_entity unless not replaced_entity # Remove our previous position on the map @grid.set(oldx,oldy, nil) if oldx&&oldy @grid.set( x,y, @entity ) end return was_moved end def delete old_entity = @grid.get(self.x, self.y) if old_entity == @entity @map.send(@entity_type).set(self.x, self.y, nil ) end end def allowed_access_to?( x, y ) @grid = @map.send(@entity_type) super and not @grid.get(x,y) end def warn_could_not_find_old_entity end def warn_replacing_existing_entity end end ## # an entity on the map. class EntityLocation < GeneralEntityLocation def initialize( *args) super(:entity, *args) end def warn_could_not_find_old_entity raise ArgumentError, "Moved entity not found on point of origin." end def warn_replacing_existing_entity raise ArgumentError, "Replaced existing entity, map corrupted." end end class SpiritualLocation < GeneralEntityLocation def initialize( *args) super(:spiritual, *args) end def allowed_access_to?( x, y ) true end def set_coords!(x,y) if allowed_access_to?( x, y ) super(x,y) else nil end end end ## # a 4-way compass direction. class Direction MAX = 3 MIN = 0 MASK = 0x3 # Numeric values for the directions. N_ID = 0 E_ID = 1 S_ID = 2 W_ID = 3 COORDINATE_VECTORS = [ [0,-1], [1,0], [0,1], [-1,0] ] attr_reader :direction alias :value :direction def initialize( direction = 0 ) check_direction( direction ) self.direction=( direction ) end def check_direction( direction ) if direction>MAX or direction(other) case other when Direction @direction<=>other.direction when Numeric @direction<=>other end end include Comparable def to_2D_vector COORDINATE_VECTORS[@direction] end def self.constant(dir) new(dir).freeze end ## # Constant directions. N = NORTH = constant(N_ID) E = EAST = constant(E_ID) S = SOUTH = constant(S_ID) W = WEST = constant(W_ID) COMPASS_DIRECTIONS = [ N, E, S, W ] def self.get_constant( id ) COMPASS_DIRECTIONS[ id & MASK ] end end # Direction end magicmaze-1_4_3_6/magicmaze/player.rb0000644000175000017500000001406611075711042016312 0ustar kentkent############################################################ # Magic Maze - a simple and low-tech monster-bashing maze game. # Copyright (C) 2004-2008 Kent Dahl # # This game is FREE as in both BEER and SPEECH. # It is available and can be distributed under the terms of # the GPL license (version 2) or alternatively # the dual-licensing terms of Ruby itself. # Please see README.txt and COPYING_GPL.txt for details. ############################################################ require 'magicmaze/movement' require 'magicmaze/entity' require 'magicmaze/spellbook' require 'magicmaze/inventory' module MagicMaze ################################################## # Game object representing the player. class Player < Being attr_reader :impulses attr_reader :spellbook IMPULSES = [ :move_forward, :turn_around, :die ] attr_reader :score attr_reader :inventory attr_reader :life, :mana START_MANA = 100 START_LIFE = 100 GAIN_MANA_DELAY = 24 LOOSE_HEALTH_DELAY = 256 attr_reader :game_config def initialize( map, game_config, *args ) super( map, map.start_x, map.start_y, *args ) print "init: Player#location: ", @location.x, " ", @location.y, "\n" @game_config = game_config @score = 0 @primary_spell = DEFAULT_ATTACK_SPELL_TILES[:spell_lightning] @secondary_spell = DEFAULT_OTHER_SPELL_TILES[:spell_magic_map] @inventory = Inventory.new @spellbook = SpellBook.new @mana = START_MANA @life = START_LIFE @impulses = Hash.new @last_action = nil @gain_mana_delay = GAIN_MANA_DELAY @loose_health_delay = LOOSE_HEALTH_DELAY @override_sprite = nil end def reset( map, saved = nil ) if map @location.delete # Necessary to release the player entity from the grid. @location = EntityLocation.new( self, map, map.start_x, map.start_y ) end if saved @mana = saved[:mana] @life = saved[:life] @score = saved[:score] end @mana = [ @mana, START_MANA ].max @life = [ @life, START_LIFE ].max @inventory = Inventory.new # Flush inventory @impulses = Hash.new @last_action = nil @override_sprite = nil end ## # return hash with saved game status... Only restart point of level so far. def get_saved { :mana => @mana, :life => @life, :score=> @score } end ################################################## # Impulses def move_forward( *args ) if super # movement successful else # try unlocking keys? location = @location.to_maplocation + @direction entity = location.get(:entity) if location case entity when DoorTile opened = @inventory.open_door?( entity.color ) location.set(:entity,nil) if opened end end end def turn_around( direction ) @direction.value = direction end ################################## # Action ticks - what to check # each and every game tick. def action_tick( *args ) follow_impulses check_floor check_nearby_monsters check_counters end def follow_impulses mf = @impulses[:move_forward] ta = @impulses[:turn_around] if mf and ta then ta_ok = (@location.to_maplocation + Direction.new(ta)) mf_ok = (@location.to_maplocation + @direction) if ta_ok if mf_ok @impulses[@last_action] = nil else @impulses[:move_forward] = nil end else if mf_ok @impulses[:turn_around] = nil else # uh ... @impulses[:turn_around] = nil end end end IMPULSES.each{|key| value = @impulses[key] if value then self.send(key, value) @impulses[key] = nil @last_action = key end } end def add_impulse( impulse, value=true ) @impulses[impulse] = value end def check_floor entity = @location.get(:object) if entity consumed = entity.collide_with_player( self ) @location.set(:object,nil) if consumed end end def check_nearby_monsters ox, oy = *(@location.to_a) Direction::COORDINATE_VECTORS.each{|dx,dy| x = ox + dx y = oy + dy entity = @location.map.entity.get(x, y) if (entity and entity.kind_of? Monster and entity.alive?) then play_sound( :punch ) loose_health( 1 ) end } end def check_counters @gain_mana_delay -= 1 if( @gain_mana_delay < 0 ) add_mana( 1 ) @gain_mana_delay = GAIN_MANA_DELAY end @loose_health_delay -= 1 if( @loose_health_delay < 0 ) loose_health( 1 ) @loose_health_delay = LOOSE_HEALTH_DELAY end end def increase_score( diff ) @score += diff true end def loose_health( diff ) add_life( -diff ) if @life <= 0 then play_sound( :argh ) @override_sprite = DEFAULT_TILES[ :BLOOD_SPLAT ].sprite_id add_impulse( :die ) end end def die( vale ) request_state_change( :player_died ) end def heal( diff ) if @life + diff <= MAX_LIFE add_life( diff ) true else false end end def have_mana?( diff ) if @mana >= diff true else false end end # callback from missiles. def missile_removed( missile ) # @num_missiles -= 1 end def sprite_id ( @override_sprite || @direction.value ) end def inventory_add_key( key ) result = @inventory.add_key( key ) result end def play_sound( sound ) @game_config.sound.play_sound( sound ) end ## # tell gameloop to inc the level number def exit_to_next_level request_state_change( :next_level ) end def request_state_change( state ) throw :state_change, state end end # Player end magicmaze-1_4_3_6/magicmaze/test_tile.rb0000644000175000017500000000325411074376372017023 0ustar kentkentrequire 'test/unit' require 'magicmaze/tile' require 'magicmaze/spelltile' class TestBackgroundTile < Test::Unit::TestCase def test_blocked t = MagicMaze::BackgroundTile.new( 5, true ) assert( t.blocked? ) t = MagicMaze::BackgroundTile.new( 6, false ) assert( ! t.blocked? ) end end class TestSpellTile < Test::Unit::TestCase class TestSpell < MagicMaze::SpellTile def do_magic @magic_done = true return @should_do_magic end attr_accessor :magic_done attr_accessor :should_do_magic end ## # Mock methods: Pretend to be the caster (Player) def have_mana?( cost ) @requested_cost = cost return @have_mana end def add_mana( cost ) @used_cost = -cost end def setup @mana_cost = 5 @spell = TestSpell.new( 0, @mana_cost ) end def test_spell @have_mana = true @spell.should_do_magic = true @spell.cast_spell( self ) assert_equal 5, @requested_cost assert_equal 5, @used_cost assert @spell.magic_done end def test_spell_fail_do_magic @have_mana = true @spell.should_do_magic = false @spell.cast_spell( self ) assert @spell.magic_done assert_equal 5, @requested_cost assert_equal nil, @used_cost end def test_spell_fail_have_mana @have_mana = false @spell.should_do_magic = true @spell.cast_spell( self ) assert ! @spell.magic_done assert_equal 5, @requested_cost assert_equal nil, @used_cost end def test_spell_fail_have_mana @have_mana = false @spell.should_do_magic = true @spell.cast_spell( self ) assert ! @spell.magic_done assert_equal 5, @requested_cost assert_equal nil, @used_cost end end magicmaze-1_4_3_6/magicmaze/tile.rb0000644000175000017500000001315711074403330015750 0ustar kentkent############################################################ # Magic Maze - a simple and low-tech monster-bashing maze game. # Copyright (C) 2004-2008 Kent Dahl # # This game is FREE as in both BEER and SPEECH. # It is available and can be distributed under the terms of # the GPL license (version 2) or alternatively # the dual-licensing terms of Ruby itself. # Please see README.txt and COPYING_GPL.txt for details. ############################################################ module MagicMaze module Abstract def abstract_method_called raise ArgumentError, "Abstract method called." end end ######################################## ## # an object representing a simple # tile sprite in the game. class Tile include Abstract attr_reader :sprite_id def initialize( sprite_id = nil ) @sprite_id = sprite_id end end module SuperInit def initialize(*a) super(*a) end end class EntityTile < Tile include SuperInit def create_entity( *args ) abstract_method_called end end class MonsterTile < EntityTile def initialize(*args) @start_health = args.pop super(*args) end attr_reader :start_health def create_entity(map,x,y,*args) Monster.new(map,x,y, self) end end ######################################## ## # An in-game object tile type, # such as keys, doors, etc. class ObjectTile < Tile include SuperInit ## # handle collision between an object on the floor # and the player. # Return true if the object has been "consumed" # and needs to be removed from the map. def collide_with_player( *args ) false end def collide_with_monster( *args ) false end end class KeyTile < ObjectTile attr_reader :color def initialize( *args ) @color = args.pop super( *args ) end def collide_with_player( player, *args ) result = player.inventory_add_key(@color) player.play_sound( :bonus ) if result result end end class BonusTile < ObjectTile def initialize(*args) @bonus = args.pop super(*args) end def collide_with_player( player, *args ) player.play_sound( :bonus ) player.increase_score( @bonus ) true end end class ManaRefillTile < ObjectTile def initialize(*args) @mana = args.pop super(*args) end def collide_with_player( player, *args ) if player.mana <= Player::MAX_MANA-@mana player.play_sound( :bonus ) player.add_mana( @mana ) true else false end end end # ManaRefillTile class LifeRefillTile < ObjectTile def initialize(*args) @life = args.pop super(*args) end def collide_with_player( player, *args ) if player.life <= Player::MAX_LIFE-@life player.play_sound( :bonus ) player.add_life( @life ) true else false end end end class LifeManaRefillTile < ObjectTile def initialize(*args) @mana = args.pop @life = args.pop super(*args) end def collide_with_player( player, *args ) life_potential = Player::MAX_LIFE-player.life mana_potential = Player::MAX_MANA-player.mana if life_potential >= @life/4 and mana_potential >= @mana/4 player.play_sound( :bonus ) player.add_life( life_potential ) player.add_mana( mana_potential ) true else false end end end class ExitTile < ObjectTile def initialize(*args) super(*args) end def collide_with_player( player, *args ) player.exit_to_next_level true end end class DoorTile < EntityTile attr_reader :color def initialize(*a) @color = a.pop super(*a) end def create_entity(map,x,y,*args) self end end ## # a Tile that is part of the background class BackgroundTile < Tile BACKGROUND_TILES_BEGIN = 58 attr_reader :blocked alias :blocked? :blocked def initialize( sprite_id = 0, blocked = false ) super( sprite_id + BACKGROUND_TILES_BEGIN ) @blocked = blocked end end ######################################## ## # Some default object tiles. DEFAULT_KEY_TILES = { :red_key => KeyTile.new(30, :red), :blue_key => KeyTile.new(31, :blue), :yellow_key => KeyTile.new(32, :yellow), } DEFAULT_DOOR_TILES = { :RED_DOOR => DoorTile.new(33, :red), :BLUE_DOOR => DoorTile.new(34, :blue), :YELLOW_DOOR => DoorTile.new(35, :yellow), } DEFAULT_MONSTER_TILES = Hash.new [ 4, 13, 19, 25, 31, 38, 44, 51, 57, 63, 70, 76, 83, 89, 95, 101, 108, 114, 120, 127]. each_with_index{|tough, index| DEFAULT_MONSTER_TILES[ ":monster#{index}".intern ] = MonsterTile.new( 40 + index, tough ) } DEFAULT_TILES = { :BLOOD_SPLAT => ObjectTile.new(9), :CHEST => BonusTile.new(20, 50), :LIFE_POTION => LifeRefillTile.new(21, 25), :MANA_POTION => ManaRefillTile.new(22, 20), :MONEY_BAG => BonusTile.new(23, 250), :ORB => LifeManaRefillTile.new(24, 100, 100), :EXIT => ExitTile.new(39), } # gather them all i DEFAULT_TILES [ DEFAULT_KEY_TILES, DEFAULT_DOOR_TILES, DEFAULT_MONSTER_TILES, # DEFAULT_ATTACK_SPELL_TILES, # DEFAULT_OTHER_SPELL_TILES, ].each{|tileset| DEFAULT_TILES.update( tileset ) } # Create reverse lookup hash for tiles. # No two tiles may have same sprite id! DEFAULT_TILES_ID_LOOKUP = Hash.new DEFAULT_TILES.each{|key,value| DEFAULT_TILES_ID_LOOKUP[ value.sprite_id ] = value } end magicmaze-1_4_3_6/magicmaze/input.rb0000644000175000017500000002316611065452715016166 0ustar kentkent############################################################ # Magic Maze - a simple and low-tech monster-bashing maze game. # Copyright (C) 2004-2008 Kent Dahl # # This game is FREE as in both BEER and SPEECH. # It is available and can be distributed under the terms of # the GPL license (version 2) or alternatively # the dual-licensing terms of Ruby itself. # Please see README.txt and COPYING_GPL.txt for details. ############################################################ require 'sdl' module MagicMaze ## # module for handling input from the user. module Input ## # Callback for implementing states where # keys can only be used to break out of a loop or similar # class BreakCallback def initialize( block ) @block = block end def callback @block.call end alias :break :callback def self.make_control( key_mode = :break, &block ) Control.new( self.new( block ), key_mode ) end end ## # Control input. # class Control DEFAULT_KEY_MAP = { SDL::Key::F1 => :helpscreen, SDL::Key::H => :helpscreen, SDL::Key::F4 => :load_game, SDL::Key::F5 => :save_game, SDL::Key::F9 => :restart_level, SDL::Key::R => :restart_level, SDL::Key::F12 => :toogle_fullscreen, SDL::Key::ESCAPE => :escape, SDL::Key::Q => :escape, SDL::Key::X => :next_primary_spell, SDL::Key::Z => :previous_primary_spell, SDL::Key::S => :next_secondary_spell, SDL::Key::A => :previous_secondary_spell, SDL::Key::P => :pause_game, SDL::Key::R => :restart_level, SDL::Key::PAGEUP => :increase_volume, SDL::Key::PAGEDOWN => :decrease_volume, SDL::Key::KP_PLUS => :increase_speed, SDL::Key::KP_MINUS => :decrease_speed, # For OLPC SDL::Key::KP3 => :next_primary_spell, # X SDL::Key::KP7 => :next_secondary_spell, # [] } DEFAULT_ACTION_KEY_MAP = { SDL::Key::SPACE => :cast_alternative_spell, SDL::Key::UP => :move_up, SDL::Key::DOWN => :move_down, SDL::Key::LEFT => :move_left, SDL::Key::RIGHT => :move_right, # For OLPC SDL::Key::KP8 => :move_up, SDL::Key::KP2 => :move_down, SDL::Key::KP4 => :move_left, SDL::Key::KP6 => :move_right, # For OLPC SDL::Key::KP1 => :cast_primary_spell, # V SDL::Key::KP9 => :cast_alternative_spell, # O } DEFAULT_MODIFIER_KEY_MAP = { SDL::Key::MOD_LCTRL => :cast_primary_spell, SDL::Key::MOD_LALT => :cast_alternative_spell, } DEFAULT_JOYSTICK_MAP = { :hat => { SDL::Joystick::HAT_UP => :move_up, SDL::Joystick::HAT_DOWN => :move_down, SDL::Joystick::HAT_LEFT => :move_left, SDL::Joystick::HAT_RIGHT => :move_right, }, :button => { 0 => :cast_primary_spell, 1 => :cast_alternative_spell, 2 => :next_primary_spell, 3 => :previous_primary_spell, 4 => :next_secondary_spell, 5 => :previous_secondary_spell, }, :axis => { 0 => [:move_left, :move_right], 1 => [:move_up, :move_down], 2 => [:previous_secondary_spell, nil], 3 => [:next_secondary_spell, nil], } } EMPTY_KEY_MAP = {} ## # Default key maps. # We have maps for in game and titlescreen input. # Each key map has :normal_keys, :action_keys and :modifier_keys. # - :normal_keys are triggered on release (nice for quit/exit/help etc) # - :action_keys are triggered when held (nice for movement etc) # - :modifier_keys are also triggered when held, but is reserved for # modifier keys (such as Ctrl, Alt, Shift etc) KEY_MAPS = { :in_game => { :normal_keys => DEFAULT_KEY_MAP, :action_keys => DEFAULT_ACTION_KEY_MAP, :modifier_keys => DEFAULT_MODIFIER_KEY_MAP, :joystick => DEFAULT_JOYSTICK_MAP, }, :titlescreen => { :normal_keys => { SDL::Key::F1 => :test_helpscreen, SDL::Key::F4 => :select_game_checkpoint, SDL::Key::F6 => :test_fade, SDL::Key::F7 => :test_endgame, SDL::Key::F8 => :test_menu, SDL::Key::F12 => :toogle_fullscreen, SDL::Key::ESCAPE => :exit_game, SDL::Key::Q => :exit_game, SDL::Key::RETURN => :open_game_menu, SDL::Key::SPACE => :open_game_menu, # For OLPC: SDL::Key::KP3 => :exit_game, # X SDL::Key::KP1 => :open_game_menu, # V SDL::Key::KP7 => :start_game, # }, :action_keys => { }, :modifier_keys => EMPTY_KEY_MAP, :joystick => { :button => { 0 => :start_game, } } }, :break => { :normal_keys => { SDL::Key::ESCAPE => :break, SDL::Key::Q => :break, SDL::Key::RETURN => :break, SDL::Key::SPACE => :break, SDL::Key::KP3 => :break, # X }, :action_keys => EMPTY_KEY_MAP, :modifier_keys => EMPTY_KEY_MAP, :joystick => { :button => { 0 => :break, } } }, } @@joystick = nil def self.init_joystick( joy_num = 0) puts "Checking for joystick" SDL.init( SDL::INIT_JOYSTICK ) if SDL::Joystick.num > joy_num then puts "Enabling joystick" @@joystick = SDL::Joystick.open( joy_num ) puts "Joystick: " + SDL::Joystick.indexName( @@joystick.index ) end end attr_accessor :callback def initialize( callback, key_mode = :titlescreen ) SDL::Key.enable_key_repeat( 10, 10 ) @callback = callback set_key_mode( key_mode ) end ## # set a key mode. def set_key_mode( key_mode ) @keymap = KEY_MAPS[ key_mode ] end def get_key_press begin event = SDL::Event2.poll end until event.kind_of? SDL::Event2::KeyUp return event end YES_NO_ANSWERS = { SDL::Key::ESCAPE => false, SDL::Key::Q => false, SDL::Key::N => false, SDL::Key::Y => true, SDL::Key::J => true, # For OLPC: SDL::Key::KP3 => false, # X SDL::Key::KP1 => true, # V } def get_yes_no_answer answers = YES_NO_ANSWERS begin key = get_key_press.sym end until answers.has_key?( key ) return answers[ key ] end MENU_NAVIGATION = { SDL::Key::ESCAPE => :exit_menu, SDL::Key::Q => :exit_menu, SDL::Key::UP => :previous_menu_item, SDL::Key::DOWN => :next_menu_item, SDL::Key::RETURN => :select_menu_item, SDL::Key::SPACE => :select_menu_item, # For OLPC: SDL::Key::KP3 => :exit_menu, # X SDL::Key::KP1 => :select_menu_item, # V SDL::Key::KP8 => :previous_menu_item, SDL::Key::KP2 => :next_menu_item, } def get_menu_item_navigation_event answers = MENU_NAVIGATION begin key = get_key_press.sym end until answers.has_key?( key ) return answers[ key ] end def check_input event = SDL::Event2.poll case event when SDL::Event2::Quit then @callback.exit when SDL::Event2::KeyUp check_key_press( event.sym ) end check_key_hold check_modifier_keys check_joystick end ## # send a callback if it can handle it def call_callback( method_name ) @callback.send( method_name ) if method_name and @callback.respond_to? method_name end ## # Check for seldom key presses. def check_key_press( key ) method_name = @keymap[:normal_keys][ key ] call_callback( method_name ) end ## # Check for action keys that often will be pressed # and may be held down. def check_key_hold SDL::Key.scan @keymap[:action_keys].each do |key, action| if SDL::Key.press?( key ) call_callback( action ) end end end ## # Check for modifier keys (Ctrl, Shift etc) def check_modifier_keys mod_state = SDL::Key.mod_state @keymap[:modifier_keys].each do |key, action| if (mod_state & key) != 0 then call_callback( action ) end end end ## # Check for joystick movement def check_joystick return unless @@joystick SDL::Joystick.updateAll joymap = @keymap[:joystick] # Check hat state... joy_hat_state = @@joystick.hat(0) joymap[:hat].each do |hat, action| if (joy_hat_state & hat) != 0 then call_callback( action ) end end if joymap[:hat] # Check buttons... joymap[:button].each do |button, action| if( @@joystick.button( button ) ) call_callback( action ) end end if joymap[:button] # Check axis joymap[:axis].each do |axis, action_list| axis_value = @@joystick.axis( axis ) action = nil action = action_list.first if axis_value < -(1<<8) action = action_list.last if axis_value > (1<<8) call_callback( action ) if action end if joymap[:axis] end end # Control end # Input end # MagicMaze magicmaze-1_4_3_6/magicmaze/test_map.rb0000644000175000017500000000202410134226414016620 0ustar kentkentrequire 'test/unit' require 'magicmaze/map' require 'magicmaze/tile' class TestMagicGameMap < Test::Unit::TestCase class TestTile < MagicMaze::BackgroundTile; end def setup @tile = TestTile.new @wall = TestTile.new @map = MagicMaze::GameMap.new( @tile, @wall ) end def test_tile assert_raises(ArgumentError, "Expected Tile."){ MagicMaze::GameMap.new( nil, nil ) } assert_raises(ArgumentError, "Expected Tile."){ MagicMaze::GameMap.new( @tile, nil ) } assert_raises(ArgumentError, "Expected Tile."){ MagicMaze::GameMap.new( nil, @wall ) } end def test_access max_x = MagicMaze::GameMap::MAP_X_SIZE-1 max_y = MagicMaze::GameMap::MAP_Y_SIZE-1 tests = [ [true, 5,5], [true, 0,5], [true, 0,0], [true, max_x,0], [true, 0,max_y], [false, max_x+1,0], [false, 0,max_y+1], [false, max_x+1, max_y+1], ] tests.each{|expected, x, y| assert_equal( expected, @map.is_within?( x, y ), "(#{x}, #{y})" ) } end end magicmaze-1_4_3_6/magicmaze/sound.rb0000644000175000017500000000402511075712475016153 0ustar kentkent############################################################ # Magic Maze - a simple and low-tech monster-bashing maze game. # Copyright (C) 2004-2008 Kent Dahl # # This game is FREE as in both BEER and SPEECH. # It is available and can be distributed under the terms of # the GPL license (version 2) or alternatively # the dual-licensing terms of Ruby itself. # Please see README.txt and COPYING_GPL.txt for details. ############################################################ require 'sdl' module MagicMaze ################################################ # # SOUND_ENABLED = true unless defined? SOUND_ENABLED ## # Use SDL for sound # class Sound ALL_CHANNELS = -1 ## # Singleton graphics instance. def self.get_sound(options={}) @sound_instance ||= MagicMaze::Sound.new(options) @sound_instance end def self.shutdown_graphics @sound_instance.destroy @sound_instance = nil end def initialize(options={}) SDL::Mixer.open @sounds = {} (1..4).each{|sound_no| filename = sprintf "data/sound/sound%d.wav", sound_no sound = SDL::Mixer::Wave.load( filename ) @sounds[sound_no] = sound } volume = options[:volume] || 8 SDL::Mixer.set_volume( ALL_CHANNELS, 64*volume/10 ) end def destroy SDL::Mixer.set_volume( ALL_CHANNELS, 0 ) end def play_sound( sound_no ) sound_no = SOUNDS[sound_no] unless sound_no.kind_of? Numeric wave = @sounds[sound_no] SDL::Mixer.playChannel(sound_no,wave,0) end def change_volume( way = 1, step = 8 ) old_vol = SDL::Mixer.set_volume( ALL_CHANNELS, -1 ) new_vol = old_vol + way * step if new_vol.between?( 1, 128 ) SDL::Mixer.set_volume( ALL_CHANNELS, new_vol ) end end end ## # Dummy class for when we want no sound. class NoSound def method_missing(*a) end end ## # Mapping sound names to sound file index. # SOUNDS = { :argh => 1, :zap => 2, :punch => 3, :bonus => 4, } end magicmaze-1_4_3_6/magicmaze/graphics.rb0000644000175000017500000005220211104655652016617 0ustar kentkent############################################################ # Magic Maze - a simple and low-tech monster-bashing maze game. # Copyright (C) 2004-2008 Kent Dahl # # This game is FREE as in both BEER and SPEECH. # It is available and can be distributed under the terms of # the GPL license (version 2) or alternatively # the dual-licensing terms of Ruby itself. # Please see README.txt and COPYING_GPL.txt for details. ############################################################ require 'sdl' require 'magicmaze/images' require 'magicmaze/tile' module MagicMaze ################################################ # class Graphics include Images # Generic GFX. DEBUG = true GFX_PATH = 'data/gfx/' SCREEN_IMAGES = { :titlescreen => 'title.pcx', :background => 'background.pcx', :endscreen => 'end.pcx', } SCALE_FACTOR = (self.constants.include?("OVERRIDE_GRAPHICS_SCALE_FACTOR") ? OVERRIDE_GRAPHICS_SCALE_FACTOR : 2) BACKGROUND_TILES_BEGIN = BackgroundTile::BACKGROUND_TILES_BEGIN COL_WHITE=10; COL_RED = 20; COL_GREEN = 30; COL_BLUE = 40; COL_YELLOW = 50; COL_DARKGRAY=3; COL_GRAY=5; COL_LIGHTGRAY=7; SPRITE_WIDTH = 32 * SCALE_FACTOR; SPRITE_HEIGHT = 32 * SCALE_FACTOR; # the *_AREA_MAP_* variables are map coordinate related, not screen coordinate. VIEW_AREA_MAP_WIDTH = 7 VIEW_AREA_MAP_HEIGHT = 7 VIEW_AREA_MAP_WIDTH_CENTER = VIEW_AREA_MAP_WIDTH / 2 VIEW_AREA_MAP_HEIGHT_CENTER = VIEW_AREA_MAP_HEIGHT / 2 VIEW_AREA_UPPER_LEFT_X = 2 * SCALE_FACTOR VIEW_AREA_UPPER_LEFT_Y = 2 * SCALE_FACTOR # rectangles on the display. [startx, starty, width, height, colour] FULLSCREEN = [ 0, 0, 320, 240,0].collect{|i| i*SCALE_FACTOR} INVENTORY_RECTANGLE = [230, 16, 87,32, 0].collect{|i| i*SCALE_FACTOR} LIFE_MANA_RECTANGLE = [230, 63, 87,16, 0].collect{|i| i*SCALE_FACTOR} SCORE_RECTANGLE = [230+8, 93, 87-8,14, 0].collect{|i| i*SCALE_FACTOR} SPELL_RECTANGLE = [230,126, 32,32, 0].collect{|i| i*SCALE_FACTOR} ALT_SPELL_RECTANGLE = [285,126, 32,32, 0].collect{|i| i*SCALE_FACTOR} MAZE_VIEW_RECTANGLE = [ VIEW_AREA_UPPER_LEFT_X, VIEW_AREA_UPPER_LEFT_Y, SPRITE_WIDTH*VIEW_AREA_MAP_WIDTH, SPRITE_HEIGHT*VIEW_AREA_MAP_HEIGHT, 0 ] PLAYER_SPRITE_POSITION = [ 2 + SPRITE_WIDTH * VIEW_AREA_MAP_WIDTH_CENTER, 2 + SPRITE_WIDTH * VIEW_AREA_MAP_HEIGHT_CENTER ] ## # Singleton graphics instance. def self.get_graphics(options={}) @graphics_instance ||= MagicMaze::Graphics.new(options) @graphics_instance end def self.shutdown_graphics @graphics_instance.destroy @graphics_instance = nil end def initialize(options={}) puts "Starting Magic Maze..." screen_init(options) early_progress font_init @progress_msg = _("Summoning") + "\n." early_progress load_background_images @progress_msg = _("Magic Maze") + "\n." early_progress @sprite_images = load_new_sprites || load_old_sprites # show_message("Enter!") # Cached values for what is already drawn. @cached_drawing = Hash.new @delay_stats = Array.new puts "Graphics initialized." if DEBUG end def destroy if @delay_stats && @delay_stats.size.nonzero? then puts "Delay average: " + (@delay_stats.inject(0.0){|i,j|i+j}/@delay_stats.size).to_s puts "Delay min/max: " + @delay_stats.min.to_s + " / " + @delay_stats.max.to_s end SDL.quit end def screen_init(options) puts "Setting up graphics..." if DEBUG @xsize = FULLSCREEN[2] @ysize = FULLSCREEN[3] @bpp = 8 # 16 wont work SDL.init( SDL::INIT_VIDEO ) SDL::Mouse.hide SDL::WM.set_caption( _("Magic Maze"),"" ) # SDL::WM.icon=( SDL::Surface.load("data/gfx/icon.png") ) screen_mode = SDL::HWSURFACE + SDL::DOUBLEBUF screen_mode += SDL::FULLSCREEN if options[:fullscreen] @screen = SDL::setVideoMode(@xsize,@ysize, @bpp, screen_mode) early_progress SDL::WM.icon=( SDL::Surface.load("data/gfx/icon.png") ) early_progress unless @screen.respond_to? :draw_rect then def @screen.draw_rect(x,y,w,h,c) # Workaround for older Ruby/SDL... fill_rect(x,y, w,1, c) fill_rect(x,y, 1,h, c) fill_rect(x,y+h, w,1, c) fill_rect(x+w,y, 1,h, c) end end end # Simple progress indication before we can write etc to screen. def early_progress(progress=nil, flip=true, clear=true) @progress = progress || (@progress||0)+1 w = SCALE_FACTOR * (64 - @progress*8) c = 255 - (@progress**2) clear_screen if clear @screen.fill_rect(@xsize-w,0, w,@ysize, @screen.map_rgb(c,c,c)) show_long_message(@progress_msg) if @progress_msg @screen.flip if flip end def font_init ## Fonts SDL::TTF.init # Free font found at: http://www.squaregear.net/fonts/ fontfile = "data/gfx/fraktmod.ttf" fontsize = [16, 32] tries = 0 begin @font16 = SDL::TTF.open( fontfile, fontsize.first * SCALE_FACTOR ) @font32 = SDL::TTF.open( fontfile, fontsize.last * SCALE_FACTOR ) rescue SDL::Error => err # Debian font fontfile = "/usr/share/fonts/truetype/Isabella.ttf" fontsize = [12, 28] if tries < 1 then tries += 1 # to avoid loop. retry else raise err end end @font = @font16 end def load_background_images @background_images = {} SCREEN_IMAGES.each{|key, filename| source_image = SDL::Surface.load( GFX_PATH+filename ) @progress_msg += "." ; early_progress if SCALE_FACTOR != 1 then scaled_image = SDL::Surface.new(SDL::SWSURFACE, source_image.w * SCALE_FACTOR, source_image.h * SCALE_FACTOR, @screen) scaled_image.set_palette( SDL::LOGPAL|SDL::PHYSPAL, source_image.get_palette, 0 ) linear_scale_image(source_image,0,0, scaled_image, SCALE_FACTOR ) else scaled_image = source_image end @background_images[key] = scaled_image } end ## # reads in the old sprites from the "undocumented" format I used. # def load_old_sprites sprite_images = [] File.open( GFX_PATH+'sprites.dat', 'rb'){|file| # First 3*256 bytes is the palette, with values ranged (0...64). palette_data = file.read(768) if palette_data.size == 768 then palette = (0..255).collect{|colour| data = palette_data[colour*3,3] [data[0], data[1], data[2]].collect{|i| i*255/63} #((i<<2) | 3) + 3 } } end @sprite_palette = palette # Loop over 1030 byte segments, which each is a sprite. begin sprite = SDL::Surface.new(SDL::HWSURFACE, # SDL::SRCCOLORKEY, SPRITE_WIDTH,SPRITE_HEIGHT,@screen) mode = SDL::LOGPAL|SDL::PHYSPAL sprite.set_palette( mode, palette, 0 ) @screen.set_palette(mode, palette, 0 ) sprite_data = file.read(1030) if sprite_data && sprite_data.size==1030 then x = 0 y = 0 sprite.lock # The first six bytes is garbage? sprite_data[6,1024].each_byte{|pixel| sprite.put_pixel(x,y,pixel) x += 1 # *SCALE_FACTOR if x>31 x = 0 y += 1 end } sprite.unlock sprite.setColorKey( SDL::SRCCOLORKEY || SDL::RLEACCEL ,0) sprite_images << sprite.display_format end end while sprite_data } sprite_images end ## # Load sprites from a large bitmap. Easier to edit. # def load_new_sprites puts "Loading sprites..." if DEBUG sprite_images = [] begin spritemap = SDL::Surface.load( GFX_PATH + 'sprites.pcx' ) rescue return nil end palette = spritemap.get_palette lines = ( spritemap.h + 15 ) / 32 @screen.set_palette( SDL::LOGPAL|SDL::PHYSPAL, palette, 0 ) (0...lines).each do|line| @progress_msg += "." ; early_progress (0...10).each do|column| sprite = SDL::Surface.new(SDL::HWSURFACE, #|SDL::SRCCOLORKEY, SPRITE_WIDTH, SPRITE_HEIGHT, @screen) mode = SDL::LOGPAL|SDL::PHYSPAL x = column * 32 y = line * 32 w = h = 32 sprite.set_palette( mode, palette, 0 ) sprite.setColorKey( SDL::SRCCOLORKEY || SDL::RLEACCEL ,0) sprite.fillRect(0,0,SPRITE_WIDTH,SPRITE_HEIGHT,3) if SCALE_FACTOR == 1 then SDL.blitSurface(spritemap,x,y,w,h,sprite, 0,0 ) else linear_scale_image(spritemap,x,y, sprite, SCALE_FACTOR ) end sprite.set_palette( mode, palette, 0 ) sprite.setColorKey( SDL::SRCCOLORKEY || SDL::RLEACCEL ,0) sprite_images << sprite.display_format end end @sprite_palette = palette puts "Sprites loaded: #{sprite_images.size}." if DEBUG sprite_images end ## # save sprites out to bitmap # def save_old_sprites( filename = "tmpgfx" ) height = ( (@sprite_images.size / 10) + 1 ) * 32 spritemap = SDL::Surface.new( SDL::SRCCOLORKEY, @xsize, height, @screen ) spritemap.set_palette( SDL::LOGPAL, @sprite_palette, 0 ) @sprite_images.each_with_index do|sprite, index| y = (index / 10) * 32 x = (index % 10 ) * 32 spritemap.put( sprite, x, y ) end spritemap.save_bmp( filename + ".bmp" ) end ################################################# # View specific methods def write_score( score ) return if cached_drawing_valid?(:score, score ) text = sprintf "%9d", score # fails on EeePC # text = sprintf "%09d", score # old safe one. rect = SCORE_RECTANGLE @screen.fillRect(*rect) write_text( text, rect[0]+2*SCALE_FACTOR, rect[1]-2*SCALE_FACTOR ) end ## # Show a single line message centered in the # maze view area. # def show_message( text, flip = true ) rect = MAZE_VIEW_RECTANGLE @screen.fillRect(*rect) tw, th = @font32.text_size( text ) x = rect[0] y = rect[1] w = rect[2] h = rect[3] write_smooth_text(text, x + (w-tw)/2, y + (h-th)/2, @font32 ) @screen.flip if flip end ## # Show a multi-line message centered in the # maze view area. def show_long_message( text, flip = true, fullscreen = false ) rect = ( fullscreen ? FULLSCREEN : MAZE_VIEW_RECTANGLE) @screen.fillRect(*rect) gth = 0 lines = text.split("\n").collect do |line| tw, th = @font32.text_size( line ) gth += th [ line, tw, th ] end x = rect[0] y = rect[1] w = rect[2] h = rect[3] y_offset = y + (h-gth)/2 lines.each do |line, tw, th| write_smooth_text(line, x + (w-tw)/2, y_offset, @font32 ) y_offset += th end @screen.flip if flip end def cached_drawing_valid?(symbol, value) return true if value == @cached_drawing[symbol] @cached_drawing[symbol] = value false end ## # assumes life and mana are in range (0..100) def update_life_and_mana( life, mana ) return if cached_drawing_valid?(:life_and_mana, life.hash ^ mana.hash ) rect = LIFE_MANA_RECTANGLE @screen.fillRect(*rect) @screen.fillRect(rect[0], rect[1], rect[2]*life/100, rect[3]/2, COL_RED) if life.between?(0,100) @screen.fillRect(rect[0], rect[1]+rect[3]/2, rect[2]*mana/100, rect[3]/2, COL_BLUE) if mana.between?(0,100) end def update_inventory( inventory ) # FIXME: return if cached_drawing_valid?(:inventory, inventory.hash ) rect = INVENTORY_RECTANGLE @screen.fillRect(*rect) currx = rect.first curry = rect[1] stepx = SPRITE_WIDTH / 4 inventory.each{|obj| put_sprite(obj, currx, curry ) currx += stepx } end def update_spells( primary, secondary ) return if cached_drawing_valid?(:spells, primary.hash ^ secondary.hash ) rect1 = SPELL_RECTANGLE rect2 = ALT_SPELL_RECTANGLE @screen.fillRect( *rect1 ) put_sprite( primary, *rect1[0,2]) @screen.fillRect( *rect2 ) put_sprite( secondary, *rect2[0,2]) end def update_player( player_sprite ) put_sprite(player_sprite, *PLAYER_SPRITE_POSITION ) end #################################### # Experimental view updating trying # to refactor and separate view logic # from the GameLoop as much as possible. def update_view_rows( center_row ) @curr_view_y = MAZE_VIEW_RECTANGLE[1] VIEW_AREA_MAP_HEIGHT.times{|i| yield i+center_row-VIEW_AREA_MAP_HEIGHT_CENTER @curr_view_y += SPRITE_HEIGHT } end def update_view_columns( center_column ) @curr_view_x = MAZE_VIEW_RECTANGLE[0] VIEW_AREA_MAP_WIDTH.times{|i| yield i+center_column-VIEW_AREA_MAP_WIDTH_CENTER @curr_view_x += SPRITE_WIDTH } end def update_view_background_block( sprite_id ) put_background( sprite_id, @curr_view_x, @curr_view_y ) end def update_view_block( sprite_id ) put_sprite( sprite_id, @curr_view_x, @curr_view_y ) end #################################### # def show_help clear_screen lines = [ ' ---++* Magic Maze Help *++---', 'Arrow keys to move the wizard.', 'Ctrl :- Cast attack spell', 'Alt :- Cast secondary spell', 'X / Z :- Toggle attack spell', 'A / S :- Toggle secondary spell', '', # Failed for RubySDL2.0.1 and Ruby1.9.1-p1 'Esc / Q :- Quit playing', 'F9 / R :- Restart level', # '[F4]: Load game [F5]: Save game', # '[S]: Sound on/off', 'PgUp / PgDn :- Tune Volume', 'Plus / Minus :- Tune Speed (on keypad)', ] y_offset = 0 font = @font16 lines.each{|line| write_smooth_text( line, 5, y_offset, font ) if line.size.nonzero? # Failed for RubySDL2.0.1 and Ruby1.9.1-p1 on empty string. y_offset+= font.height } flip end #################################### # def draw_map( player, line_by_line = true ) map = player.location.map rect = MAZE_VIEW_RECTANGLE @screen.fillRect(*rect) if line_by_line then @screen.flip @screen.fillRect(*rect) end map_zoom_factor = 4 map_block_size = SPRITE_WIDTH / map_zoom_factor map_height = VIEW_AREA_MAP_HEIGHT * map_zoom_factor map_width = VIEW_AREA_MAP_WIDTH * map_zoom_factor (0...map_height).each do |ay| my = ay + player.location.y - map_height/2 draw_y = rect[1] + ay*map_block_size (0...map_width).each do |ax| mx = ax + player.location.x - map_width/2 col = nil map.all_tiles_at( mx, my ) do |background, o, entity, s| col = nil col = COL_LIGHTGRAY if background.blocked? col = COL_YELLOW if entity.kind_of?( DoorTile ) col = COL_RED if entity.kind_of?( Monster ) col = COL_BLUE if entity.kind_of?( Player ) end if col then @screen.fill_rect(rect[0] + ax*map_block_size, draw_y, map_block_size, map_block_size, col) end end # The center. @screen.draw_rect(rect[0] + map_width/2 * map_block_size, rect[1] + map_height/2 * map_block_size, map_block_size, map_block_size, COL_WHITE) flip if line_by_line end end ## # Helper for doing gradual buildup of image. # Draws the same thing twice, once for immediate viewing, # and on the offscreen buffer for next round. # def draw_immediately_twice yield @screen.flip yield end ## # Prepare a large sprite containing the scrolltext # def prepare_scrolltext( text ) font = @font32 textsize = font.text_size( text ) @scrolltext = SDL::Surface.new(SDL::HWSURFACE, #|SDL::SRCCOLORKEY, textsize.first, textsize.last, @screen) @scrolltext.set_palette( SDL::LOGPAL|SDL::PHYSPAL, @sprite_palette, 0 ) @scrolltext.setColorKey( SDL::SRCCOLORKEY || SDL::RLEACCEL ,0) font.drawBlendedUTF8( @scrolltext, text, 0, 0, 255, 255, 255 ) @scrolltext_index = - @xsize end ## # Update the scrolltext area at the bottom of the screen. # def update_scrolltext @screen.fillRect( 0, 200 * SCALE_FACTOR, @xsize, 40 * SCALE_FACTOR, 0 ) SDL.blit_surface( @scrolltext, @scrolltext_index, 0, @xsize, @scrolltext.h, @screen, 0, 200 * SCALE_FACTOR ) @scrolltext_index += 1 * SCALE_FACTOR if @scrolltext_index > @scrolltext.w + @xsize @scrolltext_index = - @xsize end end def setup_rotating_palette( range, screen = nil ) pal = @sprite_palette if screen pal = @background_images[ screen ].get_palette end @rotating_palette = pal[ range ] @rotating_palette_range = range end ## # def rotate_palette # _ENABLED # DISABLED end def rotate_palette_DISABLED pal = @rotating_palette col = pal.shift pal.push col @screen.set_palette( SDL::PHYSPAL|SDL::LOGPAL, pal, @rotating_palette_range.first ) end ## # Prepare menu for rendering. # def setup_menu( entries, chosen = nil) @menu_items = entries max_width = 0 total_height = 0 font = @font32 @menu_items.each do |text| tw, th = font.text_size( text ) max_width = [max_width,tw+16*SCALE_FACTOR].max total_height += th + 4*SCALE_FACTOR end @menu_width = max_width @menu_chosen_item = chosen || @menu_items.first # Truncate if the items can fit on screen. scr_height = 200 * SCALE_FACTOR if total_height > scr_height then @menu_height = scr_height @menu_truncate_size = (@menu_items.size * scr_height / (total_height)).to_i else @menu_height = total_height @menu_truncate_size = false end end ## # This does a generic menu event loop # def choose_from_menu( menu_items = %w{OK Cancel}, input = nil ) setup_menu(menu_items) begin draw_menu menu_event = input ? input.get_menu_item_navigation_event : yield if [:previous_menu_item, :next_menu_item].include?(menu_event) then self.send(menu_event) end end until [:exit_menu, :select_menu_item].include?(menu_event) erase_menu if menu_event == :select_menu_item then return menu_chosen_item else return false end end ## # Draw an updated menu. def draw_menu topx = 160 * SCALE_FACTOR - @menu_width / (2) topy = 120 * SCALE_FACTOR - @menu_height / (2) #TODO: Save the old background. # Handle the case of truncated menu. Not too nice. if @menu_truncate_size then chosen_index = @menu_items.index(@menu_chosen_item) if chosen_index then half_trunc = @menu_truncate_size / 2 first_item = [chosen_index-half_trunc, 0].max if first_item.zero? half_trunc += half_trunc - chosen_index end last_item = [chosen_index+half_trunc, @menu_items.size].min curr_menu_items = @menu_items[first_item..last_item] else curr_menu_items = @menu_items[0..@menu_truncate_size] end else curr_menu_items = @menu_items end @screen.fillRect( topx, topy, @menu_width,@menu_height,0 ) @screen.draw_rect( topx, topy, @menu_width,@menu_height, COL_GRAY ) y_offset = topy font = @font32 curr_menu_items.each do |text| tw, th = font.text_size( text ) color_intensity = 127 if text == @menu_chosen_item then rect = [ topx + 4*SCALE_FACTOR, y_offset + 4*SCALE_FACTOR, @menu_width - 8*SCALE_FACTOR, font.height - 4*SCALE_FACTOR, COL_WHITE ] @screen.draw_rect( *rect ) color_intensity = 255 end write_smooth_text(text, topx + (@menu_width-tw)/2, y_offset + 2*SCALE_FACTOR, font, *[color_intensity]*3 ) y_offset+= font.height + 4*SCALE_FACTOR end flip end attr_reader :menu_chosen_item def previous_menu_item @menu_chosen_item = @menu_items[@menu_items.index(@menu_chosen_item)-1] || @menu_items.last end def next_menu_item @menu_chosen_item = @menu_items[@menu_items.index(@menu_chosen_item)+1] || @menu_items.first end ## # Erase the menu. def erase_menu # TODO: Restore background end end # Graphics end # For testing if $0 == __FILE__ g = MagicMaze::Graphics.new command = ARGV.first case command when 'save_sprites' g.save_old_sprites when 'load_spritemap' g.load_new_sprites pal = g.instance_eval{ @sprite_palette } p pal.class, pal.size pal.each{|line| puts line.each{|i| printf( "%02x ", i) if i.kind_of?(Numeric) } } end end magicmaze-1_4_3_6/magicmaze/magicmaze.rb0000644000175000017500000000166711075711042016756 0ustar kentkent############################################################ # Magic Maze - a simple and low-tech monster-bashing maze game. # Copyright (C) 2004-2008 Kent Dahl # # This game is FREE as in both BEER and SPEECH. # It is available and can be distributed under the terms of # the GPL license (version 2) or alternatively # the dual-licensing terms of Ruby itself. # Please see README.txt and COPYING_GPL.txt for details. ############################################################ require 'magicmaze/game' # necessary for pthreads/sound problem? require 'rbconfig' if RUBY_PLATFORM =~ /linux/ trap('INT','EXIT') # trap('EXIT','EXIT') end # Try to enable translations. begin # raise LoadError # Testing fallback... require 'gettext' rescue LoadError # Dummy fall-through to english. module GetText def bindtextdomain(s) end def _(s) s end end end # For translation... include GetText bindtextdomain("magicmaze") magicmaze-1_4_3_6/magicmaze/images.rb0000644000175000017500000001020311104655653016260 0ustar kentkent############################################################ # Magic Maze - a simple and low-tech monster-bashing maze game. # Copyright (C) 2004-2008 Kent Dahl # # This game is FREE as in both BEER and SPEECH. # It is available and can be distributed under the terms of # the GPL license (version 2) or alternatively # the dual-licensing terms of Ruby itself. # Please see README.txt and COPYING_GPL.txt for details. ############################################################ require 'sdl' require 'magicmaze/tile' module MagicMaze ################################################ # Generic GFX stuff. # module Images ## # Slow, but blocky and non-SGE scaling of image. # def linear_scale_image( source_image, sx,sy, scaled_image, factor = 1 ) sw = scaled_image.w / factor sh = scaled_image.h / factor source_image.lock scaled_image.lock sh.times do |sdy| sw.times do |sdx| pixel = source_image.get_pixel(sx+sdx, sy+sdy) scaled_image.fill_rect(sdx*factor, sdy*factor, factor, factor, pixel) end end source_image.unlock scaled_image.unlock scaled_image end ###################################################### # general graphics methods ## put up a background screen def put_screen( screen, center = false, flip = true ) @screen.fillRect(0,0,@xsize,@ysize,0) image = @background_images[ screen ] x,y=0,0 if center x = (@xsize - image.w)/2 y = (@ysize - image.h)/2 end @screen.put( image, x,y ) @screen.flip if flip @cached_drawing.clear end def put_background( sprite, x, y ) put_sprite( sprite, x, y ) end def put_sprite( sprite, x, y ) image = @sprite_images[sprite] @screen.put( image, x, y ) if image end def flip @screen.flip end def toogle_fullscreen @screen.toggle_fullscreen end def write_text( text, x, y, font = @font16 ) begin font.drawSolidUTF8(@screen,text,x,y,255,255,255) rescue SDL::Error # Original Asus EEE distro fails here... write_smooth_text(text,x,y,font) end end def write_smooth_text( text, x, y, font = @font16,r=255,g=255,b=255 ) font.drawBlendedUTF8(@screen, text, x,y, r,g,b) # Failed for RubySDL2.0.1 and Ruby1.9.1-p1 on multiline strings. end def set_palette( pal, start_color = 0 ) pal ||= @sprite_palette @screen.set_palette( SDL::PHYSPAL, pal, start_color ) end FADE_DURATION = 16 def fade_out( tr = 0, tg = 0, tb = 0, fade_duration = FADE_DURATION ) mypal = @sprite_palette.dup @old_palette = mypal range = fade_duration (0...range).each {|i| factor = (range-i).to_f / range set_palette( mypal.map {|r,g,b| [ ( r - tr ) * factor + tr, ( g - tg ) * factor + tg, ( b - tb ) * factor + tb ] } ) yield i, range if block_given? } @fade_color = [ tr, tg, tb ] end def fade_in( fade_duration = FADE_DURATION ) mypal = @old_palette || @sprite_palette tr, tg, tb = *(@fade_color || [0,0,0]) range = fade_duration (0..range).each {|i| factor = i.to_f / range set_palette( mypal.map {|r,g,b| [ ( r - tr ) * factor + tr, ( g - tg ) * factor + tg, ( b - tb ) * factor + tb ] } ) yield i, range if block_given? } set_palette( mypal ) end def fade_in_and_out( sleep_ms = 500, &block ) block.call fade_in {} #( &block ) sleep_delay( sleep_ms ) fade_out {} #( &block ) end def clear_screen @screen.fillRect( 0, 0, @xsize, @ysize, 0 ) end def sleep_delay( sleep_ms = 1 ) SDL.delay( sleep_ms ) end ## # Add delay after action to smooth ticks. # Don't delay if it took too long. # def time_synchronized( game_delay = 50 ) time_start = SDL.get_ticks yield # Do actual work. time_end = SDL.get_ticks delay = game_delay + time_start - time_end # @delay_stats << delay # if debugging... sleep_delay(delay) if delay > 0 end end # Images end magicmaze-1_4_3_6/magicmaze/game.rb0000644000175000017500000002150411102417374015724 0ustar kentkent############################################################ # Magic Maze - a simple and low-tech monster-bashing maze game. # Copyright (C) 2004-2008 Kent Dahl # # This game is FREE as in both BEER and SPEECH. # It is available and can be distributed under the terms of # the GPL license (version 2) or alternatively # the dual-licensing terms of Ruby itself. # Please see README.txt and COPYING_GPL.txt for details. ############################################################ require 'magicmaze/gameloop' require 'magicmaze/graphics' require 'magicmaze/input' require 'magicmaze/sound' require 'yaml' ################################################ # module MagicMaze ################################################ # class Game NUM_LEVELS = 10 attr_reader :graphics, :sound def initialize( options ) @options = options init_graphics init_sound init_input @savedir = (@options[:savedir] || (ENV.include?("HOME") ? (ENV['HOME'] + '/.magicmaze') : nil) || "data" ) @savegame_filename = @savedir + "/progress.dat" @loadgame = (options[:loadgame] || false) @quit = false end def init_graphics @graphics = Graphics.get_graphics( @options ) end def init_sound @sound = if @options[:sound] then begin Sound.get_sound(@options) rescue SDL::Error => sound_error puts "ERROR: Could not initialize sound! Proceeding muted." NoSound.new end else NoSound.new end end def init_input if @options[:joystick] then Input::Control.init_joystick( @options[:joystick] ) end @title_input = Input::Control.new( self, :titlescreen ) end def destroy @graphics = MagicMaze::Graphics.shutdown_graphics end def exit destroy Kernel.exit end def escape puts "Escape" @state = :stopped_game end def exit_game puts "Exit game" @quit = true @state = :exiting_game end def toogle_fullscreen @graphics.toogle_fullscreen end def test_fade # THIS IS FOR TESTING! @graphics.fade_out @graphics.put_screen( :titlescreen, true ) @graphics.fade_out put_titlescreen @graphics.fade_in end def test_endgame show_end_game end def test_helpscreen @graphics.show_help @title_input.get_key_press put_titlescreen end def put_titlescreen @graphics.put_screen( :titlescreen, true ) end def title_loop puts "Title loop..." @graphics.fade_out put_titlescreen @graphics.fade_in @state = :title_loop while @state == :title_loop @title_input.check_input end end def loop puts "Starting..." load_checkpoints while not @quit title_loop end @graphics.fade_out save_checkpoints puts "Exiting..." destroy puts "Thanks for playing Magic Maze. Bye bye." end def start_game( level = nil, player_status = nil ) pregame_preparation start_level = level || @options[:start_level] || 1 if @loadgame && ! @saved_checkpoints.empty? then start_level, player_status = @saved_checkpoints.max end @current_game = GameLoop.new( self, start_level, player_status ) @current_game.start show_end_game if @state == :endgame @state = :stopped_game end def start_training_game( start_level = 1 ) pregame_preparation @current_game = GameLoop.new( self, start_level, :training ) @current_game.start @state = :stopped_game end def start_replay_level_game( start_level = 1 ) pregame_preparation player_status = @saved_checkpoints[ start_level ] @current_game = GameLoop.new( self, start_level, player_status ) @current_game.start @state = :stopped_game end # The fade before starting the game. def pregame_preparation @graphics.put_screen( :titlescreen, true ) @graphics.fade_out @state = :starting_game end def open_game_menu menu_items = [ "Start new game", "Training", ] if not @saved_checkpoints.empty? then menu_items.unshift("Continue game") menu_items.push("Replay level") if @saved_checkpoints.size>1 # menu_items.push("Map Editor") end menu_items.push "Quit Magic Maze" case choose_from_menu( menu_items ) when /Continue/, /Load/ select_game_checkpoint when /New/, /Start/ start_game when /Exit/, /Quit/ exit_game when /Training/ open_training_menu when /Replay/ open_replay_menu when /Editor/i start_map_editor end put_titlescreen end def open_training_menu menu_items = (1..NUM_LEVELS).collect{|i| "Level #{i}" } menu_items.push "Back" case choose_from_menu( menu_items ) when /(\d+)/ start_training_game( $1.to_i ) when /Back/, /Exit/ # Just fall out of the loop end put_titlescreen end def open_replay_menu menu_items = @saved_checkpoints.keys.sort.collect{ |i,j| "Replay level #{i}" } menu_items.push "Back" case choose_from_menu( menu_items ) when /(\d+)/ start_replay_level_game( $1.to_i ) when /Back/, /Exit/ # Just fall out of the loop end put_titlescreen end def start_map_editor require 'magicmaze/mapeditor' editor = MagicMaze::MapEditor.new(self, @savedir) editor.start put_titlescreen end ## # This does a generic menu event loop # def choose_from_menu( menu_items = %w{OK Cancel} ) @graphics.choose_from_menu( menu_items, @title_input ) end END_GAME_TEXT = "LuciPer escapes into the dimension " + "bettter known as...." + " HELL ... " + "The world is once again safe... " + " FOR NOW! " + "Thank you for playing Magic Maze. " + "Hope you enjoyed it! " + " ..Good Bye.. " + "" def show_end_game @graphics.setup_rotating_palette( 193..255, :endscreen ) @graphics.put_screen( :endscreen) @graphics.fade_in do @graphics.sleep_delay(10) @graphics.rotate_palette end puts "Looping end game." loop_active = true input = Input::BreakCallback.make_control{ loop_active = false } @graphics.prepare_scrolltext( END_GAME_TEXT ) # Cycle some of the colours. while loop_active do @graphics.sleep_delay(10) @graphics.update_scrolltext @graphics.rotate_palette @graphics.flip input.check_input end @sound.play_sound( :zap ) puts "Fade out end game." @graphics.put_screen( :endscreen ) @graphics.fade_out do @graphics.sleep_delay(10) @graphics.rotate_palette end @graphics.clear_screen @graphics.flip @graphics.set_palette( nil ) @state = :stopped_game end def select_game_checkpoint level, status = @saved_checkpoints.max start_game( level, status ) end ## # Check whether we have hit a "special" level, such as the end. # def check_level( level ) if level > NUM_LEVELS @state = :endgame false else true end end ## # Update the player checkpoint status for this level # if the score is higher than previous value. # def update_checkpoint( level, status ) checkpoint = @saved_checkpoints[ level ] if (not checkpoint) || (checkpoint[:score] <= status[:score]) puts "Updating checkpoint for level #{level}." @saved_checkpoints[ level ] = status end end def load_checkpoints checkpoints = Hash.new begin File.open(@savegame_filename,'r') do|file| obj = YAML.load( file ) checkpoints = obj if obj.kind_of? Hash end rescue Exception => e puts "Error reading checkpoints: " + e.inspect end @saved_checkpoints = checkpoints end ## # Save the list of checkpoints to file. # I.e. the savegames. def save_checkpoints failures = 0 # To avoid loops begin File.open(@savegame_filename,'w') do|file| puts "Saving checkpoints..." file.puts @saved_checkpoints.to_yaml end rescue Errno::ENOENT => e puts "Error saving checkpoints: " + e.inspect basedir = File.dirname(@savegame_filename) if Dir[basedir].empty? and failures.zero? then puts "Directory seems missing, trying to create: #{basedir}" Dir.mkdir(basedir) puts "Retry saving checkpoints..." failures+=1 retry end rescue Exception => e puts "Error saving checkpoints: " + e.inspect failures+=1 end end end # Game end # MagicMaze magicmaze-1_4_3_6/magicmaze/test_filemap.rb0000644000175000017500000000073411104661314017466 0ustar kentkentrequire 'test/unit' require 'magicmaze/filemap' class TestFileMap < Test::Unit::TestCase def setup end def test_loading_filemaps (1..10).each do|level| filename = sprintf "data/maps/mm_map.%03d", level filemap = MagicMaze::FileMap.new( filename ) filemap.load_map assert( filemap ) gamemap = filemap.to_gamemap filemap.close assert( gamemap ) assert( filemap.title.size.nonzero? ) print "." end end end magicmaze-1_4_3_6/magicmaze/test_sound.rb0000644000175000017500000000047211075712475017214 0ustar kentkentrequire 'test/unit' require 'magicmaze/magicmaze' require 'magicmaze/sound' class TestSound < Test::Unit::TestCase def setup @s = MagicMaze::Sound.get_sound end def test_initialize assert_not_nil( @s.instance_eval{ @sounds } ) assert_equal(4, @s.instance_eval{ @sounds.size } ) end end magicmaze-1_4_3_6/magicmaze/test_movement.rb0000644000175000017500000000171210215046741017703 0ustar kentkentrequire 'magicmaze/movement' require 'test/unit' class TestDirection < Test::Unit::TestCase Direction = MagicMaze::Direction def setup @dir = Direction.new end def test_constructor (Direction::MIN..Direction::MAX).each{|i| assert_equal( i, Direction.new( i ).direction ) } [ Direction::MIN-2, Direction::MIN-1, Direction::MAX+1, Direction::MAX+2 ].each{|i| assert_raises( ArgumentError ){ Direction::new( i ) } } end def test_rotate dirs = [ Direction::EAST, Direction::SOUTH, Direction::WEST, Direction::NORTH, ] * 4 dirs.each{|i| @dir.rotate_clockwise assert_equal( i, @dir ) } end def test_rotate_counter dirs = [ Direction::WEST, Direction::SOUTH, Direction::EAST, Direction::NORTH, ] * 4 dirs.each{|i| @dir.rotate_counterclockwise assert_equal( i, @dir ) } end end magicmaze-1_4_3_6/magicmaze/test_game.rb0000644000175000017500000000212211075716000016753 0ustar kentkentrequire 'test/unit' require 'magicmaze/game' class TestMagicMazeGame < Test::Unit::TestCase class Dummy attr_reader :options def initialize(options) @options = options end end class DummyGraphics < Dummy ; end class DummySound < Dummy ; end class MagicMazeGame < MagicMaze::Game def init_graphics @graphics = DummyGraphics.new( @options ) end def init_graphics @graphics = DummyGraphics.new( @options ) end end def setup @default_options = { :sound=>true, } @game = MagicMazeGame.new( @default_options ) end def test_initialize assert_not_nil( @game.graphics ) assert_not_nil( @game.sound ) assert_equal( MagicMaze::Sound, @game.sound.class ) end def disabled_test_initialize_sound game = MagicMazeGame.new({:sound=>false}) assert_equal( MagicMaze::NoSound, game.sound.class ) game = MagicMazeGame.new({:sound=>true}) assert_equal( MagicMaze::SDLSound, game.sound.class ) game = MagicMazeGame.new(Hash.new) assert_equal( MagicMaze::NoSound, game.sound.class ) end end magicmaze-1_4_3_6/magicmaze/gameloop.rb0000644000175000017500000002075111104661314016616 0ustar kentkent############################################################ # Magic Maze - a simple and low-tech monster-bashing maze game. # Copyright (C) 2004-2008 Kent Dahl # # This game is FREE as in both BEER and SPEECH. # It is available and can be distributed under the terms of # the GPL license (version 2) or alternatively # the dual-licensing terms of Ruby itself. # Please see README.txt and COPYING_GPL.txt for details. ############################################################ require 'magicmaze/filemap' require 'magicmaze/movement' require 'magicmaze/player' require 'magicmaze/graphics' module MagicMaze class GameLoop attr_reader :graphics, :sound, :input def initialize( game_config, level = 1, player_status = nil ) @game_config = game_config @graphics = game_config.graphics @sound = game_config.sound @input = @game_input = Input::Control.new( self, :in_game ) @game_delay = 50 @level = level if player_status == :training then puts "Entering training mode..." @training_mode = true player_status = nil end @restart_status = player_status @map = nil @player = nil end def load_map( level = 1, saved = nil ) puts "Loading level: %s" % level filename = level filename = sprintf("data/maps/mm_map.%03d",level ) if level.kind_of? Numeric filemap = MagicMaze::FileMap.new( filename ) @map_title = filemap.title yield level, @map_title @map.purge if @map # Clean up old map, if any. @level = level @map = filemap.to_gamemap should_reset = @player || @restart_status @player = Player.new( @map, self ) unless @player @player.reset( @map, @restart_status ) if should_reset @restart_status = nil unless @training_mode then @saved_player_status = @player.get_saved @game_config.update_checkpoint( level, @saved_player_status ) end GC.start end def move_up turn_and_move( Direction::NORTH ) end def move_down turn_and_move( Direction::SOUTH ) end def move_left turn_and_move( Direction::WEST ) end def move_right turn_and_move( Direction::EAST ) end def turn_and_move( dir ) @movement |= (1<>=1 } end def old_turn_and_move( dir ) if @player.direction.value == dir @player.add_impulse(:move_forward) else @player.add_impulse(:turn_around, dir ) end end ## # Actions def toogle_fullscreen @graphics.toogle_fullscreen end ## # Refactored block form for all actions that require verification. # def really_do?( message ) @graphics.show_long_message( message + "\n" + _("[Y/N]") ) if @game_input.get_yes_no_answer yield end end def escape really_do?(_("Quit game?")) do @state = :stopped_game end end def save_game @game_config.save_checkpoints end def pause_game @graphics.show_long_message( _("Paused!\n\nPress any key\nto resume game.") ) @game_input.get_key_press end def increase_volume @sound.change_volume( 1 ) @sound.play_sound( :bonus ) end def decrease_volume @sound.change_volume( -1 ) @sound.play_sound( :bonus ) end def increase_speed @game_delay -= 5 if @game_delay > 10 puts "Game delay: #@game_delay" end def decrease_speed @game_delay += 5 if @game_delay < 100 puts "Game delay: #@game_delay" end def helpscreen @graphics.show_help @game_input.get_key_press @graphics.put_screen( :background, false, false ) end def restart_level really_do?(_("Restart level?")) do @state = :restart_level end end def next_primary_spell @player.spellbook.page_spell( :primary ) end def previous_primary_spell @player.spellbook.page_spell( :primary, -1) end def next_secondary_spell @player.spellbook.page_spell( :secondary ) end def previous_secondary_spell @player.spellbook.page_spell( :secondary, -1) end def cast_primary_spell primary_spell.cast_spell( @player ) end def cast_alternative_spell secondary_spell.cast_spell( @player ) end ## # Getters def primary_spell @player.spellbook.spell( :primary ) end def secondary_spell @player.spellbook.spell( :secondary ) end def get_score @player.score end def get_inventory @player.inventory end def get_life @player.life end def get_mana @player.mana end def game_loop puts "Game loop" # Fade in the background @graphics.put_screen( :background, false, false ) draw_now @graphics.fade_in @state = :game_loop while @state == :game_loop @graphics.time_synchronized(@game_delay) do draw_now @movement = 0 @game_input.check_input calc_movement @state = catch( :state_change ) do alive = @player.action_tick game_data = { :player_location => @player.location } @map.active_entities.each_tick( game_data ) @state end end end # Fade out. @graphics.put_screen( :background, false, false ) draw_now puts "Game loop fade out..." @graphics.fade_out do @graphics.sleep_delay(1) end # Clear screen for returning to the title loop @graphics.clear_screen @graphics.flip @graphics.clear_screen @state end # loop protected :game_loop def start begin @graphics.time_synchronized(1000) do load_map( @level ) do |level, map_title | # Loading message as soon as title has been loaded. loading_message = _("Entering level %s") % level.to_s + "\n" + _(map_title) + "\n"+ _("Get ready!") @graphics.clear_screen @graphics.show_long_message(loading_message, false, :fullscreen ) @graphics.fade_in end end @graphics.fade_out game_loop case @state when :next_level @level += 1 unless @game_config.check_level( @level ) @state = :endgame end when :restart_level @restart_status = @saved_player_status when :player_died draw_now puts "Score: #{@player.score}" sleep 1 @restart_status = @saved_player_status end end while [:next_level,:restart_level,:player_died].include? @state end def follow_entity(leader) # puts "Following #{leader}..." time_synchronized_drawing do draw(leader.location) end return true end def time_synchronized_drawing @graphics.time_synchronized(@game_delay) do yield @graphics.flip end end def draw_now draw ; @graphics.flip end def draw(where=@player.location) draw_maze( where.x, where.y ) # @graphics.update_player( @player.direction.value ) draw_hud end def draw_hud @graphics.update_spells(primary_spell.sprite_id, secondary_spell.sprite_id ) @graphics.write_score( get_score ) @graphics.update_life_and_mana( get_life, get_mana ) @graphics.update_inventory( get_inventory ) end def draw_maze( curr_x, curr_y ) @graphics.update_view_rows(curr_y)do |current_y| @graphics.update_view_columns(curr_x)do |current_x| @map.each_tile_at( current_x, current_y ) do |tile| @graphics.update_view_block( tile.sprite_id ) if tile end end end end def alternative_inner_drawing @map.all_tiles_at( current_x, current_y ) do |background, object, entity, spiritual| # background = @map.background.get(current_x,current_y) @graphics.update_view_background_block( background.sprite_id ) # object = @map.object.get(current_x,current_y) @graphics.update_view_block( object.sprite_id ) if object # entity = @map.entity.get(current_x,current_y) @graphics.update_view_block( entity.sprite_id ) if entity end end end # GameLoop end # MagicMaze magicmaze-1_4_3_6/magicmaze/filemap.rb0000644000175000017500000001543311104661313016430 0ustar kentkent############################################################ # Magic Maze - a simple and low-tech monster-bashing maze game. # Copyright (C) 2004-2008 Kent Dahl # # This game is FREE as in both BEER and SPEECH. # It is available and can be distributed under the terms of # the GPL license (version 2) or alternatively # the dual-licensing terms of Ruby itself. # Please see README.txt and COPYING_GPL.txt for details. ############################################################ require 'magicmaze/map' module MagicMaze ## # Old style filemap. # Basically just loads in the binary data as 8-byte strings. class FileMap MAP_HEADER_SIZE = 256 MAP_SIZE = 32768 MAP_FILE_SIGNATURE = 'MagicMazeMap' MAP_ROW_SIZE = 256 MONSTER_NUMBER_BEGIN = 40 MONSTER_NUMBER_END = MONSTER_NUMBER_BEGIN + 20 - 1 EMPTY_ROW = [] TILE_BITS = 127 BLOCKED_BIT = 128 attr_reader :startx, :starty, :title ## # Open an old-style filemap for Magic Maze. # Filename must point to a valid map file. def initialize( filename, monster_maker = nil ) @file = File.open(filename, 'rb') header_data = @file.read(MAP_HEADER_SIZE) unless MAP_FILE_SIGNATURE == header_data[0,MAP_FILE_SIGNATURE.size] raise ArgumentError, "Map file is invalid: "+filename end extract_from_header( header_data ) end def load_map @real_checksum = 0 @map_rows = [] begin row = @file.read(MAP_ROW_SIZE) extract_from_row( row ) if row yield row if block_given? end while row @real_checksum &= 0xFFFF unless @checksum == @real_checksum raise ArgumentError, "Map file checksum failed: "+ "Excpected #@checksum, found #@real_checksum." end end def close @file.close if @file @file = nil end def convert_string_to_bytes( str ) if str.respond_to?(:bytes) then str.bytes.collect{|i| i } # Ruby 1.9 else str # Ruby 1.8 end end ## # Extract various data from the header part of the map. def extract_from_header( header_data_str ) header_data = convert_string_to_bytes( header_data_str ) @checksum = header_data[16] + (header_data[17]<<8) @startx = header_data[24] @starty = header_data[25] @default_wall_tile = header_data[30] @last_level = header_data[32] & BLOCKED_BIT == BLOCKED_BIT @title = "" index = 128 begin char = header_data[index] char = nil if char<32 or index>166 @title << char if char index += 1 end while char @title.chop end private :extract_from_header ## # Extract map structure from rows. def extract_from_row( row_data ) # calculate checksum row_data.each_byte{|byte| @real_checksum += byte } # what if the row is less than 256 bytes? Pad it. unless row_data.size >= MAP_ROW_SIZE row_data << "\000"*(MAP_ROW_SIZE-row_data.size) end # store the raw data @map_rows << row_data end private :extract_from_row ## # remove monsters from the map data and add them to the live # monster list. def extract_monsters( monster_maker ) each_row{|row, y| # @map_rows.each_with_index{|row,y| each_column{|x| # (0...MAP_ROW_SIZE/2).each{|x| object = row[x*2+1] puts "#{x}, #{y}" unless object if object >= MONSTER_NUMBER_BEGIN and object <= MONSTER_NUMBER_END monster_maker.add_monster( object, x, y ) row[x*2+1]=0 end } } end # Iterate over every row (or y value) def each_row( &block ) @map_rows.each_with_index{|row,y| yield row, y } end def each_column( &block ) (0...MAP_ROW_SIZE/2).each{|x| yield x } end ## # return background code for the position given. # If the most significant bit is set, it is blocked. # If the coordinate is outside the map, a default block is returned. def get_background_data( x, y ) row = convert_string_to_bytes(@map_rows[y]) row ||= EMPTY_ROW index = x*2 if (index<0||index>=row.size) then @default_wall_tile else row[index] end end ## # return background tile, without the blocked bit. def get_background_tile( x, y ) get_background_data( x, y ) & TILE_BITS end ## # return object code for the position given. def get_object( x, y ) row = convert_string_to_bytes(@map_rows[y]) object = row[x*2+1] end alias :get_object_data :get_object ## # place an object. def set_object( x, y, object ) @map_rows[y][x*2+1] = object end ## # is that position blocked? def is_blocked?( x, y ) get_background_data( x, y ) & BLOCKED_BIT == BLOCKED_BIT end def to_gamemap load_map if @map_rows.nil? and @file close # close file, no more reading. @tilehash = { :object=>DEFAULT_TILES_ID_LOOKUP.dup, :background=>{} } wall_id = @default_wall_tile wall_id = 10 if wall_id==0 background_tile = BackgroundTile.new(0, false) wall_tile = BackgroundTile.new(wall_id, true) @tilehash[:background][0] = background_tile @tilehash[:background][wall_id|BLOCKED_BIT] = wall_tile gamemap = GameMap.new(background_tile, wall_tile, startx, starty) each_row{|row, y| each_column{|x| # background tiles. tile_id = self.get_background_data( x, y ) # Change the plain empty background tile occasionally. Helps with large open spaces. if tile_id == 0 and x&2==2 and y&2==2 then tile_id = 1 end tile_number = tile_id&TILE_BITS tile_blocked = tile_id&BLOCKED_BIT==BLOCKED_BIT tile = fetch_or_create_tile( tile_id, :background ) {|tile_id| BackgroundTile.new( tile_number, tile_blocked ) } # Just for testing... if tile.blocked? and !tile_blocked puts "ERROR with tile at #{x}, #{y}" p @tilehash[:background][10] p @tilehash[:background][138] p tile end gamemap.set_background( x, y, tile ) # object tiles tile_id = self.get_object_data( x, y ) tile = fetch_or_create_tile( tile_id, :object ) {|tile_id| ObjectTile.new( tile_id ) } gamemap.set_any_object( x, y, tile ) if tile_id>0 } } gamemap end # to_gamemap ## # tries to fetch similar tile from the tilehash, # constructs new using block if not. def fetch_or_create_tile( tile_id, hashtype) tilehash = @tilehash[hashtype] tile = tilehash[ tile_id ] unless tile tile = yield tile_id tilehash[tile_id] = tile end tile end end # FileMap end magicmaze-1_4_3_6/README.TXT0000644000175000017500000001241611041045335014065 0ustar kentkent ---+*+--- -----------++*++----------- --------------------+++***+++---------------------- M A G I C -+*+- M A Z E --------------------+++***+++---------------------- -----------++*++----------- ---+*+--- Copyright by Kent "MenThal" Dahl (1995-1996) Version 1.2 (1999) Version 1.22 (2004) Version 1.4.1 (2008) Version 1.4.3 This game is FREE as in both BEER and SPEECH. (Ruby and/or GPL licence) E-mail me at: kentdapvvorg ___________________________________________________ *** Description *** Magic Maze is a simple and low-tech monster-bashing maze game. It was originally inspired by playing Gauntlet II on the Atari ST. ___________________________________________________ *** Magic Maze and a Half *** The 1.4.x (and subsequent 1.5.x) versions of Magic Maze is dubbed "Magic Maze and a Half", and is a port of MM to the language Ruby using SDL. It does not aim to introduce major new gameplay changes, but some upgrades and improvements will rear their heads. Hopefully there will be a playable version by the time of the 10 year anniversary of the development start of the original Turbo Pascal version, which began in November 1994. ___________________________________________________ *** Magic Maze: Two Tunnels *** Please forgive the poor Lord of the Rings pun. The 1.9.x and subsequent 2.x versions of Magic Maze is dubbed "MM: Two Tunnels" and is a more long-term plan to change gameplay more drastically. This is the experimental playground I'm setting up for myself, and is less likely to show up this side of the Apocolypse. ___________________________________________________ *** Controls *** * Title screen * Space / Return - start playing Esc / Q - quit game F4 - load savegame * In-game * Arrow keys - movement of the little blue wizard. Ctrl - cast missile spell (not implemented yet) Space - cast secondary spell (also "Alt" key) Z and X - leaf through missile spells in book A and S - leaf through secondary spells in book Esc / Q - exit game F1 / H - help F9 / R - restart level F12 - toggle fullscreen PageUp/Dn - tune volume Plus/Minus - tune speed (on numeric keypad) ___________________________________________________ *** Command-line usage *** Start Magic Maze by executing: ruby mm.rb The following command-line options are available: --nosound Disables sound --level [#] Assign a start level (1-10) --joystick [#] Enable joystick support. --help Show command line options --volume Set volume (1-10) --fullscreen Start in fullscreen mode --scale Scale the graphics and resolution up (1-5) --savedir Directory to put savegame. --loadgame Automatically load the savegame. ___________________________________________________ *** Requirements *** * Ruby 1.8 (or higher) - http://www.ruby-lang.org/ * SDL, SDL_image, SDL_mixer (version 1.2 or higher?) - http://www.libsdl.org/ * Ruby-SDL 1.3.x (or higher) - http://www.kmc.gr.jp/~ohai/rubysdl.en.html ___________________________________________________ *** Web-site *** Magic Maze 1.4.x: - http://magicmaze.rubyforge.org/ Magic Maze 1.2x: - http://www.bigfoot.com/~MenThal/coding/mmaze/mmaze.html ___________________________________________________ *** Credits *** Idea, design & coding: MenThal (Kent Dahl) Graphics: MenThal Level design: Daniel Dahl MenThal Game testing: Per Ejnar Thomsen (original) Daniel Dahl (original and Ruby port) Randi Roervik (Ruby port) Other: - Free font found at: http://www.squaregear.net/fonts/ ___________________________________________________ *** License and redistribution *** This game is FREE as in both BEER and SPEECH. It is available and can be distributed under the terms of the GPL license (version 2) or alternatively the dual-licensing terms of Ruby itself. See COPYING_GPL.txt for details and below cookie-cutter blurb: Magic Maze - a simple and low-tech monster-bashing maze game. Copyright (C) 2004-2008 Kent Dahl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA For the Ruby dual-licensing alternative, see the Ruby distribution. http://www.ruby-lang.org/en/LICENSE.txt For avoidance of doubt the license text in Ruby version 1.8.7 is considered the authorative version as far as Magic Maze is concerned, in the off-chance that the Ruby license changes in the future. ___________________________________________________ ___________________________________________________ magicmaze-1_4_3_6/data/0000755000175000017500000000000011177247754013457 5ustar kentkentmagicmaze-1_4_3_6/data/gfx/0000755000175000017500000000000011177247754014243 5ustar kentkentmagicmaze-1_4_3_6/data/gfx/end.pcx0000644000175000017500000003720510134226671015517 0ustar kentkent ?Ç€à@P`p€Œœ¬¼ÌÜüüüü,,ü<<@€àxxü„„ü””ü¤¤ü°üÀÀüÐÐüààüüüüèÜøàÔôÜÈôÔÀð̸ìȰèÀ¤ä¸œà°”àÿÿÿÿÿÅÿÿÿÿÿÅÂÿÿÿÿÿÿÿÿÿÿÂÿÁÂÿÿÿÿÿÿÿÿÿÿÂÿÁÂÿÿÿÿÿÿÿÿÿÿÂÿÁÂÄÿÿþÿþÿþÿþùþÄÿÁÂÄÿÿþÿþÿþÿþùþÄÿÁÂÄÿÿþÿþÿþÿþùþÄÿÁÂÄÿÅþÿýÿýÿýÿýïýÅþÄÿÁÂÄÿÅþÿýÿýÿýÿýïýÅþÄÿÁÂÄÿÅþÿýÿýÿýÿýïýÅþÄÿÁÂÄÿÅþÅýÿüÿüÿüÿüåüÅýÅþÄÿÁÂÄÿÅþÅýÿüÿüÿüÿüåüÅýÅþÄÿÁÂÄÿÅþÅýÿüÿüÿüÿüåüÅýÅþÄÿÁÂÄÿÅþÅýÅüÿûÿûÿûÿûÛûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÿûÿûÿûÿûÛûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÿûÿûÿûÿûÛûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÿúÿúÿúÿúÑúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÿúÿúÿúÿúÑúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÿúÿúÿúÿúÑúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÿù÷ùÍÿùÿùÂùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÿùöùÍ ÆÿùûùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÿùôùÂÔ ÂÿùùùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÿøîøØ ÿøóøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÿøíøÚ ÂÿøñøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÿøëøÂÝ ÿøðøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÿ÷å÷à ÿ÷ê÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÿ÷ä÷á ÿ÷ê÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÿ÷ä÷â ÿ÷é÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÿ÷ã÷ã ÿ÷é÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÿöÞöÈ Û ÿöãöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÿöÝöÉ ÂÚ ÿöãöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÿöÝöÉ ÃÚ ÿöâöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷Åöÿõ×õÉ ÅÙ ÿõÝõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷Åöÿõ×õÈ ÈØ ÿõÜõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÿõÖõÈ ÌÕ ÿõÜõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÿôÑôÇ ÐÓ ÿôÖôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÿôÐôÇ ÒÒ ÿôÖôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÿôÐôÆ ÆÅ=ÊÐ ÿôÖôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÿóËóÅ ÆÇ<ÈÃ<Ï ÿóÐóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÿóÊóÆ ÆÇ;<Æ<Ä;Î ÿóÐóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÿóÊóÅ Î;Æ;ÇË ÿóÐóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÿòÅòÅ ÉÂÊÂÃÊ ÿòËòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÿòÅòÅ ÊÂÈÂÄÊ ÿòËòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÿòÅòÅ Ñ6ÌÊ ÿòËòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòþñÆ Ñ6ÍÊ ÿñÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòþñÆ ÐÂ67ÌÊ ÿñÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòþñÆ ÐÂ67<ËÊ ÿñÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñùðÅ ÎÃ;Â67Ä<ÈÊ ÿðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñùðÅ ÊÄ;Ã:Â67Â<Ä:Ã9ÃÊ ÿðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñøðÅ Ê;Æ:5Â468Å9Ã8ÃÊ ÿðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðóïÅ È;Ä:Ä95Â468Â9Ç7ÃÊ ùïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðóïÅ È:Å9Ã7Ã4Â6Ä7Å56ÃÉ ùïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðñïÂÆ ÇÂ9Å7Ä5Â46Å7Æ56ÂÉ ùïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅððïÇ ÇÂ9Ì5Â7Ê56ÂÊ ÷ïÃÃðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÂñÃÅðÅïêîÈ Ç9×5Â34ÂË ðîÆ ÃðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÂñ ÆÄïèîÂÉ Ç9Ç5ÍÅ34ÂÌ ÂáîÍÈ ÃðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÂñÈ ÍÞîË ÈÃ5Ã3ÏÄ34ÂÎ ÊîÖÕ ÃðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÂñÕ ÖÆíÂÌ  ÈÅ3Í2Ä34ÃÎ Ëë ÃðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÂñë ÇÍ à ÈÒ3Â4ÅË Âö ÃðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÂñò ÂÐ ÉÂ3Ì2Â4ÇÉ Âø ÃðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÂñô ÂÏ ËÊ2È È ú ÃðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÂñö ÂÐ ËÅ2ÈÊ Âû ÃðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÂñø Ò ÓË ý ÃðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÂñù ÂÒ ÏË Âþ ÃðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÂñû ÂÑ ÌË Âÿ ÄðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÃñü ÂÐ ÊË ÿ  ÄðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÃñþ Ñ ÇÊ Âÿ à ÄðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÃñÿ ÂÐ ÄË ÿ Å ÄðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÃñÿ  ÂÏ ÂË ÿ Æ ÄðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÃñÿ Ä ÂÍ Ê Âÿ Ç ÄðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÃñÿ Æ Ì É ÿ É ÄðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÃñÿ Ç Ë È ÿ Ê ÄðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÃñÿ È Ê Ç ÿ Ë ÄðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÃñÿ É É Æ ÿ Ì ÄðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÃñÿ Ê È Æ ÿ Ì ÄðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÃñÿ Ë Ç Å ÿ Í ÄðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÃñÿ Ì Æ Ä ÿ Î ÄðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÃñÿ Í Å Ä ÿ Î ÄðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÃñÿ Í Ä Ä ÿ Ï ÄðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÃñÿ  ÄÈ à Ä ÿ Ï ÄðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÃñÿ ÄÇ à à ÿ Ð ÄðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÃñÿ  ÂÉ  à ÿ Ð ÄðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÃñÿ  ÂÉ   ÿ Ñ ÄðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÃñÿ  ÂÊ   í Äß ÄðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÃñß ÄÞ ÂÊ   é ÅÄéÄÛ ÄðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÃñÛ ÄÄêÅÙ ÂË Â æ ÃÅèÅéÃêÄÖ ÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÄñÖ ÄÄëÅêÄéÃÓ  Â È Ãæ ÃçÅèÅéÅêÂëÃÓ ÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÄñÓ ÃÃìÅëÅêÅéÂèÑ ÃÂÃÈ Âå ÄçÅèÅéÅêÅëÒ ÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÄñÒ ÁíÅìÅëÅêÅéÃèÐ ÊÈ å ÅçÅèÅéÅêÅëÁìÑ ÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÄñÑ ÂíÅìÅëÅêÅéÄèÏ ÊÈ ä ÁæÅçÅèÅéÅêÅëÁìÑ ÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÄñÑ ÂíÅìÅëÅêÅéÅèÎ ÃÂÃÈ ã ÂæÅçÅèÅéÅêÅëÂìÐ ÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÄñÐ ÃíÅìÅëÅêÅéÅèÁçÎ  Â É â ÃæÅçÅèÅéÅêÅëÃìÏ ÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÄñÏ ÄíÅìÅëÅêÅéÅèÂçÐ ÂÌ á ÄæÅçÅèÅéÅêÅëÄìÎ ÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÄñÎ ÅíÅìÅëÅêÅéÅèÃçÎ ÄË à ÅæÅçÅèÅéÅêÅëÅìÍ ÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÄñÍ ÁîÅíÅìÅëÅêÅéÅèÄçÎ ÄÌ à ÅæÅçÅèÅéÅêÅëÅìÁíÌ ÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÄñÌ ÂîÅíÅìÅëÅêÅéÅèÄçÃ Û Ü Ã ÁåÅæÅçÅèÅéÅêÅëÅìÁíÌ ÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÄñÌ ÂîÅíÅìÅëÅêÅéÅèÅçÆ × Ø Ç ÁåÅæÅçÅèÅéÅêÅëÅìÂíË ÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÄñË ÃîÅíÅìÅëÅêÅéÅèÅçÊ Ó Ô Ë ÁåÅæÅçÅèÅéÅêÅëÅìÃíÊ ÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÄñÊ ÄîÅíÅìÅëÅêÅéÅèÅçÎ Ï Ð Ï ÁåÅæÅçÅèÅéÅêÅëÅìÃíÊ ÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÄñÊ ÄîÅíÅìÅëÅêÅéÅèÅçÒ Ë Ë Ó ÂåÅæÅçÅèÅéÅêÅëÅìÄíÉ ÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÄñÉ ÅîÅíÅìÅëÅêÅéÅèÅçÁæÕ Ç Ç × ÂåÅæÅçÅèÅéÅêÅëÅìÄíÉ ÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÄñÉ ÅîÅíÅìÅëÅêÅéÅèÅçÁæÙ Ã Ã Û ÂåÅæÅçÅèÅéÅêÅëÅìÅíÈ ÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÄñÈ ÁïÅîÅíÅìÅëÅêÅéÅèÅçÁæÜ Þ ÂåÅæÅçÅèÅéÅêÅëÅìÅíÈ ÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÄñÈ ÁïÅîÅíÅìÅëÅêÅéÅèÅçÁæÜ Ý ÃåÅæÅçÅèÅéÅêÅëÅìÅíÁîÇ ÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÄñÇ ÂïÅîÅíÅìÅëÅêÅéÅèÅçÂæÛ Ý ÃåÅæÅçÅèÅéÅêÅëÅìÅíÁîÇ ÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÄñÇ ÂïÅîÅíÅìÅëÅêÅéÅèÅçÂæÛ Ý ÃåÅæÅçÅèÅéÅêÅëÅìÅíÂîÆ ÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÄñÆ ÃïÅîÅíÅìÅëÅêÅéÅèÅçÂæÛ Ý ÃåÅæÅçÅèÅéÅêÅëÅìÅíÂîÆ ÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÄñÆ ÃïÅîÅíÅìÅëÅêÅéÅèÅçÂæÛ Ü ÄåÅæÅçÅèÅéÅêÅëÅìÅíÃîÄ ÁïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÄ ÄïÅîÅíÅìÅëÅêÅéÅèÅçÃæÚ Ü ÄåÅæÅçÅèÅéÅêÅëÅìÅíÃîÄ ÁïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÄ ÄïÅîÅíÅìÅëÅêÅéÅèÅçÃæÚ Ü ÄåÅæÅçÅèÅéÅêÅëÅìÅíÄîà ÁïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñà ÅïÅîÅíÅìÅëÅêÅéÅèÅçÃæÇ Ó Õ Ç ÄåÅæÅçÅèÅéÅêÅëÅìÅíÄîà ÁïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñà ÅïÅîÅíÅìÅëÅêÅéÅèÅçÃæÓ Ç Ç Ô ÅåÅæÅçÅèÅéÅêÅëÅìÅíÅî ÁïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñ ÁðÅïÅîÅíÅìÅëÅêÅéÅèÅçÄæÙ Û ÅåÅæÅçÅèÅéÅêÅëÅìÅíÅî ÁïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñ ÁðÅïÅîÅíÅìÅëÅêÅéÅèÅçÄæÙ Û ÅåÅæÅçÅèÅéÅêÅëÅìÅíÅîÁï ÁïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñ ÂðÅïÅîÅíÅìÅëÅêÅéÅèÅçÄæÙ Û ÅåÅæÅçÅèÅéÅêÅëÅìÅíÅîÁï ÁïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñ ÂðÅïÅîÅíÅìÅëÅêÅéÅèÅçÄæÙ Ü ÄåÅæÅçÅèÅéÅêÅëÅìÅíÅîÂïÂÁïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÂÃðÅïÅîÅíÅìÅëÅêÅéÅèÅçÃæùÄåÅæÅçÅèÅéÅêÅëÅìÅíÅîÂïÂÁïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÂÃðÅïÅîÅíÅìÅëÅêÅéÅèÅçÃæùÉæÅçÅèÅéÅêÅëÅìÅíÅîÃïÁïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÄðÅïÅîÅíÅìÅëÅêÅéÅèÅçÃæùÉæÅçÅèÅéÅêÅëÅìÅíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîÅíÅìÅëÅêÅéÅèÅçÃæÚ Ü ÉæÅçÅèÅéÅêÅëÅìÅíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîÅíÅìÅëÅêÅéÅèÈçÚ Ý ÍçÅèÅéÅêÅëÅìÅíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîÅíÅìÅëÅêÅéÅèÇçÛ Ý ÍçÅèÅéÅêÅëÅìÅíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîÅíÅìÅëÅêÅéÅèÇçÛ Ý ÍçÅèÅéÅêÅëÅìÅíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîÅíÅìÅëÅêÅéÅèÇçÛ Ý ÍçÅèÅéÅêÅëÅìÅíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîÅíÅìÅëÅêÅéÌèÛ Þ ÑèÅéÅêÅëÅìÅíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîÅíÅìÅëÅêÅéËèÜ Þ ÑèÅéÅêÅëÅìÅíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîÅíÅìÅëÅêÅéËèÜ Þ ÑèÅéÅêÅëÅìÅíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîÅíÅìÅëÅêÐéÜ Þ ÖéÅêÅëÅìÅíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîÅíÅìÅëÅêÐéÜ Þ ÖéÅêÅëÅìÅíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîÅíÅìÅëÅêÐéÜ ß ÕéÅêÅëÅìÅíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîÅíÅìÅëÔêÝ ß ÚêÅëÅìÅíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîÅíÅìÅëÔêÝ ß ÚêÅëÅìÅíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîÅíÅìÅëÔêÝ ß ÚêÅëÅìÅíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîÅíÅìÙëÝ à ÞëÅìÅíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîÅíÅìØëÞ à ÞëÅìÅíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîÅíÅìØëÞ à ÞëÅìÅíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîÅíÝìÞ á âìÅíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîÅíÜìß á âìÅíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîÅíÜìß á âìÅíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîáíß â æíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîàíà â æíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïÅîàíà â æíÅîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïåîà ã êîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïäîá ã êîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðÅïäîá ã êîÅïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðéïá ã ïïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðéïá ä îïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðèïâ ä îïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñÅðèïâ ä îïÅðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñíðâ å òðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñìðã å òðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòÅñìðã å òðÅñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòññã æ öñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòðñä æ öñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóÅòðñä æ öñÅòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóõòÎ Õ ç úòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóôòÏ Õ ç úòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôÅóôòÎ Õ ç úòÅóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôùóÍ Ö è þóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôøóÍ Ö è þóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõÅôøóÍ Ö × Ð þóÅôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõýôÍ Ö × Ñ ÿôÃôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõüôÎ Ö × Ð ÿôÃôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÅõüôÍ × × Ð ÿôÃôÅõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÿõÂõÍ × × Ñ ÿõÇõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÿõÁõÍ Â × × Ñ ÿõÇõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÅöÿõÁõÍ Â × × Ð ÿõÇõÅöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÿöÆöÍ Ø × Ð ÿöÌöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÿöÆöÍ Â Ø × Ñ ÿöËöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÅ÷ÿöÅöÎ Â Ø × Ñ ÿöËöÅ÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÿ÷Ê÷Í Â Ø Ø Ð ÿ÷Ð÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÿ÷Ê÷Í Â Ø Ø Ñ ÿ÷Ï÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÿ÷É÷Î Ù Ø Ñ ÿ÷Ï÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÅøÿ÷É÷Í Â Ù Ø Â Ð ÿ÷Ï÷ÅøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÿøÎøÍ Â Ù Ù Ñ ÿøÓøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÿøÍøÍ Â Â Ù Ù Ñ ÿøÓøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÅùÿøÍøÍ Â Â Ù Ù Ñ ÿøÓøÅùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÿùÒùÍ Â Ú Ù Â Ñ ÿù×ùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÿùÑùÍ Â Â Ú Ú Ñ ÿù×ùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÅúÿùÑùÍ Â Â Ú Ú Ð ÿùØùÅúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÿú×úÌ Â Â Ú Ú Ð ÿúÝúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÿú×úË Â Â Û Ú Â Î ÿúÞúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÅûÿúØúÊ Â Â Û Ú Â Î ÿúÞúÅûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÿûÝûÊ Â Â Û Ú ÃÌ ÿûäûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÿûÞûÉ Â ÃÚ  ÂÕ ÄÃûÃÉ ÿûäûÅüÅýÅþÄÿÁÂÄÿÅþÅýÅüÿûÞûÉ ÃÃûÄÕ ÄÁûÄÍ ÄÊûÃÅ ÿûåûÅüÅýÅþÄÿÁÂÄÿÅþÅýÿüäüÅ ÃÊüÄÍ ÄÉüÄÈ ÑüàÿüêüÅýÅþÄÿÁÂÄÿÅþÅýÿüäü ÃÑüÈ ÄÐüÄÅ ÔüÂÿüëüÅýÅþÄÿÁÂÄÿÅþÅýÿüåüÂÔüÉ×üÂà ÿüÿüÃüÅýÅþÄÿÁÂÄÿÅþÿýÿýãýÃÿýÿýÉýÅþÄÿÁÂÄÿÅþÿýÿýÿýÿýïýÅþÄÿÁÂÄÿÅþÿýÿýÿýÿýïýÅþÄÿÁÂÄÿÿþÿþÿþÿþùþÄÿÁÂÄÿÿþÿþÿþÿþùþÄÿÁÂÄÿÿþÿþÿþÿþùþÄÿÁÂÿÿÿÿÿÿÿÿÿÿÂÿÁÂÿÿÿÿÿÿÿÿÿÿÂÿÁÂÿÿÿÿÿÿÿÿÿÿÂÿÁÿÿÿÿÿÅ #3CScsƒŸ¯¿Ïßÿÿÿÿ//ÿ??ÿOOÿ[[ÿkkÿ{{ÿ‡‡ÿ——ÿ§§ÿ³³ÿÃÃÿÓÓÿããÿÿÿÿëßûã×÷ßË÷×ÃóÏ»ï˳ëç统㳗ã¯ß§ƒÛŸ{×›sÓ“kÓ‹_ËO¿{K·wG«oC£k?›c;_7‡[3S/sO+kK+cC'[?#O7G3?/+# #+3;CKS[cks{ƒ‡—Ÿ§¯·¿ÇÏ×ßçïÿmagicmaze-1_4_3_6/data/gfx/background.pcx0000644000175000017500000003060511035127774017072 0ustar kentkent ?ï,,@ÿÿÿÿÿÅÿÿÿãû1210O02&7&Â'(ÔÿÿÿãÅ2õ0110AÂ'ÔÿÿÿãÅ2*Ù1Û02121O7BÂ'(Â'ÔÿÿÿãÅ2Â*Ø1*Ü02ÃÂ'×ÿÿÿãÅ2Â*1Â1Â1Ã1ÂÃ1Â1Â1ÂÂ1*Ã1ÂÂ11Â11Ì02Â'×ÿÿÿãÅ2Â*Â1*11*Â1*1Â*1Â1*11Â*1Â*11Â*1*1**Ë02Â'×ÿÿÿãÅ2Â*1Â*1*1*1*Å1*1Â*1*1Â*1**1*1Â*1Â*1Â**Ê02Â'×ÿÿÿãÅ2Â*1Ã*1Â*1*1*1Å*1Ã*1*1Â*1Â*1*1Â*1Â*1Â*Ì02Â'×ÿÿÿãÅ2Â*1Â*1Â*1Ã*1Ã*1*1Â*1*1Â*1Â*1*1Â*Â1Â*Ì02Â'×ÿÿÿãÅ2Â*1Â*1Â*1**Ã1*1Â*1Â*1*Ã1*1Â*1Â*1Ë102Â'×ÿÿÿãÆÂ*Â*ÂÂ*ÂÂ*ÃÃ*Ã*ÂÂ**ÂÃ*Ã*1Ã**Ê102&'×ÿÿÿãÇ*Â*Ã*Ã*ÄÃ*Â*Ã*Â*ÂÃ*ÂÂ1Â*Ã*Ê01&'×ÿÿÿãìÂ**ÐÚÿÿÿãÿÞÿÿÿãÂÿØÂÿÿÿãÂÿØÂÿÿÿãÂÿØÂÿÿÿãÂÿØÂÿÿÿãÂÿØÂÿÿÿãÂÿØÂÿÿÿãÂÿØÂÿÿÿãÂÿØÂÿÿÿãÂÿØÂÿÿÿãÂÿØÂÿÿÿãÂÿØÂÿÿÿãÂÿØÂÿÿÿãÂÿØÂÿÿÿãÂÿØÂÿÿÿãÂÿØÂÿÿÿãÂÿØÂÿÿÿãÂÿØÂÿÿÿãÂÿØÂÿÿÿãÂÿØÂßÿFÿFØFëÂÿØÂßÿFÿFØFëÂÿØÂßÿFÿFØFëÂÿØÂßÿFÿFØFëÂÿØÂßÿFÿFØFëÂÿØÂßÅFÅ)ÂFÅ)ýFÃ)ÿFÆFëÂÿØÂßÅF)Ã2Â)F)Ã2)üFÂ)2)ÿFÆFëÂÿØÂßÅEÂ)Ã2)E)Ã2)èEÃ)ÑE)Â2)ÿEÆEëÂÿØÂ߯E)Ã2Ä)2Ã)EÄ)EË)ÅEÅ)EÇ)ÂEÃ)2È)EÕ)ÃEÇ)óEëÂÿØÂ߯E)Ä2Ã)2Å)Â2Ã)Â2)Â2Â)Â2Â)ÃEÂ)Ã2Ã)2Â)Â2)ÂE)Å2Â)Ã2Ã)Â2Â)Â2Â)Â2Ä)2Â)Â2)ÂEÂ)Ã2)2)óEëÂÿØÂ߯E)2)Â2Â)2Ä)Å2Â)Â2)Ã2)Ã2)ÃE)Â2)2Â)Æ2)ÂEÂ)Â2Ã)Â2)2Â)Ã2)Ã2Â)Â2Ã)Æ2)EÂ)Æ2)óEëÂÿØÂßÅEÂ)2)Ã2)2Ã)Ã2)Ã2)Ã2)Â2Â)Â2)ÂEÂ)2)Â2)Ç2Ä)Â2Ä)2)Â2Â)Å2)2)Ã2Â)Ç2Ã)Â2Â)Â2Ã)òEëÂÿØÂßÅE)2Ã)Â2)2Â)Ã2Â)Â2)2)Â2)Â2Â)Â2Â)E)Ã2Ã)Ã2Â)Â2Ã)Â2Ã)Ä2Ã)2)Ã2Ã)Ã2Ã)Ã2Â)Â2Ã)Â2Ã)2Ã)òEëÂÿØÂßÄEÂ)2)E)Ä2Ã)Â2)Ã2Ã)È2Ã)E)Â2Ã)2)Â2Â)Â2)Â2)2Â)2)Â2Ã)2Â)Â2Å)Â2Â)2)Â2Â)Â2)2)Ã2)Ã2Í)çEëÂÿØÂßÄE)Â2Ä)Â2Ä)Å2Å)Æ2Ä)E)Å2Â)Â2)Ä2Â)Ä2Â)Å2Â)Ã2Ã)E)Ä2Â)Â2)Ä2Ã)Å2Â)Ã2)Ã2)Ã2)çEëÂÿØÂßÄE)Ã2)E)Â2Å)Ã2Ä)E)Â2)Â2Ä)ÂEÂ)Ã2Â)Â2Â)Â2Å)Â2Ä)Ã2Ã)Â2Ã)ÂEÂ)Â2Â)Â2Â)Â2Ã)Æ2Ã)Â2Â)Â2Â)Â2Â)çEëÿÞßÄEÅ)EÅ)ÂEÇ)ÂEÉ)ÄEâ)ÃEÎ)Â2Â)Â2Ð)æEëÿÞßÇEÃ)ÃEÂ)ÅEÃ)ÆEÂ)EÂ)ÈEÃ)ÂEÂ)ÂEÂ)ÅEÂ)ÄEÃ)ÃEÂ)ÇEÂ)ÂEÂ)ÂEÄ)Ä2Ã)ÃEÂ)ÂEÂ)ÂEÂ)çEëêÂB(B7ìßÿDÛDÈ)ôDëÆÅÆÇÂÍ aÂÅÂ(ÃÂ(ÞßÿDÞDÄ)õDëÈÏÑDbÃÅ(Ã(ßßèDÄÂDÄÿDåDëÈÏÐ('CÂ6ÃÅÂ(Â(ßßçDÂÂÄÂÂÿDäDëÈÆÃÅÄÄÅÅÂ'CAÅÅÂ(Â(ÃÄ'ÃÂ'Â'ÄÄ'ÈßÎDÃGÕDÂÄÂÄÂÿDÌDÖDëÈÈÆÅÅÄÄ'&6ÃÅ(((Ç'ÃÂ'Â'Ç'ÇßÍDÂGPÂGÓDÂÂÂÄÂÂÿDÌDÖDëÈÈÆÅÇÄÆ'&6ÂÅ(((ÃÅ'Ã'Ã'ÃÅ'ÇßÇDÃGÃDGÃPGÒDÂÂÃÃÃÂÿDÌDÖDëÈÈÆÅÊ(Ä'ÂA'Å(Ã(Â'Ä'Ã'Ã'Â'Ä'ÇßÅCÃGPÃGCGÃPGÂCÅGÊCÂÂÄÂÄÂÂÿCÉCCCÔCëÈÃÄÆÅÅÅÄ'Â%&Å(Ã(Â'Ä'Ã'Ã'Â'Ä'ÇßÅCGÅPGCGÂPÅGÃPGÉCÂÃÄÂÄÂÂßCÄæC ÕCëÆÇÂÅÃÄÄÅÇ&'Â&$ÂÅÃ(Ã(ÂÄ''Ã'Ã'ÂÄ''ÆßÅCÂGÂPÅGÄPÂGÂPGPGÉCÄÂCÂÂCÂÂßCÂâC ÑCëí#>ÂìßÄCÂGÂPÅGÃPGÂPGPGÂPÂGÈCÄÂCÂÂCÂÂßCÂæC ÕCëÂÿØÂßÃCÂGÂPÃGPÂGÂPÂGÅPÄGÈCÄÂCÂÂCÂÂßCÅäCCCÔCëÂÿØÂßÃCGPGPÂGPGPGÂPGÅPÃGPGÈCÄÂCÂÂCÂÂÇCÆÆCÈÄCÅÇCÄÛCÖCëÂÿØÂßÃCÂGÄPÂGÃPGÃPGÅPÂGÈCÄÂCÂÂCÂÂÆCÂÄÅCÂÆÃCÂÂÇCÂÂÂÚCÖCëÂÿØÂßÄCÂGÂPÄGÂPGÂPÃGÃPÂGCGÇCÄÂCÂÂCÂÂÅCÂÅÄCÂÇÂCÂÃÆCÂÄÂÙCÖCëÂÿØÂßÅBÕGÈBÄÂBÂÂBÂÂÄBÂÂÂÂÂÂBÂÂÂÄÂBÄÂÄBÂÆÂïBëÂÿØÂßÈBÂGÄBÂGBÂGÃBÃGÉBÄÂBÂÂBÂÂÃBÂÂÃÂÂBÂÂÃÄÂBÄÂÃBÂÃÃÂÂîBëÂÿØÂßâBÄÂBÂÂBÂÂÂBÂÂÄÂÂBÂÄÄÂBÃÂÂÃBÄÄÂîBëÂÿØÂßâBÄÂBÂÂBÂÂBÂÃÄÂÂBÂÄÄÂÃBÃÂÂBÄÂBÂîBëÂÿØÂßâBÄÂBÂÂBÂÂBÄÂBÂÂBÂÂBÄÂÃBÄÂBÄÂBÂÂíBëÂÿØÂßâBÄÂBÂÂBÂÂBÄÄÂÂBÂÂBÄÂÃBÄÂBÄÂBÂÂíBëÂÿØÂßâBÄÂBÂÂBÂÂBÊÂBÂÂBÄÂÃBÄÂBÄÂÂBÄíBëÂÿØÂßâBÄÂBÂÂBÂÂBÊÂBÂÂBÄÂÃBÄÂBÄÂÂBÄíBëÂÿØÂßâBÄÂBÂÂBÂÂBÄÄÂÂBÂÄÄÂÃBÄÂBÄÂBÂîBëÂÿØÂßâAÄÂAÂÂAÂÂAÄÄÂÂAÂÃÅÂÃAÄÂAÄÂAÂîAëÂÿØÂßâAÄÂAÂÂAÂÂAÄÂAÂÂAÂÂÂÂÂÂÃAÄÂAÄÂAÂÂíAëÂÿØÂßâAÄÂAÂÂAÂÂAÄÂAÂÂAÂÂÃÂÂÃAÄÂAÄÄÂÂíAëÂÿØÂßáAÂÄÄÂÂAÂÂAÄÂAÂÂAÄÄÂÂÃAÄÂAÂÃÃÂÃíAëÂÿØÂßàAÂÅÃÃÂAÂÂAÄÂAÂÂAÃÅÂÂÃAÄÂÂAÂÆÄíAëêÃPÃNÄLéßàAÂÆÂÄAÅAÃÅÂÂAÇAÂÂÃAÃÃÃAÂÄÄîAëìPNÂMLìßàAÇÅÄAÂAÂÅÂÃAÇAÂÂÃAÂÄÄAÂÂÄïAëÇÃ2ãOÂMKìßà@ÅÃ@ÅÉ@ÅÂÄ@ÅÃÂÂÃ@ÆÆ@Æð@ëÆ2Ã2ßHÂGJÂKJìßã@Ç@Ê@Å@ÄÂ@ÆÂÂÂÆ@ÂÊ@Âñ@ëÆ2æKLMLìßù@Â@ÅÃ@ÄÂÂÂÿ@Æ@ëÆ2ÇÃ1ÃÃ1ÂÂ1ÂÃ1ÌNLMLMLëßÿ@Ä@ÃÃÄÂÿ@Æ@ëÇÃ2Ã1Ã11Ã11Â1Ã1ÊONMNMÂNMêßÿ@Å@ÈÃÂÿ@Æ@ëÊ2Â1Å1Ã11ÂÅ1ÈPOÂNMÂJLMNMKèßÿ@È@Ã@ÂÂÂÿ@Æ@ëÊ2Â1Å1Ã11Â1ËPOÃNÃJMÃNMKçßÿ@Í@Åÿ@Æ@ëÆ2Ã2Â1Ã11Ã11Â1Ã1ÇPÄNLÂILNMNMKçßÿ@Ð@Âÿ@Æ@ëÇÃ2ÄÃ1ÃÃ1Â1ÃÃ1ÉOÄNÃJÂNMLèßÿ?ÿ?Ø?ëêOÂNLÂIKMÂLéßÿ?ÿ?Ø?ëÂÿØÂßÿ?ÿ?Ø?ëÂÿØÂßÿ?ÿ?Ø?ëÂÿØÂßÿ?×5ÿ??ëÂÿØÂßø?å5ù?ëÂÿØÂßò?ñ5ó?ëÂÿØÂßî>Ð5Û6Î5ï>ëÂÿØÂßë>Í5è6Ê5ì>ëÂÿØÂßè>Ë5Ó6Ì7Ò6É5é>ëÂÿØÂßæ>Ê5Í6Þ7Í6Ç5ç>ëÂÿØÂß×>ÃÉ>È5ÃÊ6è7Ë6Ç5ä>ëÂÿØÂß×>(È>È56(Æ6Î7Ó8Ï7É6Æ5ã>ëÂÿØÂßÖ>Â(ÂÅ>È5Â6Â(Â6Í7Þ8Ì7É6Å5á>ëÂÿØÂßÖ=Ã(Ã=È5Ä6Ã(Ê7Î8É9Ï8Ê7È6Æ5ß=ëÂÿØÂßÖ=Ã(Â=Ç5Å6ÂÃ(Æ7Ê8Ù9Ê8É7È6Å5Þ=ëÂÿØÂßÕ=ÂÄ(Ç5Æ6Ä(ÂÄ7É8Þ9É8É7È6Ä5Ý=ëÂÿØÂßÕ=Å(ÂÅ5Æ6ÂÅ(7È8å9È8È7È6Ä5Ü=ëÿÞßÕ=Æ(Ã5È6Æ(Ç8Ë9Ó:Ë9È8È7Ç6Ä5Û=ëÿÞßÔ=ÂÆ(Â5È6ÂÆ(ÂÄ8Ê9Ã:ÈÎ:Ë9Æ8È7Ç6Ä5Ú=ëÿÞßÔ=È(5Æ6Â7È(Â8É9Å:ÂÆ(ÃÃ;Í:È9Ç8Ç7Ç6Ä5Ù=ëÅÃÏâÃÏÌßÔ=È(ÂÅ6Â7ÂÈ(É9Æ:ÂÉ(ÂÇ;É:É9Æ8Ç7Ç6Ã5Ù=ëÄÂÎàÂÎËßÓ>ÂÉ(Ä6Ã7É(ÂÇ9Æ:ÂË(ÂÉ;Â:ÒÂ8Ç7ÐÒ>ëÄÃÍÂßÃÍÂÊßÓ>Ê(ÂÃ6Â7ÂÊ(Æ9Æ:ÂÍ(Ê;ÂÐ(Â8Å7ÃÎ(Ò>ëÄÂÃÄÃÃÂÂßÂÃÄÃÃÂÂÊßÓ>Å(Å(Ã6Â7Å(Å(Å9Æ:;(ÈÅ(ÂÈ;ÂÐ(ÂÃ8Ã7ÂÏ(ÂÒ>ëÅÃÃÃÂÂàÃÃÃÂÂÊßÒ>ÂÅ(Å(ÂÂ67ÂÅ(Å(ÂÃ9Ç:;Ã;ÇÅ(Â<Å;ÂÐ(ÄÂ8Â7ÂÐ(ÃÑ>ëÆÂÂÃÅÂáÂÂÃÅÂÊßÒ>Å(ÃÅ(Â67Å(ÃÅ(Ã9Ç:É;Â<ÂÄ(Ã<Ã;ÂÐ(ÄÃ8Â7Ð(ÃÒ>ëÇÂÅÂâÂÅÂÊßÒ>Å(ÃÅ(Â6ÂÅ(ÃÅ(Ã9Ç:Ä;ÉÄ(ÂÂ<Ã;(ÊÅ(ÄÄ87ÂÆ(ÅÅ(ÃÒ>ëÄÃÂÂÃÂßÃÂÂÃÂÊßÑ>ÂÄ(ÅÅ(6Å(ÅÄ(ÂÂ9Ç:Â;ÃÇ(Ä(ÂÅ;Ã;ÇÅ(ÄÅ87Å(ÆÅ(ÃÓ>ëÅÃÂÄÂÃÂàÃÂÄÂÃÂÊßÑ?Å(Ã5Å(ÃÅ(Ã8Å(Ã9Ç:ÂÈ(ÂÄ(ÂÈ;Å:ÂÅ(ÄÅ8Â7Å(ÆÄ(ÄÓ?ëÆÃÄÃÅáÃÄÃÅÊßÑ?Å(ÂÂ5ÂÅ(Å(ÃÂ8Å(Ä9Æ:È(ÃÄ(ÂÇ;Å:ÂÅ(ÄÆ8Â7Ä(ÃÂ6Å(ÃÔ?ëÇÃÅÃÃÂâÃÅÃÃÂÊßÐ?ÂÄ(ÃÃ5Å(Å(ÃÂ8ÂÄ(ÂÄ9Ä:ÂÇ(ÄÄ(ÂÅ;Æ:ÂÅ(ÄÇ8Â7Ä(Ã6ÂÄ(ÃÕ?ëÌÂõÂØßÐ?Å(Ã?Â5ÂÉ(ÃÂ7Â8Å(Æ9Â:Å(ÇÄ(ÂÂ;È:ÂÅ(ÄÆ8Ä7Ä(Â6ÂÅ(ÃÕ?ëÍöØßÐ?Å(ÂÃ?Â5É(ÃÃ78Å(È9Ä(Æ:Ä(ÂÉ:ÂÅ(ÄÆ8Å7Å(6Å(ÃÖ?ëÿÞßÏ?ÂÄ(ÃÄ?5ÂÇ(ÃÅ7ÂÄ(ÂÇ9Ä(ÃÄ:Ä(ÂÇ:9ÂÅ(ÄÆ8ÃÃ7Å(ÎÓ?ëÂàÕàÂßÏ?Å(ÃÅ?5Ç(ÃÆ7Å(Ã8Ä9Å(ÇÄ(ÂÇ9ÂÅ(Ì(Ã7ÂÆ(Ê(Ó?ëÂàÕàÂßÏ@Å(ÂÇ@ÂÅ(ÃÂ6Å7Å(Å8Â9ÂÏ(ÂÆ9ÂÒ(Â7Ã6Ð(ÂÓ@ëÂàÕàÂßÎ@ÂÅ(ÂÈ@Å(ÃÄ6Â7ÂÅ(ÂÇ8Ï(ÂÅ9ÂÒ(Â6Ã6ÂÎ(Â@Ò@ëÂàÕàÂßÎ@Ç(ÂÇ@ÂÃ(ÃÆ6ÂÇ(Ç8ÂÏ(ÂÃ9ÂÒ(ÄÅ6ÂÌ(ÄÓ@ëÂàÕàÂßÎ@È(È@Ã(ÃÆ6È(Ä7Ä8ÃÎ(Ã8Ò(ÄÆ65ÃÉ(ÄÔ@ëÂàÕàÂßÎ@ÊÈ@Â(ÃÃ5Ä6ËÈ78ÐÃ8ÖÄ65Å@ÍÕ@ëÂàÕàÂßÑ@ÈÈ@(ÃÂ@Ä5Ä6ÈÌ7ÎÅ7ÒÃ65Ê@ÉÖ@ëÂàÕàÂßá@ÄÆ@Ä5Ì6á7Í65ì@ëÂàÕàÂßäAÉAÄ5Ð6Ô7Ï6Â5ïAëÂàÕàÂßòAÄ5ë6Â5óAëÂàÕàÂßøAÄ5à65ùAëÂàÕàÂßÿAÇ5Ì6Ä5ÿAAëÂàÕàÂßÿAÿAØAëÂàÕàÂßÿAÿAØAëÂàÕàÂßÿAÿAØAëÂàÕàÂßÿAÿAØAëÂàÕàÂßÿBüBÅ'Ä&ÒBëÂàÕàÂßÿBúBÆ'Æ&%ÐBëÂàÕàÂßÿBøBÇ'Æ&Ä%ÎBëÂàÕàÂßÿBöBÈ'Æ&Ç%ÌBëÂàÕàÂßÿBõBÈ'Æ&Ç%Â$ËBëÂàÕàÂßÿBôBÈ'Æ&Ç%Ä$ÊBëÂàÕàÂßÿBóBÈ'Æ&Ç%Æ$ÉBëÂàÕàÂßÿBóBÆ'Æ&Ç%Æ$Â#ÉBëÂàÕàÂßÿCòCÆ'Æ&Ç%Æ$Ä#ÈCëÂàÕàÂßÿCòCÅ'Æ&Ç%Æ$Å#ÈCëÂàÕàÂßÓCÅÄÿCÕCÅ'Æ&Ç%Æ$Æ#"ÇCëÂàÕàÂßÐCÃÆÆÿCÒCÄ'Æ&Ç%Æ$Æ#Â"ÇCëÂàÕàÂßÎCÇÆÆÿCÐCÃ'Æ&Ç%Æ$Æ#Ã"ÇCëÂàÕàÂßÍCÂÇÆÆÿCÏCÂ'Æ&Ç%Æ$Æ#Ä"ÇCëÂàÕàÂßËCÆÇÆÆÿCÍCÆ&Ç%Æ$Æ#Æ"ÇCëÂàÕàÂßÊCÂÆÇÆÆÿCÌCÅ&Ç%Æ$Æ#Ç"ÇCëÂàÕàÂßÊCÃÆÇÆÅÿCÌCÄ&Ç%Æ$Æ#Ç"!ÇCëÂàÕàÂßÉDÆÆÇÆÄÿDÌDÂ&Ç%Æ$Æ#Ç"!ÈDëÿÞßÉDÆÆÇÆÃÿDÌD&Ç%Æ$Æ#Ç"Â!ÈDëÈÆÆÃÂÂÂåÈÅÃÈßÈDÄÆÆÇÆÂÿDÌDÆ%Æ$Æ#Ç"Â!ÉDëÌÇÄÂåÃÇÄÃÇßÈDÅÆÆÇÆÿDÌDÅ%Æ$Æ#Ç"Ã!ÉDëËÇÆÂæÆÅËßÈDÆÆÆÇÆÿDÍDÂ%Æ$Æ#Ç"Ä!ÊDëÊÂÇÆÂåÃÅÆÃÈßÈDÇÆÆÇÄÿDÎDÆ$Æ#Ç"Ä!ËDëÊÈÆÂåÅÅÉÇßÈDÂÇÆÆÇÃÿDÏDÄ$Æ#Ç"Ä!ÌDëÉÉÅÂäÃÅÅÃÇßÉEÂÇÆÆÇÿEÒE$Æ#Ç"Ã!ÎEëÈÆÄÅÂÂÂâÅÃÇÃÈßÉEÄÇÆÆÆÿEÔEÄ#Ç"Â!ÐEëÒ÷ÒßÊEÄÇÆÆÄÿE×E#Ç"!ÒEëÚñÐßÊEÆÇÆÆÂÿEòEëÍÃÂÇìÄÂÍßËEÆÇÆÆÿEóEëÌÃÇëÃÃÂÍßÍEÅÇÆÃÿEõEëËÅÄÃëÃÄËßÎEÆÇÆÿEöEëËÆÃÃêÃÂÂÍßÐEÅÇÃÿEøEëËÆÃÃêÅÂÂÍßÓEÄÅÿEûEëÌÃÃÃêÃÂÂÍßÿEÿEØEëÍÃÂÃÃéÅÂÃËßÿFÿFØFëÿÞßÿFÿFØFëÿÞßÿFÿFØFëÿÞßÿFÿFØFëÿÞßÿFÿFØFëÿÞßÿFÿFØFëÿÞßÿFÿFØFëÿÞßÿFÿFØFëÿÞßÿFÿFØFëÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÿÞÿÿÿãÑFÅFÎ<ÊFÅFØPÌÿÿÿãÑFÄFÎÉFÄF×PËÿÿÿãÑÂFÂÂFÂÎÈÂFÂÂFÂÖPÂÊÿÿÿãÑÂFÂÂFÂÃ<ÃÄ<<ÂÃ<ÅÂFÂÂFÂÃ<ÂÄ<ÂÃ<ÇÄPÂPÂPÃÿÿÿãÑFFFFÂÂÂ<<Â<<<Â<ÄFFFFÂÂÂ<ÂÂ<<Â<ÆPÃPPPÂÿÿÿãÑFFFFÂÄ<<<<<ÃÃFFFFÂÄ<Â<ÂÅ<ÅPÃPPÂPÂÿÿÿãÑFÂFÂFÂ<Â<<Â<<<ÂÃÂFÂFÂFÂ<Â<Â<<ÆÄPÂPPÂPÂÿÿÿãÑFÂFFÂ<<<Â<<<Â<ÄFÂFFÂ<<<<Ã<ÂÄPÂPÂÂPÂÿÿÿãÑFÂÂFÂÄ<ÂÄ<<ÂÃ<ÃFÂÂFÂÄ<Ä<ÂÃ<ÅÄPÂPÂÿÿÿãÒÂÂÂÂÅÂ<ÄÃÃÂÂÂÂÉÂÃÅÄPÃÂÿÿÿãÓÅÃÃÄ<ÃÂÃÅÅÃÄÄÂÃÇÃÂPÂÃÿÿÿãáÄïÂÃÿÿÿãÿÞÿÿÿÿÊÂ(ÃÂ(ÑÇ(Â'ÐÂ'ÆÿÿÿÿË( Â( Ð( ( ( ' Ð' ÅðÿÿÿÙÂ( Â(à Р(Å ' Ï' ÄÃÃÂÂÇÄÂËÂÇÚÄÍÅÃÌÃÇ×ÃÃÂÆÄÄÈÄÿÒÂ( Â( Å'ÂÂ'Â'Å ( Â ' Â'ÄÄ'Æ' ÄÃÅÇÄÂËÂÇÚÐÄÂÂÊÂÂÈÕÄÂÅÄÂÈÂËÊú( ( ( 'Ä 'ÂÂ' 'Å( ÃÂ' 'Äà 'Å' ÄÃÅÆÅÂÅÅÂÃÃÃÖÄÃÂÂÄÅÃÄÅÃÂÄÔÄÄÄÅÃÃÅÃÄÃÆÂÃÅù( ( ( Ç' ' ' Ä( Ã' ' ÂÅ' Ä' ÄÃÃÃÆÅÄËÄÂÄÂÕÄÂÂÆÅÃÊÃÂÕÃÅÄÅÂÈÂÂÄÂÂÂÄÂú(à ( 'È 'à ' Ã( Ã'à ' 'à ' Ã' ÄÃÅÆÅÂËÂÂÄÂÕÆÆÅÂÂÊÂÂÂÕÆÂÄÅÂÈÂÂÆÂÂÂú( ( 'Å ' ' ' Ã( Ã' ' '  ' Ã' ÄÃÄÃÄÆÂÅÅÂÃÃÃÖÄÃÂÂÃÇÃÅÆÃÂÄÂÔÄÃÄÆÃÅÃÂÃÃÂÄÂÂøÃ( Ã( Å' Ã' Ã' ÂÃ( ÂÃ' Ã' Ä'' Å'ÄÏâçÉÎëÿèà à ÂÅ Ä à Ãà Ãà à ÂÄ  ÂÅ ÃòÿÿÿØà à ÂÅ Âà à Ãà Ãà à ÂÄ  ÂÅ ÂÿÿÿÿÿÅÿÿÿÿÿÅ ///GGG___www‹‹‹£££»»»ÓÓÓÿÿÿ3G_w£»Óÿ3G_w£»Óÿ3G_w£»Óÿ33GG__ww££»»ÓÓÿÿ33GG__ww££»»ÓÓÿÿ3'G/[;oCƒO›[¯cÃo׃ÿ3G'[/o;ƒC›O¯[Ãc×oÿƒÿãÓÿÛÇÿÓ»ÿϳÿǧÿ¿›ÿ»“ÿ³ƒ÷«{ï£sç›kß“c׋[σSËO¿{K³sG«oC£k?›c;_7‡W3S/wO+kG'_C#S?K7?/3++#ÿÿÿmagicmaze-1_4_3_6/data/gfx/sprites.dat0000644000175000017500000026242010134226671016417 0ustar kentkent """(((...444??? #(.4? #(.4? #(.4? ##((..44?? ##((..44??   &+05 ?    &+05? ?84?61?4.?3,?1)?/&?.$?, =*;(9&7$5"3 2/,*(&# !        ??? /      ''&&''''&&&&''%'&&&&&&&'%'&&C&&&$&&'%'&&C&&&&$&'%'&&CC&&&&$&'%'&&C@@&&&&$&'%'&&CC@&&&&$&'%'&&@CC&&&&$&'%'&&@@C&&&&$&1'&&@CC&&&&01''&CC&&&&0%'&C&&&%%&&&%%&&%%%%%% /    0++0 00000 00000000 000000 000    &&&&&&&%%%%&&&&&%&&&&%&&&&%&&&&%&&&&%&&&&%&&&&&%&&&&%&&&&&%&&&&%&&&%&%&&&&&%&&&%&%&&&&&%&&&%&%&&&&&&%&&&%&%%%%%%%%&&&%&&&&&000&&&&%&&&&&000&&&&%&&&&&&&&&&&&&%&&&&&&&&&&&&%%&&&&&&&&&&&&%&&&&&&&&&&&&%%''''&&&&##### /   00000 0+000+0 00000 00000 0 0   '  &''&&'''&&&&&'''&&&&&&&&&''&&&&&%%%%&&&&&&&&''&&&&&&%%&&&&&&&&&''&$&&&&%$$%&&&&&$&&&''&$&&&&%$$%&&&&&$&&&''&$&&&&%$"$%&&&&&$&&&''&$&&&&&$"$&&&&&&$&&&''&$&&&&&$"$&&&&&&$&&&''&$&&&&&$"$&&&&&&$&&&10$&&&&&$"$&&&&&&$0010$&&&&&$"$&&&&&&$00%&&&&&&$"$&&&&&&&%%&&&&&$"$&&&&&&&%%&&&&&$"$&&&&&&%%%%&&&%$"$%&&&&%%%%&%%$"$%%&&%%%%%%%% /   1++01100011110000 000000 000    &&&&& &&&%%%%&& &&%&&&&%&& &&%&&&&%&& &&&%&&&&%&& &&&%&&&&%&&'&&&%&&&&%&&'&&&%&&&&&%&'&&&%&&&&&%&'&&&%&&&&&&%&'&&&%%%%%%%%&'&&&&000&&&&&'&&&&000&&&&&'&&&&&&&&&&&&&''&&&&&&&&&&&&'&&&&&&&&&&&&'%&&&&&&&&&&&&%%%%%$$$$#### / /<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< / /<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< / /                                                    /$$$$$$$&&$$$&(&$$$(&($$$((( ($$$((( (($$$((( (($$$(((( (($$$((((( (($$$((((( ((($$$(((((( ((($$((((( (((($$$(((( (((($$(((( (((($$(((( (((($$$((( (((($$((( (((($$(( (((($$$( ((((($$$$$( (((($$$$$( (((($$$$(( (((($$$$( (($$$$$(((($$$$((((($$$$(((($$$$(($$$$(($$$$($$$$$$$$$ /5555>>>>>>>55???????5555???????55555555555@@@@@@@55555555566@@@@@@@6665555556666AAAAAAA666655?5566677BBBBBBB776665?55666777BBBBBBB77766@??556677788CCCCCCC88777@@??556677889CCCCCCC98877A@??5566778899DDDDDDD99887A@@?5566778899DD,,,DD9998BAA@??566778899:,,----,:9CBBAA@@?>??@AABBCDDE,-.//.-::998776654>??@AABBCDD,-./00/.-:998776654>??@AABBCDD,-/0110/-:998776654>??@AABBCDD,-/0110/-:998776654>??@AABBCDDE-./000.::998776654>??@AABBCDDE,-.//.-DDCBBAA@@556678899:::---::DCCBBAA@?5566778899:::::::CCBBAA@@?5666778899999999CBBBAA@@5566777889999999BBBAA@@555566777B8888888BAAA@@?55566AAA8888888AAA@@@55???@@@A7777777A@@@?@@5??@@@6666666@@@@5????6666666??@5?5555555@55555555@@5@@ / /MMMMMMMMMMMMMMMMMMLLMMMMMMMMMMMMMMMMMMLLLLNNNNNNNNNNNNNNNNNNKKKKKNNNNNNNNNNNNNNNNNNKKKKKKGKKKKKKGKKKKKKKKKKGKKKKKKGKKKKKKKGGGGGGGGGGGGGGKKKKKKKKKKKKKKKKKKKKKGKGGGGGKKGGGGKGKKKGKKKKKKKKKKKGKGKKKGKKKKGGGKKGKGKGKKKGKGKGKKKKKGKKKGKKKGKGKGKKKKKGKKKGKKKGKGKKKGGGKGKKKGKKKGKKKKKKKKKKKKKGKKKGKGKGKGKGKGGGKKKKKKKGKGKGKGKKKGKKKKKGKGKKKGKGGGKKGKKKKGKKGGGGKKKKKKGKKKKGKKKKKKKGGGKGKGKKKGKKKKKKKKKKKGKGKKKGKKKKGGGGGGGKKGKKKGKKKKKKKKKKKKKGKKKKGGGGGGGGKGGGGKKGGGGGKKKKKGKKKKKKKKKKKKHHHHHKKKKKGKKGKKKKKKKKKHHHHJJJJJGJJGJJJJJJJJJIIJJJJJGJJJGJJJJJJJJIIIIIIIIIIIIIIIIII /JJJJMMMJJMGMGMJJMMMMMJJJMMGMMJJJPJJMMMJJPJJPJJMJJPJJPJJJJJMJJJJJPJJMMMMMMMMMMMJJJJJJMJJJJJJMJJMJJMJJMJJMJJMJMJJMJJMJJMJJMJJMJJMJJJMJJMJJJMMMJJMMMJJJJJJJ /&&&&&&&&%%&&&$$$$&&##&'####''#####''##JJJ##''##JMMMJ##'('#JMGMGMJ#'('(((#JMMMMMJ#((('((J(#JMMGMMJ#(J(((JPJ%##JMMMJ##%JPJ((JPJ####JMJ####JPJ(%JPJJJJJMJJJJJPJ%%JMMMMMMMMMMMJ%%JJJJJMJJJJJ%####JMJ#####JMJ##JMJ##JMJ##JMJ##JMJMJ##JMJ#JMJ##JMJ##JMJ##JMJ##JMJ##JJMJ##JMJJ##JMMMJ##JMMMJ##JJJ##JJJ####### /    (((((  ((''''''(  (''&%%%%&''  '&%$$%%&  '&%$#$%'  '&%#"$%&  '&%$#$%&  &%$#"#$%  '&%%$$$$%&&  ''&&%%&&'  '''''     /2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 / /2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 /LLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMLLMOOOOOOOOOOOOOOOOOOOOMLLMOOOOOOOOOOOOOOOOOOOOOOMLLMMMMMMMMMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLKHHHHHHHHHHHHHHHHHHHHHHKKHHHHHHHHH1H1H1HHHHHHKJJJJJJJJJ11111JJJJJJKG.GGG00.11111GG..GKK....000011111.//..KKG//./0000100///11///KK00000011000002211100KK0020111111111202211111KK0202022222222222222222KLLLLL2LLLLLLLLLLLLLLLLLLLLLMMMM2MMMMMMMMMMMMMMMMMMMLLMOOOOOOOOOOOOOOOOOOOOOOMLLMOOOOOOOOOOOOOOOOOOOOOOMLLMOOOOOOOOOOOOOOOOOOOOMLLMOOOOOOOOOOOOOOOOOOOOMLLMOOOOOOOOOOOOOOOOOOOOMLLMOOOOOOOOOOOOOOOOOOOOMLLMOOOOOOOOOOOOOOOOOOMLLMMMMMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLLLLLLLLL /MLLKKJIMLLKKJIMLKJIMLKJI;;;;;;:::;;;;;::;;;;:;;;;:;;;;:::::9;;;;;;:::;;;;;;;::::::99;;;;;;;:::::::99999 /MLLKKJIMLLKKJIMLKJIMLKJIEEEEEEDDDEEEEEDDEEEEDEEEEDEEEEDDDDDCEEEEEEDDDEEEEEEEDDDDDDCCEEEEEEEDDDDDDDCCCCC'''''''&&&&&&%%%%%%$$''''''&&&&&&%%%%%%$$$$$''''&&&&&&&%%%%%%$$$$$#''''&&&&&&%%%%%%$$$$$####''&&&&&&%%%%%%%$$$$######&&&&&&&%%%%%%$$$$######""&&&&%%%%%%$$$$$#####"""&&%%%%%%%$$$$######""""%%%%%%$$$$$#####"""""%%%$$$$$#####""""""$$$$######"""""#####"""" /LNNNNNMKPPPPPPLNNNNNMKMMMMPPPPPPOOLNNNNMKLLLLLLLPPONLNNNMKLPOLNNMKLPLNNMKLIIIIIIPLNNMKLIIIIIIIIIIIIIIIIIINNNKLINNINNKMLPINNNINNKMLPOINNNINNNKMLPONINNNINNNNNMLPONNNNNNNNNNNNNMLPPONNONNNNNNNNNMNNMLKPOONNNONNGGGGGNNMNNNMLKPONNNNONNGNGNGNGNNMNNNMLKPONNNNNONNGNGNGNNNNMNNNNMLKPONNNNONNNGNGNGNNNNNMNNNMLKPONNNNONNNNGGGGGNNNNMNNNMLKPONNNONNNNNGNGNGNNNNNNMLKPONNNONNNNGNGNGNNNNNMLKOONNNNNGNGNGNGNNNMMLKOOONNNGGGGGNMMLLLNNNNNNNMMLL / ((((( (('''  '' ''''''('''''(''''('''''(''''''''(''''''''''(''''''''''''(''''''''''''''(''''''''''''''(''''''''''''(''''''''''''&''''''''''''&&''''''''&&&&&'''&&&$$%%&$$$$""" /<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< / /<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< / /<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< /222211112111211121212121212122222222222222222221211111111111111111112121000000000000000000212111112121111211011211021110000 /((((''''('''('''('('('('('('((((((((((((((((((('('''''''''''''''''''('('&&&&&&&&&&&&&&&&&&('('''''('(''''(''&''(''&('''&&&& / /...........000.00.0....0.0000.00.00.0..00.0000.00.00.00...00.0000.00.00.000..0.00.0000.00.00.000...00.00111111111111000.0..00.0010000000000/000.0..000.0010000000000/000.00..------10000))0000/------.-0000001000))))000/000000--0000001000))))000/000000--00000010000))0000/000000-.------10000))0000/------..000.001000))))000/000.00..000.00100))))))00/000.00..000.0010000000000/000.00..000.001///////////000.00..000.00.0000.00.00.000.00..000.00.0000.00.00.000.00..000.00.0000.00.00.000.00..000.00.0000.00.00.000.00..000.00.0000.00.00.000.00..------------------------.-000000000000000000000000--000000000000000000000000--000000000000000000000000-.------------------------. /$"$"$"$"$"$"$"""$"""$"""$"""$"""$"""$"""$"""$"""$"""$"""$"""$#$#$#$#$#$#$#$#$#$#$#$#%%$#%%$#%%$#%%$#%%$#%%$#%%%$$$$$$$$$$$$$$$$$$$$$$$$$$#%$$#$#$#$#$#$#$#%$$#$#$#$#$#$#$#%$$#$#$#$#$#$#$#%$$#$#$#$#$#$#$#%$$#$#$#$#$#$#$#%$$#$#$#''''''''$#$#%$$#$#$#'''''''%$#$#%$$#$#$#'''''%$#$#%$$#$#$#'''%$#$#%$$#$#$#'''%$#$#%$$#$#$#'''''%$#$#%$$#$#$#'''''%$#$#%$$#$#$#'''%$#$#%$$#$#$#'''''''%$#$#%$$#$#$#'%%%%%%%$#$#%$$#$#$#$#$#$#$#%$$#$#$#$#$#$#$#%$$#$#$#$#$#$#$#%$$#$#$#$#$#$#$#%$$#$#$#$#$#$#$#%$$$$$$$$$$$$$$$$$$$$$$$$$$########################### /                                       / /2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 / /===============================FFFFFFFFFFFFFFFFFFFFFFFFFFFF==FFFFFFFFFFFFFFFFFFFFFFFFFFFF==FFFFFFFFFFFFFFFFFFFFFFFFFFFF==FFF EEEEEEE EE EEEEEEFF==FFF EEEEEEEE EEEEEFF==FFF DD  D D DDDEEFF==FFF CC   C CDEEFF==FFF BB B B BCDEEFF==FFF CB   B BCDEEFF==FFF B   AA BCDEEFF==FFFEB@@@@ACDEEFF==FFFEEDCBBA@???????@ABBCDEEFF==FFFEEDCBBA@???????@ABBCDEEFF==FFFEEDCBBA@?>>>>??@ABBCDEEFF==FFFEEDCBBA@?>>=>??@ABBCDEEFF==FFFEEDCBBA@?>>>>??@ABBCDEEFF==FFFEEDCBBA@?>>>>??@ABBCDEEFF==FFFEEDCBBA@???????@ABBCDEEFF==FFFEEDCBBA@@@@@@@@@ABBCDEEFF==FFFEEDCBBAAAAAAAAAAABBCDEEFF==FFFEEDCBBBBBBBBBBBBBBBCDEEFF==FFFEEDCBBBBBBBBBBBBBBBCDEEFF==FFFEEDCCCCCCCCCCCCCCCCCDEEFF==FFFEEDDDDDDDDDDDDDDDDDDDEEFF==FFFEEEEEEEEEEEEEEEEEEEEEEEFF==FFFEEEEEEEEEEEEEEEEEEEEEEEFF==FFFFFFFFFFFFFFFFFFFFFFFFFFFF==FFFFFFFFFFFFFFFFFFFFFFFFFFFF=============================== /DDCCCBBBBEEDDDCCCBBBBAAAEEEEDDDCCCBBBBAAA@@EEE>>>>?CCCBBBB>>>>>@FEEEEA= >>CCBBB>> =?@@?FFEEEEE= =CCA@BBB= =@@@??FFFEEEEEDDDCACB@BBAAA@@@???FFFEEEEEDDDC=CB=BBAAA@@@???FFFEEEEEDDDCCCBBBBAAA@@@???FFFEEEEED= = == = ==A@@@???FFFEEEE===== == ======@@???FFEEE================>@??FEEEE>>===========>>@@?EEEEED>>>>>>>>>>>A@@@EEEEDDDCCCBBBBAAA@@EEDDDCCCBBBBAAAE===DDCCCBBBB===DEEEEEDD=========CCCDDDEEEEEEDDDDDDDCCCCCCCCBDDDDEEDEDDDDDCCCCCCCCBBBDDDEDDDDDCCCCCCCCBBBBBBBBDEDDCCCCCCCCBBBBBBBBBAAADCCCCCCCCBBBBBBBBBAAAAAADDCCCCBBBBBBBBBAAAAAAAA@CCCBBBBBBBBAAAAAAAA@@@@CBBBBBBBBAAAAAAAA@@@@@@EEEEEDDDCCCCBEEEEEDDDDCCCBEEEDDDCCCCBBBAEEEDDDDCCCBBBBADDCCCCBBBAAAADDCCCCBBBBAAA /                   /                         /                                      /ONOONNOONNNNNNNNN ONN.....NNN  ON++...++NN  ON. . .NN  ONN.....NNN  ONN.O.NNN ONNONONNN111NNONONN00011NNNNNNN0000NNNNN00NNNNNNNNNNNNN0...0... /JJJJIIJJIIIIIIIIJJIIIIIIIIIIIIIIIIIIIIIIIIIIIJJIIIIIJIIJKKKKJIIIIIIIJKKLLKKJIIIJIIIIIIIJKLLLLKJIIIIIIIIIIIIJKLMMMMLKIIIIIIIIIJKLNNNNLKJIIIIIIIJLMNOONMLJIIIIIIIIKLMOPPOMLJIIIIIIIIIIIIIKLMOPPOMLIIIIIIIIIIIIHHMNOONHHJIIIIIIIHHGNOOGHHJIIIIIIIJKGGGGGLKIIIIIIIIIIIIJKGMGLKIIIIIIIIIIIIGJKLLGIIIIIIIGIJKKKIGIII J J III II IIIII /$$$$$$$$$$$ $$$$$$ $$$  $$$  $$((((((((((((((((((((('' '' '' '' '' '' '' ''& && && && && && && & % % % % % % $$$$$$$$$$$  ###############  !!!!!!!!!!!!!    !!!!!!!!!!!!! ##########$ $ $ $ $ $ $ $$% %% %% %% %% %% %% $$&& && && && && && && &$$''''''''''''''''''''$$$$$$$$$$$$$$$$$$""""""""$$$$$$$ """"""((((((((((((((((((((((&&&&&&&&&&&&&&&&&&&&&&&&&&&&$$ $$$$ $$$ $$$$$ $$$ $$$ $$!!!!!!!!!!!!!!!!!!!!!!!!!!!!"" """" """ """"" """ """ ""$$$$$$$$$$$$$$$$$$$$$$$$$$$$'''''''''''''''''''''' /                                 /######################"""#######$########"""########$########"""########%$########"""########"%$######"""""""######"%$#####"""""""#####"%$# #####"""### ###"%$# ####"""## ###"%$###############"%$###############"& $$$$$$$$###$$$$$$# !&%$%%%%%%$$$$$%%%%%#"!&%$"""%%%%$$$$$%%%%""#"! &%$$%"""""""""""""""%$"! " &%$%& """ &%"! "" &%$%&"$$$"&&%"! ""%$&'''''"$$$"''''''&"""%$&''''"$$$$$"'''''&"""$%''&&"$$$$$"&&'''%""" $%%&&&&"$$$"&&&&%"% "" "" $%$$$$$"""$$$$$"% "" #"%      "%"###%%    %"%###$%"""####""%$#!$#%%%###%#$$#%%%%#$$ $ /%%%%% %%% %% %%   %% %"% %""% %"""% %""%$$"% %$$%%%$$% %$$%%#"% %"#%%#"% %"#%%##""%""##%%###"!"###%%%%####"!"####%%%%####"!"####%%%%####"!"####%%%%$###"!"###$%%%%$###"!"###$%%%$##""!""##$%%#""#"!"#""#%$###"!"###$$###"!"###$$###"!"###$$####"!"####$$####"!"####$$#####"!"#####$$######"!"######$$$$$$$##$$$$$$ /         /'''''''''&&&&&&&%%'&&&&&&&&&&&%'&'(&&&&&&&('&%#'&$$(&&&&&($$&%###'&& $(&&&($ &&%##'&& $(&($ &&%####'&& $&$ &&%##'&& & &&%##'&  &  &%#####'&  &  &%######'& & &%####'& & &%####'& & &%####&$ & $&##$$$###&&$$$&$$$&&###$$$$$$$$$$#&&&%%&%%&&&#$$$$$$$$$$$$$&&&&&&&&&$$$$$$$$$%%&&&&&&&&&%%$$$$%%%%''&&&&&''%%%%$$$$%%%'''&&'''%%%$$$$%%''''''%%$$$$%'''''%$$$%'''''''%$$$%%'''''''%%$$$%%''''''%%$$%%%'''%%%$$$''''%%$$$$$$$$ /LLLLLLLLLLLLLLLLLLLKKKKKKKKKKKKKKKKKJJLLKKKKKKKKKKKKKKKKKKKKKJLKKKKKKKKKKKKKKKKKKKKKKKKJLKKKKKKKKKKKKKKKJLKKKKKKKKKKKJLKKKKKKKKKKJLKKKKKKKKKKKJLKKKKKKKKKKKJLKKKKKKKKKKKJLKKKHKKKHKKKJLKKKHKKKHKKKJLKKKHK  KKHKKKJLKKKHKK  KKKHKKKJLKKKHKKKKKHKKKJLKKKHKKKKKKKHKKKJLKKKHKKKKKKKHKKKJLKKKHKKKKKKKKKHKKKJLKKKHKKKKKKKKKHKKKJLKKKK  KKKKKJKJJJJJJJJJILKKJKKJKKKJKJJKKKKKKJJJJLKKKKKKKKKHKKKKKKKKKKJLKKKKKKKKKHKKKKKKKKKKJLKKKKKKKKKHKKKKKKKKKKJLHHHHHHHHHHHHHHHHHHHHJKKJJJJIIKKJJJJJIIKJJJJJJJJIKJJJJJJJJJIKJJJJJJJJIKJJJJJJJJJI /  NM    NM NM     NM    NMNM NM NM NM NM NM NM NM NM   NMNMMM / /                                        /                                            /444=>>>55??5?6 @6 @6 ** ** @6  *2, ,2*  @7   A7   A8   B9 C7 : 7 A D A 9;9   CEC 789:;<;:987 ABCDEFEDCBA 9;9  CEC 7 : 7?A D A 9 ? C  8 ? B  7 ? A  ?  6?6 877@?@778BAA6?6AAB877?778?????? / / / / / /                                                        / / /((((((((((((((((((8(((((8((((((8((((L8((((LL8((((LL8(((LLL8(((LL8(((LL8(((LL888((((((((((((((( /     /     /     / / / /     /     /                                                                     /                                                 / /2111110000000000000000000000000/121111000000000000000000000000/.11211110000000000000000000000/..1112111000000000000000000000/...1111222222222222222222222222....011121111111111111111111111...--000121111111110000000000001.----0000211111100000000///////1.----000021111100000///////////1.----000021111000//////////////1.----00002111000///////////////1.----0000211100////////////////1.----000021100/////////////////1.----000021100/////////////////1.----00002110//////////////////1.----00002100//////////////////1.----00002100//////////////////1.----0000210///////////////////1.----0000210///////////////////1.----0000210///////////////////1.----0000210///////////////////1.----0000210///////////////////1.----0000210///////////////////1.----0000210///////////////////1.----0000210///////////////////1.----000021////////////////////1.,---000021111111111111111111111.,,,-00002.......................,,,,000/..--------------------,,+,,,00/...--------------------,,,+,,0/...----------------------,,,+,/....----------------------,,,,+ /2111110000000000000000000000000/121111000000000000000000000000/.11211110000000000000000000000/..1112111000000000000000000000/...1111222222222222222222222222....011121111111111111111111111...--000121111111110000000000001.----0000211111100000000///////1.----000021111100000///////////1.----000021111000//////////////1.----00002111000/////-/////////1.----0000211100/////-,0////////1.----000021100//////-,0////////1.----000021100//////-,0////////1.----00002110///////-,0////////1.----00002100///////-,0////////1.----00002100///////-,0////////1.----0000210////////-,0////////1.----0000210//////---,0--//////1.----0000210/////-,,,,,,,-/////1.----0000210//////000,000//////1.----0000210////////-,0////////1.----0000210////////-,0////////1.----0000210/////////-/////////1.----0000210///////////////////1.----000021////////////////////1.,---000021111111111111111111111.,,,-00002.......................,,,,000/..--------------------,,+,,,00/...--------------------,,,+,,0/...----------------------,,,+,/....----------------------,,,,+ /PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPOPPOOOOOOOOOOOOOOOOONNNNNNMMMMNOLPOPOOOOOOOOOOONNNNNMMMMMMMMMNOLGPOOPOOOOOONNNNNMMMMMMMMMMMMNOLJGPOOOPOONNNMMMMMMMMMMMMMMMMNOLJJGPOOOOPONMMMMMMMMMMMMMMMMMNOLJJJGPOOOOOPONMMMMMMMMMMMMMMMNOLJJJIGPOOONNOPONMMMMMMMMMMMMMNOLJJJJIGPOOONMNOPONMMMMMMMMMMMNOLJJJJJIGPOONMMMNOPONMMMMMMMMMNOLJJJJJJIGPOONMMMMNOPONMMMMMMMNOLJJJJJJJIGPOONMMMMMNOPONMMMMMNOLJJJJJJJJIGPOONMMMMMMNOPONMMMNOLJJJJJJJJIIGPONMMMMMMMMNOPONNNOLJJJJJJJJJIHGPONMMMMMMMMMNOPONOLJJJJJJJJJJIHGPONMMMMMMMMMMNOPOLJJJJJJJJJJJIHGPONMMMMMMMMMMNNOPHIJJJJJJJJJJIHGPONMMMMMMMMMMNOLHGHIJJJJJJJJJIHGPNMMMMMMMMMMNOLJIHGHIJJJJJJJJIHGPNMMMMMMMMMNOLJJJIHGHIJJJJJJJIHGPNMMMMMMMMNOLJJJJJIHGHIJJJJJJIHGPNMMMMMMMNOLJJJJJJJIHGHIJJJJIHHGPNMMMMMMNOLJJJJJJJJJIHGHIJJJIHHGPMMMMMMNOLJJJJJJJJJJJIHGHIJJIHHGPMMMMMNOLJJJJJJJJJJJJJIHGHIJIHHGPMMMMNOLJJJJJJJJJJJJJJJIHGHIIHHGPMMMNOLJJJJJJJJJJJJJJJJJIHGHIHHGPMMNOLJJJJJJJJJJJJJJJJJJJIHGHHHGPMNOLJJJJJJJJJJJJJJJJIIIIIIHGHHGPNOLJJJJJJJJJJIIIIIIIHHHHHHHHGHGPOLJJJIIIIIIIIHHHHHHHHHHHHHHHHGGOLGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG /PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPOPPOOOOOOOOOOOOOOOOONNNNNNMMMMNOLPOPOOOOOOOOOOONNNNNMMMMMMMMMNOLGPOOPOOOOOONNNNNMMMMMMMMMMMMNOLJGPOOOPOONNNMMMMMMMMMMMMMMMMNOLJJGPOOOOPONMMMMMMMMMMMMMMMMMNOLJJJGPOOOOOPONMMMMMMMMMMMMMMMNOLJJJIGPOOONNOPOOOOOOOOOOOOOOONOLJJJJIGPOOONMNOPPPPPPPPPPPPPPPOLJJJJJIGPOONMMMNP21111111111111LKJJJJJIGPOONMMMOP1210///////01.LKJJJJJIGPOONMMMOP11210/////01.,LKJJJJJIGPOONMMMOP101210///01.,-LKJJJJIIGPONMMMMOP1/01210001.,,-LKJJJJIHGPONMMMMOP1//012101.,,,-LKJJJJIHGPONMMMMOP1///0121.,,,,-LKJJJJIHGPONMMMMOP1///0012*+,,,-LKJJJJIHGPONMMMMOP1///01.*)*+,,-LKJJJJIHGPNMMMMMOP1//01.,+*)*+,-LKJJJJIHGPNMMMMMOP1/01.,,,+*)*+-LKJJJJIHGPNMMMMMOP101.,,,,,+*)*-LKJJJJIHGPNMMMMMOP01.,,,,,,,+*),LKJJJIHHGPNMMMMMOP1.---------,,+LJJJJIHHGPMMMMMMNLLLLLLLLLLLLLLLIJIJJIHHGPMMMMMNOLKKKKKKKKKKKKKKJIHIJIHHGPMMMMNOLJJJJJJJJJJJJJJJIHGHIIHHGPMMMNOLJJJJJJJJJJJJJJJJJIHGHIHHGPMMNOLJJJJJJJJJJJJJJJJJJJIHGHHHGPMNOLJJJJJJJJJJJJJJJJIIIIIIHGHHGPNOLJJJJJJJJJJIIIIIIIHHHHHHHHGHGPOLJJJIIIIIIIIHHHHHHHHHHHHHHHHGGOLGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG /                                    /('''''&&&&&&&&&&&&&&&&&&&&&&&&&%'(''''&&&&&&&&&&&&&&&&&&&&&&&&%$''(''''&&&&&&&&&&&&&&&&&&&&&&%$$'''('''&&&&&&&&&&&&&&&&&&&&&%$$$''''(((((((((((((((((((((((($$$$&'''(''''''''''''''''''''''$$$##&&&'('''''''''&&&&&&&&&&&&'$####&&&&(''''''&&&&&&&&%%%%%%%'$####&&&&('''''&&&&&%%%%%%%%%%%'$####&&&&(''''&&&&%%%%%%%%%%%%%'$####&&&&('''&&&%%%%(((%%%%%%%%'$####&&&&('''&&%%%%%('&%%%%%%%%'$####&&&&(''&&%%%%%%('&%%%%%%%%'$####&&&&(''&&%%%%%%('&%%%%%%%%'$####&&&&(''&%%%%%%%('&%%%%%%%%'$####&&&&('&&%%%%%%%('&%%%%%%%%'$####&&&&('&&%%%%%%%('&%%%%%%%%'$####&&&&('&%%%%%(((('&(((%%%%%'$####&&&&('&%%%%%('''''''&%%%%%'$####&&&&('&%%%%%(&&&'&&&&%%%%%'$####&&&&('&%%%%%%%%('&%%%%%%%%'$####&&&&('&%%%%%%%%('&%%%%%%%%'$####&&&&('&%%%%%%%%(&&%%%%%%%%'$####&&&&('&%%%%%%%%%%%%%%%%%%%'$####&&&&('&%%%%%%%%%%%%%%%%%%%'$####&&&&('%%%%%%%%%%%%%%%%%%%%'$"###&&&&(''''''''''''''''''''''$"""#&&&&($$$$$$$$$$$$$$$$$$$$$$$""""&&&%$$####################""!"""&&%$$$####################"""!""&%$$$######################"""!"%$$$$######################""""! / /BBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCBBDDBBEEBBFFFFFFFFFFFFFFFFFFFFBBFFBBF FBBF FBBF FBBFFBBFFBBFFBBFFBBFFBBFFBBFFBBFFBBFFBBFFBBFFBBFFBBFFBBFFFFFFFFFFFFFFFFFFFFBBEEBBDDBBCCBBBBBBBBBBBBBBBBBBBBBBBBBBBBB / /magicmaze-1_4_3_6/data/gfx/title.pcx0000644000175000017500000003166111035125762016072 0ustar kentkent ?Ç,,@ÿ<ÿ<ÿ<ÿ<ÿ<Å<ÿ<ÿ<ÿ<î<ÆÉ<ÂÎ<Â<Å<ÆÂ<Äá<ÿ<ÿ<ÿ<ï<ÂÂÂÈ<ÂÌ<ÂÂÃ<ÂÂÂÂ<ÂÂÈ<ÂÖ<Â<ÈÉ<ÃÉ<ÃÇ<Ãÿ<ÿ<ù<ÃÆ<Â<ÂÃ<Â<Å<ÆÃ<ÂÄÂ<<Â<Â<ÂÆ<ÄÂÃÂ<ÉÂ<ÃÂ<Â<Æ(É<(É<(Ç<(ÿ<ÿ<ø<ÂÂÅ<ÅÂ<ÂÂÂÂÂ<ÂÂÂ<Â<ÅÂ<Â<Â<ÂÅ<ÂÂÂÂÂ<ÂÂÂ<Â<Â<(ÃÂ(É<(É<(Ç<(É<Äÿ<ÿ<ì<ÄÄ<ÂÂÂ<ÂÂÂ<ÂÄÂ<<<<ÂÃ<Â<Â<ÂÅ<ÂÂ<Ä<ÂÂÂÅÂ<(<ÄÉ<(É<(Ç<(É<Â(ÿ<ÿ<ë<ÂÂÄ<ÂÃÂ<ÂÂÂ<Â<ÂÂÂ<Â<ÂÃ<ÂÂ<Â<Â<Ä<ÃÂÂÂ<ÂÂÂÂÄÂ<(Ä<Ë(Ë(Ç<(Ç<ÃÂ(ÿ<ÿ<ì<ÅÃ<Ä<Ã<ËÂ<ÂÂ<ÂÃ<ÅÆ<ÆÂ<ÃÂÂ<Ï<Ä<Â<(Ä<Å(Å(Å(Å(Ç<Å((<(Äÿ<ÿ<í<ÅÃ<Ä<Ã<ËÂ<ÂÂ<ÂÄ<Å<ÆÂ<ÆÂ<ÆÂ<Ï<ÄÂ<(Ä<(Ã((Ã((Ã((Ã(Ç<(Ã((Ã(ÿ<ÿ<ÿ<Í<Â<Ä<Û<ÂÂÂÕ<Â;(Â;Ã(ÂÂ((ÂÂ(Å((ÂÂ(Ç;Â(Â((ÂÂ(Äÿ;ÿ;ÿ;Ë;Ââ;ÄÂÕ;Â;(Ä((ÂÂ((ÂÂ(Â(Ä(ÂÂ(Ç;Â(Â((ÂÂ(Â(ÿ;ÿ;ÿ;ð;ÄÖ;Â;Æ(Å(Å(Å(Å(Ç;Å(Å(Â(ÿ;ÿ;ÿ;ÿ;Ë;Â;Ïà à ÊÇ;Ë(Äÿ;Å;Å=ÿ;ÿ;ÿ;;ð;Ä(ÿ;Ç;Â=ÃFÂ=ÿ;ÿ;ÿ;ð;Ä(î;Å=;Å=Ë;Ã=ÅFÂ=Í;Ç=Ï;Æ=Ë;Ç=ÿ;ÿ;Ã;ð;Æí;Â=ÃFÃ=ÃFÂ=Ê;Â=ÃF=ÃFÂ=Ë;Â=ÅFÂ=Í;Â=ÄF=Ê;Â=ÅFÂ=ÿ;ÿ;Â;ÿ;ã;Â=ÅF=ÅFÂ=É;Â=ÂFÂ=ÄFÂ=É;Â=ÇFÂ=Ë;Â=ÄFÂ=É;Â=ÇFÂ=ÿ;ÿ;;Ç;Æ Ó;à ;à Ë;à ì;Â=ÃF=ÅF=ÃF=É;Â=ÂFÂ=ÅF=È;Â=ÃFÃ=ÃF=Ê;Â=ÄFÂ=É;Â=ÃFÃ=ÃF=ÿ;ÿ;;Æ;   Ñ; à  Ê;  ê;Â=ÃFÂ=ÄFÂ=ÃF=É;Å=ÆF=Ç;Â=ÄF=;=ÃF=É;Â=ÅF=É;Â=ÄF=;=ÃF=ÿ;ÿ;;Å;    Ð;   Â É;  è;Â=ÃFÃ=ÃFÃ=ÃF=Ë;Â=ÇF=Ç;=ÅF=;=ÃF=É;=ÆF=É;=ÅF=;=ÃF=ÿ;ÿ;;Ä;    Ï; ÂÄ   É;   ç;Â=ÄF=;=ÃF=;=ÃF=É;Ã=ÄF=ÃF=Ç;=ÅF=;Â=ÂF=É;=ÆF=É;=ÅF=;Â=ÂF=ÿ;ÿ;;Ä;    Î; Ã Â;   É;   ç;=ÅF=;=ÃF=;=ÃF=È;Ã=ÄFÂ=ÃF=Ç;=ÅF=Â;Ä=É;=ÆF=É;=ÅF=Â;Ä=ÿ;ÿ;;Ä;    Â;à Ä;à Â;   Â; à Å;Å à ç;=ÅF=;=ÃF=;=ÃF=Ç;Â=ÅFÃ=ÃF=Ç;=ÅF=Ï;=ÆF=É;=ÅF=ÿ;ÿ;Ç;Ä:    :  Â:  :   Â: Ä Ã: Â  é:=ÅF=:=ÃF=:=ÃF=Ç:=ÆF=:=ÃF=Ç:=ÅF=Ï:=ÆF=É:=ÅF=ÿ:ÿ:Ç:Ä:   à ÃÄ ÃÅ Â Â:   :    é:=ÅF=:=ÃF=:=ÃF=Ç:=ÆF=:=ÃF=Ç:=ÅF=Ï:=ÆF=É:=ÅF=ÿ:ÿ:Ç:Ä:    Â   Â Â:  Â:  Âà    é:=ÅF=:=ÃF=:=ÃF=Ç:=ÆF=:=ÃF=Ç:=ÅF=:Å=É:=ÆF=É:=ÅF=ÿ:ÿ:Ç:Ä:    ÂÅ  Â Â:  Â:  Â Â   é:=ÅF=:=ÃF=:=ÃF=Ç:=ÆF=:=ÃF=Ç:=ÅFÃ=ÃF=É:=ÆF=É:=ÅF=ÿ:ÿ:Ç:Ä:    Ã Â:  Â Â:  Â:  Â Å  :à å:=ÅF=:=ÃF=:=ÃF=Ç:=ÆFÃ=ÃF=Ç:=ÅFÂ=ÄF=É:=ÆF=É:=ÅF=ÿ:ÿ:Ç:Ä:    ÂÅ  Â Â:  Â:  Â Â  à  å:=ÅF=:=ÃF=:=ÃF=Ç:=ÌF=Ç:=ÅF=ÅF=É:=ÆF=É:=ÅF=ÿ:ÿ:Ç:Ä:    Â   Â Â:  Â:  Â Â  Ä å:=ÅF=:=ÃF=:=ÃF=Ç:=ÌF=Ç:=ÅF=ÅF=É:=ÆF=É:=ÅF=ÿ:ÿ:Ç:Ã: Â  à Ãà  Â :  Â:  Â Â  Ã æ:=ÅF=:=ÃF=:=ÃF=Ç:=ÆFÃ=ÃF=Ç:=ÅFÃ=ÃF=É:=ÆF=É:=ÅF=ÿ:ÿ:Ç:Ã: à Å :  :Å  :  Ã:Å  à  à ç:=ÅF=:=ÃF=:=ÃF=Ç:=ÆF=:=ÃF=Ç:=ÅF=:=ÃF=É:=ÆF=É:=ÅF=ÿ:ÿ:Ç:Ã9à 9à Æ9à Ä9  9à Æ9à Å Å é9=ÅF=9=ÃF=9=ÃF=Ç9=ÆF=9=ÃF=Ç9=ÅF=9=ÃF=É9=ÆF=É9=ÅF=ÿ9ÿ9Ç9×9Ä Ë9  Ã9à í9=ÅF=9=ÃF=9=ÃF=Ç9=ÆF=9=ÃF=Ç9=ÅF=9=ÃF=É9=ÆF=É9=ÅF=Â9Ä=ÿ9ÿ99æ9Ä ô9=ÅF=9=ÃF=9=ÃF=Ç9=ÆF=9=ÃF=Ç9=ÅF=9=ÃF=É9=ÆF=É9=ÅF=9Â=ÂF=ÿ9ÿ99ÿ9ß9=ÅF=9=ÃF=9=ÃF=Ç9=ÆF=9=ÃF=Ç9=ÅF=9=ÃF=É9=ÆF=É9=ÅF=9=ÃF=ÿ9ÿ99ÿ9ß9=ÅF=9=ÃF=9=ÃF=Ç9=ÆF=9=ÃF=Ç9=ÅF=9=ÃF=É9=ÆF=É9Â=ÄF=9=ÃF=ÿ9ÿ99ÿ9ß9=ÅF=9=ÃF=9=ÃF=Ç9=ÆFÃ=ÃF=Ç9=ÅFÃ=ÃF=É9=ÆF=Ê9Â=ÃFÃ=ÃF=ÿ9ÿ99ÿ9Þ9Â=ÅFÃ=ÃF=9=ÃF=Ç9Â=ÆFÂ=ÃF=Ç9Â=ÉFÂ=É9=ÆF=Ë9Â=ÇFÂ=ÿ9ÿ99ÿ9Ý9Â=ÆFÂ=ÄF=9=ÃF=È9Ã=ÅF=ÃF=È9Â=ÇFÂ=Ê9=ÆF=Ì9Â=ÅFÂ=ÿ9ÿ9Â9×9Åÿ99=ÃFÅ=ÃFÃ=9Å=É9È=ÃF=É9É=Ë9=ÄFÃ=Í9Ç=ÿ9ÿ9Ã9Õ9ÂÅ Âþ9=ÂFÂ=Ã9=ÂFÂ=Ø9=ÃF=Ì9Å=Ë9Â=ÃFÃ=ÿ9ÿ9Ø9Ô8É ý8Ä=Ä8Ä=Ù8=ÃF=Ë8Ç=É8Â=ÃFÂ=ÿ8ÿ8Ú8Ô8 Â*à Â* ÿ8Ü8È=ÃF=Ê8É=È8=ÃFÈ=Ï8Å=Ë8Ç=ÿ8î8Ô8 *2, ,2* ÿ8Û8Æ=ÅFÂ=Ê8Ê=Ç8Í=Í8Æ=Ê8É=ÿ8í8Ô8Ç ÿ8Ú8Ï=É8Ë=É8Ë=Ë8Ç=É8Ë=ÿ8ì8Ñ8AÂ8Ç Â8Aÿ8Ö8Ð=É8Ë=È8Ì=Ê8Ç=É8Ì=ÿ8ì8Ñ8B8ÂÇ Â8Bÿ8Õ8Ñ=É8Ë=Ç8Ç=8Å=É8Ç=É8Ç=8Å=ÿ8ì8Ð8CÂÅ ÂCÿ8Ó8Ò=Ê8Ê=Ç8Ç=8Å=É8Ç=É8Ç=8Å=ÿ8ì8Ï8A D AÂÅ ÂA D Aÿ8Ñ8Ç=8Å=8Å=É8Ë=Ç8Ç=8Å=É8Ç=É8Ç=8Å=ÿ8ì8Î8 CEC à  CEC ÿ8Ð8Ç=8Å=8Å=È8Ì=Ç8Ç=Â8Ä=É8Ç=É8Ç=Â8Ä=ÿ8ì8Ì7ABCDEFEDCBA ABCDEFEDCBAÿ7Î7Ç=7Å=7Å=Ç7Í=Ç7Ç=Ï7Ç=É7Ç=ÿ7ò7Î7 CEC  CEC ÿ7Ð7Ç=7Å=7Å=Ç7Ç=7Å=Ç7Ç=Ï7Ç=É7Ç=ÿ7ò7Î7A D AÃ?ÃA D Aÿ7Ð7Ç=7Å=7Å=Ç7Ç=7Å=Ç7Ç=Ï7Ç=É7Ç=ÿ7ò7Ï7 C Ä?Ä C ÿ7Ñ7Ç=7Å=7Å=Ç7Ç=7Å=Ç7Ç=Ï7Ç=É7Ç=ÿ7ò7Ï7 B Ä?Ä B ÿ7Ñ7Ç=7Å=7Å=Ç7Ç=7Ä=Â$Æ7Ç=7Å=É7Ç=É7Ç=ÿ7ò7Ï7 A Ä?Ä A ÿ7Ñ7Ç=7Å=7Å=Ç7Ç=7Â=Ã$Ç7Í=É7Ç=É7Ç=ÿ7ò7Ð7 7Ã?Ã7 ÿ7Ò7Ç=7Å=7Å=Ç7È=Â$Â&$Ç7Í=É7Ç=É7Ç=ÿ7ò7Ð7 7Â6?6Â7 ÿ7Ò7Ç=7Å=7Å=Ç7Æ=Â$&(&$=Ç7Í=É7Ç=É7Ç=ÿ7ò7Ñ7Â78Â7@?@Â78Â7ÿ7Ó7Ç=7Å=7Å=Ç7Ä=Â$(&($Â=Ç7Í=É7Ç=É7Ç=ÿ7ò7Ñ6Â6BÂA6?6ÂABÂ6ÿ6Ó6Ç=6Å=6Å=Ç6Â=Â$Ã(Áÿ($Ã=Ç6Í=É6Ç=É6Ç=ÿ6ò6Ô68Â7?Â78ÿ6Ö6Ç=6Å=6Å=Ç6Â$Ã(ÁÿÂ($Ã=Ç6Ç=6Å=É6Ç=É6Ç=ÿ6ò6Ô6Ã?Ãÿ6Ö6Ç=6Å=6Å=Å6Â$Ã(ÂÿÂ($Ä=Ç6Ç=6Å=É6Ç=É6Ç=ÿ6ò6Ô6Ã?Ãÿ6Ö6Ç=6Å=6Å=Ã6Â$Ä(ÁÿÂ($Å=Ç6Ç=6Å=É6Ç=É6Ç=Â6Ä=ÿ6ì6Ó6Ä?Äÿ6Õ6Ç=6Å=6Å=6Â$Å(ÁÿÂ($6Å=Ç6Ç=6Å=É6Ç=É6Ç=6Å=ÿ6ì6Ó6Ä?Äÿ6Õ6Ç=6Å=6Ä=Â$Å(ÂÿÃ($6Å=Ç6Ç=6Å=É6Ç=É6Ç=6Å=ÿ6ì6Ò6Å?Åÿ6Ô6Ç=6Å=6Â=Â$Æ(ÁÿÂÃ($=6Å=Ç6Ç=6Å=É6Ç=É6Ç=6Å=ÿ6ì6Ñ6Æ?Æÿ6Ó6Ç=6Å=6Ã=$Å(ÁÿÄ($È=Ç6Í=É6Ç=Ê6Ì=ÿ6ì6Ð6È6Èÿ6Ñ6Î=6Ä=Â$Ä(ÁÿÄ($Ç=Ç6Í=É6Ç=Ë6Ë=ÿ6ì6ÿ6ó6Ï=6Å=6$Ä(ÁÿÄ($Æ=È6Ë=Ê6Ç=Ì6É=ÿ6í6ÿ6ó6Ï=6Å=Â6$Ä(ÁÿÄ($Å=É6É=Ë6Ç=Í6Ç=ÿ6î6ÿ5ó5Å=Ã5Å=Ë5Â$Ã(ÁÿÄ($Ä=Ü5Ç=ÿ5ÿ5Ä5ÿ5ó5Ä=Ä5Ä=Î5$Ã(ÁÿÄ($Ã=Û5Ç=ÿ5ÿ5Å5ÿ5ÿ5Ï5$Â(ÂÁÿÄ($Â=Û5Æ=ÿ5ÿ5Æ5ÿ5ÿ5Î5Â$(ÂÿÅ(Â$=Û5Å=ÿ5ÿ5Ç5ÿ5ÿ5Ì5Ã$(ÁÿÂÄ(Â$Â=ÿ5ÿ5è5ÿ5ÿ5Ë5Ã$(ÂÿÄ(Â$Ã=ÿ5ÿ5é5ÿ5ÿ5Ê5Â$Â(ÁÿÄ(Â$ÿ5ÿ5î5ÿ5ÿ5É5Â$(ÁÿÂÂ(Ã$ÿ5ÿ5ð5ÿ5ÿ5È5Â$(Ã(Â$ÿ5ÿ5ó5ÿ5ÿ5Æ5Â$Å(Â$ÿ5ÿ5õ5ÿ4ÿ4Å4Â$Ä(Â$ÿ4ÿ4÷4ÿ4ÿ4Ä4Â$Â(Ã$ÿ4ÿ4ù4ÿ4ÿ4Ã4$Â(Â$ÿ4ÿ4ü4ÿ4ÿ44Â$(Â$ÿ4ÿ4þ4ÿ4ÿ4Ä$ÿ4ÿ4ÿ44ÿ4þ4Ã$ÿ4ÿ4ÿ4Ã4ÿ4ÿ4ÿ4ÿ4ÿ4Å4ÿ4ÿ4ÿ4ÿ4ÿ4Å4ÿ4ÿ4ÿ4ÿ4ÿ4Å4ÿ3ÿ3ÿ3ÿ3ÿ3Å3ÿ3ÿ3ÿ3ÿ3ÿ3Å3ÿ3ÿ3ÿ3ÿ3ÿ3Å3ÿ3ÿ3ÿ3ÿ3ÿ3Å3ÿ3ÿ3ÿ3ÿ3ÿ3Å3ÿÿÿÿÿÅÿ=Ô=Dÿ=ÿ=ÿ=ï=ÿ=Ó=DCDÖ=ÂDë=ÃDÿ=ÿ=ç=ÿ=Ð=CÂDÂBDÕ=DÂBDé=ÃDÂCä=ÃD=DÇ=DÉ=DÃ=DÔ=DÂ=DÍ=Dÿ=ÿ=Ï=CBCÃBCDÓ=DBÂABDç=ÂDC8B@ACDß=ÂDÃCDCÇDCÇD=DCÃDCÃDÏ=ÂDCÂDCDÃ=D=DÄ=DBCDÂ=ÂDÂ=ÃDõ=ÿ=Ï=C78Â7BCDÑ=ÂD87Â67CDæ=DC8987BCDÞ=DÂCÅ89DÅC8ÇCDÂ8ÂCÂ8ÃCDÍ=DÅC8CÂDÂCDCÂD=9Ã8Â9DÂCÂDÃCDô=ÿ=Î=CB89Ã7CDÑ=DC8Â767CDæ=ÂD9Â:98CDÝ=DCÂ8Å9:9Å89Ç8Â9:Â8Â987BCDË=DCBÂCÄ8Â9Ä8ÂCDÂ9Ä:9Â89Â878CDó=ÿ>Î>DC89878CÂDÏ>DC898978CDå>C89:Â;:98DÜ>DC89Æ:;Ð:;Ã:976ABDÊ>DCÄ89:9:;Â:Ã9Â89Â:Ä;:9Â:Ã98CDó>ÿ>Î>ÂD9:Â98CÂDÏ>ÂC8Â9:98CDä>CA8:;Â<;:8CDÚ>DC89:Æ;<Ð;<;:9865BDÉ>Â9Â8Â9Ã:;:;<Â;:Ä9:Â;Ä<;:Â;:Â98CDó>ÿ>Î>D9Ä:98CDÎ>DB789:;:98CDâ>DB79:;Ã<;:8CDØ>DC89:;Ù<;:97BDË>Ä9:Ã;<;Ä<;:Â9:;Ç<;Â<;:98Dô>ÿ>Î>DÂ9:Â;:98CDÌ>DBA79:;<;:9Â8Dà>DC78:;Ä<;:8CD×>DC89Ã:Ð;È<;Ã98DË>D8Â9:;Å<Å;:Ã9:;Â<Â;Ä<;:98Dõ>ÿ>Î>D9:;Â<;:98CDË>DB?68:;<;:987BDß>DC8:;Æ<;:Â89Õ>DCÂ8Ä9Å:Ã9Å:9Â:;Æ<;:Ä9Ë>DC89:;Ä<Â;Å:Å9:Â;Â:;<Â;:9Â8CDô>ÿ>Î>9:;Ã<;Ã:9Ì>B@679:;Â<;976ABDÝ>DC8:;È<;:Ã9Ô>DC87Â8Ä9Ä87Ã8Ã98Â9:;Å<;:Â8Â9Ê>ABC8:;Ã<Â;Â:Ã98Â98Â989Â:Â9:;Â:98ÂCDõ>ÿ>Î>9:;Ä<Â;:Â9Ê>DB568:;Ã<;976ABDÝ>DC8:;É<;:Â9>DÑ>DC8Ä7Ä8ÄCBÃCÃ8Â9:;Å<;:8CD>9É>AÂ78:;Ã<;Â:Ä9EDEDCÂ8CD9Ã89:Â98CÂDö>ÿ>Í>A9;Ç<;:9DÉ>DB78:;Ä<;:97BDÝ>DC89:;Ã<Â;Å<;:Ã9DÐ>DCÂ8ÃBÄCÄDCÃDCBC89:;Ä<;:98CDÊ>CB79:;Ã<;:Â9Ã89ÃECÂDCDE98Ã7898CDø>ÿ>Ì>A79:;Æ<;:9DÈ>DB89:;Æ<;:8CÂDÜ>DC8:;Ã<;Â:;Å<;:98CDÐ>DÅCÄD>DÂ>DÃ>DCBC89:;Â<;:98CÂDÉ>CÂB8:;Ã<;:Â98ÂCDÄEDÂEDÂEDCB7BCDCDù>ÿ>Ì>C8:;Ç<;:98DÆ>DBÂ79;Ç<;:98CDÜ>Â89:;Ã<;:9:Â;Ä<;:98CDÐ>ÅDÌ>DB789:;Ã<;:8CD>DÉ>CB8:;Ä<;:Â8CÂDÌEDÃCD>Dú>ÿ?Í?9;È<;:98CDÅ?DC89;È<;:98CDÚ?DB789:;Â<;:979Â:;Â<;:Ã98Dà?DCB789:;Â<;:98DÌ?ÂC8:;Ã<;:Â8CÃDEDÉEDCÃDý?ÿ?Ê?CD:;É<;Â98CDÅ?C89:;É<;:8CD?9×?DCÂ789:;Â<;97679:;Ã<;:Ã98DÞ?ÃDC89:;Â<;:Â98CDË?ÂD9:;Â<;:Ã98CÃDCDEÃDEÃDÂ8CDCÂDû?ÿ?Ê?DC9:;É<;:8CDÄ?DC89:;É<;:8CD?9Ö?ÂDCÂ89:;Â<;:865679;Ä<;:Â98CDÝ?ÂDC89:;Â<;:9Â8CDÍ?9:;Ã<;:9Ä8ÃC89DÃCDÂCDÂ9Ã8CÂDCù?ÿ?Ê?D89:;Ä<;Ä<;:98DÃ?DC89:;Å<;Ä<;:9Â8Â9×?DÃ9:;Â<;:976Â568:;Ä<;:98CDß?D9:;Â<;:9Â78CDÌ?Â9:;Â<;:9Ã789Ã89:9Ã89Â89:Ä98ÂCBÂD÷?ÿ?É?D89:;Ä<;:Â;Ã<;:8CDÂ?DC89:;Ä<;:Â;Ã<;:Â989Ö?DC89:;Â<;:98Â7Ã679;Ä<;:98DÝ?CDÂ?:;Ã<;:9878DÍ?Â9:;Â<;97678Â9Ä:;Ä:;Ã:;Ã:Â987BCD÷?ÿ?È?DC8Â9:;Ã<;:9:;Â<;:98CÂDC89:;Å<;Ã:;Â<;:98CDÕ?DC89:;Ã<;Ã9Â8Ã79:;Ä<;:98DÜ?DC89:;Ã<;:98CBCDÍ?Â9:;<;:97Â679:Ä;<Ä;<Ã;<Ã;:987BCD÷?ÿ?È?DC89:;Ã<;:979:;Â<;:9Ä89:;Å<;:Ã9:;Â<;:8CDÕ?DC8:;Ã<;978Ã9Ã89:;Å<;:98DÚ?DC8Â9:;Â<;:98CÃDÎ?Â9:;Â<;:97679;Ñ<;:98BCD÷?ÿ?É?D9:;Ä<;97679;Â<;:Å9:;Å<;:Ä9:;Â<;:98DÔ?DC8Â9:;<;97678Ç9:Â;Ä<;:8CÂDÙ?D89:;Â<;:98CDÑ?9:;Ä<;:979;Å<;Ä<;<;Ä<;:9Â8CDø?ÿ?È?DÂ9:;Ã<Â97Â679:;Â<;:Ä9:;Å<;:98989:;<;:98DÓ?DC8Â9:;Â<;97Â678Ç9Â:Â;Â<;:98ÂCDÖ?Ä9:;Ã<;:98DÒ?89:;Ä<;:Â9:;<Ã;:Ä;Ã:;Â<;Â987CDù?ÿ@É@Â9:;Â<;97Â6789:;Ã<;:989:;Å<;:Ä9:;Â<;:Â9EDÑ@DC8Â9:;Â<;:98Â7BCÂ8Ç9Â:;Â<;:9Â8CDÓ@ÂDÃ9:;Ä<;:9DÓ@9:;Å<;:Ã9:;:9:9Ã:9Â89:Â;:98CBCDù@ÿ@É@Â9:;Â<;:9Â7BC89:;Â<;:Ã9:;Å<;:Â98Â9:;Â<;:98CDÏ@DC8Â9:;Â<;:98ÆCD@Ä9Â8Â9:;<;:Â98CDÒ@DC8Â9:;Ã<Â;:Â9Ô@Â9:;Ä<;:98Â9:97Â9Ã8Ã789Â:Â9Â8CDú@ÿ@É@Â9:;Â<;:98Â78Â9:;Â<;:Â9Â:;Å<;:98C8Â9:;<;:Â98CDÏ@DC89:;Â<;:8CÄDCDÆ@DCÂ89:;<;Â:9DE9Ð@DCB789:;Â<;Â:9Ö@9:;Å<;98C89Â87Â8CDÂCBC7Â89Â8CÂDû@ÿ@È@C89:;Â<;:Â9Ã8Ã9:;Â<;Â:Â;Å<;:98CDC8:;Ã<;:98CDÐ@D9:;Â<;:98DÍ@DÂ89:;Â<Â;:Ã9Ñ@DC89:;Â<;:Â98ÂDÔ@Â9:;Ã<;98CBC8CBABCD@ÃDÄCDÂCDý@ÿ@È@C8:;Â<;:Â98CDCÂ89:;Ã<Â;Ç<;:8CD@D89:;Ã<;:8CDÎ@Ã9:;Â<;:9ÂDÎ@D8C89:;Ã<;:98DÏ@DC89:;Ã<;:Â98CDÕ@9:;Ä<;987BÃCBÂDÅ@ÄD@ÂDþ@ÿ@È@89:;<;:Â98CD@DC89:;Ë<;:98CDÂ@Â9:;Ã<;:98CDË@ÂD89:;Â<;:98CDÏ@ÂDC9:;Ã<;:98CÂDË@ÂDC89:;Ã<;:9Â8CDÕ@D9:;Ä<:987ÂBCÂDÿ@Í@ÿ@Æ@ÂA79;Â<;:98CDÂ@DC8Â9:;Ê<;:8CDÄ@D9:;<;:Â98CDÊ@ÂDC89:;Â<;:98CDÏ@DC89:;Ã<;:Â98CDÊ@DCÂ8Â9:;Â<;:98ÂCDÕ@ÂC89:;Ã<;:98Â7BD×@ÃDó@ÿ@Å@ÂCÂ:;Ã<;:98CDÃ@DC8Â9:;È<;:98CDÃ@DC8:;Â<;:98CDÊ@DC89:;Â<;:Â98CDÏ@ÂDC8:;Ä<;:Â98CDÉ@DC8Â9:;Â<;:987BCÂDÂ@ÂD@DÍ@ÃC89:;Ã<;:Â9Â7BCÂDÇ@DÂ@D@DÇ@DCBCDò@ÿ@Ä@DC89:;Â<;:Â98DÅ@DC89:;Ç<;:98CDÄ@DC8:;Ã<;:8CDÊ@DC8:;Ã<;:98CDÒ@D9:;<;Ã<;:98CDÉ@DC89:;Â<;:Â98Â78CÃDÂCDCÂDÂ@DCDÂ@ÂDÂ@CBC8Â9:;Ã<;Â:8Â78ÂCDÂ@ÄDCÂDCDCÂDÂ@ÃDCBABDò@ÿ@Ä@DC8:;Ä<;:Â9Ç@D8Â9:;Æ<;:98DÆ@D9:;Â<;:Â98DÉ@CÂ89:;Â<;:98CDÔ@Â9:;:;Ã<;:98CDÇ@DC89:;Â<;:Ä9Ã8ÃCÃ898ÃCDCBCÂDCÂDÂ@CDC89:;Ä<Â;9898CBCÂDÄC8ÂC89Â8CÂDÃCB76ACò@ÿAÄADC8:;Ã<;:Å9ÅAD8Â9:;Å<;:Â98DÇAD9:;Â<;:98CDÇAC8Â9:;Ã<;:8CDÕAÃ9Â:;Ä<;:98CDÅADC8Â9:;Ã<;:Â9:Ã9Ã8Ã9:9Â87Ç8CDÄADÂ8:Ã;Ä<;:;:Ã8Â9Ä8:Â89:Â989Ã8CB76ACòAÿAÃADC89:;Â<;:Æ9ÅADC89:;Ä<;:Ä9ÇADC89:;<;:98CDÆADC89Â:;Â<;:98DÖA9Ã8:;Å<;:8CDÄADC8Â9:;Ä<;Ã:;:Ç9:;Â:Â9Â:9:Ã98CDÃADC8Ã9;Å<;<;Â:9Ã:9Â:;Ã:;Â:9:Ã987BABDòAÿAÄAD9:;Ã<;:Ç9ÅADC8:;Ä<;:98DÈADC89:;<;:98CDÅADC89:Â;Â<;:98CD×ADC89:;Ä<;:98CDAÂ9Â8Â9:;Æ<Ã;<;:Å9:;<Â;:Ã;Ã:Ã98DÄADC878:È<;Â:Ã;:Â;<Ã;<Â;:;:Â987ÂBCDòAÿAÃADC89:;Ã<;:Æ9ÅADC89:;Â<;:Â98CDÇAD8Â9:;Â<;:98DÄADC89:;Ã<;:98CDØADC89:;Ä<;:98CÂD8Ä9:;Ì<;:Ã9:;Ä<;Ã<;Ã:Â98DÅADÂCD8Â<:;Å<Â;Ã<;É<;<;:Â98CÃDòAÿAÄAD8Â9:Ã;:Ã9Ã89ÆADC89:;<;:98CDÈAD8Â9Â:;<;:98DÄADC89:;<Â;:9Ã8CD×ADC89Â:;Ã<;:Â98CB78Ä9:Â;<Â;Â<Ã;Â<;:Ä9:Â;<Â;<;Â<;Â:98CDÊAÃ8:Ä;<Â;Â<;:Ç;Â<;<;:Ã8DADóAÿAÅA9:Â9Ã:Â9Â8ÂCDÇADC8Â9:;:Â98DÉAD8Ä9:;:Â98DÄADC8Â9:;:Â98C8CÂD×ADCÂ8Â9:Ã;:9Â87ÂABC8Ä9Â:;Â:Â;Ã:Â;:Æ9Â:;Â:;:Â;:Â98CDËA3A79Ä:;Â:Â;:9Ç:Â;:;:8ÂCDöAÿAÅAÇ9Â8ÂCÃDÈADCÂ89:Â98CDÉADCDÂ879:9Â8CDÄADÂC89898Ã7B7BCD×ADBÂ78Â9Ã:98ÂCBÂABÂCÅ89:Â8Â:8Â9Â:98Ç9:Â9:9Â:9Â8CDÎABÂ8Â989:89:Ç9Â89:9:8ÃCDöAÿAÄADÂ89Ã8DÂCÂDÌADÂC8Ã98DËAÂD8767Â8ÂCDÅAÂCBCÃ76AÂBÃCDØACAÂ67Â89Ã8CÂDCÂBCÂDÂCDÂCÂ8ÂCÂ8CÃ89DCÍ89ADCDÏAÃCÂ8767Ê8ÂCD9Â8ÄCDöAÿAÄAÂDCDÂCDAÂDÎADÂBÂ7Â8DÎADCBÂCÃDÆADÂCDÃCBÂCÄDÙADBÂABCÂDÃCDCÃDCDÂAÂDAÃDCÂDÂCÂDÂCDAÅDÉCDÂADÑAÃDÃCACDCÂDÄCÃDADÂCÄD÷AÿAÆAÄDÓADÃBÂDÐAÄDÊAÅDâADÂBÂDÂAÃDADÃADÉADAÄDAÂDÇAÉDØAÃDÃADÂAÄDÅAÂDûAÿAÞADBDADÿAÇAÂDÿAÿAØAÿBüBÆ3ÔBÆ3èBÈ3ßBà3ÏBß3ÈBÿBûBÈ3ÒBÈ3æBÊ3ÝBá3ÍBá3ÈBÿBûBÈ3ÒBÈ3æBÊ3ÜBá3ÍBá3ÉBÿBúBÉ3ÑBÉ3åBË3ÚBâ3ÌBâ3ÊBÿBùBÊ3ÐBÊ3äBÌ3ÙBá3ÍBá3ÌBÿBùBË3ÎBË3ãBÎ3×Bá3ÍBá3ÍBÿBøBÌ3ÍBÌ3âBÏ3ÕBâ3ÌBâ3ÎBÿB÷BÍ3ÌBÍ3áBÐ3ÕBÆ3ÏBÌ3ÌBÏ3ÍBÅ3ÐBÿB÷BÍ3ÌBÍ3àBÒ3ÔBÄ3ÐBÌ3ÍBÍ3ÏBÄ3ÑBÿBöBÎ3ËBÎ3ßBÓ3çBÌ3ÌBÍ3æBÿBõBÏ3ÊBÏ3ÞBÔ3æBË3ÎBË3èBÿCõCÐ3ÈCÐ3ÝCÖ3äCÌ3ÍCË3éCÿCôCÑ3ÇCÑ3ÜCË3CË3ãCÌ3ÍCÌ3éCÿCóCÒ3ÆCÒ3ÛCÊ3ÄCÊ3âCË3ÏCÊ3ÂCÙ3ÐCÿCóCÒ3ÆCÒ3ÚCË3ÄCË3àCË3ÐCÊ3CÚ3ÐCÿCòCÓ3ÄCÔ3ÙCÛ3ÞCÌ3ÐCæ3ÐCÿCñCÔ3ÄCÔ3ØCÜ3ÝCÌ3ÑCä3ÒCÿCñCÕ3ÂCÕ3×CÞ3ÛCÌ3ÒCã3ÓCÿCðCÖ3CÖ3ÖCß3ÚCÌ3ÒCã3ÔCÿCïCÊ3ÂCÖ3ÂCÊ3ÕCà3ÙCË3ÔCá3ÖCÿCïCÊ3ÂCÖ3ÂCÊ3ÔCâ3×CÌ3ÔCà3×CÿCîCË3ÂCÕ3ÃCÊ3ÓCË3ÍCË3ÕCÍ3ÔCË3ÏCÆ3ØCÿCíCÊ3ÄCÔ3ÄCÊ3ÒCÊ3ÐCÊ3ÔCÌ3ÖCÊ3ÐCÄ3ÚCÿDíDÊ3ÅDÒ3ÅDÊ3ÑDË3ÐDË3ÓDË3×DË3íDÿDìDË3ÅDÒ3ÅDÊ3ÐDË3ÑDË3ÑDÌ3ØDË3íDÿDëDÊ3ÇDÐ3ÇDÊ3ÏDÊ3ÔDÊ3ÐDÌ3ÙDË3íDÿDëDÊ3ÇDÐ3ÇDÊ3ÎDË3ÔDË3ÎDÌ3ÚDÌ3ìDÿDêDË3ÇDÏ3ÈDÊ3ÍDË3ÕDË3ÍDÌ3ÕDÅ3DÎ3×DÅ3ÎDÿDéDÊ3ÉDÎ3ÉDÊ3ÌDÊ3ØDÊ3ÌDË3ÕDÆ3ÂDÏ3ÔDÆ3ÏDÿDéDÊ3ÊDÌ3ÊDÊ3ËDË3ØDË3ÊDç3ÃDè3ÏDÿDèDË3ÊDË3ËDÊ3ÊDË3ÙDË3ÈDè3ÄDç3ÐDÿDçDÊ3ÌDÊ3ÌDÊ3ÉDÊ3ÜDÊ3ÇDç3ÇDä3ÒDÿEçEÊ3ÌEÊ3ÌEÊ3ÈEË3ÜEË3ÅEç3ÉEâ3ÓEÿEåEÍ3ËEÉ3ËEÌ3ÇEÌ3ÛEÌ3ÃEè3ÊEá3ÔEÿEåEÍ3ËEÈ3ËEÍ3ÆEÍ3ÚEÍ3ÂEç3ÍEÞ3ÖEÿEåEÍ3ÌEÆ3ÌEÍ3ÆEÍ3ÚEÍ3ÂEæ3ÐEÛ3×EÿEäEÎ3ÌEÆ3ËEÎ3ÅEÎ3ÙEÎ3Eæ3ÒEÙ3ØEÿEþEÄ3ÿEÿEÿEÂEÿEþEÄ3ÿEÿEÿEÂEÿEÿEÿEÿEÿEÅEÿEÿEÿEÿEÿEÅEÿEÿEÿEÿEÿEÅEÂEÈÜEÃÏEÃÐEÃúEÈÒEÃÜEÃEÃÿEùEÂEÆ ÜEÏEÐEúEÆ ÒEÜEEÿEùEÂE Ä ÜEÏEÐEÃúE ÆÒEÜEÃEÿEùEÂE ÇÛEÂÎEÂÏEÄùE ÇÑEÂÛEÅÂÿEøEÂE ÞÂEÃÉÇEÒÆõE ÒÄEÃÉÇEÉEÄÃÃÿE÷EÂFÆ Å Å Å Å ÂFÅÅÇFÅÅÅÂÄÂôFÆ Å Å ÄFÅÅÇFÅFÂÅÿF÷FÂFÆ  à Š Å Ã ÂFÂÂÃÃÇFÃÃÃÂÂÂôF Å Å ÅÄFÂÂÃÃÇFÃÃÂÂÂÃÿF÷FÂFÆ  Â Å  ÄÅ ÂÂFÂÃÂÂÂÆFÂÂÅÂÂÂÂÂôF ÅÅ  ÅÄFÂÃÂÂÂÆFÂÂÂÂÂÂÂÄÿFöFÂF Ã  Â  Â  Ä ÅÂFÂÃÂÂÂÆFÂÂÂÄÂÂÂÂÂÂóF È  ÄÅFÂÃÂÂÂÆFÂÂÂÂÂÂÂÃÿF÷FÂFÆ Å Å Å Å ÂÂFÄÅÂÆFÅÅÅÂÂÂÂóFÆ Å Å ÅFÄÅÂÆFÅÅÂÂÄÿF÷FÂFÈ ×ÃFÍÆFÑËóFÔÅFÍÆFÅÐÿF÷FÅFÅ ÆFÅFÅFÅÅFÄFÅÉFÅFÈÂFÂFÂÂFöFÆFÅFÅÇFÄFÅÉFÂÂFÅFÂÂFÄÿFöFÉF ÂøFÄÂÿFíFÂÿFÿFÆFÉFÄøFÇÿFíFÄÿFÿFÆFÌFûFÄÿFðFÿFÿFÆF ///GGG___www‹‹‹£££»»»ÓÓÓÿÿÿ3G_w£»Óÿ3G_w£»Óÿ3G_w£»Óÿ33GG__ww££»»ÓÓÿÿ33GG__ww££»»ÓÓÿÿ3'G/[;oCƒO›[¯cÃo׃ÿ3G'[/o;ƒC›O¯[Ãc×oÿƒÿÿÿmagicmaze-1_4_3_6/data/gfx/icon.png0000644000175000017500000000124110134226671015662 0ustar kentkent‰PNG  IHDR[ÆgAMA± üabKGDÿÿÿ ½§“ pHYs  d_‘tIMEÔ 0;þ£IDATxœÅ—1k1†7]»¥pC†ö C‰ ñà©¿ PB§€ÉúêŸP÷”lI³té’±¥«âR04p]oÈá¥Ð5ô}öù,ÝÉ—¤}Aèd}¯}ÒI‡;§×ücÝ_×06ƒ•ߺÙðn  ‹}‰ô…Âï…cP'ã^…ÚPÕ£÷¶Týv«P€//áàÂ>\Øöº ÚÓ·@įmQ?ƒcyN$.DÞL[¦8Äú~/´)õ«À—C¥ñÍ’'tl©÷€=Kì’.­ÆæýAЖé°Çàˆd°2iÿé’ßµÌKб0"bŸ”M`Ÿ”[Àw¶šåا¿˜qcgãôºeú4#3Üž—ÀðÈ€ð”ˆCÉB?Hƒý?³šÏ4–>~'D$À¹ÄL¥>dqDÚR¿É¸üù+reO{¤œq%†žì©JÏù¶Ôõ¯@»Ù3"%8#šgY¥s‰/ú‹ï9ÍAuü^èì†Ð2ÿ ´› I°¯¾¾@PÇ㯄ViÊ÷ÒvˆœPíb–鼌 ·ªm§¹âò/+èÓöŽÅõ »ÕcÆGð9d°2h~–o°×œÕöü‚h³M[2ì»Q{åJþZÐÛU%ô“ä–¶\‰¿1ô.T ]'KUH¶^h`(ØydÔà»þ¦ÀŸì+ŒŽ³ë8:ÿñ¯í/LV¸ÜVîÀIEND®B`‚magicmaze-1_4_3_6/data/gfx/sprites.pcx0000644000175000017500000007433311024020454016433 0ustar kentkent ?,,@ÿÿÂàà<àà<ààñÆ òÆ ÑÞ<Þ<Þ<Þ<ÞÚÅËÇ Þ ÇÔÇ Õ ÇÐÞ<Þ<Þ<Þ<ÞËÅÆÃÄÊ ÇÜ ÉÒ ÈÓ ÉÏÞ<Þ<Þ<Þ<ÞÃÎÂÂÃÂÉ ÉÛ ÉÑ ÊÒ ÉÏÞ<Þ<Þ<Þ<ÞÃÂÉÂÃÂÉ ÊÛ Ä0Â+0Ò ÂÅ0ÃÓ1Â+0ÅÏÞ<Þ<Þ<Þ<ÞÄÂÂÄÄÃÂÂÂÉ ÊÛ ÂÅ0Ò 0+Ã0+0ÂÓÂ1Ã0ÃÏÞ<Þ<Þ<Þ<ÞÅÅÃÂÂÂÂÉ ÊÛ ÂÈ0Ð Â00Â0ÂÑÄ1Ä0ÃÏÞ<Þ<Þ<Þ<ÞÄÂÂÄÂÂÂÉ ÇÂÛ ÂÆ0Ñ ÂÅ0ÃÒ Æ0ÃÏÞ<Þ<Þ<Þ<ÞÅÂÃÂÃÂÂÊÄÂÛ ÅÃ0ÂÒ Â0 0ÃÓ Ã0ÆÎÞ<Þ<Þ<Þ<ÞÅÂÂÄÂÂÂÊÄÄÛ ÊÐ Â  ÃÑ ÊÎÞ<Þ<Þ<Þ<ÞÆÂÂÂÃÂÇÄÃÃÄ× ÂÃÅÏ'  ÂÂ&Ð ÄÄÃÍÞ<Þ<Þ<Þ<ÞÅÂÂÃÂÆÆÄÃÃÄÖ ÂÄÂÄÍÂ'ÇÂÂ&Î ÃÂÄÂÍÞ<Þ<Þ<Þ<ÞÅÂÆÄÅÂ'ÄÂÂÄÂ&Ô ÂÅ&ÃÌÃ'&ÂÅÃÄ&Í ÂÅ&ÂÌÞ<Þ<Þ<Þ<ÞÅÂÂÂÅÂÄÄ'ÄÅÃÄ&ÓÂ&Ä%Ã&ÂËÃ'Ã&ÂÅÂÆ&Ì Ã&Ä%Â&ÌÞ<Þ<Þ<Þ<ÞÅÂÂÂÄÃÂÄÂ'%'&ÄÃÄÆ&ÒÂ&%Ä&%Â&ÂËÂ'Å&Â%ÃÂ%È&Ë Â&%Ä&%Â&ÌÞ<Þ<Þ<Þ<ÞÆÃÂÂÄÃÄÄ'%'Â&ÃÃCÂÃ&$Â&ÒÂ&%Ä&%Â&ÂËÂ'Æ&%Ã%É&Ë Â&%Ä&%Â&ÌÞ<Þ<Þ<Þ<ÞÆÃÂÄÄÄ'%'Â&ÄCÃÄ&$&ÒÂ&%Ä&%Ã&ËÂ'&$Ä&%$$%Å&$Ã&Ë Ã&%Ä&%Â&ÌÞ<Þ<Þ<Þ<ÞÃÂÄÂÃÄÂÂÄ'%'Â&ÂÂCÄÄ&$&ÒÂ&%Ä&%Ã&ËÂ'&$Ä&%$$%Å&$Ã&Ë Ã&%Ä&%Â&ÌÞ<Þ<Þ<Þ<ÞÃÃÂÄÈÄÂÄ'%'Â&CÂ@ÅÄ&$&ÒÂ&%Ä&%Ã&%ËÂ'&$Ä&%$"$%Å&$Ã&Ë'Ã&%Ä&%Â&ÌÞ<Þ<Þ<Þ<ÞÄÄÂÃÂÃÄ'%'Â&ÂÂC@ÄÄ&$&Ò&%Å&%Ã&%ËÂ'&$Å&$"$Æ&$Ã&Ë'Ã&%Å&%&ÌÞ<Þ<Þ<Þ<ÞÄÂÂÂÃÅÂÃÃÄ'%'Â&Ã@ÂCÃÄ&$&Ò&%Å&%Ã&%ËÂ'&$Å&$"$Æ&$Ã&Ë'Ã&%Å&%&ÌÞ<Þ<Þ<Þ<ÞÆÃÂÂÂÄÂÂÄ'%'Â&ÄÂ@CÂÄ&$&Ò&%Æ&%Ã&%ËÂ'&$Å&$"$Æ&$Ã&Ë'Ã&%Æ&%&ÌÞ<Þ<Þ<Þ<ÞÆÂÃÃÃÂÅ1'Â&Ã@ÂCÃÄ&0Ò&È%Ã&%Ì10$Å&$"$Æ&$Â0Ì'Ã&È%&ËÞ<Þ<Þ<Þ<ÞÆÅÂÂÂÂÂÅ1Â'&ÂÂCÅÄ&0ÒÅ&Ã0Ä&%Ì10$Å&$"$Æ&$Â0Ì'Ä&Ã0Å&ËÞ<Þ<Þ<Þ<ÞÇÂÂÂÄÆ%'&CÇÃ&%ÒÂÅ&Ã0Ä&%Í%Æ&$"$Ç&%Í'Ä&Ã0Å&ÂÊÞ<Þ<Þ<Þ<ÞÇÂÂÂÂÂÄÇ%ÊÃ&%ÒÍ&%Î%Å&$"$Ç&%Í'Í&ÊÞ<Þ<Þ<Þ<ÞÆÄÂÄÃÃÃÇ%ÊÂ&Â%ÑÂÌ&Â%Î%Å&$"$Æ&Â%ÍÂ'Ì&ÂÉÞ<Þ<Þ<Þ<ÞÄÂÃÂÌÄÇ%ËÂ%ÑÃÌ&%ÏÂ%Ã&%$"$%Ä&Â%Ï'Ì&ÃÈÞ<Þ<Þ<Þ<ÞÃÃÐÂÃÈÄÃÂ%ÑÃÌ&Â%ÐÂ%&Â%$"$Â%Â&Â%Ð'%Ì&ÃÇÞ<Þ<Þ<Þ<ÞÃØÃÇÌÑÃÄ'Ä&Å#ÓÃ%ÆÃ%ÓÅ%Ä$Ä#ÃÆÞ<Þ<Þ<Þ<ÞàÇÅÆÄÿëàà<àà<ààÝÂ$5Þ5ÿÿâà2àà2ÛÃ$ÃÂ5ÊÇ>Ê5ÌËÔÒMÿÐÂÆË2Þ2Þ2Þ2ÙÂ$Â&$Å5ÉÇ?É5ÍËÓÂLÒMëÂ&ÍÂ&ÊÉÄÇÅ2Þ2Þ2Þ2×Â$&(&$Ç5ÆÂ5Ç?Â5ÃÄ5ÎÊÒÄLÒNÉÂËÂÐÂ&ÂÂ&ÉÂ%ÂÂ&ÉÉÉÄ2Þ2Þ2Þ2ÕÂ$(&($È5ÄÄ5Ç@Å5ÒÊÑÅKÒNÈÂÉÂÎ&ÆÂ$ÅÂ$Æ&ÉÇÃÃÈÃ2Þ2Þ2Þ2ÓÂ$Ã( ($É5ÃÃ5Â6Ç@Ã6Â5ÌÇÊÆËÆKGÆKGÄKÌÄÇÄÌ&É#Ã#É&ÈÅÂÃÃÂÆÃ2Þ2Þ2Þ2ÑÂ$Ã( Â($ÊÄ5Ä6ÇAÄ6Â5?ÊÅÈÅËÆKGÆKGÄKËÆÂÃÂÆÊ'ÊÂ#Â#Ê'ÈÃÂÃÃÂÅÃ2Þ2Þ2Þ2ÏÂ$Ã( Â($ÌÂ5Ã6Â7ÇBÂ7Ã65?ÊÃÆÃËÃKÎGKËÆÅÆÊ'ÊÅ#Ê'ÉÂÉ ÂÂÄ2Þ2Þ2Þ2ÍÂ$Ä( Â($ÌÂ5Ã6Ã7ÇBÃ7Â6@Â?ÉÆËÒKÊÇÂÃJÂÇÊ'ÈÂ#ÃJÂ#È'ÊÂ É Ç2Þ2Þ2Þ2ËÂ$Å( Â($ÌÂ5Â6Ã7Â8ÇCÂ8Ã7Â@Â?ÈÃÆÃËÂKGKÅGÂKÄGKGKÊÆÂJÃMJÂÆÊ'ÇÂ#JÃMJÂ#Ç'Ê Ë Æ2Þ2Þ2Þ2ÉÂ$Å( Ã($ÌÂ5Â6Â7Â89ÇC9Â8Â7A@Â?ÈÅÄÅËÂKGËKGKGKËÅJMGMGMJÅÌ('Å#JMGMGMJ#Å'(Ê Ä Å(Ä Å2Þ2Þ2Þ2ÇÂ$Æ( ÂÃ($ÌÂ5Â6Â7Â8Â9ÇDÂ9Â87AÂ@?ÄßÇÂKGÄKÃGÂKGKGKGKËÂÃJÅMJÃÂÌ'Ã(Ã#JÅMJ#ÃÃ('ÅÄ à Â(Æ'(à Å2Þ2Þ2Þ2È$Å( Ä($ÍÂ5Â6Â7Â8Â9ÂDÃ,ÂDÃ98BÂA@Â?ÃÂÇÒÇÂKGKGKGÅKGÃKGKÊÃJÂJÂMGÂMJÂJÃÌÂ(J(Â#JÂMGÂMJ#Â(JÂ(ÆÃ  (Â'&Ä%&Â' Ä2Þ2Þ2Þ2ÉÂ$Ä( Ä($Ì5Â6Â7Â8Â9:Â,Ä-,:9CÂBÂAÂ@?ÃÂÂÅÉÆÇÂKGKGKGÅKGÃKGKÉJPJÂJÃMJÂJPJË(JPJ%Â#JÃMJÂ#%JPJ(ÆÃ  '&%$Ã$Â%& Ä2Þ2Þ2Þ2Ë$Ä( Ä($É>Â?@ÂAÂBCÂDE,-.Â/.-Â:Â98Â7Â654ÂÂÂÂÂÇÂÂÂÇÂKGKGÃKÃGKGÃKGKÈÃJPJÄJMJÄJPJÃË(JPJÄ#JMJÄ#JPJ(È '&%$Å#$%' Ä2Þ2Þ2Þ2Ì$Ä( Ä($È>Â?@ÂAÂBCÂD,-./Â0/.-:Â98Â7Â654ÂÂÂÂÅÂÂÇÂKGÍKGKÈÄJPÅJMÅJPJÄÌ%JPÅJMÅJPJ%Ê '&%#Å"$%& Ã2Þ2Þ2Þ2ÍÂ$Ã( Ä($Ç>Â?@ÂAÂBCÂD,-/0Â10/-:Â98Â7Â654ÂÂÂÂÃÂÂÇÂKGKGKGKGKGKÃGÃKÈÅJËMJÅÍ%JËMJ%Í '&%$Å#$%& Ã2Þ2Þ2Þ2Ï$Ã( Ä($Æ>Â?@ÂAÂBCÂD,-/0Â10/-:Â98Â7Â654ÂÂÂÂÂÂÇÄKGKGKGKGÃKGÃKÉÅÅJMÅJÅÏ%ÅJMÅJ%Î  &%$#Ã"#$% Â2Þ2Þ2Þ2Ð$Â( Ä($Å>Â?@ÂAÂBCÂDE-./Ã0.Â:Â98Â7Â654ÂÂÂÂÃÂÂÇÂKGKGÃKGKÃGÂKGÂKÉÆÄJMJÄÆÐÄ#JMJÄ#Ï  '&Â%Ä$%Â& Â2Þ2Þ2Þ2ÏÂ$( Å(Â$Ä>Â?@ÂAÂBCÂDE,-.Â/.-ÂDCÂBÂAÂ@ÄÂÂÂÂÄÂÂÂÇÂKGÂKÄGÆKGÂKÊÈJMJÈÔ#JMJ#Ó à Â'Â&Â%Â&'à ÂÂ2Þ2Þ2Þ2ÍÃ$( ÂÄ(Â$ÈÂ5Â67Â8Â9Ã:Ã-Â:DÂCÂBÂA@?ÄÂÂÄÇÄÂÇÂKGÇKÃGKGKGKËÇJMJÇÕ#JMJ#ÓÅ Å'Å Å2Þ2Þ2Þ2ÌÃ$( Ä(Â$ÊÂ5Â6Â7Â8Â9Ç:ÂCÂBÂAÂ@?ÄÂÇÉÈÇÂKGËKGKGKÌÂÅJMJÅÂÖ#JMJ#ÔÍ Æ2Þ2Þ2Þ2ËÂ$Â( Ä(Â$Í5Ã6Â7Â8È9CÃBÂAÂ@ÉÇËÅËÂKGÄKÇGÂKGKÎÂÂJMJÂÂØ#JMJ#ÕË Ç2Þ2Þ2Þ2ÊÂ$( ÂÂ(Ã$ÏÂ5Â6Ã7Â8Ç9ÃBÂAÂ@ÊÅÄÅËÂKGÍKGKÐÂJMJMJÂÙ#JMJMJ#ÒÂÂÉ ÂÇ2Þ2Þ2Þ2ÉÂ$(Ã(Â$ÑÄ5Â6Ã7BÇ8BÃAÂ@?ÊÃÆÃËÃKÈGKÄGÂKÐJMJJMJØ#JMJ#JMJ#ÐÄÂÅÂÂÆ2Þ2Þ2Þ2ÇÂ$Å(Â$Ó5ÂÂ5Â6ÃAÇ8ÃAÃ@ËÆÆÅGÅKGÌKÐJMJJMJ×#JMJ##JMJ#ÎÆÂÅÂÄÂÄ2Þ2Þ2Þ2ÆÂ$Ä(Â$ÔÂ5ÂÃ?Ã@AÇ7AÃ@?Â@ÊÃÆÃÆÅHÅKGÂKGÉKÐJMJJMJ×#JMJ##JMJ#ÎÈÆÈÃ2Þ2Þ2Þ2ÅÂ$Â(Ã$Ö5ÅÂ?Ã@Ç6Ã@Ã@ÊÅÈÅÆÄHÅJGÂJGÉJÐÂJMJJMÂJÕ#ÂJMJ##JMÂJ#ÍÈÎÃ2Þ2Þ2Þ2Ä$Â(Â$Ù5ÆÄ?Ç6Â?Ä@ÐÈÍÂIÅJGÃJGÈJÐJÃMJJÃMJÓ#JÃMJ##JÃMJ#ÍÇËÃÄ2Þ2Þ2Þ2ÂÂ$(Â$Û5É?Ç5Ç@ÏÊÎÒIÒÃJÃÃJÕ#ÃJ#Ã#ÃJ#ÕÓ2Þ2Þ2Þ2Ä$Ü5ËÇ5ÈÂ@ÍÊóÃÅÃ×Ã#ÅÃ#ÔÂÔ2Þ2Þ2Þ2Ã$Ý5ÝÂ@ËÊÿÿÌà2àà2ÿÿâà<àà<àà<ÿÿËÖ<Þ<Þ<Þ<Þ<Þ<ÿÿËÖ<Þ<Þ<Þ<Þ<Þ<ÅÖLÿïÖ<Þ<Þ<Þ<Þ<Þ<ÄLÖMLÐMÂLÂKJIÿÔÂÂÓ<Þ<Þ<Þ<Þ<Þ<ÄLMÔOMLÐMÂLÂKJIÚMÂLÂKJIó Å(ÂÌ<Þ<Þ<Þ<Þ<Þ<ÃLMÖOMLÐMLKJIÛMÂLÂKJIØLÅNMKÔ Â(Ã'ÄÂÊ<Þ<Þ<Þ<Þ<Þ<ÃLØMLÐMLKJIÜMLKJIÓÆPLÅNMKÄMË  ÂÂÆÂÈ<Þ<Þ<Þ<Þ<Þ<ÃÚLÎÆ;Ã:ÚMLKJIÑÆPÂOLÄNMKÇLÎ 'ÌÇ<Þ<Þ<Þ<Þ<Þ<ÄKÖHKÐÅ;Â:ÙÆEÃDÔÂPONLÃNMKLÓ' 'ÍÆ<Þ<Þ<Þ<Þ<Þ<ÅKÉH1H1H1ÆHKÒÄ;:ÛÅEÂD×POLÂNMKLÓÂ''ÃÂ'ÇÅ<Þ<Þ<Þ<Þ<Þ<ÆÉJÅ1ÆJÓÄ;:ÜÄEDÙPLÂNMKLÓ(Â''ÅÂ'ÇÅ<Þ<Þ<Þ<Þ<Þ<ÆKG.ÃGÂ0.Å1ÂGÂ.GKÓÄ;:ÜÄEDÓÆIPLÂNMKLÓ(Â'Â'ÍÅ<Þ<Þ<Þ<Þ<Þ<ÆKÄ.Ä0Å1.Â/Â.KÓÄ:9ÜÄEDÒÂIÄÈIÒ(Ã'Â'ÍÄ<Þ<Þ<Þ<Þ<Þ<ÅKGÂ/./Ä01Â0Ã/Â1Ã/KÐÆ;Ã:ÚÄDCÓÈIÃNKLÒ(È'ËÄ<Þ<Þ<Þ<Þ<Þ<ÅKÆ0Â1Å0Â2Ã1Â0KÍÇ;Æ:Â9ÕÆEÃDÖIÂNIÂNKMLÑ(Ê'ÉÄ<Þ<Þ<Þ<Þ<Þ<ÄKÂ020É120Â2Å1KÊÇ;Ç:Å9ÐÇEÆDÂCÒPIÃNIÂNKMLÐ(Ì'ÇÄ<Þ<Þ<Þ<Þ<Þ<ÄK02020Ñ2KÉÇÆÆÂÍÇEÇDÅCÏPOIÃNIÃNKMLÏ(Î'ÄÄ<Þ<Þ<Þ<Þ<Þ<ÃÅL2ÔLÇÆÆÆÅËÇ'Æ&Æ%Â$ÍPONIÃNIÅNMLÏ(Î'ÃÅ<Þ<Þ<Þ<Þ<Þ<ÃLÄM2ÓMLÇÄÇÆÅÊÆ'Æ&Æ%Å$ËPOÍNMLÎ(É'ÂÃ'ÂÅ<Þ<Þ<Þ<Þ<Þ<ÃLMÖOMLÆÄÆÆÅÄÉÄ'Ç&Æ%Å$#ÉÂPOÂNOÉNMÂNMLKÌ(É'ÂÃ'ÂÅ<Þ<Þ<Þ<Þ<Þ<ÃLMÖOMLÆÂÆÇÄÆÈÄ'Æ&Æ%Å$Ä#ÇPÂOÃNOÂNÅGÂNMÃNMLKÌ&Ì'&ÂÆ<Þ<Þ<Þ<Þ<Þ<ÄLMÔOMLÇÇÆÄÆÂÈÂ'Æ&Ç%Ä$Æ#ÆPOÄNOÂNGNGNGNGÂNMÃNMLKÌ&È'Ã&ÃÇ<Þ<Þ<Þ<Þ<Þ<ÄLMÔOMLÈÄÆÅÅÃÉÇ&Æ%Ä$Æ#Â"ÅPOÅNOÂNGNGNGÄNMÄNMLKÌÂ&Ã'Ã&Â$ÃÂÈ<Þ<Þ<Þ<Þ<Þ<ÄLMÔOMLÈÂÇÄÆÄÊÄ&Æ%Å$Å#Ã"ÆPOÄNOÃNGNGNGÅNMÃNMLKÎÂ%&Ä$ÂÂÊ<Þ<Þ<Þ<Þ<Þ<ÄLMÔOMLÉÆÅÅÅËÂ&Ç%Ä$Æ#Ä"ÆPOÄNOÄNÅGÄNMÃNMLKÐÃ"ÄÌ<Þ<Þ<Þ<Þ<Þ<ÅLMÒOMLËÃÅÅÆÍÆ%Å$Å#Å"ÈPOÃNOÅNGNGNGÆNMLKä<Þ<Þ<Þ<Þ<Þ<ÅLÔMLÍÄÆÅÐÃ%Å$Å#Æ"ÊPOÃNOÄNGNGNGÅNMLKå<Þ<Þ<Þ<Þ<Þ<ÅÖLÐÅÄÕÄ$Æ#Å"ÍÂOÅNGNGNGNGÃNÂMLKæ<Þ<Þ<Þ<Þ<Þ<ÿÍÅ#Ä"ÒÃOÃNÅGNÂMÃLè<Þ<Þ<Þ<Þ<Þ<ÿëÇNÂMÂLë<Þ<Þ<Þ<Þ<Þ<ÿÿâà<àà<àà<ÿÿâÍ Ðàà2ààÿÿâÌ ÏÞ2Þ2ÞÞ=ÿíÈ.Ñ$"Â$"Â$"Â$"Â$"Â$"ÅÌ ÏÞ2Þ2Þ=ÜF=ÿêÃ.Ã0.Â0.0Ã.Í$Ã"$Ã"$Ã"$Ã"$Ã"$Ã"ÄÌ ÏÞ2Þ2Þ=ÜF=ÿé.0.Ä0.Â0.Â0.0.Ì$Ã"$Ã"$Ã"$Ã"$Ã"$Ã"ÄÌ ÏÞ2Þ2Þ=ÜF=ÿè.Â0.Ä0.Â0.Â0.Â0.Ì$#Â$#Â$#Â$#Â$#Â$#ÅÌ ÏÞ2Þ2Þ=ÃFÄ ÇE ÂE ÆEÂF=ÿçÂ.Â0.Ä0.Â0.Â0.Ã0.Ë$#Â$#Â$#Â$#Â$#Â$#ÅÍ ÎÞ2Þ2Þ=ÃF ÃÇEÂE ÅEÂF=ÅÃ2ÿÞ.0.Â0.Ä0.Â0.Â0.Ã0Â.ÈÂ%$#Â%$#Â%$#Â%$#Â%$#Â%$#Â%ÃÎ ÍÞ2Þ2Þ=ÃF ÂD  D DÄ ÃDÂEÂF=Ä2Ä1ÝÃ(û.Â0.Â0Ì1Ã0.0.Æ%Ú$#ÂÏ ÌÞ2Þ2Þ=ÃFà ÂC   C ÂCDÂEÂF=Ä21Â1Ü(Ä'ÛÃÜ.Â0.Â01Ê0/Ã0.0.Å%$Â$#Â$#Â$#Â$#Â$#Â$#Â$#Ð ËÞ2Þ2Þ=ÃF ÂÂBà B B BCDÂEÂF=Ä21Â1Ü('Â'ÚÄÚ.Ã0.Â01Ê0/Ã0.Â0.Ä%$Â$#Â$#Â$#Â$#Â$#Â$#Â$#ÂËÄ ÊÞ2Þ2Þ=ÃF CB   B BCDÂEÂF=Ã21Ã21Û('Â'ÚÂÚ.Æ-1Ä0Â)Ä0/Æ-.Ä%$Â$#Â$#Â$#Â$#Â$#Â$#Â$#ÂÉÅ ÉÞ2Þ2Þ=ÃFÄ B   ÂA BCDÂEÂF=Ã21Ã21Ú('Ã('ÙÂÚ-Æ01Ã0Ä)Ã0/Æ0-Ä%$Â$#Â$#Â$#Â$#Â$#Â$#Â$#ÂÉÆ ÈÞ2Þ2Þ=ÃFEÄBÂ@Â@ÂÂ@AÂCDÂEÂF=Ã21Ã21Ò2È('Ã('ØÃÙ-Æ01Ã0Ä)Ã0/Æ0-Ä%$Â$#Â$#Â$#Â$#Â$#Â$#Â$#ÂÃà ÃÇ ÇÞ2Þ2Þ=ÃFÂEDCÂBA@Ç?@AÂBCDÂEÂF=Ã21Ã2Ó1È('Ã('Ò(ÆÃÙ-Æ01Ä0Â)Ä0/Æ0-Ä%$Â$#Â$#Â$#È'$#Â$#ÂÂÅ ÂÇ ÇÞ2Þ2Þ=ÃFÂEDCÂBA@Ç?@AÂBCDÂEÂF=Ã21Ã21Ò0È('Ã(Ó'ÆÃÒÇ.Æ-1Ä0Â)Ä0/Æ-.Ä%$Â$#Â$#Â$#Ç'%$#Â$#ÂÃà ÃÇ ÇÞ2Þ2Þ=ÃFÂEDCÂBA@?Ä>Â?@AÂBCDÂEÂF=Ã21Ã21Ì1Â11È('Ã('Ò&ÆÃÓÇ.Ã0.Â01Ã0Ä)Ã0/Ã0.Â0.Ä%$Â$#Â$#Â$#Ã'ÂÂ'%$#Â$#ÂÄ ÄÇ ÇÞ2Þ2Þ=ÃFÂEDCÂBA@?Â>=>Â?@AÂBCDÂEÂF=Ã21Ã21Ì11Â1È('Ã('Ì'Â''ÆÃÒÇ.Ã0.Â01Â0Æ)Â0/Ã0.Â0.Ä%$Â$#Â$#Â$#Â'Ä'%$#Â$#ÂÃà ÃÇ ÇÞ2Þ2Þ=ÃFÂEDCÂBA@?Ä>Â?@AÂBCDÂEÂF=Ä2110Í1Ä1È('Ã('Ì'Â''ÆÃÌÂÇ.Ã0.Â01Ê0/Ã0.Â0.Ä%$Â$#Â$#Â$#Â'Ä'%$#Â$#ÂÂÅ ÂÆ ÈÞ2Þ2Þ=ÃFÂEDCÂBA@?Ä>Â?@AÂBCDÂEÂF=Ä2110Ü(''&Í'Ä'ÆÃÌÂÇ.Ã0.Â01Ë/Ã0.Â0.Ä%$Â$#Â$#Â$#Ã'ÂÂ'%$#Â$#ÂÉÅ ÉÞ2Þ2Þ=ÃFÂEDCÂBA@Ç?@AÂBCDÂEÂF=Ä2Ã10Ü(''&ÚÐÇ.Ã0.Â0.Ä0.Â0.Â0.Ã0.Â0.Ä%$Â$#Â$#Â$#Ã'ÂÂ'%$#Â$#ÂÊÄ ÊÞ2Þ2Þ=ÃFÂEDCÂBAÉ@AÂBCDÂEÂF=ÅÃ0Ý(Ã'&ÚÚ.Ã0.Â0.Ä0.Â0.Â0.Ã0.Â0.Ä%$Â$#Â$#Â$#Â'Ä'%$#Â$#Ð ËÞ2Þ2Þ=ÃFÂEDCÂBËAÂBCDÂEÂF=æÃ&ÛÃÚ.Ã0.Â0.Ä0.Â0.Â0.Ã0.Â0.Ä%$Â$#Â$#Â$#Ç'%$#Â$#Ï ÌÞ2Þ2Þ=ÃFÂEDCÏBCDÂEÂF=ÿÆÃÛ.Ã0.Â0.Ä0.Â0.Â0.Ã0.Â0.Ä%$Â$#Â$#Â$#'Ç%$#Â$#Î ÍÞ2Þ2Þ=ÃFÂEDCÏBCDÂEÂF=ÿä.Ã0.Â0.Ä0.Â0.Â0.Ã0.Â0.Ä%$Â$#Â$#Â$#Â$#Â$#Â$#Â$#Í ÎÞ2Þ2Þ=ÃFÂEDÑCDÂEÂF=ÿä.Ø-.Ä%$Â$#Â$#Â$#Â$#Â$#Â$#Â$#Ì ÏÞ2Þ2Þ=ÃFÂEÓDÂEÂF=ÿä-Ø0-Ä%$Â$#Â$#Â$#Â$#Â$#Â$#Â$#Ì ÏÞ2Þ2Þ=ÃF×EÂF=ÿä-Ø0-Ä%$Â$#Â$#Â$#Â$#Â$#Â$#Â$#Ì ÏÞ2Þ2Þ=ÃF×EÂF=ÿä-Ø0-Ä%$Â$#Â$#Â$#Â$#Â$#Â$#Â$#Ì ÏÞ2Þ2Þ=ÜF=ÿä.Ø-.Å%Ú$#ÂÌ ÏÞ2Þ2Þ=ÜF=ÿÿÅÚ#ÃÌ ÏÞ2Þ2ÞÞ=ÿÿâÍ Ðàà2ààÿìÉÿÖÅ$ÅÅ$ÿéÿèÑ×Ã÷$à Ã$Ã$à $ÿÍÖÄËÂDÃCÄBÿÒÅ Â Â Â ÂÃÓÆÎÂJæÂ$  Ã$  Â$Ë ÇÉÂÇ ÌÎ#ÍÉÃ%ÊÄÈÂEÃDÃCÄBÃAïÒÊÄà    ÄÂÏOÇÄNËÂJÂIÖÂJÈÕ(Ç ÃÊÇàÊÈ#Ã"Ç#ÉÅÂ%à Â%ÆÂÆÄEÃDÃCÄBÃAÂ@íÂÐÂÉÃà   ÃÃÎÂOÅÄÂNËIÂÃIÐÄIÂJÇÂ' Â' Â' Â' Â' Â' Â' Â'Ç ÊÈàÊ$È#Ã"È#ÉÅ%Ç %ÆÃÅÃEÄ>?ÃCÄBÅ>@ìÂÄÆÅÂÈàÂÃÇàÂÌÂÂOÉNÂËIÃÃIÌÄIÂIÉ& Â& Â& Â& Â& Â& Â& &ÈÊÈÇÊ$È#Ã"È#Æ%  à  %ÂÄFÄEA= Â>ÂCÃBÂ> =?Â@?ìÃÇÅÃÈàÂÂÇ ÂÂÊ OÂNÅ.ÃN ÂÊIÅÃIÃÄIÃIÅIÊ % % % % % % ÈÂÄ Â Ã Ãà  ŠÂÈ%$È#Ã"È#"ÈÄ%   %ÂÂÃÃÂFÅE= =ÂCA@ÃB= =Ã@Â?Íà Çà Ò ÄàÂÈÃÂÂÂÂÃÅÃÂÂÂÂÈ ONÂ+Ã.Â+ÂN ÂÉIÇÅIÂJÃIÇIÅ Ã$Â$Â$Â$Â$Â$ Äࠠà à ÄÈ%$Æ#Ç"Æ#"ÇÃ%É %ÂÂÂÃFÅEÃDCACB@ÂBÃAÃ@Ã?ËÄ ÅÄ ËÄÅ Ä ÃÂÈàÂÂÂÅ ÂÈà ON. . .ÂNà ÉIJIÆIJÄKJÈIÄ ÂÃÏ# ÂÂÅ Â  Ã Â  ÅÇ%$#Ä#Ç"#Ä#"ÆÂÂÂ"%Ç %"ÂÄÂÃFÅEÃDC=CB=ÂBÃAÃ@Ã?Ê  à ÈÆ à ÅÇÂÃÂÂÂÂÃÂÂÂÂÃÈ OÂNÅ.ÃN ÂÊIÄIÂIJÂKÂLÂKJÅÃIJà ÃÄÍ!à ÃÂÅ        ÅÂÇ%$# Å#Ã"Ã# Ã#"ÆÂÃ"%Ç %"ÂÃÃÂÃFÅEÃDÃCÄBÃAÃ@Ã?Ê  à ÈÆÃÆÇ ÂÉà OÂN.O.ÃN ÃËIIÅIJKÄLKJÇIIàÂÅË Ä ÂÂÃÈ  ÃÆÄÇ%$# Ä#Ã"Â# Ã#"ÇÂÂ"%Ç %Â"ÅÂÂÃFÅED= = Â= = Â=AÃ@Ã?ÊÄ ÂÄ ÂÈÆÇÈÆÂ ÂÂÂÃÂÂÂÂÂÂËÂOÂNONOÃNÂÍIIÃÂIJKLÄMLKÃIÃIIÄ ÅÍ!Ä ÄàÃÃÂÅ ÃÂÇ%$Â#É#Ä#"ÈÂ%Â$"%Å %Â$%ÄÂÂÃFÄEÅ= Â= Æ=Â@Ã?ËÄÃÄÄÄÃÄÈÉÇÃÂÂÂÂÅ ÂÂËÃ1ÂNONOÂNÃ0ËÂIIÄIJKLÄNLKJÅÂIÆÅÂ#Â#Â#Â#Â#ÃÄÂÃÆ ÅÇ ÅÂÆ%$Â#É#Ä#"ÇÂ%%Â$%Å %Â$%%ÂÃÃÂFÃEÐ=>@Â?ÍÃÂÃÂÃÄÃÄÂÂ Æ  Æ È ÂÃÅàÂËÃÂ1ÇNÂ0ÃÊÄIÄIJLMNÂONMLJÄIÂIÅ$à $ $ $ $ $ $ Â$ÃÂĠàÇÂÅ& Ä$Ä$Ã#Â$Ä$# !ÆÃ#"%à %"#ÃÃÄFÄEÂ>Ë=Â>Â@?ÇÂÈÂÃÂÇÂÄÂÂà ÄÇà ÂÉ      ÂËÃÂÂ0ÅNÂ0ÅÉIÂÃIÂIKLMOÂPOMLJÂÆIÅ$Â% Â% Â% Â% Â% Â% Â% Â$ÃÂÂÄ Ã ÅÂÅ&%$Ã%Ã%Å$%Ä%#"!Ç%%#"% %"#%%ÄÅÅEDË>AÃ@ÇÄÇÂ ÂÆÂÂÄÂÂÄ ÆÄ ÃÊÂà    ÃÃËÃÅÅNÈÉIÆIKLMOÂPOMLÅIÂÂIÅ$Â& Â& Â& Â& Â& Â& Â& &$ÃÂÃÃ Ä ÄÂÂÂÅ&%$Ã"Ä%Å$Ä%Â"#"!ÈÂ#Â"%Â"Â#ÅÆÄEÃDÃCÄBÃAÂ@ÈÅÆ  ÂÄÂÃÄÃÃÄ Ã Ä ÃÌà    ÃÂÌÂÇÃNÊÈIIÂÃIÂHMNÂONÂHJÂIÃIIÅ$ÂÔ'Â$ÃÂÆ Ä ÅÂÄ &%Â$%Ï"%$"! Ç%Å%Ã#"!"Ã#%Å%ÅÈÂEÃDÃCÄBÃAÊÂÅÃÄÂÄÂÄÄÃÄË ÄÎÄËÂÎÂÇÃNÊÈIIÄIÂHGNÂOGÂHJÅIIÆ$ÇÈ$Ç$ÅÈÂÉÃ" &%$%& Ã" ÂÂ&%"! "Ç%%Ä#"!"Ä#%%ÆÄEÃÃ=ÂDÃCÄBÃ=ÄDÅÂÃÃàÂÃËÂÄÂÂÉ ÄÓÉÒÂÆNÇÃÈÅIÃJKÅGLKÄÅIÇÇ$È"Ç$ÆÈÂÊÃ" &%$%&Ä"Ã$"ÄÂ&%"! "Ç%%Ä#"!"Ä#%%ÆÃÃEÂEÂDÉ=ÃCÃÃDÄÉ  ÎÄÃÆà ÆÕÇÓÂÆNÇÃÉIÆIJKGMGLKÆIÂÂIÎÈ ÍÆÆÃÆÃ"Â%$&Å'"Ã$"Æ'&"Â"Ç%Ã%Ä#"!"Ä#%Ã%ÆÂÂEÄEÇDÈCBÂDÂDÃÉÂÏÃÄÆÅׯÓÂÆÇÃÉÂIÄÂIGJKÂLGÃIÅIIÎÈ ÍÅÂÃÃÂÂÄÂÄ"Â%$&Ä'"Å$"Å'&"Â"È%%$Ã#"!"Ã#$%%ÇÂEÂEDEÅDÈCÃBÂDÃDÃÉÃÂÎÃÅÃÄÅÔÓÂÆÇÃÉÂIÅGIJÃKIGÇIIÆÄÂ"Å"ÃÃÅÃÃÃÃÂÃÃÄ"Ã$%Â'Â&"Å$"Â&Ã'%Ã"È%%$Ã#"!"Ã#$%%ÇÂEÂÅDÈCÈBÃDÃÆÂÃÂÂÂËÂÉÈÃÃÐÓÂÆÇÃÊIÅ ÂJ J ÇIIÄÂ(Ä(Ã(Å(Ã(Ã(Â(ÄÃÃÂÃÂÂÃÂÂÄ"" $%%Ä&"Ã$"Ä&%"% ""É%Â$Â#Â"!Â"Â#$Â%ÈÂEÂÂDÈCÉBÃAÂDÆÅÃÃÃÄÇÇÉÆÃÏÓÂÆÇÃÊIÅ Ä ÆIÇÜ&ÆÅÆÂÃÅÂÄ Â" $%Å$Ã"Å$"% Â" É%Â#Â"#"!"#Â"#Â%ÈÄÈCÉBÆAÂDÅÂÄÄÃÄÄÂÈÅÈÊÂÎÃÓ0.ÆÇÂ.ÌIŠ ÇIÇÂ$ Ä$ Ã$ Å$ Ã$ Ã$ Â$ÆÂÇÆÅÃÇ#"Ã%      "%Â"#Ì$Ã#"!"Ã#$ËÄDÄCÉBÈA@ÇÃÃÅÄÂÄÃÃÇÂÈÊÂÂÈÆÅÆÎ0.ÆÇÂ.ÌIÑIÈÜ!ÇÆÅÅÅÈÂ#ÂÂ%    %"%ÂÂ#Ì$Ã#"!"Ã#$ËÄÃCÈBÈAÄ@ÈÂÂÂÄÂÃÄÂÂÇÂÇÂÇÃÂÆÂÆÂÄÆÂÍÇÈÍIÑIÈÜÉÂÅÅÅÊ#$%Ã"ÂÄ#ÃÂ"%$#!Ì$Ã#"!"Ã#$ËÄCÈBÈAÆ@ÉÅÃÃÃÂÄÇÃÃÂÅÄÃ ÂÆÂÆÂÉÂÍÆÈèÂ" Ä" Ã" Å" Ã" Ã" Â"ÆÅÅÅÃÆÂ$Ã#Ã%ÂÂÃ#%Â#$ÃÊ$Ä#"!"Ä#$ÊÂÅEÃDÄCBÅEÄDÃCBËÂÃÄÂÃÌÂÄÃÂÂÃà  ÃÆÅÃÃÃÃÂÂÌÆÇÂèÜ$ÄÃÄÂÃÆÄÄÂ$Â#ÂÂ%ÂÂ%Â#$ÄÊ$Ä#"!"Ä#$ÊÃEÃDÄCÃBAÃEÄDÃCÄBAçÄÄ Ã Ä Ã ÉÂÅÄÂÅÂÄÌÂÄÂÄÂéÂ'Ä'Ã'Å'Ã'Ã'Â'ÃÃÃÄÂÃÅÃÃÄÅ$ ÂÄÂ$ÅË$Å#"!"Å#$ÉÂÂDÄCÃBÄAÂDÄCÄBÃAåÇÆ ÅÅ Ã ËÆÆÅÌÂÃÃÂÂìÄÃÅÃÃÆÃÂÃÃÄÃÂÂÇÂÑÃÍ$Æ#"!"Æ#$ÈÿÄÄÆÂÃÅ Ä ÷ÃÿÎÂÃÂÇÂÄÃÍÎÒÆ$##Æ$ÉÿÿÿÇ ûÿÿä  æÅ ò çÃ4=Ã>ÍÿíÇ'ÔÑLÉ ÂÂÄÇÙ Å ñ Ä ÅÉ ÏÂ5ÇÂ?ËÖÂÏÆÑëÂ'Ç&Â%ÐÂLÑKÂJÆ NMÂÇ× È ÔÐ Ì Ã Ãà ŠÎ5ÃÅÃ?ÊÅÅÄËÑÂÌÃê'Ë&%ÍÂLÕKJÅ ÂÃÃÃÖ Å Â Ò ÐÂÊ   Å Í6ÂÂÅ ÂÂ@ÉÄÂÉÂÊÂÌÂÄÃÃÃÈËÉÕ'&'(Ç&('&%ËLØKJÄ ÂÖ Ã Ñ ÔÉ     Æ Í6É @ÉÂÂÊÂÅÃÂÍÂÈÂÊÈÃÉÃÍ#Ä'&Â$(Å&(Â$&%ÊLÇKËÈKJà ÂÂÂÖ Æ Ð ÖÇ Â Â ÂÃÃÆ Ë6 Â*à Â* Â@ÈÇËÂÊÆËÆÂÃÆÂÏÂÊÃ#Ã'Â& $(Ã&($ Â&%ÊLÅKÏÆKJà NMÃÃÖ Æ Ç È ÃÃÇÃÃÄà Æ ÂÈÆ Ë6  *2, ,2*  @ÈÄÂËÂÂÈÆËÃÂÃÄÂÓÂÈ##Ã'Â& $(&($ Â&%ÉLÅKÑÅKJÄ NM    ÂÌÇ Â Å Â Ç Â Å ÃÃÅÃÃÂÆÂ ÊÅ Ë7 Ç  AÈÆÄÃÇÇÇÊÃÄÃÃÅÄÅÄÅÆÂ#Â#Â'Â&à $&$à Â&%ÉLÅKÃËÃÆKJÄ NMà  Å  ÂÊ Ê Ã Í Ä ÂÃÂÂÇ ÊÅ Ë7 Ç  AÈÆÄÂÅÂÄÃÒÄÂÃÃÇÃÇÆ#Ã#Â'Â&Ä &Ä Â&%ÉLÅKÏÆKJÅNMÃËÂÈ Ë Â Ï Ã ÂÂÂÃÆÂ ÆÅ Ë8 ÂÇ Â BÈÂÂÃÃÂÃÄÊÄÅÃÃÂÇÂ×Å#Ã#Ã'&  &  &%ÃÃ#ÄLÅKÑÆKJÅNMÄÉÃ È Ì Ï Ã ÃÂÂÄÆÂ ÂÅ Ê9ÂÅ ÂCÇÅÃÃÂÃÂÐÄÃÃÌÂÉÉÉÂ#Â'&  &  &%ÂÂ#Â#ÃLÃKHKÃÄÃÄÃÂKHÃKJÄNMÂÂÉÂÂ Å Ý Ã ÃÂÄÅÄÂÄÆà ÆÅ É7 : 7ÂÅ ÂA D AÆÊÄÃÂÃÊÅÂÂÂÂËÂÃÃÏÃÂÉÂ#Â'& Ã&à &%Â#ÇLÃKHKÂÄÄÂÂKHÃKJÃNMÃÇÂÂ Ä Ý Ã ÃÄËÄÄÆÆÆÆ È 9;9 à  CEC ÅÈÂÅÃÄÃÇÈÄÂÈÂÂÂÅÏÅÊÂ#'& Ã&à &%Â#ÇLÃKHKÄ Â ÄÂKHÃKJÃNMÄÉÃÂ Ä Ý Ã ÌÍÆÂÆÄÆ Æ789:;<;:987 ABCDEFEDCBAÃÇÄÂÆÂÈÃÂÂÃÄÆÄÂÆ  Ã  ÇÊÂ#'& Â& &%Â#ÈLÃKHÂK ÂàÂÃKHÃKJÂÂNMÅÈÃàÂà  ÂÔ Ä Ã ËÌÆÆÂÇ È 9;9  CEC ÅÈÆÃÂÃÂÂÄÃÂÅÅÅÃÆ àÇÌÂ#&$à &à $&Â#ÈLÃKHÂKÂÃÃÃÂÃKHÃKJÂÂNMÌÃÄ ÂÃ Ä Ò Â Â Ä ÉÊÇÃÃÇ È7 : 7Ã?ÃA D AÅÂÅÅÅÂÃÃÄÃÂÃÆÅÄŠàÆÊÃ$Ã#Â&Ã$&Ã$Â&Ã#Ã$ÅLÃKHÃKÂÃÃÂÄKHÃKJÂÂNMÃÆÃà ÂÃ Å Ò Â Â Ä ÈÂÂÉÇÃÃÇ É 9 Ä?Ä C ÆÂÄÆÄÃÂÂÌÂÆÂÄÄÅŠàÆÉÇ$#Ã&Â%&Â%Ã&#Ç$ÃLÃKHÃKÅÃÅÄKHÃKJÂÂNMÉÃÅ Âà ŠΠ à ŠÆÇÈÂÃÂÇ É 8 Ä?Ä B ÆÅÂÈÂÄÐÃÄÃÅÂÅÆÈÈÉÃ$ÄÃ$É&Ä$ÃÃ$ÂLÃKHÄKÃÃÅKHÃKJÂÂNMÂÆÃÅ ÂÃ Ä Î Ã Ã ÆÂÐÂÉÂÃÆ É 7 Ä?Ä A ÆÎÂÂÂÂÅÂÉÃÂÃÄÇÇÆÆÊÂ$ÆÂ%É&Â%ÆÂ$ÂLÃKHÄKËÅKHÃKJÃÅÂÄÃÅÂ Ä Ä Â Ê Ä Ã ÆÂÐÉÄÂÄ Ê Ã?à ÇÏÃÃÄÇÈÂÃÂÃÃÂÈÅÅÊÂ$ÅÄ%Â'Å&Â'Ä%ÅÂ$ÂLÄK ŠÂÅKJÄÂÄÂÃÅ ÂÂÃ Ä Ã Ê Ä Ã ÇÂÑÉÃÄÄÄÃà É Â6?6 ÇÊÂÃÃÅÄÏÃÂÃÃÂÉÃÃÃËÂ$ÄÃ%Ã'&Ã&Ã'Ã%ÄÂ$ÂKÄJÂÅÂÅJIÄÅÃÂÂÆÃÄÉ Ä È É Ç      ÉÄÈÄ ËÂ8Â7@?@Â78ÂÈÃÃÂÄÓÄÂÅÂÄÃÊÂÃÂÍÂ$ÂÂ%ÂÃ'ÇÃ'ÂÂ%ÂÂ$ÃLÂKJKÃÅÃKJÃKJÆNMÄÂÆÃÄÉ Ä È Ò      ÉÄÅÈÅÄÊÂBÂA6?6ÂABÂÈÃÃÄÃÊÆÂÇÇÃÄÃËÇÂÂÊÂ$Â%ÃÂ'Å'ÃÂ'Ã%ÂÂ$ÄKÂJÃKÉÃKÄJÆNÃMÃÂÄÃÃÄÉ Ä È ÒÐÉÂÅÆÆ ÂÍ8Â7?Â78ËÂÂÃÂÃËÂÅÈÂÂËÂÌÅÂÂÌ$Â%ÃÃ'ÃÂ'ÃÂ'Ã%Â$ÇLÉKHÊKJÏÃÄÄÄÏ È Ò      ÉÄÄÂÂÃÄÄÍÃ?ÃËÂÃÂÆËÑÂËÄÍÄÂÃÌÂ$Â%ÃÃ'Â'ÃÂ'ÃÂ%Â$ÇLÉKHÊKJÎÄÄÄÔ Ç Ó      ÉÂÄÂÂÃÅ ÂÍÃ?ÃËÍÂÈÂÍÂÄÅÂËËÂÅÄÎ$ÂÂ%ÃÄ'ÃÂ'ÃÂ%Â$ÈLÉKHÊKJÎÄÄÄÔ Ç ÓÐÉÄÄÂÂÂÄÄÌÄ?ÄÊËÃÃÃÄÂÅÄÂÊÂÉÂÉÅÅÅÌ$ÃÃ%ÆÃ'ÂÃ%Ã$ÈLÔHJÇÂÂÃÄÄÄÃÂÂÎ Ç ÓÐËÅÂÂÂÅ ÍÄ?ÄÊÆÌÂÑËÄÅÂÉÂÃÉÌÂ$ÈÄ'ÃÂ%ÄÂ$ÉÂKÄJÂIÃÂKÅJÂIÉÃÄÄÂÆÃÂÐÂ Ç ÒÎÌŠ ÓÅ?ÅÉÔÆÏÂÓÉÇÇÍÃ$ÑÃ$ÉKÈJIKÉJIÉÊÂÊÕË ï    ÒÆ?ÆÈÃüÿÆKÈJIKÉJIÊÃÂÄÄÄÂÃÿÐ Ä  Ä ÐÈÈÇÿààÂÂÇÇÇÐÇÿÿÿÏæÇÇÇÅÇÇÇÆÂÃÃÇ ÃÅÿæÂØÄÂØÄÂÛæÇÇÇÅÇÇÇËÂÍ Âÿé ÂÖ ÂÖ ÂÚæÇÇÇÅÇÇÇÊÑ ÃÅÚåÚÄ ÂÔàÂÔàÂÙÃÚÃàÄÇÇÇÆÂÓ ÃÄØÅÚÆÚàÂÒÄ ÂÒÄÂÂ ÂØÃØÅÇÇÇêÄÒ ÇØÅØÆÂ×àÂÐÅ ÂÐÅ Â×ÃØÅÇÇÇé Ï ÄÆØÅØÆÂÂÂÂÎÃÂÂÓÆÂÂÂÓÆÂÂÂÚÃØÅÇÇÇÅÂÂÆÂÆÂÆÂÄÃà ÂÂË Â ÅØÅØÆÂÑÃÃÂÓÆÂÃÂÓÆÂÃÂÚÃØÃàÄÇÇÇÆÄ ÃÂÇ ÂàÅÄÐÄÅØÆÂÂÃÃÎÃÄÓÆÂÄÓÆÂÄÚÃØÉÇÇÇÅÇÇÇÅÅ ÅÄ ÂÄÄ ÄÄÎÄÅØÆÅÂÓÃÅÓÆÂÅÓÆÂÅÚÃÅÍÅÉÇÇÇÅÇÇÇÅÅ ÆÂ ÆÄ ÄÄÎÄÅÅÎÅÆÚÃÅÓÆÂÅÓÆÂÅÚÃÅÌÅÉÇÇÇÅÇÇÇÅÆ ÆÂÆÅ ÄÄÎÄÅÅÌÅÆÚÃÅÓÆÂÅÓÆÂÅÚÃÅÌÅÃàÄÇÇÇÄÇ ÄÂÂÂÄÆ ÃÄÎÄÅÅÌÅÆÂ(ÃÂ(ÃÇ(ÈÃÅÓÆÂÅÓÆÂÅÚÃÅÌÅÅÇÇÇæÇ ÂÂÆÂÇ ÃÄÅÃÆÄÅÅÌÅÆÂÂ(Â(Ä(Â((Ã8ÄÃÅÓÆÂÅÓÆÂÅÚÃÅÌÅÅÇÇÇæÈ ÂÊÂÇ ÃÄÅÆÄÅÅÌÅÆÂÂ(Â(Ç(Å8ÄÃÅÓÆÂÅÓÆÂÅÚÃÅÌÅÅÇÇÇÅÂÂÆÂÆÂÆÂÄÇ ÂÌÂÆ ÃÄÅÂÆÄÅÅÌÅÆÂÅ(Ç(Å8ÄÃÅÓÆÂÅÓÆÂÅÚÃÅÌÅÃàÄÇÇÇÄÅ ÂÂÊÂÅ ÃÄÎÄÅÅÌÅÆÂ((((ÂÂL8ÄÃÅÓÆÂÅÓÆÂÅÚÃÅÌÅÉÇÇÇÅÇÇÇÄà ÂÄÊÃÂà ÃÄÎÄÅÅÌÅÆÂ(((Â(LL8ÄÃÅÓÆÂÅÓÆÂÅÚÃÅÌÅÉÇÇÇÅÇÇÇÄ ÂÆÉÆÂ ÃÄÎÄÅÅÌÅÆÂ(((Â(LL8ÄÃÅÓÆÂÅÓÆÂÅÚÃÅÌÅÉÇÇÇÅÇÇÇÅÝÄÄÎÄÅÅÌÅÆÂ(Ã(ÃÂ(ÃL8ÄÃÅÓÆÂÅÓÆÂÅÚÃÅÎÅÃàÄÇÇÇÅÉ ÇÉ ÄÄÏÄÅÅÍÅÆÂ(Ã(ÂÂ(LL8ÄÃÅÓÆÂÅÓÆÂÅÚÃØÅÇÇÇçÊ ÆÉ ÄØÅØÆÂ(Ã(ÂÂ(LL8ÄÃÅÓÆÂÅÓÂÄÂÅÚÃØÅÇÇÇèÉ ÆÈ ÅØÅØÆÂ(Ã(Â(LLÃ8ÂÃÅÓÆÂÅÓÄÂÂÅÚÃØÅÇÇÇÅÂÂÆÂÆÂÆÂÄÃÉ ÅÉ ÅØÅØÆÂ(Ã(Ç(ËÃÅÓÆÂÅÓÂÃÂÅÚÃØÃàÄÇÇÇÇÉ ÄÈ ÆØÅØÆÂ(Ã(Ç(ËÃÅÓÆÂÅÓÃÅÅÚÃØÉÇÇÇÅÇÇÇÈÈ ÃÈ ÇÙÅØÆÃ(Ã(ÅÃ(ÊÃÅÓÆÂÅÎÂÂÃÄÅÙÃÙÉÇÇÇÅÇÇÇÆÂÇ ÃÇ çÙÆÚÃÅÓÆÂÄÏÂÃÃÃÄÚæÇÇÇÅÇÇÇÊÇ Ç ÄÿÄÚÃÅÓÆÂÃÐÃÃÃÂÃÛààÄÇÇÇÇÃÂÅ Å ÂÄÿÆÚÃÅÓÆÂÂÒÃÃÂÂÂÜâÇÇÇïÃà à ÃÄÿæÅÓÆÂÔÃÃÂÝâÇÇÇëÆÇÿîÅÓÆÃÖÃÃÄÞâÇÇÇÅÂÂÆÂÆÂÆÂÄÿÿÃÅÓÆÿÂÿÂÅÓÆÿÂß Å ÙÅÓÆ2Å1Ù0/2Å1Ù0/þÄÓÅÂÂÂØÄÂÊÍÂÂ Ñ ÆÄ  Ä ØÅÓÆ12Ä1Ø0/.12Ä1Ø0/.ýÂÂÃÓÄà ÂÖ ÂÅÃÌÂ Ë ÅÉ Â Ä ÖÂÅÓÆÂ12Ä1Ö0/Â.Â12Ä1Ö0/Â.üÃÃÂÓÃÄ ÂÔàÂÅÂÉÃ Â Æ ÅÌ à à ÕÃÅÓÆÃ12Ã1Õ0/Ã.Ã12Ã1Õ0/Ã.ûÄÄÓÂÅ ÂÒÄÂÂ ÂÆÉÄ à  ÃÐ ÂÄ Ø ÄÅÓÆÄ1Ø2Ä.Ä1Ø2Ä.úÅÅÓÆÂ ÂÐÅ ÂÅÊÅ Ä Ñ ÃÃ Ö ÃÂÅÓÆ0Ã12Ö1Ã.Â-0Ã12Ö1Ã.Â-úÆàÂÂÓÆÂÂÂÈÊÅ Å Ï ÃÃ É Ì ÄÅÓÆÃ012É1Ì01.Ä-Ã012É1Ì01.Ä-úÆàÃÂÓÆÂÃÂÈÅÄÄ à Â Í ÄÄ Æ ÈÇ ÄÅÓÆÄ02Æ1È0Ç/1.Ä-Ä02Æ1È0Ç/1.Ä-úÆàÄÓÆÂÄÈÅÄÄ à  Ë ÅÄ Å ÅË ÄÅÓÆÄ02Å1Å0Ë/1.Ä-Ä02Å1Å0Ë/1.Ä-úÆàÅÂÏÂÆÂÅÈÃÂÅà Ã É ÆÄ Ä ÃÎ ÄÅÓÆÄ02Ä1Ã0Î/1.Ä-Ä02Ä1Ã0Î/1.Ä-úÆàÅÂÍÂÆÂÂÃÈÂÇà Ä Ç ÇÄ à ÃÏ ÄÅÓÆÄ02Ã1Ã0Ï/1.Ä-Ä02Ã1Ã0Å/-É/1.Ä-úÆàÅÂËÂÆÂÂÂÇÂÈÂà  Å Å ÈÄ à ÂÐ ÄÅÓÆÄ02Ã1Â0Ð/1.Ä-Ä02Ã1Â0Å/-,0È/1.Ä-úÆàÅÂÉÂÆÂÄÂÅÂÇÃÂà  Æ à ÈÂÄ  ÂÑ ÄÅÓÆÄ02Â1Â0Ñ/1.Ä-Ä02Â1Â0Æ/-,0È/1.Ä-úÆàÅÂÇÂÆÂÅÂÂÂÇÂÃÆ È Ã ÉÄ  ÂÑ ÄÅÓÆÄ02Â1Â0Ñ/1.Ä-Ä02Â1Â0Æ/-,0È/1.Ä-úÆàÅÂÅÂÆÂÅÄÂÄÃÅÆ É  ÊÄ  Ò ÄÅÓÆÄ02Â10Ò/1.Ä-Ä02Â10Ç/-,0È/1.Ä-úÆàÅÂÅÂÆÂÄÅÂÈÂÄ Ê ËÄ ÂÒ ÄÅÓÆÄ021Â0Ò/1.Ä-Ä021Â0Ç/-,0È/1.Ä-úÆàÅÂÅÂÆÂÂÂÂÂÆÂ ʠÊÄ ÂÒ ÄÅÓÆÄ021Â0Ò/1.Ä-Ä021Â0Ç/-,0È/1.Ä-úÆàÅÂÆÂÆÂÂÂÂÂÄÃÆÄ Ê ÉÄ Ó ÄÅÓÆÄ0210Ó/1.Ä-Ä0210È/-,0È/1.Ä-úÆàÅÂÉÂÆÂÃÇÃÅÄ Ê ÈÄ Ó ÄÅÓÆÄ0210Ó/1.Ä-Ä0210Æ/Ã-,0Â-Æ/1.Ä-úÆàÅÂÊÂÆÂÃÇÂÂÅÄ É ÃÇÄ Ó ÄÅÓÆÄ0210Ó/1.Ä-Ä0210Å/-Ç,-Å/1.Ä-úÆàÅÂÍÂÆÂÂÂÆÄÂÄÅ È ÅÆÄ Ó ÄÅÓÆÄ0210Ó/1.Ä-Ä0210Æ/Ã0,Ã0Æ/1.Ä-úÂÄàÅÂÎÂÂÄÂÃÅÄÃÄÂÄ Ç ÇÄÂÄ Ó ÄÅÓÆÄ0210Ó/1.Ä-Ä0210È/-,0È/1.Ä-úÄÂàÅÓÄÂÂÅÅÄÃÄÄÂ Æ ÉÃÂÄ Ó ÄÅÓÆÄ0210Ó/1.Ä-Ä0210È/-,0È/1.Ä-úÂÃàÅÓÂÃÂÅÄÄÃÅÂÃ Æ ËÂÂÄ Ó ÄÅÓÆÄ0210Ó/1.Ä-Ä0210É/-É/1.Ä-úÃÃàÅÓÃÅÅÄÄÂÆÃÄ Å ÍÂÄ Ó ÄÅÓÆÄ0210Ó/1.Ä-Ä0210Ó/1.Ä-öÂÂÃÂÆÓÆÅÎÂÂÃÄÅÃÄÂÂÂÂÃÃ Ä ÏÂÂÄ Ô ÃÅÓÆÄ021Ô/1.,Ã-Ä021Ô/1.,Ã-öÂÃÃÅÓÅÄÏÂÃÃÃÄÃÄÄÂÃàà ÑÂÄ Ö ÃÅÓÆÄ02Ö1.Ã,-Ä02Ö1.Ã,-öÃÃÃÄÂÓÂÄÃÐÃÃÃÂÃÃÅÃÂÃÃà  ÓÃÄ ×ÄÅÓÆÄ02×.Ä,Ä02×.Ä,÷ÃÃÂÃÃÓÃÃÂÒÃÃÂÂÂÃÂÅÂÄÃà ÐÆÂÃÂÔÂÃÅÓÆÃ0/Â.Ô-Â,+Ã,Ã0/Â.Ô-Â,+Ã,øÃÃÂÄÓÄÂÔÃÃÂÃÂÃÄÄÃà  ÊÇÈÂÃÔÃÂÅÓÆÂ0/Ã.Ô-Ã,+Â,Â0/Ã.Ô-Ã,+Â,ùÃÃÅÓÅÂÖÃÃÄÃÃÃÅÄÃàÃÈÐÂÃÖÃÅÓÆ0/Ã.Ö-Ã,+,0/Ã.Ö-Ã,+,ÿÂÅÓÆÿ ÞÄÖÄÂÅÓÆ/Ä.Ö-Ä,+/Ä.Ö-Ä,+ßPOßPOà(Å'Ù&%ÿàÅÓÆÿÂPÑOÆNÄMNOLÂPÑOÆNÄMNOLÂÑÆÄ'(Ä'Ø&%$ÂÂØâÞÅÓÆÿPOPËOÅNÉMNOLGPOPËOÅNÉMNOLGËÅÉÂÂ'(Ä'Ö&%Â$ÂÖÂÃÜBÂÞÅÓÆÿPÂOPÆOÅNÌMNOLJGPÂOPÆOÅNÌMNOLJGÂÆÅÌÂÃ'(Ã'Õ&%Ã$ÂÔÃÃBCÆÄËCBÂÞÅÓÆÿPÃOPÂOÃNÐMNOLÂJGPÃOPÂOÃNÐMNOLÂJGÃÂÃÐÃÄ'Ø(Ä$ÂÂÒÄÃBDÊÂÊDBÂÞÅÓÆÿPÄOPONÑMNOLÃJGPÄOPONÑMNOLÃJGÄÑà &Ã'(Ö'Ã$Â#ÂÂÐÅÃBÂEÈÂÅÃÂEÂBÂÞÅÓÆÿPÅOPONÏMNOLÃJIGPÅOPONÏMNOLÃJIGÅÏÄ Ã&'(É'Ì&'$Ä#ÂÂÓÆÃBÃÔFÃBÂÞÅÓÆÿPÃOÂNOPONÍMNOLÄJIGPÃOÂNOPÏONOLÄJIGÃÂÍÅ Ä&(Æ'È&Ç%'$Ä#ÃÂÓÆÃBÂFËÂÂFÃBÂÞÅÓÆÿPÃONMNOPONËMNOLÅJIGPÃONMNOÏPOLÅJIGÃËÅ Ä&(Å'Å&Ë%'$Ä#ÄÓÆÃBÃFà ÄÇFÃBÞÅÓÆÿPÂONÃMNOPONÉMNOLÆJIGPÂONÃMNP2Í1LKÅJIGÂÃÉÆ Ä&(Ä'Ä&Í%'$Ä#ÅÃÍÃÆÃBÃF ÂÅÂFÂBÞÅÓÆÿPÂONÄMNOPONÇMNOLÇJIGPÂONÃMOP1210Ç/01.LKÅJIGÂÄÇÇ Ä&(Ã'Ã&Ä%Ã(È%'$Ä#ÅÃËÃÆÃBÂF ÅÂÃÂFBÂÞÅÓÆÿPÂONÅMNOPONÅMNOLÈJIGPÂONÃMOPÂ1210Å/01.,LKÅJIGÂÅÅÈ Ä&(Ã'Â&Å%('&È%'$Ä#ÅÃËÃÆÃBÂFÈÂÃÂÃFÃBÂÞÅÓÆÿPÂONÆMNOPONÃMNOLÈJÂIGPÂONÃMOP101210Ã/01.,-LKÄJÂIGÂÆÃÈ Ä&(Â'Â&Æ%('&È%'$Ä#ÅÃËÃÆÃBÃFÈÃÂÂFÂBÂÞÅÓÆÿPONÈMNOPOÃNOLÉJIHGPONÄMOP1/0121Ã01.Â,-LKÄJIHGÈÃÉ Ä&(Â'Â&Æ%('&È%'$Ä#ÅÃËÃÆÃBÃFÈÃÄÂFÂBÂÞÅÓÆÿPONÉMNOPONOLÊJIHGPONÄMOP1Â/012101.Ã,-LKÄJIHGÉÊ Ä&(Â'&Ç%('&È%'$Ä#ÅÃËÃÆÃBÃFÄÂÆÂFÃBÂÞÅÓÆÿPONÊMNOPOLËJIHGPONÄMOP1Ã/0121.Ä,-LKÄJIHGÊË Ä&('Â&Ç%('&È%'$Ä#ÅÃËÃÆÃBÃFÆÃÂFÃBÞÅÓÆÿPONÊMÂNOPHIÊJIHGPONÄMOP1Ã/Â012*+Ã,-LKÄJIHGÊÂ Ê Ä&('Â&Ç%('&È%'$Ä#ÅÃËÃÆÃBÃFÅÅÂFÂBÂÞÅÓÆÿPONÊMNOLHGHIÉJIHGPONÄMOP1Ã/01.*)*+Â,-LKÄJIHGÊ É Ä&('&Å%Ä('&Ã(Å%'$Ä#ÅÃËÃÆÂBÃFÆÄÃFÂBÂÞÅÓÆÿPNÊMNOLJIHGHIÈJIHGPNÅMOP1Â/01.,+*)*+,-LKÄJIHGÊ È Ä&('&Å%(Ç'&Å%'$Ä#ÅÃËÃÆÃBÂFÈÂÄFÃBÂÞÅÓÆÿPNÉMNOLÃJIHGHIÇJIHGPNÅMOP1/01.Ã,+*)*+-LKÄJIHGÉÃ Ç Ä&('&Å%(Ã&'Ä&Å%'$Ä#ÅÃËÃÆÃBÃFÇÂÂÂÂFÃBÞÅÓÆÿPNÈMNOLÅJIHGHIÆJIHGPNÅMOP101.Å,+*)*-LKÄJIHGÈÅ Æ Ä&('&È%('&È%'$Ä#ÅÃËÃÆÃBÃFÈÃÃFÂBÂÞÅÓÆÿPNÇMNOLÇJIHGHIÄJIÂHGPNÅMOP01.Ç,+*),LKÃJIÂHGÇÇ Ä  Ä&('&È%('&È%'$Ä#ÅÃÌÃÂÄÃBÃFÃÂÃÃÅFÂBÂÞÅÓÂÄÿPNÆMNOLÉJIHGHIÃJIÂHGPNÅMOP1.É-Â,+LÄJIÂHGÆÉ à  Ä&('&È%(Â&È%'$Ä#ÅÓÄÂÃBÂFÂÄÇFÃBÂÞÅÓÄÂÿPÆMNOLËJIHGHIÂJIÂHGPÆMNÏLIJIÂJIÂHGÆË   Ä&('&Ó%'$Ä#ÅÓÂÃÃBÂFÄÃÈFBÂÞÅÓÂÃÿPÅMNOLÍJIHGHIJIÂHGPÅMNOLÎKJIHIJIÂHGÅÍ   Ä&('&Ó%'$Ä#ÅÓÃÃÃBÂÔFÂBÂÞÅÓÃÄÿPÄMNOLÏJIHGHÂIÂHGPÄMNOLÏJIHGHÂIÂHGÄÏ   Ä&('Ô%'$"Ã#ÅÎÂÂÃÂÃBÂEÂÆÊEBÂÞÅÎÂÂÃÃÿPÃMNOLÑJIHGHIÂHGPÃMNOLÑJIHGHIÂHGÃÑ  Ä&(Ö'$Ã"#ÄÏÂÃÃÃBDÈÂÈÂDBÂÞÄÏÂÃÃÂÿPÂMNOLÓJIHGÃHGPÂMNOLÓJIHGÃHGÂÓ à Ä&(×$Ä"ÃÐÃÃÃÃBCÇÃÃÃÄÂÂCBÞÃÐÃÃÃÿPMNOLÐJÆIHGÂHGPMNOLÐJÆIHGÂHGÐÆ  Ã&%Â$Ô#Â"!Ã"ÂÒÃÃÂÃÜBÂÞÂÒÃÃÂÿPNOLÊJÇIÈHGHGPNOLÊJÇIÈHGHGÊÇ È Â&%Ã$Ô#Ã"!Â"ÔÃÃÕÆÄÞÔÃÃÿPOLÃJÈIÐHÂGPOLÃJÈIÐHÂGÃÈ Ð Â &%Ã$Ö#Ã"!"ÂÖÃÃÅÜÞÂÖÃÃÂÿOLÞGOLÞGÝ %Ä$Ö#Ä"!ÿààÿ ,,,DDD]]]uuu‰‰‰¡¡¡ºººÒÒÒÿÿÿ0D]u¡ºÒÿ0D]u¡ºÒÿ0D]u¡ºÒÿ00DD]]uu¡¡ººÒÒÿÿ00DD]]uu¡¡ººÒÒÿÿ0$D,Y8m@L™Y®aÂmÖÿ0D$Y,m8@™L®YÂaÖmÿÿâÒÿÚÆÿÒºÿβÿÆ¥ÿ¾™ÿº‘ÿ²öªyî¡qæ™iÞ‘aÖ‰YÎPÊ}L¾yH²qDªm@¡i<™a8]4…U0}P,uL(iD$]@ P<H4<,0(( ÿÿÿmagicmaze-1_4_3_6/data/maps/0000755000175000017500000000000011177247754014417 5ustar kentkentmagicmaze-1_4_3_6/data/maps/mm_map.0050000644000175000017500000001310610134226671016077 0ustar kentkentMagicMazeMapp­As linear as a bowl of spagetti?!!+Š'ŠŠ"""*#!!'ŠŠŠŠŠŠŠŠŠ””””ŠŠŠ””ŠŠ””‹Œ Œ*ŠŠ‘ŠŠ’ŠŠŠŠ˜ŠŠŠ˜ŠŠŠŠŠŠŠ)…'…Š(##(+((+Š+ ”4Š)”…”Š”ŠŠ"ŠŠ”””ŠŠŠŠ””+”””*Š)(”Š Š.++**/**ŠŠ))”Š• •””Š””Š Š‹ŒŒŒŒŒŒŒ)ŠŠ •ŠŠ”ŠŠŠ(#Š)ŠŠŠŠŠ •Š””Š”””””””ŠŠŠŠŠŠŠŠ””+)0)ŠŠ””””””””””””Š+””””””ŠŠŠ•”•”Š” Š••”Š+”ŠŠŠŠŠ•”Š””ŠŠ””Š”*”•”Š…””””ŠŠ”**””ŠŠŠŠ”•”ŠŠŠŠŠŠŠŠŠŠŠ”””•”””””””””””””””””••••””•magicmaze-1_4_3_6/data/maps/mm_map.0030000644000175000017500000001156210134226671016101 0ustar kentkentMagicMazeMapúòSimple, square complexity.!‰ŠŠŠ‹ŒŒŒ‰‰(‰‰‹ŒŒ‰‰‹‰‰“Š#(Љ‰‹ŒŒŒŒŽŒŒŒŒŽ““(““‰‰“““Š'#)!““‰!“ (“(“‹“‹Œ“““+“Š#(Š“(““‰“Š#‰(“““(“ŠŠŠ“““(“)“(““‹ŒŒ‹Œ‹Œ‹““)““““"Š“““‹"‹Œ“(““(““(““‹ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒ“‰((((‰“(““““Š!““()))‰““())(““(“““‰“(‹ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒ““““‹"‹““‹ŽŽŽŠ!))+++(“““"“‹ŽŽŽ‹ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒ“““‹ŒŒŒŒŒŒŒŒ“‹ŽŽŽŠ+“““ (+“((‹ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒ“‹ŒŒ‹ŒŒŒŒŒŒŒŒŒŒŽ“)“(““‹ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŠmagicmaze-1_4_3_6/data/maps/mm_map.0090000644000175000017500000001300610134226671016102 0ustar kentkentMagicMazeMap.ýCreepy Corridors of Crazy Creeps–’11–1—–—–—–——–—–—””1–‘ŠŠŠ11ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ––””””—––——––——––—––——––——––—–’11Š————–—–—””––––’Š––0–”’”––––‘ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ———””’””–––—––—––————––——•”””””””””””’”––––ŠŠŠ!’’•’’3–1––.–ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ11ŠŠŠŠŠŠ•”””””””””””’”––––)2‰Š””’””–––————––———––—2,“ŠŠŠŠŠŠŠŠ’‘‘’‘’‘’‘‘””–––––*)ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ’””–––––+,ŠŠŠŠŠŠŠŠ‰Š‘’‘‘’‘’‘’‘‘””””———––——––——––———4-*)“‰ŠŠŠ’’’””––––ŠŠŠ‰ŠŠŠ““ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ’‘’‘‘‘’‘‘’‘’‘’––––‹ŒŒŒŒŒŽŒŒ““ŠŠ020’’’1–1—.—1— ‹ŒŒŒŒ‹Œ ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ‹ŒŒŒ‘ŒŒ‘ŒŒŒ‘ŒŒŒ‘ŒŒŒ‘ŒŒŒ‘ŒŒŒ‘ŒŒŒ‘ŒŒŒ‹ŒŒ‘ŒŒ‘ŒŒ‘ŒŒ‘ŒŒ‘ŒŒ‘ŒŒ‘Œ#'111‹Š‹ŒŒŠŠ‹ŒŒŠŠŠ‹ŒŒŠŠŠŠŠ‹ŒŒŠŠŠŠŠ‹ŒŒŠŠŠŠŠŠ‹ŒŒ‘ŒŒŒ‘ŒŒŒŠŠŠŠ’ŠŠŠ’ŠŠ’ŠŠ‘ŠŠ‘ŠŠ‘ŠŠ‘ŠŠ”ŠŠ”ŠŠ”ŠŠ•ŠŠ”ŠŠŠ”ŠŠ–Š–ŠŠ–—–ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠmagicmaze-1_4_3_6/data/maps/mm_map.0010000644000175000017500000001104410134226671016072 0ustar kentkentMagicMazeMapHEasy, peasy...‰!‰Š‰“‰“‰Š‹ŒŠ#“(“‰““Š‹!‰‘“((“(“(‰““!“"‰Š‹ŒŽŒ!ББ' “‰‘(#ŠŠŠŠ(‘‰ ЉŠŠ‹ŒŒŠ‹ŒŒŒŠŠŠŠ)ŠŠŠ‹ŒŒŠŠ‹ŒŠŠ(ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠmagicmaze-1_4_3_6/data/maps/mm_map.0080000644000175000017500000001331010134226671016077 0ustar kentkentMagicMazeMapÛMLong and large labyrinth...!.’ -ŠŠ  /10‹ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŠŠŠ‹ŒŒ‘ŒŒŠ’Š‹ŒŠŠŠŠŠŠŠ‹ŒŒ‘‘”#*Š-’.ŠŠŠŠ-‰!‹ŒŒŒŒŒ!‹ŒŒŒŒŒŒŒŒŠŠ‘Š*ŠŠŠŠŠŠŠŠŠ’’‘“!Š*!*Š)#*ŠŠ(ŠŠŠŠŠŠ*“!Š‹ŒŒŒŒŒ”ŒŒŒŒŒŒŒŠŠŠŠŠŠŠ+ŠŠŠŠ(ŠŠ(((“Š--Š,ŠŠŠŠŠŠŠŠ,“Š”–•—#—”‹ŒŠŠŠŠŠŠŠŠ‰ŠŠŠŠŠŠŠŠŠ+“‰+Š”#+ŠŠ‘)-“ŠŠŠŠŠŠŠŠ+-““”—”””””–ŠŠ‰ŠŠŠŠŠ‹ŒŽ,ŠŠŠŠ““•”'1”ŠŠŠŠ‘‹ŽŒŒ-ŠŠ-“ŠŠŠŠ““Š•–•”””—ŠŠŠŠ),ŠŠŠŠŠ(ŠŠ*ŠŠ““•./.ŠŠ‹ŒŒŒŒ‹Œ ’ŠŠŠŠ.ŠŠŠŠŠ““‹ŒŒŒŒŒŒŒŒŒŠ Š)+ (,Š  /ŠЉŠŠŠ+ŠŠ.““Š,###*ŠŠ Š*Š#‹ŒŒŒŠŠŠŠŠ“ŠŠŠŠŠŠ“(“‹ŒŒŒŒ#‹ŒŒŒŒŒ’Š #ŠŠŠŠ)Š*Š“ŠŠŠŠŠŠŠŠ(“*""",Š)ŠŠ+Š#ŠŠ.ŠŠŠŠŠŠŠŠŠŠŠ””“ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠ.ŠŠŠŠ‹ŒŠŠŠŠŠŠŠŠŠ••“)""*ŠŠŠŠŠŠŠŠŠŠŠŠŠ””‹ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŠ‹ŒŒŒ‹Œ‹ŒŒŠ‹ŒŠ‹ŒŠŠ‹ŒŠŠ‹ŒŠŠŠŠŠŠŠ’’)Š()*()*+Š‹ŒŒŠŠ’’‹ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŠŠ‹ŒŠ‹ŒŒŠ‹ŒŠŠŠŠŠŠŠŠŠŠŠŠŠ‹Š’”•”’magicmaze-1_4_3_6/data/maps/mm_map.0040000644000175000017500000001043010134226671016073 0ustar kentkentMagicMazeMap¾5Which way? How to play?""")*+#"'‹ŒŒ"”•”‹Œ‹Œ‹‰‰“‹Œ‰“ Š“‹Œ‹ ŒŒ‰!" “‹ŒŒ#‰Š!Š)(“!”“”(-•"‹ŒŒŒ‰.•#""/”"‹ŒŒŒŒŠŠ”()* ŠŠŠŠŠŠŠmagicmaze-1_4_3_6/data/maps/mm_map.0020000644000175000017500000000646410134226671016105 0ustar kentkentMagicMazeMapÌyHack and slash, monster bash. #((((‰‹ŒŒŒŒŒŒ‰  ‰ –’‹ŒŒ((((“‰ ‹Œ ŠŠŠ€€€€€€€€€€€”‰Š(‹ŒŒ‹"‹Š“ ‰ ”“‰‰‰ (‰“‹Œ ‹ŒŒŒ”“(“““(““()‰‹Œ•“Š!““((Š ‹‰‰”“#!(“()#““”“‰(Š‰ŠŠŠ!Š((‰‹ŒŒ“”“““ (‰#‹““–””””•””””””””–(““ ŠŠŠŠŠ–”””””–ŠŠŠ‹ŒŒŒŠ“‹ŒŒŠŠ‹ŒŒ'Š‹ŒŒŒŒŒŒŠmagicmaze-1_4_3_6/data/maps/mm_map.0060000644000175000017500000004006010134226671016077 0ustar kentkentMagicMazeMap¡/ Bogus brain problemo!!! •)*+,+(.•ŠŠŠŠŠŠŠŠŠŠŠ•”•(-(”ŠŠ”””(”ŠŠ”””/-((”Š”•”•((”ŠŠ”(*+”ŠŠ•”””•””•”””•ŠŠ””””””•Š›•.)•ŠŠ•/-)”ŠŠ”30*)”Š›”+*+))•ŠŠ•3.-,”•+Š›••””••””™”•ŠŠ›™””ŠŠ””””ŠŠ””ŠŠ””ŠŠ””””””””+ŠŠŠŠŠŠŠŠŠŠŠ#ŠŠŠ ŠŠ#ŠŠŠ#ŠŠ Š#Š”””••””•”””””””””””””)))-)))””””•”””•””!”””-)”””””””))””-”•”•””””-””,”” ”””””””””,”” ”•””””””••”””””•!•”•””””””•””””””• •”)"""!0••””””””••”””•”””””””•””””””•””””””••”””””””””””””””””””””•”•”””””!”•””•””!”””””!”•”””•"”””-"”””"”””#”””-#”‹ #””””””,”””””””””,,,”””‹ ””€',,,,””•”””•””,””€'-€'€''€'€'””*””)”””€'€'€'-€'”+(-+””""!!€'€'€'””   ”•””””””€'€'””•””””•””€'€'€'”””””””magicmaze-1_4_3_6/data/maps/mm_map.0070000644000175000017500000001202210134226671016075 0ustar kentkentMagicMazeMapøChuck, chop and do the blood mop...,!!-,)Š"+)."" ŠŠ)()-#””•ŠŠ#”ŠŠ”!Š””–””–”–!–””•””•Š/‰ŠŠ ŠŠ‰"•ŠŠŠ"ŠŠŠ#ŠŠŠŠ#‘ŠŠŠŠŠŠ+ŠŠ‹”””•””Š'"#ŠŠ!Š”!””),)Š“ŠŠ Š“”Š"ŠŠ)ŠŠŠ(ŠŠŠŠ’Š’”””ŠŠŠŠŠ  ,!Š•!•”(.Š“ŠŠ Š“”Š*Š,Š*Š ŠŠ.Š””””Š”ŠŠŠŠ””,””)(),),“ŠŠ Š“”ŠŠŠŠ,Š)ŠŠŠŠ1Š””””ŠŠ””•””Љ),)“ Š“(”ŠŠŠ(Š(Š”0”””””’ŠŠ•”•‹ŽŒŒŠŠŠ“)”Š-Š(Š” ””””ŠŠ“ŠŠŠŠ“+”Š)Š)Š”””””•!•’”””””””’ŠŠŠŠŠŠŠ*”Š•Š“ŠŠ“,”Š-Š”,(,”Š,-)ŠŠ“Š ŠŠŠŠŠ“-”ŠŠŠŠŠ”,”’)-*,”Š+-ŠŠŠ“””/’”’”,”’*!/ŠŠ*”Š•ŠŠŠŠŠ“””0”’))”’ŠŠŠŠŠ)ŠŠ•–”),.+•”ŠŠŠ Š•””””””””””’”’ŠŠŠŠŠŠŠ ŠŠŠ–ŠŠ ŠŠŠŠŠ  ŠŠŠŠŠŠŠŠŠŠŠŠŠmagicmaze-1_4_3_6/data/maps/mm_map.0100000644000175000017500000001040610134226671016073 0ustar kentkentMagicMazeMapnˆ€Devilishly difficult, hellishly hard.1‹(-0(.‰ Š”).‰+1’’4‰‹ŒŒŒŒŒŒŒŒ(()2*3(“ Š”*(”)“.‰‹ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒ‹ŒŒŒŒ‘’‘’‘’‘!8‹ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŽ!!()(*(-((,((“+4Š”5+”*“*“*—*‰‰,–"–‘’‘“‹ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŽ*)Š”*(”“)“Š•ŠŠŠŠŠŠŠŠŠŠŠ)”*—”—““—#—51(((“"(*)(((((#((5Š”)(”(“(“•)—Š“••–••–••–—!—’‘/(((‹ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŽŒŒŒ”6+”)“)“/ŠŠŠŠŠ/Š”—‰•0•1•0—"—*(+(,(*()(1(*(3(((!"()*(((6+*)(•)(”“)“”)ŠŠŠŠŠŠŠŠŠŠ“••••••—#—‘‘’‹ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒ””•””””””•””””””•””(*)”*3•(“(“ŠŠŠŠ”ŠŠŠŠ5”“”•••6•••–——––——–”(”)+”(“)“”(.ŠŠŠŠŠŠ”Š”ŠŠ“‰••••••—1881—’’,•”*(-”“)“ŠŠ•Š•ŠŠ*6”–••••••–——–8–——–+”Š”(“(“•••”ŠŠŠŠŠ—ŠŠ—ŠŠ”ŠŠ“”—9—•‘•Š”“)“()7 80)”“‰‘‘‘‘‘—'—’’‘•Š”))“‹ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒ*–,–—–-”6“*.,5‘’‘6’‘.’‘‘””””””•””””””•””””””•––”””–””–””–””–•”–””–”•–••–•”–””–”””–”””‹ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒ3ŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠŠmagicmaze-1_4_3_6/data/sound/0000755000175000017500000000000011177247755014610 5ustar kentkentmagicmaze-1_4_3_6/data/sound/sound1.wav0000644000175000017500000007540010134226671016530 0ustar kentkentRIFFøzWAVEfmt TV¨¬dataÔzþýüûûÿ  ýû÷îæô  îçæìø  ýþþþÿÿýûù÷û ùóòöüþûùøûþüùø÷øûþþúöõ÷ûÿÿûùø÷ööøüÿþüûúùûüýþýüüþþþþþþþþþûúùøùûÿÿþÿüøõõ÷ûÿýú÷õõøûþÿþýýþÿûöôôù ôÞÌÆÌæ(=B7 ñáÛÙÞçñû  ûùü  ûõñïîïóû öéãåñþ ýþÿ þ÷ññöÿ ÿüúûüÿþýÿ ÿÿýüûý  üùø÷ùýþýüüþüùøùý  þøöøÿýûýû÷õõùÿ þúøøúýþüûüþýöñïòøÿþúöôô÷ûþÿÿýûúüÿÿýúùø÷öö÷ùûüþþýûúùùùúúûûüüýýþþÿÿÿÿþýüûúûûüüýýþþÿÿþþ øïìëðø  üùõòððõü þüù÷ööøûþþøõôô÷ûýüüýÿÿþÿÿ  ýúùûþ ÿýûüÿ ÿÿÿÿ ùòîìóý üõïëêéðù ÿþýüúùùúüþþûùøøøùüþ üøùþüðêéîø ÿùôðíìîöÿ ûø÷ùüýþÿÿÿþüúøõóóöü  úñéæåéòû øñîííðòöúþÿÿÿþüùöõõ÷úþþþþúøööøúüþþÿþúøüøîèë÷  ûóìèéòý  ÿüüüýýüüüþþýý ýôëççîø !øðììòøü ýûùúûþ ÿûùûÿýúüúõô÷ü  üùøûÿÿþþÿüøôó÷ü  üôîììñøÿ ÿþýúúúûýÿüúøùúýþüûûýÿÿýúôîëï÷  ûöòðîîòøÿþüüüþþú÷õõøýþýÿ  òέ› Çþ>gxsS(úÖ¿±®²¾Õô2?A8# öçãäíõûþüùõôôö÷ùû ýðæââæìóùÿ  þüýýùõñîíðöý ýùõñïîîóú  úöôöù øÓ²Ÿ°ÞXw}iAßÀ¯©¯¾Õø?SVK0óÜ×Ûéúüøõöù !&% úéàÛÜåñ  ÿüøõòïíîóý  þøôóôùýÿþ   !鶃”Í&lj6ùÑÄÅ´ ›²å*_yoF ÖÅÐø64úÞÓÏÎÐÔÝï4Ye\9ß½ÅÖéôùúûþ   øàÍÅÈ×í ýùöú þÞ¸ž–°âSnqX/æÓÈÃÀ¾ÀÐê +>B1øåáëÿïÜÐÎÙî#,35#âÒÏÑåû ýôòóø ÿíß×Úç÷ üõñðôùÿÿúõðñôû  õíìóüýôîîö öïìëîôù  þüüýþ  ÿþýüýÿ !"þùôëßçô!+&ý÷öüþýúûþÿ øîéëòû  ÷ïéêñü  þýýüüüýþþþÿ ÿøóññôû ü÷ö÷ûÿÿüúûøîîû õðñøøçâçù  óÝÍÉ×éü  ý÷òïîïôúüúõòõý  þöñò÷ýþúõòóõøûÿÿüùöõ÷ùüýüûúùúýÿüúùùúûúúüþþüûûýþûñêîý ø÷öúûøðï÷ úîéëü,71úßÍÌØêý ûòïòûøîìòÿ öïîô  þøõôôô÷ýýöô÷ýÿ ÿÿÿôçêú!'$ û÷öúÿúöòñú  ûìàÚÞéù ! ÿÿÿúöóôú þõðîïôøý þüüýýûù÷õõøÿ þ÷óôøüþÿýú÷öûÿýüûüýþú÷ööûûñæê÷ ! ùåÝÞêû ûõôû þðëìóûÿþüø÷úÿ÷îêóüþøöùýÿúõñðõý  þúø÷øùù÷õô÷üüúùùúüýýûúùøùûþÿÿÿÿþþþüûùø÷öúýÿ ÿôËÃÉÀä F\RN3 õÚÄÁÈÕçÿ"+*ûùþ õéäâæó -3-òäÝáîüþøùþ ÿ÷ðîðöþ  ü÷õøü ÿîÛßó(/)üëéñþ "3&þ¶«½á 1LN@$êÜÔØáî'*ïâßì&*! ôåÞâéòû ÿýþ ÿ÷ðêçèíôü ÿûùùûüûøõôôöùüýûùøùþýù÷öùýþøòññ÷ûüôçæù(+êÝÜåù òåáßâõ !ùóîòú öéåïü  )CZV$Ù˜…€œêF~}^ßµ§Ÿ’ˆ‹¤Ý"^zpIÈ £ÕZug.ÝŸ…€šÒ>]pnNÚ¶¸Ò 5;ñÒ¶¾×ú&DRJ2 éÐÁ½Êàý.2%÷æáæ÷ " ôçàáéõ ýù÷úþÿúöõùþ ûíåâæïú ûôññóõõû  ÿ ü÷õôøýÿ÷ïñ /D>ñÔ×êóó% ý寻ÖJef?øßÊ¿ÄÛö+40íßç÷%11é×ÐÒàõ -0'þêÝÙàðùíèíú÷îêéìñ÷ûþ ýóéâàæõùðïø õéØËÉæ1=4ç×Õë ÷ëëö íÉÇÝ-=<& úøýýôÝËÁÒñ8B8øãâôùïìðúùðíô ùðíðõùùôîëï÷  ùõøüûôïìíðõý ÿöðíìîóùÿ ûöñäáè&;8 âÐÏâþ%' ÷ëéð     üöõû!(&ùͧ‘ ÐTr{h=òàÚÜÜÖÍÈÑè )AJ@+ÿôòöù÷ïæÞßêù  öèÜÖÖàïÿ ôãÖÕÝé÷  ÿúôðñ÷ûý %@ZT"ÁŽ€„ åSvyWæçõ÷Ìž€ƒšáEpqAÿǽÐ÷&÷ÕÄÉÛéëáÚéA\\M*øÇ¨¢³×ÿ÷öý úãÏÄÁÕò%., ùìêêêìñ÷ýùòíòý óáÖÚäõ ýÿùôññðïíîôý ýøôðíêêîõý  ûðééòþþôó#/öâï îäû ;9úѪŒ˜×/h{rGǯµÇÝì÷ "% ôîù7HH#õǪª¿æ -@?6% ýîåáæðúúóïíììñù ü  ÷îëîóùÿüò×Ðí;F:ûá×ßñ ùíú-+úäÙÞó ûöòëèéïûÿûù÷ôóõú þúöòòöýûøùúüÿùòííòú ýôïíðôùþþøôòñó÷üÿøóñðæÕËÜ2GA(é×Ôßïýòíðú ýõìæäéö ÿùóò÷ü #/,ì㟿ð.^um> ؽ´»Ðë!,*ìÛÛæú$ ùîëïôöòíëñüøòïðôöøöêØÐå9JA#ëááéòöôðîîõÿðçåçîôû  !" .SW1Ä€–Ùf}~s6Ô¨€€€‡ ç2o{y>ï¡‹¤çImg/ߢ†“ªËù*VoviL* Þ¤…Нæ!FN?% ÿü ÷íâÕÊÇÓë 1LVM3ëÓÉÊÕáëôý   óèàÛßçðöý öìççëðôõóòôøü þîáØÙâíú  ûøõñîñøýÿùïá×ä9TR+ÿà×ÞÞÔË×ó"/8=1̘‹´JqxZÔ¡•©Îø#"ÿìÝÚì%4/ëÌ»Åâ$23&ñçâááçïþ ýüþýõïêëïõü  öîéçëòúÿ  ûõìÜÈÆá9ML3ðØÒÞö  úîíø ÿ  ÿ   &(àö»Ý?`cR1 ëÔÑÖåñü  ú÷ùþìåäêòùÿ ÿ÷òîîïñöûÿÿ øêâçùðàÝéû øïîû *$÷äàì ÿôîï÷.LbQÁ‚€¯`}IíîíÛ§‹€¯øSr|wJáÐÛóôÚÏÐÞñýýõîþ"GZG#ôÇ«¡¸Òî !*1*÷×ÅÄÛô  ûèÞàñ  ûòçÜÔÓÜì  ûùø÷õòòõûúñêèïþ ùñíñùýþúôððôü þ÷ïèææîûýúùýÿýùöõùþ ìËÒó%GUBîËÈÚúøó÷üÿ øíëñý ÿý %' üõõú&AQHÅ’€ˆ±dzxLùµ“…„¤Çù,[rqX*øË³¼áQgP Ä‚‰¡ç5y{f)îÁ­£¦¼ÇÑÝ 0JTE)ññ"-"ß¼®³Çê (9CGD4öÚËÉ×ìÿøðñû -2)ùíá×ÒÒÜí!ùðìëìîïðòõú ÿíáÝßæêîôü  ÿù÷öõöúûúõñîíñû òðý'5+àÐÕíûõàǽÍô+VdU&öÓÊÙìúøóìíÿ''þêãñ )æÙÛéù  ðãàçòüüú üëáÞáéòùþ üøõðìëðøÿú÷÷ùúöãËÊí#OQ?ïæéïöóçÝáö0;6#öÞÎÉá$87+úòóøÿ  íÝÙãú0=6" õêéòþ ÿýüý  öïîó÷úûý  ýùõñîïö ÷õù üðìðýìÝÚü!=C4÷áØàî÷ü÷÷þ #' ëÎÁÉì9JC+åÔ×ì öëë÷öíéèìòüúóðò÷ûüùôððøúòïîîîîñõúþÿþúõñðòóóóó÷ý þúø÷øøèÖÃÓô;B8ûáÕÜéùÿöåÛäü(1)íáÜâðÿ  ùøÿ  ÿõñïòøÿ ü÷õøþùïêéêíòøþõêåãäçìóúýöòññòóõ÷ùý  þû÷óëèíý ýðéî-'õÞÕØåû   û÷õúÿüû #&!ùóóúÿíâàêþ'11'ôèâáìú úõõú þýýýýþÿÿÿÿþÿþýüüýÿÿüüýýúêÚÓî4?4þëßßéöþôïðòù ""ýæÚ×Þéñöúÿ ýúü &CK(Ü—€€¡ôIud)ן†€€ˆžÖMnvmM ïïµØ=S:ÿ¹‡›ØPfaP;òÏÃÈØîüòá×äù$.0(òáÕÍÌÒßò úðìíòõðèâèú&04;IN,礈€ˆ½'m|~yVÊ™†€‰¥Ó+HZ[Fæ·¢ºõ<js[Ë“‚Ÿæ4gzpU3êȰ±Åè.=-èÐÑä-GN; þßËÁÃÖñ282# ðâàòïäáêø ÷ïëðû  ùöø  üïçäçïü  ÿøõ÷üýôîïõþüôîìíõ  þúùöêßáû#>B-íÙÖäïéêðøþ  öêäçõ ÿ ýôïëëó@VAù¤€€–çDrg#Ù¤Š€€Œ¶ñ#DTYVE篕©ç6gk8íª‰†—¾Ish7õãó î˯­Àá8J. ëäð #&ùÞÐÖäíïéèñ4A3îÔÊÒéúøëìôÿ  öçÞÛâïþ  ÿÿùõõúþþ÷ðìî÷  ÿüûûýýûù÷ùûüüÿ  þûúýýÿ þúôéì*=5óäÑÓê.3&õíðøý.=8"âËÂÑî &*' ûøù ÷ìéò" ÿø÷ûÿøïëëó ûïæâäíø  þúø÷ùüþþýýÿ õëèéäÛÝï2HJ1 ç×Ùí ñçç)äÑÖê$49-üéâãéîòõû ÷ôøîàÛÞê÷ ûôîéëñ÷üÿþýûý øíåááèóÿ  ýõíçãâéô  úóñõýúôòîæØÕâ&?H9öÚÏÐàîûþåÁªÉþ=gjQëÁ¬½Üÿÿ !öððöûúõðôþ!úôöý öîêìòû#%÷éàÝâì÷   ýöðìíñ÷þ  ÿýùõñðò÷øõóù%7:0ôÛÑåõÿ÷ðïú ,89+þÓ³¸×-<;)öåêø ü÷ü ýîãåó $5;0íàÛâíø ÷ëääð""øïìîóøúûüþúõóóôöùüÿúöõõùýþýôìèíû õìëõýúñíðü "51Ô¥Ž¥Ñ IjqX&øÕÊÈÎÖßé÷øòù & ðÕÇÇ×í ûìãàåîöûúöõ÷þ þñéåäçéêïø  ùóðíìììðôùþ  ú÷öõööòìàÛàÿ @A-öííõòåÐÎâ'>LG!ä Œ¡ä:p{b3ùÒÇÏÜåéé÷6D>îÈ»Ö8QI)ýÛÊÏäú !ÿïéñ ÷åÚßõ&-(üôíééîõý ÿöððöýÿûùú  ÿûùöôõ÷õðæó #13)ú÷øðÝÇÌî*IK!øÙËÉÖö Gd`? ÝÀ´½Óï #%#ü÷ûïÝÓÕæÿ*/) þôîëíóü÷íèéôþýûôçÞÚÞëû  üõðìêêìð÷üþÿûû  ÷êâßèñùùóëíÿ47)æ¿›§×FZT,õÉ·ÅÖì 2V]?ݼ¬±Êï,84"ûéßßìþÿêÚÖßò"# úïêèî÷ÿýôíëðû û÷õóòòôö÷ööü  úóíèçëôý þûøùûÿÿþüüû÷ðö/6- üçË´Ãï)@;& ùèãçò -GG0 áĺÇá-3-#ùîéë÷ úéãç÷ )& ýôðïò÷ýþø÷ü ûøõóòôùýÿ  þôîëïõý ÿþÿþýüþýüúôñõ !2/ ÿçÄ­¶á>RH. æÍ½¼Ñù.YhS"îÄ®«¿à-1.!üèÝÚä÷ êÙÐØì%&ÿóëåäæíøþõññú ùñëèêíðôøý  ûóëäâçðú  ÿ÷ðìïöÿüöòððñ÷ *& ñͬ¦Ì:VWBôÒ»³ºÚ =ZW:ä´½Öõ"**#÷éßÝæù") òÞÖÚî$%÷ëääì÷ þõðïú øñîìëíòúýúöóñôùÿ  ÿýûúûûú÷óòú #69+öíåÛÚæú  !ñßßó8D;öÒÃÇØî"$%%úçØÙèÿñéðýþ÷õôôõ÷ùý øñíìïôú  ýùöõöõóñòöþ üøö÷øûýþüúøøúûöñðõ úñãÙÙèùòàØÜû"DK3 Û¾´Ááÿ ðߨàõôçæìüóïñö÷öòñôøþ þõîéçèíóû  þøñëçéñüýúøøøøøùùùøöôù)-! öëèèåáæõ &) ÷â×Öè,GH4 äÍÉÜöøú%&óæìù øíéñþöñïõû  þóìéìò÷ý  ýùöõ÷øúýÿüùøûÿ÷íò "( üÚÂÄè8@0ðææêîõ.=0úéâãìý ýöîý "!ûòôûýõíêðü  ÿþÿþøðéæçìòùóæÞÞâçìðõý þñêéìòõõòïòû ú÷úüóìèéëìëó!26' ÷ïëèåìùúæ×Þû)&þóþ:8ïȯ°Ïî )%ýçÚÚè÷øìéó#% üôóô÷öóðîóùÿ ÿôîìñøÿúôòöþýôíëíòù û÷öù óêó)/$ÿúîäãõ !éÚÕåý4IUO1Ö½´½Ý"0&ùü" õéßÙÚè/80ñèïùõëçæëô "&!ôîïóöõñîïõ  þ÷òîíîñ÷  ù÷û úñîíñøýûõòþ24úëñûëÚÑäÿ/.üѶ³×9X^N*ýÓ¹±¹Ñò$$ ÿõðöôâÓÍÒáø&$ ýðêìòûúîãÞàêù!#þðéçèíòóóñðòþ þúùøùõðìëìòû ÿûöñîëçâæô#01ïãè÷ùæÒÙï*60îÁ±Åñ#DRE,ñá×ÔÓØåþ35$ ïààô*4(öáØÚæô ÷ðñû ðáÚáó #%  úöôóòðïòøÿ ýüÿúóïïö   úõöøúóìæó $77% üùóÛÓÞû,2$èÏÎßý9NQB"õѺ¶ÁÜ-."   ÿòåÝÝæù"..$ñëìóþ ûñèåê÷" òæáãêñöøùùþ úñëéèèìôýþüÿ øñíðõúôæÖ×ò8B:êáåèçê÷ûßÍà(30&íÛà*ûÜÉÈ×ð !!ûáÏÍÛñ ýõö  ÿøö÷ûýý÷ïèçíø üòèåçôþøððú "ÿèÝÛæôþùúþþøóóõøù÷öõù#10ûåãîø÷ñîø ûðíïõ%-'ûêãèõþ  øóöÿ öëáãõ1><)üüýôÞÂ¥¢¼ñ7e|~^,öÍ´°¹Ëáïý !" ÿøîçâáäì÷ ## þïáÚÚÛÙàñ $12&ùõöüùïäÝÝë)'øóöÿýòíô üôöÿ  üòû7J0õ¦ˆ‡™Zzg4èÊÌíüÛ®——»ëFWX?íïú öÙ¼ÅÞù %  ðÞÑÎ×ãñú!$ñÞÑÎÕâòþ  ûöóññòòóôõõ÷û  üöòñòôõ÷øùûÿÿýûøöóðïîðùøëâÝÜãïÿ õìçéòû ýüþ ÿüüüþÿ ûóïñþ05îÓßûóæäíû&9?3ñåâåèéî÷ *+"úôôúùóñòù  ÿõêãâæïúþ÷îçãçó ÿøñìêïöÿ  ûöôô÷ûüöêãç8<(ýõõøõððû úÔÁÕû-AH.íãæð÷ùøøúûòðó÷ú(* óßÔÒÛíý þ÷íäÝÛàñ üùõðèçéñøüýÿÿýüþúìßÚßìú þúöôóôõõõöùý þñàÕÞý!=?(àÔÜïøöóø ëæ÷%.'ÿçÑÆÌßû$&"÷ðïóû þòéçîü%&õîìëìîôü  úõù ôéãéó  ûòíîóù  úóðôúþÿ  üèàé 3KH&õǾÑñ $( øçîÿ!$ôÚÌÒê+-%ûõìêïû ÿöóù  óìèæêð÷ÿ ýúüü÷óïíðõúþ úñíëîòôõõõ÷ûþ  ôêåçñûýù÷ü ýøöüÿìÐÅÛ7KF"ýäÝëõôãÚÙÞô11! õìó .#×»¶Åè$ þðæèñýþïæåó"" óëçäåéñû  þûûþùïèçíôúÿ  ÿòéåêóûÿýüþþ÷óò÷ý ùíããó2B<#óõúêÚÔáð 00þ %æÒÊÔê !!  ÿòíðúýóìïù #%ýöòîìëïø  úöòðððñ÷$ óëìôýÿÿøôóú ýüÿþú÷õõ÷ú úúùòëçíù ")' ûïêòûüêàßê÷ üê×ËÉÑäú  ! ûõòðíêèçèìõ !óçàÞâèð÷þ ûòëåãæìñöû ñäàãìúÿ÷óòø ýûûüúôîëìñø  ýüûúûûúùøùú÷òîô# øçàáð!# ùíâÓÊÒðDYN+ÛÊÏè"-úÝÑÔé ##$$êØÒÞô"÷îñü üöñìëïú  ÿ÷ö÷úÿ úðêðúüööûÿûýýú÷úÿ ýúøúÿÿùñîö ,1&õäáïìåçìø "$%#ùîæáâèò  ÿùôðïïñõû öñðó÷úüüúùúûþ ÷ïëìñ÷ýÿüûüþüøõ÷ýûïçåì÷ ý÷ôôöøùúúûûûûüüüüüüýüüÿÿùôóóñëåí#& üïíóúÿýúúûù÷õôùþ ýðíìïõúþ  úô÷þ (!Ôª‘¤Û%eysO Æ›–¯Ü%0)õæÛÙæþ<LF'ûγ¯Áä$-%øóó÷ý  ùìâÝãòÿú÷öõøýöæÜåú,5-ñééðõøúû üö÷ÿ  ýùõñðóùÿ  ÿùùþ  çŰºã%bynBÒ»ÀÙøùòëéñ 8D9ôÒÄÉßù  úùùüÿ  ÷ãÙ×àñ  ÿþýþÿþýüûûùöòïîïôøôíìü$, òâÝâîõøôñïð÷ý ûîâÛÜçñúÿ üú  /9&﯈‚ÑJ{uTû¥ˆ­ÍÝáèü05í¿¨»ñ>l|Fñœƒ‡Û//-1>D4Ȧ ÖXhFº–“¸ð97, ôÝÊÉàÿ)àÏÑí #'óîð÷üþýýòˬ¡¸ãNjkKðÏÂÅÓäô  þûùü)-"æÊÀÌé "*%   ûèÚØæ.1( üûùø÷ý þõóõ ÿûùøøúÿ úïêïý )& ûõøòÊ¢’£×"^y["Ú® ´Øúÿüúøöõú.<@/ ä¾®´Òü2/ ýúÿ  ÷äÖÒÛñ ++ ÿ÷÷ýüöóñðððòöÿ ÿù÷öõôòññôøúùúþ  þõÙ·£ŸÂù9ivd2öÅ­·Ïí ÿøñëççðÿ!.4-ýÛ¿³¾Ü)#þòñú ÿòéäàÞâëú %#ü÷øþýöðìëíòøÿ  ùðèãâíú !)*þÙ²™—®å$^woL ׺¼ÚùüòèáÝâò '?JD)áÊÆÖô%' úóðïòù+3)òÙÎÖö,/óéèòý úðîó õïïõüöåçõ  '𰈛øFl?ߥŒ¦Õ&1-õåÜØÜéÿ<T]Kâ°£¹é@F%ôʹÍò,,%)óͺÁä +0úàÜë  ñßÖÜñüîêñÿ  ÿþþöëãáì68#ò½“†§æ9hyp2ì«’Âó*) üñæÝØÛé&EQ<á¾³ÊúîÞç!òÚå5J>⿵Êêýöþ  øïôûåÖÕâô üù÷ûøïìíô#6>/À‘ƒ‹Ì*h{p=柄¢Õ5:*úîíêãÖÔà7]sZ'ꫨÅé *88'âÅËè:NO6ñÕÉÆÎáù'0+ñéñ"& ÷æÜÛäó øîìôõíëðù #,1'Ò¢‡’É]xuHû±‹Î;LB!æÙ×ÙÞéû@ZdLÏšŽ¥ê,Z^< ØÆÌæþ+43õÊ´¶Ö 0G:òÛÙæþ øèÛ×áú%(òêìõü ùïêìù Ⲏ†²þOvrRº”ŸÏ)0$ýõðêßÓÎÜû(KXDåÁÀÖú þöõüöæãí'78üÝÑÔàò þüùöòôý ðÞÚáñ þøóïïôÿ ôèæîý!./í·ˆ¦ê9m{h+ݪœ¸é*)üöðåØÔÛï1@>'ìÞÝæòý üôïíõ#öîííóú þöñôü òììð÷þ üúþøðìï÷ÿ üý(00ñº’„¦ñBuu[Ω´æ<=' û÷úöâIJÂð.]mW$òÎÍã üíÝÏÕí6GF.ñâáèóû ûìÞÝï &34! øëëïõùûüÿûôðøùñïó÷ùøùþ á¼¢¨ÍPtp?ü¾¤´à-1 üãÀ¬µâQcJæÆÂØ÷ üíÙÏÓè$4.üåÝàïþ ûñæàßæù % øêåèóýûôíçèîú   úíçåì÷ úôññ÷ %$ì¾—ÂGlj?øÁ¨»è35'úòçÚËÇÜ/GD$üÜÒßõ  ýìÛÎÏâ!25&ùëéïû ùìÞÛæû&-(ôìëòü  ÿõîëñý  þóîîóû  ùؾ´Ò9^_?Õ¼Éï1/# öÙþÓü+LP;ìרìöèÝÙäû)0*îçë÷ úðéçêö$!øñòø þ÷ñîíòý  ÿõîíïø ÿúõó÷'1+⸙¤Ï Ib[-÷̺Íì!$ îÌ«­Ñ C]R$óÌÁÑî   ÿëÔÃÃ×û 8=+ í×ÒÜñîÞÐÍÚô%-%ÿîæåí÷ úðæáåñ"$òåáãïû ûõôú #þÛ¾»Ïþ-MN*ýÑÄÎì  øàÇÀÎñ9E3ðÚÖáõ÷ëáÞåô! öîíö  ûôïìðø  ýûüÿýø÷úÿ  ÿýüüþ þÚº¦¾î/\dI ÝÁÎô86'ðÓ¸´Ñ6RU4ßÎßý,* ýóêßÖÔàö+4-ýëèõ "ýíãàâéóþ  ýõõÿ  ýñééíõúþ  ùøý ûòîîóùü""èÁ³ÀæDWBæÂÁÔ÷#+#øâÔÎÓåü)0& óßÚäô ûíâÞÞçô÷îëïöþûóîëíôþ  ÷îëïø ý÷óðïòöü þù÷öùýýúöóòóù    ùÚÀ®Âê"JR< äÎÛû,(ïà×Õ×Þî/.ïæêý" ûìâÞÝáêú &"ôïö öîëêíòúÿøùûðéçêðú ÿþ þöïîïó÷ý  êÓÅÈá&76& öìõùé×ÏÑæ.0%ÿóñúõçÝÛáîþ üý ýôíëìð÷ý úóôÿ  ÷ðííóú ÿú÷÷ü üõóòó÷üýúùü  ÿòäÚÕÞî!"øòò÷üþþýýüùôïêêðû üù÷÷ùûýþüùôñïïõý  ûùùûýþþüúù÷ö÷ùûþÿýüþÿúöôóôöùüûúüþù÷ööøùúûþÿþþüúùùúý ðáÛãû%#òîôþ  ùîéíù ÿù÷û  ùôó÷ÿ ÿþ ÿúøùþÿÿþþúúþ üûý úïçåìü$üøùýþýþÿýúõòôü  ÿÿùõóóóóô÷û ÿúû øñííïòô÷ûÿÿþýÿüú÷õôô÷ýþøóôøþþûù÷öøûÿýú÷öøúýÿþùö÷úþýöîçäìü! þôñõøúùûýýöðíðú ÿýüûûýþýùôðîñù ÿüúùùùöôô÷ý ÿþÿøñðõþ  ÿýûûý ýòèåìü!'$ ÿù÷øü öïìïù þüûýýøõô÷ý  þýÿþùö÷ùý  üøøýÿû÷÷úþ þüûüþÿÿýûùùúûüþþüûüþÿÿÿ÷ëáßèù! ýóððó÷üúñêæêô  ýùø÷øýøðêêîöþÿüûüÿúòíêíôü þüüÿûóìéíõþýúúý ùóïïó÷ûÿþýýþþóäÜÜé$!üø÷ûþ ýïåäìü   ýöññóú   úôóõú  ûúüýûùúþ  ÿýûúúüÿÿ  øíæåð üùøûþ ÷îêíö  þýÿ ûöóó÷üþþýù÷ö÷ùüþÿÿþýüüþ  üíæèðøþþüúùøúýÿ ýõðïñô÷ùúûûûúùûþþüûûýþþúóíéìôÿ ûúúýÿúõòññóöû û÷õú ûõñïñõúþþýÿþú÷öøûÿýöó÷ÿ þüúúý øôõúÿÿþÿýüûûý ÿþ üóîï÷ þþÿ  üõñõü ÿýüÿ  þúøúÿ þüüþ ÿþýÿÿþþýýÿüùúÿ þüù÷úþýúøúþ ÿíÚÑÖð((öóôóôøÿéÛÙãõ ü÷òð÷ ûðêêîóøýúóðñ÷  úôóòô÷ùüþÿþú÷õöúÿÿýûùø÷ùüÿÿüùöõøüÿþýüþþüù÷öõ÷úþþûûüÿÿøîèëõÿ  ýõðôþ ü÷õøþ ýýûûþÿÿýþ  ÿþþýÿ þüûþÿ ÿþ ýúùúýÿ ÿûøö÷û ÿûúý ýúùøùüýüüýúø÷úþÿýüüýÿýüûûüüýÿÿÿýüûûüþÿþýüúúüþÿüúøøúüÿÿÿþüúøøûýÿÿþþþþýüúøøûüýþþýûúùúûüýþÿÿÿÿþýüüüýþÿÿýüûûýÿþüûûüýýýýþÿþýýýýýýýþÿýûûýÿþýýþÿýüûûüýÿÿþýûúûýÿýüüþÿýüûüýÿÿÿþûüÿÿ ûõôû ý   ùøüùõû ÿþûúýþýüüüýÿmagicmaze-1_4_3_6/data/sound/sound4.wav0000644000175000017500000001243010134226671016525 0ustar kentkentRIFFWAVEfmt TV¨¬dataìÝÒÎËù3:;CJO@ÌÓÐÇÁ¾ºýJ<GOUZ]ÉÖÌÄÄÃÃë266=BFI,íÜÝÙÔÐÎë&:<>CFH(ðÛÙÖÒÍÍï!578<?@ìÙÖÕÐÍÎö!1348<8 áÓÑÏËÇÎù ,.036+ÜÐÎÌÈÆÓÿ )+-03 òÔÌÊÈÄÂ×&'),-éÐÉÇÅÂÁÞ#%')(àÌÇÅÃÀÃå "#&("ÛËÇÅÂÀÇë  "$'öÖÈÅÃÀ¾Íó!"%&ðÔÈÆÄÂÁÕù !## éÑÈÅÄÂÃÜÿ "%"åÐÉÆÅÃÇä "$àÏÈÇÆÄÎì  "$&úÝÏÊÈÇÆÔô"#&&öÝÑÌÊÉÊÝü $&'%ñÚÐÌËÊÍäêåæÞ?`2*(´‹ÿlm{tÍÌ¦Ž‚? ,M×óîìûb3°¤«¿]U]dLâι¤ ÷: èøøôJ,ý­¡¬¹Ñ-ZV\b(ÜÊ·¦½%6úñûù÷/@"਩´ÅëCVV\XÖǵ©Ý/ òøþú=6È©±¿ÑOWX]>ðÓô¹õ 5 õýÿû>,õº­¹Èã-SUXY äÏÀ´Ïÿ '*øÿÿ.8# à´³ÁÑý>RSWHÜÌ¿ºæ .úûþ50̲¸ÈÛGQSU0ôØÉ½Çô) øü4(íÀ´¿Îî)KPQJçÒŽÙü#øýÿ'0!Û»¹Æ×7LPR9àÎÃÅç %üúþÿ+)øÎº¿Ìä?."6j0ª€‘§gPgr•»³°vb{x¹È € !Aà A"€”¦ÇPAW@ºÉÅ×OP^@ÌÏ¥§ùë6m.؈ µûFCOÁËÉKOUÓÅ ×úüøû[P ¨‘©¿'@FCÜÇÌÏ/GNDäÓ¹§òøê'c8ì–³ã9?GÌÍÍõ>ELÚÐ°Ëøø üñ KU(—¨¼;?AðÌÏÑ>DDöÙǰç÷üìûYAú© ²Õ':?(ÚÎÐç->C(åÖ¾Æó÷þë7T1Ø¡§¹ù1:=ÒÐÑ3<>ßкÞõøîñIF%½£°Ê39+èÐÐß4;,òÛÈÆëõüüéù 'L8è°©·ç"27ÛÑÒù(7;è×ÄÙò÷ñì;F, Э±Å)3,öÖÓÜ -6.áÐÉçôøüëóC<!öÀ°¹Ý,3æÕÔï06òÜË×îöýôìú /@0๴Ãó-+ÞÖÛ#0-é×Íãòøúîïÿ7:&з¹Ó#-òÛÖç&.ùãÒ×ìõûôêô#92ðƸÀç&) èÚÚ÷()ñÞÔâòøúïìø ,7) àÀ¼Î÷( ýãÚå) ëÛÛëõúõìïý12!üÔ¿Âß&óàÝñ!'ùæÚãñùúðìô#2,ìÌÀËî" ìßãü# òâÞëõú÷íí÷(0%àÈÄÙû#üçàí!ìßãðøúòìðý++ø×ÆËç óåäö  øèáêõúøðíó +'ìÒÉÖóïäëÿóææð÷ûõîïù#)âÏÎáþûëçóýîæìôúúóîò%&öÜÏÖíõèëú øëéð÷ûøñðö$ íØÒß÷ ðéñóêìóùûôðñû"æÖ×éÿ ùìë÷ üðëïöûùóðôöá×ßòöíñþ ùîîôùüøóòù îÞÛçú  ÿòï÷ ôïò÷ûúöòôÿýéÝáðùñòüúñðõúüøõóø õäßçö öñö  ÷ñò÷ûûöóóü ïââíü üóóú üóñôùüùõóö ûëãçó ùóöÿ ùôôøüüùõõûõèåíù ÷õú øôöúýûøõ÷ÿ ðçéòÿ ý÷÷þ ü÷öøüüù÷õùùíèí÷ ú÷ú ù÷÷úüüøö÷ýôëêñûþøøüþø÷øûüú÷õø  üñëíöÿüùúÿüøøúýüúøøü  ùïíñúûúüÿúøùüýüùøùÿ õîïõþÿûûÿýúùûüýûøøü  ûòïòùüûüüùúüýüúùùþ øññõüþûûþþùùúüüûùøúÿ ýõñòøþýûüÿüúúûýüúùùý ûôóöüÿýüþÿüûûüýüúùûÿ ÿøôôøþþüýþûüüýþüúúý üöôöúÿýüþÿüûûüýüûúûþ úöõøýþüýÿýûûüýýüúúüý÷õöùþÿýüýÿþüûûüýüûúûþû÷öøýÿþýÿþüüüýýüûûüÿú÷÷úþþýþÿÿýüüýýþüûüþüø÷øüÿÿþýþþüüüýýýûûüÿÿûø÷ùýÿþþÿÿýüüýýýüûûýýù÷øûýÿÿþýýþÿÿþüûüýýüûûüþûøøùüÿÿÿþþþÿþýýýýýüüüýþúøùûþÿÿþþþÿýýüýýýüüüþýúùúýÿþþþÿÿþýýýþþýüûýÿþûùùûýÿÿÿþþþÿþýýþýüüûüþüúùúüþÿÿþýýþÿÿÿþýüüüýýûûûüþþûùùûýþÿÿþþþÿÿÿýýýýþýýüýþýûúúüþÿÿÿþþÿÿþýýýýýýüüýÿÿüûûüýÿÿÿÿÿÿÿýýýýþýýýüýÿþûúûüþþÿþþþþÿÿÿþýýýýýýýüýþÿýûúûüþÿþýþþþÿÿþþýüüüýüüûûüþÿýýüüýÿÿüûûüýÿÿÿÿÿÿÿýýýýþýýýüýÿþûúûüþþÿþþþþÿÿÿþýýýýýýýüýþÿýûúûüþÿþýþþþÿÿþþýüüüýüüûûüþÿmagicmaze-1_4_3_6/data/sound/sound3.wav0000644000175000017500000002524410134226671016533 0ustar kentkentRIFFœ*WAVEfmt TV¨¬datax* 7@7þ¼ÿ8ò¼ÜÿÓ(CC:ÉÂõ-ïÙ1-ëÏèÖݺÁ¾¼ËÚã ;ëàæç3%äâ(AÍ»Í: à'2ÝÉú>2ÒÂÉö?<ßÚæï9ÍD6ëAÚØ5ÓK(>¿ËîR;ò¿æ]?±ÎòV³ÌÊÊÉÌôS>=@ø@+?J7 HÊÆÑL>;<1ù·Ü ò²ä-?+å°×)ܯ»ÆÙ?.È·½Ô & ìÜÊä ì07.÷ÊÀïÜʾÕ6ÉÀü5<4îéÆÉêØ¿Íí 7ðéë1@' (ãáÁÇì&+ìÉÉÎó LE<í >B ïÈÛ ÿåÿö C1C9.4:3#ÿåíùöîáÓÌÓÐÊÄÂÃÄÄÅÇÊÓè )60 "4@CCA97<>6)$ öáàüãÙÏÀ¿ÆÅ¾ÑêÐÀ¾¿ÀÁÁÂÌîÞÒËÙÑÊÉÖ %257;INMLLLLLKKKJIIHGGFEDCBA@?>=6'ûúîíæÛȼ²´²³²°°°°±±±±±±²²³³´´µ¶¶·¸¹º¼½¿ËÛãçîõ%+/:GKJJJKKKLLLLLLKKKKJJIIHHGFEDCBA@<($òô òöæÔÐÐÐÑÏÄÁ®±°³³¯®¯¯¯°°°°±±²³³´µ¶¶·¸¹»ÂÉÄÇÁÈåûÝßçðéæïõûõõîù 05(#.EPB:M^b`XYbf]Uahe_NZba_][YWVTRPOMKF=DED5&.:30òõàëçÙÜÚËÏÖÚúä»ÃÚΰµÇ¬®±ž˜–’ž—“•˜šœž ¢£¥§©«­®°²³µ·¸º»½¿ÀÁÈÕÝÜâßÙéóðöý÷ #%)# ',(.=ADPVQ^nj_`isvvtrllligeca_]\ZXVTSQOMLJIGEDBA?>=;:72432/âñøìêÛËËÒÒÀ½»°«§¢©©™ƒ…ŽŒ†‡‰‹Ž’”–˜šœž ¢¤¦¨ª«­¯±²´¶·¹º½¾ÀÁÃÇÇÅÈÉÊÌÍÖèìÝ×Üææíú &21-110:UsdRS]ekeky~~}zxvsqomkigeca_][XVUSQONLJIGFDBA?>=;:8764320/.,)%  úôïæâ̾±™„…‹ƒ€€€€€€€€„†ˆŠ’”–˜šœž ¢¤¦§©«­¯°²´µ·¸º¼½¿ÀÁÃÄÆÇÈÊËÌÎÏÑÒÓÛäëø '6?DEHIU^ijedfjkvz|}|zwusqoljhfdb`^\ZYWUSQPNLKIHFDCA@>=;:94-+)'&'  þøôñìéæáÚÕÒÑÎÆÀ¼¶±­¨³ËÕ˵›‡„™®¶¶±¡ˆŠ•¡¥¨¥œšž¢££¥§©ª¬®°±³µ¹º¼ÂÃÀÀÂÃÅÆÇÉÊÌÝäæãäèìðòìåêìïóþþ "2>;559937FOQLFGQ^eaamzzg]myywukekmjhfdaXWZZYWUSRPNMKIHB@AB@?;.-6641.+'$  þûøððïìëìéçäáâßϯ˜†€€€€€€€€€‚„†‹–˜Ž‘“•—™›Ÿ¡£¥§©ª¬®°±³µ¶¸º»½¾ÀÁÃÄÅÇÉÊÌÏÒÕÙÜàäçëîñõû  (26- #;QRUU@-+,+0Wsy~{xp][VZsspnljgdb`^][YWUSRPNLKIHFDCA@>=;:9764320.*! ýöçÖÎÖØÆ³¯´ÆÜãß×Ä‚€„Žœ­¸¼ÅÍͲ®ª®º»³¤“œ³ÄÍÎÀ¯¡Ÿ¡£¤¦¨ª¬­¯±²´½ÚÝͼ»½¿ÀÂÃÅÆÊÕÐÓÖÚÝàãæéìïòõøúý 1%$-7AB82HfjS84Fgzlhlnnsunb_ikigeca_ZMFQVTRQOMLJI@406=@?=<:)óë÷ " ù÷ûüøòõôñðîëÑÁÊØÞÖÍĽ³±§œ²ÉÆÀ¨€€‚…‡‰‹Ž’•£Ä¿£ž ¢¤¦¨«³µ­°²´µ·½ÌÕËÀ¿ÀÂÃÅÆÏáåÛÓÖÙÜàæø  #2+ 'DPD86>DCADIJJZvnG.&(Bdvwtnflljhfdb`XZZYWUSRPNMKIHF:?@?0ý "* ÿ éϹ¯µËçàÒ¶’–²»²ª«©™Œ‘Ÿ²­®±¸º¯¢¢«µÂÊÌÌñ¬®·ÉÑǽ»ÆÖäó ðô19+#+1*$)6>@JOPJDDJJGHRUURD. -??9 ÷Ýãçì)-éÑÒÓÓÒÒÒÑÑÞêÚÎÐÐÐÏÒåîäÏÑÐÐÐÑá"æÌÙïõèó"KLJ2ûþû"5@?-$00&&9IGGF=2-(*6>A9',9;1%3421-úèèúñèÖ¿±®·ÊãöùïÝĵ°³ÃÚéå¡¢­ßþþøðÒ¼¸ÉÙÚãòóÓ¸·ÍéòâÒÔåöîèåÜÞéö 'ÞËÓñ)âÛð ,1-íÒÒàþ ÷æäð%&! # !#øñú>MC$ üö÷.6õçéð!,*ÿññþ+/!ãØÝåìõ#&# óÜÒÖë#"áÍÑÏÒÙÜàãÚÊÀÅÎÍÄÃÃÅÑ÷ ñ×ÐØâò)*ýô-9=???A@<95220'$-2, ö÷ýÿúßÏÍÒÙë" þþ ýøû îÜÙáö ùòìíö ëÐÏñ 3(ïèò úííöûöñù $5/ÿý .86)%*/1)ñâíýíéñ÷öëßÙ×Üåî÷úëÒÆÈÍØßßÞãåÙǽÁÍÝí÷÷ëÚÌÁ¹½ÍÝçìðõöèÒÄÈÕÝÞÞãìóôõö÷óìèçìû  üõòü 6HE04D>+*6:<@<+'5<8+(8?>4*  üïëó ÿôïîòøýûïàÖ×áðýùéÛØãñú÷æÚÞòðßàô ñäåô ùéåìöù÷ñêæåïûüíáÚÓÖáìõ÷øøöô÷üÿúïíýóèïû ÿöîîý ÿ  þìæïþôììóüùíâÝàì÷úóæÞÝàéòøûüýûóìëóýùëßÝæõ ûúüÿ !#$  &14/.-*"&,./398. +3,  ùõöôðëéîøÿúéØÐÔ×ÖÛæîìàÔÌÊÒÜäçåßÜÝâæçâÚ×ÙàåçæçééäßÝÜÛÞæñöøõôôòñòõöøý  ,231+)()$"-51# $"øððõûÿþ÷ññ÷þýôéßÛàçëèäãèîññçÛÔØæõÿûóïðôùþùîåâêöÿùòëååëðòïîîðõüÿÿÿüùöóôü ÷ó÷þøõõöü  öïòý       üÿ  ûøøý  øõöúÿýõîêèëôúüôèßÛÜáçëîðñòíéèëïòôõõðåØÕàöÿõîíëèéòýúðéêôÿ þü           ûùùúþûôòðîíðôõõóòñïîîïîìëòö÷ôðîîîðóõóîêëðöûýüûþÿÿÿýüý          þÿ úö÷üþþüûüýúöõøýÿøðîòûþöððõüýýþüûûúûÿÿÿþûúýþú÷û  üùûÿ ûúÿ üûþûüýøöøÿÿýüûûúúúúùûüûùøûüüùøùüýøôòñô÷úýþýùõôøüýþýúúúúûûûûüúùùûýýýþüúùüÿýùöóõøüÿûúýÿ ÿþ üûþÿýÿ ÿ ÿýüûüýúø÷÷ùüþýüüüýýüøôô÷üÿÿüøõõöøùùøøúüþýûûûûúúúýÿÿýûúûüüüüýýþþþÿþþþ   ÿ þúùûþ   ÿýüþ ýýþûùúüüüýýüûùöôóô÷úþÿû÷õôôöøúüýþþýûûýþÿþþýûûûüýÿþüûùøúüÿþüûýþýþ úùú  þù÷ùÿ  ú÷÷øúûüÿÿøòîïôøüüüûüþÿýøóðð÷ÿþùõöùýþýþýüûûý ýûþÿþþýùøøüÿþûùøøûüûúúúù÷÷÷øúûýýüùööùþýûûý þüþÿþÿÿÿüúûþÿÿýüûûýþþýýÿÿüùø÷ûûõô÷ýÿÿÿ üùùûÿþüúùúûýþÿþüúúûýþÿÿÿþýüýýþÿþýýýþÿþýýþÿÿÿÿþýþÿÿýüûûüþÿÿÿÿÿÿÿÿÿÿþýþÿÿÿÿÿþÿÿÿÿÿÿÿÿþýýÿþüüýÿÿýýþÿÿÿÿþýýþÿÿüûûüýýþÿÿÿÿÿýüûüýþÿÿþýüüýýþÿÿþþþÿÿÿÿÿþþÿÿÿÿþÿÿÿÿÿÿÿþþþÿÿþþþþþýýýýýþþþþýýþþÿÿÿÿÿÿÿÿÿÿþþþÿÿÿÿÿÿÿÿÿÿþþþýþþÿÿÿþþþþþýýþÿÿÿÿÿÿþþþþþýüýþÿþýüûûûûüüüüüüüüüýþþþþýýþþÿþþÿÿÿÿþþþÿÿÿÿÿþýýýþþþþþþþþýþþþÿÿþþýýþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿþþþÿÿÿÿÿÿÿþþþþÿÿÿÿÿÿþþþþÿÿÿÿÿÿÿÿÿÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmagicmaze-1_4_3_6/data/sound/sound2.wav0000644000175000017500000010373010134226671016527 0ustar kentkentRIFFЇWAVEfmt TV¨¬data¬‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿýôéçççèèèéééêêêêêëëëììììííííîîîîïïïïïððððñññññòòòòòóóóóóôôôôôõõõõõõööööö÷÷÷÷÷÷øøøøøøø ÿú÷öööööööööö÷÷÷÷÷÷÷÷÷÷÷÷øøøøøøøøøøùøùùùùùùùùùùùùúúúúúúúúúúúúúûûûûûûûûûûûûûûûüüüüüüüüüüüüüüüüüýýýüþÿûùüðåëåîßô÷üßÙÙÚßÿìúàÛÜÛîðúîþçÞÝÞßýèîØÔÔÔé èÚØ×ÖÖØÙÙüâÝÜÜÛÜÝÞéñã%'øäð!,çáàààáâããääååååçèù'0ñéçæçéñ2+ò,+ ñþ$/óú1÷ìêéééëëëìíçìöÕÌËÊÌÎÓ÷ êÖÓÒÒÓÔÕÖרØÙÚÛÛÜÜÜÝÞà",õåæ*/îãâáæÿ,BFGGFEDCBBA@@?>>=<;;;=W}uG84322221100///..---,,+$ ,KRL. 'FMI) AJJ(ýý=FG&ù÷7CE&÷õ4@B'õóòòòòòòòó 1>@/óñððððñðñññ 6>?=õïîîîîïïîó -V__X3 ?TXWF !DLNC ýû '+&$ å×ÔÔÔÔÕÖÖÖÖÖ××÷$&&ñÚÕÔÔø#$$ë×ÔÓÓù"##æÖÓÒÒÛñ÷øùùøøøøø  öƺ¸¸½è öɽ»¼¼½¾¿ÀÁÁÁÁÂÃÏöøÐÆÄÅÅÆÇÈÉÉÊÊÊËËÌÙö  .MSTSQ0 õäÜÛÛÜÜÜÜÜÜÝà %,--Ôª ŸŸ ¼æñóôôè¶©¦§¨ª¼íùûüüú⹯®¯°²»ÒØÚÛÛÛÜÜÝÝÞÞÞßßààààáé 3WceedaBôîííííîîîïïîîïïø6<===<úÑ·¯®®³ÝøïƸ¶µµ¶·àÿ Ï¿¼¼¼½¿Û ÚÆÂÂÃÄÆÇÈÈÉÊËÌÌÍÎÏÏÐÑÒÓÓÔÕÕÖ×רØÙÚåøþ?JLMLKJ8ÿûúúúûüüüýýýýþþþþþþýýLssK5/.--       InuvutqpiL( ">^eeedbaX: ôÙÑÏÏÐÐÑÒÒÓÓÔÔÕÕÖÖ×רØÙÙÙÚÚÛÛÛÜÜÝÝÞÞÞßßàààááâââãããääååææççÑÇÄÄÅÅÇÜ ïÐÉÈÉÉËÌÍÍÎÏÐÐÑÒÒÓÔÔÕÖÖרØÙÙÚÛÛÜÜÝßìý ÿíçæåææçèèèèéê "'((('&%%$Chnnmmkjigc::Z_`_^]\ZYS8  $IRR>ùÕÉÇÇÇÈÉÉÊËåÞÐÜêîïïððð&8;<;;:9887ùìêéééééêêê +5665543321 êåäääååÝÈÃÃÄÄÅÆÇÈÈÉÊÊËÌÌÍÍÎÏÏÏÐÐÑÑà  ßÒÐÐÑÑÓÓÔÔÕÖÝïùûüüüüüüüüüüüýýýýüüüüý;FHGGEDDCBB5øôóóóóôôôôõõõõõõööööööööö÷÷÷÷÷÷÷÷÷÷÷;BBBA@>>>=<:+üðíííîîîîîîîø#6:88GNOONMLB"ýüûûüüüüüüüüüüüüüüüûûûûûûûûûûûûûûûûûûúúúúDW[\[YXVUUSRQJÿÿÿÿþþþþý50&$#" àÒÐÐÐÐÑÒÒÒÒÓÓÓÓÔÔÔÕÕÕÕÖÖÖÖ×××ØØØØÙÙÙÙÙÙÙÙá#$$#"!  èÕÒÑÑÑÒÓÓÓÓÓÓÓóêÒÍÌËÔéïðñððððû+789985433210.ëãáááâââââããâãããããããããããäääßÍÃÁÁÁÂÃÃÄÄÅÅÅÅÅÆËæ  öÔÅÂÂÂÃÄÅÅÅÅÆÆÇÓøõïöøùùùúúúùùж¯®¯¯±²³´´µ¶··¸¹ºº»¼½½¾¿¿ÀÁÂÃÄÄÅÆÆÇÈÈÉÊÊËËËÌÌÍÐé!FSTSRQOONMLH2 ÿýüüýýýýýýýýýýýýýýýýýýýýþþþýòáÛÚÚÛÛÜÜÝÝÞÞßßßàááââѶª¨¨©«¬­®¯±²³´µ¶·¸¹º»¼½¾¿ÀÀÀÁÂÂú'23443210//0///-èãããäååæççççèèí %&&&%$$$######"""þþþþþÿÿÿÿÿëÒÊÉÉËí þÙÏÎÎÎÏÑÒÒÓÔÕÖÖרÙç#%%%%$$########%, þûûûûüüýýýþýýýþþ 0EIIHHFFEDDCCCBAA5úöôôõöö÷÷øøøùùïߨרØÙÚÛÜÜÝÞÞßßààáù +:>>==<;::998877665544332221100///..--,,+++**))(('''&&%%$$##"!! "<]ghgecba`^]\[ZYXWUJ% þÞÏÌËËÁ²­¬¬­®¯°±²³´µ¶··¸¹º»¼½½¾¿ÁÂÂÃÄÅÆÆÇÇÈÈÉÎú#15554.ñêèèèéêêëëëìììììììí(577765432211000//..ñåãÜÌÄÂÃÃÄÅÆÇÈÈÉÉÊÊÌë õÔÌËËËÌÍÎÏÐÑÒÒÓÔÔÕÕÕÖ×Û"##"!! é×ÔÔÔÔÖÖ×Þö%255543322100//..--,,++**))((''&&&%%$$##"""!! ýøÔÃÁÀÀÁÂÃÄÅÆÆÇÈÉÊËËÌÍÍÎÏÏÐÐÐÑÒÓæ$6:/ ôðïïïððññññòòòòòóóóóóôôôôôõõõõõöööööö÷÷÷÷÷÷÷øøøøøùùùùùùùúúúúúúúúúúú5@BCBA@?>>=<;;:9988765.úìêêëëììíæÑÌËÌÌÍÎÏÏÐÐÑÒÒÓÓÔÕÕÖÖרØÙÙÚÚÛÛÜÜÝÞÞßßßàáááââããäääåååñ îéèèèèéêêëëììììíííõ(**))('''&&&%%%$$###"""!!! #>^eedcb`_]\[ZYXWVTSSRQPO;ÿÿÿ .BEFR_ccba_^\[YXWUTSSQPOKÿÿÿþþþýýýüüüüûûûûûûúúùïÜ×××××ØØØØØØÙÙÙÙÙÚÚÚÚÚÚÛÛÛÛÛÛÜÜÜÜÜÜÜÝÝÝÝÝÞÞÞÞÞÞÞÞÞÞßíüÿÿÿÿþþþþýýýýüüüüüûûûûûúúúúúùùùùøøøøøø÷÷÷÷÷÷÷öööööõõõõõõôôôôôôôóóóóóóóóóòòòòòòòòñññññññññññððñññðïãÓÏÎÏÏÏÐÐÑÑÑÒÒÒÓÓÓÔÔÔÕÕÕÕÖÖÖ×××ØØØÙÙÙÙÚÚÚÚÚÚÛú"###"!0=?@??>=<3ýüûüüüüñöµ´´¶·¸¹¹º»»¼½½¾¿¿ÀÁÁÂÃÃÄÅÅÇÇÈÈÇ»¬©ª«¬­®¯°±²³´µ¶·¸¸¹º»¼½¾¾¿ÀÀÄÛöþòÑÝêíîîïïðððñññòòòóóóôôôõõõõööö÷÷÷øøøøùùùùúúúúûûûüüüýýúìàÝÜÝÝÞßàááââããääååç!"##""!!!!! 2<=>>>=<;;::9988765554433221100//..----,,+!ÿòïïïðñññòòòòóóóôôôôõõõôõõõ&:===<;:9987766544332210000/.%êæåâÑÈÆÅÆÇÈÉÊÊËÌÌÍÎÏÏÐÑÑÑÒÒÓÖ-71ôððððññòòòóóóóóôôôôõõõõõõõõõõ,=Souutrpomljihged]L@=<;:::997úðîîîîïïïïïïðððððððððññññññðððô2787754332100/..-++*))('''&&%$êÝÛÛÛÜÝÝÝÞÞÞÞßßßßàààààáááááàááç <HJJIGEDCBA@?>=<;:98765433321( ß»®¬¬­®¯°±²³³´µ¶¶·¸¹¹µ¤œœžžŸ ¢­Øèìíííííííííííííîîîîîîîîîïïðððððé»­««¬­®¯³ÄÑÔÕÖ××רØÙÙÚÚÛÛÛÜÜÝÝÞÞßßßààááâââããääåååææçççèèéééêêêëëëììíííîîîïïïðððñññòòòóóóóôôôõõõõõõõ6;<=<;:998877650ÞÎËËÌÍÎÏÐÑÑÒÓÓÔÕÖÖרØÙÚÚÛÜÜÝÝÞÞÞßßãþ(:>>==<;::9887766554433221100///..--,,++***))((('''&&.DGHHGFEDCB:ÿâÅ¿¾¿ÀÁÂÃÄÅÅÆÇÈÉÉÊËËÌÍÎÎÏÐÐÑÒÒÓÔÔÕÖÖרÙÙÚÚÛÜÜÝÝÞÞßààááââãéú ?MON=/+*))))((('''&&&%%$$$###"###"! çÝÛÛÜÜÞÞßßààáâââãããäåñ3HLLLKJIHGFEEDCBBA@??>=<<;::98777665õîíìíííîîïïïïðððððññññññòòòòòòóóóóóôôôôôôôõõõõõõõöööö÷óåØÖÖ×רÙÙÚÚÛÛÜÜÝÝÞÞßßààááááââç'4788766544322100//.--,,++*))(('&&%$$##""!! ûúúúúúúúúúúúúúúúùùùùøøø&9==<;:98765433210//.-,++*)(('&%%$$##"çÝÛÚÚÚÛÜÜÜÜÜÝÝÝÝÝÝÞÞÞÞÞÞÞßßßßßßààßßßßà!#$%;AA@?>=<;:9865543210/.-,+*)('''&%äÞÜÜÜÜÝÝÝÝÝÝÝÝÞÞÞÞÓľ½½¾¾¿¿ÀÀÁÁÂÂÂÃÃÄÄÅÅÅÆÆÆÇÇÈÈÉÉÉÊÊÊËËÌÌÌÍÍÍÎÎÏÏÏÏÐÐÐÑäïòóóóóòòòòòòòòòòòòòñññññññññññññññññññññððððñ(3443210/.-,,+*)(('&%%$#""! ùÛÓÒÒÒÒÓÓÔÔÔÔÕÕÕÖÖÖ×ɼ¸··¸¸¹º»»¼¼½½¾¾¾¿¿ÅîÿÿÿÿæÙÖÖÖ××ØØØÙÙÙÙÚÚÚÛÛÛÛÜÜÜÜÝÝÝÝÞÞÞÞßßßßàààâèëììãÔÍÌÌÌÍÎÎÏÏÐÐÑÑÒÒÓÓÔÔÕÕÖÖ××רØÙÙÚÛÛÜÜÁ¤œ››œžŸ ¡£¤¥¦¨©ª«¬­®°±²³µ¶·¸¹º»¼¾¿ÀÁÂÃÃÄÅÆÇÊåÿ(***)))(((('''''&&&&&%%%%%$$$$######"""""!!!!! !! äÎÉÈÈÉÊÌÍÎÎÏÐÑÒÓÔÔÕÖרÙÚÚÛÜÝÞí#%%%$$$#####"""$3@BBBAA@??>>===<<;;::::994ûôòóóôôõõõööÿ,01100/....---,,+++***))((''-Rehihgedcba`_^]\[ZYXWVUTSRQPONMLKIHHG:)%$##!åßÞÞÞßàááââàϱ«««­®¯°±³³µµ¶·¸¹º»¼½¾¿ÀÁÂÃÃÄÅÆÇËÚçêëëììììííîîîïïðððñññòòóóóôôôõõõööö÷÷÷øøøùùùúúúûûûüüõäÞÝÝÞßààáââãääååççèééêêëëìííííîîïû%255443222111000////...---,,,,+++****)))))))'îåääääåæì!"""!! #3;=>==<;;:99887766554433221100//..--,,+**)))((''&&&%%!  !!!!  äØÖÕÕÖ××ØØØÙÙÚÚÚÛÛÜÜÜÝÝÝÞÞÞßßßàààáááâáâââåù%'&&&%$$ ÿÿÿÿÿÿûÙ½¼½½¿ÀÁÁÂÃÃÄÅÅÎàçèéééééêêêêëëëëììììííííîîîïïïïðððððññññòòòòòóóóóôôôôîÜÖÕÖÖרØÙÚÚÚÛÜÜÝÝÞÞßßààááâããääååææçççèèééêêëëëììíííîîïïïðððññòòòóóóôôôõõõööö÷÷÷øøøùùùúúúúûûûüüüüýýýþþþþþÿÿÿ"DTVVUTSRQPONNMLKJJIHGFFEDCCBA@@?>==<;;:9988766*6MQQQONLKJIHGFEDCBAA@?>=<;:99876%üúùùùù ÞÓÑÑÒÒÓÔÔÔÕÕÕÖÖÖÖ×××ØØØÙÙÙÙÚÚÚÛÛÛÛÜÜÜÝÝÝÝÞÞÞÞÞÞÞÞâù ""!! ÿòîíÚ¹­«ª«¬­®¯°±±²³´´µ¶··¸¹ºº»¼¼¾¾¿ÀÀÁÂÂÃÄÄÅÆÆÇÈÈÉÉÉÉË×î*...-++*))(('&&%%$$#""!! Ü»´³³´µ¶·¸¹¹º»¼¼½¾¾¿ÀÁÁÂÃÃÄÅÅÆÇÇÈÉÉÊËËÌÍÍÎÎÏÐÐÑÑÒÓÓÔÕÕÖ×רØÙÙÚÚÛÛÜÜÝÝÞÞßßààááââããääåååææççèèèééêêëëëììííííîñý  2BEFFEDB/$! #/1110/..--,++**))(('&&%%$$##""!!  ÿëåäääääååååååååæææææææææçççççççççèèèèèèèèèéééèèèèë!).<EGFECBA@?>=<;:9876543210//.-,+*)(('&%$##"! ëÛÈ»¹¸¹ºº»»¼½½½¾¾¾¿¿ÀÀÁÁÂÂÃÃÄÄÄÅÅÆÆÇÇÇÈÈÉÉÉÊÊËËËÌÌÍÍÍÎÎÏÏÏÐÐÐÑÑÑÒÒÓÓÓÔÔÔÕÕÕÖÖ×××ØØØÙÙÙÚÚÚÛÛÛÜÜÜÝÝÝÝÞÞÞßßßàààààå÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþþþþþþþþþýúìáÞë ìÜÙØ×ØØÙçõùúûûèɼº¹º»¼½¾¿¿ÀÁÁÂÃÄÄÅÆÆÇÈÉÉÊËËÌÍÍÎÏÏÐÑÒÒÓÔÔÕÕÖ×רØÙÚÚÚÚÛÛÜàú1INONNLKJIHHGFEED>/$"! êßÝÜÜÝÞßßàààáááââãããääåååæææçççèèéééééêêú :GIHHGFED@' ïéèèééêêêëëëììììíîîîïÝÀ²¯°°²³µ¶·¸¹º»¼½¾¾¿ÀÁÂÃÄÅÆÇÈÉÊËËÌÍÎÏÐÑÑÒÓÔÕÕÖרØÙÚÚá#KTUUTSRQPOONMLLKJJIHGFFEDFS^``_^]\[ZYXWVUTSRQPONMLKKJIHHGFE?$ õèäããääåææççåȶ²±±²´µ¶·¸¹º»¼½¾¿ÀÀÁÂÃÄÅÆÇÈÈÉÊËÌÍÎÏÐÐÑÒÓÙíóõõöööö÷÷÷øøøùùùúúúûûûüüüýýýþþþÿÿÿÿ úòññññòóóôôõöö÷÷øøøùùúúûûûüüýýýþþÿÿÿ@X\\\[ZYXWVVUTSSRQPPONNMLKKJIIHHGFFEDDCBBA@@?>>==<<;;9(2MTUUTRQPONMLLKJHGFEDDCBA@?>==<;:9987654432110/..-,,+*))('''&&$ñåããããääääååååååååææææææææææççóÿÿÿÿþþþþþþýýþýýýîÍÇÆÅÆÇÈÈɵ­¬­®®°±±²³´µ¶¶·¸¹¹º»¼½½¾¿¿ÀÁÂÂÃÄÅÅÆÇÇÈÉÉÊËËÌÍÍÎÎÏÏÐÑÑÚêðòòóóóóóóóôôôôôõõõõõõööööö÷÷÷÷÷÷øøøøøøùùùùùúúúùùùúþ&68998876544332100/..--,,+**))((''&&%%$$##""!! ÿýýýýýüèÉÀ¾¿¿ÀÁÂÃÄÄÅÆÆÇÈÈÉÊÊËÌÌÍÎÎÏÏÐÐÑÒÒÓÓÔÕÕÖÖ×רØÙåóøùùúúúúúúúúúúûûûûûûûûüüüüüüüüýýýýýýýýþþþþþþþþþþÿÿÿÿÿýïäââââãääååæææççèèèééêêëëëìììííííîñ%''&&%%$$$###"""!!!! -0//..-,,+**))((''&%%$$##""""!! ñéççççèèéééééêêêêëëëçÙÐÎÎÏÏÐÑÑÒÒÓÓÔÔÕÕÖÖ×רØÙÙÚÚÚÛÛÜÜÝÝÞÞßßßààááâââããääääååîþôéçææççèèèéééêêêëëëììììíííîîîïïïïððñññññññó(/100/.--,-;FGGFEDCCBA@?>>=<;::9877654432210//.--,++*))(''&&%%$#$ýÞÊÆÅÅÆÆÇÈÉÉÊÊËËÌÌÍÍÎÎÏÏÐÐÑÑÒÒÓÓÔÔÕÕÖÖ××ØØØÙÙÚÚÛÛÛÜÝÝÝÞÞßßßàààáááââââãç!""! &/100/.--,++*))(''&&%$$##"!  ;N7 ÷ïîííííîîîîíîîîîîíîíííîîííííîíííîíííííîîîîîíîîîîîíííííò ÿÿÿÿþþþþýýýýüüüüüûûûûúúúúúúùùùùùøøøøø÷÷÷÷÷÷÷ööööööõõõõõõôôôôôôôôôôôôóïÝÖÕÕÖÖÖ×××ØØØØÙÙÙÙÚÚÚÚÛÛÛÛÛÜÜÜÜÝÝÝÝÞÞÞÞÞßßßßàààààáàáááé÷þÿÿÿÿÿÿþþþþþþþýýýýýýýüüüüüüüüüüûûûûûûûûûúúúúúúúúúúúúõáÝÜÜÝÝÞÞÞÞßßßààààááááâââãããããäääååååææææçççççèèèèééééêêêêëëëëëìììììíííííîîîîïïïïïïððððññññññòòòòòóóóóóôôôôôôôþ  òîííííîîîïïïïðððððññññòòòòòóóóóóôôôôôõõõõõöööööö÷÷÷÷÷÷áØ×ØØÙÚÚÛÛÜÜÝÞÞÞßààááââãããäååææçççèèééêêêëëììíííîîïïïðððññòòóóóçÛØØØÙÚÛÜÜÝÞÞßßàááâããäååææççèééêêëëëìì#*++++**)(((-R\]ctwvutrqponlkjihgfdcba`_^]\[ZYXWVUTRRQPONMLKJIHGFEEDCBA<.$"êäãããäåååææææççççèèèèééééêêêêëëëëìììììííííîîîîîïïððâż»º»¼½¾¿ÀÁÂÃÃÅÆÇÇÈÉÊÊËÌÍÎÎÏÐÐÑÒÓÓÔÕÕÖ×רÙÙÚÛÛÜÝÝÞÞßàéùþÿÿÿÿÿ õîíììííø#%&&&%%%$$$$#####"""""!!!!! .79988766554433221100//..--,,++***))(('''&&%%%$$##"""!!  òçåääååææçççèèèééééêêêëëëëììììííííîïïïïéØÔÔÔÕÕÖ×רØÙÚÚÛÛÜÜÝÝÞÞßßààááââããääååææççèèèééêêëëëìììíó ûòðïðððññòòòóóôôôõõõöööö÷÷÷øøøøùùùúúúûûûûüüüüýýýýþþþþþÿÿÿ-9;;::988766554433221106DIJJIHGGFEDCCBA@@?>==<;;:98876544322100/..-,,++*)))(''# ÿÿÿþþÿ  ÿÿÿþþþþýýýüüüüûûûúúúúùùùùùøøøø÷÷÷÷÷÷÷èÍÂÀº®§¦¦§¨©ª«¬¬­®¯¯°±²²³´µµ¶··¸¹¹º»¼¼½¾¾¿ÀÀÁÂÂÃÄÄÅÅÆÇÇÈÈÉÉÊÖãçèééééêêêêêëëëëìììììíííííîîîîîîïïïïðððððððñññññòòòòóóðãÙ×Öרâý  ñÔ¿¶µµ¶·¸¹ºº»¼½½¾¿¿ÀÁÂÂÃÄÄÅÆÆÇÈÈÉÊÊËËÌÍÍÎÎÏÐÐÑÒÓÓÔÔÕÕÖÖ××àñõöööööö÷÷÷÷÷÷øøøøøøùùùøøøøù 6Yfhhfdca`_^\[ZYXWVTSRQPONMLKJIHGFEDCBA@?>=<;:987665432100/.-,++*)(''&%$$#"!! ÿÝÇÄÄÄÅÆÆÇÇÇÈÈÉÉÉÊÊËËËÌÌÌÍÍÍÎÎÎÏÏÐÐÑÑÒÒι£ŸžŸ ¡¢£¤¥¨³ÁÅÆÇÇÈÈÉÉÊÊËËÌÍÍÎÎÏÏÐÐÑÑÒÒÓÓÔÔÔÕÕÕÖì üóòòòòòòóóóóóóóóôôôôôôôõõõõõõõõõöööööööö÷÷÷÷÷÷÷÷÷øøøøøøøøøøùùùùúúúúúëÌÃÁÁÂÃÄÅÆÇÈÈÉÊËËÌÍÎÎÏÐÐÑÒÓÔÔÕÕÖ×רÙÙÚÚÛÜÜßí÷úûûüüüüüýýýýþþþþþÿÿÿÿ9>>>==<;7% ,01000/..--,,,++****))(üðîíííîïïïðððññññòòòóóóóôôôôõõõõööö÷÷÷÷øøøøøùùùùúúúúúûûûûûüüüüüýýýýýýþþþþþþÿÿÿÿÿÿøêæó $-/00//.--,,++**))((''&&%%$$###""""!! íçææææçççî  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþ)567664332110/..,,++*))(''&&%$$#""!! !08998765432210/.--,+**)('&&%$$#"!! þàÊÀ¾¾¾¿ÀÁÁÂÂÂÃÃÄÄÅÅÅÆÆÇÇÈÈÈÉÉÊÊÊËËÌÌÌÍÍÎÎÎÏÏÏÐÐÐÑÑÒÒÒÓÓÓÕèïññññðððððððððððððñðñððñññññññññññññññññññññññññññññññññññññññññññññññññòòòòòòòòòòòòòòòòòòòòòòòòóóòóóóóóóóóóóóðßÚÙÙÙÙÚÚÛÛÛÜÝÝÝÞÞÞßßàààáááâââãããäääåååææææçççèèèéééééêêðÿüïéý !!  ñØÐÎÎÏÏÐÑÑÒÒÓÜêïðððñðððññññññññòòòòòòòóóóóóóóóóôôôôôôôôõõõõõõõõööööööïàÜÜÜÝÝÞÞßßàààááâââããäääååæççççÖ»µ´µ¶·¹º»¼½¾¿ÀÀÁÂÃÄÅÆÆÇÉÔáæçèèéééêêëëììííîîïïïððññòòóóóôôõõööö÷÷÷øøùùúúúûûûüüüýýýþþþÿÿ 8?@6)%$$############"""""""""!!!!!!!! 4Yknonlkjhgfedcba`_^][ZYXWVUTSRQPONMLKKJIHGFEDCCBA@??>=<9.!ôåãâââããääääååååææçççèãɶ²±²³´µ¶·¸¹ºº»¼½¾¿¿ÀÁÂÃÃÄÅÆÆÇÈÉÉÊËÌÌÍÎÎÏÐÐÑÒÓÓÔÕÕÖרØÙÚÚÛÛÜÝÝÞÞßßààáâæ÷ýÿÿÿÿÿ &69998776655440#(**))((''&&%%%$$##"""!! üåßÞÞÞßßàààáááâââãããäääååååæææççççèèèééééêêêëëëéÙÓÒÑÒÕú  êÛØ×Ì¿¿¿ÀÀÁÂÃÄÄÅÆÆÇÇÈÉÉÊËËÌÌÍÎÏÏÐÐÑÒÒÓÓÔÔÕÖÖ×רØÙÙÚÚÛÛÜÜÝÝÞÞßßààáááââããääååæææççèèèééêêêëëìììíííííîîî$&&&&%$$##""$1=Yjmmlkihfedcb`_^]\ZYXWVUTSQPONMLKJIHGFEDBA@?>=<;::9875( ÿäÖÓÓÓÔÔÕÕÕÕÖÖÖÖ×××××רØáîòóóóóóóòòòòòòòòòñññññññññññðððððððððïïïïïïïïïïïïïïïïïïîîîîîîîîîîîîîîîîîîîîîîîîîîííîíííííííííííííííííííííííííííêßÕÓÓÓÔÔÕÕÕÖÖÖ××××ØØØÙÙÙÚÚÚÚÛÛÛÜÜÜÝÝÝÝÞÞÞßßßßààààáááâââãÚÊÉÊËËÌÍÍÎÎÏÐÐÑÑÒÒÓÔÔÕÕÖÖ×רØÙÙÚÚÛÛÜÜÝÝÝÞÞßßààáááââããääååâÕÎÍÍÎÎÏÐÑÑÒÓÔÔÕÖÖ×רÙÙÚÛÛÜÜÝÞÞßßààáââããääåææççèèééêêëëììííîîïïðððññòòóóôôôõõöö÷÷÷øøùùùúúûûüüüýýýþþþÿÿÿ  $&'&&&&%%%%%$$$$$######""""""!!!!!! 1HOPPONMLKJJIHGFFEDDCBAA@?>>=<<;:9987765544322100/...-,$ 5;<;;987665432210/...-,+÷ ÿÿÿÿþþþþýýýýøéãââââââââããããããããããããääääääääääääåååååååååååååååæôüçãââââãããããããããäääääääääååååååååååæææææææææææçççççççêøÿÿÿÿÿÿþþþþþýýýýýüüüüüüûûûûûúúúúúúúúúúú÷ÛÈÅÅÅÆÇÇô°°±±²³´µ¶¶·¸¹ºº»¼½½¾¿¿ÀÁÂÂÃÄÄÅÆÆÇÈÉÉÊËËÌÍÍÎÎÏÐÐÑÒÒÒÓÔÔÖãîðñññòòòòòóóóóóôôôôõõõõõööööö÷÷÷÷øøøøøøùùùùùúúúúúúûûûûüüüüüüüüýýýýýýþþþþþþþÿÿÿÿÿÿúïëëëëìíííîîïïïððñññòòòóóóôôôõõõööö÷÷÷øøøùùùúúúûûûûüüüüüþ üûûûûüüüýýýýþþþþÿÿÿÿÿ*5788765544433221100//...--,,+++**))(('''&&&%%$$$###""!!! %25544321100/..--,++**))(''&&%%$$##""!! ïéèèèèééêÞÕÒÑÑÒÒÓÓÔÔÕÕÖÖ×××רØð  5<==<:98765543210/.--,+*)(('&%$$#"!!  ýóññññððððïïïïïîîîîííííììììììëëëëêêêêêêéééééééééééßÇ·´´µ¹ÅÎÐÑÑÑÑÑÒÒÒÒÒÒÓÓÓÓÓÓÔÔÔÔÔÔÕÕÕÕÕÕÖÖÖÖÖÖ××××××ØØØØØØÙÙÙÚÚÚÚÊÃÂÂÂÂÃÃÄÅÅÆÆÇÇÈÈÉÉÊÊÊËËÌÌÍÍÍÎÎÏÏÐÐÐÑÑÒÒÓÓÓÔÔÕÕÕÖÖÖÖÖ×ãþ  ôêÕ¿º¹º»¼½¾¾¿ÀÀÁÁÂÂÃÄÄÅÆÆÇÇÈÈÉÊÊËËÌÍÍÎÎÏÏÐÑÑÒÒÓÓÔÔÕÕÖÖ××Þêñòòòóóóóóóóôôôôôõõõõõöööööö÷÷÷÷÷÷øøøøøøùùùùùùúúúúúúûûûûûûûüüüüüüýýýýýýþþþþþþþþÿÿÿÿÿÿÿÿûðìëëëëìíííîîïïïðððññòòòóóóôôôõõõööö÷÷÷øøøùùùúúúúûûûûüüüý üüüüüýýýþþþþÿÿÿÿåÖÓÒÓÔÕÖרØÙÚÛÜÜÝÞÞßàááâããäåææçèééêëëììííîð"###"""""""""""""!!!!!!!!!!!!!! !$/79988877666555444333222111000///...----,,,+++****))))((()<?@@??>==<.  !"!!!  5<=<<;:987665443320"óæããääåååææææççççèèèèèèééééêêêêêëëëëëììììììííííîîîîîîîïùñ×ÒÑÑÒÓÔÔÕÐÁ¾¾¿ÀÁÂÂÃÄÅÅÆÇÇÈÉÊÊËÌÌÍÎÎÏÐÑÑÒÒÓÔÔÕÖÖ××רÙàö   !!! üùùøøøùùùùùùùùùùùùùùùùúúúúúóÜÌÉÉÉÊËÌÌÍÍÎÏÏÐÑÑÒÒÓÔÔÕÕÖÖ××Þëðñòòóóóóóóôôôõõõõõöööö÷÷÷÷÷øøøøøùùùùùùùúúúúúûûûûûûüüüüüüüüýýýýýýýþþþþþþþÿÿÿÿÿÿÿÿöîìëëììííîîîïïïððððññññòò #$$$##"!!!! !/222100/..--,,++**))((''&&%%$$###""!!  ÿÿÿÿÿÿÿÿÿÿÿþþþþþþþþþþþþþýýýýýýýýþýþðÕÎÍÍÍÍÎÏÐÑÑÒÒÓÓÓÔÔÔÕÛý   õðîîîîîîîîîîîîîîïîîîïïïïïïïïïïïïïïïïïïïïïïïïïïïïïðððïïïïðøÿÿÿÿÿþþþþþýýýýýýüüüüüüûûûûûúúúúúúúúùùùùùùøøøøøøøø÷÷÷÷÷÷÷÷÷öööööööööööõõõõõõõõðâÞÞÞÞÞÞßßßßßààààáááááâââââãããããäääååÚö´´´µ·¸¹¹º»»¼½¾¾¿ÀÁÎ×ÚÛÛÜÜÜÝÝÝÞÞßßßàààááâââãããääåååææçççèèèéééêêêêëëëììíííîîêÞØØØÙÙÚÛÛÜÜÝÝÞÞßßàááââããääååæææçèèèééêêëëìììííîîïïïððñññòòóóóôôôõõõöö÷÷÷øøøùùùúúúûûûüüüýýýþþþþÿÿÿ !!!)FNONNMLKJIHHGFFEDDCBAA@??>==<;;:99877665443321100//.--,,++*))((''&&%%$$##""!!  þûúúúúúúúúùúùùùùùùùùùùù÷ÜÍÊÊÊËÌÍÍÎÎÏÏÐÐÐÑÑÒÒÓÓÔÔÕÕÖÖÖÖ××Ûæîðññññððñò!#""! ýùø÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ööööööööööööööööööööööõõööõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõõôõôôôõôôôôôôôôôôôôôôôôôôôôôôôþ úäÛÚÚÚÚÛÛÜÜÜÝÝÝÞÞÞßßßßàààáááââââãããäääååååææææçççèèèèèáÕÓÓÓÔÔÕÕÖ×רØÙÙÚÚÛÛÜÜÝÝÝÞÞßßààááâââããäääååæææççèèèéééêêêëöÿüôòññòòòóóóôôôôõõõöööö÷÷÷÷øøøøùùùùúúúúúûûûûûüüüüýýýýýýýþþþ üúmagicmaze-1_4_3_6/doc/0000755000175000017500000000000011177247755013314 5ustar kentkentmagicmaze-1_4_3_6/doc/TODO.TXT0000644000175000017500000000367411076454376014471 0ustar kentkentTO DO - ideas, suggestions, plans etc for Magic Maze. MISSING FROM OLD MAGIC MAZE * End game sequence (colour cycling) MOVEMENT * fine-grained movement - slide toward opening when crashing into single blocks * filter diagonal input for OLPC rocker game pad. * mouse-aim * transform sprite (rotate) along movement/aim direction. - realtime would require SGE... GAMEPLAY * Boss end-game - Luciper moving left and right, firing off monsters. - Control wizard at bottom, shooting spells upwards. * Dynamic GOO - The goo left by dead monsters have effects: -- Green - Sticky - 50% chance of movement failing (rotation and direction) -- Red - Yucky - 80% chance of loosing health point. -- Blue - Slippery - 60% chance of continuing a directional movement impulse. -- Yellow - Stinky - 40% chance of random rotational movement? * enemies shoot back - using spells * enemy energy and stamina affecting their decisions * different modes of enemy perception (some smell, some see, some hear) - change when/how they react to the player - store events they can access (sound of player within range, smell of player within range etc) * triggers - on positions (such as hints about key use before hitting doors) - on events (specific monsters attacked) * Auto-play - Demo recording/replay? * Map editor - Educational; sharing maps? * Training level - all monsters locked - plenty of keys - long hallways with rooms for training. MULTIPLAYER * several players on one machine - Gauntlet style? - 4 tiled gameviews? - coop/deathmatch? * Internet play - Separate game server which OKs requests ("Can I move here? Can I shoot?") and and distributes diffs of the gameplay (Change tile X,Y from A to B etc) JOYSTICK SUPPORT - should be easy, since SDL already provides it. - In Linux on my home system, as root: modprobe emu10k1-gp modprobe analog modprobe joydev chmod a+rx /dev/input/js0 magicmaze-1_4_3_6/doc/BUGS.TXT0000644000175000017500000000423511102400015014421 0ustar kentkent __________ 2008-10-30 Seems slower to start on the XO than before. Multiple fade-in after stopping a game. __________ 2008-09-21 Title loop... Loading level: 7 init: Player#location: 0 0 Updating checkpoint for level 7. Game loop ./magicmaze/movement.rb:168:in `warn_could_not_find_old_entity': Moved entity not found on point of origin. (ArgumentError) from ./magicmaze/movement.rb:128:in `set_coords!' from ./magicmaze/movement.rb:34:in `add!' from ./magicmaze/game.rb:35:in `move_forward' from ./magicmaze/player.rb:90:in `move_forward' from ./magicmaze/player.rb:145:in `send' from ./magicmaze/player.rb:145:in `follow_impulses' from ./magicmaze/player.rb:142:in `each' from ./magicmaze/player.rb:142:in `follow_impulses' ... 11 levels... from ./magicmaze/input.rb:278:in `check_input' from ./magicmaze/magicmaze.rb:156:in `title_loop' from ./magicmaze/magicmaze.rb:167:in `loop' __________ 2005-03-13 Coming to level 3, from level 2. Was firing lowest attack spell (lightning) while exiting level 2. Suddenly I could no longer fire lightning. All others were OK, just not lightning. Tried to restart level, same problem. Looks like the list of active spells aren't being emptied when we change levels. Same as from 2004-10-27? __________ 2005-01-30 Level 2 - A fake wall blocks. Ditto level 9. __________ 2004-10-27 Level 3 - suddenly lowest missile spell stops working. Upon exit, I get : ./magicmaze/movement.rb:157:in `warn_could_not_find_old_entity': Moved entity not found on point of origin. (ArgumentError) from ./magicmaze/movement.rb:125:in `set_coords!' from ./magicmaze/movement.rb:34:in `add!' from ./magicmaze/game.rb:24:in `move_forward' from ./magicmaze/player.rb:73:in `move_forward' from ./magicmaze/player.rb:127:in `send' from ./magicmaze/player.rb:127:in `follow_impulses' from ./magicmaze/player.rb:124:in `each' from ./magicmaze/player.rb:124:in `follow_impulses' ... 9 levels... from ./magicmaze/input.rb:97:in `check_input' from ./magicmaze/magicmaze.rb:81:in `title_loop' from ./magicmaze/magicmaze.rb:88:in `loop' from ./mm.rb:20 magicmaze-1_4_3_6/testmm.rb0000755000175000017500000000006410134226413014364 0ustar kentkent#!/usr/bin/ruby require 'magicmaze/test_magicmaze' magicmaze-1_4_3_6/COPYING_GPL.txt0000644000175000017500000004313111041045335015100 0ustar kentkent GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. magicmaze-1_4_3_6/mm.rb0000755000175000017500000000703611041325725013476 0ustar kentkent#!/usr/bin/ruby -I. ############################################################ # This game is FREE as in both BEER and SPEECH. It is available and can # be distributed under the terms of the GPL license (version 2) or # alternatively the dual-licensing terms of Ruby itself. # Please see README.txt and COPYING_GPL.txt for details. # # Magic Maze - a simple and low-tech monster-bashing maze game. # Copyright (C) 2004-2008 Kent Dahl # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################ require 'getoptlong' options = GetoptLong.new(["--help", "-h", GetoptLong::NO_ARGUMENT ], ["--nosound", "-S", GetoptLong::NO_ARGUMENT ], ["--debug", "-d", GetoptLong::NO_ARGUMENT ], ["--fullscreen", "-f", GetoptLong::NO_ARGUMENT ], ["--scale", "-s", GetoptLong::REQUIRED_ARGUMENT ], ["--level", "-l", GetoptLong::REQUIRED_ARGUMENT ], ["--loadgame", "-L", GetoptLong::NO_ARGUMENT ], ["--volume", "-v", GetoptLong::REQUIRED_ARGUMENT ], ["--joystick", "-j", GetoptLong::OPTIONAL_ARGUMENT ], ["--savedir", "-D", GetoptLong::REQUIRED_ARGUMENT ] ) def show_usage puts <<-USAGE Magic Maze, a Ruby/SDL game. usage: ruby mm.rb [--help] [--nosound] [--level #] [--joystick [#]] -h --help Show this message -j --joystick Enable joystick support -l --level Assign a start level (1-10) -L --loadgame Load savegame automatically -D --savedir Specify savegame directory -S --nosound Disables sound -v --volume Set volume (1-10) -f --fullscreen Start in fullscreen mode -s --scale Scale the graphics and resolution up (1-5) USAGE end opt_hash = { :sound => true, } options.each do |option, argument| case option when "--help" show_usage exit when "--nosound" opt_hash[ :sound ] = false when "--volume" opt_hash[ :volume ] = (argument || 5).to_i when "--level" opt_hash[ :start_level ] = Integer(argument) when "--loadgame" opt_hash[:loadgame] = true when "--joystick" opt_hash[ :joystick ] = (argument || 0).to_i when "--debug" opt_hash[:debug] = true when "--fullscreen" opt_hash[:fullscreen] = true when "--savedir" opt_hash[:savedir] = argument when "--scale" scale = (argument || 1).to_i unless ((1..5).include? scale) then raise ArgumentError.new("Invalid scale.") end opt_hash[:scale] = scale OVERRIDE_GRAPHICS_SCALE_FACTOR = scale module MagicMaze class Graphics OVERRIDE_GRAPHICS_SCALE_FACTOR = OVERRIDE_GRAPHICS_SCALE_FACTOR end end end end require 'magicmaze/magicmaze' MagicMaze::Game.new( opt_hash ).loop