Help - Search - Members - Calendar
Full Version: [REQUEST] Final Fantasy VIII Menu
RPG RPG Revolution Forums > Scripting > Script Development and Support > Script Requests
ChrisMarsh
can some one please help me i really need a menu script almost identical to the FF8 one.
soo this means it needs to be a 3-man menu.
I've seen many people look for this before so if its avialable please tell me.
heres a quick mock-up:


Feoden
Do you need a menu that just looks like the final fantasy 8 one but with rpg maker xp features?

Do you need it with the basic windowskin look of rpg maker ?

If it is just a matter of rearranging the windows order and some text here and there it shouldn't be very hard... I have created many menu systems like this...
ChrisMarsh
QUOTE (Feoden @ Jan 23 2012, 09:00 PM) *
Do you need a menu that just looks like the final fantasy 8 one but with rpg maker xp features?

Do you need it with the basic windowskin look of rpg maker ?

If it is just a matter of rearranging the windows order and some text here and there it shouldn't be very hard... I have created many menu systems like this...


a need a menu that looks like the ff8 one with RMXP features
Feoden
Here's the code:

CODE
# FF VIII MENU SCRIPT
# V 1.0
# Author: Feoden
# Feel free to use it, just do not claim it as your own
#--------------------------------------------------------------------------------
# Setting the Maps names
#--------------------------------------------------------------------------------
class Game_Map
  def name
    $map_names[@map_id]
  end
end

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

