All pastes #200278 Raw Edit

Mine

public ruby v1 · immutable
#200278 ·published 2006-10-13 01:54 UTC
rendered paste body
#--------------------------------## Metroid Map Script             ##  by Prexus                     ##   made for MeisMe's PRISON     ## Do not use without permission. ##--------------------------------## Example Map Name: M-1-A-1-B    ##--------------------------------#class Scene_Title  $map_names = load_data("Data/MapInfos.rxdata")  for key in $map_names.keys    $map_names[key] = $map_names[key].name  end  alias prexus_metroid_stitle_command_new_game command_new_game  def command_new_game    $map_objects = {}    for key in $map_names.keys      map_info = $map_names[key].split('-')      next unless map_info      next unless map_info[0].upcase == 'M'      $map_objects[key] = Map_Object.new      $map_objects[key].big_id = map_info[1]      $map_objects[key].x = alpha_convert(map_info[2])      $map_objects[key].y = map_info[3].to_i - 1      $map_objects[key].type = type_convert(map_info[4]) if map_info[4]    end    prexus_metroid_stitle_command_new_game  end  def alpha_convert(letter)    case letter.upcase    when 'A'      return 0    when 'B'      return 1    when 'C'      return 2    when 'D'      return 3    when 'E'      return 4    when 'F'      return 5    when 'G'      return 6    when 'H'      return 7    when 'J'      return 8    when 'K'      return 9    end  end  def type_convert(letter)    case letter.upcase    when 'B'      return 1    when 'E'      return 2    end  endendmodule Map_Colors  BORDER = Color.new(255, 255, 255)  UNVISITED = Color.new(96, 96, 96)  VISITED = Color.new(255, 128, 255)  START = Color.new(128, 255, 128)  BOSS = Color.new(128, 128, 255)  PLAYER = Color.new(255, 255, 0)endclass Map_Object  attr_accessor :big_id  attr_accessor :x  attr_accessor :y  attr_accessor :visited  attr_accessor :type  def initialize    @big_id = 0    @x = 0    @y = 0    @visited = false    @type = 0 # 0 = Blank, 1 = Dungeon Entrance, 2 = Boss Area  endendclass Game_Map  alias prexus_metroid_gmap_setup setup  def setup(map_id)    prexus_metroid_gmap_setup(map_id)    if $map_objects[@map_id]      unless $map_objects[@map_id].visited        $map_objects[@map_id].visited = true      end      if $scene.is_a?(Scene_Map)        if $scene.map.big_id != $map_objects[@map_id].big_id          $scene.map.big_id = $map_objects[@map_id].big_id        end        $scene.map.refresh      end    end  end  def big_id    return $map_objects[@map_id].big_id if $map_objects[@map_id]    return 0  endendclass Map < Sprite  attr_accessor :big_id  def initialize    super()    self.x, self.y = 0, 0    self.bitmap = Bitmap.new(640, 480)    self.bitmap.font.name = 'Georgia'    self.bitmap.font.bold = true    self.bitmap.font.size = 14    self.opacity = 255    self.visible = true    self.z = 9998    @offset = [32, 32] # [x, y]    @room_size = [20, 16] # [width, height]    @big_id = 0    refresh  end  def refresh    self.bitmap.clear    return unless @big_id != 0    maps = {}    for object in $map_objects      next unless object[1].big_id == @big_id      maps[object[0]] = object[1]    end    top_x = 0    top_y = 0    for map in maps.values      top_x = map.x if top_x < map.x      top_y = map.y if top_y < map.y    end    for x in 0..top_x + 1      for y in 0..top_y + 1        map = find_map(maps, x, y)        next unless map        draw_x = @offset[0] + (x * @room_size[0])        draw_y = @offset[1] + (y * @room_size[1])        self.bitmap.fill_rect(draw_x, draw_y, @room_size[0], @room_size[1],                              Map_Colors::BORDER)        fill_color = (map.visited ? Map_Colors::VISITED : Map_Colors::UNVISITED)        self.bitmap.fill_rect(draw_x + 1, draw_y + 1, @room_size[0] - 2,                              @room_size[1] - 2, fill_color)        case map.type        when 1          self.bitmap.fill_rect(draw_x + 6, draw_y + 6, @room_size[0] - 12,                                @room_size[1] - 12, Map_Colors::START)        when 2          self.bitmap.fill_rect(draw_x + 6, draw_y + 6, @room_size[0] - 12,                                @room_size[1] - 12, Map_Colors::BOSS)        end        if ($map_objects[$game_map.map_id].x == x) and            ($map_objects[$game_map.map_id].y == y)          self.bitmap.fill_rect(draw_x + 6, draw_y + 6, @room_size[0] - 12,                                @room_size[1] - 12, Map_Colors::PLAYER)        end      end    end  end  def find_map(hash, x, y)    for map in hash.values      return map if (map.x == x) and (map.y == y)    end    return nil  end  def update    if @big_id != $game_map.big_id      @big_id = $game_map.big_id      refresh    end  endendclass Scene_Map  attr_accessor :map  alias prexus_metroid_smap_main main  def main    @map = Map.new    prexus_metroid_smap_main    @map.dispose  end  alias prexus_metroid_smap_update update  def update    @map.update    prexus_metroid_smap_update  endendclass Scene_Save  alias prexus_metroid_ssave_write_save_data write_save_data  def write_save_data(file)    prexus_metroid_ssave_write_save_data(file)    Marshal.dump($map_objects, file)  endendclass Scene_Load  def read_save_data(file)    characters = Marshal.load(file)    Graphics.frame_count = Marshal.load(file)    $game_system        = Marshal.load(file)    $game_switches      = Marshal.load(file)    $game_variables     = Marshal.load(file)    $game_self_switches = Marshal.load(file)    $game_screen        = Marshal.load(file)    $game_actors        = Marshal.load(file)    $game_party         = Marshal.load(file)    $game_troop         = Marshal.load(file)    $game_map           = Marshal.load(file)    $game_player        = Marshal.load(file)    $map_objects = Marshal.load(file) # ADDED LINE    if $game_system.magic_number != $data_system.magic_number      $game_map.setup($game_map.map_id)      $game_player.center($game_player.x, $game_player.y)    end    $game_party.refresh  endend