Jump to content
New account registrations are disabed. This website is now an archive. Read more here.
Guest Kain Nobel

Player Dash

Recommended Posts

Guest Kain Nobel

Introduction

This is a running (or "dashing" if we may) system, requested by Reon-Eclispe, which allows the player to dash for a designated period of time until they've depleted their stamina. The settings are instances of Game_Player::Dash, meaning you'll be able to modify, save and load them between game sessions.

 

I hate to say it but the settings are a bit touchy, you might want to experiment with whatever is suitable for your game. However, I'm sure you'll enjoy it once you get the hang of it!

 

Features

  • One-button running feature!
  • Easy to setup and control!
  • Customizable speeds for different movement phases
  • Player can be exhausted from running too much
  • Compatable with my Vehicles XP (not yet released)
  • Probably other stuff I'm too lazy to list right now

The Script

player_dash.txt

 

#==========================================================================
# ** Player : Dash
#=========================================================================

#-------------------------------------------------------------------------------
# * SDK Log
#-------------------------------------------------------------------------------
SDK.log('Player.Dash', 'Kain Nobel ©', 3.5, '2009.06.17')
#-------------------------------------------------------------------------------
# * SDK Enabled Test : Begin
#-------------------------------------------------------------------------------
if SDK.enabled?('Player.Dash')

#==========================================================================
# ** Game_Player::Dash
#==========================================================================

class Game_Player::Dash
 #-----------------------------------------------------------------------------
 # * Switch which disables the dash system and HUD
 #-----------------------------------------------------------------------------
 Switch_Disable = 1
 #-----------------------------------------------------------------------------
 # * Switch which disables exhaustion
 #-----------------------------------------------------------------------------
 Switch_Exhaust = 2
 #-----------------------------------------------------------------------------
 # * Maps which disable the dash system and HUD
 #-----------------------------------------------------------------------------
 Maps_Disabled  = []
 #-----------------------------------------------------------------------------
 # * Scenes which don't display dash HUD (alternate scenes with Spriteset_Map)
 #-----------------------------------------------------------------------------
 Scenes_Disabled = true
 #-----------------------------------------------------------------------------
 # * Button used for Dashning
 #-----------------------------------------------------------------------------
 Button = Input::C
 #-----------------------------------------------------------------------------
 # * Public Instance Variables
 #-----------------------------------------------------------------------------
 attr_accessor :slow_speed
 attr_accessor :walk_speed
 attr_accessor :dash_speed
 attr_accessor :stamina
 attr_accessor :points
 #-----------------------------------------------------------------------------
 # * Object Initialization
 #-----------------------------------------------------------------------------
 def initialize
@slow_speed   = 3					   # Speed for when player is exhausted
@walk_speed   = 3.5					 # Speed for when player is walking
@dash_speed   = 5					   # Speed for when player is dashing
@stamina	  = 1					   # Steps player can take while dashing
@stamina_rate = 0.01					# Frames that stamina is replenished
@exhersion	= @stamina / 8			# At the point where player exhausted
@points	   = @stamina				# Sets points to stamina (don't touch)
 end
 #-----------------------------------------------------------------------------
 # * Enabled?
 #-----------------------------------------------------------------------------
 def enabled?
return false if $game_switches[switch_Disable]
return false if Maps_Disabled[$game_map.map_id]
if Scenes_Disabled == true
  return false unless $scene.is_a?(Scene_Map)
else
  return false if Scenes_Disabled.include?($scene.class.to_s)
end
return true
 end
 #-----------------------------------------------------------------------------
 # * Increase Points
 #-----------------------------------------------------------------------------
 def increase_points(n)
@points = [[@points + n, @stamina].min, 0].max
 end
 #-----------------------------------------------------------------------------
 # * Decrease Points
 #-----------------------------------------------------------------------------
 def decrease_points(n)
increase_points(-n)
 end
 #-----------------------------------------------------------------------------
 # * Update
 #-----------------------------------------------------------------------------
 def update
unless enabled?
  update_disabled
  return
end
@disabled = false
if idle?
  update_idle
  return
elsif exhausted?
  update_exhausted
  return
elsif walking?
  update_walking
  return
elsif dashing?
  update_dashing
  return
