ChaosDrive RTAB Version 1.0 with Rewritten Cogwheel RTAB modified for CD.

0 Members and 1 Guest are viewing this topic.

pokeball GAXOfflineMale
**
Rep:
Level 88
The Laughing Man
Chaos Drive System RTAB Edition w/ Cogwheel RTAB
Version: 1.0b

Introduction

This script will allow the player to use Chaos Drive when in the critical HP zone. Chaos Drive will transform the character into another and remove the entire party from battle. If a Chaos Drive dies, his original form will also die and the party will be brought back. Chaos Drives are always full with HP and SP when they enter the battle.

Read the author's notes!

Features

  • configure your database easily
  • contains universal font fix, never ever "I can't see the letters"
  • replaces entire party with one Chaos Drive
  • revert Chaos Drive anytime

Screenshots

N/A for this sort of script

Demo

Will be uploaded soon.

Script

Just make a new script above main and paste this code into it.
Code: [Select]
#==============================================================================
# Chaos Drive System by Blizzard
# Version: 1.0 - RTAB Edition
# Date: 10.10.2006
#
#
# Compatibility:
#
# 99% chance of full compatibility with SDK, not tested altough. WILL corrupt
# your old savegames. Can cause incompatibilty issues with following scripts
# and/or systems:
# - exotic CBS-es
# - Limit Break systems
# WILL cause incompatibility issues with:
# - Soul Rage System + Soul Limit System of any version
# This edition is supposed to work with side-view RTAB, but ti wasn't thoroughly tested.
#
# Complexity:
# - average
#
# Special knowledge REQUIRED:
# - reading long and boring instructions
# - using the "Call Script" event command
#
#
# Features:
#
# - configure your database easily
# - contains universal font fix, never ever "I can´t see the letters"
# - replaces entire party with one Chaos Drive
# - revert Chaos Drive anytime
#
#
# Instructions:
#
# - Explanation:
# This script will allow the player to use Chaos Drive when in the critical
# HP zone. Chaos Drive will transform the character into another and remove the
# entire party from battle. If a Chaos Drive dies, his original form will also
# die and the party will be brought back. Chaos Drives are always full with HP
# and SP when they enter the battle. This version of the Chaos Drive system is
# made for use with RTAB Battle Systems, although full compatibility is NOT
# guarantied.
#
# - Configuration:
# Press CRTL+SHIFT+F and type into the window: START Chaos Drive Database
# You can jump now to the database directly. There are more instructions.
# Also please configure the following macros found below:
#
# CHAOS_COLOR   - set the values in the () to numbers between 0-255, also note
#                 that they determine the color ammount in the color like this
#                 example: (RED, GREEN, BLUE, ALPHA) - note: alpha = opacity
# CD_PRECENTAGE - the max percentage of HP the character must have to unlock CD
# EXP_NORMALIZE - set to true if the EXP/LVL of your Chaos Drives should be set
#                 to the same as their caller
#
# To add a new Chaos Drive to a characer use the "Call Script" event command
# and use following syntax:
#
# $game_actors[X].learn_cd(CD_ID)
#
# To remove a Chaos Drive from a character use this syntax:
#
# $game_actors[X].forget_cd(CD_ID)
#
# X is the ID of the character in the database and CD_ID is the ID of the Chaos
# Drive skill in the database. Also create a status effect and name it "Chaos".
# Add whatever animation you want.
#
#
# - Additional info:
# You can use animations and common event calls (i.e. for enhanced animations)
# for any CD skill. It is recommened that CD skills target the user. If you
# want Chaos Drives to have the same ammount of experience as their callers
#
#
# Important note:
#
# Chaos Drives are not normal skills and should be NOT used as such. Chaos
# Drive skills as normal skills will not make a transformation happen.
#
#
# If you find any bugs, please report them here:
# http://www.chaosproject.co.nr/
# or send me an e-mail:
# boris_blizzard@yahoo.de
#
#==============================================================================

#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# START Chaos Drive Configuration
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

