Italianstal1ion
Member
Item System Diablo Style
Version: Beta
Introduction
Creates an inventory in a grid. For those of you who have never played Diablo, you get a set amount of space, in a grid. Each item takes up a certain space on the grid. In this script items are one block, weapons are 3 vertical, and shields are 2x3.
Features
Each player has their own inventory(items add first to hero 1, then to hero 2 etc)
Sort items out to your liking
Pending:
Dropping items drops to map
Compatability with Grouping and Details
Customizable size for individual weapons/armors/items
Screenshots
This will explain all...
Don't worry, the script is english.
Demo
Not needed
Script
Instructions
Just place it in the script editor above main below default scripts. Then test game and open up "Items" in the menu
FAQ
Nothing yet.
Compatibility
Tested and compatible with SDK. Grouping and details doesnt work with this as of yet, but may be in the next version.
Credits and Thanks
Made by By DarkSchneider of www.rpg2s.net, Credit to Schwarz for draw_line
I translated about 3 italian words :D
Author's Notes
This is BETA still. More features to be added, more bugs to be fixed, more compatibility to come.
Version: Beta
Introduction
Creates an inventory in a grid. For those of you who have never played Diablo, you get a set amount of space, in a grid. Each item takes up a certain space on the grid. In this script items are one block, weapons are 3 vertical, and shields are 2x3.
Features
Each player has their own inventory(items add first to hero 1, then to hero 2 etc)
Sort items out to your liking
Pending:
Dropping items drops to map
Compatability with Grouping and Details
Customizable size for individual weapons/armors/items
Screenshots
This will explain all...

