Save-Point
little Edit of the cursor world map system - Printable Version

+- Save-Point (https://www.save-point.org)
+-- Forum: Games Development (https://www.save-point.org/forum-4.html)
+--- Forum: Code Support (https://www.save-point.org/forum-20.html)
+--- Thread: little Edit of the cursor world map system (/thread-5255.html)



little Edit of the cursor world map system - Djigit - 08-17-2014

Hello folks. Its me again :)))
I need a little edit on the cursor map system of azrith. (demo is below)
The script can only use a picture of 640x480. But I want someone to edit the script so that it is possible to use a picture of 1500x1500. Of course not every part of the picture should be seen on the screen. I also should be able to beyong the screen borders, which is not possible in demo.


*unaccidental double post

Im sorry for double posting. but it seems theres a bug in the forum. I cant edit my first post and so I am unable to edit the script.
Its for the rmxp of course




Code:
module LMAP
  
  #Map Graphic Name
  Map_Name = "Map/map"
  
  #Cursor Info
  Cursor_Name = "Map/selection"
  #Max Number of frames in an animation
  Frame_Count = 4
  #Glowing Selection?(will fade in and out)
  Glowing_Selection = true
  
  Locations = []
  # Location.push([map_id, tele_x, tele_y, visited?, map_x, Map_y, Map_icon])
  Locations.push([3, 5, 5, true, 360, 230, "move_05"])
  Locations.push([2, 5, 5, true, 220, 340, "move_06"])
  Locations.push([4, 5, 5, true, 320, 160, "move_07"])
  Locations.push([1, 5, 5, true, 480, 160, "move_04"])
  Locations.push([1, 5, 5, false, 180, 80, "move_03"])
  Locations.push([1, 5, 5, false, 280, 200, "move_02"])
  
  
  Map_Info = {}
  #Map_Info[map_id] = "Description"
  # adding a \n will cause the text to break to the next line
  # This includes The Location Description
  Map_Info[1] = "This is a Castle"
  Map_Info[2] = "This is an Oasis"
  Map_Info[3] = "A rich forest, filled with herbs, \nand minerals alike. \nAs well as beasts."
  Map_Info[4] = "Map 004 lol"
  
  
end
#==============================================================================
# ** Scene_ViewMap
#------------------------------------------------------------------------------
#  This class performs game end screen processing.
#==============================================================================

