################################################################################
# Item Weight V 1.1 #
# by Tidloc #
################################################################################
# This script allows the player to carry only a limited ammount of weight. #
# To define the weight of an item, weapon or armor simply enter \w<*VALUE*> #
# in the description box of that item. If left out the weight will be 0! #
################################################################################
# Definition of the constants: #
# TIDLOC_GROUPWEIGHT_MAX ................. limit of weight, where the #
# player will be slowed down. #
# TIDLOC_GROUPWEIGHT_SHOW_MAX ............ true if GROUPWEIGHT_MAX shall be #
# used for max weight, not #
# CARRY_OVER_MAX. #
# TIDLOC_GROUPWEIGHT_CARRY_OVER_MAX ...... maximum weight, if exceeding #
# this limit, no more items can be #
# picked up. #
# TIDLOC_GROUPWEIGHT_MAT_POWER ........... mathematicaly negative power of #
# tens used in display window for #
# weigth #
# TIDLOC_GROUPWEIGHT_MAXWEIGHT_SWITCH .... the number of the global switch #
# which shall be turned true if #
# the max-limit is exceeded. #
# TIDLOC_GROUPWEIGHT_OVERWEIGHT_SWITCH ... the number of the global switch #
# which shall be turned true if #
# you cannot carry any more. #
# if a switch is 0, it's not used #
################################################################################
# To alter this limits in game use the following script-commads: #
# $game_temp._tidloc_pweight(*VALUE*) for GROUPWEIGHT_MAX #
# $game_temp._tidloc_pmax(*VALUE*) for CARRY_OVER_MAX #
# You may leave Value empty to reset to the constants. #
################################################################################
# You are free to use this script in what ever game you want, but please #
# credit me for this hell of work ^_^ #
# Credits also to Albertfish for his help when it was needed! #
################################################################################
TIDLOC_GROUPWEIGHT_MAX = 5
TIDLOC_GROUPWEIGHT_SHOW_MAX = false
TIDLOC_GROUPWEIGHT_CARRY_OVER_MAX = 10
TIDLOC_GROUPWEIGHT_MAT_POWER = 0
TIDLOC_GROUPWEIGHT_MAXWEIGHT_SWITCH = 1
TIDLOC_GROUPWEIGHT_OVERWEIGHT_SWITCH = 2
class Game_Temp
attr_accessor :_tidloc_itemweight
attr_accessor :_tidloc_weaponweight
attr_accessor :_tidloc_armorweight
attr_accessor :_tidloc_groupweight
attr_accessor :_tidloc_groupweight_max
attr_accessor :_tidloc_groupweight_carry_over_max
attr_accessor :_tidloc_iweight_slow
alias wo_weight_initialize initialize
def initialize
wo_weight_initialize
self._tidloc_itemweight = []
self._tidloc_weaponweight = []
self._tidloc_armorweight = []
self._tidloc_groupweight = 0
self._tidloc_groupweight_max = TIDLOC_GROUPWEIGHT_MAX
self._tidloc_groupweight_carry_over_max = TIDLOC_GROUPWEIGHT_CARRY_OVER_MAX
self._tidloc_iweight_slow = false
for i in 1...$data_items.size
if $data_items[i].description[0] != nil
text = $data_items[i].description
text2 = ""
text.gsub!(/\\w<([0-9]+)>/) {"\1[#{$1}]"}
while ((c = text.slice!(/./m)) != nil)
if c != "\1"
text2 += c
else
text.sub!(/\[([_A-Za-z0-9-]+)\]/, "")
self._tidloc_itemweight[i]=$1.to_i
end
end
$data_items[i].description = text2
end
self._tidloc_itemweight[i] = 0 if self._tidloc_itemweight[i].nil?
end
for i in 1...$data_weapons.size
if $data_weapons[i].description[0] != nil
text = $data_weapons[i].description
text2 = ""
text.gsub!(/\\w<([0-9]+)>/) {"\1[#{$1}]"}
while ((c = text.slice!(/./m)) != nil)
if c != "\1"
text2 += c
else
text.sub!(/\[([_A-Za-z0-9-]+)\]/, "")
self._tidloc_weaponweight[i]=$1.to_i
end
end
$data_weapons[i].description = text2
end
self._tidloc_weaponweight[i] = 0 if self._tidloc_weaponweight[i].nil?
end
for i in 1...$data_armors.size
if $data_armors[i].description[0] != nil
text = $data_armors[i].description
text2 = ""
text.gsub!(/\\w<([0-9]+)>/) {"\1[#{$1}]"}
while ((c = text.slice!(/./m)) != nil)
if c == "\1"
text.sub!(/\[([_A-Za-z0-9-]+)\]/, "")
self._tidloc_armorweight[i]=$1.to_i
else
text2 += c
end
end
$data_armors[i].description = text2
end
self._tidloc_armorweight[i] = 0 if self._tidloc_armorweight[i].nil?
end
end
def _tidloc_pweight(new_weight=TIDLOC_GROUPWEIGHT_MAX)
self._tidloc_groupweight_max = new_weight
end
def _tidloc_pmax(new_max=TIDLOC_GROUPWEIGHT_CARRY_OVER_MAX)
self._tidloc_groupweight_carry_over_max = new_max
end
end
class Game_Party
def tidloc_slowing(slow=true)
if slow
$game_player.tidloc_alt_speed -1
else
$game_player.tidloc_alt_speed 1
end
end
alias tidloc_iweight_item gain_item
def gain_item(item_id, n, equip=false)
if item_id > 0 && !equip
$game_temp._tidloc_groupweight += $game_temp._tidloc_itemweight[item_id] * ([[item_number(item_id) + n, 0].max, 99].min - item_number(item_id))
end
if $game_temp._tidloc_groupweight > $game_temp._tidloc_groupweight_carry_over_max
$game_switches.[]=(TIDLOC_GROUPWEIGHT_OVERWEIGHT_SWITCH, true) if TIDLOC_GROUPWEIGHT_OVERWEIGHT_SWITCH != -1
if !$game_temp._tidloc_iweight_slow
$game_temp._tidloc_iweight_slow = true
tidloc_slowing
end
elsif $game_temp._tidloc_groupweight > $game_temp._tidloc_groupweight_max && !$game_temp._tidloc_iweight_slow
$game_temp._tidloc_iweight_slow = true
$game_switches.[]=(TIDLOC_GROUPWEIGHT_MAXWEIGHT_SWITCH, true) if TIDLOC_GROUPWEIGHT_MAXWEIGHT_SWITCH != -1
tidloc_slowing
tidloc_iweight_item(item_id, n)
elsif $game_temp._tidloc_groupweight <= $game_temp._tidloc_groupweight_max && $game_temp._tidloc_iweight_slow
$game_temp._tidloc_iweight_slow = false
$game_switches.[]=(TIDLOC_GROUPWEIGHT_MAXWEIGHT_SWITCH, false) if TIDLOC_GROUPWEIGHT_MAXWEIGHT_SWITCH != -1
tidloc_slowing false
tidloc_iweight_item(item_id, n)
else
tidloc_iweight_item(item_id, n)
end
end
alias tidloc_iweight_weap gain_weapon
def gain_weapon(weapon_id, n, equip=false)
if weapon_id > 0 && !equip
$game_temp._tidloc_groupweight += $game_temp._tidloc_weaponweight[weapon_id] * ([[weapon_number(weapon_id) + n, 0].max, 99].min - weapon_number(weapon_id))
end
if $game_temp._tidloc_groupweight > $game_temp._tidloc_carry_over_max
$game_switches.[]=(TIDLOC_GROUPWEIGHT_OVERWEIGHT_SWITCH, true) if TIDLOC_GROUPWEIGHT_OVERWEIGHT_SWITCH != -1
if !$game_temp._tidloc_iweight_slow
$game_temp._tidloc_iweight_slow = true
tidloc_slowing
end
elsif $game_temp._tidloc_groupweight > $game_temp._tidloc_groupweight_max && !$game_temp._tidloc_iweight_slow
$game_temp._tidloc_iweight_slow = true
$game_switches.[]=(TIDLOC_GROUPWEIGHT_MAXWEIGHT_SWITCH, true) if TIDLOC_GROUPWEIGHT_MAXWEIGHT_SWITCH != -1
tidloc_slowing
tidloc_iweight_weap(weapon_id, n) if TIDLOC_GROUPWEIGHT_CARRY_OVER_MAX
$game_switches.[]=(TIDLOC_GROUPWEIGHT_OVERWEIGHT_SWITCH, true) if !TIDLOC_GROUPWEIGHT_CARRY_OVER_MAX
elsif $game_temp._tidloc_groupweight <= $game_temp._tidloc_groupweight_max && $game_temp._tidloc_iweight_slow
$game_temp._tidloc_iweight_slow = false
$game_switches.[]=(TIDLOC_GROUPWEIGHT_MAXWEIGHT_SWITCH, false) if TIDLOC_GROUPWEIGHT_MAXWEIGHT_SWITCH != -1
tidloc_slowing false
tidloc_iweight_weap(weapon_id, n)
else
tidloc_iweight_weap(weapon_id, n)
end
end
alias tidloc_iweight_arm gain_armor
def gain_armor(armor_id, n, equip=false)
if armor_id > 0 && !equip
$game_temp._tidloc_groupweight += $game_temp._tidloc_armorweight[armor_id] * ([[armor_number(armor_id) + n, 0].max, 99].min - armor_number(armor_id))
end
if $game_temp._tidloc_groupweight > $game_temp._tidloc_groupweight_carry_over_max
$game_switches.[]=(TIDLOC_GROUPWEIGHT_OVERWEIGHT_SWITCH, true) if TIDLOC_GROUPWEIGHT_OVERWEIGHT_SWITCH != -1
if !$game_temp._tidloc_iweight_slow
$game_temp._tidloc_iweight_slow = true
tidloc_slowing
end
elsif $game_temp._tidloc_groupweight > $game_temp._tidloc_groupweight_max && !$game_temp._tidloc_iweight_slow
$game_temp._tidloc_iweight_slow = true
$game_switches.[]=(TIDLOC_GROUPWEIGHT_MAXWEIGHT_SWITCH, true) if TIDLOC_GROUPWEIGHT_MAXWEIGHT_SWITCH != -1
tidloc_slowing
tidloc_iweight_arm(armor_id, n) if TIDLOC_GROUPWEIGHT_CARRY_OVER_MAX
$game_switches.[]=(TIDLOC_GROUPWEIGHT_OVERWEIGHT_SWITCH, true) if !TIDLOC_GROUPWEIGHT_CARRY_OVER_MAX
elsif $game_temp._tidloc_groupweight <= $game_temp._tidloc_groupweight_max && $game_temp._tidloc_iweight_slow
$game_temp._tidloc_iweight_slow = false
$game_switches.[]=(TIDLOC_GROUPWEIGHT_MAXWEIGHT_SWITCH, false) if TIDLOC_GROUPWEIGHT_MAXWEIGHT_SWITCH != -1
tidloc_slowing false
tidloc_iweight_arm(armor_id, n)
else
tidloc_iweight_arm(armor_id, n)
end
end
end
class Window_Weight < Window_Base
def initialize
super(0, 0, 160, 80)
self.z = 250
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $defaultfonttype
self.contents.font.size = 20
refresh
end
def refresh
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 120, 20, "Weight total:\n")
self.contents.font.color = normal_color
a = 1
for i in 0...TIDLOC_GROUPWEIGHT_MAT_POWER
a*=10.0
end
if TIDLOC_GROUPWEIGHT_SHOW_MAX
self.contents.draw_text(4, 25, 118, 20, ($game_temp._tidloc_groupweight/a).to_s + " / " + ($game_temp._tidloc_groupweight_max/a).to_s, 2)
else
self.contents.draw_text(4, 25, 118, 20, ($game_temp._tidloc_groupweight/a).to_s + " / " + ($game_temp._tidloc_groupweight_carry_over_max/a).to_s, 2)
end
end
end
class Game_Player
def tidloc_set_speed(speed=4)
@move_speed = speed
end
def tidloc_alt_speed(speed=0)
@move_speed += speed
end
end
class Scene_Item
alias _tidloc_iweight_main main
def main
@weight_window = Window_Weight.new
@weight_window.x = 0
@weight_window.y = 0
@todo_window = Window_Command.new(100, ["use", "drop"])
@todo_window.x = 160
@todo_window.active = false
@todo_window.visible = false
@todo_window.z = 300
_tidloc_iweight_main
@todo_window.dispose
@weight_window.dispose
end
alias _tidloc_iweight_update update
def update
@weight_window.update
@todo_window.update
if @todo_window.active == true
update_todo
@weight_window.refresh
return
end
_tidloc_iweight_update
end
alias _tidloc_iweight_item update_item
def update_item
if Input.trigger?(Input::C)
@item = @item_window.item
@item_window.active = false
@todo_window.visible = true
@todo_window.active = true
return
end
_tidloc_iweight_item
end
def update_todo
if Input.trigger?(Input::B)
@todo_window.active = false
@todo_window.visible = false
@item_window.active = true
return
end
if Input.trigger?(Input::C)
@todo_window.active = false
@todo_window.visible = false
@item_window.active = true
if @todo_window.index == 0
unless @item.is_a?(RPG::Item)
$game_system.se_play($data_system.buzzer_se)
return
end
unless $game_party.item_can_use?(@item.id)
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.decision_se)
if @item.scope >= 3
@item_window.active = false
@target_window.x = (@item_window.index + 1) % 2 * 304
@target_window.visible = true
@target_window.active = true
if @item.scope == 4 || @item.scope == 6
@target_window.index = -1
else
@target_window.index = 0
end
else
if @item.common_event_id > 0
$game_temp.common_event_id = @item.common_event_id
$game_system.se_play(@item.menu_se)
if @item.consumable
$game_party.lose_item(@item.id, 1)
@item_window.draw_item(@item_window.index)
end
$scene = Scene_Map.new
return
end
end
return
else
if @item.is_a?(RPG::Item)
$game_party.gain_item(@item.id,-1)
elsif @item.is_a?(RPG::Weapon)
$game_party.gain_weapon(@item.id,-1)
elsif @item.is_a?(RPG::Armor)
$game_party.gain_armor(@item.id,-1)
end
@weight_window.refresh
@item_window.refresh
return
end
end
end
end
class Scene_Shop
alias _tidloc_iweight_buy update_buy
def update_buy
_tidloc_iweight_buy
if Input.trigger?(Input::C)
@item = @buy_window.item
if @item == nil or @item.price > $game_party.gold
$game_system.se_play($data_system.buzzer_se)
return
end
case @item
when RPG::Item
number = $game_party.item_number(@item.id)
max2 = $game_temp._tidloc_itemweight[@item.id]
when RPG::Weapon
number = $game_party.weapon_number(@item.id)
max2 = $game_temp._tidloc_weaponweight[@item.id]
when RPG::Armor
number = $game_party.armor_number(@item.id)
max2 = $game_temp._tidloc_armorweight[@item.id]
end
if number == 99
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.decision_se)
max = @item.price == 0 ? 99 : $game_party.gold / @item.price
if TIDLOC_GROUPWEIGHT_SHOW_MAX
max2 = ($game_temp._tidloc_groupweight_max - $game_temp._tidloc_groupweight) / max2
else
max2 = ($game_temp._tidloc_groupweight_carry_over_max - $game_temp._tidloc_groupweight) / max2
end
max = [max, 99 - number, max2].min
@buy_window.active = false
@buy_window.visible = false
@number_window.set(@item, max, @item.price)
@number_window.active = true
@number_window.visible = true
end
end
end
class Scene_Equip
def update_item
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@right_window.active = true
@item_window.active = false
@item_window.index = -1
return
end
if Input.trigger?(Input::C)
$game_system.se_play($data_system.equip_se)
item = @item_window.item
@actor.equip(@right_window.index, item == nil ? 0 : item.id, true)
@right_window.active = true
@item_window.active = false
@item_window.index = -1
@right_window.refresh
@item_window.refresh
return
end
end
end
class Game_Actor < Game_Battler
def equip(equip_type, id, equip = false)
case equip_type
when 0 # ??
if id == 0 or $game_party.weapon_number(id) > 0
$game_party.gain_weapon(@weapon_id, 1, equip)
@weapon_id = id
$game_party.lose_weapon(id, 1)
end
when 1 # ?
if id == 0 or $game_party.armor_number(id) > 0
update_auto_state($data_armors[@armor1_id], $data_armors[id])
$game_party.gain_armor(@armor1_id, 1, equip)
@armor1_id = id
$game_party.lose_armor(id, 1)
end
when 2 # ?
if id == 0 or $game_party.armor_number(id) > 0
update_auto_state($data_armors[@armor2_id], $data_armors[id])
$game_party.gain_armor(@armor2_id, 1, equip)
@armor2_id = id
$game_party.lose_armor(id, 1)
end
when 3 # ??
if id == 0 or $game_party.armor_number(id) > 0
update_auto_state($data_armors[@armor3_id], $data_armors[id])
$game_party.gain_armor(@armor3_id, 1, equip)
@armor3_id = id
$game_party.lose_armor(id, 1)
end
when 4 # ???
if id == 0 or $game_party.armor_number(id) > 0
update_auto_state($data_armors[@armor4_id], $data_armors[id])
$game_party.gain_armor(@armor4_id, 1, equip)
@armor4_id = id
$game_party.lose_armor(id, 1)
end
end
end
end