じ☆ve冰风 发表于 2026-8-2 18:55:20

FG7 - Simple Formation Menu

Simple Formation Menu
By: FamilyGamer7​

Introduction
                        A simple way to make the formation it's own scene and with unique formatting.               
Click to expand...


Features
                        This script gives the formation command its own scene and re-organizes into a unique approach that is different from the standard formation implementation. This new formation will only support up to 6 actors per its design.               
Click to expand...


Screenshot(s)



Click to expand...


Script
Spoiler: FG7 - Simple Formation Menu                Ruby:       
#==============================================================================
# Title: Simple Formation Menu
# Author: FamilyGamer7 (FG7)
# Version: 1.0
# Engine: RPG Maker VX Ace
#==============================================================================
# ** Change Log |
# ---------------
# 1.0 => Created Script
#==============================================================================
# ** Description |
# ----------------
# A simple way to make the formation it's own scene and with unique formatting.
#==============================================================================
# ** Terms of Use |
# -----------------
# * Free to use in non-commercial projects and commercial projects
# * Feel free to modify and improve the script. Credit is still required.
# * Credit FamilyGamer7
#==============================================================================
# ** Usage |
# ---------
# Plug & Play (With some customization in module section)
#
# -----------------------------------------------------------------------------
#
# For the module section, you can use a value like "30" or "-30" which is to
# add/subtract to the existing "x" coordinate placement of the scene. The same
# applies for the "y" coordinate placement. See examples below.
#
# - Ex: Scene_X_Horizontal = 30 - moves everything to the right
# - Ex: Scene_X_Horizontal = -30 - moves everything to the left
#
# - Ex: Scene_Y_Vertical = 30 - moves everything to the bottom
# - Ex: Scene_Y_Vertical = -30 - moves everything to the top
#==============================================================================
# ** Important Note |
# ------------------
# This script only supports up to 6 actors at a time to function properly.
#==============================================================================

#==============================================================================
# ** Module: FG7::Simple_Formation_Menu
#------------------------------------------------------------------------------
#This modules creates a static variable to be used within the script.
#==============================================================================

module FG7
module Simple_Formation_Menu

#==============================================================================
# -------------------- ALLOWED TO EDIT BELOW THIS LINE ---------------------- #
#==============================================================================

    # Sets the value to change the "x" coordinates of the formation scene.
    # (This is needed if screen is resized higher - For flexibility)
    Scene_X_Horizontal = 0
   
    # Sets the value to change the "y" coordinates of the formation scene.
    # (This is needed if screen is resized higher - For flexibility)
    Scene_Y_Vertical = 0

#==============================================================================
# ---------- DO NOT EDIT BELOW THIS LINE (FOR ADVANCED USERS) --------------- #
#==============================================================================

end
end

#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
#This is a super class of all windows within the game.
#==============================================================================

class Window_Base < Window
#--------------------------------------------------------------------------
# * New Method: Draw Simple Status
#--------------------------------------------------------------------------
def draw_actor_formation_status(actor, x, y)
    draw_actor_name(actor, x, y - 5)
    draw_actor_level(actor, x, y - 14 + line_height * 2.2)
    draw_actor_icons(actor, x + 122, y + line_height * 1 - 37)
    draw_actor_hp(actor, x, y - 9 + line_height * 1)
end
end

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

class Window_MenuStatus < Window_Selectable
#--------------------------------------------------------------------------
# * Added Method: Object Initialization
#--------------------------------------------------------------------------
alias :fg7_simple_formation_menu_initialize :initialize
def initialize(x, y)
    fg7_simple_formation_menu_initialize(x, y)
    # Set window opacity to "0" if on Formation scene
    self.opacity = 0 if SceneManager.scene_is?(Scene_Formation)
end
#--------------------------------------------------------------------------
# * Added/Override Method: Get Rectangle for Drawing Items
#--------------------------------------------------------------------------
def item_rect(index)
    # Checks if on the Formation scene - draw new rect placement
    if SceneManager.scene_is?(Scene_Formation)
      rect = Rect.new
      rect.width = 135
      rect.height = 67
      rect.x = index % col_max * (item_width + spacing)
      rect.y = 106 + index / col_max * item_height
      rect
    # Since not on Formation scene - draw original rect placement.
    else
      rect = Rect.new
      rect.width = item_width
      rect.height = item_height
      rect.x = index % col_max * (item_width + spacing)
      rect.y = index / col_max * item_height
      rect
    end
end
#--------------------------------------------------------------------------
# * Alias Method: Get Column Max
#--------------------------------------------------------------------------
alias :fg7_simple_formation_menu_col_max :col_max
def col_max
    return 3 if SceneManager.scene_is?(Scene_Formation)
    fg7_simple_formation_menu_col_max
end
#--------------------------------------------------------------------------
# * Alias Method: Get Window Width
#--------------------------------------------------------------------------
alias :fg7_simple_formation_menu_window_width :window_width
def window_width
    return 620 if SceneManager.scene_is?(Scene_Formation)
    fg7_simple_formation_menu_window_width
end
#--------------------------------------------------------------------------
# * Alias Method: Get Window Height
#--------------------------------------------------------------------------
alias :fg7_simple_formation_menu_window_height :window_height
def window_height
    return Graphics.height + 300 if SceneManager.scene_is?(Scene_Formation)
    fg7_simple_formation_menu_window_height
end
#--------------------------------------------------------------------------
# * Alias Method: Get Number of Items
#--------------------------------------------------------------------------
alias :fg7_simple_formation_menu_item_max :item_max
def item_max
    return 6 if SceneManager.scene_is?(Scene_Formation)
    fg7_simple_formation_menu_item_max
end
#--------------------------------------------------------------------------
# * Alias Method: Get Item Height
#--------------------------------------------------------------------------
alias :fg7_simple_formation_menu_item_height :item_height
def item_height
    return 188 if SceneManager.scene_is?(Scene_Formation)
    fg7_simple_formation_menu_item_height
end
#--------------------------------------------------------------------------
# * Alias Method: Get Item Width
#--------------------------------------------------------------------------
alias :fg7_simple_formation_menu_item_width :item_width
def item_width
    return 140 if SceneManager.scene_is?(Scene_Formation)
    fg7_simple_formation_menu_item_width
end
#--------------------------------------------------------------------------
# * Override Method: Draw Item
#--------------------------------------------------------------------------
def draw_item(index)
    # Checks if on the Formation scene - draw new placement
    if SceneManager.scene_is?(Scene_Formation)
      actor = $game_party.members
      enabled = $game_party.battle_members.include?(actor)
      rect = item_rect(index)
      draw_item_background(index)
      draw_actor_face(actor, rect.x + 7, rect.y - 110 + line_height / 2)
      draw_actor_formation_status(actor, rect.x + 5, rect.y - 7 + line_height / 2)
    # Since not on Formation scene - draw original placement.
    else
      actor = $game_party.members
      enabled = $game_party.battle_members.include?(actor)
      rect = item_rect(index)
      draw_item_background(index)
      draw_actor_face(actor, rect.x + 1, rect.y + 1, enabled)
      draw_actor_simple_status(actor, rect.x + 108, rect.y + line_height / 2)
    end
end
end

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

class Scene_Menu < Scene_MenuBase
#--------------------------------------------------------------------------
# * Override Method: Command
#--------------------------------------------------------------------------
def command_formation
    # Calls the new Formation scene
    SceneManager.call(Scene_Formation)
end
end

#==============================================================================
# ** Scene_Formation
#------------------------------------------------------------------------------
#This class performs the item screen processing.
#==============================================================================

class Scene_Formation < Scene_MenuBase
#--------------------------------------------------------------------------
# * New Method: Start Processing
#--------------------------------------------------------------------------
def start
    super
    create_menustatus_bg_partymember1
    create_menustatus_bg_partymember2
    create_menustatus_bg_partymember3
    create_menustatus_bg_partymember4
    create_menustatus_bg_partymember5
    create_menustatus_bg_partymember6
    create_status_window
end
#--------------------------------------------------------------------------
# * Added/Edited Method: Create Status Window
#--------------------------------------------------------------------------
def create_status_window
    x = 21 + FG7::Simple_Formation_Menu::Scene_X_Horizontal
    y = 9 + FG7::Simple_Formation_Menu::Scene_Y_Vertical
    @status_window = Window_MenuStatus.new(x, y)
    @status_window.select_last
    @status_window.activate
    @status_window.set_handler(:ok,   method(:on_formation_ok))
    @status_window.set_handler(:cancel, method(:on_formation_cancel))
end
#--------------------------------------------------------------------------
# * New Method: Create MenuStatus Party Member 1 Background Window (Formation)
#--------------------------------------------------------------------------
def create_menustatus_bg_partymember1
    x = 24 + FG7::Simple_Formation_Menu::Scene_X_Horizontal
    y = 118 + FG7::Simple_Formation_Menu::Scene_Y_Vertical
    @menustatus_bg_window_partymember1 = Window_Base.new(x, y, 153, 85)
end
#--------------------------------------------------------------------------
# * New Method: Create MenuStatus Party Member 2 Background Window (Formation)
#--------------------------------------------------------------------------
def create_menustatus_bg_partymember2
    x = 196 + FG7::Simple_Formation_Menu::Scene_X_Horizontal
    y = 118 + FG7::Simple_Formation_Menu::Scene_Y_Vertical
    @menustatus_bg_window_partymember2 = Window_Base.new(x, y, 153, 85)
end
#--------------------------------------------------------------------------
# * New Method: Create MenuStatus Party Member 3 Background Window (Formation)
#--------------------------------------------------------------------------
def create_menustatus_bg_partymember3
    x = 368 + FG7::Simple_Formation_Menu::Scene_X_Horizontal
    y = 118 + FG7::Simple_Formation_Menu::Scene_Y_Vertical
    @menustatus_bg_window_partymember3 = Window_Base.new(x, y, 153, 85)
end
#--------------------------------------------------------------------------
# * New Method: Create MenuStatus Party Member 4 Background Window (Formation)
#--------------------------------------------------------------------------
def create_menustatus_bg_partymember4
    x = 24 + FG7::Simple_Formation_Menu::Scene_X_Horizontal
    y = 306 + FG7::Simple_Formation_Menu::Scene_Y_Vertical
    @menustatus_bg_window_partymember4 = Window_Base.new(x, y, 153, 85)
end
#--------------------------------------------------------------------------
# * New Method: Create MenuStatus Party Member 5 Background Window (Formation)
#--------------------------------------------------------------------------
def create_menustatus_bg_partymember5
    x = 196 + FG7::Simple_Formation_Menu::Scene_X_Horizontal
    y = 306 + FG7::Simple_Formation_Menu::Scene_Y_Vertical
    @menustatus_bg_window_partymember5 = Window_Base.new(x, y, 153, 85)
end
#--------------------------------------------------------------------------
# * New Method: Create MenuStatus Party Member 6 Background Window (Formation)
#--------------------------------------------------------------------------
def create_menustatus_bg_partymember6
    x = 368 + FG7::Simple_Formation_Menu::Scene_X_Horizontal
    y = 306 + FG7::Simple_Formation_Menu::Scene_Y_Vertical
    @menustatus_bg_window_partymember6 = Window_Base.new(x, y, 153, 85)
end
#--------------------------------------------------------------------------
# * Added Method: Formation
#--------------------------------------------------------------------------
def on_formation_ok
    if @status_window.pending_index >= 0
      $game_party.swap_order(@status_window.index,
                            @status_window.pending_index)
      @status_window.pending_index = -1
      @status_window.redraw_item(@status_window.index)
      @status_window.refresh
    else
      @status_window.pending_index = @status_window.index
    end
    @status_window.activate
end
#--------------------------------------------------------------------------
# * Added Method: Formation
#--------------------------------------------------------------------------
def on_formation_cancel
    if @status_window.pending_index >= 0
      @status_window.pending_index = -1
      @status_window.activate
    else
      SceneManager.return
    end
end
end


How to Use
                        Add this script in the script editor under in the "Materials" section and above "Main Process".
The instructions and setup for the script are held within the script header itself. No need to repeat here.               
Click to expand...


Terms of Use
                        - Free to use in non-commercial projects and commercial projects
- Feel free to modify and improve the script. Credit is still required.
- Credit FamilyGamer7               
Click to expand...




本贴来自国际rpgmaker官方论坛作者:FG7处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/fg7-simple-formation-menu.144735/
页: [1]
查看完整版本: FG7 - Simple Formation Menu