The RPG Maker Resource Kit

RMRK RPG Maker Creation => Requests => Script Request => Topic started by: zerothedarklord on August 07, 2012, 02:45:49 AM

Title: [VX] Question (and possible modification) of an existing script
Post by: zerothedarklord on August 07, 2012, 02:45:49 AM
#==============================================================================
# ** TDS Weapon Unleash
#    Ver: 1.0
#------------------------------------------------------------------------------
#  * Description:
#  A Script that replicates the "Weapon Unleash" system from the game series
#  "Golden sun".
#------------------------------------------------------------------------------
#  * Features:
#  Gives weapon a chance to "Unleash" a pre set skill during battle.
#------------------------------------------------------------------------------
#  * Instructions:
#  To use the unleash effect add the following to a weapon's note box.
#
#  UNLEASH: Skill_ID %_Chance
#
#  Skill_ID = The ID of the skill used for the weapon's unleash effect
#  %_Chance = Chance of the unleash effect activating from 0-100%
#
#  Example:
#
#  UNLEASH: 23 100
#------------------------------------------------------------------------------
#  * Notes:
#    None.
#------------------------------------------------------------------------------
#  * New Methods:
#  RPG::Weapon Module
#  - unleash_info
#    ^ Method used to read from the weapon's notebox and get unleash information.
#
#  Game_Battler:
#  - weapon_unleash?
#    ^ Method used to determine if unleash effect is possible and set unleash
#      skill as an action.
#
#  Scene_Battle:
#  - execute_weapon_unleash
#    ^ Method used to execute unleash process.
#------------------------------------------------------------------------------
#  * Aliased Methods:
#  Scene_Battle:
#  - execute_action
#    ^ Aliased to check for weapon unleash effect before original method runs.
#------------------------------------------------------------------------------
# WARNING:
#
# Do not release, distribute or change my work without my expressed written
# consent, doing so violates the terms of use of this work.
#
# If you really want to share my work please just post a link to the original
# site.
#
# * Not Knowing English or understanding these terms will not excuse you in any
#   way from the consequenses.
#==============================================================================

#==============================================================================
# ** Game_Battler
#------------------------------------------------------------------------------
#  This class deals with battlers. It's used as a superclass of the Game_Actor
# and Game_Enemy classes.
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # * Determine and set Weapon Unleash
  #--------------------------------------------------------------------------
  def weapon_unleash?
    # If self is not an actor ir action is not to attack
    return false if !actor? or !@action.attack?
    # Get Main Weapon
    weapon = weapons[0]
    # Return false if main weapon is nil
    return false if weapon == nil 
    # Get Unleash Information
    unleash_info = weapon.unleash_info
    # Return false if unleash info is nil
    return false if unleash_info == nil
    # If Unleash Rate is more than a random number from 0-100%
    if (rand(100) < unleash_info[1])
      # Set Weapon Unleash Skill
      @action.set_skill(unleash_info[0])
      # Return true
      return true 
    end
    # Return false by default
    return false
  end
end

#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
#  This class performs battle screen processing.
#==============================================================================

class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # * Alias Listings
  #-------------------------------------------------------------------------- 
  alias tds_weapon_unleash_scene_battle_execute_action execute_action unless $@
  #--------------------------------------------------------------------------
  # * Execute Battle Actions
  #--------------------------------------------------------------------------
  def execute_action
    # If Desperation Attack ready
    if desperation
      # Execute Desperation Attack
      execute_action_desperate_attack
      return
    # If Active Battler weapon unleash
    elsif @active_battler.weapon_unleash?
      # Execute Weapon Unleash
      execute_weapon_unleash
      return
    end   
    # Run Original Method
    tds_weapon_unleash_scene_battle_execute_action   
  end
  #--------------------------------------------------------------------------
  # * Execute Battle Action: Weapon Unleash
  #--------------------------------------------------------------------------
  def execute_weapon_unleash   
    # Get Skill
    skill = @active_battler.action.skill
    # Weapon Unleash Text
    text = sprintf("%s's %s let's out a howl! %s!", @active_battler.name,
    @active_battler.weapons[0].name, skill.name)
    # Add Instant Text
    @message_window.add_instant_text(text)
    # Wait 20 frames
    wait(20)
    # Make Action Targets
    targets = @active_battler.action.make_targets
    # Display Animation
    display_animation(targets, skill.animation_id)
    # Run skill common event if it exist
    $game_temp.common_event_id = skill.common_event_id
    # Go Through Targets
    for target in targets
      # Execute Skill Effect
      target.skill_effect(@active_battler, skill)
      # Display Action Effects
      display_action_effects(target, skill)
    end
  end
end

#==============================================================================
# ** RPG Module
#------------------------------------------------------------------------------
# Module for handling information.
#==============================================================================

module RPG
  #============================================================================
  # ** RPG::Weapon
  #----------------------------------------------------------------------------
  # This module handles Weapon Information
  #============================================================================
  class Weapon < BaseItem
    #-------------------------------------------------------------------------
    # * Get Weapon Unleash Information
    #-------------------------------------------------------------------------
    def unleash_info
      # Check notes for Unleash Skill ID and Chance
      self.note[/UNLEASH: ([-0-9]+) ([-0-9]+)/]     
      # Retunr nil first match is nil
      return nil if $1 == nil
      # Return Array containing unleash values
      return [$1.to_i, $2.to_i]
    end
  end
end


I have a question about how this will function in the event of a character who duel-wields weapons. Is one of the two weapon slots on a duel-wielding character considered the "main hand"? In other words, must a weapon be placed in one of the 2 slots, specifically, in order for it to be able to unleash? Or does having 2 weapons equipped mean there's a chance for both to unleash? Or one or the other?
Title: Re: [VX] Question (and possible modification) of an existing script
Post by: D&P3 on August 07, 2012, 07:40:34 AM
Quote
# Get Main Weapon
    weapon = weapons[0]

text = sprintf("%s's %s let's out a howl! %s!", @active_battler.name,
    @active_battler.weapons[0].name, skill.name)

Seems to me that it only looks at your main weapon, not your secondary.
Title: Re: [VX] Question (and possible modification) of an existing script
Post by: zerothedarklord on August 07, 2012, 01:18:58 PM
Okay, thanks, so main weapon (since it displays your equipment vertically) would be the top slot, right?
Title: Re: [VX] Question (and possible modification) of an existing script
Post by: D&P3 on August 07, 2012, 01:28:54 PM
Correct :)