About This File
Chrono Trigger CMS
Introduction
A CMS that looks like the menu system in the videogame Chrono Trigger
Update: September, 14th
Added a Windowskin version of the menu and fixed some bugs.
Update: September, 19th
Added a ring menu version of the script
Features
* new item menu
* new skill menu (no double or tripple techs included)
* new equip menu
* party order changing feature
* new save and load menu
Update: September, 19th
* ring menu command window
Instructions
Instructions are within the scripts in the demo.
FAQ
[spoiler=How to make it compatible with Dubealex's AMS]
In the CMS find these lines:
def write_save_data(file) # Make character data for drawing save file characters = [] for i in 0...$game_party.actors.size actor = $game_party.actors[i] characters.push([actor.character_name, actor.character_hue]) end # Write character data for drawing save file Marshal.dump(characters, file) # Wrire frame count for measuring play time Marshal.dump(Graphics.frame_count, file) # Increase save count by 1 $game_system.save_count += 1 # Save magic number # (A random value will be written each time saving with editor) $game_system.magic_number = $data_system.magic_number # Write each type of game object Marshal.dump($game_system, file) Marshal.dump($game_switches, file) Marshal.dump($game_variables, file) Marshal.dump($game_self_switches, file) Marshal.dump($game_screen, file) Marshal.dump($game_actors, file) Marshal.dump($game_party, file) Marshal.dump($game_troop, file) Marshal.dump($game_map, file) Marshal.dump($game_player, file) end
After Marshal.dump($game_player, file) add
Marshal.dump($ams, file)
You old save file won't work, but new ones will.
[spoiler=How to use only the save menu(Windowskin Version)]For the save menu put this script above main:
#============================================================================== # ** Chrono Trigger Save Menu #------------------------------------------------------------------------------ # Raziel # 2006-09-09 # Version 1.00 #============================================================================== # ~Instructions # Icons of the characters are used in the save menu. # Make sure you put them in the icon folder and name them # like you name your character file, for example the icon for # Arshes would be 001-Fighter01 # # For the chapter function, just use $game_system.chapter = "desired filename" # in a call script command and then the savefile will have the name # you choose. #============================================================================== #============================================================================== # ** Scene_File #------------------------------------------------------------------------------ # This is a superclass for the save screen and load screen. #============================================================================== class Scene_File #-------------------------------------------------------------------------- # * Object Initialization # help_text : text string shown in the help window #-------------------------------------------------------------------------- def initialize(help_text) @help_text = help_text end #-------------------------------------------------------------------------- # * Main Processing #-------------------------------------------------------------------------- def main # Make save file window @back_ground = Sprite.new @back_ground.bitmap = RPG::Cache.picture(CT_Pictures::BG_Picture) @save_window = [] @save_window[0] = Window_Base.new(39,32, 560, 70) @save_window[1] = Window_Base.new(39,102, 560, 70) @save_window[2] = Window_Base.new(39,172, 560, 70) @save_left = Window_Base.new(39,273,241,172) @save_right = Window_Base.new(280,273,320,172) @savefile_windows = [] @save_status = Window_SaveStatus.new for i in 0..2 @savefile_windows.push(Window_SaveFile.new(i, make_filename(i))) end # Select last file to be operated @file_index = $game_temp.last_file_index @savefile_windows[@file_index].selected = true # 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 @save_status.dispose @back_ground.dispose @save_left.dispose @save_right.dispose for i in 0..2 @save_window[i].dispose end for i in @savefile_windows i.dispose end end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update @save_status.update $game_temp.save_index = @file_index if Input.trigger?(Input::C) # Call method: on_decision (defined by the subclasses) on_decision(make_filename(@file_index)) $game_temp.last_file_index = @file_index return end # If B button was pressed if Input.trigger?(Input::B) # Call method: on_cancel (defined by the subclasses) on_cancel return end # If the down directional button was pressed if Input.repeat?(Input::DOWN) # If the down directional button pressed down is not a repeat, # or cursor position is more in front than 3 unless @file_index == 2 if Input.trigger?(Input::DOWN) # Play cursor SE $game_system.se_play($data_system.cursor_se) # Move cursor down @savefile_windows[@file_index].selected = false @file_index = (@file_index + 1) @savefile_windows[@file_index].selected = true return end end # If the up directional button was pressed elsif Input.repeat?(Input::UP) # If the up directional button pressed down is not a repeat、 # or cursor position is more in back than 0 unless @file_index == 0 if Input.trigger?(Input::UP) # Play cursor SE $game_system.se_play($data_system.cursor_se) # Move cursor up @savefile_windows[@file_index].selected = false @file_index = (@file_index - 1) @savefile_windows[@file_index].selected = true return end end end end end #============================================================================== # ** Game_System #------------------------------------------------------------------------------ # This class handles data surrounding the system. Backround music, etc. # is managed here as well. Refer to "$game_system" for the instance of # this class. #============================================================================== class Game_System attr_accessor :chapter alias raz_cms_system_initialize initialize #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize @chapter = "" raz_cms_system_initialize end end #============================================================================== # ** Game_Temp #------------------------------------------------------------------------------ # This class handles temporary data that is not included with save data. # Refer to "$game_temp" for the instance of this class. #============================================================================== class Game_Temp attr_accessor :save_index alias raz_cms_initialize initialize #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize @save_index = 0 raz_cms_initialize end end #============================================================================== # ** Window_SaveStatus #------------------------------------------------------------------------------ # This window displays stats on the save files. #============================================================================== class Window_SaveStatus < Window_Base #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize super(0,0,640,480) self.contents = Bitmap.new(width - 32, height - 32) self.opacity = 0 @index = $game_temp.save_index refresh end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear filename = "Save#{$game_temp.save_index + 1}.rxdata" return unless FileTest.exist?(filename) file = File.open(filename, "r") @characters = Marshal.load(file) @frame_count = Marshal.load(file) @game_system = Marshal.load(file) @game_switches = Marshal.load(file) @game_variables = Marshal.load(file) Marshal.load(file) Marshal.load(file) Marshal.load(file) party = Marshal.load(file) Marshal.load(file) map = Marshal.load(file) self.contents.font.size = 20 self.contents.font.bold = true for i in 0...party.actors.size actor = party.actors[i] x = 284 y = i * 36 + 265 draw_actor_name(actor, x + 40, y - 2) draw_actor_level(actor, x + 170, y - 2) self.contents.blt(x + 5, y + 10, RPG::Cache.icon(actor.character_name), Rect.new(0,0,24,24)) self.contents.draw_text(x + 40, y + 16, 150, 32, "#{$data_system.words.hp} #{actor.hp} / #{actor.maxhp}") self.contents.draw_text(x + 170, y + 16, 150, 32, "#{$data_system.words.sp} #{actor.sp} / #{actor.maxsp}") end total_sec = @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) map_name = load_data("Data/MapInfos.rxdata")[map.map_id].name self.contents.font.size = 20 self.contents.draw_text(45, 272, 144, 32, map_name) self.contents.draw_text(45, 304, 144, 32, "TIME:") self.contents.draw_text(100, 304, 144, 32, text,2) self.contents.draw_text(45, 336, 144, 32, $data_system.words.gold + ":") self.contents.draw_text(100, 336, 144, 32, party.gold.to_s,2) self.contents.draw_text(45, 368, 144, 32, "Save #:") self.contents.draw_text(100, 368, 144, 32, @game_system.save_count.to_s, 2) end #-------------------------------------------------------------------------- # * Update #-------------------------------------------------------------------------- def update super if @index != $game_temp.save_index refresh @index = $game_temp.save_index end end end #============================================================================== # ** Window_SaveFile #------------------------------------------------------------------------------ # This window displays save files on the save and load screens. #============================================================================== class Window_SaveFile < Window_Base #-------------------------------------------------------------------------- # * Object Initialization # file_index : save file index (0-2) # filename : file name #-------------------------------------------------------------------------- def initialize(file_index, filename) super(42, 35 + file_index % 4 * 70, 640, 90) self.contents = Bitmap.new(width - 32, height - 32) self.opacity = 0 @file_index = file_index @filename = "Save#{@file_index + 1}.rxdata" @time_stamp = Time.at(0) @file_exist = FileTest.exist?(@filename) if @file_exist file = File.open(@filename, "r") @time_stamp = file.mtime @characters = Marshal.load(file) @frame_count = Marshal.load(file) @game_system = Marshal.load(file) @game_switches = Marshal.load(file) @game_variables = Marshal.load(file) @total_sec = @frame_count / Graphics.frame_rate file.close end refresh @selected = false end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear self.contents.font.size = 18 self.contents.font.bold = true # Draw file number self.contents.font.color = normal_color name = "File#{@file_index + 1}" self.contents.draw_text(4, 0, 600, 32, name) @name_width = contents.text_size(name).width # If save file exists if @file_exist self.contents.draw_text(0, 0, 600, 32, @game_system.chapter.to_s,1) end end end
Compatibility
Incompatible with some menu add ons. You'd have to edit some things to include them.
If you want to include something just ask, maybe I can help you.
Credits and Thanks
Credits to Squall / Selwyn for his cursor script
Credits to Der VVulfman for the ring menu.
Thanks to RPG Advocate for the party order changing method.
Thanks to MeisMe for helping me out fixing some bugs.
Thanks to SephirothSpawn and Stevo for betatesting.
Credits to Nin for the background picture of the windowskin version.
I don't know who made the windowskin or the icons, so if you know who made them, please PM me so I can add those to the credit list.
Author's Notes
In the instructions in the script it says use $game_system = "desired filename" to store the savefile's name, but it should be $game_system.chapter = "desired filename".
You can see it as an example within the demo when you click the event.
Enjoy
Recommended Comments
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now