[xp] command window [solved]

Started by diagostimo, February 28, 2012, 12:34:49 am

Previous topic - Next topic

diagostimo

February 28, 2012, 12:34:49 am Last Edit: March 02, 2012, 11:01:43 pm by diagostimo
hey guys, so i started looking into scripting as i want to advance my knowledge in ruby, i have got down with the basics, so to the point, i am trying to achieve my first script in a custom menu scene, so i was wondering if it is possible to use the super comand to give the selection (s1 = "" .ect) x and y positions in the window, or perhaps something similar, as i am trying to get another row of selections right besides my other one in the same window, so in the long run it is going to be one big grid of selections, here is the script for reference:
#==============================================================================
# **scene_MapMenu
#==============================================================================
class Scene_MapMenu
 #----------------------------------------------------------------------
 # * Object Initialization
 #----------------------------------------------------------------------
 def initialize(menu_index = 0)
   @menu_index = menu_index
 end
 #----------------------------------------------------------------------
 # * Main
 #----------------------------------------------------------------------
 def main
   s1 = ""
   s2 = ""
   s3 = ""
   s4 = ""
   s5 = ""
   s6 = ""
   s7 = ""
   s8 = ""
   s9 = ""
   s10 = ""
   s11 = ""
   s12 = ""
   s13 = ""
   s14 = ""
   @command_window = Window_Command.new(65, [s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14])
   @command_window.index = @menu_index
   #call the window
   @window = Scene_MapMenu.new
   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 windows
   @command_window.dispose
 end
 #--------------------------------------------------------------------------
 # * Frame Update
 #--------------------------------------------------------------------------
 def update
   # Update windows
   @command_window.update
 end
end

ForeverZer0

Window_Command is a simplified version of Window_Selectable, which is the super class of all selectable windows. It basically just creates a single column of items. You would be better off to create a new class derived from Window_Selectable and creating a multi-column window. Check out Window_Item for an example of how it is done.
I am done scripting for RMXP. I will likely not offer support for even my own scripts anymore, but feel free to ask on the forum, there are plenty of other talented scripters that can help you.

diagostimo

so would i define selectables this way? if so how would i define a selctable in the right column :???:

diagostimo

bump: ok so been looking into some of the other script windows, and have decided that the window_nameinput is the closest to what im trying to achieve, and have started breaking down this script, this is what i got so far.
code for the scene
class Scene_MapMenu
  #-------------------------------------------------------------------------
  # * MAIN
  #-------------------------------------------------------------------------
  def main
    @mapmenu_window = Window_MapMenu.new
    # 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 windows
    @mapmenu_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    # Update windows
    @mapmenu_window.update
    # 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
      return
    end
  end
end

