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.
You are using an out of date browser. It may not display this or other websites correctly. You should upgrade or use an alternative browser.
HBGames
Skills that Consume Items Ver 1.00a* Original version found at http://members.jcom.home.ne.jp/cogwheel/
NOT by DerVVulfman v 1.00a due to my correction for 'inconsumable' items.
Introduction
Originally posted in japanese, this is a translation of a script addition that allows you (the creator) to design spells that use (or consume) items as well as SP.
Features
Can specify 1 or more different items needed per spell
Can set it so multple quantities (potion x6) needed
Skills show as disabled if not enough items available for use
FIXED: so items that are NOT consumable (talismans) not consumed
Screenshots
None. Just looks like a regular Skill selection screen.
Script
In truth, the name was... paraphrased from the original Japanese version. Syntax differences and so on. So, I went with the closest definition.
Code:
# Skills That Consume Items Ver 1.00
# Distribution original support URL
# http://members.jcom.home.ne.jp/cogwheel/
#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
# This class handles the actor. It's used within the Game_Actors class
# ($game_actors) and refers to the Game_Party class ($game_party).
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# * Setting of medium
#--------------------------------------------------------------------------
def medium(skill_id)
case $data_skills[skill_id].name
when "Heal"
return [["Potion"], ["High Perfume", 2]]
end
return false
end
#--------------------------------------------------------------------------
# * Get Item Name
#--------------------------------------------------------------------------
def item_name(name)
for item in $data_items
if item != nil and name == item.name
return item.id
end
end
end
#--------------------------------------------------------------------------
# * Determine if Skill can be Used
# skill_id : skill ID
#--------------------------------------------------------------------------
def skill_can_use?(skill_id)
items = medium(skill_id)
if items
for item in items
id = item_name(item[0])
if $game_party.item_number(id) < (item[1] == nil ? 1 : item[1])
return false
end
end
end
return super
end
end
#==============================================================================
# ** Scene_Battle (part 4)
#------------------------------------------------------------------------------
# This class performs battle screen processing.
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# * Make Skill Action Results
#--------------------------------------------------------------------------
def make_skill_action_result(battler)
# Get skill
@skill = $data_skills[battler.current_action.skill_id]
# Verification whether or not it is cooperation skill
speller = synthe?(battler)
# If not a forcing action
unless battler.current_action.forcing
# When with SP and so on is cut off and it becomes not be able to use
if speller == nil
unless battler.skill_can_use?(@skill.id)
# Shift to step 6
battler.phase = 6
return
end
end
end
# SP consumption
temp = false
if speller != nil
for spell in speller
if spell.current_action.spell_id == 0
spell.sp -= @skill.sp_cost
else
spell.sp -= $data_skills[spell.current_action.spell_id].sp_cost
end
# Refreshing the status window
status_refresh(spell)
end
else
battler.sp -= @skill.sp_cost
# Refreshing the status window
status_refresh(battler)
end
# Setting animation ID
battler.anime1 = @skill.animation1_id
battler.anime2 = @skill.animation2_id
# Setting common event ID
battler.event = @skill.common_event_id
# Setting the object side battler
set_target_battlers(@skill.scope, battler)
# Applying the effect of skill
for target in battler.target
if speller != nil
damage = 0
effective = false
state_p = []
state_m = []
for spell in speller
if spell.current_action.spell_id != 0
@skill = $data_skills[spell.current_action.spell_id]
end
effective |= target.skill_effect(spell, @skill)
if target.damage[spell].class != String
damage += target.damage[spell]
elsif effective == true
effect = target.damage[spell]
end
state_p += target.state_p[spell]
state_m += target.state_m[spell]
target.damage.delete(spell)
target.state_p.delete(spell)
target.state_m.delete(spell)
end
if damage != 0
target.damage[battler] = damage
elsif effective = true
target.damage[battler] = effect
end
target.state_p[battler] = state_p
target.state_m[battler] = state_m
else
target.skill_effect(battler, @skill)
end
end
# If item(s) are used
if battler.is_a?(Game_Actor)
items = battler.medium(@skill.id)
if items
for item in items
id = battler.item_name(item[0])
num = item[1] == nil ? 1 : item[1]
# Check if consumable
if $data_items[id].consumable
$game_party.gain_item(id, -num)
end
end
end
end
end
end
#==============================================================================
# ** Scene_Skill
#------------------------------------------------------------------------------
# This class performs skill screen processing.
#==============================================================================
class Scene_Skill
#--------------------------------------------------------------------------
# * Frame Update (when target window is active)
#--------------------------------------------------------------------------
def update_target
# If B button was pressed
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
# Erase target window
@skill_window.active = true
@target_window.visible = false
@target_window.active = false
return
end
# If C button was pressed
if Input.trigger?(Input::C)
# If unable to use because SP ran out
unless @actor.skill_can_use?(@skill.id)
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# If target is all
if @target_window.index == -1
# Apply skill use effects to entire party
used = false
for i in $game_party.actors
used |= i.skill_effect(@actor, @skill)
end
end
# If target is user
if @target_window.index <= -2
# Apply skill use effects to target actor
target = $game_party.actors[@target_window.index + 10]
used = target.skill_effect(@actor, @skill)
end
# If single target
if @target_window.index >= 0
# Apply skill use effects to target actor
target = $game_party.actors[@target_window.index]
used = target.skill_effect(@actor, @skill)
end
# If skill was used
if used
# If item(s) are used
if @actor.is_a?(Game_Actor)
items = @actor.medium(@skill.id)
if items
for item in items
id = @actor.item_name(item[0])
num = item[1] == nil ? 1 : item[1]
# Check if consumable
if $data_items[id].consumable
$game_party.gain_item(id, -num)
end
end
end
end
# Play skill use SE
$game_system.se_play(@skill.menu_se)
# Use up SP
@actor.sp -= @skill.sp_cost
# Remake each window content
@status_window.refresh
@skill_window.refresh
@target_window.refresh
# If entire party is dead
if $game_party.all_dead?
# Switch to game over screen
$scene = Scene_Gameover.new
return
end
# If command event ID is valid
if @skill.common_event_id > 0
# Command event call reservation
$game_temp.common_event_id = @skill.common_event_id
# Switch to map screen
$scene = Scene_Map.new
return
end
end
# If skill wasn't used
unless used
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
end
return
end
end
end
Instructions
Just copy/paste this code right under the HP/SP/EXP Gauge Script v1.00 (yep, I translated it) which is the last script in Minkoff's adaption of Cogwheel's RTAB system.
This system allows you to use skills that rely on consuming items. If for example, you use a skill that relies on potions and perfumes, the specified items (and quantities) are used and reduced in your inventory.
As this system allows certain skills to RELY on items, these skills will be disabled if you do not have enough of the required items it needs.
In the below example, we have it coded so in order to use the "Heal" skill,
you will need to use a single "Potion" and 2 "High Perfume" items.
Code:
when "Heal"
return [["Potion"], ["High Perfume", 2]]
But, in the next example, you'll see the code to use a "Fire" skill merely using
a single "Molotov Cocktail" item (no... it's NOT part of the default items in RMXP).
Code:
when "Fire"
return [["Molotov cocktail"]]
Compatibility
This script IS pretty basic and has been in use quite a while... and still works with the newest versions of RTAB... even v 1.14.
Credits and Thanks
Thanks to Cogwheel for making such a wonderful system, that has many adaptable features.