206 lines
6.3 KiB
Ruby
206 lines
6.3 KiB
Ruby
|
#==============================================================================
|
||
|
# ** Scene_Item
|
||
|
#------------------------------------------------------------------------------
|
||
|
# This class performs item screen processing.
|
||
|
#==============================================================================
|
||
|
|
||
|
class Scene_Item
|
||
|
#--------------------------------------------------------------------------
|
||
|
# * Main Processing
|
||
|
#--------------------------------------------------------------------------
|
||
|
def main
|
||
|
# Make help window, item window
|
||
|
@help_window = Window_Help.new
|
||
|
@item_window = Window_Item.new
|
||
|
# Associate help window
|
||
|
@item_window.help_window = @help_window
|
||
|
# Make target window (set to invisible / inactive)
|
||
|
@target_window = Window_Target.new
|
||
|
@target_window.visible = false
|
||
|
@target_window.active = false
|
||
|
# Execute transition
|
||
|
Graphics.transition
|
||
|
# Main loop
|
||
|
loop do
|
||
|
# Update game screen
|
||
|
Graphics.update
|
||
|
# Update input information
|
||
|
Input.update
|
||
|
# Frame update
|
||
|
update
|
||
|
# Abort loop if screen is changed
|
||
|
if $scene != self
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
# Prepare for transition
|
||
|
Graphics.freeze
|
||
|
# Dispose of windows
|
||
|
@help_window.dispose
|
||
|
@item_window.dispose
|
||
|
@target_window.dispose
|
||
|
end
|
||
|
#--------------------------------------------------------------------------
|
||
|
# * Frame Update
|
||
|
#--------------------------------------------------------------------------
|
||
|
def update
|
||
|
# Update windows
|
||
|
@help_window.update
|
||
|
@item_window.update
|
||
|
@target_window.update
|
||
|
# If item window is active: call update_item
|
||
|
if @item_window.active
|
||
|
update_item
|
||
|
return
|
||
|
end
|
||
|
# If target window is active: call update_target
|
||
|
if @target_window.active
|
||
|
update_target
|
||
|
return
|
||
|
end
|
||
|
end
|
||
|
#--------------------------------------------------------------------------
|
||
|
# * Frame Update (when item window is active)
|
||
|
#--------------------------------------------------------------------------
|
||
|
def update_item
|
||
|
# If B button was pressed
|
||
|
if Input.trigger?(Input::CANCEL)
|
||
|
# Play cancel SE
|
||
|
$game_system.se_play($data_system.cancel_se)
|
||
|
# Switch to menu screen
|
||
|
$scene = Scene_Menu.new(0)
|
||
|
return
|
||
|
end
|
||
|
# If C button was pressed
|
||
|
if Input.trigger?(Input::ACTION)
|
||
|
# Get currently selected data on the item window
|
||
|
@item = @item_window.item
|
||
|
# If not a use item
|
||
|
unless @item.is_a?(RPG::Item)
|
||
|
# Play buzzer SE
|
||
|
$game_system.se_play($data_system.buzzer_se)
|
||
|
return
|
||
|
end
|
||
|
# If it can't be used
|
||
|
unless $game_party.item_can_use?(@item.id)
|
||
|
# Play buzzer SE
|
||
|
$game_system.se_play($data_system.buzzer_se)
|
||
|
return
|
||
|
end
|
||
|
# Play decision SE
|
||
|
$game_system.se_play($data_system.decision_se)
|
||
|
# If effect scope is an ally
|
||
|
if @item.scope >= 3
|
||
|
# Activate target window
|
||
|
@item_window.active = false
|
||
|
@target_window.x = (@item_window.index + 1) % 2 * 304
|
||
|
@target_window.visible = true
|
||
|
@target_window.active = true
|
||
|
# Set cursor position to effect scope (single / all)
|
||
|
if @item.scope == 4 || @item.scope == 6
|
||
|
@target_window.index = -1
|
||
|
else
|
||
|
@target_window.index = 0
|
||
|
end
|
||
|
# If effect scope is other than an ally
|
||
|
else
|
||
|
# If command event ID is valid
|
||
|
if @item.common_event_id > 0
|
||
|
# Command event call reservation
|
||
|
$game_temp.common_event_id = @item.common_event_id
|
||
|
# Play item use SE
|
||
|
$game_system.se_play(@item.menu_se)
|
||
|
# If consumable
|
||
|
if @item.consumable
|
||
|
# Decrease used items by 1
|
||
|
$game_party.lose_item(@item.id, 1)
|
||
|
# Draw item window item
|
||
|
@item_window.draw_item(@item_window.index)
|
||
|
end
|
||
|
# Switch to map screen
|
||
|
$scene = Scene_Map.new
|
||
|
return
|
||
|
end
|
||
|
end
|
||
|
return
|
||
|
end
|
||
|
end
|
||
|
#--------------------------------------------------------------------------
|
||
|
# * Frame Update (when target window is active)
|
||
|
#--------------------------------------------------------------------------
|
||
|
def update_target
|
||
|
# If B button was pressed
|
||
|
if Input.trigger?(Input::CANCEL)
|
||
|
# Play cancel SE
|
||
|
$game_system.se_play($data_system.cancel_se)
|
||
|
# If unable to use because items ran out
|
||
|
unless $game_party.item_can_use?(@item.id)
|
||
|
# Remake item window contents
|
||
|
@item_window.refresh
|
||
|
end
|
||
|
# Erase target window
|
||
|
@item_window.active = true
|
||
|
@target_window.visible = false
|
||
|
@target_window.active = false
|
||
|
return
|
||
|
end
|
||
|
# If C button was pressed
|
||
|
if Input.trigger?(Input::ACTION)
|
||
|
# If items are used up
|
||
|
if $game_party.item_number(@item.id) == 0
|
||
|
# Play buzzer SE
|
||
|
$game_system.se_play($data_system.buzzer_se)
|
||
|
return
|
||
|
end
|
||
|
# If target is all
|
||
|
if @target_window.index == -1
|
||
|
# Apply item effects to entire party
|
||
|
used = false
|
||
|
for i in $game_party.actors
|
||
|
used |= i.item_effect(@item)
|
||
|
end
|
||
|
end
|
||
|
# If single target
|
||
|
if @target_window.index >= 0
|
||
|
# Apply item use effects to target actor
|
||
|
target = $game_party.actors[@target_window.index]
|
||
|
used = target.item_effect(@item)
|
||
|
end
|
||
|
# If an item was used
|
||
|
if used
|
||
|
# Play item use SE
|
||
|
$game_system.se_play(@item.menu_se)
|
||
|
# If consumable
|
||
|
if @item.consumable
|
||
|
# Decrease used items by 1
|
||
|
$game_party.lose_item(@item.id, 1)
|
||
|
# Redraw item window item
|
||
|
@item_window.draw_item(@item_window.index)
|
||
|
end
|
||
|
# Remake target window contents
|
||
|
@target_window.refresh
|
||
|
# If all party members are dead
|
||
|
if $game_party.all_dead?
|
||
|
# Switch to game over screen
|
||
|
$scene = Scene_Gameover.new
|
||
|
return
|
||
|
end
|
||
|
# If common event ID is valid
|
||
|
if @item.common_event_id > 0
|
||
|
# Common event call reservation
|
||
|
$game_temp.common_event_id = @item.common_event_id
|
||
|
# Switch to map screen
|
||
|
$scene = Scene_Map.new
|
||
|
return
|
||
|
end
|
||
|
end
|
||
|
# If item wasn't used
|
||
|
unless used
|
||
|
# Play buzzer SE
|
||
|
$game_system.se_play($data_system.buzzer_se)
|
||
|
end
|
||
|
return
|
||
|
end
|
||
|
end
|
||
|
end
|