RMRK is retiring.
Registration is disabled. The site will remain online, but eventually become a read-only archive. More information.

RMRK.net has nothing to do with Blockchains, Cryptocurrency or NFTs. We have been around since the early 2000s, but there is a new group using the RMRK name that deals with those things. We have nothing to do with them.
NFTs are a scam, and if somebody is trying to persuade you to buy or invest in crypto/blockchain/NFT content, please turn them down and save your money. See this video for more information.
Final Fantasy VII Menu System

0 Members and 1 Guest are viewing this topic.

*****
Rep:
Level 84
This text is way too personal.
Bronze - GIAW 11 (Hard)Silver - GIAW Halloween
Yes, cozziekuns finally decided to do some scripting.

EDIT: Woops, forgot to put the script in -.-

*UPDATED*

Final Fantasy VII Menu System
Version: Number
Author: Cozziekuns
Date: April 12, 2010

Version History


  • <Version 1.0> 04.12.2010 - Original Release
  • <Version 1.1> 04.12.2010 - Updated version, with icons, support for every font, and modules for easy customization.

Planned Future Versions

  • <Version 1.1> - Icons, and hopefully support for every font. Plus modules to allow easy customization.
  • <Version 1.1b> - More icons! Yes, I love those things.

Description


A menu system similar to that of Final Fantasy VII's. You MUST be using the font "Calibri", as this was basically made for my own, secret purposes. I might make a version for all fonts, but that depends on your feedback. Seriously, if this script is shunned, I'm not going to bother upgrading it. Because I'm lazy.

Features

  • Basically that of the default menu system, but more things to come.
  • The menu system is presented in the same way as that of Final Fantasy VII's.
  • A "To next level" bar.

Screenshots



Pretty plain, huh? I know, needs improvement.

Instructions

Just paste it above Main, and below Materials.

Script


Code: [Select]
#===============================================================================
#
# Cozziekuns' Menu System
# Last Date Updated: 4/10/2010
#
# A menu system similar to that of Final Fantasy VII's.
#
#===============================================================================
# Updates
# -----------------------------------------------------------------------------
# o 4/09/10 - Started Script.
# o 4/10/10 - Finished Script.
# o 4/12/10 - Upgraded it so it works with every font, and has a few icons. Also added modules, for
#                  customization.
#===============================================================================
# What's to come?
# -----------------------------------------------------------------------------
# o Even more icons.
#===============================================================================
# Instructions
# -----------------------------------------------------------------------------
# To install this script, open up your script editor and copy/paste this script
# to an open slot below ? Materials but above ? Main. Remember to save. Also,
# feel free to change the icons towards your preference.
#===============================================================================

#BEGIN CUSTOMIZABLE REGION-----------------------------------------------------

module COZZIEKUNS
  module ICONS
   TIME = 188
   GOLD = 205
   LOCATION = 153
  end
 end

 #END CUSTOMIZABLE REGION-------------------------------------------------------

#==============================================================================
# ** Window_MenuStatus
#------------------------------------------------------------------------------
#  This window displays party member status on the menu screen.
#==============================================================================

class Window_MenuStatus < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     x : window X coordinate
  #     y : window Y coordinate
  #--------------------------------------------------------------------------
  def initialize(x, y)
    super(x, y, 424, 412)
    refresh
    self.active = false
    self.index = -1
  end
 
  #--------------------------------------------------------------------------
  # * Draw TNL (To next level)
  #     actor : actor
  #     x     : draw spot x-coordinate
  #     y     : draw spot y-coordinate
  #     width : Width
  #--------------------------------------------------------------------------
  def draw_actor_tnl(actor, x, y, width = 80)
    draw_actor_tnl_gauge(actor, x, y, width)
    self.contents.font.color = system_color
    self.contents.draw_text(x, y - 21, 135, WLH, "To next level")
    self.contents.font.color = hp_color(actor)
    last_font_size = self.contents.font.size
    xr = x + width
    if width < 120
      self.contents.draw_text(xr - 44, y, 44, WLH, actor.next_rest_exp_s, 2)
    else
      self.contents.draw_text(xr - 99, y, 44, WLH, actor.next_rest_exp_s, 2)
      self.contents.font.color = normal_color
      self.contents.draw_text(xr - 55, y, 11, WLH, "/", 2)
      self.contents.draw_text(xr - 44, y, 44, WLH, actor.next_exp_s, 2)
    end
  end
  #--------------------------------------------------------------------------
  # * Draw TNL gauge
  #     actor : actor
  #     x     : draw spot x-coordinate
  #     y     : draw spot y-coordinate
  #     width : Width
  #--------------------------------------------------------------------------
  def draw_actor_tnl_gauge(actor, x, y, width = 100)
    gw = width * actor.exp_s / actor.next_exp_s
    gc1 = tnl_gauge_colour1
    gc2 = tnl_gauge_colour2
    self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
    self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    @item_max = $game_party.members.size
    for actor in $game_party.members
      draw_actor_face(actor, 2, actor.index * 96 + 2, 92)
      x = 104
      y = actor.index * 96
      draw_actor_name(actor, x + 30, y)
      draw_actor_level(actor, x + 30, y + 21)
      draw_actor_state(actor, x + 150, y)
      draw_actor_hp(actor, x + 30, y + 18 + WLH * 1)
      draw_actor_mp(actor, x + 30, y + 18 + WLH * 2)
      draw_actor_tnl(actor, x + 165, y + 18 + WLH * 1)
    end
  end
  #--------------------------------------------------------------------------
  # * Update cursor
  #--------------------------------------------------------------------------
  def update_cursor
    if @index < 0               # No cursor
      self.cursor_rect.empty
    elsif @index < @item_max    # Normal
      self.cursor_rect.set(0, @index * 96, contents.width, 96)
    elsif @index >= 100         # Self
      self.cursor_rect.set(0, (@index - 100) * 96, contents.width, 96)
    else                        # All
      self.cursor_rect.set(0, 0, contents.width, @item_max * 96)
    end
  end
end

#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
#  This is a superclass of all windows in the game.
#==============================================================================

class Window_Base < Window
 
  #--------------------------------------------------------------------------
  # * To Next Level gauge colour 1
  #--------------------------------------------------------------------------
  def tnl_gauge_colour1
    return text_color(3)
  end
  #--------------------------------------------------------------------------
  # * To Next Level gauge colour 2
  #--------------------------------------------------------------------------
   def tnl_gauge_colour2
    return text_color(11)
  end
  #--------------------------------------------------------------------------
  # * Currency Value
  #--------------------------------------------------------------------------
  def draw_currency_value(value, x, y, width)
  cx = contents.text_size(Vocab::gold).width
  self.contents.font.color = normal_color
  self.contents.draw_text(x, y, width, WLH, value, 2)
  self.contents.font.color = system_color
  draw_icon(COZZIEKUNS::ICONS::GOLD, 0, 28)
 end
end
#==============================================================================
# ** Window_Location
#------------------------------------------------------------------------------
#  This window displays the location.
#==============================================================================

class Window_Location < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize (x, y)
    super (x, y, 240, WLH + 26)
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    text = load_data ("Data/MapInfos.rvdata")[$game_map.map_id].name
    self.contents.draw_text(4, -4, 200, WLH, text, 2)
    draw_icon(COZZIEKUNS::ICONS::LOCATION, 0, -4)
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    if Graphics.frame_count / Graphics.frame_rate != @total_sec
      refresh
    end
  end
end


#==============================================================================
# ** Window_Gold + Time
#------------------------------------------------------------------------------
#  This window displays the amount of gold and playtime.
#==============================================================================

class Window_Gold < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     x : window X coordinate
  #     y : window Y coordinate
  #--------------------------------------------------------------------------
  def initialize(x, y)
    super(x, y, 160, WLH + 56)
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    draw_currency_value($game_party.gold, 4, 28, 120)
    @total_sec = Graphics.frame_count / Graphics.frame_rate
    hour = @total_sec / 60 / 60
    min = @total_sec / 60 % 60
    sec = @total_sec % 60
    text = sprintf("%02d:%02d:%02d", hour, min, sec)
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 0, 120, WLH, text, 2)
    self.contents.font.color = system_color
    draw_icon(COZZIEKUNS::ICONS::TIME, 0, 0)
  end
   
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    if Graphics.frame_count / Graphics.frame_rate != @total_sec
      refresh
    end
  end
end

#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
#  This class performs the menu screen processing.
#==============================================================================

class Scene_Menu < Scene_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     menu_index : command cursor's initial position
  #--------------------------------------------------------------------------
  def initialize(menu_index = 0)
    @menu_index = menu_index
  end
  #--------------------------------------------------------------------------
  # * Start processing
  #--------------------------------------------------------------------------
  def start
    super
    create_menu_background
    @status_window = Window_MenuStatus.new(0, 2)
    create_command_window
    @gold_window = Window_Gold.new(384, 289)
    @location_window = Window_Location.new(304, 368)
 end
  #--------------------------------------------------------------------------
  # * Termination Processing
  #--------------------------------------------------------------------------
  def terminate
    super
    dispose_menu_background
    @command_window.dispose
    @gold_window.dispose
    @location_window.dispose
    @status_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    update_menu_background
    @command_window.update
    @gold_window.update
    @status_window.update
    @location_window.update
    if @command_window.active
      update_command_selection
    elsif @status_window.active
      update_actor_selection
    end
  end
  #--------------------------------------------------------------------------
  # * Create Command Window
  #--------------------------------------------------------------------------
  def create_command_window
    s1 = Vocab::item
    s2 = Vocab::skill
    s3 = Vocab::equip
    s4 = Vocab::status
    s5 = Vocab::save
    s6 = Vocab::game_end
    @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
    @command_window.index = @menu_index
    @command_window.x = 384
    if $game_party.members.size == 0          # If number of party members is 0
      @command_window.draw_item(0, false)     # Disable item
      @command_window.draw_item(1, false)     # Disable skill
      @command_window.draw_item(2, false)     # Disable equipment
      @command_window.draw_item(3, false)     # Disable status
    end
    if $game_system.save_disabled             # If save is forbidden
      @command_window.draw_item(4, false)     # Disable save
    end
  end
  #--------------------------------------------------------------------------
  # * Update Command Selection
  #--------------------------------------------------------------------------
  def update_command_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      $scene = Scene_Map.new
    elsif Input.trigger?(Input::C)
      if $game_party.members.size == 0 and @command_window.index < 4
        Sound.play_buzzer
        return
      elsif $game_system.save_disabled and @command_window.index == 4
        Sound.play_buzzer
        return
      end
      Sound.play_decision
      case @command_window.index
      when 0      # Item
        $scene = Scene_Item.new
      when 1,2,3  # Skill, equipment, status
        start_actor_selection
      when 4      # Save
        $scene = Scene_File.new(true, false, false)
      when 5      # End Game
        $scene = Scene_End.new
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Start Actor Selection
  #--------------------------------------------------------------------------
  def start_actor_selection
    @command_window.active = false
    @status_window.active = true
    if $game_party.last_actor_index < @status_window.item_max
      @status_window.index = $game_party.last_actor_index
    else
      @status_window.index = 0
    end
  end
  #--------------------------------------------------------------------------
  # * End Actor Selection
  #--------------------------------------------------------------------------
  def end_actor_selection
    @command_window.active = true
    @status_window.active = false
    @status_window.index = -1
  end
  #--------------------------------------------------------------------------
  # * Update Actor Selection
  #--------------------------------------------------------------------------
  def update_actor_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      end_actor_selection
    elsif Input.trigger?(Input::C)
      $game_party.last_actor_index = @status_window.index
      Sound.play_decision
      case @command_window.index
      when 1  # skill
        $scene = Scene_Skill.new(@status_window.index)
      when 2  # equipment
        $scene = Scene_Equip.new(@status_window.index)
      when 3  # status
        $scene = Scene_Status.new(@status_window.index)
      end
    end
  end
end

Credit


  • Cozziekuns

Thanks

  • Rune; I got all my CMS making skills from you.
  • Modern Algebra, for pointing out the fact you can align things.

Support


Just PM me or post below.

Known Compatibility Issues

Obviously, it won't work with other menu systems.

Demo


http://www.4shared.com/file/NM8_AV0Y/_2__FF7_Custom_Menu_System.html

:ccby:
« Last Edit: April 13, 2010, 03:52:30 AM by cozziekuns »

*
Rep:
Level 97
2014 Most Unsung Member2014 Best RPG Maker User - Engine2013 Best RPG Maker User (Scripting)2012 Best Member2012 Best RPG Maker User (Scripting)2012 Favorite Staff Member2012 Most Mature MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best Use of Avatar and Signature Space2011 Best RPG Maker User (Scripting)2011 Most Mature Member2011 Favourite Staff Member2011 Best Veteran2010 Most Mature Member2010 Favourite Staff Member
Looks pretty cool. Nice work. Why does it only work with Calibri?

Note: You can align text to be centered or to the right of the specified box, so the command:

Code: [Select]
self.contents.draw_text (x, y, width, height, text, alignment)

where alignment is 0 (Left), 1 (Center), or 2 (Right)

Might be useful if you want to make this compatible with different fonts.

*****
Rep:
Level 84
This text is way too personal.
Bronze - GIAW 11 (Hard)Silver - GIAW Halloween
Thanks for the tip MA! I've always wondered how people do that... I'll probably configure it later. I'm a little lazy :P

As for why it only works with Calibri, that's because I made the windows too small. If you try use UmeGothic Plus, which I think is a HUGE font, there's not enough space for it within the window. But I'm working on it.

*****
Rep:
Level 84
This text is way too personal.
Bronze - GIAW 11 (Hard)Silver - GIAW Halloween
* Legal Bump *

Yep, I finally got around to updating this. Version 1.1 is out.

*
Rep: +0/-0Level 71
Metalsandwich
I really like what you have done here and I wana help so I downloaded your script and made some mods to make it look like what you ambitioned it to could I have your permission to post this on rpgrevolutions please I understand if you refuse this request but all up thank you for your time

Metal,

***
Rep:
Level 74
I'm baaack!
This looks REALLY nice so I'm going to test it. if the Experience bar has color after gaining some experience then I may use it in an upcoming game. (I have Terramon and a side project going for when I'm not able to work on Terramon)

EDIT: I can't belive a necropost happened because I just told modern algebra most people don't necropost... It's not a bad thing but I think that's REALLY random and unconvinient for me, however it was convinient for me because I was able to comment without necroposting  :D
« Last Edit: April 10, 2011, 02:10:24 AM by RPGMakerVX52 »

****
Rep:
Level 69
I love this script, I couldn't find a menu that displayed the map name.

***
Rep:
Level 74
I'm baaack!
I forogt all about this script and decided to use PECMS and I already set up some menu options... I guess it's too late now...

I think a nice way to improve your script would be to implement a system like MA does in his menu systems where you can make your own menu options, and arrange them in an array!