class PokeBattle_Move_Blitz < PokeBattle_Move
KEYHASH={
:A=>0x41,:B=>0x42,:C=>0x43,:D=>0x44,
:E=>0x45,:F=>0x46,:G=>0x47,:H=>0x48,
:I=>0x49,:J=>0x4a,:K=>0x4b,:L=>0x4c,
:M=>0x4D,:N=>0x4e,:O=>0x4f,:P=>0x50,
:Q=>0x51,:R=>0x52,:S=>0x53,:T=>0x54,
:U=>0x55,:V=>0x56,:W=>0x57,:X=>0x58,
:Y=>0x59,:Z=>0x5a,:NUM_0=>0x30,:NUM_1=>0x31,
:NUM_2=>0x32,:NUM_3=>0x33,:NUM_4=>0x34,:NUM_5=>0x35,
:NUM_6=>0x36,:NUM_7=>0x37,:NUM_8=>0x38,:NUM_9=>0x39,
:UP=>0x26,:DOWN=>0x28,:LEFT=>0x25,:RIGHT=>0x27,
:SPACE=>0x20,:ENTER=>0x0D,:TAB=>0x09
}
def pbDisplayUseMessage(attacker)
ret=super
if @battle.pbOwnedByPlayer?(attacker.index)
@[email protected](@keys)
if @time<0
@battle.pbDisplay(_INTL("But it failed!"))
return -1
end
else
@[email protected](30)*@keys.length
end
return ret
end
def pbBaseDamage(basedmg,attacker,opponent)
return 20 if !@time || @time<0
timeAverage=@time/[1,@keys.length].max
return 20 if timeAverage>30
return 40 if timeAverage>25
return 60 if timeAverage>20
return 80 if timeAverage>15
return 100 if timeAverage>10
return 150 if timeAverage>5
return 200
end
def self.triggerKeyState(key)
# -1: no keys pressed; 0: wrong key pressed; 1: correct key pressed
correctKey=(KEYHASH[key]) ? KEYHASH[key] : 0x20
# check wrong keys first
for i in KEYHASH.values
if i!=correctKey
return 0 if Input.triggerex?(i)
end
end
# then check correct key
return (Input.triggerex?(correctKey)) ? 1 : -1
end
def self.getKey(key)
return (KEYHASH[key]) ? KEYHASH[key] : 0x20
end
end
class PokeBattle_Move_110 < PokeBattle_Move_Blitz
def initialize(battle,move)
super
@keys=[:A,:B,:UP,:DOWN]
end
end
class PokeBattle_Move_111 < PokeBattle_Move_Blitz
def initialize(battle,move)
super
@keys=[:X,:W,:LEFT,:RIGHT]
end
end
class PokeBattle_Move_112 < PokeBattle_Move_Blitz
def initialize(battle,move)
super
@keys=[:Z,:Q,:P,:M]
end
end
class PokeBattle_Scene
def pbBlitz(keys)
@briefmessage=false
blitzwindow=Window_AdvancedTextPokemon.newWithSize("",0,Graphics.height-96-64,Graphics.width*2/3,64)
blitzwindow.z=100001
keystates=[0,0,0,0]
start=Graphics.frame_count
time=0
penalty=0
blitzCount=0
blitzCurrent=0
shownTime=0
failures=0
loop do
Graphics.update
Input.update
blitzwindow.update
needRefresh=false
if shownTime%30 == 0
blitzCount+=1
needRefresh=true
if blitzCount>keys.length
Audio.se_play("Audio/SE/buzzer.wav")
time=-1
break
end
end
keyState=PokeBattle_Move_Blitz.triggerKeyState(keys[blitzCurrent])
if keyState>=0
if keyState==1 # Correct
Audio.se_play(pbGetDecisionSE)
keystates[blitzCurrent]=1
else # Incorrect
Audio.se_play("Audio/SE/buzzer.wav")
keystates[blitzCurrent]=2
penalty+=30
failures+=1
end
blitzCurrent+=1
if blitzCurrent>=keys.length
if failures==keys.length
time=-1
penalty=0
end
break
end
shownTime=0
blitzCount=blitzCurrent+1 if blitzCount<blitzCurrent+1
needRefresh=true
end
if needRefresh
newtext=""
for i in 0...blitzCount
newtext+=" " if i>0
if keystates[i]==1 #Correct
newtext+="<c2=06644bd2>"+keys[i].to_s+"</c2>"
elsif keystates[i]==2 # Incorrect
newtext+="<c2=043c3aff>"+keys[i].to_s+"</c2>"
else
newtext+=keys[i].to_s
end
end
blitzwindow.text=newtext
end
time+=1
shownTime+=1
end
blitzwindow.dispose
return time+penalty
end
end