################################################################################ # "Duel" mini-game # Based on the Duel minigame by Alael ################################################################################ begin class DuelWindow < Window_AdvancedTextPokemon attr_accessor :hp attr_accessor :name attr_accessor :isEnemy def initialize(name,isEnemy) @hp = 10 @name = name @isEnemy = isEnemy super("") self.width = 160 self.height = 96 duelRefresh end def hp=(value) @hp = value duelRefresh end def name=(value) @name = value duelRefresh end def isEnemy=(value) @isEnemy = value duelRefresh end def duelRefresh nameColor = @isEnemy ? "" : "" hpColor = "" self.text = _INTL("{1}{2}\r\n{3}HP: {4}",nameColor,fmtescape(@name),hpColor,@hp) end end class PokemonDuel def pbStartDuel(opponent,event) @viewport = Viewport.new(0,0,Graphics.width,Graphics.height) @viewport.z = 99999 @sprites = {} @event = event @sprites["player"] = IconSprite.new(-128-32,96,@viewport) @sprites["player"].setBitmap(pbTrainerSpriteFile($Trainer.trainertype)) @sprites["opponent"] = IconSprite.new(Graphics.width+32,96,@viewport) @sprites["opponent"].setBitmap(pbTrainerSpriteFile(opponent.trainertype)) @sprites["playerwindow"] = DuelWindow.new($Trainer.name,false) @sprites["playerwindow"].x = -@sprites["playerwindow"].width @sprites["playerwindow"].viewport = @viewport @sprites["opponentwindow"] = DuelWindow.new(opponent.name,true) @sprites["opponentwindow"].x = Graphics.width @sprites["opponentwindow"].viewport = @viewport pbWait(Graphics.frame_rate/2) distancePerFrame = 8*20/Graphics.frame_rate while @sprites["player"].x<0 @sprites["player"].x += distancePerFrame @sprites["playerwindow"].x += distancePerFrame @sprites["opponent"].x -= distancePerFrame @sprites["opponentwindow"].x -= distancePerFrame Graphics.update Input.update pbUpdateSceneMap end @oldmovespeed = $game_player.move_speed @oldeventspeed = event.move_speed pbMoveRoute($game_player,[ PBMoveRoute::ChangeSpeed,2, PBMoveRoute::DirectionFixOn]) pbMoveRoute(event,[ PBMoveRoute::ChangeSpeed,2, PBMoveRoute::DirectionFixOn]) pbWait(Graphics.frame_rate*3/4) end def pbDuel(opponent,event,speeches) pbStartDuel(opponent,event) @hp = [10,10] @special = [false,false] decision = nil loop do @hp[0] = 0 if @hp[0]<0 @hp[1] = 0 if @hp[1]<0 pbRefresh if @hp[0]<=0 decision = false break elsif @hp[1]<=0 decision = true break end action = 0 scores = [3,4,4,2] choices = (@special[1]) ? 3 : 4 scores[3] = 0 if @special[1] total = scores[0]+scores[1]+scores[2]+scores[3] if total<=0 action = rand(choices) else num = rand(total) cumtotal = 0 for i in 0...4 cumtotal += scores[i] if num