Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

Chrono Cross Color Field System 1.1

Chrono Cross Color Field
version 1.1
by U Division of ICU Gigasoft


Introduction & Features
-faithfully recreates the skill Color system from the Squaresoft game Chrono Cross
-Each skill is assigned a color (or none at all) through elements, and whenver a skill is used it's "color" is added to the battle's color field. The more of a certain color there is, the more powerful the skill of that color becomes. The field can hold up to a certain number of colors at a time
-An extra bonus (or penalty) if the color field is completely one color
-Anti-colors that negatively affect others

v1.1
-Skills that add 2 colors
-Skills that add 2 anti-colors
-Skills that reset the field to blank
-Skills that set the field to 1 color
-Skills that set the field to the anti-color

Screenshots
e8jul0.jpg


Demo
Color Field Icons
Demo VX v1.1
Demo XP v1.1
Demo XP v1.0

v1.1 Script VX
Code:
 

#-------------------------------------------------------------------------------

#  Chrono Cross Color Field

#  version 1.1

#  by U-Division of ICU Gigasoft

#

#  What is does:

#  -faithfully recreates the skill Color system from the Squaresoft

#   game Chrono Cross

#  -Each skill is assigned a color (or none at all) through elements,

#   and whenver a skill is used it's "color" is added to the battle's

#   color field. The more of a certain color there is, the more

#   powerful the skill of that color becomes.  The field can hold up

#   to a certain number of colors at a time

#  -An extra bonus (or penalty) if the color field is completely one color

#

#  Installation

#  -You need a CF_X.png where X is the ID of the color for every color in the

#   icons folder

#  -Put script above main

#-------------------------------------------------------------------------------

 

#-------------------------------------------------------------------------------

#  Color Field Battel Modifier Configuartion

#-------------------------------------------------------------------------------

 

CF_COLOR_BONUS = 0.10 

#Rate of increase of power for each color the battler's 

#currently used skill on field. Set to 0 to disable.

 

CF_ANTI_PENALTY = 0.10

#Rate of decrease of power for each anti-color of the battler's 

#currently used skill's color on field. Set to 0 to disable.

 

CF_FULL_BONUS = 0.50

#The extra bonus given when the color of the battler's skill completely

#fills the field.

 

CF_FULL_PENALTY = 0.50

#The extra subtraction given when the anti-color of the battler's skill 

#completely fills the field.

 

 

 

#-------------------------------------------------------------------------------

#  Color & Color Field Configuration

#-------------------------------------------------------------------------------

#

#Using the ELEMENT ID fill out the hash like this

#   CF_ELEM_COLORS = {

#   element_id => color_id,

#   element_id => color_id,

#   ...

#   }

CF_ELEM_COLORS = {

17 => 0,

18 => 1,

19 => 2,

20 => 3,

21 => 4,

22 => 5,

}

 

CF_FIELD_MAX = 6 

#Set this to the number of colors, or however many colors you want to be

#remembered.

 

 

#-------------------------------------------------------------------------------

#  Anti Color Configuration

#-------------------------------------------------------------------------------

#

#Using the COLOR ID (as in not the element ID) fill out the hash like this

#   CF_ELEM_ANTI_COLORS = {

#   color_id => anti_color_id,

#   color_id => anti_color_id,

#   ...

#   }

CF_ELEM_ANTI_COLORS = {

0 => 1,

1 => 0,

2 => 3,

3 => 2,

4 => 5,

5 => 6,

}

 

#-------------------------------------------------------------------------------

#  Special Color Effects

#-------------------------------------------------------------------------------

#

# Using the ELEMENT ID fill out the hash like this

#   CF_ELEM_SFX = {

#   element_id => effect,

#   element_id=> effect,

#   ...

#   }

#

#   replace "effect" with one of the following

#  

#   1 : sets the entire field to the color of this skill

#  -1 : sets the entire field to the anti-color of this skill

#   2 : adds an extra color of the skill to the field

#  -2 : adds an extra anti-color of the skill to the field

#   0 : resets the color field to all blank

#

CF_ELEM_SFX = {

23 => -1,

24 => 1,

25 => 0,

26 => -2,

27 => 2,

}

 

 

module Kernel

  def CF_getColor(element_id)

    id = CF_ELEM_COLORS[element_id]

    id = -1 if id == nil

    return id

  end

 

  def CF_getColorFromSet(elementarray)

  for element_id in elementarray

    id = CF_ELEM_COLORS[element_id]

    id = -1 if id == nil

    return id if id != -1

  end

  return -1

  end

  

  def CF_hasColor?(element_id)

    return (getColor(element_id) != -1)

  end

  

  def CF_antiColor(color)

    return CF_ELEM_ANTI_COLORS[color] if CF_ELEM_ANTI_COLORS.has_key?(color)

    return -1

  end

  

  def CF_getSFXFromSet(elementarray)

    sfx_array = []

    for element_id in elementarray

      sfx_array.push(CF_ELEM_SFX[element_id]) if CF_ELEM_SFX.has_key?(element_id)

    end

    return sfx_array

    end

end

 

 

#-------------------------------------------------------------------------------

#  RPG::Skill 

#  new methods:

#      color(color)      :returns the skills color

#      hasColor?         :returns whether or not the skill has a color

#-------------------------------------------------------------------------------

 

module RPG

  class Skill

    

    def color

      color_elems = []

      for e in element_set

        color_elems.push(e) if CF_ELEM_COLORS.include?(e)

      end

      color_elems.push(0) if color_elems.empty?

      return CF_getColor(color_elems[0])

    end

  

    def hasColor?

      return (color != -1)

    end

    

    def special_type_skill?

      effect_set = CF_getSFXFromSet(element_set)

      return effect_set.include?(-2) || effect_set.include?(-1) || effect_set.include?(0)

    end

    

    end

  end

  

#-------------------------------------------------------------------------------

#  Scene_Battle 

#  new methods:

#      add_color(color)      :adds color to color field

#      refresh_color_field   :redraws the icons

#      reset_color_field     :resets color field

#      color_boost(color)    :calculates the damage modifier 

#-------------------------------------------------------------------------------

 

class Scene_Battle

  attr_accessor :color_set

  attr_accessor :color_max

  attr_accessor :active_battler

 

alias :_orig_main :main

def main

  @color_set = []

  @color_max = CF_FIELD_MAX

  @color_icons = Window_ColorField.new(@color_set)

  _orig_main

  @color_icons.dispose

end

 

def add_color(color)

  if @color_set.size == @color_max

    @color_set.pop

  end

  @color_set.unshift(color)

end

 

def refresh_color_field

    @color_icons.refresh(@color_set)

end

 

def reset_color_field

  @color_set = []

  refresh_color_field

end

 

def set_color_field(new_color)

  for i in 0 ... @color_set.size

    @color_set[i] = new_color

    end

end

 

def color_boost(color)

  mod =  1.00

  count = 0

  anti_count = 0

  anti_color = CF_antiColor(color)

  return mod if @color_set == nil

   for color_field in @color_set

     mod += CF_COLOR_BONUS  if color_field == color

     mod -= CF_ANTI_PENALTY if color_field == anti_color

     count += 1 if color_field == color

     count -= 1 if color_field == anti_color

   end

  mod += CF_FULL_BONUS if count == @color_max

  mod -= CF_FULL_PENALTY if count == -@color_max

  mod = 0.01 if mod < 0.01

 return mod

end

 

end

 

#--------------------------------------------------------------------------

# Game_Battler

#---------------------------------------------------------------------------

class Game_Battler

 

#alias :elements_max_rate :elements_correct

alias :_orig_elements_max_rate :elements_max_rate

def elements_max_rate(element_set)

  weakest = _orig_elements_max_rate(element_set)

  if $scene.is_a?(Scene_Battle)

    color = CF_getColorFromSet(element_set)

    mod = $scene.color_boost(color)

    weakest = Integer(weakest*mod)

    skill_id = $scene.active_battler.action.skill_id

    skill = nil

    skill = $data_skills[skill_id] if skill_id > 0

      if skill != nil

        skill_color_field_fx(skill_id,color)

      end

    if skill != nil && skill.special_type_skill?

    $scene.add_color(CF_antiColor(color))

      else

    $scene.add_color(color) if color != -1

    end

    $scene.refresh_color_field

  end

  return weakest

end

 

def skill_color_field_fx(skill_id, color)

  elem_set = $data_skills[skill_id].element_set

  effect_set = CF_getSFXFromSet(elem_set)

  for cfx in effect_set

    cf_set(cfx,color)

  end

end

 

def cf_set(type, color)

  case type

  when 0

    $scene.reset_color_field

  when -1

    if color != -1

    $scene.set_color_field(CF_antiColor(color))

    end

  when 1

    if color != -1

    $scene.set_color_field(color)

    end

  when 2

    if color != -1

    $scene.add_color(color) 

    end

  when -2

    if color != -1

    $scene.add_color(CF_antiColor(color))

    end

  end

  

end

 

end

 

#--------------------------------------------------------------------------

# Window_ColorField

#   Displays the Color icons

#   CF_WINDOW_X = The X Position of the window

#   CF_WINDOW_Y = The Y Position of the window

#--------------------------------------------------------------------------

 

class Window_ColorField < Window_Base

  

  CF_WINDOW_X = 0 #Default is 0

  CF_WINDOW_Y = 0 #Default is 0

  

  #--------------------------------------------------------------------------

  # * Object Initialization

  #--------------------------------------------------------------------------

  def initialize(color_set)

    super(CF_WINDOW_X, CF_WINDOW_Y, 640, 64)

    self.contents = Bitmap.new(width - 32, height - 32)

    self.opacity = 0

    self.z -= 10

    refresh(color_set)

  end

  #--------------------------------------------------------------------------

  # * Refresh

  #--------------------------------------------------------------------------

  def refresh(color_set)

    self.contents.clear

    return if color_set == nil

     count = 0

      for i in color_set

       color_image = "CF_" + i.to_s

       bitmap = Cache.picture(color_image)

       self.contents.blt(x + count*24, y + 4, bitmap, Rect.new(0, 0, 24, 24))

       count += 1

     end

  end

end

 

 
[/i]
v1.1 Script XP
Code:
 

#-------------------------------------------------------------------------------

#  Chrono Cross Color Field

#  version 1.1

#  by U-Division of ICU Gigasoft

#

#  What is does:

#  -faithfully recreates the skill Color system from the Squaresoft

#   game Chrono Cross

#  -Each skill is assigned a color (or none at all) through elements,

#   and whenver a skill is used it's "color" is added to the battle's

#   color field. The more of a certain color there is, the more

#   powerful the skill of that color becomes.  The field can hold up

#   to a certain number of colors at a time

#  -An extra bonus (or penalty) if the color field is completely one color

#

#  Installation

#  -You need a CF_X.png where X is the ID of the color for every color in the

#   icons folder

#  -Put script above main

#-------------------------------------------------------------------------------

 

#-------------------------------------------------------------------------------

#  Color Field Battel Modifier Configuartion

#-------------------------------------------------------------------------------

 

CF_COLOR_BONUS = 0.10 

#Rate of increase of power for each color the battler's 

#currently used skill on field. Set to 0 to disable.

 

CF_ANTI_PENALTY = 0.10

#Rate of decrease of power for each anti-color of the battler's 

#currently used skill's color on field. Set to 0 to disable.

 

CF_FULL_BONUS = 0.50

#The extra bonus given when the color of the battler's skill completely

#fills the field.

 

CF_FULL_PENALTY = 0.50

#The extra subtraction given when the anti-color of the battler's skill 

#completely fills the field.

 

 

 

#-------------------------------------------------------------------------------

#  Color & Color Field Configuration

#-------------------------------------------------------------------------------

#

#Using the ELEMENT ID fill out the hash like this

#   CF_ELEM_COLORS = {

#   element_id => color_id,

#   element_id => color_id,

#   ...

#   }

CF_ELEM_COLORS = {

17 => 0,

18 => 1,

19 => 2,

20 => 3,

21 => 4,

22 => 5,

}

 

CF_FIELD_MAX = 6 

#Set this to the number of colors, or however many colors you want to be

#remembered.

 

 

#-------------------------------------------------------------------------------

#  Anti Color Configuration

#-------------------------------------------------------------------------------

#

#Using the COLOR ID (as in not the element ID) fill out the hash like this

#   CF_ELEM_ANTI_COLORS = {

#   color_id => anti_color_id,

#   color_id => anti_color_id,

#   ...

#   }