class Window_Mapname < Window_Base
  #--------------------------------------------------------------------------
  def initialize
    super(0, 480-64, 480, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.name = $fontface
    self.contents.font.size = $fontsize
    refresh
  end
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.draw_text(0, 0, 135, 32, $game_map.name)
  end
end

#--------------------------------------------------------------------------------
# This is the menu on the left
#--------------------------------------------------------------------------------
class Window_MenuStatus < Window_Selectable
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 480, 480-64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.name = $fontface
    self.contents.font.size = $fontsize
    refresh
    self.active = false
    self.index = -1
  end
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    @item_max = $game_party.actors.size > 3 ? 3 : $game_party.actors.size
    for i in 0...@item_max
      x = 64
      y = i * (96+32)+16
      actor = $game_party.actors[i]
      draw_actor_graphic(actor, x - 40, y + 80)
      draw_actor_name(actor, x, y)
      draw_actor_class(actor, x + 144, y)
      draw_actor_level(actor, x, y + 32)
      draw_actor_state(actor, x + 90, y + 32)
      draw_actor_exp(actor, x, y + 64)
      draw_actor_hp(actor, x + 236, y + 32)
      draw_actor_sp(actor, x + 236, y + 64)
    end
  end
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @index < 0
      self.cursor_rect.empty
    else
      self.cursor_rect.set(0, @index * (96+32)+16, self.width - 32, 96)
    end
  end
end

#--------------------------------------------------------------------------------
# This is the whole scene menu
#--------------------------------------------------------------------------------
class Scene_Menu
  #--------------------------------------------------------------------------
  def main
    # コマンドウィンドウを作成
    s1 = $data_system.words.item
    s2 = $data_system.words.skill
    s3 = $data_system.words.equip
    s4 = "Status"
    s5 = "Save"
    s6 = "End Game"
    @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
    @command_window.index = @menu_index
    @command_window.x = 480
    # パーティ人数が 0 人の場合
    if $game_party.actors.size == 0
      # アイテム、スキル、装備、ステータスを無効化
      @command_window.disable_item(0)
      @command_window.disable_item(1)
      @command_window.disable_item(2)
      @command_window.disable_item(3)
    end
    # セーブ禁止の場合
    if $game_system.save_disabled
      # セーブを無効にする
      @command_window.disable_item(4)
    end
    @index = @command_window.index
    @cursor = Sprite.new
    @cursor.bitmap = RPG::Cache.picture("HandCursor")
    @cursor.x = 480 - @cursor.bitmap.width/2
    @cursor.y = 32 + 32*@index - @cursor.bitmap.width/2
    @cursor.z = 1000
    # プレイ時間ウィンドウを作成
    @playtime_window = Window_PlayTime.new
    @playtime_window.x = 480
    @playtime_window.y = 224
    # 歩数ウィンドウを作成
    @steps_window = Window_Steps.new
    @steps_window.x = 480
    @steps_window.y = 320
    # ゴールドウィンドウを作成
    @gold_window = Window_Gold.new
    @gold_window.x = 480
    @gold_window.y = 416
    # ステータスウィンドウを作成
    @status_window = Window_MenuStatus.new
    @status_window.x = 0
    @status_window.y = 0
    # トランジション実行
    @window_map = Window_Mapname.new
    Graphics.transition
    # メインループ
    loop do
      # ゲーム画面を更新
      Graphics.update
      # 入力情報を更新
      Input.update
      # フレーム更新
      update
      # 画面が切り替わったらループを中断
      if $scene != self
        break
      end
    end
    # トランジション準備
    Graphics.freeze
    # ウィンドウを解放
    @command_window.dispose
    @playtime_window.dispose
    @steps_window.dispose
    @gold_window.dispose
    @status_window.dispose
    @cursor.dispose
    @window_map.dispose
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    if @index != @command_window.index
      @index = @command_window.index
      @cursor.x = 480 - @cursor.bitmap.width/2
      @cursor.y = 32 + 32*@index - @cursor.bitmap.width/2
    end
    # ウィンドウを更新
    @command_window.update
    @playtime_window.update
    @steps_window.update
    @gold_window.update
    @status_window.update
    # コマンドウィンドウがアクティブの場合: update_command を呼ぶ
    if @command_window.active
      update_command
      return
    end
    # ステータスウィンドウがアクティブの場合: update_status を呼ぶ
    if @status_window.active
      update_status
      return
    end
  end
  #--------------------------------------------------------------------------
end


I have modified it the least I could do, in order to preserve the rpg maker xp standard menu configuration.

If you wish anything else to be modified, just ask.

It requires the following image to work, place it in the Pictures folder.

Click to view attachment
ChrisMarsh
i love you! smile.gif
but do you think you can move the windows a little to make it look even more like the FF8 one? :3
but you don't have to i still love this ALOT!
Feoden
QUOTE (ChrisMarsh @ Feb 25 2012, 05:34 PM) *
i love you! smile.gif
but do you think you can move the windows a little to make it look even more like the FF8 one? :3
but you don't have to i still love this ALOT!


thanks smile.gif
Do you want it to look "exactly" like the FF8 one? I will try but I do not guarantee that it will look better than before...

P.S.

Try this one:

CODE
# FF VIII MENU SCRIPT
# V 1.1
# Author: Feoden
# Feel free to use it, just do not claim it as your own
#--------------------------------------------------------------------------------
# Setting the Maps names
#--------------------------------------------------------------------------------
class Game_Map
  def name
    $map_names[@map_id]
  end
end

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

class Window_Mapname < Window_Base
  #--------------------------------------------------------------------------
  def initialize
    super(0, 480-64, 480, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.name = $fontface
    self.contents.font.size = $fontsize
    refresh
  end
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.draw_text(0, 0, 135, 32, $game_map.name)
  end
end

#--------------------------------------------------------------------------------
# This is the menu on the left
#--------------------------------------------------------------------------------
class Window_MenuStatus < Window_Selectable
  #--------------------------------------------------------------------------
  def initialize
    super(16, 64, 480-32, 480-128)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.name = $fontface
    self.contents.font.size = $fontsize
    refresh
    self.active = false
    self.index = -1
  end
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    @item_max = $game_party.actors.size > 3 ? 3 : $game_party.actors.size
    for i in 0...@item_max
      x = 64
      y = i * (96+16)
      actor = $game_party.actors[i]
      draw_actor_graphic(actor, x - 40, y + 90)
      draw_actor_name(actor, x - 64, y)
      draw_actor_class(actor, x + 32, y + 32)
      draw_actor_level(actor, x + 32, y)
      draw_actor_state(actor, x + 32, y + 64)
      draw_actor_exp(actor, x + 140, y)
      draw_actor_hp(actor, x + 140, y + 32,180)
      draw_actor_sp(actor, x + 140, y + 64,180)
    end
  end
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @index < 0
      self.cursor_rect.empty
    else
      self.cursor_rect.set(0, @index * (96+16), self.width - 32, 96)
    end
  end
end


class Window_Help2 < Window_Base
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 480, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.name = $fontface
    self.contents.font.size = $fontsize
  end
  #--------------------------------------------------------------------------
  def set_text_menu(index, align = 0)
    # テキストとアラインメントの少なくとも一方が前回と違っ
いる場合
    case index
    when 0
      text = "Opens the item menu,"
    when 1
      text = "Opens the skills menu"
    when 2
      text = "Opens the equipment menu."
    when 3
      text = "Check heroes stats and equipment."
    when 4
      text = "Save the game."
    when 5
      text = "Ends the game."
    else
      text = ""
    end
      
    if text != @text or align != @align
      # テキストを再描画
      self.contents.clear
      self.contents.font.color = normal_color
      self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
      @text = text
      @align = align
      @actor = nil
    end
    self.visible = true
  end
end
  
#--------------------------------------------------------------------------------
# This is the whole scene menu
#--------------------------------------------------------------------------------
class Scene_Menu
  #--------------------------------------------------------------------------
  def main
    # コマンドウィンドウを作成
    s1 = $data_system.words.item
    s2 = $data_system.words.skill
    s3 = $data_system.words.equip
    s4 = "Status"
    s5 = "Save"
    s6 = "End Game"
    @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
    @command_window.index = @menu_index
    @command_window.x = 480
    # パーティ人数が 0 人の場合
    if $game_party.actors.size == 0
      # アイテム、スキル、装備、ステータスを無効化
      @command_window.disable_item(0)
      @command_window.disable_item(1)
      @command_window.disable_item(2)
      @command_window.disable_item(3)
    end
    # セーブ禁止の場合
    if $game_system.save_disabled
      # セーブを無効にする
      @command_window.disable_item(4)
    end
    @index = @command_window.index
    @cursor = Sprite.new
    @cursor.bitmap = RPG::Cache.picture("HandCursor")
    @cursor.x = 480 - @cursor.bitmap.width/2
    @cursor.y = 32 + 32*@index - @cursor.bitmap.width/2
    @cursor.z = 1000
    # プレイ時間ウィンドウを作成
    @playtime_window = Window_PlayTime.new
    @playtime_window.x = 480
    @playtime_window.y = 224
    # 歩数ウィンドウを作成
    @steps_window = Window_Steps.new
    @steps_window.x = 480
    @steps_window.y = 320
    # ゴールドウィンドウを作成
    @gold_window = Window_Gold.new
    @gold_window.x = 480
    @gold_window.y = 416
    # ステータスウィンドウを作成
    @status_window = Window_MenuStatus.new
    @help = Window_Help2.new
    @help.set_text_menu(@index)
    # トランジション実行
    @window_map = Window_Mapname.new
    Graphics.transition
    # メインループ
    loop do
      # ゲーム画面を更新
      Graphics.update
      # 入力情報を更新
      Input.update
      # フレーム更新
      update
      # 画面が切り替わったらループを中断
      if $scene != self
        break
      end
    end
    # トランジション準備
    Graphics.freeze
    # ウィンドウを解放
    @command_window.dispose
    @playtime_window.dispose
    @steps_window.dispose
    @gold_window.dispose
    @status_window.dispose
    @cursor.dispose
    @window_map.dispose
    @help.dispose
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    # ウィンドウを更新
    @command_window.update
    @playtime_window.update
    @steps_window.update
    @gold_window.update
    @status_window.update
    if @index != @command_window.index
      @index = @command_window.index
      @help.set_text_menu(@index)
      @cursor.x = 480 - @cursor.bitmap.width/2
      @cursor.y = 32 + 32*@index - @cursor.bitmap.width/2
    end
    # コマンドウィンドウがアクティブの場合: update_command を呼ぶ
    if @command_window.active
      update_command
      return
    end
    # ステータスウィンドウがアクティブの場合: update_status を呼ぶ
    if @status_window.active
      update_status
      return
    end
  end
  #--------------------------------------------------------------------------
end
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Invision Power Board © 2001-2013 Invision Power Services, Inc.