end
 end
 #-----------------------------------------------------------------------------
 # * Update Disabled
 #-----------------------------------------------------------------------------
 def update_disabled
unless @disabled
  $game_player.move_speed = (Game_Player.new).move_speed
  @disabled = true
end
 end
 #-----------------------------------------------------------------------------
 # * Idle?
 #-----------------------------------------------------------------------------
 def idle?
!$game_player.moving?
 end
 #-----------------------------------------------------------------------------
 # * Exhausted?
 #-----------------------------------------------------------------------------
 def exhausted?
@exhausted && !$game_switches[switch_Exhaust]
 end
 #-----------------------------------------------------------------------------
 # * Walking?
 #-----------------------------------------------------------------------------
 def walking?
return true if $game_player.move_route_forcing
$game_player.moving? && !Input.press?(Button)
 end
 #-----------------------------------------------------------------------------
 # * Dashing?
 #-----------------------------------------------------------------------------
 def dashing?
return false if $game_system.map_interpreter.running?
return false if $game_temp.message_window_showing
return false if $game_player.move_route_forcing
$game_player.moving? && Input.press?(Button)
 end
 #-----------------------------------------------------------------------------
 # * Update Idle
 #-----------------------------------------------------------------------------
 def update_idle
increase_points(exhausted? ? @stamina_rate * 0.5 : @stamina_rate)
if @points > (@exhersion)
  @exhausted = false
end
 end
 #-----------------------------------------------------------------------------
 # * Update Exhausted
 #-----------------------------------------------------------------------------
 def update_exhausted
$game_player.move_speed = @slow_speed
increase_points(@stamina_rate * 0.5)
if @points > (@exhersion)
  @exhausted = false
end
 end
 #-----------------------------------------------------------------------------
 # * Update Walking
 #-----------------------------------------------------------------------------
 def update_walking
$game_player.move_speed = @walk_speed
increase_points(@stamina_rate * 0.5)
 end
 #-----------------------------------------------------------------------------
 # * Update Dashing
 #-----------------------------------------------------------------------------
 def update_dashing
unless $game_player.move_speed == @dash_speed
  $game_player.move_speed += (@dash_speed * 0.1)
  return
end
decrease_points(@stamina_rate * 2)
if @points.zero?
  @exhausted = true
end
 end
 #-----------------------------------------------------------------------------
 # * Last Move
 #-----------------------------------------------------------------------------
 def last_move
return 0 if idle?
return 1 if exhausted?
return 2 if walking?
return 3 if dashing?
 end
end

#==========================================================================
# ** Game_Player
#==========================================================================

class Game_Player < Game_Character
 #-----------------------------------------------------------------------------
 # * Public Instance Variables
 #-----------------------------------------------------------------------------
 attr_accessor :move_speed
 #-----------------------------------------------------------------------------
 # * Alias Listings
 #-----------------------------------------------------------------------------
 alias_method :dashsystem_gmplayer_updateplayermove, :update_player_movement
 #-----------------------------------------------------------------------------
 # * Dash
 #-----------------------------------------------------------------------------
 def dash
@dash ||= Game_Player::Dash.new
@dash
 end
 #-----------------------------------------------------------------------------
 # * Update
 #-----------------------------------------------------------------------------
 def update_player_movement
dashsystem_gmplayer_updateplayermove
@dash.update
 end
end

#==========================================================================
# ** Window_DashStamina
#==========================================================================

class Window_DashStamina < Window_Base
 #-----------------------------------------------------------------------------
 # * Object Initialization
 #-----------------------------------------------------------------------------
 def initialize
super(0, 416, 160, 64)
self.contents = Bitmap.new(width - 32, height - 32)
self.opacity = 0
refresh
 end
 #-----------------------------------------------------------------------------
 # * Refresh
 #-----------------------------------------------------------------------------
 def refresh
self.contents.clear
@points	= $game_player.dash.points
@last_move = $game_player.dash.last_move
self.contents.draw_seph_gradient_bar(0, 0, @points,
$game_player.dash.stamina, 128)
if $game_player.dash.idle?
  color = ($game_player.dash.exhausted? ? Color.new(255,0,0) : normal_color)
  self.contents.font.color = color
  self.contents.draw_text(0, 0, 128, 32, "Idle", 1)
