RMRK is retiring.
Registration is disabled. The site will remain online, but eventually become a read-only archive. More information.

RMRK.net has nothing to do with Blockchains, Cryptocurrency or NFTs. We have been around since the early 2000s, but there is a new group using the RMRK name that deals with those things. We have nothing to do with them.
NFTs are a scam, and if somebody is trying to persuade you to buy or invest in crypto/blockchain/NFT content, please turn them down and save your money. See this video for more information.
[Request] Chaos Drive Bar

0 Members and 1 Guest are viewing this topic.

**
Rep:
Level 88
That's me in my bee outfit, do I look handsome?
I want to change this script bein able to use the chaos drive only until the Chaos Drive fills.

Code: [Select]
#==============================================================================
# Chaos Drive System + Soul Limit System by Blizzard
# Version: 1.0
# 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
#
# 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.
#
# - 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(240, 0, 0, 255) # Color of the CD command (R, G, B, A)
CD_PERCENTAGE = 10 # how many maximum HP must a character have to unlock CD
EXP_NORMALIZE = false # EXP normalization

#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# 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)
 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 4 then return 3
   when 5 then return 6
     
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# 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
   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_battler
 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_battler.can_use_cd?
       $game_system.se_play($data_system.buzzer_se)
       return
     end
     $game_system.se_play($data_system.decision_se)
     @active_battler.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_battler)
   @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
   update_phase4_step2_cds_later
   make_chaos_action_result if @active_battler.current_action.kind == 8
 end
 
 def make_chaos_action_result
   @skill = $data_skills[@active_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)
   for target in @target_battlers
     target.skill_effect(@active_battler, @skill)
   end
   $game_system.chaos_caller = @active_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_battler.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
       @spriteset.update_actors(true)
       $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
       @status_window.refresh
       return false
     end
   end
   return judge_cds_later
 end
 
 alias update_phase4_step4_cds_later update_phase4_step4
 def update_phase4_step4
   if $game_system.chaos_caller != nil and $game_system.chaos_party == nil
     for target in @target_battlers
       target.damage = "Chaos Drive!"
     end
   end
   update_phase4_step4_cds_later
 end
 
 alias update_phase4_step6_cds_later update_phase4_step6
 def update_phase4_step6
   update_phase4_step6_cds_later
   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
     @status_window.refresh
   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