Jump to content

Announcing our new website

To find out the latest about our new website, visit Game Dev Unlimited

Submitter

File Information

  • Submitted: Mar 15 2008 11:58 AM
  • Last Updated: Jun 08 2008 05:00 AM
  • File Size: 1.39MB
  • Views: 6291
  • Downloads: 1,509

Download Chrono Trigger CMS

* * * * - 4 Votes



Screenshots
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]

[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
[/spoiler]

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




I really like the script. Good work.
  • Report
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:
  • Report
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.
  • Report
How do I remove the party exchange option?
  • Report
where can i find script for this lol? every time i downloads it i don't see scrpit file.
  • Report

Other files you may be interested in ..





  • 179 Total Files
  • 47 Total Categories
  • 56 Total Authors
  • 103,076 Total Downloads
  • Chasing System Latest File
  • deathmoverz24 Latest Submitter

1 user(s) are online (in the past 30 minutes)

1 members, 0 guests, 0 anonymous users


draconus