elsif $game_player.dash.exhausted?
  self.contents.font.color = Color.new(255,0,0)
  self.contents.draw_text(0, 0, 128, 32, "Exhausted", 1)
elsif $game_player.dash.walking?
  self.contents.font.color = normal_color
  self.contents.draw_text(0, 0, 128, 32, "Walking", 1)
elsif $game_player.dash.dashing?
  self.contents.font.color = system_color
  self.contents.draw_text(0, 0, 128, 32, "Dashing", 1)
end
 end
 #-----------------------------------------------------------------------------
 # * Update?
 #-----------------------------------------------------------------------------
 def update?
need_update = false
need_update |= $game_player.dash.points	!= @points
need_update |= $game_player.dash.last_move != @last_move
(need_update && Graphics.frame_count % 4 == 1)
 end
 #-----------------------------------------------------------------------------
 # * Update
 #-----------------------------------------------------------------------------
 def update
self.visible = $game_player.dash.enabled?
if update?
  refresh
end
 end
end

#==========================================================================
# ** Spriteset_Map
#==========================================================================

class Spriteset_Map
 #-----------------------------------------------------------------------------
 # * Alias Lisitngs
 #-----------------------------------------------------------------------------
 alias_method :dashsystem_ssmap_initialize, :initialize
 alias_method :dashsystem_ssmap_update,	 :update
 alias_method :dashsystem_ssmap_dispose,	:dispose
 #-----------------------------------------------------------------------------
 # * Object Initialization
 #-----------------------------------------------------------------------------
 def initialize
@window_dashstamina = Window_DashStamina.new
dashsystem_ssmap_initialize
 end
 #-----------------------------------------------------------------------------
 # * Update
 #-----------------------------------------------------------------------------
 def update
@window_dashstamina.update
dashsystem_ssmap_update
 end
 #-----------------------------------------------------------------------------
 # * Dispose
 #-----------------------------------------------------------------------------
 def dispose
@window_dashstamina.dispose
dashsystem_ssmap_dispose
 end
end

#-------------------------------------------------------------------------------
# * SDK Enabled Test : End
#-------------------------------------------------------------------------------
end

 

 

Instructions

Place below SDK/MACL and above Main! Setup is handled by the constants in the top of the script, if you have any questions or are confused don't hesitate to ask! This script uses the following method from MACL's "RGSS.Bitmap.gradient" library...

 

Bitmap.draw_seph_gradient_bar

 

Compatibility

Requires SDK stuffs, you can easily alias Game_Player::Dash.enabled? to allow other scripts to disable this system. This script is compatable with my Vehicles XP system (which I haven't released yet.)

 

Please note, this will corrupt old save files.

 

Credits & Thanks

Thanks to Reon-Eclispe for making the request, it was fun and I enjoyed doing this one!

Share this post


Link to post
Share on other sites

First and for most, the script don't have "true or false" switches, so a the botom of the SDK log...

 

Replace:

if SDK.enabled?('Player.Dash')

With:

 

if SDK.state('Player.Dash')

 

.......................NOW MY PROBLEM IS.........................................................................................

def refresh

self.contents.clear

@points = $game_player.dash.points

@last_move = $game_player.dash.last_move

self.contents.draw_seph_gradient_bar(0, 0, @points,

$game_player.dash.stamina, 128)

if $game_player.dash.idle?

color = ($game_player.dash.exhausted? ? Color.new(255,0,0) : normal_color)

self.contents.font.color = color

self.contents.draw_text(0, 0, 128, 32, "Idle", 1)

elsif $game_player.dash.exhausted?

self.contents.font.color = Color.new(255,0,0)

self.contents.draw_text(0, 0, 128, 32, "Exhausted", 1)

elsif $game_player.dash.walking?

self.contents.font.color = normal_color

self.contents.draw_text(0, 0, 128, 32, "Walking", 1)

elsif $game_player.dash.dashing?

self.contents.font.color = system_color

self.contents.draw_text(0, 0, 128, 32, "Dashing", 1)

end

end

........................................................................................................

 

EXPLAIN ME THE PROBLEM THERE!!!

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...