CHAOS_COLOR = Color.new(255, 75, 10, 255) # Color of the CD command (R, G, B, A)
CD_PERCENTAGE = 100 # how many maximum HP must a character have to unlock CD
EXP_NORMALIZE = true # EXP normalization
RATE = 67 # how much should the ATB be filled in % when CD is executed

#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# END Chaos Drive Configuration
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

#==============================================================================
# Game_System
#==============================================================================

class Game_System

  attr_accessor :chaos_party
  attr_accessor :chaos_caller
  
  alias init_cds_later initialize
  def initialize
    init_cds_later
    @chaos_party = nil
    @chaos_caller = nil
  end
  
end

#==============================================================================
# Game_Actor
#==============================================================================

class Game_Actor < Game_Battler

  attr_reader :cd_skills
  
  alias setup_cds_later setup  
  def setup(actor_id)
    setup_cds_later(actor_id)
    @cd_skills = []
  end
  
  def can_use_cd?
    return (not self.dead? and self.hp <= self.maxhp * CD_PERCENTAGE / 100)
  end
  
  def learn_cd(id)
    if id > 0 and not @cd_skills.include?(id)
      @cd_skills.push(id)
      @cd_skills.sort!
      return true
    end
    return false
  end
  
  def forget_cd(id)
    @cd_skills.delete(id)
    return
  end
  
  def use_chaos(id)
    chaos_id = database(id)
    return if chaos_id == 0
    $game_actors[chaos_id].exp = self.exp if EXP_NORMALIZE
    $game_actors[chaos_id].recover_all
    $game_system.chaos_party = $game_party.actors
    $game_party.actors = []
    $game_party.add_actor(chaos_id)
    $game_party.actors[0].add_state($cd_id)
    $game_party.actors[0].rt = 0
    $game_party.actors[0].rtp = 0
    $game_party.actors[0].at = 0
    $game_party.actors[0].atp = 0
  end
  
  def database(id)
    case id
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# START Chaos Drive Database
#
# Use following template to connect Chaos Drive skills and their Chaos Drives:
#
#    when X then return Y
#
# X is the skill ID and Y is the ID of the Chaos Drive character in your
# character database.
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  
    when 86 then return 10
    when 87 then return 11
    when 88 then return 13
    when 89 then return 12
    when 95 then return 15
    when 97 then return 20
      
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# END Chaos Drive Database
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    else
      return 0
    end
  end
  
end
 
#==============================================================================
# Game_Party
#==============================================================================

class Game_Party

  attr_accessor :actors
  
end

#==============================================================================
# Spriteset_Battle
#==============================================================================

class Spriteset_Battle

  def update_actors(flag = false)
    Graphics.freeze
    for sprite in @actor_sprites
      sprite.dispose
      sprite = nil
    end
    @actor_sprites = []
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    if flag
      Graphics.transition(0)
    else
      Graphics.transition(20)
    end
    update
  end
  
end

#==============================================================================
# Window_ChaosDrive
#==============================================================================

