#===============================================================================
# Stamina System
# By Jet10985 (Jet)
# Help by: Mithran
#===============================================================================
# This snippet will add a stamina system to your game. Stamina, meaning that
# when the player dashes, they will lose stamina. When the stamina runs out
# the player will not be able to dash until it is re-charged.
# This script has: 20 customization options.
#===============================================================================
=begin
How to use:
To increase the max stamina level, you can use this event "Script..." command:
increase_max_stamina(amount)
amount = the amount you want to increase max stamina by
To stop stamina loss, therefore giving infinite stamina while on, use this:
stamina_loss(option)
option = either true or false. True gives them infinite stamina, false makes
the stamina go donw once again.
=end
module Jet_Stamina
# Use an icon or a letter to show with the item gauge?
USE_LETTER = true
# Icon id if you chose false in the above config.
ICON_STAMINA_ID = 50
# This the the letters that will be displayed with the stamina bar to
# represent that the bar is for stamina.
STAMINA_INITIAL = "S"
# These are the level up of stamina. By default, it has 4 specified.
# these represent levels 1 through 4 of the stamina. The level where it
# comes from is derived from a below configuration.
STAMINA_LEVELS = [60, 80, 95, 110]
# This actor's level will determine the stamina level set above.
ACTOR_STAMINA_ID = 0
# This is how much the stamina level will raise for any unspecified levels
# in the above configuration.
BASE_STAMINA_RAISE = 10
# This is how much stamina will be drained per square moved will dashing.
STAMINA_DOWN_PER_SQUARE = 3
# This is how much stamina will be re-gained every second when not moving.
STAMINA_REGEN_PER_SECOND = 2
# This is a variable that will hold the current amount of stamina.
STAMINA_TO_VARIABLE_ID = 61
# Show the stamina on the map?
STAMINA_ON_MAP = true
# This is where the window shall be shown if the window is shown on the map.
MAP_WINDOW_COORDS = [386, 360]
# This is the switch that if on, the map's window will be visible.
MAP_ONOFF_SWITCH = 61
# This is how transperant the map's stamina window is.
# 0 is just the bar, no window, 255 is a completely solid window.
MAP_WINDOW_OPACITY = 200
# Show stamina in the menu?
STAMINA_IN_MENU = true
# Do you want them to regenerate stamina while in the menu?
UPDATE_STAMINA_IN_MENU = true
# This is where the window shall be shown if the window is shown on the menu.
MENU_WINDOW_COORDS = [0, 360]
# Show numbers with the stamina bar, or just the bar?
STAMINA_BAR_WITH_NUMBERS = true
# These are the stamina bar's colors. By default it is goldenrod/dark goldenrod.
STAMINA_GAUGE_COLOR1 = Color.new(184, 134, 11)
STAMINA_GAUGE_COLOR2 = Color.new(218, 165, 32)
# If you are using a jump system, this will drain some stamina each time
# that the player jumps
JUMP_SYSTEM_COMPATABILITY = false
# This is how much stamina will be lost for each jump.
STAMINA_JUMP_LOSS = 6
end
#===============================================================================
# DON'T EDIT FURTHER UNLESS YOU KNOW WHAT TO DO.
#===============================================================================
class Game_Stamina
include Jet_Stamina
attr_accessor :stamina
attr_accessor :max_stamina
attr_accessor :stamina_gain
attr_accessor :max_stamina_plus
attr_accessor :disable_stamina_loss
attr_accessor :got_initial_stamina
def initialize
@stamina = 0
@stamina_gain = 0
@max_stamina = 0
@max_stamina_plus = 0
@disable_stamina_loss = true
@got_initial_stamina = false
end
def update_stamina
get_max_stamina
$game_stamina.stamina_gain += 1 unless $game_player.moving? && $game_player.dash?
if $game_stamina.stamina_gain == 60
$game_stamina.stamina += STAMINA_REGEN_PER_SECOND
$game_stamina.stamina_gain = 0
if $game_stamina.stamina > $game_stamina.max_stamina
$game_stamina.stamina = $game_stamina.max_stamina
end
end
$game_variables[STAMINA_TO_VARIABLE_ID] = $game_stamina.stamina
end
def get_initial_stamina
if $game_party.members[ACTOR_STAMINA_ID].level < STAMINA_LEVELS.size
$game_stamina.stamina = STAMINA_LEVELS[$game_party.members[ACTOR_STAMINA_ID].level - 1]
else
$game_stamina.stamina = STAMINA_LEVELS.max + (($game_party.members[ACTOR_STAMINA_ID].level - (STAMINA_LEVELS.size - 1)) * BASE_STAMINA_RAISE)
end
end
def get_max_stamina
if $game_party.members[ACTOR_STAMINA_ID].level > STAMINA_LEVELS.size
$game_stamina.max_stamina = STAMINA_LEVELS.max + (($game_party.members[ACTOR_STAMINA_ID].level - (STAMINA_LEVELS.size - 1)) * BASE_STAMINA_RAISE) + $game_stamina.max_stamina_plus
else
$game_stamina.max_stamina = STAMINA_LEVELS[$game_party.members[ACTOR_STAMINA_ID].level - 1] + $game_stamina.max_stamina_plus
end
return $game_stamina.max_stamina
end
end
$game_stamina = Game_Stamina.new
class Game_Interpreter
def stamina_loss(option)
if option == true || option == false
$game_stamina.disable_stamina_loss = option
else
p "The option you chose was neither true or false. Please error check and try again"
end
end
def increase_max_stamina(amount)
$game_stamina.max_stamina_plus += amount
end
end
class Game_Character
include Jet_Stamina
if JUMP_SYSTEM_COMPATABILITY
alias jet5902_jump jump unless $@
def jump(*args)
$game_stamina.stamina -= STAMINA_JUMP_LOSS
jet5902_jump(*args)
end
end
alias jet9211_increase_steps increase_steps unless $@
def increase_steps(*args)
$game_stamina.stamina -= STAMINA_DOWN_PER_SQUARE if $game_player.dash? && $game_stamina.disable_stamina_loss && self.is_a?(Game_Player)
jet9211_increase_steps(*args)
end
end
class Window_Stamina < Window_Base
def initialize(x, y)
super(x, y, 160, WLH + 32)
self.opacity = MAP_WINDOW_OPACITY if $scene.is_a?(Scene_Map)
refresh
end
def refresh
self.contents.clear
draw_actor_stamina(0, 0)
end
def update
refresh
end
end
class Window_Base
include Jet_Stamina
def stamina_color
return crisis_color if $game_stamina.stamina < $game_stamina.get_max_stamina / 4
return normal_color
end
def draw_actor_stamina(x, y, width = 120)
draw_actor_stamina_gauge(x, y, width)
self.contents.font.color = system_color
if USE_LETTER
self.contents.draw_text(x, y, 30, WLH, STAMINA_INITIAL)
else
draw_icon(ICON_STAMINA_ID, x, y)
end
self.contents.font.color = stamina_color
last_font_size = self.contents.font.size
xr = x + width
if STAMINA_BAR_WITH_NUMBERS
if width < 120
self.contents.draw_text(xr - 44, y, 44, WLH, $game_stamina.stamina, 2)
else
self.contents.draw_text(xr - 99, y, 44, WLH, $game_stamina.stamina, 2)
self.contents.font.color = normal_color
self.contents.draw_text(xr - 55, y, 11, WLH, "/", 2)
self.contents.draw_text(xr - 44, y, 44, WLH, $game_stamina.get_max_stamina, 2)
end
end
end
def draw_actor_stamina_gauge(x, y, width = 120)
gw = width * $game_stamina.stamina / $game_stamina.max_stamina
gc1 = STAMINA_GAUGE_COLOR1
gc2 = STAMINA_GAUGE_COLOR2
self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
end
end
class Scene_Map
include Jet_Stamina
alias jet0221_start start unless $@
def start
$game_stamina.update_stamina
unless $game_stamina.got_initial_stamina
$game_stamina.get_initial_stamina
$game_stamina.got_initial_stamina = true
end
@stamina_window = Window_Stamina.new(MAP_WINDOW_COORDS[0], MAP_WINDOW_COORDS[1]) if STAMINA_ON_MAP
@stamina_window.visible = false
jet0221_start
end
alias jet5021_update update unless $@
def update
$game_stamina.update_stamina
if !$game_switches[MAP_ONOFF_SWITCH] && STAMINA_ON_MAP
@stamina_window.visible = false
elsif STAMINA_ON_MAP
@stamina_window.visible = true
end
@stamina_window.update if STAMINA_ON_MAP
if @stamina_window.visible && !$game_player.dash?
@stamina_window.opacity -= 1
if @stamina_window.opacity == 10
@stamina_window.openness -= 1
end
elsif @stamina_window.visible && $game_player.dash?
@stamina_window.opacity += 1 unless @stamina_window.opacity == 255
@stamina_window.openness += 1 unless @stamina_window.openness == 255
end
jet5021_update
end
alias jet2048_terminate terminate unless $@
def terminate
@stamina_window.dispose if STAMINA_ON_MAP
jet2048_terminate
end
end
class Game_Player
alias jet6902_dash? dash? unless $@
def dash?
return false if $game_stamina.stamina < Jet_Stamina::STAMINA_DOWN_PER_SQUARE
jet6902_dash?
end
end
class Scene_Menu
include Jet_Stamina
alias jet5893_start start unless $@
def start
jet5893_start
@stamina_window = Window_Stamina.new(MENU_WINDOW_COORDS[0], MENU_WINDOW_COORDS[1]) if STAMINA_IN_MENU
end
alias jet6942_update update unless $@
def update
jet6942_update
$game_stamina.update_stamina if UPDATE_STAMINA_IN_MENU
@stamina_window.update if STAMINA_IN_MENU
end
alias jet7692_terminate terminate unless $@
def terminate
@stamina_window.dispose if STAMINA_IN_MENU
jet7692_terminate
end
end
class Scene_File
alias jet3891_write_save_data write_save_data unless $@
def write_save_data(file)
jet3891_write_save_data(file)
Marshal.dump($game_stamina, file)
end
alias jet5931_read_save_data read_save_data unless $@
def read_save_data(file)
jet5931_read_save_data(file)
$game_stamina = Marshal.load(file)
end
end
unless $engine_scripts.nil?
JetEngine.active("Stamina System", "v1")
end