class Scene_ViewMap
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  def main
    
    @speed = 4
    
    @back = Sprite.new
    @back.bitmap = RPG::Cache.picture(LMAP::Map_Name)
    
    
    # Make command window
    @command_window = Window_Help.new
    @command_window.x = 0
    @command_window.y = 480-@command_window.height
    @command_window.opacity = 0
    
    @map_help = Sprite.new
    @map_help.bitmap = RPG::Cache.picture("Map/map_help")
    @map_help.y = 98
    
    @map_description = Sprite.new
    @map_description.bitmap = RPG::Cache.picture("Map/map_info")
    @map_description.opacity = 0
    
    @map_desc = Window_Map_Description.new
    @map_desc.opacity = 0
    @map_desc.visible = false
    @map_desc.z = 150
    
    @map_description.z = @map_desc.z - 1
    
    @viewport1 = Viewport.new(0, 0, 640, 480)
    @cursor = Map_Cursor.new(@viewport1)
    
    
    @ico = []
    
    for i in 0...$game_system.locations.size
    if $game_system.unlocked?(i) == true
      @ico[i] = Sprite.new
      @ico[i].bitmap = RPG::Cache.icon("#{$game_system.loc_icon(i)}")
      @ico[i].x = $game_system.cord(i, 0)
      @ico[i].y = $game_system.cord(i, 1)
      if $game_map.get_map == $game_system.map_id(i)
        @cursor.x = @ico[i].x-8
        @cursor.y = @ico[i].y+4
        @cl = Sprite.new
        @cl.bitmap = RPG::Cache.picture("Map/current_location")
        @cl.x = @ico[i].x
        @cl.y = @ico[i].y-24
      end
    end
    end
    
    @index = 0
    @snap = false
    @float = false
    @wait = 0
    @ani_index = 0
    # Execute transition
    Graphics.transition
    # Main loop
    loop do
      # Update game screen
      Graphics.update
      # Update input information
      Input.update
      # Frame Update
      update
      # Abort loop if screen is changed
      if $scene != self
        break
      end
    end
    # Prepare for transition
    Graphics.freeze
    # Dispose of window
    @command_window.dispose
    @cursor.dispose
    @map_help.dispose
    @back.dispose
    @map_desc.dispose
    @cl.dispose if @cl != nil
    @map_description.dispose
    for ico in @ico
      ico.dispose
    end
    # If switching to title screen
    if $scene.is_a?(Scene_Title)
      # Fade out screen
      Graphics.transition
      Graphics.freeze
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    # Update command window
    @command_window.update
    @map_desc.update
    @cursor.update
    @cl.update if @cl != nil
    @map_help.update
    @map_description.update
    

  
    for i in 0...@ico.size
      if @cursor.x.between?(@ico[i].x-(@cursor.width/2), @ico[i].x+(@cursor.width/2)) and @cursor.y.between?(@ico[i].y-(@cursor.height/2), @ico[i].y+(@cursor.height/2))
        @command_window.set_text("#{$game_map.list_name($game_system.map_id(i))}", 1)
        if @snap == true
          @index = i
          @cursor.x = @ico[i].x-8
          @cursor.y = @ico[i].y+4
          @map_help.opacity += 20
          @map_desc.visible = true
          @map_description.opacity += 20
          @map_desc.x = @cursor.x - @map_desc.width
          @map_desc.set_text("#{LMAP::Map_Info[$game_system.map_id(i)]}")
          if @cursor.y >= 240
          if @map_desc.y <= 480-@map_desc.height
          @map_desc.y = @cursor.y - @map_desc.height/2
          elsif @map_desc.y > 480-@map_desc.height
          @map_desc.y = 480-@map_desc.height
          end
        else
          if @map_desc.y >= 0
          @map_desc.y = @cursor.y - @map_desc.height/2
          elsif @map_desc.y > 480-@map_desc.height
          @map_desc.y = 0
          end
        end
        @map_description.x = @map_desc.x+4
        @map_description.y = @map_desc.y-32
        
        end
      end
    end
    
    if @wait < 5
    @wait += 1
  else
    @float = !@float
    @wait = 0
  end
    
    if @float == true
      @cl.y += 1 if @cl != nil
    else
      @cl.y -= 1 if @cl != nil
    end
    
    
  
  if @cursor.y >= 240
    @command_window.y = 0
    @map_help.y = 98-415
  elsif @cursor.y < 240
    @command_window.y = 480-@command_window.height
    @map_help.y = 98
  end
  
  if @snap == false
    @command_window.set_text("", 1)
    @map_desc.visible = false
  end
  
  if @map_desc.visible == false
    @map_help.opacity -= 20
    @map_description.opacity -= 20
  end
    
  
  if Input.press?(Input::UP) or Input.press?(Input::DOWN) or Input.press?(Input::LEFT) or Input.press?(Input::RIGHT)
    @snap = false
     else
    @snap = true
  end
  
  if Input.press?(Input::UP)
    if @cursor.y >= 0
      @cursor.y -= @speed
    else
      @cursor.y += 1
    end
   end
  
  if Input.press?(Input::DOWN)
    if @cursor.y <= 480-@cursor.height
      @cursor.y += @speed
    else
      @cursor.y -= 1
    end
   end
    
  if Input.press?(Input::LEFT)
    if @cursor.x >= 0
      @cursor.x -= @speed
    else
      @cursor.x += 1
    end
   end
  
  if Input.press?(Input::RIGHT)
    if @cursor.x <= 640-@cursor.width
      @cursor.x += @speed
    else
      @cursor.x -= 1
    end
   end
  
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Switch to menu screen
      $scene = Scene_Menu.new(5)
      return
    end
    
    # If C button was pressed
    if Input.trigger?(Input::C)
    
       if $game_system.unlocked?(@index) == true
        $game_system.se_play($data_system.escape_se)
        $game_temp.player_new_map_id = $game_system.map_id(@index)
        $game_temp.player_new_x = $game_system.tele_cords(@index)[0]
        $game_temp.player_new_y = $game_system.tele_cords(@index)[1]
        $game_temp.player_new_direction = 2
        $game_temp.player_transferring = true
        $game_map.setup($game_temp.player_new_map_id)
        # Set up player position
        $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
        # Set player direction
        case $game_temp.player_new_direction
        when 2  # down
          $game_player.turn_down
        when 4  # left
          $game_player.turn_left
        when 6  # right
          $game_player.turn_right
        when 8  # up
          $game_player.turn_up
        end
        # Straighten player position
        $game_player.straighten
        $scene = Scene_Map.new
        end
      
      return
    end
    
  end
end


#==============================================================================
# ** Game_System_EDIT
#------------------------------------------------------------------------------
#  This class handles data surrounding the system. Backround music, etc.
#  is managed here as well. Refer to "$game_system" for the instance of
#  this class.
#==============================================================================