code for the window:
#==============================================================================
# ** Window_Map
#------------------------------------------------------------------------------
class Window_MapMenu < Window_Base
  MAP_TABLE =
  [
    "1","2","3","4","5","6","7","8","9","10",
    "11","12","13","14","15","16","17","18","19","20",
    "21","22","23","24","25","26","27","28","29","30",
    "31","32","33","34","35","36","37","38","39","40",
    "41","42","43","44","45","46","47","48","49","50",
    "51","52","53","54","55","56","57","58","59","60",
    "61","62","63","64","65","66","67","68","69","70",
    "71","72","73","74","75","76","77","78","79","80",
    "81","82","83","84","85","86","87","88","89","90",
  ]
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 640, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    @index = 0
    refresh
    update_cursor_rect
  end
  #--------------------------------------------------------------------------
  # * Text Character Acquisition
  #--------------------------------------------------------------------------
  def grid
    return MAP_TABLE[@index]
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...90
      x = 0 + i / 10 / 9  * 160 + i % 10 * 32
      y = 0 + i / 10 % 9 * 32
      self.contents.draw_text(x, y, 32, 32, MAP_TABLE[i], 1)
    end
    self.contents.draw_text(140, 9 * 32, 48, 32, "OK", 1)
  end
  #--------------------------------------------------------------------------
  # * Cursor Rectangle Update
  #--------------------------------------------------------------------------
  def update_cursor_rect
    # If cursor is positioned on [OK]
    if @index >= 90
      self.cursor_rect.set(140, 9 * 32, 48, 32)
    # If cursor is positioned on anything other than [OK]
    else
      x = 0 + @index / 10 / 9 * 160 + @index % 10 * 32
      y = 0 + @index / 10 % 9 * 32
      self.cursor_rect.set(x, y, 32, 32)
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    # If cursor is positioned on [OK]
    if @index >= 90
      # Cursor down
      if Input.trigger?(Input::DOWN)
        $game_system.se_play($data_system.cursor_se)
        @index -= 90
      end
      # Cursor up
      if Input.repeat?(Input::UP)
        $game_system.se_play($data_system.cursor_se)
        @index -= 90 - 80
      end
    # If cursor is positioned on anything other than [OK]
    else
      # If right directional button is pushed
      if Input.repeat?(Input::RIGHT)
        # If directional button pressed down is not a repeat, or
        # cursor is not positioned on the right edge
        if Input.trigger?(Input::RIGHT) or
           @index / 90 < 6 or @index % 10 < 9
          # Move cursor to right
          $game_system.se_play($data_system.cursor_se)
          if @index % 10 < 9
            @index += 1
          else
            @index += 90 - 9
          end
          if @index >= 90
            @index -= 90
          end
        end
      end
      # If left directional button is pushed
      if Input.repeat?(Input::LEFT)
        # If directional button pressed down is not a repeat, or
        # cursor is not positioned on the left edge
        if Input.trigger?(Input::LEFT) or
           @index / 90 > 0 or @index % 10 > 0
          # Move cursor to left
          $game_system.se_play($data_system.cursor_se)
          if @index % 10 > 0
            @index -= 1
          else
            @index -= 90 - 9
          end
          if @index < 0
            @index += 90
          end
        end
      end
      # If down directional button is pushed
      if Input.repeat?(Input::DOWN)
        # Move cursor down
        $game_system.se_play($data_system.cursor_se)
        if @index % 90 < 80
          @index += 10
        else
          @index += 90 - 80
        end
      end
      # If up directional button is pushed
      if Input.repeat?(Input::UP)
        # If directional button pressed down is not a repeat, or
        # cursor is not positioned on the upper edge
        if Input.trigger?(Input::UP) or @index % 90 >= 10
          # Move cursor up
          $game_system.se_play($data_system.cursor_se)
          if @index % 90 >= 10
            @index -= 10
          else
            @index += 90
          end
        end
      end
      # If L or R button was pressed
      if Input.repeat?(Input::L) or Input.repeat?(Input::R)
        # Move capital / small
        $game_system.se_play($data_system.cursor_se)
        if @index < 90
          @index += 90
        else
          @index -= 90
        end
      end
    end
    update_cursor_rect
  end
end

so ye i have figured out how to extend the table, i was wondering if i can turn all these into selectables?
also as i have removed the spliting of the grids, i believe i have no more need for:
def refresh
    self.contents.clear
    for i in 0...90
      x = 0 + i / 10 / 9 * 160 + i % 10 * 32
      y = 0 + i / 10 % 9 * 32
      self.contents.draw_text(x, y, 32, 32, MAP_TABLE, 1)
    end
    self.contents.draw_text(140, 9 * 32, 48, 32, "OK", 1)
  end

and:
def update_cursor_rect
    # If cursor is positioned on [OK]
    if @index >= 90
      self.cursor_rect.set(140, 9 * 32, 48, 32)
    # If cursor is positioned on anything other than [OK]
    else
      x = 0 + @index / 10 / 9 * 160 + @index % 10 * 32
      y = 0 + @index / 10 % 9 * 32
      self.cursor_rect.set(x, y, 32, 32)
    end

but when i remove these it clumps all table into 1 column, pure confused :wacko: 

KK20

I'm confused in what you're saying. Analyzing this equation:
x = 0 + i / 10 / 9 * 160 + i % 10 * 32
The '0 +' is not needed at all. Delete that.

When you say 'for i in 0...90', the highest value 'i' will be is 89. Plug that back in the equation:
x = 89 / 10 / 9 * 160 + 89 % 10 * 32
Focus only on the part in red.

89 / 10 / 9 * 160 = 8 / 9 * 160 = 0 * 160 = 0
You will get 0 as an answer for this small part for all values 0 to 89.

