RMRK is retiring.
Registration is disabled. The site will remain online, but eventually become a read-only archive. More information.

RMRK.net has nothing to do with Blockchains, Cryptocurrency or NFTs. We have been around since the early 2000s, but there is a new group using the RMRK name that deals with those things. We have nothing to do with them.
NFTs are a scam, and if somebody is trying to persuade you to buy or invest in crypto/blockchain/NFT content, please turn them down and save your money. See this video for more information.
Jet's Stamina System

0 Members and 1 Guest are viewing this topic.

**
Rep:
Level 82
Stamina System

By Jet

Features

Spoiler for:
Full functional Stamina system
Optional Menu and Map windows
Prevents dashing when stamina runs out
Fully compatible with most extra movement system (swimming, jumping, climbing, etc.)

Screenshots

Spoiler for:

Script/Demo

Here is a stamina system demo (Might be outdated)

Spoiler for:
Code: [Select]
#===============================================================================
# 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


Credit

Jet
Mithran



**
Rep:
Level 82
Dude! This is amazing!! Badd Ass!  :lol: