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.

SDK compatibility help needed coff*Seph*coff+[compatibility request]

Ok here I go, im using SDK v 2.2 from ur test bed 4, party switcher, state pops and enhaced battlestatus... all from Sephspawn v4 beta, they all work great with my scripts, i desperately want to use an active time battle system and i only found Active timer cbs 2.01 for SDK v 2.1, i just want to have the active timer cbs for SDK 2.2 , i saw there are no plans to include that into Seph test bed.

and im using a blizzard script which is vital to my game "Chaos Drive", its compatible with everything except for the "active timer cbs".

so basically i just need to upgrade active timer cbs to sdk 2.2 and fiz a compatibility problem with chaos drive

i would be very thankful if i can get ur help

ill attach a mini demo designed to test chaos drive with all my scripts making it easier to help me out

thats the code of chaos drive:

Code:
#==============================================================================
# Chaos Drive System by Blizzard
# Version: 1.31b
# Date: 10.10.2006
# Date v1.3b: 3.11.2006
# Date v1.31b: 23.2.2007
# 
# 
# 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 to high
# 
# 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
# 
# v1.3b:
# 
# - choose either to remove the entire party or only the actor using the CD
# - completely new system of functioning
# - better coding
# 
# v1.31b:
# 
# - slight improvement of the code
# 
# 
# 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
# REMOVE_PARTY  - set to true if you want the party to disappear when a CD is
#                 called, set to false if you only want replace the caller
# MAX_PARTY     - set to the value of the maximum size of your party
# 
# 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.
# Also, don't forget to create a status effect and call it "Chaos" or
# "Chaos Drive".
# 
# 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. Do not
# assign two different characters the same Chaos Drive character. If you want
# them to access the same character, make a duplicate CD character in your
# database.
# 
# 
# 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(128, 0, 255, 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 = false # EXP normalization
REMOVE_PARTY = false # remove entire party
MAX_PARTY = 4 # how many character are in your party

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

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

class Game_System

  attr_accessor :chaos_party
  
  alias init_cds_later initialize
  def initialize
    init_cds_later
    @chaos_party = []
    MAX_PARTY.times {@chaos_party.push(0)} unless REMOVE_PARTY
  end
  
  def find_chaos(id)
    for i in 1...$data_actors.size
      if $game_actors[i] != nil
        return $game_actors[i] if $game_actors[i].chaos_id == id
      end
    end
  end
  
end

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

class Game_Actor < Game_Battler

  attr_accessor :chaos_id
  attr_accessor :chaos_action
  attr_reader   :cd_skills
  
  alias setup_cds_later setup   
  def setup(actor_id)
    setup_cds_later(actor_id)
    @cd_skills = []
    @chaos_id = 0
    @chaos_action = 0
  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)
    @chaos_action = -1
    return if @chaos_id == 0
    $game_actors[@chaos_id].exp = self.exp if EXP_NORMALIZE
    $game_actors[@chaos_id].recover_all
    if REMOVE_PARTY
      $game_system.chaos_party = $game_party.actors
      $game_party.actors = []
      $game_party.add_actor(@chaos_id)
      $game_party.actors[0].add_state($cd_id)
    else
      $game_system.chaos_party[self.index] = @id
      $game_party.actors[self.index] = $game_actors[@chaos_id]
      $game_actors[@chaos_id].add_state($cd_id)
    end
  end
  
  def revert_chaos
    @chaos_action = -1
    if REMOVE_PARTY
      $game_party.actors = $game_system.chaos_party
      $game_system.chaos_party = []
      $game_system.find_chaos(id).hp = 0 if self.dead?
    else
      $game_system.chaos_party[self.index] = 0
      origin_actor = $game_system.find_chaos(id)
      $game_party.actors[self.index] = origin_actor
      origin_actor.hp = 0 if self.dead?
    end
  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 331 then return 11
    when 5 then return 6
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# END Chaos Drive Database
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    end
    return 0
  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.states.include?($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]
    unless @skill == nil
      @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
      @active_battler.chaos_action = 1
    end
  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.states.include?($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)
        @active_battler.current_action.kind = 8
        @active_battler.chaos_action = 2
        phase3_next_actor
      end
      return
    end
    update_phase3_basic_command_cds_later
  end

  alias update_phase4_step4_cds_later update_phase4_step4
  def update_phase4_step4
    for target in @target_battlers
      if target.is_a?(Game_Actor)
        target.damage = "Chaos Drive!" if target.chaos_action == 1
      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
    for actor in $game_party.actors
      if actor.chaos_action == 1
        actor.use_chaos(actor.current_action.skill_id)
        @status_window.refresh
        @spriteset.update_actors
      elsif actor.chaos_action == 2
        actor.revert_chaos
        @status_window.refresh
        @spriteset.update_actors
      end
    end
  end

  alias judge_cds_later judge
  def judge
    for actor in $game_party.actors
      if actor.states.include?($cd_id) and actor.dead?
        actor.revert_chaos
        actor.recover_all
        @spriteset.update_actors(true)
        @status_window.refresh
        return false
      end
    end
    return judge_cds_later
  end
  
  alias start_phase5_cds_later start_phase5
  def start_phase5
    for actor in $game_party.actors
      if actor.states.include?($cd_id)
        actor.revert_chaos
        @status_window.refresh
      end
    end
    @spriteset.update_actors
    start_phase5_cds_later
  end
  
  alias battle_end_cds_later battle_end
  def battle_end(result)
    for actor in $game_party.actors
      if actor.states.include?($cd_id)
        actor.revert_chaos
        @status_window.refresh
      end
    end
    @spriteset.update_actors(true)
    $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" or state.name == "Chaos Drive")
        $cd_id = state.id
        break
      end
    end
  end
  
end
 
Yeah i think thats the problem, i would like some1 to make trickster's timer battle and chaos drive to work together. i hope its possible :|

Trickster's active timer cbs is awesome and gives a lot of Fun to the game, i think it may be vital to my game
 

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