In other words, your x-value is really:
x = i % 10 * 32
which is what it should be.

So when you said that you don't need that part, you turned your equation into x = 0, thus the "one-column" issue.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

diagostimo

what i was saying was that the original window i edited this down from (Window_NameInput) split the table into 2 with a seperation of [color=red160][/color], which is why i was wondering if i should remove the end part of that line as i believed this refered to the sencond table half, as i am only wanting 1 whole table, also the 0 at the begining is changing the x any y of my table in my window, if i want to centre it in my window i need these, my main problem at the moment is trying to turn each table square into selectables to call scenes :/

KK20

So what you want is when the player presses "C" it will do something? You'll have to create a scene then. Look at Scene_Name for a reference.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

diagostimo

ok thanks, iv figured out how to set selectables, now i have the issue of trying to remove the old "ok" option so that block returns to the table, this is my script now without trying to remove the "ok"
#--------------------------------------------------------------------------
  def grid
    return MAP_TABLE[@index]
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...237
      x = 32 + i / 17 / 14 * 160 + i % 17 * 32
      y = 0 + i / 17 % 14 * 32
      self.contents.draw_text(x, y, 32, 32, MAP_TABLE[i], 1)
    end
    self.contents.draw_text(0, 19 * 32, 48, 32, "OK", 1)
    @bitmap = RPG::Cache.picture("kantomap.png")
    self.contents.blt(32, 0, @bitmap, Rect.new(0, 0, @bitmap.width, @bitmap.height), 160)
  end
  #--------------------------------------------------------------------------
  # * Cursor Rectangle Update
  #--------------------------------------------------------------------------
  def update_cursor_rect
    # If cursor is positioned on [OK]
    if @index >= 237
      self.cursor_rect.set(140, 19 * 32, 48, 32)
    # If cursor is positioned on anything other than [OK]
    else
      x = 32 + @index / 17 / 14 * 160 + @index % 17 * 32
      y = 0 + @index / 17 % 14 * 32
      self.cursor_rect.set(x, y, 32, 32)
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    # if enter is being pressed
    if Input.trigger?(Input::C)
      if @index == 0
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to item screen
        $scene = Scene_Item.new
      end
       if @index == 1
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to item screen
        $scene = Scene_Skill.new
      end
    end
# If cursor is positioned on [OK]
    if @index >= 237
      # Cursor down
      if Input.trigger?(Input::DOWN)
        $game_system.se_play($data_system.cursor_se)
        @index -= 237
      end
      # Cursor up
      if Input.repeat?(Input::UP)
        $game_system.se_play($data_system.cursor_se)
        @index -= 237 - 227
      end
    # If cursor is positioned on anything other than [OK]
    else
      # If right directional button is pushed
      if Input.repeat?(Input::RIGHT)
        # If directional button pressed down is not a repeat, or
        # cursor is not positioned on the right edge
        if Input.trigger?(Input::RIGHT) or
           @index / 237 < 6 or @index % 17 < 16
          # Move cursor to right
          $game_system.se_play($data_system.cursor_se)
          if @index % 17 < 16
            @index += 1
          else
            @index += 237 - 16
          end
          if @index >= 237
            @index -= 237
          end
        end
      end
      # If left directional button is pushed
      if Input.repeat?(Input::LEFT)
        # If directional button pressed down is not a repeat, or
        # cursor is not positioned on the left edge
        if Input.trigger?(Input::LEFT) or
           @index / 237 > 0 or @index % 17 > 0
          # Move cursor to left
          $game_system.se_play($data_system.cursor_se)
          if @index % 17 > 0
            @index -= 1
          else
            @index -= 237 - 16
          end
          if @index < 0
            @index += 237
          end
        end
      end
      # If down directional button is pushed
      if Input.repeat?(Input::DOWN)
        # Move cursor down
        $game_system.se_play($data_system.cursor_se)
        if @index % 237 < 227
          @index += 17
        else
          @index += 237 - 227
        end
      end
      # If up directional button is pushed
      if Input.repeat?(Input::UP)
        # If directional button pressed down is not a repeat, or
        # cursor is not positioned on the upper edge
        if Input.trigger?(Input::UP) or @index % 237 >= 17
          # Move cursor up
          $game_system.se_play($data_system.cursor_se)
          if @index % 237 >= 17
            @index -= 17
          else
            @index += 237
          end
        end
      end
      # If L or R button was pressed
      if Input.repeat?(Input::L) or Input.repeat?(Input::R)
        # Move capital / small
        $game_system.se_play($data_system.cursor_se)
        if @index < 237
          @index += 237
        else
          @index -= 237
        end
      end
    end
    update_cursor_rect
  end