CF_ELEM_ANTI_COLORS = {

0 => 1,

1 => 0,

2 => 3,

3 => 2,

4 => 5,

5 => 6,

}

 

#-------------------------------------------------------------------------------

#  Special Color Effects

#-------------------------------------------------------------------------------

#

# Using the ELEMENT ID fill out the hash like this

#   CF_ELEM_SFX = {

#   element_id => effect,

#   element_id=> effect,

#   ...

#   }

#

#   replace "effect" with one of the following

#  

#   1 : sets the entire field to the color of this skill

#  -1 : sets the entire field to the anti-color of this skill

#   2 : adds an extra color of the skill to the field

#  -2 : adds an extra anti-color of the skill to the field

#   0 : resets the color field to all blank

#

CF_ELEM_SFX = {

23 => -1,

24 => 1,

25 => 0,

26 => -2,

27 => 2,

}

 

 

module Kernel

  def CF_getColor(element_id)

    id = CF_ELEM_COLORS[element_id]

    id = -1 if id == nil

    return id

  end

 

  def CF_getColorFromSet(elementarray)

  for element_id in elementarray

    id = CF_ELEM_COLORS[element_id]

    id = -1 if id == nil

    return id if id != -1

  end

  return -1

  end

  

  def CF_hasColor?(element_id)

    return (getColor(element_id) != -1)

  end

  

  def CF_antiColor(color)

    return CF_ELEM_ANTI_COLORS[color] if CF_ELEM_ANTI_COLORS.has_key?(color)

    return -1

  end

  

  def CF_getSFXFromSet(elementarray)

    sfx_array = []

    for element_id in elementarray

      sfx_array.push(CF_ELEM_SFX[element_id]) if CF_ELEM_SFX.has_key?(element_id)

    end

    return sfx_array

    end

end

 

 

#-------------------------------------------------------------------------------

#  RPG::Skill 

#  new methods:

#      color(color)      :returns the skills color

#      hasColor?         :returns whether or not the skill has a color

#-------------------------------------------------------------------------------

 

module RPG

  class Skill

    

    def color

      color_elems = []

      for e in element_set

        color_elems.push(e) if CF_ELEM_COLORS.include?(e)

      end

      color_elems.push(0) if color_elems.empty?

      return CF_getColor(color_elems[0])

    end

  

    def hasColor?

      return (color != -1)

    end

    

    def special_type_skill?

      effect_set = CF_getSFXFromSet(element_set)

      return effect_set.include?(-2) || effect_set.include?(-1) || effect_set.include?(0)

    end

    

    end

  end

  

#-------------------------------------------------------------------------------

#  Scene_Battle 

#  new methods:

#      add_color(color)      :adds color to color field

#      refresh_color_field   :redraws the icons

#      reset_color_field     :resets color field

#      color_boost(color)    :calculates the damage modifier 

#-------------------------------------------------------------------------------

 

class Scene_Battle

  attr_accessor :color_set

  attr_accessor :color_max

  attr_accessor :active_battler

 

alias :_orig_main :main

def main

  @color_set = []

  @color_max = CF_FIELD_MAX

  @color_icons = Window_ColorField.new(@color_set)

  _orig_main

  @color_icons.dispose

end

 

def add_color(color)

  if @color_set.size == @color_max

    @color_set.pop

  end

  @color_set.unshift(color)

end

 

def refresh_color_field

    @color_icons.refresh(@color_set)

end

 

def reset_color_field

  @color_set = []

  refresh_color_field

end

 

def set_color_field(new_color)

  for i in 0 ... @color_set.size

    @color_set[i] = new_color

    end

end

 

def color_boost(color)

  mod =  1.00

  count = 0

  anti_count = 0

  anti_color = CF_antiColor(color)

  return mod if @color_set == nil

   for color_field in @color_set

     mod += CF_COLOR_BONUS  if color_field == color

     mod -= CF_ANTI_PENALTY if color_field == anti_color

     count += 1 if color_field == color

     count -= 1 if color_field == anti_color

   end

  mod += CF_FULL_BONUS if count == @color_max

  mod -= CF_FULL_PENALTY if count == -@color_max

  mod = 0.01 if mod < 0.01

 return mod

end

 

end

 

#--------------------------------------------------------------------------

# Game_Battler

#---------------------------------------------------------------------------

