Battle Item Count VX + ACE - kyonides - 10-17-2024
Battle Item Count VX + ACE
by Kyonides
Introduction
Do you need to update the number of potions or elixirs currently available for the next couple of actors during battle?
Or were you in need of canceling your previous actor's action to change the item the actor is going to consume next?
Then this scriptlet is for you!
VX Script
Code: # * Battle Item Count VX * #
# Plug & Play Script
# Scripter : Kyonides Arkanthes
# v1.0.4 - 2024-02-03
# The scriptlet updates the number of available items every single time you pick
# one or go back to the prior actor in battle.
class Game_Actor
def clear_battle_item
@battle_item_id = nil
end
attr_accessor :battle_item_id
end
class Game_Party
def clear_battle_items
members.each {|m| m.clear_battle_item }
end
def members_battle_items
members.map {|m| m.battle_item_id }
end
def battle_item_number(item)
return item_number(item) unless $game_temp.in_battle
item_id = item.id
battle_items = members_battle_items.select {|bit_id| item_id == bit_id }
item_number(item) - battle_items.size
end
end
class Window_Item
alias :kyon_btl_itm_cnt_win_ref :refresh
def refresh
@battle_items = {}
@battle_items.default = 99
kyon_btl_itm_cnt_win_ref
end
def enable?(item)
$game_party.item_can_use?(item) and @battle_items[item.id] > 0
end
def draw_item(index)
rect = item_rect(index)
self.contents.clear_rect(rect)
item = @data[index]
return unless item
number = $game_party.battle_item_number(item)
@battle_items[item.id] = number
enabled = enable?(item)
rect.width -= 4
draw_item_name(item, rect.x, rect.y, enabled)
self.contents.draw_text(rect, sprintf(":%2d", number), 2)
end
def battle_item_none?
@battle_items[@data[@index].id] == 0
end
end
class Scene_Battle
alias :kyon_btl_itm_cnt_scn_btl_term :terminate
alias :kyon_btl_itm_cnt_scn_btl_st_pty_cmd_sel :start_party_command_selection
alias :kyon_btl_itm_cnt_scn_btl_prr_act :prior_actor
alias :kyon_btl_itm_cnt_scn_btl_end_trgt_act_sel :end_target_actor_selection
def terminate
kyon_btl_itm_cnt_scn_btl_term
$game_party.clear_battle_items
end
def start_party_command_selection
$game_party.clear_battle_items
kyon_btl_itm_cnt_scn_btl_st_pty_cmd_sel
end
def turn_decrease_item_count
@active_battler.clear_battle_item if @active_battler
end
def prior_actor
turn_decrease_item_count
kyon_btl_itm_cnt_scn_btl_prr_act
turn_decrease_item_count
end
def update_target_actor_selection
@target_actor_window.update
if Input.trigger?(Input::B)
Sound.play_cancel
end_target_actor_selection
elsif Input.trigger?(Input::C)
Sound.play_decision
@active_battler.action.target_index = @target_actor_window.index
@active_battler.battle_item_id = @item.id if @item
@item = nil
end_target_actor_selection
end_skill_selection
end_item_selection
next_actor
end
end
def update_item_selection
@item_window.active = true
@item_window.update
@help_window.update
if Input.trigger?(Input::B)
Sound.play_cancel
end_item_selection
elsif Input.trigger?(Input::C)
@item = @item_window.item
$game_party.last_item_id = @item.id if @item
return Sound.play_buzzer unless $game_party.item_can_use?(@item)
return Sound.play_buzzer if @item_window.battle_item_none?
Sound.play_decision
determine_item
end
end
end
VX ACE Script
Code: # * Battle Item Count ACE * #
# Plug & Play Script
# Scripter : Kyonides Arkanthes
# v1.0.4 - 2024-02-03
# The scriptlet updates the number of available items every single time you pick
# one or go back to the prior actor in battle.
class Game_Actor
def clear_battle_item
@battle_item_id = nil
end
attr_accessor :battle_item_id
end
class Game_Party
def clear_battle_items
members.each {|m| m.clear_battle_item }
end
def members_battle_items
members.map {|m| m.battle_item_id }
end
def battle_item_number(item)
return item_number(item) unless @in_battle
item_id = item.id
battle_items = members_battle_items.select {|bit_id| item_id == bit_id }
item_number(item) - battle_items.size
end
end
class Window_ItemList
alias :kyon_btl_itm_cnt_mk_itm_lst :make_item_list
def enable?(item)
$game_party.usable?(item) and @battle_items[item.id] > 0
end
def make_item_list
@battle_items = {}
@battle_items.default = 99
kyon_btl_itm_cnt_mk_itm_lst
end
def draw_item_number(rect, item)
number = $game_party.battle_item_number(item)
@battle_items[item.id] = number
contents.font.color.alpha = number > 0 ? 255 : translucent_alpha
number = sprintf(":%2d", number)
draw_text(rect, number, 2)
end
end
class Scene_Battle
alias :kyon_btl_itm_cnt_scn_btl_term :terminate
alias :kyon_btl_itm_cnt_scn_btl_st_pty_cmd_sel :start_party_command_selection
alias :kyon_btl_itm_cnt_scn_btl_st_act_cmd_sel :start_actor_command_selection
alias :kyon_btl_itm_cnt_scn_btl_on_itm_ok :on_item_ok
alias :kyon_btl_itm_cnt_scn_btl_on_itm_cncl :on_item_cancel
def terminate
kyon_btl_itm_cnt_scn_btl_term
$game_party.clear_battle_items
end
def start_party_command_selection
kyon_btl_itm_cnt_scn_btl_st_pty_cmd_sel
$game_party.clear_battle_items
end
def start_actor_command_selection
kyon_btl_itm_cnt_scn_btl_st_act_cmd_sel
BattleManager.actor.clear_battle_item
end
def on_item_ok
BattleManager.actor.battle_item_id = @item_window.item.id
kyon_btl_itm_cnt_scn_btl_on_itm_ok
end
def on_item_cancel
BattleManager.actor.clear_battle_item
kyon_btl_itm_cnt_scn_btl_on_itm_cncl
end
end
Terms & Conditions
Free for use in ANY game.
Due credit is mandatory.
That's it!
RE: Battle Item Count VX + ACE - kyonides - 10-17-2024
Here Are Some Goodies for VX Users!
This script is incompatible with the Targetting Extended for Tankentai Non-ATB v1.1 by Crimsonseas. So you'd need to use this modified version of Crimsonseas' script and my custom patch to make it work as intended.
Modified Version of Targetting Extended
Code: =begin
################################################################################
Targetting Extended for Tankentai Non-ATB v1.1
by CrimsonSeas
################################################################################
Use with the base script to enable the targetting extended.
This script adds to the rewrites list of the base script
Rewrites:
+Scene_Battle
-start_target_selection
-select_member
################################################################################
=end
class Scene_Battle
def start_target_selection(actor = false)
members = actor ? $game_party.members : $game_troop.members
action = @active_battler.action
if action.kind == 1
obj = action.skill
elsif action.kind == 2
obj = action.item
end
case obj
when nil
@target_any = TargetExt::ATTACK_ANY
when RPG::Skill
@target_any = !TargetExt::NO_TARGET_ANY_S.include?(action.skill.id)
when RPG::Item
@target_any = !TargetExt::NO_TARGET_ANY_I.include?(action.item.id)
end
if obj != nil && obj.extension.include?("TARGETALL")
members = $game_party.members + $game_troop.members
end
# �‚��ƒ��‚��ƒ��‚��ƒ—�ƒ��‚��ƒˆの�œ�ˆ�
@all = false
if obj != nil
scope_all = [2, 4, 5, 6, 8, 10].include?(obj.scope)
@all = (scope_all || obj.extension.include?("TARGETALL"))
end
@cursor = Sprite.new
@cursor.bitmap = Cache.character("cursor")
@cursor.src_rect.set(0, 0, 32, 32)
@cursor_flame = 0
@cursor.x = -200
@cursor.y = -200
@cursor.ox = @cursor.width
@cursor.oy = @cursor.height
@cursor.visible = !@all
# �‚��ƒ��‚��ƒƒ�ƒˆ名�‚’表示�™�‚‹�ƒ˜�ƒ��ƒ—�‚��‚��ƒ��ƒ‰�‚��‚’�œ�ˆ�
@help_window.visible = false if @help_window != nil
@help_window2 = Window_Help.new if @help_window2 == nil
# 不要な�‚��‚��ƒ��ƒ‰�‚��‚’�ˆ�™
@actor_command_window.active = false
@skill_window.visible = false if @skill_window != nil
@item_window.visible = false if @item_window != nil
# �˜�œ��—て�„�‚‹�‚��ƒ��‚��ƒƒ�ƒˆで�œ€�‚‚�•�号の�Ž�„対象�‚’�œ€�ˆ�に�Œ‡�™�‚ˆ�†に
@index = 0
@max_index = members.size - 1
# �‚��‚��‚��ƒ�は�ˆ��—˜不�ƒ��€…で�‚‚�‚��ƒ��‚��ƒƒ�ƒˆでき�‚‹�‚ˆ�†に�‚��ƒ��ƒŸ�ƒ�と�Œ��ˆ�
unless actor
members.size.times do
break if members[@index].exist?
@index += 1
end
end
@help_window2.set_text(members[@index].name, 1)
if @all
string, strings = TargetExt::TARGET_ALL_VOC
string2 = actor ? strings[0] : strings[1]
string += " " + string2 unless obj.extension.include?("TARGETALL")
@help_window2.set_text(string, 1)
make_cursor_all(members)
cursor_all_visible(true)
@cursor.visible = false
else
# Call New Method: Reset Single Cursor
reset_single_cursor(actor)
end
select_member(members, actor)
end
#--------------------------------------------------------------------------
# �—� �‚��ƒ��‚��ƒƒ�ƒˆ選�Šž
#--------------------------------------------------------------------------
def select_member(targets, actor = true)
members = targets
action = @active_battler.action
if action.kind == 1
obj = action.skill
elsif action.kind == 2
obj = action.item
end
#rect = @cursor.src_rect
#rect.set(0, 0, 32, 32)
loop do
update_basic
@cursor_flame = 0 if @cursor_flame == 30
#rect.y = 0 if @cursor_flame == 29
#rect.y = 32 if @cursor_flame == 15
point_x, point_y = @spriteset.set_cursor(actor, @index)
@cursor.x = point_x
@cursor.y = point_y
@cursor_flame += 1
if Input.trigger?(Input::B)
select_member_cancel
break
elsif Input.trigger?(Input::C)
select_member_ok
break
end
if Input.repeat?(Input::LEFT) && !(@all || @active_battler.target_all)
if actor
$back_attack ? cursor_down(members, actor) : cursor_up(members, actor)
else
$back_attack ? cursor_up(members, actor) : cursor_down(members, actor)
end
end
if Input.repeat?(Input::RIGHT) && !(@all || @active_battler.target_all)
if actor
$back_attack ? cursor_up(members, actor) : cursor_down(members, actor)
else
$back_attack ? cursor_down(members, actor) : cursor_up(members, actor)
end
end
#if (Input.trigger?(Input::L) || Input.trigger?(Input::R)) && @target_any
if (Input.trigger?(Input::L) || Input.trigger?(Input::R)) #&& nil
if members == $game_party.members
members = $game_troop.members
actor = false
elsif members == $game_troop.members
members = $game_party.members
actor = true
end
if @active_battler.inverse_target
@active_battler.inverse_target = false
else
@active_battler.inverse_target = true
end
@index = 0 if @index >= members.size
@max_index = members.size - 1
# �‚��‚��‚��ƒ�は�ˆ��—˜不�ƒ��€…で�‚‚�‚��ƒ��‚��ƒƒ�ƒˆでき�‚‹�‚ˆ�†に�‚��ƒ��ƒŸ�ƒ�と�Œ��ˆ�
unless actor
members.size.times do
break if members[@index].exist?
@index += 1
end
end
if @cursor != nil
# Modified Process: Make Sure Any Kind of Cursor is Visible
many_targets = (@active_battler.target_all || @all)
if many_targets
dispose_cursor_all
make_cursor_all(members)
cursor_all_visible(false)
@cursor.visible = false
else
@cursor.visible = true
end
end
if @active_battler.target_all || @all
string1 = TargetExt::TARGET_ALL_VOC[0]
string2 = actor ? TargetExt::TARGET_ALL_VOC[1][0] : TargetExt::TARGET_ALL_VOC[1][1]
string1 += " " + string2 unless obj.extension.include?("TARGETALL")
if TargetExt::SHOW_MP_ALTER && @active_battler.target_all && obj.is_a?(RPG::Skill)
cost = @active_battler.calc_mp_cost(obj)
string1 += ": " + cost.to_s + Vocab::mp
end
@help_window2.set_text(string1, 1)
end
@help_window2.set_text(members[@index].name, 1) if !@active_battler.target_all && !@all
Sound.play_cursor
end
if Input.trigger?(Input::A) && !@all && obj != nil
if obj.all_available
Sound.play_cursor
if @active_battler.target_all
@active_battler.target_all = false
@cursor.visible = true
cursor_all_visible(false) if @cursor2 != nil
@help_window2.set_text(members[@index].name, 1)
else
@active_battler.target_all = true
@cursor.visible = false
make_cursor_all(members) if @cursor2 == nil
cursor_all_visible(true)
string1 = TargetExt::TARGET_ALL_VOC[0]
string2 = actor ? TargetExt::TARGET_ALL_VOC[1][0] : TargetExt::TARGET_ALL_VOC[1][1]
string1 += " " + string2 unless obj.extension.include?("TARGETALL")
if TargetExt::SHOW_MP_ALTER && @active_battler.target_all && obj.is_a?(RPG::Skill)
cost = @active_battler.calc_mp_cost(obj)
string1 += ": " + cost.to_s + Vocab::mp
end
@help_window2.set_text(string1 , 1)
end
end
end
many_targets = (@active_battler.target_all || @all)
cursor_up(members, actor) if Input.repeat?(Input::UP) && !many_targets
cursor_down(members, actor) if Input.repeat?(Input::DOWN) && !many_targets
end
end
def select_member_cancel
Sound.play_cancel
@active_battler.target_all = false
end_target_selection
end
def select_member_ok
Sound.play_decision
@active_battler.action.target_index = @index
end_target_selection
end_skill_selection
end_item_selection
next_actor
end
def make_cursor_all(members)
@cursor2 = []
for i in 0...members.size
next if members == $game_troop.members && !members[i].exist?
@cursor2[i] = Sprite.new
@cursor2[i].bitmap = Cache.character("cursor")
@cursor2[i].src_rect.set(0, 0, 32, 32)
@cursor2[i].x = members[i].position_x - 48
@cursor2[i].y = members[i].position_y - 48
end
@cursor2.compact!
end
end
The Patch
Code: # * Battle Item Count VX - Takentai Patch * #
# Scripter : Kyonides Arkanthes
# 2024-10-17
class Scene_Battle
alias :kyon_btl_itm_cnt_scn_btl_sel_mem_ok :select_member_ok
def select_member_ok
action = @active_battler.action
item_id = action.kind == 2 ? action.item.id : nil
@active_battler.battle_item_id = item_id if item_id
kyon_btl_itm_cnt_scn_btl_sel_mem_ok
end
def reset_single_cursor(is_actor)
point_x, point_y = @spriteset.set_cursor(is_actor, @index)
@cursor.x = point_x
@cursor.y = point_y
end
end
|