end


then this is it when i have tried removing this option:
#==============================================================================
# ** Window_Map
#------------------------------------------------------------------------------
class Window_MapMenu < Window_Base
  MAP_TABLE =
[
    "1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17",
    "18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34",
    "35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50","51",
    "52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68",
    "69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85",
    "86","87","88","89","90","91","92","93","94","95","96","97","98","99","100","101","102",
    "103","104","105","106","107","108","109","110","111","112","113","114","115","116","117","118","119",
    "120","121","122","123","124","125","126","127","128","129","130","131","132","133","134","135","136",
    "137","138","139","140","141","142","143","144","145","146","147","148","149","150","151","152","153",
    "154","155","156","157","158","159","160","161","162","163","164","165","166","167","168","189","170",
    "171","172","173","174","175","176","177","178","179","180","181","182","183","184","185","186","187",
    "188","189","190","191","192","193","194","195","196","197","198","199","200","201","202","203","204",
    "205","206","207","208","209","210","211","212","213","214","215","216","217","218","219","220","221",
    "222","223","224","225","226","227","228","229","230","231","232","233","234","235","236","237","238",
    ] 
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 640, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    @index = 0
    refresh
    update_cursor_rect
  end
  #--------------------------------------------------------------------------
  # * Text Character Acquisition
  #--------------------------------------------------------------------------
  def grid
    return MAP_TABLE[@index]
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...237
      x = 32 + i / 17 / 14 * 160 + i % 17 * 32
      y = 0 + i / 17 % 14 * 32
      self.contents.draw_text(x, y, 32, 32, MAP_TABLE[i], 1)
    end
    @bitmap = RPG::Cache.picture("kantomap.png")
    self.contents.blt(32, 0, @bitmap, Rect.new(0, 0, @bitmap.width, @bitmap.height), 160)
  end
  #--------------------------------------------------------------------------
  # * Cursor Rectangle Update
  #--------------------------------------------------------------------------
  def update_cursor_rect
      x = 32 + @index / 17 / 14 * 160 + @index % 17 * 32
      y = 0 + @index / 17 % 14 * 32
      self.cursor_rect.set(x, y, 32, 32)
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    # if enter is being pressed
    if Input.trigger?(Input::C)
      if @index == 0
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to item screen
        $scene = Scene_Item.new
      end
       if @index == 1
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to item screen
        $scene = Scene_Skill.new
      end
    end
      # If right directional button is pushed
      if Input.repeat?(Input::RIGHT)
        # If directional button pressed down is not a repeat, or
        # cursor is not positioned on the right edge
        if Input.trigger?(Input::RIGHT) or
           @index % 17 < 16
          # Move cursor to right
          $game_system.se_play($data_system.cursor_se)
          if @index % 17 < 16
            @index += 1
          end
        end
      end
      # If left directional button is pushed
      if Input.repeat?(Input::LEFT)
        # If directional button pressed down is not a repeat, or
        # cursor is not positioned on the left edge
        if Input.trigger?(Input::LEFT) or
           @index % 17 > 0
          # Move cursor to left
          $game_system.se_play($data_system.cursor_se)
          if @index % 17 > 0
            @index -= 1
          end
        end
      end
      # If down directional button is pushed
      if Input.repeat?(Input::DOWN)
        # Move cursor down
        $game_system.se_play($data_system.cursor_se)
        if @index % 237 < 237
          @index += 17
        end
      end
      # If up directional button is pushed
      if Input.repeat?(Input::UP)
        # If directional button pressed down is not a repeat, or
        # cursor is not positioned on the upper edge
        if Input.trigger?(Input::UP)
          # Move cursor up
          $game_system.se_play($data_system.cursor_se)
          if @index % 237 >= 17
            @index -= 17
          end 
        end
      end
    update_cursor_rect
  end
end

the issue is that when i scroll of the bottom of the table, it returns to the top and shifts the table to the right un-centering it, also i can no longer scroll of the top left and right, this doesnt really bother me, but it would be usefull to know what caused this  :huh: oh ye and its not writing any of the text in the final box @index.237

KK20

Spoiler: ShowHide
#==============================================================================
# ** Window_Map
#------------------------------------------------------------------------------
class Window_MapMenu < Window_Base
  MAP_TABLE =
[
    "1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17",
    "18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34",
    "35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50","51",
    "52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68",
    "69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85",
    "86","87","88","89","90","91","92","93","94","95","96","97","98","99","100","101","102",
    "103","104","105","106","107","108","109","110","111","112","113","114","115","116","117","118","119",
    "120","121","122","123","124","125","126","127","128","129","130","131","132","133","134","135","136",
    "137","138","139","140","141","142","143","144","145","146","147","148","149","150","151","152","153",
    "154","155","156","157","158","159","160","161","162","163","164","165","166","167","168","189","170",
    "171","172","173","174","175","176","177","178","179","180","181","182","183","184","185","186","187",
    "188","189","190","191","192","193","194","195","196","197","198","199","200","201","202","203","204",
    "205","206","207","208","209","210","211","212","213","214","215","216","217","218","219","220","221",
    "222","223","224","225","226","227","228","229","230","231","232","233","234","235","236","237","238",
    ] 
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 640, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    @index = 0
    refresh
    update_cursor_rect
  end
  #--------------------------------------------------------------------------
  # * Text Character Acquisition
  #--------------------------------------------------------------------------
  def grid
    return MAP_TABLE[@index]
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0..237
      x = 32 + i % 17 * 32
      y = 0 + i / 17 % 14 * 32
      self.contents.draw_text(x, y, 32, 32, MAP_TABLE[i], 1)
    end
    @bitmap = RPG::Cache.picture("kantomap.png")
    self.contents.blt(32, 0, @bitmap, Rect.new(0, 0, @bitmap.width, @bitmap.height), 160)
  end
  #--------------------------------------------------------------------------
  # * Cursor Rectangle Update
  #--------------------------------------------------------------------------
  def update_cursor_rect
      x = 32 + @index % 17 * 32
      y = 0 + @index / 17 % 14 * 32
      self.cursor_rect.set(x, y, 32, 32)
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    # if enter is being pressed
    if Input.trigger?(Input::C)
      if @index == 0
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to item screen
        $scene = Scene_Item.new
      end
       if @index == 1
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to item screen
        $scene = Scene_Skill.new
      end
    end
      # If right directional button is pushed
      if Input.repeat?(Input::RIGHT)
        # If directional button pressed down is not a repeat, or
        # cursor is not positioned on the right edge
        if Input.trigger?(Input::RIGHT) or
           @index % 17 < 16
          # Move cursor to right
          $game_system.se_play($data_system.cursor_se)
          if @index % 17 < 16
            @index += 1
          end
        end
      end
      # If left directional button is pushed
      if Input.repeat?(Input::LEFT)
        # If directional button pressed down is not a repeat, or
        # cursor is not positioned on the left edge
        if Input.trigger?(Input::LEFT) or
           @index % 17 > 0
          # Move cursor to left
          $game_system.se_play($data_system.cursor_se)
          if @index % 17 > 0
            @index -= 1
          end
        end
      end
      # If down directional button is pushed
      if Input.repeat?(Input::DOWN)
        # Move cursor down
        if @index / 17 < 13
          @index += 17
          $game_system.se_play($data_system.cursor_se)
        end
      end
      # If up directional button is pushed
      if Input.repeat?(Input::UP)
        # Move cursor up
        if @index / 17 > 0
          @index -= 17
          $game_system.se_play($data_system.cursor_se)
        end 
      end
    update_cursor_rect
  end
end


Was that what you needed? I'm still not sure what you're saying. (No offense but it's really broken grammar :D )

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

diagostimo

March 01, 2012, 08:30:18 pm #9 Last Edit: March 01, 2012, 09:39:52 pm by diagostimo
ye thats spot on, sorry i have a habit for typing fast and not revising what i have said, i can actually see where i went wrong now, i was still including the 237 when there was no need for it anymore, one last thing, as you can tell this is going to be for a map scene, is there a way to define my index at a map? or how would i define it at a comment on a map, say a map has the coment index 5 in an event, when the scene is called i want it to check the comment (or map) and initialize at that index point, again thanks for your help :D

edit: also just changed the opacity of my image to 255 and it appears the cursor is being drawn behind the image, tried  to swap them round but that didnt  fix it :(

KK20

For the "place the cursor index to some value instead of 0 at start-up", you need to add a parameter to your scene.
class Scene_MapMenu
def initialize(index = 0) 
  @index = index
end
def main
  @mapmenu_window = Window_MapMenu.new
  @mapmenu_window.index = @index
  # Continue on with your scene code...
And inside an event, you can use the following script call:
$scene = Scene_MapMenu.new(i)
where "i" is where you want the cursor to be located at on the window.

I think the window cursor's z-value is less than the window's bitmap z-value. No matter how many times you try to change the order of when things are drawn, your cursor will always be behind that picture. I don't know what the fix for that is as I have never needed to do that before.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

diagostimo

thats giving me an error when i insert @mapmenu_window.index = @index into Main, iv put all my scripts together like so:
#==============================================================================
# ** Window_Map
#------------------------------------------------------------------------------
class Window_MapMenu < Window_Base
  MAP_TABLE =
[
    "","","","","","","","","","","","","","","","","",
    "","","","","","","","","","","","","","","","","",
    "","","","","","","","","","","","","","","","","",   
    "","","","","","","","","","","","","","","","","",
    "","","","","","","","","","","","","","","","","",
    "","","","","","","","","","","","","","","","","",   
    "","","","","","","","","","","","","","","","","",   
    "","","","","","","","","","","","","","","","","",   
    "","","","","","","","","","","","","","","","","",
    "","","","","","","","","","","","","","","","","",   
    "","","","","","","","","","","","","","","","","",   
    "","","","","","","","","","","","","","","","","", 
    "","","","","","","","","","","","","","","","","",
    "","","","","","","","","","","","","","","","","",
    ] 
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 640, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    @index = 0
    refresh
    update_cursor_rect
  end
  #--------------------------------------------------------------------------
  # * Text Character Acquisition
  #--------------------------------------------------------------------------
  def grid
    return MAP_TABLE[@index]
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...237
      x = 32 + i / 17 / 14 * 160 + i % 17 * 32
      y = 0 + i / 17 % 14 * 32
      self.contents.draw_text(x, y, 32, 32, MAP_TABLE[i], 1)
    end
    @bitmap = RPG::Cache.picture("kantomap.png")
    self.contents.blt(32, 0, @bitmap, Rect.new(0, 0, @bitmap.width, @bitmap.height), 160)
  end
  #--------------------------------------------------------------------------
  # * Cursor Rectangle Update
  #--------------------------------------------------------------------------
  def update_cursor_rect
      x = 32 + @index / 17 / 14 * 160 + @index % 17 * 32
      y = 0 + @index / 17 % 14 * 32
      self.cursor_rect.set(x, y, 32, 32)
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    # if enter is being pressed
    if Input.trigger?(Input::C)
      if @index == 0
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to item screen
        $scene = Scene_Item.new
      end
       if @index == 1
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to item screen
        $scene = Scene_Skill.new
      end
    end
      # If right directional button is pushed
      if Input.repeat?(Input::RIGHT)
        # If directional button pressed down is not a repeat, or
        # cursor is not positioned on the right edge
        if Input.trigger?(Input::RIGHT) or
           @index % 17 < 16
          # Move cursor to right
          $game_system.se_play($data_system.cursor_se)
          if @index % 17 < 16
            @index += 1
          end
        end
      end
      # If left directional button is pushed
      if Input.repeat?(Input::LEFT)
        # If directional button pressed down is not a repeat, or
        # cursor is not positioned on the left edge
        if Input.trigger?(Input::LEFT) or
           @index % 17 > 0
          # Move cursor to left
          $game_system.se_play($data_system.cursor_se)
          if @index % 17 > 0
            @index -= 1
          end
        end
      end
      # If down directional button is pushed
      if Input.repeat?(Input::DOWN)
        # Move cursor down
        $game_system.se_play($data_system.cursor_se)
        if @index % 237 < 237
          @index += 17
        end
      end
      # If up directional button is pushed
      if Input.repeat?(Input::UP)
        # If directional button pressed down is not a repeat, or
        # cursor is not positioned on the upper edge
        if Input.trigger?(Input::UP)
          # Move cursor up
          $game_system.se_play($data_system.cursor_se)
          if @index % 237 >= 17
            @index -= 17
          end 
        end
      end
    update_cursor_rect
  end
end
#---------------------------------------------------------------------------
# * class Window_Town
#---------------------------------------------------------------------------
class Window_Town < Window_Base
  #-------------------------------------------------------------------------
  # * Object Initialization
  #-------------------------------------------------------------------------
  def initialize
    super(0, 0, 416, 352)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end
  #-------------------------------------------------------------------------
  # * refresh
  #-------------------------------------------------------------------------
  def refresh
    @bitmap = RPG::Cache.picture("pallettown.png")
    self.contents.blt(0, 0, @bitmap, Rect.new(0, 0, @bitmap.width, @bitmap.height), 255)
  end
end
#---------------------------------------------------------------------------
# * Scene Map_Menu
#---------------------------------------------------------------------------
class Scene_MapMenu
  def initialize(index = 0) 
      @index = index
  end
  #-------------------------------------------------------------------------
  # * MAIN
  #-------------------------------------------------------------------------
  def main
    @mapmenu_window = Window_MapMenu.new
    @mapmenu_window.index = @index
    # 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 windows
    @mapmenu_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    # Update windows
    @mapmenu_window.update
    # 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
      return
    end
  end
end
#---------------------------------------------------------------------------
# * Scene_Town
#---------------------------------------------------------------------------
class Scene_Town
  #-------------------------------------------------------------------------
  # * Main
  #-------------------------------------------------------------------------
  def main
    @town_window = Window_Town.new
    # 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 windows
    @town_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    # Update windows
    @town_window.update
    # if mapmenu is active call update_map
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Switch to map screen
      $scene = Scene_MapMenu.new(172)
      return
    end
  end
end

should i be adding a main to my Window?

KK20

Forgot that your window exteneds Window_Base, not Window_Selectable. You need to get the method 'def index=' from the class Window_Selectable and paste it into your Window_MapMenu class.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

ForeverZer0

On a side note, instead of this:

Spoiler: ShowHide
  MAP_TABLE =
[
    "1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17",
    "18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34",
    "35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50","51",
    "52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68",
    "69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85",
    "86","87","88","89","90","91","92","93","94","95","96","97","98","99","100","101","102",
    "103","104","105","106","107","108","109","110","111","112","113","114","115","116","117","118","119",
    "120","121","122","123","124","125","126","127","128","129","130","131","132","133","134","135","136",
    "137","138","139","140","141","142","143","144","145","146","147","148","149","150","151","152","153",
    "154","155","156","157","158","159","160","161","162","163","164","165","166","167","168","189","170",
    "171","172","173","174","175","176","177","178","179","180","181","182","183","184","185","186","187",
    "188","189","190","191","192","193","194","195","196","197","198","199","200","201","202","203","204",
    "205","206","207","208","209","210","211","212","213","214","215","216","217","218","219","220","221",
    "222","223","224","225","226","227","228","229","230","231","232","233","234","235","236","237","238"
    ]


You can simply do this:
MAP_TABLE = (1..238).to_a.collect {|i| i.to_s }

...or this:
MAP_TABLE = Array.new(238) {|i| (i + 1).to_s }

I am done scripting for RMXP. I will likely not offer support for even my own scripts anymore, but feel free to ask on the forum, there are plenty of other talented scripters that can help you.

diagostimo

@ foreverzero, thx, although the numbers wont actually be there, they where just for referencing each square in the index, im guessing this draws them all?
@ KK20 thx it works fine now, the last issue is when i call a scene from the index, i want my old scene to sit in the background, but the new scene has a black border, and im not sure how i would go about doing this  :huh: