Zeriab 9 Report post Posted February 18, 2008 I just found out that this system works amazingly well on RMVX. All that is needed is to change the fixed widths 640 and 480 to Graphics.width and Graphics.height. So here is an update with a RMVX version: The dialog framework: #============================================================================== # ** Dialog system - RMVX #------------------------------------------------------------------------------ # Zeriab # Version 1.0 # 2008-02-16 (Year-Month-Day) #------------------------------------------------------------------------------ # * Description : # # A small framework like script for dialogs #------------------------------------------------------------------------------ # * License : # # Copyright (C) 2008 Zeriab # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser Public License for more details. # # For the full license see <http://www.gnu.org/licenses/> # The GNU General Public License: http://www.gnu.org/licenses/gpl.txt # The GNU Lesser General Public License: http://www.gnu.org/licenses/lgpl.txt #------------------------------------------------------------------------------ # * Instructions : # # You can place this script pretty much anyway you like. # Place it above any other Dialogs you might be using. # Increase the STARTING_Z_VALUE if you have trouble with the dialog not # on top. #============================================================================== class Dialog STARTING_Z_VALUE = 1500 # Default value is 1500 attr_accessor :value attr_writer :marked_to_close #-------------------------------------------------------------------------- # * Getter with 'false' as default value #-------------------------------------------------------------------------- def marked_to_close @marked_to_close = false if @marked_to_close.nil? return @marked_to_close end #-------------------------------------------------------------------------- # * Mark the dialog to close #-------------------------------------------------------------------------- def mark_to_close self.marked_to_close = true end #-------------------------------------------------------------------------- # * Show the dialog # Returns the value from the dialog #-------------------------------------------------------------------------- def self.show(*args, &block) dialog = self.new(*args, &block) dialog.marked_to_close = false return dialog.main end #-------------------------------------------------------------------------- # * Initialization #-------------------------------------------------------------------------- def initialize(*args, &block) # For subclasses to overwrite end #-------------------------------------------------------------------------- # * Main processing #-------------------------------------------------------------------------- def main # Create the dimmed background create_background # Create Windows main_window # Main loop loop do # Update game screen Graphics.update # Update input information Input.update # Frame update update # Abort loop if the dialog should close if marked_to_close break end end # Dispose of windows main_dispose # Dispose of background dispose_background # Update input information Input.update # Returns the acquired value return self.value end #-------------------------------------------------------------------------- # * Create the dimmed background #-------------------------------------------------------------------------- def create_background bitmap = Bitmap.new(Graphics.width,Graphics.height) bitmap.fill_rect(0,0,Graphics.width,Graphics.height,Color.new(0,0,0,128)) @background_sprite = Sprite.new @background_sprite.z = STARTING_Z_VALUE @background_sprite.bitmap = bitmap end #-------------------------------------------------------------------------- # * Create the windows #-------------------------------------------------------------------------- def main_window # For the subclasses to override # Remember to set their z.value to at least STARTING_Z_VALUE + 1 end #-------------------------------------------------------------------------- # * Dispose the background #-------------------------------------------------------------------------- def dispose_background @background_sprite.dispose end #-------------------------------------------------------------------------- # * Dispose the windows #-------------------------------------------------------------------------- def main_dispose # For the subclasses to override # Dispose your windows here end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update # For the subclasses to override if Input.trigger?(Input::B) mark_to_close end end end A simple Yes/No Dialog: (as an example, REQUIRES the framework) #============================================================================ # * A Simple Yes/No dialog (RMVX) #============================================================================ class Dialog_YesNo < Dialog # self.value: false = No, true = Yes #-------------------------------------------------------------------------- # * A show method #-------------------------------------------------------------------------- def initialize(default_value = false, text = nil) # Sets the default value self.value = default_value @text = text # Sets the menu index if default_value @menu_index = 0 else @menu_index = 1 end end #-------------------------------------------------------------------------- # * Create the windows #-------------------------------------------------------------------------- def main_window @disposables = [] # The command window @command_window = Window_Command.new(80, ['Yes', 'No']) @command_window.index = @menu_index @command_window.x = (Graphics.width - @command_window.width) / 2 @command_window.y = (Graphics.height - @command_window.height) / 2 @command_window.z = STARTING_Z_VALUE + 1 @disposables << @command_window # The text window if @text.is_a?(String) @text_window = Window_Help.new @text_window.set_text(@text, 1) @text_window.z = STARTING_Z_VALUE + 1 @disposables << @text_window end end #-------------------------------------------------------------------------- # * Dispose the windows #-------------------------------------------------------------------------- def main_dispose @disposables.each {|element| element.dispose} end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update @command_window.update if Input.trigger?(Input::B) mark_to_close self.value = false end if Input.trigger?(Input::C) if @command_window.index == 0 self.value = true else self.value = false end mark_to_close end end end An as an actual use here is a code if you want a confirmation dialog when attempting to overwrite an existing save: (REQUIRES Dialog_YesNo) class Scene_File alias scene_file_dialog_determine_savefile determine_savefile #-------------------------------------------------------------------------- # * Determine savefile #-------------------------------------------------------------------------- def determine_savefile if @saving && @savefile_windows[@index].file_exist var = Dialog_YesNo.show(false, 'Do you want to overwrite' + ' the old savegame?') unless var Sound.play_buzzer return end end scene_file_dialog_determine_savefile end end It is used in the very same way as the RMXP version, so refer to my RMXP Dialog System for instructions. Share this post Link to post Share on other sites