Save-Point
KModTimer VX + ACE - Printable Version

+- Save-Point (https://www.save-point.org)
+-- Forum: Material Development (https://www.save-point.org/forum-8.html)
+--- Forum: Scripts Database (https://www.save-point.org/forum-39.html)
+---- Forum: RPGMaker VX/VXAce (RGSS2/3) Engines (https://www.save-point.org/forum-117.html)
+---- Thread: KModTimer VX + ACE (/thread-9687.html)



KModTimer VX + ACE - kyonides - 09-27-2024

KModTimer VX + ACE
Version 1.0.0

by Kyonides


Introduction

This is a simple scriptlet that provides some extra features for your timer sprite like custom font name and size and even a colored background. The last feature can be deactivated as well.

VX Script

Code:
# * KModTimer VX * #
#   Scripter : Kyonides Arkanthes
#   v1.0.0 - 2023-05-02

# * Script Calls * #

# - Reset Timer's Setup
# $game_system.reset_timer

# - Change Timer's X Alignment - Positions: :left, :center or :right
# $game_system.timer_pos_x = X-Alignment

# $game_system.timer_font_name = "Font Name"
# $game_system.timer_font_size = Number
# $game_system.timer_font("Font Name", Number)

# - Change the Font Color
# $game_system.timer_font_color(Red, Green, Blue)
# $game_system.timer_font_color(Red, Green, Blue, Alpha)

# - Change the Background Color
# $game_system.timer_bg_color(Red, Green, Blue)
# $game_system.timer_bg_color(Red, Green, Blue, Alpha)

# - Toggle Background Color - Boolean: true or false
# $game_system.timer_use_bg = Boolean

module KModTimer
  # Initial Values
  FONT_NAME = "Arial"
  FONT_SIZE = 32
  # Color Ranges (0..255) [Red, Green, Blue, Alpha]
  FONT_COLOR = [255, 255, 255, 255]
  BG_COLOR   = [0, 0, 0, 80]
  USE_BG_COLOR = true
  # Choose the Position: :left, :center or :right
  POSITION_X = :left
# * End of Setup Section * #
  extend self
  attr_accessor :refresh
  class TimerData
    def initialize() reset_settings end
    def reset_settings
      @font_name = FONT_NAME.dup
      @font_size = FONT_SIZE
      @font_color = FONT_COLOR.dup
      @bg_color = BG_COLOR.dup
      @use_bg = USE_BG_COLOR
      @pos_x = POSITION_X
    end
    attr_accessor :font_name, :font_size, :font_color
    attr_accessor :bg_color, :use_bg, :pos_x
  end
end

class Sprite_Timer
  def initialize(viewport)
    super(viewport)
    @data = $game_system.timer_setup
    self.bitmap = Bitmap.new(88, 48)
    bg_setup
    font_setup
    update_position
    self.y = 0
    self.z = 500
    update
  end

  def bg_setup
    @bg_color = Color.new(*@data.bg_color)
  end

  def font_setup
    font = self.bitmap.font
    font.name = @data.font_name
    font.size = @data.font_size
    font.color.set(*@data.font_color)
  end

  def update_x
    case @data.pos_x
    when :left
      self.x = 0
    when :center
      self.x = (Graphics.width - self.bitmap.width) / 2
    when :right
      self.x = Graphics.width - self.bitmap.width
    end
  end

  def update_position
    update_x
    self.y = 0
    self.z = 200
  end

  def redraw_backdrop
    bm = self.bitmap
    @data.use_bg ? bm.fill_rect(bm.rect, @bg_color) : bm.clear
  end

  def timer_text
    min = @total_sec / 60
    sec = @total_sec % 60
    sprintf("%02d:%02d", min, sec)
  end

  def redraw
    if KModTimer.refresh
      KModTimer.refresh = nil
      bg_setup
      font_setup
    end
    redraw_backdrop
    bm = self.bitmap
    bm.draw_text(bm.rect, timer_text, 1)
  end

  def update_bitmap
    if $game_system.timer / Graphics.frame_rate != @total_sec
      @total_sec = $game_system.timer / Graphics.frame_rate
      redraw
    end
  end

  def update
    super
    self.visible = $game_system.timer_working
    update_x
    update_bitmap
  end
end

class Game_System
  alias :kyon_mod_timer_gm_sys_init :initialize
  def initialize
    kyon_mod_timer_gm_sys_init
    @timer_setup = KModTimer::TimerData.new
  end

  def reset_timer
    @timer_setup.reset_settings
  end

  def timer_pos_x=(new_x)
    @timer_setup.pos_x = new_x
  end

  def timer_font(new_name, new_size)
    KModTimer.refresh = true
    @timer_setup.font_name = new_name
    @timer_setup.font_size = new_size
  end

  def timer_font_name=(new_name)
    KModTimer.refresh = true
    @timer_setup.font_name = new_name
  end

  def timer_font_size=(new_size)
    KModTimer.refresh = true
    @timer_setup.font_size = new_size
  end

  def timer_font_color(red, green, blue, alpha=255)
    KModTimer.refresh = true
    @timer_setup.font_color = [red, green, blue, alpha]
  end

  def timer_bg_color(red, green, blue, alpha=255)
    KModTimer.refresh = true
    @timer_setup.bg_color = [red, green, blue, alpha]
  end

  def timer_use_bg=(bool)
    KModTimer.refresh = true
    @timer_setup.use_bg = bool
  end
  attr_reader :timer_setup
end

ACE Script

Code:
# * KModTimer ACE * #
#   Scripter : Kyonides Arkanthes
#   v1.0.0 - 2023-05-02

# * Script Calls * #

# - Reset Timer's Setup
# $game_timer.reset

# - Change Timer's X Alignment - Positions: :left, :center or :right
# $game_timer.pos_x = X-Alignment

# $game_timer.font_name = "Font Name"
# $game_timer.font_size = Number
# $game_timer.set_font("Font Name", Number)

# - Change the Font Color
# $game_timer.font_color(Red, Green, Blue)
# $game_timer.font_color(Red, Green, Blue, Alpha)

# - Change the Background Color
# $game_timer.bg_color(Red, Green, Blue)
# $game_timer.bg_color(Red, Green, Blue, Alpha)

# - Toggle Background Color - Boolean: true or false
# $game_timer.use_bg = Boolean

module KModTimer
  # Initial Values
  FONT_NAME = "Arial"
  FONT_SIZE = 32
  # Color Ranges (0..255) [Red, Green, Blue, Alpha]
  FONT_COLOR = [255, 255, 255, 255]
  BG_COLOR   = [0, 0, 0, 80]
  USE_BG_COLOR = true
  # Choose the Position: :left, :center or :right
  POSITION_X = :left
# * End of Setup Section * #
  extend self
  attr_accessor :refresh
end

class Sprite_Timer
  def create_bitmap
    self.bitmap = Bitmap.new(96, 48)
    bg_setup
    font_setup
  end

  def bg_setup
    @bg_color = Color.new(*$game_timer.bg_color)
  end

  def font_setup
    font = self.bitmap.font
    font.name = $game_timer.font_name
    font.size = $game_timer.font_size
    font.color.set(*$game_timer.font_color)
  end

  def redraw_backdrop
    bm = self.bitmap
    $game_timer.use_bg ? bm.fill_rect(bm.rect, @bg_color) : bm.clear
  end
 
  def redraw
    if KModTimer.refresh
      KModTimer.refresh = nil
      bg_setup
      font_setup
    end
    redraw_backdrop
    bitmap.draw_text(bitmap.rect, timer_text, 1)
  end

  def update_x
    case $game_timer.pos_x
    when :left
      self.x = 0
    when :center
      self.x = (Graphics.width - self.bitmap.width) / 2
    when :right
      self.x = Graphics.width - self.bitmap.width
    end
  end

  def update_position
    update_x
    self.y = 0
    self.z = 200
  end
end

class Game_Timer
  include KModTimer
  alias :kyon_mod_timer_gm_sys_init :initialize
  def initialize
    kyon_mod_timer_gm_sys_init
    reset
  end

  def reset
    @font_name = FONT_NAME.dup
    @font_size = FONT_SIZE
    @font_color = FONT_COLOR.dup
    @bg_color = BG_COLOR.dup
    @use_bg = USE_BG_COLOR
    @pos_x = POSITION_X
  end

  def set_font(new_name, new_size)
    KModTimer.refresh = true
    @font_name = new_name
    @font_size = new_size
  end

  def font_name=(new_name)
    KModTimer.refresh = true
    @font_name = new_name
  end

  def font_size=(new_size)
    KModTimer.refresh = true
    @font_size = new_size
  end

  def font_color(red, green, blue, alpha=255)
    KModTimer.refresh = true
    @font_color = [red, green, blue, alpha]
  end

  def bg_color(red, green, blue, alpha=255)
    KModTimer.refresh = true
    @bg_color = [red, green, blue, alpha]
  end

  def use_bg=(bool)
    KModTimer.refresh = true
    @use_bg = bool
  end
  attr_reader :font_name, :font_size, :font_color, :bg_color,  :use_bg
  attr_accessor :pos_x
end

Terms & Conditions

Feel free to use it.
Optionally, you could include my nickname in your game credits.
That's it.