Jump to content
New account registrations are disabed. This website is now an archive. Read more here.

1 Screenshot

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




User Feedback

Recommended Comments

Awesome script! I especially like the way the savescreen works, the chapter names rule! :D

 

I only have one question, is there an easy way to enable and disable the "exchange" option from the menu? I don't want the player to be able to choose the order of his characters in various situations. (I use a catterpillar script so the characters walk behind each other and at some points in my game one character needs to be upfront, so you shouldn't be able to change this)

 

Like saving, you have the option to disable saving for a while and put it on enable later. I would really like this for the exchange option.

 

Help anyone? :blink:

Share this comment


Link to comment
Share on other sites

Question: How do I remove the ring script? I just want the standard straight line, bar version of the menu without the ring like it was in the original CT game. Thanks.

Share this comment


Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...