Guest Access
Go to page : 1, 2, 3
Administrator
Administrator
Administrator
profile
- just like it says... enjoy!
instructions are in the script.
new version, no XAS just RMXP
you can find the old XAS version below
+better instructions
+better indentation!
+more accurate double tap-hold direction key
+sound effect option
+graphic option
+easy disable switch
+disable by terrain tag
+easy blurrr settings for player and events!
and more in the user friendly module
G101 TDB 3.1 (RMXP)
G101 TDB 3.0 (with XAS3.9)
+option to work with CT Meter
G@MeF@Ce
profile
- just like it says... enjoy!
instructions are in the script.
new version, no XAS just RMXP
you can find the old XAS version below
+better instructions
+better indentation!
+more accurate double tap-hold direction key
+sound effect option
+graphic option
+easy disable switch
+disable by terrain tag
+easy blurrr settings for player and events!
and more in the user friendly module
G101 TDB 3.1 (RMXP)
- Code:
################################################################################
# [RMXP] Double Tap Dash Blur by G@MeF@Ce v3.1 1/28/10 - 3/9/21
#
# www.gameface101.com remembering and giving thanks to:
# Gamba for the directional dash in the ABS and Zues81 for the trails script
#===============================================================================
# RMXP Instructions:
# Open Script Database (F11) Copy and Paste this Script above Main
#
# setup options in the module
#
# to blur event:
#
# X = Event ID number
# $game_map.events[X].blur = true
#
# to stop event blur:
# $game_map.events[X].blur = false
#
################################################################################
module DTDB
#[CONTROL OPTIONS]==============================================================
DISABLE_SWITCH = 1 #game switch on to disable
DISABLE_TILE = 7 #terrain ID for dash off
#[DASH OPTIONS]=================================================================
NORMAL_SPEED = 4 #set normal speed
DASH_SPEED = 5.0 #set dash speed
TIME = 4 #time between double tap
STOP_DASH = 0#0 = default, 1 = stop dash on turn, 2 or highter dash always on
DASH_TIME = 100 #time to check dash
#[GRAPHIC OPTION]===============================================================
CHARACTER_DASH_GRAPHIC = "_dash" #"NAME_dash" graphic
#[SOUND OPTIONS]================================================================
DASH_SOUND = "" #play sound when dashing
DASH_SOUND_VOL = 100
#[BLUR OPTIONS]=================================================================
BLUR_LENGTH = 10 #set number of repeated images to create a blurrr
BLUR_TYPE = 0#0=Normal 1=Light 2=Dark
end
################################################################################
#===============================================================================
# ■ Game_Character
#===============================================================================
class Game_Character
attr_accessor :move_speed
attr_accessor :time_dash
attr_accessor :character_name
attr_accessor :blur
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
alias tap_dash_initialize initialize
def initialize
@time_dash = 0
tap_dash_initialize
@blur = false
end
end
#===============================================================================
# ■ RPG_FileTest
#===============================================================================
module RPG_FileTest
def RPG_FileTest.character_exist?(filename)
return RPG::Cache.character(filename, 0) rescue return false
end
end
#===============================================================================
# ■ Game_Map
#===============================================================================
class Game_Map
include DTDB
attr_accessor :time_dash
attr_accessor :dashing
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
alias tap_dash_setup setup
def setup(map_id)
@dash = []
for i in 2..8
@dash[i] = 0
end
@time_c = 0
@dashing = false
@direction = 0
@direction_old = $game_player.direction
@time_rec = 0
$game_player.time_dash = DASH_TIME if @time_dash == nil
tap_dash_setup(map_id)
end
#--------------------------------------------------------------------------
# ● Can Tap Dash?
#--------------------------------------------------------------------------
def can_tap_dash?
return false if $game_system.map_interpreter.running?
return true
end
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------
alias tap_dash_update update
def update
tap_dash_update
return unless can_tap_dash?
#disable tile
if $game_map.terrain_tag($game_player.x , $game_player.y) == DISABLE_TILE
$game_player.character_name = $game_party.actors[0].character_name if $game_player.character_name == $game_party.actors[0].character_name + CHARACTER_DASH_GRAPHIC
end
#dash graphic
if $game_switches[DISABLE_SWITCH] == false and $game_map.terrain_tag($game_player.x , $game_player.y) != DISABLE_TILE
if @dashing == true
newname = $game_party.actors[0].character_name + CHARACTER_DASH_GRAPHIC if $game_party.actors[0].hp > 0
$game_player.character_name = newname if $game_player.character_name != newname and
RPG_FileTest.character_exist?(newname)
$game_player.move_speed = DASH_SPEED
if STOP_DASH == 0
unless Input.press?(Input::DOWN) or Input.press?(Input::LEFT) or
Input.press?(Input::RIGHT) or Input.press?(Input::UP)
@dashing = false
$game_player.blur = false#
end
elsif STOP_DASH == 1
unless Input.press?(@keyboard) and @direction == $game_player.direction
@dashing = false
$game_player.blur = false#
end
end
else
$game_player.character_name = $game_party.actors[0].character_name if $game_player.character_name == $game_party.actors[0].character_name + CHARACTER_DASH_GRAPHIC
#input and speed check
$game_player.move_speed = NORMAL_SPEED if $game_player.move_speed == DASH_SPEED
dir = $game_player.direction
case dir
when 2
@keyboard = Input::DOWN
when 4
@keyboard = Input::LEFT
when 6
@keyboard = Input::RIGHT
when 8
@keyboard = Input::UP
end
if @dash[dir] == 1
if Input.press?(@keyboard)
for i in 2..8
if i != dir
@dash[i] = 0
$game_player.blur = false
end
end
else
@dash[dir] = 2
for i in 2..8
if i != dir
@dash[i] = 0
$game_player.blur = false
end
end
end
elsif @dash[dir] == 2
if @time_c < (TIME)
if Input.press?(@keyboard)
@time_c = 0
@dash[dir] = 0
@dashing = true
$game_system.se_play(RPG::AudioFile.new(DASH_SOUND, DASH_SOUND_VOL, 100))
$game_player.blur = true
@direction = $game_player.direction
end
end
if @time_c > (TIME)
@time_c = 0
@dash[dir] = 0
$game_player.blur = false
end
else
@time_c = 0
if Input.trigger?(@keyboard)
@dash[dir] = 1
for i in 2..8
if i != dir
@dash[i] = 0
$game_player.blur = false
end
end
end
end
end
end
end
end #end character class
#===============================================================================
# ■ Spriteset_Map
#===============================================================================
class Spriteset_Map
include DTDB
$blurr_images = DTDB::BLUR_LENGTH
$transparence = DTDB::BLUR_TYPE
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------
alias spriteset_map_update update
def update
if $blurr_images != @last_blurr_images
@last_blurr_images = $blurr_images
if @blur_sprites != nil
for blur_sprite in @blur_sprites.values
blur_sprite.dispose
end
@blur_sprites = nil
end
end
if @blur_sprites == nil
@blur_sprites = {}
for i in 0...$blurr_images
@blur_sprites[i] = Sprite_Blur.new(@viewport1, $game_player)
@blur_sprites[i].opacity = 156 / $blurr_images * i
end
end
for id in $game_map.events.keys.sort
event = $game_map.events[id]
if event.blur == true and @blur_sprites[id * $blurr_images] == nil
for i in 0...$blurr_images
@blur_sprites[id * $blurr_images + i] = Sprite_Blur.new(@viewport1, event)
@blur_sprites[id * $blurr_images + i].opacity = 156 / $blurr_images * i
end
end
end
for blur_sprite in @blur_sprites.values
blur_sprite.update
end
spriteset_map_update
end
#--------------------------------------------------------------------------
# ● Dispose
#--------------------------------------------------------------------------
alias spriteset_map_dispose dispose
def dispose
spriteset_map_dispose
for blur_sprite in @blur_sprites.values
blur_sprite.dispose
end
end
end
#===============================================================================
# ■ Sprite_Blur
#===============================================================================
class Sprite_Blur < Sprite
include DTDB
attr_accessor :real_x
attr_accessor :real_y
attr_accessor :character
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
def initialize(viewport, character)
super(viewport)
self.opacity = 0
@character = character
update
end
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------
def update
if self.opacity == 0
super
if @character_name != @character.character_name or @character_hue != @character.character_hue
@character_name = @character.character_name
@character_hue = @character.character_hue
self.bitmap = RPG::Cache.character(@character_name,@character_hue)
self.blend_type = $transparence
@cw = bitmap.width / 4
@ch = bitmap.height / 4
self.ox = @cw / 2
self.oy = @ch
end
self.visible = (not @character.transparent and @character.blur)
sx = @character.pattern * @cw
sy = (@character.direction - 2) / 2 * @ch
self.src_rect.set(sx, sy, @cw, @ch)
self.opacity = 156
self.z = @character.screen_z(@ch) - 1
@real_x = @character.real_x
@real_y = @character.real_y
update
else
self.opacity -= 156 / ($blurr_images - 1)
self.x = (@real_x - $game_map.display_x + 3)/4 + 16
self.y = (@real_y - $game_map.display_y + 3)/4 + 32
end
end
end
#end of script ^,^
G101 TDB 3.0 (with XAS3.9)
+option to work with CT Meter
- Code:
################################################################################
# TAP DASH & BLURRR v3.0 by G@MeF@Ce 1/29/2013 www.gameface101.com
#
# dash concept from the double tap to dash by Gamba ABS
# the "blurrr" from the trails script by Zues81
# xas by xiderowg, moghunter
#
# free to use, must give credit to all names above ^
#
# Instructions:
#
# Q: How to use?
#
# A: Copy and Paste above Main script in Script Database (F11)
# then setup options in the module below.
#
# Q: How to make player dash and blurrr?
#
# A: Tap a direction twice to make the player dash and blurrr
#
# Q: How to make other events "blurrr" ?
#
# A: Open an event, find the ID on the top left
# X = Event ID number
# choose 'script' in event commants (3rd tab - bottom right option)
# to start event blurrr use => $game_map.events[X].blur = true
# to stop event blurrr use => $game_map.events[X].blur = false
#
# enjoy! ^,^
################################################################################
#--------------------------------------------------------------------=[settings]
module G101_TDB
#[ DASH OPTIONS ]===============================================================
# CONTROLS:
DISABLE_TDB_SWITCH= 4 #---------------------------=[switch ID for dash on/off]
DISABLE_BY_TILE = 5 #---------------------------------------------=[on or off]
DISABLE_TILE_TAG = 7 #------------------------------=[terrain ID for dash off]
#GAME PLAY:
NORMAL_SPEED = 4 #-----------------------------------------=[set normal speed]
DASH_SPEED = 5.5 #-------------------------------------------=[set dash speed]
TIME = 4 #------------------------------------------=[time between double tap]
STOP_DASH = 0 #-----------=[stop sliding - 0 release key - 1 when move direct]
DASH_TIME = 100 #-------------------------------------=[how much time to dash]
RECHARGE_TIME = 1 #-------------------------------------------=[recharge time]
START_RECHARGE_TIME = 1 #-------------------=[the instant recharge will begin]
#PRESENTATION:
CHARACTER_DASH_GRAPHIC = "_dash" #----------------------=["NAME_dash" graphic]
DASH_SOUND = "" #----------------------------------=[ play sound when dashing]
BLUR_LENGTH = 10 #-----------[set number of repeated images to create a blurrr
BLUR_TYPE = 0#---------------[ blending blurrr images: 0=Normal 1=Light 2=Dark
BLUR_FADE = 150 #------------[opacity of the blurr (1-256)
# XAS:
XAS_TDB = false #------------------------------------------------=[ USING XAS? ]
#uncomment lines 216 and 232
DISABLE_XAS_CT = false #---------------------------------------=[ requires XAS ]
end
#===============================================================================
#
#===============================================================================
# ■ Game_Character
#===============================================================================
class Game_Character
attr_accessor :move_speed
attr_accessor :time_dash
attr_accessor :character_name
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
alias tap_dash_initialize initialize
def initialize
@time_dash = 0
tap_dash_initialize
end
end
#===============================================================================
# ■ RPG_FileTest
#===============================================================================
module RPG_FileTest
def RPG_FileTest.character_exist?(filename)
return RPG::Cache.character(filename, 0) rescue return false
end
end
#===============================================================================
# ■ Game_Map
#===============================================================================
class Game_Map
include G101_TDB
attr_accessor :time_dash
attr_accessor :dashing
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
alias tap_dash_setup setup
def setup(map_id)
@dash = []
for i in 2..8
@dash[i] = 0
end
@time_c = 0
@dashing = false
@direction = 0
@direction_old = $game_player.direction
@time_rec = 0
$game_player.time_dash = DASH_TIME if @time_dash == nil
tap_dash_setup(map_id)
end
#--------------------------------------------------------------------------
# ● Can Tap Dash?
#--------------------------------------------------------------------------
def can_tap_dash?
return false if $game_system.map_interpreter.running?
if XAS_TDB == true
return false if $game_player.knockbacking?
return false if $game_player.acting?
return false if $game_player.battler.hp == 0
return false if $game_player.pickup_lock
return true
end
return true
end
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------
alias tap_dash_update update
def update
tap_dash_update
return unless can_tap_dash?
if $game_map.terrain_tag($game_player.x , $game_player.y) == DISABLE_TILE_TAG and $game_switches[DISABLE_BY_TILE] == true
$game_player.character_name = $game_party.actors[0].character_name if $game_player.character_name == $game_party.actors[0].character_name + CHARACTER_DASH_GRAPHIC
$game_player.move_speed = NORMAL_SPEED
@dashing = false
$game_player.blur = false
end
if @time_rec == START_RECHARGE_TIME
$game_player.time_dash += (DASH_TIME.to_f/(100/RECHARGE_TIME.to_f)).to_i if $game_player.time_dash < DASH_TIME
@time_rec = 0
else
@time_rec += 1
end
if $game_switches[DISABLE_TDB_SWITCH] == false
if @dashing == true
newname = $game_party.actors[0].character_name + CHARACTER_DASH_GRAPHIC if $game_party.actors[0].hp > 0
$game_player.character_name = newname if $game_player.character_name != newname and
RPG_FileTest.character_exist?(newname)
if XAS_TDB == true
if DISABLE_XAS_CT == false
$game_system.action_meter -= 1
end
end
$game_player.move_speed = DASH_SPEED
if STOP_DASH == 0
unless Input.press?(Input::DOWN) or Input.press?(Input::LEFT) or
Input.press?(Input::RIGHT) or Input.press?(Input::UP)
@dashing = false
$game_player.blur = false
end
elsif STOP_DASH == 1
unless Input.press?(@keyboard) and @direction == $game_player.direction
@dashing = false
$game_player.blur = false
end
end
if XAS_TDB == true
if $game_system.action_meter<= 0 and DISABLE_XAS_CT == false
@dashing = false
$game_player.blur = false
end
end
else
$game_player.character_name = $game_party.actors[0].character_name if $game_player.character_name == $game_party.actors[0].character_name + CHARACTER_DASH_GRAPHIC
if @time_rec == START_RECHARGE_TIME
$game_player.time_dash += (DASH_TIME.to_f/(100/RECHARGE_TIME.to_f)).to_i if $game_player.time_dash < DASH_TIME
@time_rec = 0
else
@time_rec += 1
end
#===========================================================[tap to dash section
$game_player.move_speed = NORMAL_SPEED if $game_player.move_speed == DASH_SPEED
dir = $game_player.direction
case dir
when 2
@keyboard = Input::DOWN
when 4
@keyboard = Input::LEFT
when 6
@keyboard = Input::RIGHT
when 8
@keyboard = Input::UP
end
if @dash[dir] == 1
if Input.press?(@keyboard)
for i in 2..8
if i != dir
@dash[i] = 0
$game_player.blur = false
end
end
else
@dash[dir] = 2
for i in 2..8
if i != dir
@dash[i] = 0
$game_player.blur = false
end
end
end
elsif @dash[dir] == 2
if @time_c < (TIME)
if Input.press?(@keyboard)# and $game_temp.xplat == 0
@time_c = 0
@dash[dir] = 0
@dashing = true
$game_system.se_play(RPG::AudioFile.new(DASH_SOUND, 100, 100))
$game_player.blur = true
@direction = $game_player.direction
end
end
if @time_c > (TIME)
@time_c = 0
@dash[dir] = 0
$game_player.blur = false
end
else
@time_c = 0
if Input.trigger?(@keyboard)# and $game_temp.xplat == 0
@dash[dir] = 1
for i in 2..8
if i != dir
@dash[i] = 0
$game_player.blur = false
end
end
end
end
end
end
end
end
#===============================================================================
# ■ Game_Character
#===============================================================================
class Game_Character
include G101_TDB
attr_accessor :blur
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
alias spriteset_map_initialize initialize
def initialize
spriteset_map_initialize
@blur = false
end
#--------------------------------------------------------------------------
# ● Update Move Speed
#--------------------------------------------------------------------------
def update_move_speed
return
end
#--------------------------------------------------------------------------
# ● update knockbacking
#--------------------------------------------------------------------------
def update_knockbacking
@knock_back_duration = 5 if self.battler.state_sleep
return unless self.knockbacking?
return if self.battler.stop
@pattern = 0 unless @direction_fix
@knock_back_duration -= 1 unless self.throw_active
update_knockbacksprite
if @knock_back_duration <= 0
@knock_back_duration = nil
@knock_back_prespeed = nil
if $game_switches[XPLAT_SWITCH_ID]
@move_speed = @knock_back_prespeed
end
if self.is_a?(Game_Event)
@pose_type = ""
@pose_type_old = @pose_type
@character_name = @page.graphic.character_name
self.refresh
end
end
end
end
#===============================================================================
# ■ Spriteset_Map
#===============================================================================
class Spriteset_Map
include G101_TDB
$blurr_images = G101_TDB::BLUR_LENGTH
$transparence = G101_TDB::BLUR_TYPE
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------
alias spriteset_map_update update
def update
if $blurr_images != @last_blurr_images
@last_blurr_images = $blurr_images
if @blur_sprites != nil
for blur_sprite in @blur_sprites.values
blur_sprite.dispose
end
@blur_sprites = nil
end
end
if @blur_sprites == nil
@blur_sprites = {}
for i in 0...$blurr_images
@blur_sprites[i] = Sprite_Blur.new(@viewport1, $game_player)
@blur_sprites[i].opacity = BLUR_FADE / $blurr_images * i
end
end
for id in $game_map.events.keys.sort
event = $game_map.events[id]
if event.blur == true and @blur_sprites[id * $blurr_images] == nil
for i in 0...$blurr_images
@blur_sprites[id * $blurr_images + i] = Sprite_Blur.new(@viewport1, event)
@blur_sprites[id * $blurr_images + i].opacity = BLUR_FADE / $blurr_images * i
end
end
end
for blur_sprite in @blur_sprites.values
blur_sprite.update
end
spriteset_map_update
end
#--------------------------------------------------------------------------
# ● Dispose
#--------------------------------------------------------------------------
alias spriteset_map_dispose dispose
def dispose
spriteset_map_dispose
for blur_sprite in @blur_sprites.values
blur_sprite.dispose
end
end
end
#===============================================================================
# ■ Sprite_Blur
#===============================================================================
class Sprite_Blur < Sprite
include G101_TDB
attr_accessor :real_x
attr_accessor :real_y
attr_accessor :character
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
def initialize(viewport, character)
super(viewport)
self.opacity = 0
@character = character
update
end
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------
def update
if self.opacity == 0
super
if @character_name != @character.character_name or @character_hue != @character.character_hue
@character_name = @character.character_name
@character_hue = @character.character_hue
self.bitmap = RPG::Cache.character(@character_name,@character_hue)
self.blend_type = $transparence
@cw = bitmap.width / 4
@ch = bitmap.height / 4
self.ox = @cw / 2
self.oy = @ch
end
self.visible = (not @character.transparent and @character.blur)
sx = @character.pattern * @cw
sy = (@character.direction - 2) / 2 * @ch
self.src_rect.set(sx, sy, @cw, @ch)
self.opacity = BLUR_FADE
self.z = @character.screen_z(@ch) - 1
@real_x = @character.real_x
@real_y = @character.real_y
update
else
self.opacity -= BLUR_FADE / ($blurr_images - 1)
self.x = (@real_x - $game_map.display_x + 3)/4 + 16
self.y = (@real_y - $game_map.display_y + 3)/4 + 32
end
end
end
#===============================================================================
# ■ Scene_Map
#===============================================================================
class Scene_Map
alias G101_TDB_transfer_player transfer_player
def transfer_player
$game_player.blur = false
G101_TDB_transfer_player
end
end
#end of script ^,^
Administrator
Show Signature
EVENTALIST
EVENTALIST
EVENTALIST
profile
mr_wiggles
profile
Game face comes through with another interesting script.
i have but one question.. would it be possible to instead of Double tap that you can just press a key? "Input.trigger?(Input::Z)" or something?
*for others reading this who ask "why not make a common event", its because i want a run that doesn't take from the CT meter but still has a "stamina" limit, and i the stamina is set by another script*
i have but one question.. would it be possible to instead of Double tap that you can just press a key? "Input.trigger?(Input::Z)" or something?
*for others reading this who ask "why not make a common event", its because i want a run that doesn't take from the CT meter but still has a "stamina" limit, and i the stamina is set by another script*
EVENTALIST
Show Signature
EVENTALIST
WORDSMITH
WORDSMITH
Active Member
Active Member
Active Member
profile
Reala
profile
Is there a way to make the player blur by event, like they blur for an attack, then it goes away. I can do it by dashing then doing the attack, but i want it to be all flashy n watever.
Active Member
Show Signature
Active Member
Administrator
Administrator
Administrator
profile
(without the quotes)
G@MeF@Ce
profile
@reala - try using a call script in an event and use "$game_player.blur = true"So in $game_map.events[X].blur = true
Wut do i replace X with for it to blur on the actor. I put 0 n got a error
(without the quotes)
Administrator
Show Signature
Active Member
Active Member
Active Member
profile
Reala
profile
It works but it goes away after i dash. I think i can fix this with a common event. Thanx GM
Commoc event worked thanx again GM
Commoc event worked thanx again GM
Active Member
Show Signature
Active Member
Administrator
Administrator
Administrator
profile
G@MeF@Ce
profile
^ newer version!
+more accurate double tap
+option to work with XAS CT_meter
+sound effect option
*doesn't blurrr after transferring maps
+more accurate double tap
+option to work with XAS CT_meter
+sound effect option
*doesn't blurrr after transferring maps
Administrator
Show Signature
Active Member
Active Member
Active Member
profile
Legault123
profile
Nice work! Thank you for sharing, can't wait to see the new platform demo
Active Member
Show Signature
Active Member
ACTIVATED
ACTIVATED
ACTIVATED
profile
chaosmakr44
profile
i plan to use this script however i want the player to unlock the dash ability throughout the actual game, is there a script i can call to enable / disable the dash/blurr feature?
ACTIVATED
Show Signature
ACTIVATED
Administrator
Administrator
Administrator
profile
G@MeF@Ce
profile
@chaosmakr44 - let me know if this works for you...
the script has a disable switch (default at 0)
just assign it a number.
If you're not using XAS, here's an example
http://www.mediafire.com/?ssj55pwjrblrtw9
EDIT: newer version for XAS 3.9!
this topic has been moved to the underground gaming forum, guests are now able to access ^,^
the script has a disable switch (default at 0)
just assign it a number.
If you're not using XAS, here's an example
http://www.mediafire.com/?ssj55pwjrblrtw9
EDIT: newer version for XAS 3.9!
this topic has been moved to the underground gaming forum, guests are now able to access ^,^
Administrator
Show Signature
Go to page : 1, 2, 3
GAMEFACE101 » MAKERS » RPG MAKERS » RMXP ( ROLE PLAY GAME MAKER XP ) » RMXP = RGSS ( SCRIPTS ) »RMXP - Double Tap, Dash, Blur...
Similar topics