class Game_Battler

 

alias :_orig_elements_correct :elements_correct

def elements_correct(element_set)

  weakest = _orig_elements_correct(element_set)

  if $scene.is_a?(Scene_Battle)

    color = CF_getColorFromSet(element_set)

    mod = $scene.color_boost(color)

    weakest = Integer(weakest*mod)

    skill_id = $scene.active_battler.current_action.skill_id

    skill = nil

    skill = $data_skills[skill_id] if skill_id > 0

      if $scene.active_battler.current_action.skill_id > 0

        skill_color_field_fx($scene.active_battler.current_action.skill_id,color)

      end

    if skill != nil && skill.special_type_skill?

    $scene.add_color(CF_antiColor(color))

      else

    $scene.add_color(color) if color != -1

    end

    $scene.refresh_color_field

  end

  return weakest

end

 

def skill_color_field_fx(skill_id, color)

  elem_set = $data_skills[skill_id].element_set

  effect_set = CF_getSFXFromSet(elem_set)

  for cfx in effect_set

    cf_set(cfx,color)

  end

end

 

def cf_set(type, color)

  case type

  when 0

    $scene.reset_color_field

  when -1

    if color != -1

    $scene.set_color_field(CF_antiColor(color))

    end

  when 1

    if color != -1

    $scene.set_color_field(color)

    end

  when 2

    if color != -1

    $scene.add_color(color) 

    end

  when -2

    if color != -1

    $scene.add_color(CF_antiColor(color))

    end

  end

  

end

 

end

 

#--------------------------------------------------------------------------

# Window_ColorField

#   Displays the Color icons

#   CF_WINDOW_X = The X Position of the window

#   CF_WINDOW_Y = The Y Position of the window

#--------------------------------------------------------------------------

 

class Window_ColorField < Window_Base

  

  CF_WINDOW_X = 0 #Default is 0

  CF_WINDOW_Y = 0 #Default is 0

  

  #--------------------------------------------------------------------------

  # * Object Initialization

  #--------------------------------------------------------------------------

  def initialize(color_set)

    super(CF_WINDOW_X, CF_WINDOW_Y, 640, 64)

    self.contents = Bitmap.new(width - 32, height - 32)

    self.opacity = 0

    self.z -= 10

    refresh(color_set)

  end

  #--------------------------------------------------------------------------

  # * Refresh

  #--------------------------------------------------------------------------

  def refresh(color_set)

    self.contents.clear

    return if color_set == nil

     count = 0

      for i in color_set

       color_image = "CF_" + i.to_s

       bitmap = RPG::Cache.icon(color_image)

       self.contents.blt(x + count*24, y + 4, bitmap, Rect.new(0, 0, 24, 24))

       count += 1

     end

  end

end

 

 
[/i]
Instructions
-YOU NEED A CF_X.png for every color in the ICONS FOLDER (CF_0.png, CF_1.png)
-You can just download my icons unless you want to make your own
-Put script above main

FAQ
N/A

Compatibility
Should be compatible with most battle scripts. Nothing was overwritten.

Credits and Thanks
Square Enix for making the game that inspired this even though I've never played it and dislike most of the endings...

Terms and Conditions
Just give credit if used.
 

Mirku

Sponsor

This looks pretty neat, especially since you mentioned the high compatibility. If I have time I'll test it when I get home. Also, do you plan to make more chrono cross related scripts?
 
I never actually played the game, (just watched my bro do it) so I don't know too many of the other systems. All I remember is that that the color system was fairly simple, and that you had to get all the colors on the field to get the best ending... Um, short answer: probably not.
 
Bumped for 1.1. I think I'm done with this script unless anyone reports any bugs or requests additions.

To figure out how to set up the elements for the skill, I suggest looking at how the demo does it.
 
the script is incompatible with Cogwheel's RTAB.
To make it compatible you can do:
change the line 185 of scene_battle3 (standard rpg maker) with:
@active_battler.current_action.skill_id = $skill.id

After, in this script (CC color field) change all the lines where there is:
$scene.active_battler.current_action.skill_id
with:
$skill.id

is easy, I hope that my intervention would be helpful. ^ ^
Fantastic script, congratulations. ;)

PS: sorry for my bad English but i don't speak it very well.
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top