class Game_System
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :locations
  alias map_ini_sys initialize
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    map_ini_sys
    @locations = []
    for i in 0...LMAP::Locations.size
      @locations.push(LMAP::Locations[i])
    end
  end
  
  def map_id(n)
    return @locations[n][0]
  end
  
  def add_location(n)
    return @locations[n][3] = true
  end
  
  def remove_location(n)
    return @locations[n][3] = false
  end
  
  def cord(n, v)
    return @locations[n][4+v]
  end
  
  def tele_cords(n)
    return [@locations[n][1], @locations[n][2]]
  end
  
  def loc_icon(n)
    return @locations[n][6]
  end
  
  def unlocked?(n)
    if @locations[n][3] == true
      return true
    elsif @locations[n][3] == false
      return false
    end
  end
  
end

#===================================================
# Game Map Edit
#===================================================
class Game_Map
def name
   $map_infos[@map_id]
end

def get_map
   return @map_id
end

def list_name(n)
   $map_infos[n]
end
end

class Scene_Title
   $map_infos = load_data("Data/MapInfos.rxdata")
   for key in $map_infos.keys
     $map_infos[key] = $map_infos[key].name
   end
end


#==============================================================================
# ** Map_Cursor
#------------------------------------------------------------------------------
#  This sprite is used to display the cursor for the world map.
#==============================================================================

class Map_Cursor < RPG::Sprite
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     viewport  : viewport
  #     character : character (Game_Character)
  #--------------------------------------------------------------------------
  def initialize(viewport)
    super(viewport)
    
    @frame = 0
    @wait = 0
    @frame_count = LMAP::Frame_Count
    @glow = false
    update
  end
  
  def height
    return @ch
  end
  
  def width
    return @cw
  end
  
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    
    if @wait < 2
      @wait += 1
    else
      @wait = 0
      @frame += 1 if @frame < @frame_count
      @frame = 0 if @frame >= @frame_count
    end
    
    if LMAP::Glowing_Selection == true
      if @glow == false
        self.opacity -= 5 if self.opacity > 120
        @glow = true if self.opacity <= 120
      else
        self.opacity += 5
        @glow = false if self.opacity >= 255
      end      
    end
    
    # Remember tile ID, file name, and hue
    self.bitmap = RPG::Cache.picture(LMAP::Cursor_Name)
    @cw = bitmap.width / @frame_count
    @ch = bitmap.height
    self.ox = 0
    self.oy = 0
    self.src_rect.set(0+@cw*@frame, 0, @cw, @ch)
    # Set visible situation
    self.visible = true
    # Set sprite coordinates
    self.z = 120
    # Set opacity level, blend method, and bush depth
    self.blend_type = 0
    self.bush_depth = 0
  end
end

#==============================================================================
# ** Window_Map_Description
#------------------------------------------------------------------------------
#  This window shows skill and item explanations along with actor status.
#==============================================================================

class Window_Map_Description < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 200, 200)
    self.contents = Bitmap.new(width-32, height - 32)
  end
  #--------------------------------------------------------------------------
  # * Set Text
  #  text  : text string displayed in window
  #  align : alignment (0..flush left, 1..center, 2..flush right)
  #--------------------------------------------------------------------------
  def set_text(text, align = 0, color = normal_color)
    # If at least one part of text and alignment differ from last time
    if text != @text or align != @align
      # Redraw text
      
      
    self.contents.clear
    self.contents.font.color = color
    self.contents.font.size = 15
    x = y = 0
    @cursor_width = 0
    # Indent if choice
    if $game_temp.choice_start == 0
      x = 8
    end
      # Control text processing

      # Get 1 text character in c (loop until unable to get text)
      while ((c = text.slice!(/./m)) != nil)
        # If \\
        if c == "\000"
          # Return to original text
          c = "\\"
        end
        # If new line text
        if c == "\n"
          # Update cursor width if choice
          if y >= $game_temp.choice_start
            @cursor_width = [@cursor_width, x].max
          end
          # Add 1 to y
          y += 1
          x = 0
          # Indent if choice
          if y >= $game_temp.choice_start
            x = 8
          end
          # go to next text
          next
        end
        # Draw text
        self.contents.draw_text(4 + x, self.contents.font.size * y, 40, self.contents.font.size, c)
        # Add x to drawn text width
        x += self.contents.text_size(c).width
      end
      @text = text
      @align = align
    end
    self.visible = true
  end
end



RE: little Edit of the cursor world map system - DerVVulfman - 08-17-2014

Horizontal scroll bars with the code making the window that wide. I had to scroll to the right to get to the edit button. I spoilered your first text and encased your edited code with [ code ] bbcode.


RE: little Edit of the cursor world map system - Djigit - 08-18-2014

Ok thanks

but I'm still looking for a solution


RE: little Edit of the cursor world map system - Djigit - 08-24-2014

BUMP