- 80
- Posts
- 6
- Years
- Seen Nov 5, 2023
Never mind, i fixed it
It works.
Aight, am back to scripting, will make this more compatible to v18 as I can, just finished my uni-exams, so yeah am quite free now ;)
#==============================================================================
# PScreen Bag Graphical Overhaul by LackDeJurane or CharizardThree3
# If used please give credits.
#=============================================================================
USEARROWS =true # Whether to use BW Styled Arrows for pocket changing
ANIMEBG =true # Whether to use an Animated Background for the bag
USETOUCHBAG =true# Whether to use mouse to click and change pockets
class Window_PokemonBag < Window_DrawableCommand
attr_reader :pocket
attr_accessor :sorting
def initialize(bag,filterlist,pocket,x,y,width,height)
@bag = bag
@filterlist = filterlist
@pocket = pocket
@sorting = false
@adapter = PokemonMartAdapter.new
super(x,y,width,height)
@selarrow = AnimatedBitmap.new("Graphics/Pictures/Bag/cursor")
@swaparrow = AnimatedBitmap.new("Graphics/Pictures/Bag/cursor_swap")
self.windowskin = nil
end
def dispose
@swaparrow.dispose
super
end
def pocket=(value)
@pocket = value
@item_max = (@filterlist) ? @filterlist[@pocket].length+1 : @bag.pockets[@pocket].length+1
self.index = @bag.getChoice(@pocket)
end
def page_row_max; return PokemonBag_Scene::ITEMSVISIBLE; end
def page_item_max; return PokemonBag_Scene::ITEMSVISIBLE; end
def item
return 0 if @filterlist && !@filterlist[@pocket][self.index]
thispocket = @bag.pockets[@pocket]
item = (@filterlist) ? thispocket[@filterlist[@pocket][self.index]] : thispocket[self.index]
return (item) ? item[0] : 0
end
def itemCount
return (@filterlist) ? @filterlist[@pocket].length+1 : @bag.pockets[@pocket].length+1
end
def itemRect(item)
if item<0 || item>=@item_max || item<self.top_item-1 ||
item>self.top_item+self.page_item_max
return Rect.new(0,0,0,0)
else
cursor_width = (self.width-self.borderX-(@column_max-1)*@column_spacing) / @column_max
x = item % @column_max * (cursor_width + @column_spacing)
y = item / @column_max * @row_height - @virtualOy
return Rect.new(x, y, cursor_width, @row_height)
end
end
def drawCursor(index,rect)
if self.index==index
bmp = (@sorting) ? @swaparrow.bitmap : @selarrow.bitmap
pbCopyBitmap(self.contents,bmp,rect.x,rect.y+2)
end
end
def drawItem(index,_count,rect)
textpos = []
rect = Rect.new(rect.x+16,rect.y+16,rect.width-16,rect.height)
ypos = rect.y+4
thispocket = @bag.pockets[@pocket]
if index==self.itemCount-1
textpos.push([_INTL("CLOSE BAG"),rect.x,ypos,false,self.baseColor,self.shadowColor])
else
item = (@filterlist) ? thispocket[@filterlist[@pocket][index]][0] : thispocket[index][0]
baseColor = self.baseColor
shadowColor = self.shadowColor
if @sorting && index==self.index
baseColor = Color.new(224,0,0)
shadowColor = Color.new(248,144,144)
end
textpos.push(
[@adapter.getDisplayName(item),rect.x,ypos,false,baseColor,shadowColor]
)
if !pbIsImportantItem?(item) # Not a Key item or HM (or infinite TM)
qty = (@filterlist) ? thispocket[@filterlist[@pocket][index]][1] : thispocket[index][1]
qtytext = _ISPRINTF("x{1: 3d}",qty)
xQty = rect.x+rect.width-self.contents.text_size(qtytext).width-16
textpos.push([qtytext,xQty,ypos,false,baseColor,shadowColor])
end
if pbIsImportantItem?(item)
if @bag.pbIsRegistered?(item)
pbDrawImagePositions(self.contents,[
["Graphics/Pictures/Bag/icon_register",rect.x+rect.width-72,ypos+4,0,0,-1,24]
])
elsif pbCanRegisterItem?(item)
pbDrawImagePositions(self.contents,[
["Graphics/Pictures/Bag/icon_register",rect.x+rect.width-72,ypos+4,0,24,-1,24]
])
end
end
end
pbDrawTextPositions(self.contents,textpos)
end
def refresh
@item_max = itemCount()
self.update_cursor_rect
dwidth = self.width-self.borderX
dheight = self.height-self.borderY
self.contents = pbDoEnsureBitmap(self.contents,dwidth,dheight)
self.contents.clear
for i in 0...@item_max
next if i<self.top_item-1 || i>self.top_item+self.page_item_max
drawItem(i,@item_max,itemRect(i))
end
drawCursor(self.index,itemRect(self.index))
end
def update
super
@uparrow.visible = false
@downarrow.visible = false
end
end
#===============================================================================
# Bag visuals
#===============================================================================
class PokemonBag_Scene
ITEMLISTBASECOLOR = Color.new(255,255,255)
ITEMLISTSHADOWCOLOR = Color.new(156,156,156)
ITEMTEXTBASECOLOR = Color.new(248,248,248)
ITEMTEXTSHADOWCOLOR = Color.new(90,90,90)
POCKETNAMEBASECOLOR = Color.new(248,248,248)
POCKETNAMESHADOWCOLOR = Color.new(90,90,90)
ITEMSVISIBLE = 7
def pbUpdate
pbUpdateSpriteHash(@sprites)
end
def pbStartScene(bag,choosing=false,filterproc=nil,resetpocket=true)
@viewport = Viewport.new(0,0,Graphics.width,Graphics.height)
@viewport.z = 99999
@bag = bag
@choosing = choosing
@filterproc = filterproc
pbRefreshFilter
lastpocket = @bag.lastpocket
numfilledpockets = @bag.pockets.length-1
if @choosing
numfilledpockets = 0
if @filterlist!=nil
for i in [email protected]
numfilledpockets += 1 if @filterlist[i].length>0
end
else
for i in [email protected]
numfilledpockets += 1 if @bag.pockets[i].length>0
end
end
lastpocket = (resetpocket) ? 1 : @bag.lastpocket
if (@filterlist && @filterlist[lastpocket].length==0) ||
(!@filterlist && @bag.pockets[lastpocket].length==0)
for i in [email protected]
if @filterlist && @filterlist[i].length>0
lastpocket = i; break
elsif !@filterlist && @bag.pockets[i].length>0
lastpocket = i; break
end
end
end
end
@bag.lastpocket = lastpocket
@sliderbitmap = AnimatedBitmap.new(_INTL("Graphics/Pictures/Bag/icon_slider"))
@pocketbitmap = AnimatedBitmap.new(_INTL("Graphics/Pictures/Bag/icon_pocket"))
@sprites = {}
@arrowanim=0
[email protected](lastpocket)
@sprites["grid"]=AnimatedPlane.new(@viewport)
if $Trainer.isFemale?
@sprites["grid"]=AnimatedPlane.new(@viewport)
@sprites["grid"].bitmap = Bitmap.new("Graphics/Pictures/Bag/bg_gridf")
else
@sprites["grid"]=AnimatedPlane.new(@viewport)
@sprites["grid"].bitmap = Bitmap.new("Graphics/Pictures/Bag/bg_grid")
end
@sprites["bagsprite"] = IconSprite.new(-20,10,@viewport)
@sprites["background"] = IconSprite.new(0,0,@viewport)
@sprites["overlay"] = BitmapSprite.new(Graphics.width,Graphics.height,@viewport)
pbSetSystemFont(@sprites["overlay"].bitmap)
@sprites["pocketicon"] = BitmapSprite.new(186,32,@viewport)
@sprites["pocketicon"].x = 0
@sprites["pocketicon"].y = -3
@sprites["switchL"]=IconSprite.new(0,0,@viewport)
@sprites["switchL"].setBitmap("Graphics/Pictures/Bag/switchL")
@sprites["switchL"].x=2
@sprites["switchL"].y=180
@sprites["switchR"]=IconSprite.new(0,0,@viewport)
@sprites["switchR"].setBitmap("Graphics/Pictures/Bag/switchR")
@sprites["switchR"].x=162
@sprites["switchR"].y=180
if USEARROWS
@sprites["switchR"].visible = true
@sprites["switchL"].visible = true
else
@sprites["switchR"].visible = false
@sprites["switchL"].visible = false
end
#@sprites["slider"]=IconSprite.new(Graphics.width-24,240,@viewport)
#@sprites["slider"].setBitmap(sprintf("Graphics/Pictures/Bag/bagSlider"))
@sprites["itemlist"] = Window_PokemonBag.new(@bag,@filterlist,lastpocket,168,-8,314,40+32+ITEMSVISIBLE*32)
@sprites["itemlist"].viewport = @viewport
@sprites["itemlist"].pocket = lastpocket
@sprites["itemlist"].index = @bag.getChoice(lastpocket)
@sprites["itemlist"].baseColor = ITEMLISTBASECOLOR
@sprites["itemlist"].shadowColor = ITEMLISTSHADOWCOLOR
@sprites["itemlist"].refresh
@sprites["itemicon"] = ItemIconSprite.new(48,Graphics.height-48,-1,@viewport)
@sprites["itemtext"] = Window_UnformattedTextPokemon.new("")
@sprites["itemtext"].x = 72
@sprites["itemtext"].y = 270
@sprites["itemtext"].width = Graphics.width-72-24
@sprites["itemtext"].height = 128
@sprites["itemtext"].baseColor = ITEMTEXTBASECOLOR
@sprites["itemtext"].shadowColor = ITEMTEXTSHADOWCOLOR
@sprites["itemtext"].visible = true
@sprites["itemtext"].viewport = @viewport
@sprites["itemtext"].windowskin = nil
@sprites["helpwindow"] = Window_UnformattedTextPokemon.new("")
@sprites["helpwindow"].visible = false
@sprites["helpwindow"].viewport = @viewport
@sprites["msgwindow"] = Window_AdvancedTextPokemon.new("")
@sprites["msgwindow"].visible = false
@sprites["msgwindow"].viewport = @viewport
pbBottomLeftLines(@sprites["helpwindow"],1)
pbDeactivateWindows(@sprites)
pbRefresh
pbFadeInAndShow(@sprites)
end
def pbFadeOutScene
@oldsprites = pbFadeOutAndHide(@sprites)
end
def pbFadeInScene
pbFadeInAndShow(@sprites,@oldsprites)
@oldsprites = nil
end
def pbEndScene
pbFadeOutAndHide(@sprites) if !@oldsprites
@oldsprites = nil
pbDisposeSpriteHash(@sprites)
@sliderbitmap.dispose
@pocketbitmap.dispose
@viewport.dispose
end
def showPocketAnimation
if $Trainer.isFemale?
@sprites["bagsprite"].setBitmap("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}_fm")
pbWait(3)
@sprites["bagsprite"].setBitmap("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}_f")
else
@sprites["bagsprite"].setBitmap("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}m")
pbWait(3)
@sprites["bagsprite"].setBitmap("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}")
end
end
def pbDisplay(msg,brief=false)
UIHelper.pbDisplay(@sprites["msgwindow"],msg,brief) { pbUpdate }
end
def pbConfirm(msg)
UIHelper.pbConfirm(@sprites["msgwindow"],msg) { pbUpdate }
end
def pbChooseNumber(helptext,maximum,initnum=1)
return UIHelper.pbChooseNumber(@sprites["helpwindow"],helptext,maximum,initnum) { pbUpdate }
end
def pbShowCommands(helptext,commands,index=0)
return UIHelper.pbShowCommands(@sprites["helpwindow"],helptext,commands,index) { pbUpdate }
end
def pbRefresh
# Set the background image
if $Trainer.isFemale?
@sprites["background"].setBitmap(sprintf("Graphics/Pictures/Bag/bg_f"))
else
@sprites["background"].setBitmap(sprintf("Graphics/Pictures/Bag/bg"))
end
# Set the bag sprite
fbagexists = pbResolveBitmap(sprintf("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}_f"))
if $Trainer.female? && fbagexists
@sprites["bagsprite"].setBitmap("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}_f")
else
@sprites["bagsprite"].setBitmap("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}")
end
# Draw the pocket icons
@sprites["pocketicon"].bitmap.clear
if @choosing && @filterlist
for i in [email protected]
if @filterlist[i].length==0
@sprites["pocketicon"].bitmap.blt(6+(i-1)*22,6,
@pocketbitmap.bitmap,Rect.new((i-1)*20,30,20,20))
end
end
end
@sprites["pocketicon"].bitmap.blt(2+(@sprites["itemlist"].pocket-1)*0,2,
@pocketbitmap.bitmap,Rect.new((@sprites["itemlist"].pocket-1)*28,0,28,28))
# Refresh the item window
@sprites["itemlist"].refresh
# Refresh more things
pbRefreshIndexChanged
end
def pbRefreshIndexChanged
itemlist = @sprites["itemlist"]
overlay = @sprites["overlay"].bitmap
overlay.clear
# Draw the pocket name
pbDrawTextPositions(overlay,[
[PokemonBag.pocketNames[@bag.lastpocket],94,180,2,POCKETNAMEBASECOLOR,POCKETNAMESHADOWCOLOR]
])
#=begin
# Draw slider arrows
showslider = false
if itemlist.top_row>0
overlay.blt(470,16,@sliderbitmap.bitmap,Rect.new(0,0,36,38))
showslider = true
end
if itemlist.top_item+itemlist.page_item_max<itemlist.itemCount
overlay.blt(470,228,@sliderbitmap.bitmap,Rect.new(0,38,36,38))
showslider = true
end
if itemlist.top_item+itemlist.page_item_max<itemlist.itemCount
overlay.blt(470,228,@sliderbitmap.bitmap,Rect.new(0,38,36,38))
showslider = true
end
#=end
# Draw slider box
if showslider
sliderheight = 174
boxheight = (sliderheight*itemlist.page_row_max/itemlist.row_max).floor
boxheight += [(sliderheight-boxheight)/2,sliderheight/6].min
boxheight = [boxheight.floor,38].max
y = 54
y += ((sliderheight-boxheight)*itemlist.top_row/(itemlist.row_max-itemlist.page_row_max)).floor
overlay.blt(470,y,@sliderbitmap.bitmap,Rect.new(36,0,36,4))
i = 0
while i*16<boxheight-4-18
height = [boxheight-4-18-i*16,16].min
overlay.blt(470,y+4+i*16,@sliderbitmap.bitmap,Rect.new(36,4,36,height))
i += 1
showslider = false
end
overlay.blt(470,y+boxheight-18,@sliderbitmap.bitmap,Rect.new(36,20,36,18))
showslider = false
end
# Set the selected item's icon
@sprites["itemicon"].item = itemlist.item
# Set the selected item's description
@sprites["itemtext"].text = (itemlist.item==0) ? _INTL("Close bag.") :
pbGetMessage(MessageTypes::ItemDescriptions,itemlist.item)
end
def pbRefreshFilter
@filterlist = nil
return if !@choosing
return if @filterproc==nil
@filterlist = []
for i in [email protected]
@filterlist[i] = []
for j in [email protected][i].length
@filterlist[i].push(j) if @filterproc.call(@bag.pockets[i][j][0])
end
end
end
# Called when the item screen wants an item to be chosen from the screen
def pbChooseItem
@sprites["helpwindow"].visible = false
itemwindow = @sprites["itemlist"]
thispocket = @bag.pockets[itemwindow.pocket]
swapinitialpos = 1
pbActivateWindow(@sprites,"itemlist") {
loop do
@sprites["grid"].ox+=1 if ANIMEBG
oldindex = itemwindow.index
Graphics.update
Input.update
pbUpdate
if itemwindow.sorting && itemwindow.index>=thispocket.length
itemwindow.index = (oldindex==thispocket.length-1) ? 0 : thispocket.length-1
end
if itemwindow.index!=oldindex
# Move the item being switched
if itemwindow.sorting
thispocket.insert(itemwindow.index,thispocket.delete_at(oldindex))
end
# Update selected item for current pocket
@bag.setChoice(itemwindow.pocket,itemwindow.index)
pbRefresh
end
if itemwindow.sorting
if Input.trigger?(Input::A) ||
Input.trigger?(Input::C)
itemwindow.sorting = false
pbPlayDecisionSE
pbRefresh
elsif Input.trigger?(Input::B)
curindex = itemwindow.index
thispocket.insert(swapinitialpos,thispocket.delete_at(itemwindow.index))
itemwindow.index = swapinitialpos
itemwindow.sorting = false
pbPlayCancelSE
pbRefresh
end
else
# Change pockets
if Input.trigger?(Input::LEFT)
newpocket = itemwindow.pocket
loop do
newpocket = (newpocket==1) ? PokemonBag.numPockets : newpocket-1
break if !@choosing || newpocket==itemwindow.pocket
if @filterlist; break if @filterlist[newpocket].length>0
else; break if @bag.pockets[newpocket].length>0
end
end
if itemwindow.pocket!=newpocket
itemwindow.pocket = newpocket
@bag.lastpocket = itemwindow.pocket
thispocket = @bag.pockets[itemwindow.pocket]
showPocketAnimation
@sprites["switchL"].setBitmap("Graphics/Pictures/Bag/switchL2") && USEARROWS
pbWait(5)
@sprites["switchL"].setBitmap("Graphics/Pictures/Bag/switchL") && USEARROWS
pbSEPlay("BW2BagSound")
pbRefresh
end
elsif Input.trigger?(Input::RIGHT)
newpocket = itemwindow.pocket
loop do
newpocket = (newpocket==PokemonBag.numPockets) ? 1 : newpocket+1
break if !@choosing || newpocket==itemwindow.pocket
if @filterlist; break if @filterlist[newpocket].length>0
else; break if @bag.pockets[newpocket].length>0
end
end
if itemwindow.pocket!=newpocket
itemwindow.pocket = newpocket
@bag.lastpocket = itemwindow.pocket
thispocket = @bag.pockets[itemwindow.pocket]
showPocketAnimation
@sprites["switchR"].setBitmap("Graphics/Pictures/Bag/switchR2") && USEARROWS
pbWait(5)
@sprites["switchR"].setBitmap("Graphics/Pictures/Bag/switchR") && USEARROWS
pbSEPlay("BW2BagSound")
pbRefresh
end
elsif defined?($mouse)
if $mouse.leftClick?(@sprites["switchL"]) && USEARROWS
newpocket = itemwindow.pocket
loop do
newpocket = (newpocket==1) ? PokemonBag.numPockets : newpocket-1
break if !@choosing || newpocket==itemwindow.pocket
if @filterlist; break if @filterlist[newpocket].length>0
else; break if @bag.pockets[newpocket].length>0
end
end
if itemwindow.pocket!=newpocket
itemwindow.pocket = newpocket
@bag.lastpocket = itemwindow.pocket
thispocket = @bag.pockets[itemwindow.pocket]
showPocketAnimation
@sprites["switchL"].setBitmap("Graphics/Pictures/Bag/switchL2")
pbWait(5)
@sprites["switchL"].setBitmap("Graphics/Pictures/Bag/switchL")
pbSEPlay("BW2BagSound")
pbRefresh
end
elsif $mouse.leftClick?(@sprites["switchR"]) && USEARROWS
newpocket = itemwindow.pocket
loop do
newpocket = (newpocket==PokemonBag.numPockets) ? 1 : newpocket+1
break if !@choosing || newpocket==itemwindow.pocket
if @filterlist; break if @filterlist[newpocket].length>0
else; break if @bag.pockets[newpocket].length>0
end
end
if itemwindow.pocket!=newpocket
itemwindow.pocket = newpocket
@bag.lastpocket = itemwindow.pocket
thispocket = @bag.pockets[itemwindow.pocket]
showPocketAnimation
@sprites["switchR"].setBitmap("Graphics/Pictures/Bag/switchR2")
pbWait(5)
@sprites["switchR"].setBitmap("Graphics/Pictures/Bag/switchR")
pbSEPlay("BW2BagSound")
pbRefresh
end
#Using Mouse for changing pocket by clicking on them
elsif $mouse.areaClick?(0,55,86,118) && USETOUCHBAG
if itemwindow.pocket!=3
@bag.lastpocket = 3
itemwindow.pocket = 3
showPocketAnimation
pbSEPlay("BW2BagSound")
pbRefresh
end
elsif $mouse.areaClick?(0,55,86,118,1) && USETOUCHBAG
if itemwindow.pocket!=7
@bag.lastpocket = 7
itemwindow.pocket = 7
showPocketAnimation
pbSEPlay("BW2BagSound")
pbRefresh
end
elsif $mouse.areaClick?(86,23,72,100) && USETOUCHBAG
if itemwindow.pocket!=1
@bag.lastpocket = 1
itemwindow.pocket = 1
showPocketAnimation
pbSEPlay("BW2BagSound")
pbRefresh
end
elsif $mouse.areaClick?(86,23,72,100,1) && USETOUCHBAG
if itemwindow.pocket!=6
@bag.lastpocket = 6
itemwindow.pocket = 6
showPocketAnimation
pbSEPlay("BW2BagSound")
pbRefresh
end
elsif $mouse.areaClick?(0,209,48,48) && USETOUCHBAG
if itemwindow.pocket!=2
@bag.lastpocket = 2
itemwindow.pocket = 2
showPocketAnimation
pbSEPlay("BW2BagSound")
pbRefresh
end
elsif $mouse.areaClick?(48,213,68,64) && USETOUCHBAG
if itemwindow.pocket!=4
@bag.lastpocket = 4
itemwindow.pocket = 4
showPocketAnimation
pbSEPlay("BW2BagSound")
pbRefresh
end
elsif $mouse.inAreaLeft?(120,211,65,42) && USETOUCHBAG
if itemwindow.pocket!=5
@bag.lastpocket = 5
itemwindow.pocket = 5
showPocketAnimation
pbSEPlay("BW2BagSound")
pbRefresh
end
elsif $mouse.areaClick?(112,123,73,55) && USETOUCHBAG
if itemwindow.pocket!=8
@bag.lastpocket = 8
itemwindow.pocket = 8
showPocketAnimation
pbSEPlay("BW2BagSound")
pbRefresh
end
elsif $mouse.inAreaLeftPress?(472,-120,40,384) && USETOUCHBAG
itemlist=@sprites["itemlist"]
max=itemlist.itemCount-1
itemlist.index=($mouse.y+5)*max/176
itemlist.index=max if itemlist.index>max
itemlist.index=0 if itemlist.index<0
pbRefresh
end
end
if Input.trigger?(Input::F5) # Register/unregister selected item
if !@choosing && itemwindow.index<thispocket.length
if @bag.pbIsRegistered?(itemwindow.item)
@bag.pbUnregisterItem(itemwindow.item)
elsif pbCanRegisterItem?(itemwindow.item)
@bag.pbRegisterItem(itemwindow.item)
end
pbSEPlay("BW2MenuChoose")
pbRefresh
end
elsif Input.trigger?(Input::A) # Start switching the selected item
if !@choosing
if thispocket.length>1 && itemwindow.index<thispocket.length &&
!BAG_POCKET_AUTO_SORT[itemwindow.pocket]
itemwindow.sorting = true
swapinitialpos = itemwindow.index
pbSEPlay("BW2MenuSelect")
pbRefresh
end
end
elsif Input.trigger?(Input::B) # Cancel the item screen
pbSEPlay("BW2CloseMenu")
return 0
elsif Input.trigger?(Input::C) # Choose selected item
(itemwindow.item==0) ? pbPlayCloseMenuSE : pbPlayDecisionSE
return itemwindow.item
end
end
end
}
end
end
#===============================================================================
# Bag mechanics
#===============================================================================
class PokemonBagScreen
def initialize(scene,bag)
@bag = bag
@scene = scene
end
def pbStartScreen
@scene.pbStartScene(@bag)
item = 0
loop do
item = @scene.pbChooseItem
break if item==0
cmdRead = -1
cmdUse = -1
cmdRegister = -1
cmdGive = -1
cmdToss = -1
cmdDebug = -1
commands = []
# Generate command list
commands[cmdRead = commands.length] = _INTL("Read") if pbIsMail?(item)
if ItemHandlers.hasOutHandler(item) || (pbIsMachine?(item) && $Trainer.party.length>0)
if ItemHandlers.hasUseText(item)
commands[cmdUse = commands.length] = ItemHandlers.getUseText(item)
else
commands[cmdUse = commands.length] = _INTL("Use")
end
end
commands[cmdGive = commands.length] = _INTL("Give") if $Trainer.pokemonParty.length>0 && pbCanHoldItem?(item)
commands[cmdToss = commands.length] = _INTL("Toss") if !pbIsImportantItem?(item) || $DEBUG
if @bag.pbIsRegistered?(item)
commands[cmdRegister = commands.length] = _INTL("Deselect")
elsif pbCanRegisterItem?(item)
commands[cmdRegister = commands.length] = _INTL("Register")
end
commands[cmdDebug = commands.length] = _INTL("Debug") if $DEBUG
commands[commands.length] = _INTL("Cancel")
# Show commands generated above
itemname = PBItems.getName(item)
command = @scene.pbShowCommands(_INTL("{1} is selected.",itemname),commands)
if cmdRead>=0 && command==cmdRead # Read mail
pbFadeOutIn {
pbDisplayMail(PokemonMail.new(item,"",""))
}
elsif cmdUse>=0 && command==cmdUse # Use item
ret = pbUseItem(@bag,item,@scene)
# ret: 0=Item wasn't used; 1=Item used; 2=Close Bag to use in field
break if ret==2 # End screen
@scene.pbRefresh
next
elsif cmdGive>=0 && command==cmdGive # Give item to Pokémon
if $Trainer.pokemonCount==0
@scene.pbDisplay(_INTL("There is no Pokémon."))
elsif pbIsImportantItem?(item)
@scene.pbDisplay(_INTL("The {1} can't be held.",itemname))
else
pbFadeOutIn {
sscene = PokemonParty_Scene.new
sscreen = PokemonPartyScreen.new(sscene,$Trainer.party)
sscreen.pbPokemonGiveScreen(item)
@scene.pbRefresh
}
end
elsif cmdToss>=0 && command==cmdToss # Toss item
qty = @bag.pbQuantity(item)
if qty>1
helptext = _INTL("Toss out how many {1}?",PBItems.getNamePlural(item))
qty = @scene.pbChooseNumber(helptext,qty)
end
if qty>0
itemname = PBItems.getNamePlural(item) if qty>1
if pbConfirm(_INTL("Is it OK to throw away {1} {2}?",qty,itemname))
pbDisplay(_INTL("Threw away {1} {2}.",qty,itemname))
qty.times { @bag.pbDeleteItem(item) }
@scene.pbRefresh
end
end
elsif cmdRegister>=0 && command==cmdRegister # Register item
if @bag.pbIsRegistered?(item)
@bag.pbUnregisterItem(item)
else
@bag.pbRegisterItem(item)
end
@scene.pbRefresh
elsif cmdDebug>=0 && command==cmdDebug # Debug
command = 0
loop do
command = @scene.pbShowCommands(_INTL("Do what with {1}?",itemname),[
_INTL("Change quantity"),
_INTL("Make Mystery Gift"),
_INTL("Cancel")
],command)
case command
### Cancel ###
when -1, 2
break
### Change quantity ###
when 0
qty = @bag.pbQuantity(item)
itemplural = PBItems.getNamePlural(item)
params = ChooseNumberParams.new
params.setRange(0,BAG_MAX_PER_SLOT)
params.setDefaultValue(qty)
newqty = pbMessageChooseNumber(
_INTL("Choose new quantity of {1} (max. #{BAG_MAX_PER_SLOT}).",itemplural),params) { @scene.pbUpdate }
if newqty>qty
@bag.pbStoreItem(item,newqty-qty)
elsif newqty<qty
@bag.pbDeleteItem(item,qty-newqty)
end
@scene.pbRefresh
break if newqty==0
### Make Mystery Gift ###
when 1
pbCreateMysteryGift(1,item)
end
end
end
end
@scene.pbEndScene
return item
end
def pbDisplay(text)
@scene.pbDisplay(text)
end
def pbConfirm(text)
return @scene.pbConfirm(text)
end
# UI logic for the item screen for choosing an item.
def pbChooseItemScreen(proc=nil)
oldlastpocket = @bag.lastpocket
oldchoices = @bag.getAllChoices
@scene.pbStartScene(@bag,true,proc)
item = @scene.pbChooseItem
@scene.pbEndScene
@bag.lastpocket = oldlastpocket
@bag.setAllChoices(oldchoices)
return item
end
# UI logic for withdrawing an item in the item storage screen.
def pbWithdrawItemScreen
if !$PokemonGlobal.pcItemStorage
$PokemonGlobal.pcItemStorage = PCItemStorage.new
end
storage = $PokemonGlobal.pcItemStorage
@scene.pbStartScene(storage)
loop do
item = @scene.pbChooseItem
break if item==0
commands = [_INTL("Withdraw"),_INTL("Give"),_INTL("Cancel")]
itemname = PBItems.getName(item)
command = @scene.pbShowCommands(_INTL("{1} is selected.",itemname),commands)
if command==0 # Withdraw
qty = storage.pbQuantity(item)
if qty>1 && !pbIsImportantItem?(item)
qty = @scene.pbChooseNumber(_INTL("How many do you want to withdraw?"),qty)
end
next if qty<=0
if @bag.pbCanStore?(item,qty)
if !storage.pbDeleteItem(item,qty)
raise "Can't delete items from storage"
end
if [email protected](item,qty)
raise "Can't withdraw items from storage"
end
@scene.pbRefresh
dispqty = (pbIsImportantItem?(item)) ? 1 : qty
itemname = (dispqty>1) ? PBItems.getNamePlural(item) : PBItems.getName(item)
pbDisplay(_INTL("Withdrew {1} {2}.",dispqty,itemname))
else
pbDisplay(_INTL("There's no more room in the Bag."))
end
elsif command==1 # Give
if $Trainer.pokemonCount==0
@scene.pbDisplay(_INTL("There is no Pokémon."))
return 0
elsif pbIsImportantItem?(item)
@scene.pbDisplay(_INTL("The {1} can't be held.",itemname))
else
pbFadeOutIn {
sscene = PokemonParty_Scene.new
sscreen = PokemonPartyScreen.new(sscene,$Trainer.party)
if sscreen.pbPokemonGiveScreen(item)
# If the item was held, delete the item from storage
if !storage.pbDeleteItem(item,1)
raise "Can't delete item from storage"
end
end
@scene.pbRefresh
}
end
end
end
@scene.pbEndScene
end
# UI logic for depositing an item in the item storage screen.
def pbDepositItemScreen
@scene.pbStartScene(@bag)
if !$PokemonGlobal.pcItemStorage
$PokemonGlobal.pcItemStorage = PCItemStorage.new
end
storage = $PokemonGlobal.pcItemStorage
item = 0
loop do
item = @scene.pbChooseItem
break if item==0
qty = @bag.pbQuantity(item)
if qty>1 && !pbIsImportantItem?(item)
qty = @scene.pbChooseNumber(_INTL("How many do you want to deposit?"),qty)
end
if qty>0
if !storage.pbCanStore?(item,qty)
pbDisplay(_INTL("There's no room to store items."))
else
if [email protected](item,qty)
raise "Can't delete items from Bag"
end
if !storage.pbStoreItem(item,qty)
raise "Can't deposit items to storage"
end
@scene.pbRefresh
dispqty = (pbIsImportantItem?(item)) ? 1 : qty
itemname = (dispqty>1) ? PBItems.getNamePlural(item) : PBItems.getName(item)
pbDisplay(_INTL("Deposited {1} {2}.",dispqty,itemname))
end
end
end
@scene.pbEndScene
end
# UI logic for tossing an item in the item storage screen.
def pbTossItemScreen
if !$PokemonGlobal.pcItemStorage
$PokemonGlobal.pcItemStorage = PCItemStorage.new
end
storage = $PokemonGlobal.pcItemStorage
@scene.pbStartScene(storage)
loop do
item = @scene.pbChooseItem
break if item==0
if pbIsImportantItem?(item)
@scene.pbDisplay(_INTL("That's too important to toss out!"))
next
end
qty = storage.pbQuantity(item)
itemname = PBItems.getName(item)
itemnameplural = PBItems.getNamePlural(item)
if qty>1
[email protected](_INTL("Toss out how many {1}?",itemnameplural),qty)
end
if qty>0
itemname = itemnameplural if qty>1
if pbConfirm(_INTL("Is it OK to throw away {1} {2}?",qty,itemname))
if !storage.pbDeleteItem(item,qty)
raise "Can't delete items from storage"
end
@scene.pbRefresh
pbDisplay(_INTL("Threw away {1} {2}.",qty,itemname))
end
end
end
@scene.pbEndScene
end
end
Holy crap dude, imma add this to the main postI have asked StCooler for making it compatible with 18v and he has made the script
Spoiler:
Code:#============================================================================== # PScreen Bag Graphical Overhaul by LackDeJurane or CharizardThree3 # If used please give credits. #============================================================================= USEARROWS =true # Whether to use BW Styled Arrows for pocket changing ANIMEBG =true # Whether to use an Animated Background for the bag USETOUCHBAG =true# Whether to use mouse to click and change pockets class Window_PokemonBag < Window_DrawableCommand attr_reader :pocket attr_accessor :sorting def initialize(bag,filterlist,pocket,x,y,width,height) @bag = bag @filterlist = filterlist @pocket = pocket @sorting = false @adapter = PokemonMartAdapter.new super(x,y,width,height) @selarrow = AnimatedBitmap.new("Graphics/Pictures/Bag/cursor") @swaparrow = AnimatedBitmap.new("Graphics/Pictures/Bag/cursor_swap") self.windowskin = nil end def dispose @swaparrow.dispose super end def pocket=(value) @pocket = value @item_max = (@filterlist) ? @filterlist[@pocket].length+1 : @bag.pockets[@pocket].length+1 self.index = @bag.getChoice(@pocket) end def page_row_max; return PokemonBag_Scene::ITEMSVISIBLE; end def page_item_max; return PokemonBag_Scene::ITEMSVISIBLE; end def item return 0 if @filterlist && !@filterlist[@pocket][self.index] thispocket = @bag.pockets[@pocket] item = (@filterlist) ? thispocket[@filterlist[@pocket][self.index]] : thispocket[self.index] return (item) ? item[0] : 0 end def itemCount return (@filterlist) ? @filterlist[@pocket].length+1 : @bag.pockets[@pocket].length+1 end def itemRect(item) if item<0 || item>=@item_max || item<self.top_item-1 || item>self.top_item+self.page_item_max return Rect.new(0,0,0,0) else cursor_width = (self.width-self.borderX-(@column_max-1)*@column_spacing) / @column_max x = item % @column_max * (cursor_width + @column_spacing) y = item / @column_max * @row_height - @virtualOy return Rect.new(x, y, cursor_width, @row_height) end end def drawCursor(index,rect) if self.index==index bmp = (@sorting) ? @swaparrow.bitmap : @selarrow.bitmap pbCopyBitmap(self.contents,bmp,rect.x,rect.y+2) end end def drawItem(index,_count,rect) textpos = [] rect = Rect.new(rect.x+16,rect.y+16,rect.width-16,rect.height) ypos = rect.y+4 thispocket = @bag.pockets[@pocket] if index==self.itemCount-1 textpos.push([_INTL("CLOSE BAG"),rect.x,ypos,false,self.baseColor,self.shadowColor]) else item = (@filterlist) ? thispocket[@filterlist[@pocket][index]][0] : thispocket[index][0] baseColor = self.baseColor shadowColor = self.shadowColor if @sorting && index==self.index baseColor = Color.new(224,0,0) shadowColor = Color.new(248,144,144) end textpos.push( [@adapter.getDisplayName(item),rect.x,ypos,false,baseColor,shadowColor] ) if !pbIsImportantItem?(item) # Not a Key item or HM (or infinite TM) qty = (@filterlist) ? thispocket[@filterlist[@pocket][index]][1] : thispocket[index][1] qtytext = _ISPRINTF("x{1: 3d}",qty) xQty = rect.x+rect.width-self.contents.text_size(qtytext).width-16 textpos.push([qtytext,xQty,ypos,false,baseColor,shadowColor]) end if pbIsImportantItem?(item) if @bag.pbIsRegistered?(item) pbDrawImagePositions(self.contents,[ ["Graphics/Pictures/Bag/icon_register",rect.x+rect.width-72,ypos+4,0,0,-1,24] ]) elsif pbCanRegisterItem?(item) pbDrawImagePositions(self.contents,[ ["Graphics/Pictures/Bag/icon_register",rect.x+rect.width-72,ypos+4,0,24,-1,24] ]) end end end pbDrawTextPositions(self.contents,textpos) end def refresh @item_max = itemCount() self.update_cursor_rect dwidth = self.width-self.borderX dheight = self.height-self.borderY self.contents = pbDoEnsureBitmap(self.contents,dwidth,dheight) self.contents.clear for i in 0...@item_max next if i<self.top_item-1 || i>self.top_item+self.page_item_max drawItem(i,@item_max,itemRect(i)) end drawCursor(self.index,itemRect(self.index)) end def update super @uparrow.visible = false @downarrow.visible = false end end #=============================================================================== # Bag visuals #=============================================================================== class PokemonBag_Scene ITEMLISTBASECOLOR = Color.new(255,255,255) ITEMLISTSHADOWCOLOR = Color.new(156,156,156) ITEMTEXTBASECOLOR = Color.new(248,248,248) ITEMTEXTSHADOWCOLOR = Color.new(90,90,90) POCKETNAMEBASECOLOR = Color.new(248,248,248) POCKETNAMESHADOWCOLOR = Color.new(90,90,90) ITEMSVISIBLE = 7 def pbUpdate pbUpdateSpriteHash(@sprites) end def pbStartScene(bag,choosing=false,filterproc=nil,resetpocket=true) @viewport = Viewport.new(0,0,Graphics.width,Graphics.height) @viewport.z = 99999 @bag = bag @choosing = choosing @filterproc = filterproc pbRefreshFilter lastpocket = @bag.lastpocket numfilledpockets = @bag.pockets.length-1 if @choosing numfilledpockets = 0 if @filterlist!=nil for i in [email protected] numfilledpockets += 1 if @filterlist[i].length>0 end else for i in [email protected] numfilledpockets += 1 if @bag.pockets[i].length>0 end end lastpocket = (resetpocket) ? 1 : @bag.lastpocket if (@filterlist && @filterlist[lastpocket].length==0) || (!@filterlist && @bag.pockets[lastpocket].length==0) for i in [email protected] if @filterlist && @filterlist[i].length>0 lastpocket = i; break elsif !@filterlist && @bag.pockets[i].length>0 lastpocket = i; break end end end end @bag.lastpocket = lastpocket @sliderbitmap = AnimatedBitmap.new(_INTL("Graphics/Pictures/Bag/icon_slider")) @pocketbitmap = AnimatedBitmap.new(_INTL("Graphics/Pictures/Bag/icon_pocket")) @sprites = {} @arrowanim=0 [email protected](lastpocket) @sprites["grid"]=AnimatedPlane.new(@viewport) if $Trainer.isFemale? @sprites["grid"]=AnimatedPlane.new(@viewport) @sprites["grid"].bitmap = Bitmap.new("Graphics/Pictures/Bag/bg_gridf") else @sprites["grid"]=AnimatedPlane.new(@viewport) @sprites["grid"].bitmap = Bitmap.new("Graphics/Pictures/Bag/bg_grid") end @sprites["bagsprite"] = IconSprite.new(-20,10,@viewport) @sprites["background"] = IconSprite.new(0,0,@viewport) @sprites["overlay"] = BitmapSprite.new(Graphics.width,Graphics.height,@viewport) pbSetSystemFont(@sprites["overlay"].bitmap) @sprites["pocketicon"] = BitmapSprite.new(186,32,@viewport) @sprites["pocketicon"].x = 0 @sprites["pocketicon"].y = -3 @sprites["switchL"]=IconSprite.new(0,0,@viewport) @sprites["switchL"].setBitmap("Graphics/Pictures/Bag/switchL") @sprites["switchL"].x=2 @sprites["switchL"].y=180 @sprites["switchR"]=IconSprite.new(0,0,@viewport) @sprites["switchR"].setBitmap("Graphics/Pictures/Bag/switchR") @sprites["switchR"].x=162 @sprites["switchR"].y=180 if USEARROWS @sprites["switchR"].visible = true @sprites["switchL"].visible = true else @sprites["switchR"].visible = false @sprites["switchL"].visible = false end #@sprites["slider"]=IconSprite.new(Graphics.width-24,240,@viewport) #@sprites["slider"].setBitmap(sprintf("Graphics/Pictures/Bag/bagSlider")) @sprites["itemlist"] = Window_PokemonBag.new(@bag,@filterlist,lastpocket,168,-8,314,40+32+ITEMSVISIBLE*32) @sprites["itemlist"].viewport = @viewport @sprites["itemlist"].pocket = lastpocket @sprites["itemlist"].index = @bag.getChoice(lastpocket) @sprites["itemlist"].baseColor = ITEMLISTBASECOLOR @sprites["itemlist"].shadowColor = ITEMLISTSHADOWCOLOR @sprites["itemlist"].refresh @sprites["itemicon"] = ItemIconSprite.new(48,Graphics.height-48,-1,@viewport) @sprites["itemtext"] = Window_UnformattedTextPokemon.new("") @sprites["itemtext"].x = 72 @sprites["itemtext"].y = 270 @sprites["itemtext"].width = Graphics.width-72-24 @sprites["itemtext"].height = 128 @sprites["itemtext"].baseColor = ITEMTEXTBASECOLOR @sprites["itemtext"].shadowColor = ITEMTEXTSHADOWCOLOR @sprites["itemtext"].visible = true @sprites["itemtext"].viewport = @viewport @sprites["itemtext"].windowskin = nil @sprites["helpwindow"] = Window_UnformattedTextPokemon.new("") @sprites["helpwindow"].visible = false @sprites["helpwindow"].viewport = @viewport @sprites["msgwindow"] = Window_AdvancedTextPokemon.new("") @sprites["msgwindow"].visible = false @sprites["msgwindow"].viewport = @viewport pbBottomLeftLines(@sprites["helpwindow"],1) pbDeactivateWindows(@sprites) pbRefresh pbFadeInAndShow(@sprites) end def pbFadeOutScene @oldsprites = pbFadeOutAndHide(@sprites) end def pbFadeInScene pbFadeInAndShow(@sprites,@oldsprites) @oldsprites = nil end def pbEndScene pbFadeOutAndHide(@sprites) if !@oldsprites @oldsprites = nil pbDisposeSpriteHash(@sprites) @sliderbitmap.dispose @pocketbitmap.dispose @viewport.dispose end def showPocketAnimation if $Trainer.isFemale? @sprites["bagsprite"].setBitmap("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}_fm") pbWait(3) @sprites["bagsprite"].setBitmap("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}_f") else @sprites["bagsprite"].setBitmap("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}m") pbWait(3) @sprites["bagsprite"].setBitmap("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}") end end def pbDisplay(msg,brief=false) UIHelper.pbDisplay(@sprites["msgwindow"],msg,brief) { pbUpdate } end def pbConfirm(msg) UIHelper.pbConfirm(@sprites["msgwindow"],msg) { pbUpdate } end def pbChooseNumber(helptext,maximum,initnum=1) return UIHelper.pbChooseNumber(@sprites["helpwindow"],helptext,maximum,initnum) { pbUpdate } end def pbShowCommands(helptext,commands,index=0) return UIHelper.pbShowCommands(@sprites["helpwindow"],helptext,commands,index) { pbUpdate } end def pbRefresh # Set the background image if $Trainer.isFemale? @sprites["background"].setBitmap(sprintf("Graphics/Pictures/Bag/bg_f")) else @sprites["background"].setBitmap(sprintf("Graphics/Pictures/Bag/bg")) end # Set the bag sprite fbagexists = pbResolveBitmap(sprintf("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}_f")) if $Trainer.female? && fbagexists @sprites["bagsprite"].setBitmap("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}_f") else @sprites["bagsprite"].setBitmap("Graphics/Pictures/Bag/bag_#{@bag.lastpocket}") end # Draw the pocket icons @sprites["pocketicon"].bitmap.clear if @choosing && @filterlist for i in [email protected] if @filterlist[i].length==0 @sprites["pocketicon"].bitmap.blt(6+(i-1)*22,6, @pocketbitmap.bitmap,Rect.new((i-1)*20,30,20,20)) end end end @sprites["pocketicon"].bitmap.blt(2+(@sprites["itemlist"].pocket-1)*0,2, @pocketbitmap.bitmap,Rect.new((@sprites["itemlist"].pocket-1)*28,0,28,28)) # Refresh the item window @sprites["itemlist"].refresh # Refresh more things pbRefreshIndexChanged end def pbRefreshIndexChanged itemlist = @sprites["itemlist"] overlay = @sprites["overlay"].bitmap overlay.clear # Draw the pocket name pbDrawTextPositions(overlay,[ [PokemonBag.pocketNames[@bag.lastpocket],94,180,2,POCKETNAMEBASECOLOR,POCKETNAMESHADOWCOLOR] ]) #=begin # Draw slider arrows showslider = false if itemlist.top_row>0 overlay.blt(470,16,@sliderbitmap.bitmap,Rect.new(0,0,36,38)) showslider = true end if itemlist.top_item+itemlist.page_item_max<itemlist.itemCount overlay.blt(470,228,@sliderbitmap.bitmap,Rect.new(0,38,36,38)) showslider = true end if itemlist.top_item+itemlist.page_item_max<itemlist.itemCount overlay.blt(470,228,@sliderbitmap.bitmap,Rect.new(0,38,36,38)) showslider = true end #=end # Draw slider box if showslider sliderheight = 174 boxheight = (sliderheight*itemlist.page_row_max/itemlist.row_max).floor boxheight += [(sliderheight-boxheight)/2,sliderheight/6].min boxheight = [boxheight.floor,38].max y = 54 y += ((sliderheight-boxheight)*itemlist.top_row/(itemlist.row_max-itemlist.page_row_max)).floor overlay.blt(470,y,@sliderbitmap.bitmap,Rect.new(36,0,36,4)) i = 0 while i*16<boxheight-4-18 height = [boxheight-4-18-i*16,16].min overlay.blt(470,y+4+i*16,@sliderbitmap.bitmap,Rect.new(36,4,36,height)) i += 1 showslider = false end overlay.blt(470,y+boxheight-18,@sliderbitmap.bitmap,Rect.new(36,20,36,18)) showslider = false end # Set the selected item's icon @sprites["itemicon"].item = itemlist.item # Set the selected item's description @sprites["itemtext"].text = (itemlist.item==0) ? _INTL("Close bag.") : pbGetMessage(MessageTypes::ItemDescriptions,itemlist.item) end def pbRefreshFilter @filterlist = nil return if !@choosing return if @filterproc==nil @filterlist = [] for i in [email protected] @filterlist[i] = [] for j in [email protected][i].length @filterlist[i].push(j) if @filterproc.call(@bag.pockets[i][j][0]) end end end # Called when the item screen wants an item to be chosen from the screen def pbChooseItem @sprites["helpwindow"].visible = false itemwindow = @sprites["itemlist"] thispocket = @bag.pockets[itemwindow.pocket] swapinitialpos = 1 pbActivateWindow(@sprites,"itemlist") { loop do @sprites["grid"].ox+=1 if ANIMEBG oldindex = itemwindow.index Graphics.update Input.update pbUpdate if itemwindow.sorting && itemwindow.index>=thispocket.length itemwindow.index = (oldindex==thispocket.length-1) ? 0 : thispocket.length-1 end if itemwindow.index!=oldindex # Move the item being switched if itemwindow.sorting thispocket.insert(itemwindow.index,thispocket.delete_at(oldindex)) end # Update selected item for current pocket @bag.setChoice(itemwindow.pocket,itemwindow.index) pbRefresh end if itemwindow.sorting if Input.trigger?(Input::A) || Input.trigger?(Input::C) itemwindow.sorting = false pbPlayDecisionSE pbRefresh elsif Input.trigger?(Input::B) curindex = itemwindow.index thispocket.insert(swapinitialpos,thispocket.delete_at(itemwindow.index)) itemwindow.index = swapinitialpos itemwindow.sorting = false pbPlayCancelSE pbRefresh end else # Change pockets if Input.trigger?(Input::LEFT) newpocket = itemwindow.pocket loop do newpocket = (newpocket==1) ? PokemonBag.numPockets : newpocket-1 break if !@choosing || newpocket==itemwindow.pocket if @filterlist; break if @filterlist[newpocket].length>0 else; break if @bag.pockets[newpocket].length>0 end end if itemwindow.pocket!=newpocket itemwindow.pocket = newpocket @bag.lastpocket = itemwindow.pocket thispocket = @bag.pockets[itemwindow.pocket] showPocketAnimation @sprites["switchL"].setBitmap("Graphics/Pictures/Bag/switchL2") && USEARROWS pbWait(5) @sprites["switchL"].setBitmap("Graphics/Pictures/Bag/switchL") && USEARROWS pbSEPlay("BW2BagSound") pbRefresh end elsif Input.trigger?(Input::RIGHT) newpocket = itemwindow.pocket loop do newpocket = (newpocket==PokemonBag.numPockets) ? 1 : newpocket+1 break if !@choosing || newpocket==itemwindow.pocket if @filterlist; break if @filterlist[newpocket].length>0 else; break if @bag.pockets[newpocket].length>0 end end if itemwindow.pocket!=newpocket itemwindow.pocket = newpocket @bag.lastpocket = itemwindow.pocket thispocket = @bag.pockets[itemwindow.pocket] showPocketAnimation @sprites["switchR"].setBitmap("Graphics/Pictures/Bag/switchR2") && USEARROWS pbWait(5) @sprites["switchR"].setBitmap("Graphics/Pictures/Bag/switchR") && USEARROWS pbSEPlay("BW2BagSound") pbRefresh end elsif defined?($mouse) if $mouse.leftClick?(@sprites["switchL"]) && USEARROWS newpocket = itemwindow.pocket loop do newpocket = (newpocket==1) ? PokemonBag.numPockets : newpocket-1 break if !@choosing || newpocket==itemwindow.pocket if @filterlist; break if @filterlist[newpocket].length>0 else; break if @bag.pockets[newpocket].length>0 end end if itemwindow.pocket!=newpocket itemwindow.pocket = newpocket @bag.lastpocket = itemwindow.pocket thispocket = @bag.pockets[itemwindow.pocket] showPocketAnimation @sprites["switchL"].setBitmap("Graphics/Pictures/Bag/switchL2") pbWait(5) @sprites["switchL"].setBitmap("Graphics/Pictures/Bag/switchL") pbSEPlay("BW2BagSound") pbRefresh end elsif $mouse.leftClick?(@sprites["switchR"]) && USEARROWS newpocket = itemwindow.pocket loop do newpocket = (newpocket==PokemonBag.numPockets) ? 1 : newpocket+1 break if !@choosing || newpocket==itemwindow.pocket if @filterlist; break if @filterlist[newpocket].length>0 else; break if @bag.pockets[newpocket].length>0 end end if itemwindow.pocket!=newpocket itemwindow.pocket = newpocket @bag.lastpocket = itemwindow.pocket thispocket = @bag.pockets[itemwindow.pocket] showPocketAnimation @sprites["switchR"].setBitmap("Graphics/Pictures/Bag/switchR2") pbWait(5) @sprites["switchR"].setBitmap("Graphics/Pictures/Bag/switchR") pbSEPlay("BW2BagSound") pbRefresh end #Using Mouse for changing pocket by clicking on them elsif $mouse.areaClick?(0,55,86,118) && USETOUCHBAG if itemwindow.pocket!=3 @bag.lastpocket = 3 itemwindow.pocket = 3 showPocketAnimation pbSEPlay("BW2BagSound") pbRefresh end elsif $mouse.areaClick?(0,55,86,118,1) && USETOUCHBAG if itemwindow.pocket!=7 @bag.lastpocket = 7 itemwindow.pocket = 7 showPocketAnimation pbSEPlay("BW2BagSound") pbRefresh end elsif $mouse.areaClick?(86,23,72,100) && USETOUCHBAG if itemwindow.pocket!=1 @bag.lastpocket = 1 itemwindow.pocket = 1 showPocketAnimation pbSEPlay("BW2BagSound") pbRefresh end elsif $mouse.areaClick?(86,23,72,100,1) && USETOUCHBAG if itemwindow.pocket!=6 @bag.lastpocket = 6 itemwindow.pocket = 6 showPocketAnimation pbSEPlay("BW2BagSound") pbRefresh end elsif $mouse.areaClick?(0,209,48,48) && USETOUCHBAG if itemwindow.pocket!=2 @bag.lastpocket = 2 itemwindow.pocket = 2 showPocketAnimation pbSEPlay("BW2BagSound") pbRefresh end elsif $mouse.areaClick?(48,213,68,64) && USETOUCHBAG if itemwindow.pocket!=4 @bag.lastpocket = 4 itemwindow.pocket = 4 showPocketAnimation pbSEPlay("BW2BagSound") pbRefresh end elsif $mouse.inAreaLeft?(120,211,65,42) && USETOUCHBAG if itemwindow.pocket!=5 @bag.lastpocket = 5 itemwindow.pocket = 5 showPocketAnimation pbSEPlay("BW2BagSound") pbRefresh end elsif $mouse.areaClick?(112,123,73,55) && USETOUCHBAG if itemwindow.pocket!=8 @bag.lastpocket = 8 itemwindow.pocket = 8 showPocketAnimation pbSEPlay("BW2BagSound") pbRefresh end elsif $mouse.inAreaLeftPress?(472,-120,40,384) && USETOUCHBAG itemlist=@sprites["itemlist"] max=itemlist.itemCount-1 itemlist.index=($mouse.y+5)*max/176 itemlist.index=max if itemlist.index>max itemlist.index=0 if itemlist.index<0 pbRefresh end end if Input.trigger?(Input::F5) # Register/unregister selected item if !@choosing && itemwindow.index<thispocket.length if @bag.pbIsRegistered?(itemwindow.item) @bag.pbUnregisterItem(itemwindow.item) elsif pbCanRegisterItem?(itemwindow.item) @bag.pbRegisterItem(itemwindow.item) end pbSEPlay("BW2MenuChoose") pbRefresh end elsif Input.trigger?(Input::A) # Start switching the selected item if !@choosing if thispocket.length>1 && itemwindow.index<thispocket.length && !BAG_POCKET_AUTO_SORT[itemwindow.pocket] itemwindow.sorting = true swapinitialpos = itemwindow.index pbSEPlay("BW2MenuSelect") pbRefresh end end elsif Input.trigger?(Input::B) # Cancel the item screen pbSEPlay("BW2CloseMenu") return 0 elsif Input.trigger?(Input::C) # Choose selected item (itemwindow.item==0) ? pbPlayCloseMenuSE : pbPlayDecisionSE return itemwindow.item end end end } end end #=============================================================================== # Bag mechanics #=============================================================================== class PokemonBagScreen def initialize(scene,bag) @bag = bag @scene = scene end def pbStartScreen @scene.pbStartScene(@bag) item = 0 loop do item = @scene.pbChooseItem break if item==0 cmdRead = -1 cmdUse = -1 cmdRegister = -1 cmdGive = -1 cmdToss = -1 cmdDebug = -1 commands = [] # Generate command list commands[cmdRead = commands.length] = _INTL("Read") if pbIsMail?(item) if ItemHandlers.hasOutHandler(item) || (pbIsMachine?(item) && $Trainer.party.length>0) if ItemHandlers.hasUseText(item) commands[cmdUse = commands.length] = ItemHandlers.getUseText(item) else commands[cmdUse = commands.length] = _INTL("Use") end end commands[cmdGive = commands.length] = _INTL("Give") if $Trainer.pokemonParty.length>0 && pbCanHoldItem?(item) commands[cmdToss = commands.length] = _INTL("Toss") if !pbIsImportantItem?(item) || $DEBUG if @bag.pbIsRegistered?(item) commands[cmdRegister = commands.length] = _INTL("Deselect") elsif pbCanRegisterItem?(item) commands[cmdRegister = commands.length] = _INTL("Register") end commands[cmdDebug = commands.length] = _INTL("Debug") if $DEBUG commands[commands.length] = _INTL("Cancel") # Show commands generated above itemname = PBItems.getName(item) command = @scene.pbShowCommands(_INTL("{1} is selected.",itemname),commands) if cmdRead>=0 && command==cmdRead # Read mail pbFadeOutIn { pbDisplayMail(PokemonMail.new(item,"","")) } elsif cmdUse>=0 && command==cmdUse # Use item ret = pbUseItem(@bag,item,@scene) # ret: 0=Item wasn't used; 1=Item used; 2=Close Bag to use in field break if ret==2 # End screen @scene.pbRefresh next elsif cmdGive>=0 && command==cmdGive # Give item to Pokémon if $Trainer.pokemonCount==0 @scene.pbDisplay(_INTL("There is no Pokémon.")) elsif pbIsImportantItem?(item) @scene.pbDisplay(_INTL("The {1} can't be held.",itemname)) else pbFadeOutIn { sscene = PokemonParty_Scene.new sscreen = PokemonPartyScreen.new(sscene,$Trainer.party) sscreen.pbPokemonGiveScreen(item) @scene.pbRefresh } end elsif cmdToss>=0 && command==cmdToss # Toss item qty = @bag.pbQuantity(item) if qty>1 helptext = _INTL("Toss out how many {1}?",PBItems.getNamePlural(item)) qty = @scene.pbChooseNumber(helptext,qty) end if qty>0 itemname = PBItems.getNamePlural(item) if qty>1 if pbConfirm(_INTL("Is it OK to throw away {1} {2}?",qty,itemname)) pbDisplay(_INTL("Threw away {1} {2}.",qty,itemname)) qty.times { @bag.pbDeleteItem(item) } @scene.pbRefresh end end elsif cmdRegister>=0 && command==cmdRegister # Register item if @bag.pbIsRegistered?(item) @bag.pbUnregisterItem(item) else @bag.pbRegisterItem(item) end @scene.pbRefresh elsif cmdDebug>=0 && command==cmdDebug # Debug command = 0 loop do command = @scene.pbShowCommands(_INTL("Do what with {1}?",itemname),[ _INTL("Change quantity"), _INTL("Make Mystery Gift"), _INTL("Cancel") ],command) case command ### Cancel ### when -1, 2 break ### Change quantity ### when 0 qty = @bag.pbQuantity(item) itemplural = PBItems.getNamePlural(item) params = ChooseNumberParams.new params.setRange(0,BAG_MAX_PER_SLOT) params.setDefaultValue(qty) newqty = pbMessageChooseNumber( _INTL("Choose new quantity of {1} (max. #{BAG_MAX_PER_SLOT}).",itemplural),params) { @scene.pbUpdate } if newqty>qty @bag.pbStoreItem(item,newqty-qty) elsif newqty<qty @bag.pbDeleteItem(item,qty-newqty) end @scene.pbRefresh break if newqty==0 ### Make Mystery Gift ### when 1 pbCreateMysteryGift(1,item) end end end end @scene.pbEndScene return item end def pbDisplay(text) @scene.pbDisplay(text) end def pbConfirm(text) return @scene.pbConfirm(text) end # UI logic for the item screen for choosing an item. def pbChooseItemScreen(proc=nil) oldlastpocket = @bag.lastpocket oldchoices = @bag.getAllChoices @scene.pbStartScene(@bag,true,proc) item = @scene.pbChooseItem @scene.pbEndScene @bag.lastpocket = oldlastpocket @bag.setAllChoices(oldchoices) return item end # UI logic for withdrawing an item in the item storage screen. def pbWithdrawItemScreen if !$PokemonGlobal.pcItemStorage $PokemonGlobal.pcItemStorage = PCItemStorage.new end storage = $PokemonGlobal.pcItemStorage @scene.pbStartScene(storage) loop do item = @scene.pbChooseItem break if item==0 commands = [_INTL("Withdraw"),_INTL("Give"),_INTL("Cancel")] itemname = PBItems.getName(item) command = @scene.pbShowCommands(_INTL("{1} is selected.",itemname),commands) if command==0 # Withdraw qty = storage.pbQuantity(item) if qty>1 && !pbIsImportantItem?(item) qty = @scene.pbChooseNumber(_INTL("How many do you want to withdraw?"),qty) end next if qty<=0 if @bag.pbCanStore?(item,qty) if !storage.pbDeleteItem(item,qty) raise "Can't delete items from storage" end if [email protected](item,qty) raise "Can't withdraw items from storage" end @scene.pbRefresh dispqty = (pbIsImportantItem?(item)) ? 1 : qty itemname = (dispqty>1) ? PBItems.getNamePlural(item) : PBItems.getName(item) pbDisplay(_INTL("Withdrew {1} {2}.",dispqty,itemname)) else pbDisplay(_INTL("There's no more room in the Bag.")) end elsif command==1 # Give if $Trainer.pokemonCount==0 @scene.pbDisplay(_INTL("There is no Pokémon.")) return 0 elsif pbIsImportantItem?(item) @scene.pbDisplay(_INTL("The {1} can't be held.",itemname)) else pbFadeOutIn { sscene = PokemonParty_Scene.new sscreen = PokemonPartyScreen.new(sscene,$Trainer.party) if sscreen.pbPokemonGiveScreen(item) # If the item was held, delete the item from storage if !storage.pbDeleteItem(item,1) raise "Can't delete item from storage" end end @scene.pbRefresh } end end end @scene.pbEndScene end # UI logic for depositing an item in the item storage screen. def pbDepositItemScreen @scene.pbStartScene(@bag) if !$PokemonGlobal.pcItemStorage $PokemonGlobal.pcItemStorage = PCItemStorage.new end storage = $PokemonGlobal.pcItemStorage item = 0 loop do item = @scene.pbChooseItem break if item==0 qty = @bag.pbQuantity(item) if qty>1 && !pbIsImportantItem?(item) qty = @scene.pbChooseNumber(_INTL("How many do you want to deposit?"),qty) end if qty>0 if !storage.pbCanStore?(item,qty) pbDisplay(_INTL("There's no room to store items.")) else if [email protected](item,qty) raise "Can't delete items from Bag" end if !storage.pbStoreItem(item,qty) raise "Can't deposit items to storage" end @scene.pbRefresh dispqty = (pbIsImportantItem?(item)) ? 1 : qty itemname = (dispqty>1) ? PBItems.getNamePlural(item) : PBItems.getName(item) pbDisplay(_INTL("Deposited {1} {2}.",dispqty,itemname)) end end end @scene.pbEndScene end # UI logic for tossing an item in the item storage screen. def pbTossItemScreen if !$PokemonGlobal.pcItemStorage $PokemonGlobal.pcItemStorage = PCItemStorage.new end storage = $PokemonGlobal.pcItemStorage @scene.pbStartScene(storage) loop do item = @scene.pbChooseItem break if item==0 if pbIsImportantItem?(item) @scene.pbDisplay(_INTL("That's too important to toss out!")) next end qty = storage.pbQuantity(item) itemname = PBItems.getName(item) itemnameplural = PBItems.getNamePlural(item) if qty>1 [email protected](_INTL("Toss out how many {1}?",itemnameplural),qty) end if qty>0 itemname = itemnameplural if qty>1 if pbConfirm(_INTL("Is it OK to throw away {1} {2}?",qty,itemname)) if !storage.pbDeleteItem(item,qty) raise "Can't delete items from storage" end @scene.pbRefresh pbDisplay(_INTL("Threw away {1} {2}.",qty,itemname)) end end end @scene.pbEndScene end end
Made by StCooler for 18v
BTW Good script I like very much it is far better than normal bag on Pe
I will give you credits
Can anybody help me out with the graphics, the graphics link takes me to a spriters resource tab where I can't actually figure out which one to download?
Thanks for the script. However it kinda lags where changing the pockets, means the pocket name stays a little longer than usual. Is that intended or a visual bug?
ANIMEBG = false
I getting Error after insert mouse script. Can't Close the bag, choosing item etc.
After I removed it, the BW bag script works fine.
I getting Error after insert mouse script. Can't Close the bag, choosing item etc.
After I removed it, the BW bag script works fine.
#===============================================================================
# Easy Mouse System
# by Luka S.J
#
# Enjoy the script, and make sure to give credit!
# (DO NOT ALTER THE NAMES OF THE INDIVIDUAL SCRIPT SECTIONS OR YOU WILL BREAK
# YOUR SYSTEM!)
#-------------------------------------------------------------------------------
RNET = FileTest.exist?("Rpg.NET.dll") ? "Rpg.NET.dll" : false # Rpg.NET.dll reference
INACTIVITY_TIMER = -1 # The amount of time (in seconds) needed to pass before the
# mouse is considered as inactive. Set to a negative
# number to disable entirely.
CLICK_TIMEOUT = 1 # Amount of time (in seconds) before release of mouse click,
# until that mouse click becomes invalid
#===============================================================================
# ** Class Mouse
# by Luka S.J.
#-------------------------------------------------------------------------------
# Mouse input class to enable the usage of the module Mouse
#
# * Requires module Mouse (by Peter O.)
# * Requires module Input (by Peter O.)
# * Requires Rpg.NET.dll for Mouse scrolling
#===============================================================================
class Game_Mouse
attr_reader :visible
attr_reader :x
attr_reader :y
attr_reader :object_ox
attr_reader :object_oy
# replace nil with a valid path to a graphics location to display a sprite
# for the mouse
@@graphics_path = nil
# ----------------------------------------------------------------
# Requires the Rpg.NET.dll for mouse scrolling
if RNET
Win32API.new(RNET, 'Initialize', 'i', '').call(1)
WheelDelta = Win32API.new(RNET, 'InputGetWheelDelta', '', 'i')
end
# ----------------------------------------------------------------
# starts up the mouse and determines initial co-ordinate
def initialize
@position = Mouse.getMousePos
@cursor = Win32API.new("user32", "ShowCursor", "i", "i" )
@inactive_timer = 0
@wheel = 0
@delta = 0
@drag = nil
@hold = false
@drag_object = nil
@drag_buffer = 0
@visible = false
@long = 0
@rect_x = nil
@rect_y = nil
if @position.nil?
@x = -5000
@y = -5000
else
@x = @position[0]
@y = @position[1]
end
@static_x = @x
@static_y = @y
@moved_x = @x
@moved_y = @y
@x_offset = 0
@y_offset = 0
@object_ox = nil
@object_oy = nil
# used to make on screen mouse sprite (if a graphics path is defined)
@viewport = Viewport.new(0,0,Graphics.width,Graphics.height)
@viewport.z = 0x3FFFFFFF
@sprite = Sprite.new(@viewport)
if !@@graphics_path.nil?
@sprite.bitmap = BitmapCache.load_bitmap(@@graphics_path)
self.show
end
@sprite.visible = @visible
@sprite.x = @x
@sprite.y = @y
end
# updates the mouse (update placed in Input.update)
def update
@position = Mouse.getMousePos
@delta = WheelDelta.call / 120 if RNET
if [email protected]?
@x = @position[0]
@y = @position[1]
@x -= $ResizeOffsetX if $ResizeOffsetX
@y -= $ResizeOffsetY if $ResizeOffsetY
end
if INACTIVITY_TIMER >= 0 && self.notMoved?
@inactive_timer += 1
else
@inactive_timer = 0
end
@sprite.visible = @visible
@sprite.x = @x
@sprite.y = @y
end
# manipulation of the visibility of the mouse sprite
def show
@cursor.call(1)
@visible=true
end
def hide
@cursor.call(0)
@visible=false
end
# checks whether or not the mouse is active
def active?
return false if @position.nil?
return true if INACTIVITY_TIMER < 0
return false if @inactive_timer > INACTIVITY_TIMER*Graphics.frame_rate
return true
end
# global method to retrieve input button
def button?(arg=0)
input = [Input::Mouse_Left,Input::Mouse_Right,Input::Mouse_Middle]
if arg.is_a?(Numeric)
arg = 0 if arg < 0 || arg >= input.length
elsif arg.is_a?(String)
arg = 0 if arg=="left"
arg = 1 if arg=="right"
arg = 2 if arg=="middle"
else
arg = 0
end
return input[arg]
end
# gets the necessary object parameters for mouse checks
def objectParams?(object=nil)
return 0, 0, 0, 0 if object.nil?
x, y, w, h = 0, 0, 0, 0
if object.is_a?(Sprite)
x = (object.x-object.ox)
y = (object.y-object.oy)
if object.respond_to?(:viewport) && object.viewport
x+=object.viewport.rect.x
y+=object.viewport.rect.y
end
w = (object.bitmap.width*object.zoom_x) if object.bitmap
h = (object.bitmap.height*object.zoom_y) if object.bitmap
if object.respond_to?(:src_rect)
w = (object.src_rect.width*object.zoom_x) if object.bitmap && object.src_rect.width != object.bitmap.width
h = (object.src_rect.height*object.zoom_y) if object.bitmap && object.src_rect.height != object.bitmap.height
end
w = (object.width*object.zoom_x) if object.respond_to?(:width)
h = (object.height*object.zoom_y) if object.respond_to?(:height)
elsif object.is_a?(Viewport)
x, y, w, h = object.rect.x, object.rect.y, object.rect.width, object.rect.height
else
x = (object.x) if object.respond_to?(:x)
y = (object.y) if object.respond_to?(:y)
if object.respond_to?(:viewport) && object.viewport
x+=object.viewport.rect.x
y+=object.viewport.rect.y
end
w = (object.width) if object.respond_to?(:width)
h = (object.height) if object.respond_to?(:height)
end
return x, y, w, h
end
# checks if mouse is over a sprite (can define custom width and height)
def over?(*args)
object, width, height, void = args
return false if object.nil? || !self.active?
x, y, w, h = self.objectParams?(object)
w = width if !width.nil?; h = height if !height.nil?
return true if @x >= x && @x <= (x + w) and @y >= y && @y <= (y + h)
return false
end
# special method to check whether the mouse is over sprites with special shapes
def overPixel?(*args)
sprite, void = args
return false if !sprite.respond_to?(:bitmap) || !self.active?
bitmap = sprite.bitmap
return false if !self.over?(sprite)
x, y, w, h = self.objectParams?(sprite)
bx = @x-x
by = @y-y
return true if bitmap.get_pixel(bx,by).alpha>0
return false
end
# checks if the mouse is being dragged
def dragging?(*args)
object, input = args; dragging = false
return false if (!object.nil? && !self.over?(object)) || !self.active?
@drag = [@x,@y] if @drag.nil? && Input.pressex?(self.button?(input))
if @drag.is_a?(Array) && (@drag[0]!=@x || @drag[1]!=@y) && Input.pressex?(self.button?(input))
@drag = true
if !object.nil?
@drag_object = object
@object_ox = @x - object.x
@object_oy = @y - object.y
end
end
dragging = true if @drag==true
if !Input.pressex?(self.button?(input))
@drag = nil
@drag_object = nil
end
return dragging
end
# returns the distance moved when dragging the mouse
# relies on def dragging? / cannot be used standalone
def dragged_x?
return @x - @x_offset
end
def dragged_y?
return @y - @y_offset
end
# method used for dragging objects with the mouse
# can be confined to a Rect object
def drag_object?(*args)
object, lock, rect, input = *args
return false if !self.dragging?(object) || !self.active?
ret = false
if Input.pressex?(self.button?(input))
object.x = @x - @object_ox if lock!="vertical"
object.y = @y - @object_oy if lock!="horizontal"
if !rect.nil?
x, y, w, h = self.objectParams?(rect)
object.x = x if object.x < x if lock!="vertical"
object.y = y if object.y < y if lock!="horizontal"
width = self.objectParams?(object)[2]
height = self.objectParams?(object)[3]
object.x = x+w-width if object.x > x+w-width if lock!="vertical"
object.y = y+h-height if object.y > y+h-height if lock!="horizontal"
end
ret = true
end
return ret
end
# checks if mouse is being pressed and held down for a period of timme
def long?(*args)
object, input = args
return false if !self.active?
if self.press?(object,input)
@long+=1
else
@long = 0
end
return true if @long > Graphics.frame_rate*CLICK_TIMEOUT
return false
end
# creates a Rect object based on mouse dragging
# takes an optional object parameter to specify a "viewport" of sorts
def createRect(*args)
object, input = args
return Rect.new(0,0,0,0) if (!object.nil? && !self.over?(object) && Input.pressex?(self.button?(input)) && @rect_x.nil?) || !self.active?
if Input.pressex?(self.button?(input))
@rect_x = @x if @rect_x.nil?
@rect_y = @y if @rect_y.nil?
x = (@x < @rect_x) ? @x : @rect_x
y = (@y < @rect_y) ? @y : @rect_y
w = (@x < @rect_x) ? (@rect_x-@x) : (@x-@rect_x)
h = (@y < @rect_y) ? (@rect_y-@y) : (@y-@rect_y)
if !object.nil?
x2, y2, w2, h2 = self.objectParams?(object)
x-=x2; y-=y2
end
return Rect.new(x,y,w,h)
else
@rect_x = nil
@rect_y = nil
return Rect.new(0,0,0,0)
end
end
# checks if mouse is left clicking a sprite (can define custom width and height)
# (applies dragging)
def click?(*args)
object, input, width, height = args; ret = false
return false if (!object.nil? && !self.over?(object,width,height)) || !self.active?
@hold = true if Input.pressex?(self.button?(input))
if @hold && Input.releaseex?(self.button?(input))
@hold = false
ret = !self.dragging?(nil,input) && !(@long > Graphics.frame_rate*CLICK_TIMEOUT)
end
self.long?(nil,input)
return ret
end
def click_old?(*args)
object, input = args
return false if (!object.nil? && !self.over?(object)) || !self.active?
return Input.triggerex?(self.button?(input))
end
# checks if mouse is left clicking a sprite / continuous (can define custom width and height)
def press?(*args)
object, input, width, height = args
return false if (!object.nil? && !self.over?(object,width,height)) || !self.active?
return Input.pressex?(self.button?(input))
end
# checks if the mouse is in a certain area of the App window
def inArea?(*args)
x, y, w, h = args
return self.over?(Rect.new(x,y,w,h))
end
# checks if the mouse is left clicking in a certain area of the App window
def areaClick?(*args)
x, y, w, h, input = args
return self.click?(Rect.new(x,y,w,h),input)
end
# checks if the mouse is right clicking in a certain area of the App window
def areaPress?(*args)
x, y, w, h, input = args
return self.press?(Rect.new(x,y,w,h),input)
end
# checks if the mouse is idle/ not moving around
def isStatic?
ret=false
ret=true if @static_x==@x && @static_y==@y
if !(@static_x==@x) || !(@static_y==@y)
@static_x=@x
@static_y=@y
end
return ret
end
# same thing as above, but named differently for the BW kit
def notMoved?
ret=false
ret=true if @moved_x==@x && @smoved_y==@y
if !(@moved_x==@x) || !(@moved_y==@y)
@moved_x=@x
@moved_y=@y
end
return ret
end
# checks if mouse is scrolling upwards (works with multi-touch gestures)
def scroll_up?
return false if !self.active?
ret = false
ret = true if @delta-@wheel>0
@inactive_timer = 0 if ret
if @delta!=@wheel && ret
@wheel = @delta
end
return ret
end
# checks if mouse is scrolling downwards (works with multi-touch gestures)
def scroll_down?
return false if !self.active?
ret = false
ret = true if @delta-@wheel<0
@inactive_timer = 0 if ret
if @delta!=@wheel && ret
@wheel = @delta
end
return ret
end
#-----------------------------------------------------------------------------
# Legacy functions
#-----------------------------------------------------------------------------
def leftClick?(object=nil,width=nil,height=nil)
return self.click?(object,0,width,height)
end
def rightClick?(object=nil,width=nil,height=nil)
return self.click_old?(object,1,width,height)
end
def leftPress?(object=nil,width=nil,height=nil)
return self.press?(object,0,width,height)
end
def rightPress?(object=nil,width=nil,height=nil)
return self.press?(object,1,width,height)
end
def inAreaLeft?(x,y,w,h)
self.areaClick?(x,y,w,h,0)
end
def inAreaRight?(x,y,w,h)
self.areaClick?(x,y,w,h,1)
end
def inAreaLeftPress?(x,y,w,h)
self.areaPress?(x,y,w,h,0)
end
def inAreaRightPress?(x,y,w,h)
self.areaPress?(x,y,w,h,1)
end
def drag_object_x?(object,rect=nil)
return self.drag_object?(object,"horizontal",rect)
end
def drag_object_y?(object,rect=nil)
return self.drag_object?(object,"vertical",rect)
end
end
#===============================================================================
# Mouse update methods for the Input module
#===============================================================================
module Input
Mouse_Left = 0x01
Mouse_Right = 0x02
Mouse_Middle = 0x04
class << Input
alias update_mouse update
end
def self.update
$mouse.update if defined?($mouse) && $mouse
update_mouse
end
end
#===============================================================================
# Initializes the Game_Mouse class
#===============================================================================
$mouse = Game_Mouse.new
I figured you're not using the same mouse module which i do, replace your mouse script with this,
Spoiler:Code:#=============================================================================== # Easy Mouse System # by Luka S.J # # Enjoy the script, and make sure to give credit! # (DO NOT ALTER THE NAMES OF THE INDIVIDUAL SCRIPT SECTIONS OR YOU WILL BREAK # YOUR SYSTEM!) #------------------------------------------------------------------------------- RNET = FileTest.exist?("Rpg.NET.dll") ? "Rpg.NET.dll" : false # Rpg.NET.dll reference INACTIVITY_TIMER = -1 # The amount of time (in seconds) needed to pass before the # mouse is considered as inactive. Set to a negative # number to disable entirely. CLICK_TIMEOUT = 1 # Amount of time (in seconds) before release of mouse click, # until that mouse click becomes invalid #=============================================================================== # ** Class Mouse # by Luka S.J. #------------------------------------------------------------------------------- # Mouse input class to enable the usage of the module Mouse # # * Requires module Mouse (by Peter O.) # * Requires module Input (by Peter O.) # * Requires Rpg.NET.dll for Mouse scrolling #=============================================================================== class Game_Mouse attr_reader :visible attr_reader :x attr_reader :y attr_reader :object_ox attr_reader :object_oy # replace nil with a valid path to a graphics location to display a sprite # for the mouse @@graphics_path = nil # ---------------------------------------------------------------- # Requires the Rpg.NET.dll for mouse scrolling if RNET Win32API.new(RNET, 'Initialize', 'i', '').call(1) WheelDelta = Win32API.new(RNET, 'InputGetWheelDelta', '', 'i') end # ---------------------------------------------------------------- # starts up the mouse and determines initial co-ordinate def initialize @position = Mouse.getMousePos @cursor = Win32API.new("user32", "ShowCursor", "i", "i" ) @inactive_timer = 0 @wheel = 0 @delta = 0 @drag = nil @hold = false @drag_object = nil @drag_buffer = 0 @visible = false @long = 0 @rect_x = nil @rect_y = nil if @position.nil? @x = -5000 @y = -5000 else @x = @position[0] @y = @position[1] end @static_x = @x @static_y = @y @moved_x = @x @moved_y = @y @x_offset = 0 @y_offset = 0 @object_ox = nil @object_oy = nil # used to make on screen mouse sprite (if a graphics path is defined) @viewport = Viewport.new(0,0,Graphics.width,Graphics.height) @viewport.z = 0x3FFFFFFF @sprite = Sprite.new(@viewport) if !@@graphics_path.nil? @sprite.bitmap = BitmapCache.load_bitmap(@@graphics_path) self.show end @sprite.visible = @visible @sprite.x = @x @sprite.y = @y end # updates the mouse (update placed in Input.update) def update @position = Mouse.getMousePos @delta = WheelDelta.call / 120 if RNET if [email protected]? @x = @position[0] @y = @position[1] @x -= $ResizeOffsetX if $ResizeOffsetX @y -= $ResizeOffsetY if $ResizeOffsetY end if INACTIVITY_TIMER >= 0 && self.notMoved? @inactive_timer += 1 else @inactive_timer = 0 end @sprite.visible = @visible @sprite.x = @x @sprite.y = @y end # manipulation of the visibility of the mouse sprite def show @cursor.call(1) @visible=true end def hide @cursor.call(0) @visible=false end # checks whether or not the mouse is active def active? return false if @position.nil? return true if INACTIVITY_TIMER < 0 return false if @inactive_timer > INACTIVITY_TIMER*Graphics.frame_rate return true end # global method to retrieve input button def button?(arg=0) input = [Input::Mouse_Left,Input::Mouse_Right,Input::Mouse_Middle] if arg.is_a?(Numeric) arg = 0 if arg < 0 || arg >= input.length elsif arg.is_a?(String) arg = 0 if arg=="left" arg = 1 if arg=="right" arg = 2 if arg=="middle" else arg = 0 end return input[arg] end # gets the necessary object parameters for mouse checks def objectParams?(object=nil) return 0, 0, 0, 0 if object.nil? x, y, w, h = 0, 0, 0, 0 if object.is_a?(Sprite) x = (object.x-object.ox) y = (object.y-object.oy) if object.respond_to?(:viewport) && object.viewport x+=object.viewport.rect.x y+=object.viewport.rect.y end w = (object.bitmap.width*object.zoom_x) if object.bitmap h = (object.bitmap.height*object.zoom_y) if object.bitmap if object.respond_to?(:src_rect) w = (object.src_rect.width*object.zoom_x) if object.bitmap && object.src_rect.width != object.bitmap.width h = (object.src_rect.height*object.zoom_y) if object.bitmap && object.src_rect.height != object.bitmap.height end w = (object.width*object.zoom_x) if object.respond_to?(:width) h = (object.height*object.zoom_y) if object.respond_to?(:height) elsif object.is_a?(Viewport) x, y, w, h = object.rect.x, object.rect.y, object.rect.width, object.rect.height else x = (object.x) if object.respond_to?(:x) y = (object.y) if object.respond_to?(:y) if object.respond_to?(:viewport) && object.viewport x+=object.viewport.rect.x y+=object.viewport.rect.y end w = (object.width) if object.respond_to?(:width) h = (object.height) if object.respond_to?(:height) end return x, y, w, h end # checks if mouse is over a sprite (can define custom width and height) def over?(*args) object, width, height, void = args return false if object.nil? || !self.active? x, y, w, h = self.objectParams?(object) w = width if !width.nil?; h = height if !height.nil? return true if @x >= x && @x <= (x + w) and @y >= y && @y <= (y + h) return false end # special method to check whether the mouse is over sprites with special shapes def overPixel?(*args) sprite, void = args return false if !sprite.respond_to?(:bitmap) || !self.active? bitmap = sprite.bitmap return false if !self.over?(sprite) x, y, w, h = self.objectParams?(sprite) bx = @x-x by = @y-y return true if bitmap.get_pixel(bx,by).alpha>0 return false end # checks if the mouse is being dragged def dragging?(*args) object, input = args; dragging = false return false if (!object.nil? && !self.over?(object)) || !self.active? @drag = [@x,@y] if @drag.nil? && Input.pressex?(self.button?(input)) if @drag.is_a?(Array) && (@drag[0]!=@x || @drag[1]!=@y) && Input.pressex?(self.button?(input)) @drag = true if !object.nil? @drag_object = object @object_ox = @x - object.x @object_oy = @y - object.y end end dragging = true if @drag==true if !Input.pressex?(self.button?(input)) @drag = nil @drag_object = nil end return dragging end # returns the distance moved when dragging the mouse # relies on def dragging? / cannot be used standalone def dragged_x? return @x - @x_offset end def dragged_y? return @y - @y_offset end # method used for dragging objects with the mouse # can be confined to a Rect object def drag_object?(*args) object, lock, rect, input = *args return false if !self.dragging?(object) || !self.active? ret = false if Input.pressex?(self.button?(input)) object.x = @x - @object_ox if lock!="vertical" object.y = @y - @object_oy if lock!="horizontal" if !rect.nil? x, y, w, h = self.objectParams?(rect) object.x = x if object.x < x if lock!="vertical" object.y = y if object.y < y if lock!="horizontal" width = self.objectParams?(object)[2] height = self.objectParams?(object)[3] object.x = x+w-width if object.x > x+w-width if lock!="vertical" object.y = y+h-height if object.y > y+h-height if lock!="horizontal" end ret = true end return ret end # checks if mouse is being pressed and held down for a period of timme def long?(*args) object, input = args return false if !self.active? if self.press?(object,input) @long+=1 else @long = 0 end return true if @long > Graphics.frame_rate*CLICK_TIMEOUT return false end # creates a Rect object based on mouse dragging # takes an optional object parameter to specify a "viewport" of sorts def createRect(*args) object, input = args return Rect.new(0,0,0,0) if (!object.nil? && !self.over?(object) && Input.pressex?(self.button?(input)) && @rect_x.nil?) || !self.active? if Input.pressex?(self.button?(input)) @rect_x = @x if @rect_x.nil? @rect_y = @y if @rect_y.nil? x = (@x < @rect_x) ? @x : @rect_x y = (@y < @rect_y) ? @y : @rect_y w = (@x < @rect_x) ? (@rect_x-@x) : (@x-@rect_x) h = (@y < @rect_y) ? (@rect_y-@y) : (@y-@rect_y) if !object.nil? x2, y2, w2, h2 = self.objectParams?(object) x-=x2; y-=y2 end return Rect.new(x,y,w,h) else @rect_x = nil @rect_y = nil return Rect.new(0,0,0,0) end end # checks if mouse is left clicking a sprite (can define custom width and height) # (applies dragging) def click?(*args) object, input, width, height = args; ret = false return false if (!object.nil? && !self.over?(object,width,height)) || !self.active? @hold = true if Input.pressex?(self.button?(input)) if @hold && Input.releaseex?(self.button?(input)) @hold = false ret = !self.dragging?(nil,input) && !(@long > Graphics.frame_rate*CLICK_TIMEOUT) end self.long?(nil,input) return ret end def click_old?(*args) object, input = args return false if (!object.nil? && !self.over?(object)) || !self.active? return Input.triggerex?(self.button?(input)) end # checks if mouse is left clicking a sprite / continuous (can define custom width and height) def press?(*args) object, input, width, height = args return false if (!object.nil? && !self.over?(object,width,height)) || !self.active? return Input.pressex?(self.button?(input)) end # checks if the mouse is in a certain area of the App window def inArea?(*args) x, y, w, h = args return self.over?(Rect.new(x,y,w,h)) end # checks if the mouse is left clicking in a certain area of the App window def areaClick?(*args) x, y, w, h, input = args return self.click?(Rect.new(x,y,w,h),input) end # checks if the mouse is right clicking in a certain area of the App window def areaPress?(*args) x, y, w, h, input = args return self.press?(Rect.new(x,y,w,h),input) end # checks if the mouse is idle/ not moving around def isStatic? ret=false ret=true if @static_x==@x && @static_y==@y if !(@static_x==@x) || !(@static_y==@y) @static_x=@x @static_y=@y end return ret end # same thing as above, but named differently for the BW kit def notMoved? ret=false ret=true if @moved_x==@x && @smoved_y==@y if !(@moved_x==@x) || !(@moved_y==@y) @moved_x=@x @moved_y=@y end return ret end # checks if mouse is scrolling upwards (works with multi-touch gestures) def scroll_up? return false if !self.active? ret = false ret = true if @delta-@wheel>0 @inactive_timer = 0 if ret if @delta!=@wheel && ret @wheel = @delta end return ret end # checks if mouse is scrolling downwards (works with multi-touch gestures) def scroll_down? return false if !self.active? ret = false ret = true if @delta-@wheel<0 @inactive_timer = 0 if ret if @delta!=@wheel && ret @wheel = @delta end return ret end #----------------------------------------------------------------------------- # Legacy functions #----------------------------------------------------------------------------- def leftClick?(object=nil,width=nil,height=nil) return self.click?(object,0,width,height) end def rightClick?(object=nil,width=nil,height=nil) return self.click_old?(object,1,width,height) end def leftPress?(object=nil,width=nil,height=nil) return self.press?(object,0,width,height) end def rightPress?(object=nil,width=nil,height=nil) return self.press?(object,1,width,height) end def inAreaLeft?(x,y,w,h) self.areaClick?(x,y,w,h,0) end def inAreaRight?(x,y,w,h) self.areaClick?(x,y,w,h,1) end def inAreaLeftPress?(x,y,w,h) self.areaPress?(x,y,w,h,0) end def inAreaRightPress?(x,y,w,h) self.areaPress?(x,y,w,h,1) end def drag_object_x?(object,rect=nil) return self.drag_object?(object,"horizontal",rect) end def drag_object_y?(object,rect=nil) return self.drag_object?(object,"vertical",rect) end end #=============================================================================== # Mouse update methods for the Input module #=============================================================================== module Input Mouse_Left = 0x01 Mouse_Right = 0x02 Mouse_Middle = 0x04 class << Input alias update_mouse update end def self.update $mouse.update if defined?($mouse) && $mouse update_mouse end end #=============================================================================== # Initializes the Game_Mouse class #=============================================================================== $mouse = Game_Mouse.new
So just asking, what version if the mouse module is this?
[updated post for v19 support]