class Window_ChaosDrive < Window_Selectable
  
  def initialize(actor)
    super(0, 128, 640, 352)
    @actor = actor
    @column_max = 2
    refresh
    self.index = 0
    self.y = 64
    self.height = 256
    self.back_opacity = 160
  end
  
  def skill
    return @data[self.index]
  end
  
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    for i in 0...@actor.cd_skills.size
      skill = $data_skills[@actor.cd_skills[i]]
      @data.push(skill) if skill != nil
    end
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      self.contents.font.name = $fontface
      self.contents.font.size = $fontsize
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end
  
  def draw_item(index)
    skill = @data[index]
    self.contents.font.color = normal_color
    x = 4 + index % 2 * (288 + 32)
    y = index / 2 * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(skill.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
  end
  
  def update_help
    @help_window.set_text(self.skill == nil ? "" : self.skill.description)
  end
  
end

#==============================================================================
# Window_Command
#==============================================================================

class Window_Command < Window_Selectable
  
  attr_accessor :commands
  attr_accessor :actor
  
  alias initialize_cds_later initialize
  def initialize(width, commands)
    initialize_cds_later(width, commands)
    @CDcommand = "Chaos Drive"
  end
  
  def swap_commands
    temp = @commands[1]
    @commands[1] = @CDcommand
    @CDcommand = temp
    refresh
  end
  
  alias refresh_cds_later refresh
  def refresh
    if $fontface != nil
      self.contents.font.name = $fontface
    elsif $defaultfonttype != nil
      self.contents.font.name = $defaultfonttype
    end
    self.contents.font.size = 24
    if @commands[1] == "Chaos Drive"
      for j in 0...6
        self.contents.clear
        if @actor.can_use_cd?
          self.contents.font.color = CHAOS_COLOR
        else
          self.contents.font.color = disabled_color
        end
        rect = Rect.new(164 - j * 32, 32, self.contents.width - 8, 32)
        if @actor.state?($cd_id)
          self.contents.draw_text(rect, "Revert")
        else
          self.contents.draw_text(rect, @commands[1])
        end
        self.contents.font.color = normal_color
        for i in 0...@item_max
          draw_item(i, normal_color) unless @commands[i] == "Chaos Drive"
        end
        Graphics.update
      end
    else
      refresh_cds_later
      if $scene.is_a?(Scene_Battle)
        self.contents.font.size += 4
        self.contents.font.color = normal_color
        self.contents.draw_text(0, 31, width - 32, 32, "›› ", 2)
        self.contents.font.size -= 4
      end
    end
  end
  
end

#==============================================================================
# Scene_Battle
#==============================================================================

class Scene_Battle
  
  alias main_cds_later main
  def main
    main_cds_later
    @chaos_window.dispose if @chaos_window != nil
  end
    
  alias phase3_setup_command_window_cds_later phase3_setup_command_window
  def phase3_setup_command_window
    phase3_setup_command_window_cds_later
    @actor_command_window.actor = @active_actor
  end
  
  alias update_phase3_cds_later update_phase3
  def update_phase3
    if @chaos_window != nil and @chaos_window.visible
      @chaos_window.update
      update_phase3_chaos_select
      return
    end
    update_phase3_cds_later
  end
  
  alias update_phase3_enemy_select_cds_later update_phase3_enemy_select
  def update_phase3_enemy_select
    if Input.trigger?(Input::B)
      end_chaos_select_plus
    end
    update_phase3_enemy_select_cds_later
  end

  alias update_phase3_actor_select_cds_later update_phase3_actor_select
  def update_phase3_actor_select
    if Input.trigger?(Input::B)
      end_chaos_select_plus
    end
    update_phase3_actor_select_cds_later
  end

  alias phase3_next_actor_cds_later phase3_next_actor
  def phase3_next_actor
    end_chaos_select if @chaos_window != nil
    phase3_next_actor_cds_later
  end

  def update_phase3_chaos_select
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      end_chaos_select if @chaos_window.visible
      return
    end
    if Input.trigger?(Input::C)
      @skill = @chaos_window.skill
      if @skill == nil or not @active_actor.can_use_cd?
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      $game_system.se_play($data_system.decision_se)
      @active_actor.current_action.skill_id = @skill.id
      @chaos_window.visible = false
      if @skill.scope == 1
        start_enemy_select
      elsif @skill.scope == 3 or @skill.scope == 5
        start_actor_select
      else
        phase3_next_actor
      end
      return
    end
  end
  
  def start_chaos_select
    @chaos_window = Window_ChaosDrive.new(@active_actor)
    @chaos_window.help_window = @help_window
    @actor_command_window.active = false
    @actor_command_window.visible = false
  end
  
  def end_chaos_select
    end_chaos_select_plus
    @actor_command_window.swap_commands
    @chaos_window.dispose
    @chaos_window = nil
    @help_window.visible = false
  end
  
  def end_chaos_select_plus
    if @chaos_window != nil
      if @chaos_window.visible
        @actor_command_window.active = true
        @actor_command_window.visible = true
        @help_window.visible = false
      else
        @chaos_window.active = true
        @chaos_window.visible = true
      end
    end
  end
  
  alias update_phase4_step2_cds_later update_phase4_step2
  def update_phase4_step2(battler)
    update_phase4_step2_cds_later(battler)
    make_chaos_action_result(battler) if battler.current_action.kind == 8
  end
  
  def make_chaos_action_result(battler)
    @skill = $data_skills[battler.current_action.skill_id]
    @help_window.set_text(@skill.name, 1)
    @animation1_id = @skill.animation1_id
    @animation2_id = @skill.animation2_id
    @common_event_id = @skill.common_event_id
    set_target_battlers(@skill.scope, battler)
    for target in battler.target
      target.skill_effect(battler, @skill)
    end
    $game_system.chaos_caller = battler
    @status_window.refresh
  end
  
  alias update_phase3_basic_command_cds_later update_phase3_basic_command
  def update_phase3_basic_command
    if @actor_command_window.index == 1 and Input.press?(Input::RIGHT)
      if @actor_command_window.commands[1] != "Chaos Drive"
        $game_system.se_play($data_system.decision_se)
        @actor_command_window.swap_commands
      end
      if not Input.trigger?(Input::UP) and not Input.trigger?(Input::DOWN)
        @actor_command_window.update
      end
    else
      if @actor_command_window.commands[1] == "Chaos Drive"
        @actor_command_window.swap_commands
      end
    end
    if @actor_command_window.commands[1] == "Chaos Drive" and
        Input.trigger?(Input::C)
      unless @actor_command_window.actor.state?($cd_id)
        if @actor_command_window.actor.can_use_cd?
          $game_system.se_play($data_system.decision_se)
          @active_actor.current_action.kind = 8
          start_chaos_select
        else
          $game_system.se_play($data_system.buzzer_se)
        end
      else
        $game_system.se_play($data_system.decision_se)
        phase3_next_actor
        judge(true)
      end
      return
    end
    update_phase3_basic_command_cds_later
  end
   alias judge_cds_later judge
  def judge(flag = false)
    if $game_party.actors[0].state?($cd_id)
      if $game_party.actors[0].dead? or flag
        $game_system.chaos_caller.hp = 0 unless flag
        $game_party.actors[0].recover_all
        $game_party.actors = $game_system.chaos_party
        $game_system.chaos_caller = nil
        $game_system.chaos_party = nil
        @spriteset.update_actors(true)
        fix_for_stupid_rtab
        return false
      end
    end
    return judge_cds_later
  end
  
  def fix_for_stupid_rtab
    @status_window.dispose
    @status_window = Window_BattleStatus.new
    @command = []
    for enemy in $game_troop.enemies
      enemy.current_action.clear
    end
    phase3_next_actor
    @actor_command_window.active = false
    @actor_command_window.visible = false
  end
  
  alias update_phase4_step6_cds_later update_phase4_step6
  def update_phase4_step6(battler)
    update_phase4_step6_cds_later(battler)
    if $game_system.chaos_caller != nil and $game_system.chaos_party == nil
      $game_system.chaos_caller.use_chaos($game_system.chaos_caller.current_action.skill_id)
      @spriteset.update_actors
      fix_for_stupid_rtab
      @active_actor = $game_party.actors[0]
      @active_actor.at = @max * RATE / 100
    end
  end
  
  alias start_phase5_cds_later start_phase5
  def start_phase5
    if $game_party.actors[0].state?($cd_id)
      @spriteset.update_actors(true)
      $game_party.actors[0].recover_all
      $game_party.actors = $game_system.chaos_party
      $game_system.chaos_caller = nil
      $game_system.chaos_party = nil
      @status_window.refresh
      $game_player.refresh
    end
    start_phase5_cds_later
  end
  
  alias battle_end_cds_later battle_end
  def battle_end(result)
    if $game_party.actors[0].state?($cd_id)
      @spriteset.update_actors(true)
      $game_party.actors[0].recover_all
      $game_party.actors = $game_system.chaos_party
      $game_system.chaos_caller = nil
      $game_system.chaos_party = nil
      @status_window.refresh
      $game_player.refresh
    end
    $game_player.refresh
    battle_end_cds_later(result)
  end
  
end

#==============================================================================
# Scene_Title
#==============================================================================

class Scene_Title

  alias main_cds_later main
  def main
    main_cds_later
    return if $scene == nil
    for state in $data_states
      if state != nil and state.name == "Chaos"
        $cd_id = state.id
        break
      end
    end
  end

end

Instructions

Inside the script in the first comment.

Compatibility

99% chance of full compatibility with SDK, not tested altough. WILL corrupt your old savegames. Can cause incompatibilty issues with following scripts and/or systems:
  • exotic CBS-es
  • Limit Break systems
WILL cause incompatibility issues with:
  • Soul Rage System + Soul Limit System of any version

Credits and Thanks
  • made by Blizzard
  • derivate from "Soul Limit System" originally made by Blizzard
  • requested and original idea by GuardianAngelX72
  • original RTAB script by Cogwheel
  • RTAB modified by GuardianAngel72/GuardianAngelX72
Author's Notes

This script may not be posted, used or read by anybody who is mainly on hbgames.org, because not even one of the super-scripters there could do the favor to GuardianAngelX72 and make this script. I am serious about this.

Second Author's Notes

As you can see, I pretty much copied and pasted Blizard's original post and rewrote parts.  All credit for the scripts goes to their original authors, so credit them, only credit me if you really feel like it.  Also, this ChaosDrive system is highly limited, as Blizzard only created 1 version for this script variation.  Please do not ask me when the next edition will be released, because I honestly have know idea.  Also, the RTAB was too big to post on its own, so it's attached to the post. ^^

That's it! N-Joy! =D
« Last Edit: April 01, 2007, 02:36:45 AM by GuardianAngel72 »
Stand alone from mainstream society, be the different voice in a world where all speak the same.  Beat not to the rythm of the same drum, make your own rythm and follow it.  Individuality is the method by which we people live, the factor which keeps us from a hive mind, a singularity.  Instrumentality is not key, the key is accepting the difference of people and allowing their differences to flourish, not to suppress these differences and make everyone equal, for in pure equality, we lose what makes us who we are, our humanity.

*
Rep:
Level 97
2014 Most Unsung Member2014 Best RPG Maker User - Engine2013 Best RPG Maker User (Scripting)2012 Most Mature Member2012 Favorite Staff Member2012 Best RPG Maker User (Scripting)2012 Best MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best Use of Avatar and Signature Space2011 Best RPG Maker User (Scripting)2011 Most Mature Member2011 Favourite Staff Member2011 Best Veteran2010 Best RPG Maker User (Scripting)2010 Most Mature Member
Cool. Good job. Who did the edit for RTAB? you? Anyway, it's very nice.

pokeball GAXOfflineMale
**
Rep:
Level 88
The Laughing Man
Cool. Good job. Who did the edit for RTAB? you? Anyway, it's very nice.
Yeah, I had to do the edit to the RTAB or it wouldn't work correctly.

I'm gonna post a demo with a few addons such as a bars script, and a few others.

Still, gotta give Cogwheel credit for creating the script in the first place.
Stand alone from mainstream society, be the different voice in a world where all speak the same.  Beat not to the rythm of the same drum, make your own rythm and follow it.  Individuality is the method by which we people live, the factor which keeps us from a hive mind, a singularity.  Instrumentality is not key, the key is accepting the difference of people and allowing their differences to flourish, not to suppress these differences and make everyone equal, for in pure equality, we lose what makes us who we are, our humanity.

pokeball GAXOfflineMale
**
Rep:
Level 88
The Laughing Man
I'm looking for people interested in improving this script.  If you're interested, just say so, or PM me.
Stand alone from mainstream society, be the different voice in a world where all speak the same.  Beat not to the rythm of the same drum, make your own rythm and follow it.  Individuality is the method by which we people live, the factor which keeps us from a hive mind, a singularity.  Instrumentality is not key, the key is accepting the difference of people and allowing their differences to flourish, not to suppress these differences and make everyone equal, for in pure equality, we lose what makes us who we are, our humanity.