Don't worry, the script is english.
Demo
Not needed
Script
Code:
#==============================================================================
# Item System Diablo Style
#------------------------------------------------------------------------------
# By DarkSchneider
# [url=http://www.rpg2s.net]http://www.rpg2s.net[/url]
#------------------------------------------------------------------------------
# Credit to Schwarz for draw_line
#==============================================================================
class Scene_Item2
def initialize(actor_index = 0)
@actor_index = actor_index
end
def main
# Make help window, item window
s1 = "Use"
s2 = "Move"
s3 = "Drop"
@command_window = Window_Command.new(193, [s1, s2 , s3])
@command_window.y = 64
@help_window = Window_Help.new
@grid = Window_Grid.new(@actor_index)
@grid.active = false
# Associate help window
@grid.help_window = @help_window
# Make target window (set to invisible / inactive)
@target_window = Window_Target.new
@target_window.visible = false
@target_window.active = false
@window_pc = Window_Base.new(0,192,193,287)
@window_pc.contents = Bitmap.new(161,255)
@window_pc.draw_actor_name($game_party.actors[@actor_index], 10, 0)
@window_pc.draw_actor_picture($game_party.actors[@actor_index], 80, 250)
# 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
@cursor_icon.dispose if @cursor_icon != nil
# Dispose of windows
@command_window.dispose
@help_window.dispose
#@item_window.dispose
@target_window.dispose
@grid.dispose
@window_pc.dispose
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# Update windows
@command_window.update
@help_window.update
@target_window.update
@grid.update
if @command_window.active
update_command
return
end
# If item window is active: call update_item
if @grid.active
case @grid.mode
when 0
update_usa
when 1
@cursor_icon = Cursor_Icon.new if @cursor_icon == nil
@cursor_icon.visible = false
update_muovi
when 2
update_lascia
when 3
@cursor_icon.update
update_muovi2
end
return
end
# If target window is active: call update_target
if @target_window.active
update_target
return
end
end
def update_command
# If B button was pressed
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
# Switch to menu screen
$scene = Scene_Menu.new(0)
return
end
if Input.trigger?(Input::C)
# Branch by command window cursor position
case @command_window.index
when 0 # use
# Play decision SE
$game_system.se_play($data_system.decision_se)
@command_window.active = false
@grid.active = true
@grid.set = 0
@grid.mode = @command_window.index
when 1 # move
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Make status window active
@command_window.active = false
@grid.active = true
@grid.set = 0
@grid.mode = @command_window.index
when 2 # drop
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Make status window active
@command_window.active = false
@grid.active = true
@grid.set = 0
@grid.mode = @command_window.index
end
return
end
end
#--------------------------------------------------------------------------
# * Frame Update (when item window is active)
#--------------------------------------------------------------------------
def update_usa
# If B button was pressed
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
# Switch to menu screen
@command_window.active = true
@grid.active = false
@grid.set = - 1
return
end
# If C button was pressed
if Input.trigger?(Input::C)
# Get currently selected data on the item window
@item = @grid.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
@grid.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, false)
# Draw item window item
@grid.delete_item
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::B)
# 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
@grid.refresh
end
# Erase target window
@grid.active = true
@target_window.visible = false
@target_window.active = false
return
end
# If C button was pressed
if Input.trigger?(Input::C)
# If items are used up
if @grid.item_del?
# 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, false)
# Redraw item window item
@grid.delete_item
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
def update_muovi
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
# Switch to menu screen
@command_window.active = true
@grid.active = false
@grid.set = - 1
return
end
if Input.trigger?(Input::C)
if @grid.item != nil
@grid.get_item
bitmap = Bitmap.new(32,32)
x = 4 + (@grid.cursor_rect.width == 32 ? 0 : 18)
y = 4 + (@grid.cursor_rect.height == 32 ? 0 : 32)
bitmap.blt(0,0,@grid.contents,Rect.new(@grid.cursor_rect.x + x,
@grid.cursor_rect.y + y,@grid.cursor_rect.width,@grid.cursor_rect.height))
@cursor_icon.refresh(bitmap, @grid.item_saved[1])
@grid.cursor_rect.width = @cursor_icon.bitmap.width
@grid.cursor_rect.height = @cursor_icon.bitmap.height
@cursor_icon.x = @grid.cursor_rect.x + @grid.x + 16
@cursor_icon.y = @grid.cursor_rect.y + @grid.y + 16
@cursor_icon.visible = true
@grid.delete_item
@grid.mode = 3
end
return
end
end
def update_lascia
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
# Switch to menu screen
@command_window.active = true
@grid.active = false
@grid.set = - 1
return
end
if Input.trigger?(Input::C)
if @grid.item != nil
@grid.delete_item
end
return
end
end
def update_muovi2
@grid.cursor_rect.width = @cursor_icon.bitmap.width
@grid.cursor_rect.height = @cursor_icon.bitmap.height
@cursor_icon.x = @grid.cursor_rect.x + @grid.x + 16
@cursor_icon.y = @grid.cursor_rect.y + @grid.y + 16
if @grid.empty?
@cursor_icon.blink_on
@cursor_icon.tone.set(0,0,0,0)
else
@cursor_icon.blink_off
@cursor_icon.tone.set(0,0,0,255)
end
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
# Switch to menu screen
@grid.redraw_item(false)
@grid.mode = 1
return
end
if Input.trigger?(Input::C)
if @grid.empty?
@grid.redraw_item
@cursor_icon.visible = false
@grid.mode = 1
end
return
end
end
end
class Window_Selectable < Window_Base
alias old_initialize initialize
def initialize(x, y, width, height)
old_initialize(x, y, width, height)
if self.is_a?(Window_Grid)
@x = 0
@y = 0
end
end
alias old_update update
def update
if !self.is_a?(Window_Grid)
old_update
return
end
super
item = $game_party.actors[@actor_index].item_grid
# If cursor is movable
if self.active and @item_max > 0 and @x >= 0
# If pressing down on the directional buttons
if Input.repeat?(Input::DOWN)
@y = -1 if @y == item.size - (self.cursor_rect.height == 96 ? 3 : 1)
@y += 2 if item[@y][@x][1] == "w" or item[@y][@x][1] == "a"
if item[@y + 1][@x][1] == "r" and item[@y + 1][@x - 1][1] == "a"
@x -= 1
end
@y += 1
$game_system.se_play($data_system.cursor_se)
end
# If the up directional button was pressed
if Input.repeat?(Input::UP)
@y = item.size if @y - 1 == -1
@y -= 2 if item[@y - 1][@x][1] == "e" or item[@y - 1][@x][1] == "r"
@x -= 1 if item[@y - 1][@x - 1][1] == "a"
@y -= 1
$game_system.se_play($data_system.cursor_se)
end
# If the right directional button was pressed
if Input.repeat?(Input::RIGHT)
if @x + (self.cursor_rect.width == 64 ? 2 : 1) == item[@y].size
@x = 0
@y -= 1 if item[@y - 1][@x][1] == "a"
@y -= 2 if item[@y - 2][@x][1] == "a"
else
@x += 1 if item[@y][@x][1] == "a"
if item[@y][@x + 1][1] == "r"
@y -= 1 if item[@y - 1][@x + 1][1] == "a"
@y -= 2 if item[@y - 2][@x + 1][1] == "a"
end
if item[@y][@x + 1][1] == "e"
@y -= 1
@y -= 1 if item[@y - 1][@x + 1][1] == "w"
end
@x += 1
end
$game_system.se_play($data_system.cursor_se)
end
# If the left directional button was pressed
if Input.repeat?(Input::LEFT)
@x = item[@y].size if @x - 1 == -1
if item[@y][@x - 1][1] == "r"
@x -= 1
@y -= 1 if item[@y - 1][@x - 1][1] == "a"
@y -= 2 if item[@y - 2][@x - 1][1] == "a"
end
if item[@y][@x - 1][1] == "e"
@y -= 1
@y -= 1 if item[@y - 1][@x - 1][1] == "w"
end
@x -= 1
$game_system.se_play($data_system.cursor_se)
end
end
# Update help text (update_help is defined by the subclasses)
if self.active and @help_window != nil
update_help
end
# Update cursor rectangle
update_cursor_rect
end
end
class Window_Grid < Window_Selectable
attr_accessor :mode
attr_reader :item_saved
def initialize(actor_index)
super(192,64,448,416)
self.contents = Bitmap.new(width - 32, height - 32) #icone oggetti
self.opacity = 0
@window = Window_Base.new(x , y , width, height) #griglia bianca
@window.contents = Bitmap.new(width - 32, height - 32)
@window.z = self.z - 4
@grid_color = Sprite.new #colori oggetti
@grid_color.bitmap = Bitmap.new(width - 32, height - 32)
@grid_color.x = self.x + 16
@grid_color.y = self.y + 16
@grid_color.z = @window.z + 2
@actor_index = actor_index
@mode = 0
@mini_help = Mini_Help.new
self.set = -1
n = self.contents.width / 32
m = self.contents.height / 32
@column_max = n
draw_grid
refresh
end
def draw_grid
@window.contents.fill_rect(0, 0, width - 32, height - 32, Color.new(255,255,255))
i = 0
color = Color.new(0,0,0)
while i < self.contents.height
draw_line(0, i, self.contents.width, i, color)
i += 32
end
i = 0
while i < self.contents.width
draw_line(i, 0, i, self.contents.width, color)
i += 32
end
end
def draw_line(sx, sy, ex, ey, color)
rad = Math.atan2(ey-sy, ex-sx)
dx = Math.cos(rad)
dy = Math.sin(rad)
while (sx - ex).abs > 1 || (sy - ey).abs > 1
sx += dx
sy += dy
@window.contents.set_pixel(sx, sy, color)
end
end
def refresh
@item_max = 0
item = $game_party.actors[@actor_index].item_grid
for i in 0..item.size - 1
for j in 0..item[i].size - 1
if item[i][j][0]!= 0 and item[i][j][1] != "r" and item[i][j][1] != "e"
@item_max += 1
end
end
end
for i in 0..item.size - 1
for j in 0..item[i].size - 1
draw_item(item[i][j][0], item[i][j][1], i , j)
end
end
end
def update_cursor_rect
# If cursor position is less than 0
if @x < 0
self.cursor_rect.empty
return
end
# Calculate cursor width
case $game_party.actors[@actor_index].item_grid[@y][@x][1]
when "i"
cursor_width = 32
cursor_height = 32
when "w"
cursor_width = 32
cursor_height = 96
when "a"
cursor_width = 64
cursor_height = 96
else
cursor_width = 32
cursor_height = 32
end
# Calculate cursor coordinates
x = @x * 32
y = @y * 32
# Update cursor rectangle
self.cursor_rect.set(x, y, cursor_width, cursor_height)
end
def delete_item
case $game_party.actors[@actor_index].item_grid[@y][@x][1]
when "i"
@grid_color.bitmap.fill_rect(@x*32+1, @y*32+1, 31, 31, Color.new(0,0,0,0))
self.contents.fill_rect(@x*32, @y*32, 32, 32, Color.new(0,0,0,0))
$game_party.actors[@actor_index].item_grid[@y][@x][0] = 0
$game_party.actors[@actor_index].item_grid[@y][@x][1] = ""
when "w"
@grid_color.bitmap.fill_rect(@x*32+1, @y*32+1, 31, 95, Color.new(0,0,0,0))
self.contents.fill_rect(@x*32, @y*32 + 4 + 32, 32, 32, Color.new(0,0,0,0))
$game_party.actors[@actor_index].item_grid[@y][@x][0] = 0
$game_party.actors[@actor_index].item_grid[@y][@x][1] = ""
$game_party.actors[@actor_index].item_grid[@y + 1][@x][0] = 0
$game_party.actors[@actor_index].item_grid[@y + 1][@x][1] = ""
$game_party.actors[@actor_index].item_grid[@y + 2][@x][0] = 0
$game_party.actors[@actor_index].item_grid[@y + 2][@x][1] = ""
when "a"
@grid_color.bitmap.fill_rect(@x*32+1, @y*32+1, 63, 95, Color.new(0,0,0,0))
self.contents.fill_rect(@x*32 + 18, @y*32 + 4 + 32, 32, 32, Color.new(0,0,0,0))
$game_party.actors[@actor_index].item_grid[@y][@x][0] = 0
$game_party.actors[@actor_index].item_grid[@y][@x][1] = ""
$game_party.actors[@actor_index].item_grid[@y + 1][@x][0] = 0
$game_party.actors[@actor_index].item_grid[@y + 1][@x][1] = ""
$game_party.actors[@actor_index].item_grid[@y + 2][@x][0] = 0
$game_party.actors[@actor_index].item_grid[@y + 2][@x][1] = ""
$game_party.actors[@actor_index].item_grid[@y][@x + 1][0] = 0
$game_party.actors[@actor_index].item_grid[@y][@x + 1][1] = ""
$game_party.actors[@actor_index].item_grid[@y + 1][@x + 1][0] = 0
$game_party.actors[@actor_index].item_grid[@y + 1][@x + 1][1] = ""
$game_party.actors[@actor_index].item_grid[@y + 2][@x + 1][0] = 0
$game_party.actors[@actor_index].item_grid[@y + 2][@x + 1][1] = ""
end
end
def item
i = $game_party.actors[@actor_index].item_grid[@y][@x][0]
case $game_party.actors[@actor_index].item_grid[@y][@x][1]
when "i"
return $data_items[i]
when "w"
return $data_weapons[i]
when "a"
return $data_armors[i]
else return nil
end
end
def item_del?
if $game_party.actors[@actor_index].item_grid[@y][@x][0] == 0
# Unusable
return true
else
return false
end
end
def dispose
super
@window.dispose
@grid_color.dispose
@mini_help.dispose
end
def update_help
@mini_help.contents.font.color = (($game_party.item_can_use?(item.id) and item.is_a?(RPG::Item))? normal_color : disabled_color)
@help_window.set_text(item == nil ? "" : item.description)
@mini_help.set_text(item == nil ? "" : item.name)
@mini_help.visible = false if item == nil
@mini_help.x = self.cursor_rect.x + self.cursor_rect.width + 192 +
(self.contents.width - self.cursor_rect.x - self.cursor_rect.width < @mini_help.width ? -@mini_help.width : 18)
@mini_help.y = self.cursor_rect.y + self.cursor_rect.height + 64 +
(self.contents.height - self.cursor_rect.y - self.cursor_rect.height < @mini_help.height ? -@mini_help.height : 18)
end
def get_item
@item_saved = [$game_party.actors[@actor_index].item_grid[@y][@x][0],
$game_party.actors[@actor_index].item_grid[@y][@x][1], @x, @y]
end
def redraw_item(f = true)
if f
x = 4 + (@x * 32)
y = @y * 32
else
x = 4 + (@item_saved[2] * 32)
y = @item_saved[3] * 32
tx = @x
ty = @y
@x = @item_saved[2]
@y = @item_saved[3]
end
draw_item(@item_saved[0], @item_saved[1], @y , @x)
case @item_saved[1]
when "i"
$game_party.actors[@actor_index].item_grid[@y][@x][0] = @item_saved[0]
$game_party.actors[@actor_index].item_grid[@y][@x][1] = @item_saved[1]
when "w"
$game_party.actors[@actor_index].item_grid[@y][@x][0] = @item_saved[0]
$game_party.actors[@actor_index].item_grid[@y][@x][1] = @item_saved[1]
$game_party.actors[@actor_index].item_grid[@y + 1][@x][0] = @item_saved[0]
$game_party.actors[@actor_index].item_grid[@y + 1][@x][1] = "e"
$game_party.actors[@actor_index].item_grid[@y + 2][@x][0] = @item_saved[0]
$game_party.actors[@actor_index].item_grid[@y + 2][@x][1] = "e"
when "a"
$game_party.actors[@actor_index].item_grid[@y][@x][0] = @item_saved[0]
$game_party.actors[@actor_index].item_grid[@y][@x][1] = @item_saved[1]
$game_party.actors[@actor_index].item_grid[@y + 1][@x][0] = @item_saved[0]
$game_party.actors[@actor_index].item_grid[@y + 1][@x][1] = "r"
$game_party.actors[@actor_index].item_grid[@y + 2][@x][0] = @item_saved[0]
$game_party.actors[@actor_index].item_grid[@y + 2][@x][1] = "r"
$game_party.actors[@actor_index].item_grid[@y][@x + 1][0] = @item_saved[0]
$game_party.actors[@actor_index].item_grid[@y][@x + 1][1] = "r"
$game_party.actors[@actor_index].item_grid[@y + 1][@x + 1][0] = @item_saved[0]
$game_party.actors[@actor_index].item_grid[@y + 1][@x + 1][1] = "r"
$game_party.actors[@actor_index].item_grid[@y + 2][@x + 1][0] = @item_saved[0]
$game_party.actors[@actor_index].item_grid[@y + 2][@x + 1][1] = "r"
end
@x = tx if @x != tx and tx != nil
@y = ty if @y != ty and ty != nil
end
def empty?
case @item_saved[1]
when "i"
return true if $game_party.actors[@actor_index].item_grid[@y][@x][1] == ""
when "w"
if $game_party.actors[@actor_index].item_grid[@y][@x][1] == "" and
$game_party.actors[@actor_index].item_grid[@y + 1][@x][1] == "" and
$game_party.actors[@actor_index].item_grid[@y + 2][@x][1] == ""
return true
end
when "a"
if $game_party.actors[@actor_index].item_grid[@y][@x][1] == "" and
$game_party.actors[@actor_index].item_grid[@y + 1][@x][1] == "" and
$game_party.actors[@actor_index].item_grid[@y + 2][@x][1] == "" and
$game_party.actors[@actor_index].item_grid[@y][@x + 1][1] == "" and
$game_party.actors[@actor_index].item_grid[@y + 1][@x + 1][1] == "" and
$game_party.actors[@actor_index].item_grid[@y + 2][@x + 1][1] == ""
return true
end
end
return false
end
def set=(set)
@x = set
@y = set
@mini_help.visible = (set == 0 ? true : false)
end
def draw_item(item_id, type, i , j)
if type == "i" and
$game_party.item_can_use?($data_items[item_id].id)
opacity = 255
else
opacity = 128
end
if item_id != 0
case type
when "i"
x = 4 + (j * 32)
y = i * 32
bitmap = RPG::Cache.icon($data_items[item_id].icon_name)
@grid_color.bitmap.fill_rect(j*32+1, i*32+1, 31, 31, Color.new(0,0,200))
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
when "w"
x = 4 + (j * 32)
y = i * 32
bitmap = RPG::Cache.icon($data_weapons[item_id].icon_name)
@grid_color.bitmap.fill_rect(j*32+1, i*32+1, 31, 95, Color.new(200,0,0))
self.contents.blt(x, y + 4 + 32, bitmap, Rect.new(0, 0, 24, 24), opacity)
when "a"
x = 4 + (j * 32)
y = i * 32
bitmap = RPG::Cache.icon($data_armors[item_id].icon_name)
@grid_color.bitmap.fill_rect(j*32+1, i*32+1, 63, 95, Color.new(0,200,0))
self.contents.blt(x + 18, y + 4 + 32, bitmap, Rect.new(0, 0, 24, 24), opacity)
end
end
end
end
class Mini_Help < Window_Base
alias old_initialize initialize
def initialize
super(0, 0, 180, 40)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.size = 14
self.back_opacity = 170
self.z = 102
self.visible = false
end
def set_text(text, align = 1)
# If at least one part of text and alignment differ from last time
if text != @text or align != @align
# Redraw text
self.contents.clear
#self.contents.font.color = normal_color
self.contents.draw_text(4, -12, self.width - 40, 32, text, align)
#self.width = self.contents.text_size(text).width
@text = text
@align = align
@actor = nil
end
self.visible = true
end
end
class Game_Actor < Game_Battler
attr_accessor :item_grid
alias old_initialize initialize
def initialize(actor_id)
old_initialize(actor_id)
@item_grid = Array.new(12)
for i in 0..@item_grid.size - 1
@item_grid[i] = Array.new(13)
for k in 0..@item_grid[i].size - 1
@item_grid[i][k] = Array.new(2)
@item_grid[i][k][0] = 0
@item_grid[i][k][1] = ""
end
end
end
end
class Game_Party
def gain_item(item_id, n)
if item_id > 0
for k in 1..n
for i in 0..self.actors.size - 1
break if set_item(item_id, "i", i) == nil
end
end
end
end
def gain_weapon(weapon_id, n)
if weapon_id > 0
for k in 1..n
for i in 0..self.actors.size - 1
break if set_item(weapon_id, "w", i) == nil
end
end
end
end
def gain_armor(armor_id, n)
if armor_id > 0
for k in 1..n
for i in 0..self.actors.size - 1
break if set_item(armor_id, "a", i) == nil
end
end
end
end
def lose_item(item_id, n, random = true)
if random == true
if item_id > 0
for k in 1..n
del_item(item_id, "i")
end
end
end
@items[item_id] = [[item_number(item_id) + -n, 0].max, 99].min
end
def lose_weapon(weapon_id, n, random = true)
if random == true
if weapon_id > 0
for k in 1..n
del_item(weapon_id, "w")
end
end
end
@weapons[weapon_id] = [[weapon_number(weapon_id) + -n, 0].max, 99].min
end
def lose_armor(armor_id, n, random = true)
if random == true
if armor_id > 0
for k in 1..n
del_item(armor_id, "a")
end
end
end
@armors[armor_id] = [[armor_number(armor_id) + -n, 0].max, 99].min
end
def set_item(item_id, type, i)
for a in 0..self.actors[i].item_grid.size - 1
for b in 0..self.actors[i].item_grid[a].size - 1
if self.actors[i].item_grid[a][b][0] == 0
case type
when "i"
self.actors[i].item_grid[a][b][0] = item_id
self.actors[i].item_grid[a][b][1] = type
@items[item_id] = [[item_number(item_id) + 1, 0].max, 99].min
return
when "w"
if a < self.actors[i].item_grid.size - 2
if self.actors[i].item_grid[a + 1][b][0] == 0 and
self.actors[i].item_grid[a + 2][b][0] == 0
self.actors[i].item_grid[a][b][0] = item_id
self.actors[i].item_grid[a][b][1] = type
self.actors[i].item_grid[a + 1][b][0] = item_id
self.actors[i].item_grid[a + 1][b][1] = "e"
self.actors[i].item_grid[a + 2][b][0] = item_id
self.actors[i].item_grid[a + 2][b][1] = "e"
@weapons[item_id] = [[weapon_number(item_id) + 1, 0].max, 99].min
return
end
end
when "a"
if b < self.actors[i].item_grid[a].size - 1 and a < self.actors[i].item_grid.size - 2
if self.actors[i].item_grid[a + 1][b][0] == 0 and self.actors[i].item_grid[a + 2][b][0] == 0 and
self.actors[i].item_grid[a][b + 1][0] == 0 and
self.actors[i].item_grid[a + 1][b + 1][0] == 0 and self.actors[i].item_grid[a + 2][b + 1][0] == 0
self.actors[i].item_grid[a][b][0] = item_id
self.actors[i].item_grid[a][b][1] = type
self.actors[i].item_grid[a + 1][b][0] = item_id
self.actors[i].item_grid[a + 1][b][1] = "r"
self.actors[i].item_grid[a + 2][b][0] = item_id
self.actors[i].item_grid[a + 2][b][1] = "r"
self.actors[i].item_grid[a][b + 1][0] = item_id
self.actors[i].item_grid[a][b + 1][1] = "r"
self.actors[i].item_grid[a + 1][b + 1][0] = item_id
self.actors[i].item_grid[a + 1][b + 1][1] = "r"
self.actors[i].item_grid[a + 2][b + 1][0] = item_id
self.actors[i].item_grid[a + 2][b + 1][1] = "r"
@armors[item_id] = [[armor_number(item_id) + 1, 0].max, 99].min
return
end
end
end
end
end
end
end
def del_item(item_id, type)
for i in 0..self.actors.size - 1
for a in 0..self.actors[i].item_grid.size - 1
for b in 0..self.actors[i].item_grid[a].size - 1
if self.actors[i].item_grid[a][b][0] == item_id and
self.actors[i].item_grid[a][b][1] == type
case type
when "i"
self.actors[i].item_grid[a][b][0] = 0
self.actors[i].item_grid[a][b][1] = ""
return
when "w"
self.actors[i].item_grid[a][b][0] = 0
self.actors[i].item_grid[a][b][1] = ""
self.actors[i].item_grid[a + 1][b][0] = 0
self.actors[i].item_grid[a + 1][b][1] = ""
self.actors[i].item_grid[a + 2][b][0] = 0
self.actors[i].item_grid[a + 2][b][1] = ""
return
when "a"
self.actors[i].item_grid[a][b][0] = 0
self.actors[i].item_grid[a][b][1] = ""
self.actors[i].item_grid[a + 1][b][0] = 0
self.actors[i].item_grid[a + 1][b][1] = ""
self.actors[i].item_grid[a + 2][b][0] = 0
self.actors[i].item_grid[a + 2][b][1] = ""
self.actors[i].item_grid[a][b + 1][0] = 0
self.actors[i].item_grid[a][b + 1][1] = ""
self.actors[i].item_grid[a + 1][b + 1][0] = 0
self.actors[i].item_grid[a + 1][b + 1][1] = ""
self.actors[i].item_grid[a + 2][b + 1][0] = 0
self.actors[i].item_grid[a + 2][b + 1][1] = ""
return
end
end
end
end
end
end
end
class Cursor_Icon < RPG::Sprite
def initialize
super
@color = Color.new(255,255,0,150)
@rect = Rect.new(0, 0, 24, 24)
end
def refresh(bitmap, item)
case item
when "i"
x = 4
y = 4
width = 32
height = 32
when "w"
x = 4
y = 36
width = 32
height = 96
when "a"
x = 22
y = 36
width = 64
height = 96
end
if self.bitmap == nil or (self.bitmap.width != width or self.bitmap.height != height)
self.bitmap = Bitmap.new(width, height)
else
self.bitmap.clear
end
self.bitmap.fill_rect(0,0,width,height, @color)
self.bitmap.blt(x, y , bitmap, @rect)
self.z = 9999
end
end
class Window_Base
def draw_actor_picture(actor, x, y)
bitmap = RPG::Cache.battler(actor.character_name, actor.character_hue)
cw = bitmap.width
ch = bitmap.height
src_rect = Rect.new(0, 0, cw, ch)
self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
end
end
class Scene_Menu
def update_command
# If B button was pressed
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
# Switch to map screen
$scene = Scene_Map.new
return
end
# If C button was pressed
if Input.trigger?(Input::C)
# If command other than save or end game, and party members = 0
if $game_party.actors.size == 0 and @command_window.index < 4
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# Branch by command window cursor position
case @command_window.index
when 0 # item
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to item screen
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 1 # skill
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Make status window active
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 2 # equipment
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Make status window active
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 3 # status
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Make status window active
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 4 # save
# If saving is forbidden
if $game_system.save_disabled
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to save screen
$scene = Scene_Save.new
when 5 # end game
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to end game screen
$scene = Scene_End.new
end
return
end
end
#--------------------------------------------------------------------------
# * Frame Update (when status window is active)
#--------------------------------------------------------------------------
def update_status
# If B button was pressed
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
# Make command window active
@command_window.active = true
@status_window.active = false
@status_window.index = -1
return
end
# If C button was pressed
if Input.trigger?(Input::C)
# Branch by command window cursor position
case @command_window.index
when 0
$game_system.se_play($data_system.decision_se)
$scene = Scene_Item2.new(@status_window.index)
when 1 # skill
# If this actor's action limit is 2 or more
if $game_party.actors[@status_window.index].restriction >= 2
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to skill screen
$scene = Scene_Skill.new(@status_window.index)
when 2 # equipment
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to equipment screen
$scene = Scene_Equip.new(@status_window.index)
when 3 # status
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to status screen
$scene = Scene_Status.new(@status_window.index)
end
return
end
end
end
Instructions
Just place it in the script editor above main below default scripts. Then test game and open up "Items" in the menu
FAQ
Nothing yet.
Compatibility
Tested and compatible with SDK. Grouping and details doesnt work with this as of yet, but may be in the next version.
Credits and Thanks
Made by By DarkSchneider of www.rpg2s.net, Credit to Schwarz for draw_line
I translated about 3 italian words :D
Author's Notes
This is BETA still. More features to be added, more bugs to be fixed, more compatibility to come.