Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

[Resolved] (Don't move, unless the key is held down)

boon

Sponsor

I need a script so if you press the key quickly, you don't take a step forward, only face that direction. Then, once you press the button down as if to hold it, you move - Like in the pokemon games. Anyone know of this? I know it's possible, I've seen it in a game.
 
first of all, wrong section!  :tongue:

but i feel generous today, here is the script you are looking for:

Code:
=begin
Face the direction you press - Matte/Homer
http://www.rmxp.net/forums/index.php?showtopic=28183


Homer
Nov 14 2005, 04:58 PM
Hi there!
This is a script I made from a request really. It's not a big script or anything, but it's quite powerful.

What it does:
QUOTE(TehSpritah)

s it possible for anybody to create a script whereby tapping a direction button quickly will make a character merely face the direction pressed, as well as walking when it is held down? I noticed this in Poké­¯n, and it's a nice little feature that you can turn yourself without actually moving in that direction.


There are two ways to implement it;
Either place this in a new script above main:
CODE
=end

WAIT = 2



#==============================================================================
# ** Game_Player
#------------------------------------------------------------------------------
# This class handles the player. Its functions include event starting
# determinants and map scrolling. Refer to "$game_player" for the one
# instance of this class.
#==============================================================================

class Game_Player < Game_Character
#--------------------------------------------------------------------------
# * Invariables
#--------------------------------------------------------------------------
CENTER_X = (320 - 16) * 4 # Center screen x-coordinate * 4
CENTER_Y = (240 - 16) * 4 # Center screen y-coordinate * 4
#--------------------------------------------------------------------------
# * Passable Determinants
# x : x-coordinate
# y : y-coordinate
# d : direction (0,2,4,6,8)
# * 0 = Determines if all directions are impassable (for jumping)
#--------------------------------------------------------------------------
def passable?(x, y, d)
# Get new coordinates
new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
# If coordinates are outside of map
unless $game_map.valid?(new_x, new_y)
# Impassable
return false
end
# If debug mode is ON and ctrl key was pressed
if $DEBUG and Input.press?(Input::CTRL)
# Passable
return true
end
super
end
#--------------------------------------------------------------------------
# * Set Map Display Position to Center of Screen
#--------------------------------------------------------------------------
def center(x, y)
max_x = ($game_map.width - 20) * 128
max_y = ($game_map.height - 15) * 128
$game_map.display_x = [0, [x * 128 - CENTER_X, max_x].min].max
$game_map.display_y = [0, [y * 128 - CENTER_Y, max_y].min].max
end
#--------------------------------------------------------------------------
# * Move to Designated Position
# x : x-coordinate
# y : y-coordinate
#--------------------------------------------------------------------------
def moveto(x, y)
super
# Centering
center(x, y)
# Make encounter count
make_encounter_count
end
#--------------------------------------------------------------------------
# * Increaase Steps
#--------------------------------------------------------------------------
def increase_steps
super
# If move route is not forcing
unless @move_route_forcing
# Increase steps
$game_party.increase_steps
# Number of steps are an even number
if $game_party.steps % 2 == 0
# Slip damage check
$game_party.check_map_slip_damage
end
end
end
#--------------------------------------------------------------------------
# * Get Encounter Count
#--------------------------------------------------------------------------
def encounter_count
return @encounter_count
end
#--------------------------------------------------------------------------
# * Make Encounter Count
#--------------------------------------------------------------------------
def make_encounter_count
# Image of two dice rolling
if $game_map.map_id != 0
n = $game_map.encounter_step
@encounter_count = rand(n) + rand(n) + 1
end
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
# If party members = 0
if $game_party.actors.size == 0
# Clear character file name and hue
@character_name = ""
@character_hue = 0
# End method
return
end
# Get lead actor
actor = $game_party.actors[0]
# Set character file name and hue
@character_name = actor.character_name
@character_hue = actor.character_hue
# Initialize opacity level and blending method
@opacity = 255
@blend_type = 0
end
#--------------------------------------------------------------------------
# * Same Position Starting Determinant
#--------------------------------------------------------------------------
def check_event_trigger_here(triggers)
result = false
# If event is running
if $game_system.map_interpreter.running?
return result
end
# All event loops
for event in $game_map.events.values
# If event coordinates and triggers are consistent
if event.x == @x and event.y == @y and triggers.include?(event.trigger)
# If starting determinant is same position event (other than jumping)
if not event.jumping? and event.over_trigger?
event.start
result = true
end
end
end
return result
end
#--------------------------------------------------------------------------
# * Front Envent Starting Determinant
#--------------------------------------------------------------------------
def check_event_trigger_there(triggers)
result = false
# If event is running
if $game_system.map_interpreter.running?
return result
end
# Calculate front event coordinates
new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
# All event loops
for event in $game_map.events.values
# If event coordinates and triggers are consistent
if event.x == new_x and event.y == new_y and
triggers.include?(event.trigger)
# If starting determinant is front event (other than jumping)
if not event.jumping? and not event.over_trigger?
event.start
result = true
end
end
end
# If fitting event is not found
if result == false
# If front tile is a counter
if $game_map.counter?(new_x, new_y)
# Calculate 1 tile inside coordinates
new_x += (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
new_y += (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
# All event loops
for event in $game_map.events.values
# If event coordinates and triggers are consistent
if event.x == new_x and event.y == new_y and
triggers.include?(event.trigger)
# If starting determinant is front event (other than jumping)
if not event.jumping? and not event.over_trigger?
event.start
result = true
end
end
end
end
end
return result
end
#--------------------------------------------------------------------------
# * Touch Event Starting Determinant
#--------------------------------------------------------------------------
def check_event_trigger_touch(x, y)
result = false
# If event is running
if $game_system.map_interpreter.running?
return result
end
# All event loops
for event in $game_map.events.values
# If event coordinates and triggers are consistent
if event.x == x and event.y == y and [1,2].include?(event.trigger)
# If starting determinant is front event (other than jumping)
if not event.jumping? and not event.over_trigger?
event.start
result = true
end
end
end
return result
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# Remember whether or not moving in local variables
last_moving = moving?
# If moving, event running, move route forcing, and message window
# display are all not occurring
unless moving? or $game_system.map_interpreter.running? or
@move_route_forcing or $game_temp.message_window_showing
# Move player in the direction the directional button is being pressed
if Input.press?(Input::DOWN)
turn_down
if @cur_dir == Input::DOWN and @w >= WAIT
move_down
end
if @w == nil or @cur_dir != Input::DOWN then @w = 0 end
@cur_dir = Input::DOWN
elsif Input.press?(Input::LEFT)
turn_left
if @cur_dir == Input::LEFT and @w >= WAIT
move_left
end
if @w == nil or @cur_dir != Input::LEFT then @w = 0 end
@cur_dir = Input::LEFT
elsif Input.press?(Input::RIGHT)
turn_right
if @cur_dir == Input::RIGHT and @w >= WAIT
move_right
end
if @w == nil or @cur_dir != Input::RIGHT then @w = 0 end
@cur_dir = Input::RIGHT
elsif Input.press?(Input::UP)
turn_up
if @cur_dir == Input::UP and @w >= WAIT
move_up
end
if @w == nil or @cur_dir != Input::UP then @w = 0 end
@cur_dir = Input::UP
end
if @w != nil
@w += 1
end
end
# Remember coordinates in local variables
last_real_x = @real_x
last_real_y = @real_y
super
# If character moves down and is positioned lower than the center
# of the screen
if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y
# Scroll map down
$game_map.scroll_down(@real_y - last_real_y)
end
# If character moves left and is positioned more let on-screen than
# center
if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X
# Scroll map left
$game_map.scroll_left(last_real_x - @real_x)
end
# If character moves right and is positioned more right on-screen than
# center
if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X
# Scroll map right
$game_map.scroll_right(@real_x - last_real_x)
end
# If character moves up and is positioned higher than the center
# of the screen
if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y
# Scroll map up
$game_map.scroll_up(last_real_y - @real_y)
end
# If not moving
unless moving?
# If player was moving last time
if last_moving
# Event determinant is via touch of same position event
result = check_event_trigger_here([1,2])
# If event which started does not exist
if result == false
# Disregard if debug mode is ON and ctrl key was pressed
unless $DEBUG and Input.press?(Input::CTRL)
# Encounter countdown
if @encounter_count > 0
@encounter_count -= 1
end
end
end
end
# If C button was pressed
if Input.trigger?(Input::C)
# Same position and front event determinant
check_event_trigger_here([0])
check_event_trigger_there([0,1,2])
end
end
end
end

=begin
COMMENTS BEGIN HERE

Or go to your Game_Player script and replace
CODE

case Input.dir4
when 2
move_down
when 4
move_left
when 6
move_right
when 8
move_up
end

With
CODE

if Input.press?(Input::DOWN)
turn_down
if @cur_dir == Input::DOWN and @w >= WAIT
move_down
end
if @w == nil or @cur_dir != Input::DOWN then @w = 0 end
@cur_dir = Input::DOWN
elsif Input.press?(Input::LEFT)
turn_left
if @cur_dir == Input::LEFT and @w >= WAIT
move_left
end
if @w == nil or @cur_dir != Input::LEFT then @w = 0 end
@cur_dir = Input::LEFT
elsif Input.press?(Input::RIGHT)
turn_right
if @cur_dir == Input::RIGHT and @w >= WAIT
move_right
end
if @w == nil or @cur_dir != Input::RIGHT then @w = 0 end
@cur_dir = Input::RIGHT
elsif Input.press?(Input::UP)
turn_up
if @cur_dir == Input::UP and @w >= WAIT
move_up
end
if @w == nil or @cur_dir != Input::UP then @w = 0 end
@cur_dir = Input::UP
end
if @w != nil
@w += 1
end


And then write, at top of the script (look on the first option to see where you should put it)
CODE

WAIT = 10


You can freely change the WAIT variable to whatever you like.
COMMENTS END HERE
=end

You can change the number in:

Code:
WAIT = 2

to change the time it takes for the character to move when the button is pressed. the higher number, the longer it takes for him to move.

I did NOT make this script
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top