03-07-2008, 05:19 AM
(This post was last modified: 11-22-2021, 03:58 AM by DerVVulfman.
Edit Reason: older url updated to new url for downloads
)
Chrono Trigger CMS
Version: 1.25
Version: 1.25
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
Picture Version:
Ring Menu:
Windowskin Version:
Ring Menu:
Demo
Picture Version
Windowskin Version
Picture Version + Ring Menu
Windowskin Version + Ring Menu
Script
Sorry, no Script this time, just download the demo. ;)
Instructions
Instructions are within the scripts in the demo.
FAQ
"How to make it compatible with Dubealex's AMS"
In the CMS find these lines:
After Marshal.dump($game_player, file) add
Marshal.dump($ams, file)
You old save file won't work, but new ones will.
Code:
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
Marshal.dump($ams, file)
You old save file won't work, but new ones will.
How to use only the save menu(Windowskin Version)
For the save menu put this script above main:
Code:
#==============================================================================
# ** 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 Yeyinde 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