Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Missing an oval shadow for the Dye Selection underneath the character, fyi.
- # To restock dyes for a $Shop, use
- # pbRestockDyes(key, color, stock,color,stock,etc.) #Can go infinite
- # pbRestockDyes(key, "all", stock) to restock all dyes in $Shop[key]
- # To open the main dye menu: pbDyeMenu
- # To open just the dye shop: pbDyeShop
- # Edit shops at line 47+. You'll MOST likely have to rewrite a lot of the shop
- # stuff. Sorry bout that. Wasn't sure how you'd like it.
- MOVE_SOUND = "TileGameMove"
- $Shop = {}
- # Temporary dye storage for the trainer
- $Inventory = []
- # The trainer outfit. Will probably be $Trainer.outfit.
- $Outfit = 0
- class Dye # Dye class. Stock is also used for the inv. dye storage, not just shop.
- attr_accessor :color
- attr_accessor :stock
- attr_accessor :price
- def initialize(color, stock, price=0)
- self.color = color
- self.stock = stock
- self.price = price
- end
- def id # 0-based array for IDs (order of dyes.png as well)
- array = ["Red","Blue","Green","Orange","Yellow","Pink","Purple",
- "Black","White"].index(self.color)
- end
- end
- def dyes(*args)
- ar = []
- i = 0
- while i < args.size
- ar.push(Dye.new(args[i],args[i+1],args[i+2]))
- i += 3
- end
- ar
- end
- # "def dyes" just converts the arguments into classes. This way, you don't have
- # to write out "Dye.new("Blue",4,5000)," out all the time.
- $Shop["one"] = dyes(
- "Blue",4,5000,
- "Red",4,5000,
- "Green",4,5000,
- "Orange",4,5000,
- "Yellow",4,5000,
- "Pink",4,5000,
- "Purple",4,5000,
- "Black",2,10000,
- "White",2,10000)
- $Shop["two"] = dyes(
- "Blue",4,5000,
- "Red",4,5000,
- "Green",4,5000,
- "Orange",4,5000,
- "Yellow",4,5000,
- "Pink",4,5000,
- "Purple",4,5000,
- "Black",2,10000,
- "White",2,10000,
- "Red",1,4000,
- "Green",2,5000,
- "Blue",4,7500)
- def pbDyeMenu
- DyeMenu.new
- end
- def pbRestockDyes(*args)
- for i in 0...$Shop[args[0]].size
- if args[1] == "all"
- $Shop[args[0]][i].stock = args[2]
- else
- for j in 1...args.size
- next if j % 2 == 0
- if args[j] == $Shop[args[0]][i].color
- $Shop[args[0]][i].stock = args[j+1]
- end
- end
- end
- end
- end
- def dotNumber(int, char = ',') # Better display for numbers (9999999 -> 9,999,999)
- chars = int.to_s.scan(/\w/).reverse!
- for i in 0...chars.size+1
- chars.insert(i, char) if ((i + 1) % 4 == 0) && chars.length > i
- end
- chars.reverse!.to_s
- end
- class ShopBox < Sprite
- attr_accessor :dye
- attr_reader :selected
- def initialize(viewport, dye)
- super(viewport)
- self.dye = dye
- self.bitmap = Bitmap.new("PR/Dye Shop/Resources/box1")
- end
- def selected=(val)
- if val
- self.bitmap = Bitmap.new("PR/Dye Shop/Resources/box2")
- else
- self.bitmap = Bitmap.new("PR/Dye Shop/Resources/box1")
- end
- end
- end
- class DyeMenu
- def initialize(index = 0)
- #idk why
- raise ArgumentError.new(_INTL("Index cannot be greater than 2 or lower than 0.")) if index < 0 || index > 2
- @viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
- @viewport.z = 99997
- @sprites = {}
- @sprites["bg"] = Sprite.new(@viewport)
- @sprites["bg"].bitmap = Bitmap.new("PR/Dye Menu/Resources/background")
- @sprites["bg"].opacity = 0
- @sprites["bg"].z = -1
- @sprites["bmp"] = Sprite.new(@viewport)
- @sprites["bmp"].bitmap = Bitmap.new(Graphics.width*3,Graphics.height)
- @sprites["bmp"].opacity = 0
- @sprites["bmp"].z = 2
- @txt = @sprites["bmp"].bitmap
- @sel = index
- pbSetSystemFont(@txt)
- @txt.font.size = 20
- @sprites["cursor"] = Sprite.new(@viewport)
- @sprites["cursor"].bitmap = Bitmap.new("PR/Dye Menu/Resources/cursor")
- @sprites["cursor"].opacity = 0
- @sprites["cursor"].x = 24
- @sprites["cursor"].y = 16 + 56 * @sel
- @sprites["cursor"].z = 2
- for i in 0..2
- @sprites["btn#{i}"] = Sprite.new(@viewport)
- @sprites["btn#{i}"].bitmap = Bitmap.new(Graphics.width, Graphics.height)
- @sprites["btn#{i}"].bitmap.fill_rect(24,16+56*i, 272,43,Color.new(255,255,255))
- @sprites["btn#{i}"].opacity = 0
- end
- pbDrawOutlineText(@txt,-1,-83,320,240,"Shop",Color.new(0,0,0),Color.new(0,0,0,0),1)
- pbDrawOutlineText(@txt,-1,-26,320,240,"Dye Selection",Color.new(0,0,0),Color.new(0,0,0,0),1)
- pbDrawOutlineText(@txt,-1,30,320,240,"Crafting",Color.new(0,0,0),Color.new(0,0,0,0),1)
- 16.times do
- Graphics.update
- @sprites["bg"].opacity += 16
- @sprites["bmp"].opacity += 16
- @sprites["cursor"].opacity += 16
- for i in 0..2
- @sprites["btn#{i}"].opacity += 16
- end
- end
- main
- end
- def main
- loop do
- Graphics.update
- Input.update
- break if Input.trigger?(Input::B)
- move(:down) if Input.trigger?(Input::DOWN)
- move(:up) if Input.trigger?(Input::UP)
- choose if Input.trigger?(Input::C)
- end
- dispose
- end
- def move(dir)
- if @sel > 0 && dir == :up
- @sel -= 1
- pbSEPlay(MOVE_SOUND)
- elsif @sel < 2 && dir == :down
- @sel += 1
- pbSEPlay(MOVE_SOUND)
- end
- @sprites["cursor"].y = 16 + 56 * @sel
- end
- def choose
- hide_buttons
- if @sel == 0
- pbDyeShop("one", false)
- elsif @sel == 1
- pbDyeSelection(false)
- else
- p "crafting"
- end
- show_buttons
- end
- def hide_buttons
- for i in 0...12
- Graphics.update
- @sprites["bmp"].opacity -= 32
- @sprites["cursor"].opacity -= 24
- for j in 0..2
- @sprites["btn#{j}"].opacity -= 24
- end
- end
- end
- def show_buttons
- for i in 0...12
- Graphics.update
- @sprites["bmp"].opacity += 32 if i > 3
- @sprites["cursor"].opacity += 24
- for j in 0..2
- @sprites["btn#{j}"].opacity += 24
- end
- end
- end
- def dispose(anim = true)
- 16.times do
- Graphics.update if anim
- @sprites["bg"].opacity -= 16
- @sprites["bmp"].opacity -= 16
- for i in 0..2
- @sprites["btn#{i}"].opacity -= 16
- end
- end
- pbDisposeSpriteHash(@sprites)
- @viewport.dispose
- pbWait(1)
- end
- end
- def pbDyeShop(shop, directly = true)
- for key in $Shop.keys
- DyeShop.new($Shop[key], directly) if key == shop
- end
- end
- def pbDyeSelection(directly = true)
- DyeSelection.new(directly)
- end
- class DyeShop
- def initialize(shop, directly = true)
- @shop = shop # The dyes the shop should sell
- @viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
- @viewport.z = 99999
- @sprites = {}
- @sprites["bg"] = Sprite.new(@viewport)
- @sprites["bg"].bitmap = Bitmap.new("PR/Dye Menu/Resources/background")
- @sprites["bg"].opacity = 0
- @sprites["label"] = Sprite.new(@viewport)
- @sprites["label"].bitmap = Bitmap.new("PR/Dye Shop/Resources/clothing_dyes")
- @sprites["label"].y = -1 * @sprites["label"].bitmap.height
- @sprites["money"] = Sprite.new(@viewport)
- @sprites["money"].bitmap = Bitmap.new("PR/Dye Shop/Resources/money")
- @sprites["money"].x = Graphics.width - @sprites["money"].bitmap.width
- @sprites["money"].y = -1 * @sprites["money"].bitmap.height
- @sprites["moneybmp"] = Sprite.new(@viewport)
- @sprites["moneybmp"].bitmap = Bitmap.new(Graphics.width*3, Graphics.height)
- @sprites["moneybmp"].z = 2
- @sprites["moneybmp"].opacity = 0
- @money = @sprites["moneybmp"].bitmap
- pbSetSystemFont(@money)
- @money.font.size = 17
- # Money has its own bitmap as it should never be moved.
- @sprites["back"] = Sprite.new(@viewport)
- @sprites["back"].bitmap = Bitmap.new("PR/Dye Shop/Resources/back1")
- @sprites["back"].y = Graphics.height
- @sprites["bmp"] = Sprite.new(@viewport)
- @sprites["bmp"].bitmap = Bitmap.new(Graphics.width*3, Graphics.height)
- @sprites["bmp"].z = 2
- @sprites["bmp"].opacity = 0
- @txt = @sprites["bmp"].bitmap
- pbSetSystemFont(@txt)
- @sprites["bmp"].bitmap.font.size = 17
- if @shop.nil? || @shop.size == 0
- pbDrawTextPositions(@txt,[[_INTL("This shop doesn't sell any dyes."),
- Graphics.width / 2, Graphics.height / 2, 2, Color.new(64,64,64)]])
- 12.times { |i| Graphics.update; @sprites["bg"].opacity += 24; @sprites["bmp"].opacity += 32 if i > 3 }
- loop { Graphics.update; break if Input.trigger?(Input::C) || Input.trigger?(Input::B) }
- dispose
- else
- @sel = 0 # Selected box
- @box = 0 # Determine what box is selected for moving the boxes
- # Due to a strange bug in this RGSS version (presumably), I had to
- # use @page as a workaround.
- @page = 0
- @last = [2,2] # Used for choosing the "Back" button
- @directly = directly # Whether a new main menu scene should be started or not
- @sprites["shopbmp"] = Sprite.new(@viewport)
- @sprites["shopbmp"].bitmap = Bitmap.new(Graphics.width*3, Graphics.height)
- @sprites["shopbmp"].opacity = 0
- @sprites["shopbmp"].z = 2
- @shop_txt = @sprites["shopbmp"].bitmap
- pbSetSystemFont(@shop_txt)
- @shop_txt.font.size = 17
- load_boxes # Setup boxes/dyes/text. Everything is drawn, some just not visible
- @sprites["box0"].selected = true
- pbDrawTextPositions(@money,[[_INTL("$"+dotNumber($Trainer.money)),Graphics.width - 1,1,true,Color.new(64,64,64),Color.new(255,255,255,48)]])
- for i in 0...12
- Graphics.update
- @sprites["bg"].opacity += 32
- @sprites["label"].y += @sprites["label"].bitmap.height / 12
- @sprites["money"].y += @sprites["money"].bitmap.height / 12
- @sprites["back"].y -= 1.916
- num = @shop.size
- num += @shop.size % 3
- num = 9 if num < 9
- for j in 0...num
- @sprites["box#{j}"].opacity += 32 if i > 3
- @sprites["dye#{j}"].opacity += 32 if i > 3 rescue nil # doesn't have to exist
- end
- @sprites["bmp"].opacity += 32 if i > 3
- @sprites["moneybmp"].opacity += 32 if i > 3
- @sprites["shopbmp"].opacity += 32 if i > 3
- end
- main
- end
- end
- def load_boxes
- num = @shop.size
- num += @shop.size % 3
- num = 9 if num < 9
- for i in 0...num
- x = 6 + 105 * (i / 3).floor
- y = 27 + 64 * (i % 3)
- @sprites["box#{i}"] = ShopBox.new(@viewport, @shop[i])
- @sprites["box#{i}"].x = x
- @sprites["box#{i}"].y = y
- @sprites["box#{i}"].opacity = 0
- begin
- pbDrawTextPositions(@shop_txt,[[_INTL("$"+dotNumber(@sprites["box#{i}"].dye.price).to_s),
- x+@sprites["box#{i}"].bitmap.width-8,y+4,true,Color.new(64,64,64),
- Color.new(0,0,0,0)],
- [_INTL(@sprites["box#{i}"].dye.color+" Dye"),x+@sprites["box#{i}"].bitmap.width / 2,y+@sprites["box#{i}"].bitmap.height-20,2,Color.new(64,64,64),Color.new(0,0,0,0)]])
- pbDrawTextPositions(@txt,[[_INTL("x"+@sprites["box#{i}"].dye.stock.to_s),x+8,y+4,false,Color.new(64,64,64),
- Color.new(0,0,0,0)],])
- # I didn't deem a new Sprite class for Dye necessary
- @sprites["dye#{i}"] = Sprite.new(@viewport)
- @sprites["dye#{i}"].bitmap = Bitmap.new("PR/dyes#{i == 0 ? "2" : "1"}")
- @sprites["dye#{i}"].src_rect.width = @sprites["dye#{i}"].bitmap.height
- @sprites["dye#{i}"].src_rect.x = 32 * @shop[i].id
- @sprites["dye#{i}"].oy = @sprites["dye#{i}"].bitmap.height / 2
- @sprites["dye#{i}"].x = x + @sprites["box#{i}"].bitmap.width / 2 - 16
- @sprites["dye#{i}"].y = y + @sprites["box#{i}"].bitmap.height / 2
- @sprites["dye#{i}"].opacity = 0
- rescue; end
- end
- end
- def main
- loop do
- Graphics.update
- Input.update
- break if Input.trigger?(Input::B) || @brk
- move(:down) if Input.trigger?(Input::DOWN)
- move(:up) if Input.trigger?(Input::UP)
- move(:left) if Input.trigger?(Input::LEFT)
- move(:right) if Input.trigger?(Input::RIGHT)
- purchase if Input.trigger?(Input::C)
- end
- dispose
- end
- def purchase
- if @sel == -1
- @brk = true
- else
- return if !@shop[@sel]
- tone = Sprite.new(@viewport)
- tone.bitmap = Bitmap.new(Graphics.width, Graphics.height)
- tone.bitmap.fill_rect(0,0,Graphics.width,Graphics.height,Color.new(0,0,0))
- tone.opacity = 0
- tone.z = 1
- bmp = Sprite.new(@viewport)
- bmp.z = 3
- bmp.opacity = 0
- bmp.bitmap = Bitmap.new(Graphics.width, Graphics.height)
- pbSetSystemFont(bmp.bitmap)
- bmp.bitmap.font.size = 20
- ch = Sprite.new(@viewport)
- ch.z = 3
- ch.opacity = 0
- ch.bitmap = Bitmap.new(Graphics.width, Graphics.height)
- pbSetSystemFont(ch.bitmap)
- ch.bitmap.font.size = 20
- if @shop[@sel].stock < 1
- pbDrawTextPositions(bmp.bitmap,[[_INTL("This dye is out of stock."),
- Graphics.width / 2, Graphics.height / 2, 2, Color.new(255,255,255),
- Color.new(0,0,0,0)]])
- 8.times do
- Graphics.update
- tone.opacity += 12
- bmp.opacity += 32
- end
- 24.times { Graphics.update }
- elsif $Trainer.money < @shop[@sel].price
- pbDrawTextPositions(bmp.bitmap,[[_INTL("You don't have enough money."),
- Graphics.width / 2, Graphics.height / 2, 2, Color.new(255,255,255),
- Color.new(0,0,0,0)]])
- 8.times do
- Graphics.update
- tone.opacity += 12
- bmp.opacity += 32
- end
- 24.times { Graphics.update }
- else
- pbDrawTextPositions(bmp.bitmap,[[_INTL("Are you sure you want to buy #{@shop[@sel].color} Dye?"),
- Graphics.width / 2, Graphics.height / 2 - 10, 2, Color.new(255,255,255),
- Color.new(0,0,0,0)],
- [_INTL("for $#{dotNumber(@shop[@sel].price)}?"), Graphics.width / 2,
- Graphics.height / 2 + 10, 2, Color.new(255,255,255), Color.new(0,0,0,0)]])
- pbDrawTextPositions(ch.bitmap,[[_INTL("Yes"), Graphics.width / 2 - 48, Graphics.height / 2 + 48, 2,
- Color.new(255,255,255),Color.new(0,0,0,0)],
- [_INTL("No"), Graphics.width / 2 + 48, Graphics.height / 2 + 48, 2,
- Color.new(128,128,128),Color.new(0,0,0,0)]])
- 8.times do
- Graphics.update
- tone.opacity += 12
- bmp.opacity += 32
- ch.opacity += 32
- end
- sel = 0
- loop do
- Graphics.update
- Input.update
- if Input.trigger?(Input::LEFT)
- sel = 0
- ch.bitmap.clear
- pbDrawTextPositions(ch.bitmap,[[_INTL("Yes"), Graphics.width / 2 - 48, Graphics.height / 2 + 48, 2,
- Color.new(255,255,255),Color.new(0,0,0,0)],
- [_INTL("No"), Graphics.width / 2 + 48, Graphics.height / 2 + 48, 2,
- Color.new(128,128,128),Color.new(0,0,0,0)]])
- end
- if Input.trigger?(Input::RIGHT)
- sel = 1
- ch.bitmap.clear
- pbDrawTextPositions(ch.bitmap,[[_INTL("Yes"), Graphics.width / 2 - 48, Graphics.height / 2 + 48, 2,
- Color.new(128,128,128),Color.new(0,0,0,0)],
- [_INTL("No"), Graphics.width / 2 + 48, Graphics.height / 2 + 48, 2,
- Color.new(255,255,255),Color.new(0,0,0,0)]])
- end
- if Input.trigger?(Input::B)
- sel = 1
- break
- end
- break if Input.trigger?(Input::C)
- end
- pbWait(1)
- if sel == 0
- 8.times do
- Graphics.update
- bmp.opacity -= 32
- ch.opacity -= 32
- end
- bmp.bitmap.clear
- if $Trainer.money >= @shop[@sel].price
- pbDrawTextPositions(bmp.bitmap,[[_INTL("You succesfully purchased #{@shop[@sel].color} Dye."),
- Graphics.width / 2, Graphics.height / 2, 2, Color.new(255,255,255),
- Color.new(0,0,0,0)]])
- end
- 8.times do
- Graphics.update
- bmp.opacity += 32
- end
- 24.times { Graphics.update }
- if $Trainer.money >= @shop[@sel].price
- $Trainer.money -= @shop[@sel].price
- @shop[@sel].stock -= 1
- ar = []
- for i in 0...$Inventory.size
- if $Inventory[i].color == @shop[@sel].color
- added = true
- ar.push(Dye.new(@shop[@sel].color,$Inventory[i].stock+1))
- else
- ar.push($Inventory[i])
- end
- end
- ar.push(Dye.new(@shop[@sel].color,1)) if !added
- $Inventory = ar
- x = @sprites["bmp"].x
- @txt.dispose
- @money.clear
- pbDrawTextPositions(@money,[[_INTL("$"+dotNumber($Trainer.money)),Graphics.width - 1,1,true,Color.new(64,64,64),Color.new(255,255,255,48)]])
- @sprites["bmp"] = Sprite.new(@viewport)
- @sprites["bmp"].bitmap = Bitmap.new(Graphics.width*3, Graphics.height)
- @txt = @sprites["bmp"].bitmap
- pbSetSystemFont(@txt)
- @txt.font.size = 17
- num = @shop.size
- num += @shop.size % 3
- num = 9 if num < 9
- @sprites["bmp"].x = 0
- for i in 0...num
- pbDrawTextPositions(@txt,[[_INTL("x"+@sprites["box#{i}"].dye.stock.to_s),
- @sprites["box#{i}"].x+8+105*@page,@sprites["box#{i}"].y+4,false,Color.new(64,64,64),
- Color.new(0,0,0,0)]])
- end
- @sprites["bmp"].x = x
- end
- end
- end
- 8.times do
- Graphics.update
- tone.opacity -= 12
- bmp.opacity -= 32
- ch.opacity -= 32
- end
- tone.dispose
- bmp.dispose
- ch.dispose
- pbWait(1)
- end
- end
- def move(dir)
- play = false
- if @sel > -1
- @sprites["box#{@sel}"].selected = false
- begin
- @sprites["dye#{@sel}"].bitmap = Bitmap.new("PR/dyes1")
- @sprites["dye#{@sel}"].src_rect.width = @sprites["dye#{@sel}"].bitmap.height
- @sprites["dye#{@sel}"].src_rect.x = @sprites["dye#{@sel}"].src_rect.width * @sprites["box#{@sel}"].dye.id
- rescue; end
- else
- @sprites["back"].bitmap = Bitmap.new("PR/Dye Shop/Resources/back1")
- end
- if dir == :up
- if @sel == -1 # Back button
- @sel = @last[0]
- @box = @last[1]
- play = true
- elsif @sel != 0 && @sel % 3 != 0
- @sel -= 1
- @box -= 1
- play = true
- end
- elsif dir == :down
- if (@sel + 1) % 3 != 0
- @sel += 1
- @box += 1
- play = true
- elsif @sel > -1
- @last = [@sel,@box]
- @sel = -1 # Back button
- @box = -1
- play = true
- end
- elsif dir == :right
- if @box > 5 && @box < 9
- if @sel % 3 == 0 && @sel + 3 < @shop.size ||
- (@sel - 1) % 3 == 0 && @sel + 2 < @shop.size ||
- (@sel - 2) % 3 == 0 && @sel + 1 < @shop.size
- for j in 0...12
- Graphics.update
- pbSEPlay(MOVE_SOUND) if j == 4
- @sprites["shopbmp"].x -= 8.75
- @sprites["bmp"].x -= 8.75
- num = @shop.size
- num += @shop.size % 3
- num = 9 if num < 9
- for i in 0...num
- @sprites["box#{i}"].x -= 8.75
- @sprites["dye#{i}"].x -= 8.75 rescue nil
- end
- end
- @sel += 3
- @page += 1
- end
- elsif @sel > -1
- @sel += 3
- @box += 3
- play = true
- end
- elsif dir == :left
- if @box > -1 && @box < 3
- if @sel % 3 == 0 && @sel - 1 > -1 ||
- (@sel - 1) % 3 == 0 && @sel - 2 > -1 ||
- (@sel - 2) % 3 == 0 && @sel - 3 > -1
- for j in 0...12
- Graphics.update
- pbSEPlay(MOVE_SOUND) if j == 4
- @sprites["shopbmp"].x += 8.75
- @sprites["bmp"].x += 8.75
- num = @shop.size
- num += @shop.size % 3
- num = 9 if num < 9
- for i in 0...num
- @sprites["box#{i}"].x += 8.75
- @sprites["dye#{i}"].x += 8.75 rescue nil
- end
- end
- @sel -= 3
- @page -= 1
- end
- elsif @sel > -1
- @sel -= 3
- @box -= 3
- play = true
- end
- end
- if @sel > -1
- @sprites["box#{@sel}"].selected = true
- begin
- @sprites["dye#{@sel}"].bitmap = Bitmap.new("PR/dyes2")
- @sprites["dye#{@sel}"].src_rect.width = @sprites["dye#{@sel}"].bitmap.height
- @sprites["dye#{@sel}"].src_rect.x = @sprites["dye#{@sel}"].src_rect.width * @sprites["box#{@sel}"].dye.id
- rescue; end
- else
- @sprites["back"].bitmap = Bitmap.new("PR/Dye Shop/Resources/back2")
- end
- pbSEPlay(MOVE_SOUND) if play
- end
- def dispose
- for i in 0...12
- Graphics.update
- @sprites["label"].y -= @sprites["label"].bitmap.height / 12
- @sprites["money"].y -= @sprites["money"].bitmap.height / 12
- @sprites["back"].y += 1.916
- num = @shop.size
- num += @shop.size % 3
- num = 9 if num < 9
- for j in 0...num
- @sprites["box#{j}"].opacity -= 256 / 12
- @sprites["dye#{j}"].opacity -= 256 / 12 rescue nil
- end
- @sprites["bmp"].opacity -= 32 if i > 3
- @sprites["shopbmp"].opacity -= 32 if i > 3
- @sprites["bg"].opacity -= 32 if i > 3 && @directly
- end
- pbDisposeSpriteHash(@sprites)
- @viewport.dispose
- pbWait(1) if @directly
- end
- end
- def invDyes(*args)
- ar = []
- i = 0
- while i < args.size
- ar.push(Dye.new(args[i],args[i+1]))
- i += 2
- end
- ar
- end
- class DyeBox < Sprite
- attr_accessor :dye
- attr_reader :selected
- def initialize(viewport, dye)
- super(viewport)
- self.dye = dye
- self.bitmap = Bitmap.new("PR/Dye Selection/Resources/box1")
- end
- def selected=(b)
- if b
- self.bitmap = Bitmap.new("PR/Dye Selection/Resources/box2")
- else
- self.bitmap = Bitmap.new("PR/Dye Selection/Resources/box1")
- end
- end
- end
- class DyeSelection
- def initialize(directly)
- @viewport = Viewport.new(0, 0, Graphics.width, Graphics.height)
- @viewport.z = 99998
- @sprites = {}
- @inv = $Inventory
- @directly = directly
- @brk = false
- @sprites["bg"] = Sprite.new(@viewport)
- @sprites["bg"].bitmap = Bitmap.new("PR/Dye Selection/Resources/background")
- @sprites["bg"].opacity = 0
- @sprites["label"] = Sprite.new(@viewport)
- @sprites["label"].bitmap = Bitmap.new("PR/Dye Selection/Resources/dyeSelection")
- @sprites["label"].y = -1 * @sprites["label"].bitmap.height
- @sprites["back"] = Sprite.new(@viewport)
- @sprites["back"].bitmap = Bitmap.new("PR/Dye Selection/Resources/back1")
- @sprites["back"].y = Graphics.height
- @sprites["removedye"] = Sprite.new(@viewport)
- @sprites["removedye"].bitmap = Bitmap.new("PR/Dye Selection/Resources/removeDye1")
- @sprites["removedye"].x = @sprites["back"].bitmap.width + 4
- @sprites["removedye"].y = Graphics.height
- @path = $Trainer.gender == 0 ? "Alto" : "Aria"
- @sprites["outfit"] = Sprite.new(@viewport)
- @sprites["outfit"].bitmap = Bitmap.new("PR/#{@path}/#{$Outfit}")
- @sprites["outfit"].x = 201
- @sprites["outfit"].y = 6
- @sprites["outfit"].opacity = 0
- @sprites["main"] = Sprite.new(@viewport)
- @sprites["main"].bitmap = Bitmap.new(Graphics.width,Graphics.height*2)
- @sprites["main"].z = 2
- @main = @sprites["main"].bitmap
- pbSetSystemFont(@main)
- @main.font.size = 17
- @sprites["bar"] = Sprite.new(@viewport)
- @sprites["bar"].bitmap = Bitmap.new("PR/Dye Selection/Resources/textBox")
- @sprites["bar"].x = -220
- pbDrawTextPositions(@main,[[_INTL("Which dye color would you like?"),15,188,
- false,Color.new(255,255,255),Color.new(0,0,0,0)]])
- @sprites["main"].x = -220
- @boxvp = Viewport.new(9, 39, Graphics.width, 134)
- @boxvp.z = 99999
- @box = 0
- @sel = 0
- @last = []
- load_boxes(true)
- for i in 0...12
- Graphics.update
- @sprites["bg"].opacity += 32
- @sprites["label"].y += @sprites["label"].bitmap.height / 12
- @sprites["back"].y -= 1.916
- @sprites["removedye"].y -= 1.916
- if i > 3
- @sprites["bar"].x += 27.5
- @sprites["main"].x += 27.5
- @sprites["outfit"].opacity += 32
- num = @inv.size
- num += @inv.size % 4
- num = 12 if num < 12
- for j in 0...num
- @sprites["box#{j}"].opacity += 32
- if @inv[j]
- @sprites["count#{j}"].opacity += 32
- @sprites["dye#{j}"].opacity += 32
- end
- end
- end
- end
- main
- end
- def load_boxes(anim)
- num = @inv.size
- num += @inv.size % 4
- num = 12 if num < 12
- for i in 0...num
- x = 2 + 44 * (i % 4)
- y = 1 + 45 * (i / 4).floor
- @sprites["box#{i}"] = DyeBox.new(@boxvp, @inv[i])
- @sprites["box#{i}"].x = x
- @sprites["box#{i}"].y = y
- @sprites["box#{i}"].opacity = 0 if anim
- if @inv[i]
- @sprites["count#{i}"] = Sprite.new(@boxvp)
- @sprites["count#{i}"].bitmap = Bitmap.new("PR/Dye Selection/Resources/#{@inv[i].stock}a")
- @sprites["count#{i}"].x = x - 2
- @sprites["count#{i}"].y = y - 2
- @sprites["count#{i}"].opacity = 0 if anim
- @sprites["dye#{i}"] = Sprite.new(@boxvp)
- @sprites["dye#{i}"].bitmap = Bitmap.new("PR/dyes1")
- @sprites["dye#{i}"].src_rect.width = @sprites["dye#{i}"].bitmap.height
- @sprites["dye#{i}"].src_rect.x = @sprites["dye#{i}"].bitmap.height * @inv[i].id
- @sprites["dye#{i}"].x = x + 5
- @sprites["dye#{i}"].y = y + 5
- @sprites["dye#{i}"].opacity = 0 if anim
- end
- end
- @sprites["box0"].selected = true
- if @inv[0]
- @sprites["dye0"].bitmap = Bitmap.new("PR/dyes2")
- @sprites["dye0"].src_rect.width = @sprites["dye0"].bitmap.height
- @sprites["dye0"].src_rect.x = @sprites["dye0"].bitmap.height * @inv[0].id
- @sprites["count0"].bitmap = Bitmap.new("PR/Dye Selection/Resources/#{@inv[0].stock}b")
- end
- end
- def main
- loop do
- Graphics.update
- Input.update
- break if @brk
- move(:bottom) if Input.trigger?(Input::B)
- choose if Input.trigger?(Input::C)
- choose if Input.trigger?(Input::B) && @sel < 0
- move(:left) if Input.trigger?(Input::LEFT)
- move(:right) if Input.trigger?(Input::RIGHT)
- move(:up) if Input.trigger?(Input::UP)
- move(:down) if Input.trigger?(Input::DOWN)
- end
- dispose
- end
- def choose
- pbWait(1)
- if @sel == -1
- @brk = true
- elsif @sel == -2
- $Outfit = 0
- @sprites["outfit"].bitmap = Bitmap.new("PR/#{@path}/0")
- else
- confirm_usage if @inv[@sel]
- end
- end
- def confirm_usage
- @sprites["use"] = Sprite.new(@boxvp)
- @sprites["use"].bitmap = Bitmap.new("PR/Dye Selection/Resources/useBtn")
- @sprites["use"].x = @sprites["box#{@sel}"].x + @sprites["box#{@sel}"].bitmap.width - 15
- @sprites["use"].y = @sprites["box#{@sel}"].y + @sprites["box#{@sel}"].bitmap.height - 11
- @sprites["use"].z = 2
- @sprites["use"].opacity = 0
- 4.times do
- Graphics.update
- @sprites["use"].opacity += 64
- end
- @sprites["outfit"].bitmap = Bitmap.new("PR/#{@path}/#{@inv[@sel].id}")
- cnfrmd = false
- loop do
- Graphics.update
- Input.update
- break if Input.trigger?(Input::B) || Input.trigger?(Input::LEFT) ||
- Input.trigger?(Input::UP) || Input.trigger?(Input::DOWN) ||
- Input.trigger?(Input::RIGHT)
- if Input.trigger?(Input::C)
- cnfrmd = true; break
- end
- end
- 4.times do
- Graphics.update
- @sprites["use"].opacity -= 64
- end
- if cnfrmd
- $Outfit = @inv[@sel].id
- @inv[@sel].stock -= 1
- # Doing a global array check instead of just deleting at an index.
- r = []
- for i in 0...@inv.size
- r.push(@inv[i]) if @inv[i].stock > 0
- end
- num = @inv.size
- num += @inv.size % 4
- num = 12 if num < 12
- if @inv[@sel].stock == 0
- 4.times do
- Graphics.update
- @sprites["count#{@sel}"].opacity -= 64
- @sprites["dye#{@sel}"].opacity -= 64
- end
- end
- for i in 0...num
- @sprites["box#{i}"].dispose
- if @inv[i]
- @sprites["count#{i}"].dispose
- @sprites["dye#{i}"].dispose
- end
- end
- @inv = r
- $Inventory = r
- load_boxes(false)
- else
- @sprites["outfit"].bitmap = Bitmap.new("PR/#{@path}/#{$Outfit}")
- end
- @sprites["use"].dispose
- end
- def move(dir)
- play = false
- if @sel > -1
- @sprites["box#{@sel}"].selected = false
- if @inv[@sel]
- @sprites["dye#{@sel}"].bitmap = Bitmap.new("PR/dyes1")
- @sprites["dye#{@sel}"].src_rect.width = @sprites["dye#{@sel}"].bitmap.height
- @sprites["dye#{@sel}"].src_rect.x = @sprites["dye#{@sel}"].bitmap.height * @inv[@sel].id
- @sprites["count#{@sel}"].bitmap = Bitmap.new("PR/Dye Selection/Resources/#{@inv[@sel].stock}a")
- end
- end
- if dir == :right
- if @sel == -1
- @sel = -2
- @sprites["removedye"].bitmap = Bitmap.new("PR/Dye Selection/Resources/removeDye2")
- @sprites["back"].bitmap = Bitmap.new("PR/Dye Selection/Resources/back1")
- play = true
- elsif (@sel + 1) % 4 != 0 && @sel > -1
- @sel += 1
- @box += 1
- play = true
- end
- end
- if dir == :left
- if @sel == -2
- @sel = -1
- @sprites["removedye"].bitmap = Bitmap.new("PR/Dye Selection/Resources/removeDye1")
- @sprites["back"].bitmap = Bitmap.new("PR/Dye Selection/Resources/back2")
- play = true
- elsif @sel % 4 != 0 && @sel > -1
- @sel -= 1
- @box -= 1
- play = true
- end
- end
- if dir == :down
- if @box > 7 && @box < 12
- if @sel % 4 == 0 && @sel + 4 < @inv.size ||
- (@sel - 1) % 4 == 0 && @sel + 3 < @inv.size ||
- (@sel - 2) % 4 == 0 && @sel + 2 < @inv.size ||
- (@sel - 3) % 4 == 0 && @sel + 1 < @inv.size
- num = @inv.size
- num += @inv.size % 4
- for j in 0...12
- Graphics.update
- pbSEPlay(MOVE_SOUND) if j == 4
- for i in 0...num
- @sprites["box#{i}"].y -= 3.66
- if @inv[i]
- @sprites["dye#{i}"].y -= 3.66
- @sprites["count#{i}"].y -= 3.66
- end
- end
- end
- @sel += 4
- end
- elsif @sel > -1
- @sel += 4
- @box += 4
- play = true
- end
- end
- if dir == :up
- if @sel < 0
- @sprites["removedye"].bitmap = Bitmap.new("PR/Dye Selection/Resources/removeDye1")
- @sprites["back"].bitmap = Bitmap.new("PR/Dye Selection/Resources/back1")
- @sel = @last[0]
- @box = @last[1]
- @sprites["box#{@sel}"].selected = true
- if @inv[@sel]
- @sprites["dye#{@sel}"].bitmap = Bitmap.new("PR/dyes2")
- @sprites["dye#{@sel}"].src_rect.width = @sprites["dye#{@sel}"].bitmap.height
- @sprites["dye#{@sel}"].src_rect.x = @sprites["dye#{@sel}"].bitmap.height * @inv[@sel].id
- @sprites["count#{@sel}"].bitmap = Bitmap.new("PR/Dye Selection/Resources/#{@inv[@sel].stock}b")
- play = true
- end
- elsif @box > -1 && @box < 4
- if @sel % 4 == 0 && @sel - 1 > -1 ||
- (@sel - 1) % 4 == 0 && @sel - 2 > -1 ||
- (@sel - 2) % 4 == 0 && @sel - 3 > -1 ||
- (@sel - 3) % 4 == 0 && @sel - 4 > -1
- num = @inv.size
- num += @inv.size % 4
- for j in 0...12
- Graphics.update
- pbSEPlay(MOVE_SOUND) if j == 4
- for i in 0...num
- @sprites["box#{i}"].y += 3.66
- if @inv[i]
- @sprites["dye#{i}"].y += 3.66
- @sprites["count#{i}"].y += 3.66
- end
- end
- end
- @sel -= 4
- end
- elsif @sel > -1
- @sel -= 4
- @box -= 4
- play = true
- end
- end
- if dir == :bottom
- if @sel > -1
- pbWait(1)
- @last = [@sel,@box]
- @sel = -1
- @box = -1
- @sprites["removedye"].bitmap = Bitmap.new("PR/Dye Selection/Resources/removeDye1")
- @sprites["back"].bitmap = Bitmap.new("PR/Dye Selection/Resources/back2")
- play = true
- end
- end
- if @sel > -1
- @sprites["box#{@sel}"].selected = true
- if @inv[@sel]
- @sprites["dye#{@sel}"].bitmap = Bitmap.new("PR/dyes2")
- @sprites["dye#{@sel}"].src_rect.width = @sprites["dye#{@sel}"].bitmap.height
- @sprites["dye#{@sel}"].src_rect.x = @sprites["dye#{@sel}"].bitmap.height * @inv[@sel].id
- @sprites["count#{@sel}"].bitmap = Bitmap.new("PR/Dye Selection/Resources/#{@inv[@sel].stock}b")
- end
- end
- pbSEPlay(MOVE_SOUND) if play
- end
- def dispose
- for i in 0...12
- Graphics.update
- @sprites["bg"].opacity -= 32 if i > 3
- @sprites["label"].y -= @sprites["label"].bitmap.height / 12
- @sprites["back"].y += 1.916
- @sprites["removedye"].y += 1.916
- if i < 9
- @sprites["bar"].x -= 27.5
- @sprites["main"].x -= 27.5
- @sprites["outfit"].opacity -= 32
- num = @inv.size
- num += @inv.size % 4
- num = 12 if num < 12
- for j in 0...num
- @sprites["box#{j}"].opacity -= 32
- if @inv[j]
- @sprites["count#{j}"].opacity -= 32
- @sprites["dye#{j}"].opacity -= 32
- end
- end
- end
- end
- pbDisposeSpriteHash(@sprites)
- @viewport.dispose
- pbWait(1) if @directly
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement