Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

FFVII Style Menu

FFVII MEnu - Version: 1.0
By: FF12_master

Introduction
This is just a small edit to the Standard Menu To make the layout look like the menu in
FFVII

Screenshots


Script

Code:
#==============================================================================

# ** FFVII Style Menu

#------------------------------------------------------------------------------

#  Author: FF12_Master 

#  Version 1.1

#  11/5/2009

#    - V 1.0-

#         First Release

#    - V 1.1 -

#         Added a Playtime and Gold Menu Combined Script

#         Added a location Window

#==============================================================================

 

class Scene_Menu

  #--------------------------------------------------------------------------

  # * Object Initialization

  #     menu_index : command cursor's initial position

  #--------------------------------------------------------------------------

  def initialize(menu_index = 0)

    @menu_index = menu_index

  end

  #--------------------------------------------------------------------------

  # * Main Processing

  #--------------------------------------------------------------------------

  def main

    # Make command window

    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 = 482

    @command_window.y = 0

    @command_window.z = 203

    @command_window.height = 250

    @command_window.width = 160

    # If number of party members is 0

    if $game_party.actors.size == 0

      # Disable items, skills, equipment, and status

      @command_window.disable_item(0)

      @command_window.disable_item(1)

      @command_window.disable_item(2)

      @command_window.disable_item(3)

    end

    # If save is forbidden

    if $game_system.save_disabled

      # Disable save

      @command_window.disable_item(4)

    end

    # Make play time window

    @playtime_window = Window_GoldTime.new

    @playtime_window.x = 483

    @playtime_window.y = 310

    @playtime_window.z = 201

    # Make location window

    @location_window = Window_location.new

    @location_window.x = 445

    @location_window.y = 423

    @location_window.z = 202

    # Make status window

    @status_window = Window_MenuStatus.new

    @status_window.x = 2

    @status_window.y = 2

    @status_window.height = 480

    @status_window.width = 510

    # 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

    @command_window.dispose

    @playtime_window.dispose

    @status_window.dispose

    @location_window.dispose

  end

  #--------------------------------------------------------------------------

  # * Frame Update

  #--------------------------------------------------------------------------

  def update

    # Update windows

    @command_window.update

    @playtime_window.update

    @status_window.update

    # If command window is active: call update_command

    if @command_window.active

      update_command

      return

    end

    # If status window is active: call update_status

    if @status_window.active

      update_status

      return

    end

  end

  #--------------------------------------------------------------------------

  # * Frame Update (when command window is active)

  #--------------------------------------------------------------------------

  def update_command

    # 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_Map.new

      return

    end

    # If C button was pressed

    if Input.trigger?(Input::C)

      # If command other than save or end game, and party members = 0

      if $game_party.actors.size == 0 and @command_window.index < 4

        # Play buzzer SE

        $game_system.se_play($data_system.buzzer_se)

        return

      end

      # Branch by command window cursor position

      case @command_window.index

      when 0  # item

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Switch to item screen

        $scene = Scene_Item.new

      when 1  # skill

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Make status window active

        @command_window.active = false

        @status_window.active = true

        @status_window.index = 0

      when 2  # equipment

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Make status window active

        @command_window.active = false

        @status_window.active = true

        @status_window.index = 0

      when 3  # status

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Make status window active

        @command_window.active = false

        @status_window.active = true

        @status_window.index = 0

      when 4  # save

        # If saving is forbidden

        if $game_system.save_disabled

          # Play buzzer SE

          $game_system.se_play($data_system.buzzer_se)

          return

        end

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Switch to save screen

        $scene = Scene_Save.new

      when 5  # end game

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Switch to end game screen

        $scene = Scene_End.new

      end

      return

    end

  end

  #--------------------------------------------------------------------------

  # * Frame Update (when status window is active)

  #--------------------------------------------------------------------------

  def update_status

    # If B button was pressed

    if Input.trigger?(Input::B)

      # Play cancel SE

      $game_system.se_play($data_system.cancel_se)

      # Make command window active

      @command_window.active = true

      @status_window.active = false

      @status_window.index = -1

      return

    end

    # If C button was pressed

    if Input.trigger?(Input::C)

      # Branch by command window cursor position

      case @command_window.index

      when 1  # skill

        # If this actor's action limit is 2 or more

        if $game_party.actors[@status_window.index].restriction >= 2

          # Play buzzer SE

          $game_system.se_play($data_system.buzzer_se)

          return

        end

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Switch to skill screen

        $scene = Scene_Skill.new(@status_window.index)

      when 2  # equipment

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Switch to equipment screen

        $scene = Scene_Equip.new(@status_window.index)

      when 3  # status

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Switch to status screen

        $scene = Scene_Status.new(@status_window.index)

      end

      return

    end

  end

end

#=============================================================================

# * Window_location

#-----------------------------------------------------------------------------

# handles the location window in the menu

#=============================================================================

class Window_location < Window_Base

  #--------------------------------------------------------------------------

  # * Object Initialization

  #--------------------------------------------------------------------------

    def initialize

    super(0, 0, 320,60)

    self.contents = Bitmap.new(width - 32, height - 32)

    self.contents.font.name = "Tahoma"

    self.contents.font.size = 22

    self.contents.font.color = text_color(0)

    self.contents.draw_text(0, 0, 60, 30, $game_map.name.to_s)

  end

end

 

#==============================================================================

# ** FFVII Style - Window_PlayTime and Window_Gold Combined

#------------------------------------------------------------------------------

# Author: FF12_Master

# Version: 0.1

# 11/ 5/ 2009

#==============================================================================

 

class Window_GoldTime < Window_Base

  #--------------------------------------------------------------------------

  # * Object Initialization

  #--------------------------------------------------------------------------

  def initialize

    super(0, 0, 160,120)

    self.contents = Bitmap.new(width - 32, height - 32)

    refresh

  end

  #--------------------------------------------------------------------------

  # * Refresh

  #--------------------------------------------------------------------------

  def refresh

    self.contents.clear

    self.contents.font.color = system_color

    self.contents.draw_text(4, -4, 120, 32, "Play Time")

    @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, 28, 120, 32, text, 2)

    

    cx = contents.text_size($data_system.words.gold).width

    self.contents.font.color = normal_color

     self.contents.draw_text(4, 65, 120-cx-2, 32, $game_party.gold.to_s, 2)

    self.contents.font.color = system_color

    self.contents.draw_text(124-cx, 65, cx, 32, $data_system.words.gold, 2)

  end

  #--------------------------------------------------------------------------

  # * Frame Update

  #--------------------------------------------------------------------------

  def update

    super

    if Graphics.frame_count / Graphics.frame_rate != @total_sec

      refresh

    end

  end

end

 

 

 

Instructions

Add Above Main and Below Scene_Debug


Compatibility

None Known Issues

Terms and Conditions

You can use this freely. Just a little credit would be nice =]
 
So I decided I'd test it as I'm a big fan of FFVII and thought I'd check it out (I've seen a few other menu systems that replicate this before, which all seemed nice). I have to say I was slightly disapointed, there was a error smack bang as soon as I put it in the game. I'm not a novice with scripts so I managed to locate it and fix it sort of, but I'll show you the error message and line of code.

This is the dialogue box that appears when first importing the script, then opening the menu.
scripterror.png


Which then lead to this line of code;
scripterror2.png

The error was the last part of that snippet of code, which tries to access the map name. To test the menu I simply changed it to this
Code:
    self.contents.draw_text(0, 0, 60, 30, "Blah")
and that seemed to do the trick.

However even after fixing this slight error there are numerous issues with window placment, being one or two pixels too high or to low cutting off the border of the windowskin which could be fixed fairly easy. I guess with a little bit more work this could be improved but makes me wonder why you'd try and replicate a system that has already been produced numerous times.

A final comment, your screenshot doens't produce that image in game infact the gradient bars or faces don't appear. Now I understand this would cause an issue with missing graphics but you could have atleast kept the option to have them without further editing the script. Incase people are wondering the script looks like this ingame after you fix that silly map name bug;
realmenuimage.png
 
This looks pretty neat as a DMS edit, the positioning of everything is a good start. There's still alot more that can be done to make it look like the authentic FFVII menu which shouldn't be all too hard.

For one, you need to edit the playtime menu and make it smaller, and line the labels and values together...

final-fantasy-7-menu-screen-cloud-barret-tifa.jpg

The actual Window_MenuStatus needs sprucing up still, heres a good reference to the actual menu I googled. If you need help with any of that stuff, such as drawing the faces and the bars you can PM me and I'll help you out with it (or you can use some methods from the MACL to assist ya). I've already got my own methods for drawing those bars from that menu, with the border and the gradient fill bar if you need, only thing that I haven't tried yet is drawing the blinking rainbow bar (ie when your Limit Break is filled). Obviously then you'd have to design a Limit Break system though, obviously.

BTW the menu itself is actually compacted in the game, ie it doesn't fill up the whole screen it leaves some space. Obviously, RMXP allows 4 members and not 3 so this is understandable why the MenuStatus window is bigger than the actual game. Also, if I recall correctly, when you open up the menu (from the actual game), all the windows and stuff move in, if you haven't implemented that I can help you if you need. I have a script for Window movement, and the MACL has a Movable module as well you could implement (for windows, sprites, etc).

Sheesh, just talking about this makes me want to start a FFVII Starter Kit lol. Just kidding, I won't steal your thunder (yet if you're interested we could work on one together if you're ever bored I'd love to help ya lol)

Happy scripting man, hope to see you work on this some more :thumb:

PS I have a Finger cursor script, if you ever start your own starter kit for FFVII you're free to use it.
 
I'll start to organize all my FFVII-esque scripts into a project early next week if I have time, until then here's two scripts I've already submitted that you can use in your FFVII SDK...

Arrow Over Head
Window Cursor Sprite

I've got other things like a Steal/Mug system (WIP, different from what I've submitted here), then you've got Atoa's remix of the Materia system you might want to contact Atoa and/or SephirothSpawn for that which is a must for a FFVII SDK. Other misc things I have in my test bed, such as a Counter Attack system, and other things that might be of use.

Other than that, either we'll need to open a topic in Project Development or you can contact me via PM for whatever else you need help with, it sounds like it'll be alot of fun to develop. Please let me know if you setup a development topic so I can join you.
 
Ok, I have allready got Atoa's Materia System... that was the first thing i got.

I think it will be a good idea to open a devlopment topic, so ill go ahead and do that now.

Thanks for those two scripts, that will deffinetly add more funtion to the SDK.
 
Woohoo, I've already got a couple things I want to work on for this project! I tried googling (and browsing other sites) to get good screenshots of different menus for FFVII just so I could start a layout for one but instead I broke down and bought the game lol. (I guess nobody likes to post screenshots of menus, bah!)

http://cgi.ebay.com/ws/eBayISAPI.dll?Vi ... 0411358439

Post (or PM me) a link to your FFVII SDK topic so we can start working on this. If there is anything in particular you want to do, and anything you want me to do let me know (via PM). I already know what I want to work on first, I'm gonna edit/re-write the Opening Credits script so that its easier to add new credits to it. Also, I like my Splash Screen system better than the one you're using, no offense, so I'll probably replace it if you don't mind XD

Happy scripting, see ya in the Dev topic :thumb:
 

decka

Member

This is a little random, but could you tell me where you got the facesets in the opening screenie, Regashi?
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top