Jump to content
Sign in to follow this  
roninator2

Bonus Codes

Recommended Posts

Bonus Codes v1.10 - VX Ace
by Roninator2


Introduction
A script made to recreate the cheat code system in games of old.

Features
- Have as many codes as you want the player to use
- Each successful entry will activate the corresponding switch
- Use the switch to perform whatever actions you want in the game
- Option to hide the command in the title menu.
- When hidden, use F8 to open the code screen and F7 to backspace and close

How to Use
Put below Materials

Images

Spoiler

1613431345470.png.1e6029b21fdf67245b5dd02726c9fd8e.png


Script

Spoiler

# ╔═════════════════════════════════════╦════════════════════╗
# ║ Title: Code Input on Title Screen   ║  Version: 1.10     ║
# ║ Author: Roninator2                  ║                    ║
# ╠═════════════════════════════════════╬════════════════════╣
# ║ Function:                           ║   Date Created     ║
# ║   Allows to input a 'code' on the   ╠════════════════════╣
# ║   title screen to activate bonuses  ║    15 Feb 2021     ║
# ╚═════════════════════════════════════╩════════════════════╝
# ╔══════════════════════════════════════════════════════════╗
# ║ Requires: nil                                            ║
# ╚══════════════════════════════════════════════════════════╝
# ╔══════════════════════════════════════════════════════════╗
# ║ Script provides the ability to input a code like you     ║
# ║  use to on old arcade games, in order to activate        ║
# ║  bonuses or special powers.                              ║
# ║                                                          ║
# ║  Adjust the settings as desired for how many codes       ║
# ║  you wish to use for your game.                          ║
# ║  'B' cannot be used as it controls deleting entries      ║
# ║  and closing the window. This is the X on the keyboard   ║
# ║                                                          ║
# ║  Codes must have the text in lower case not upper case   ║
# ╚══════════════════════════════════════════════════════════╝
# ╔══════════════════════════════════════════════════════════╗
# ║ Updates:                                                 ║
# ║ 1.10 - 16 Feb 2021 - Added option to hide code in menu   ║
# ║ 1.01 - 15 Feb 2021 - Added block codes if continue       ║
# ║     enabled and removed un-needed code. Refactored code  ║
# ║ 1.00 - 15 Feb 2021 - Script finished                     ║
# ║ 0.00 - 14 Feb 2021 - Script started                      ║
# ╚══════════════════════════════════════════════════════════╝
# ╔══════════════════════════════════════════════════════════╗
# ║ Terms of use:                                            ║
# ║ Free for all RPG Maker uses                              ║
# ╚══════════════════════════════════════════════════════════╝
#
# Name  Game pad    Keyboard          Main function
# A     Button 1    Shift             Dash
# B     Button 2    Esc, Num 0, X     Cancel, Menu
# C     Button 3    Space, Enter, Z   Confirm, OK, Enter
# X     Button 4    A -
# Y     Button 5    S -
# Z     Button 6    D -
# L     Button 7    Q, Page Up        Previous page
# R     Button 8    W, Page Down      Next page
#
# Other options are
# CTRL    ??        CTRL             
# ALT     ??        ALT
# Down   down
# Up     up
# Left   left
# Right  right
#
# More could be programmed if using a full keyboard input script
# this script does not account for keyboard input scripts.

module R2_BONUS_CODES

    # Codes for cheats/bonuses.
  # Leave empty if not using that code. I.E. :code# = [""]
    # Add more as you desire
  # each code matches to the switches listed below
    CHEATCODES = {
  :code1 => ["up","up","down","down","left","left","right","right","x","y"],
  :code2 => ["left","left","down","left","right","right","z","x"],
  :code3 => ["up","l","down","r","up","left","down","right","r","l","y"],
  :code4 => [""],
    }

  # add more switches as you add more codes.
  # set to 0 to not use that code
  # [switch 5, switch 6, switch 7, switch 0]
  CODE_SWITCHES = [5, 6, 7, 0]
 
    # Sounds for codes
  BAD = "Buzzer1"        # wrong code entry
  BTN = "Knock"            # Button pressed
  CODE = "Load"          # Code complete
   
  CONTINUE = false # if a save file is present, code entry is blocked when true
  HIDE_COMMAND = false # true will hide the command in the title menu
  # then use F8 to open the code screen, F7 to back space and close
end

#######################################################################
# * Window CodeCommand
#######################################################################

class Window_CodeCommand < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
    super(x, y, width, height)
    @inputed_code = []
    @pos = 0
  end
  #--------------------------------------------------------------------------
  # * Process handling
  #--------------------------------------------------------------------------
  def process_handling
    if R2_BONUS_CODES::HIDE_COMMAND
      process_back if Input.repeat?(:F7)
    else
      process_back if Input.repeat?(:B)
    end
  end
  #--------------------------------------------------------------------------
  # * Process delete input / go back one
  #--------------------------------------------------------------------------
  def process_back
    if @pos == 0
      call_cancel_handler
    else
      @inputed_code.pop
      @pos -= 1
    end
  end
  #--------------------------------------------------------------------------
  # * Call cancel to close window
  #--------------------------------------------------------------------------
  def call_cancel_handler
    call_handler(:cancel)
  end
  #--------------------------------------------------------------------------
  # * Update
  #--------------------------------------------------------------------------
  def update
    @sprite.dispose if @sprite
    return unless @inputed_code != []
    @sprite = Sprite.new
    @sprite.bitmap = Bitmap.new(Graphics.width, Graphics.height)
    @sprite.z = 400
    rect = Rect.new(10, y+10, Graphics.width - 20, line_height)
    result = @inputed_code.to_s.clone
    result.gsub!(/\"/)  { "" }
    result.gsub!(/\[/)  { "" }
    result.gsub!(/\]/)  { "" }
    text = result
    @sprite.bitmap.font.size = 24
    @sprite.bitmap.draw_text(rect, text)
  end
  #--------------------------------------------------------------------------
  # * Reset window
  #--------------------------------------------------------------------------
  def reset
    @inputed_code = []
    @pos = 0
  end
  #--------------------------------------------------------------------------
  # * Display Input
  #--------------------------------------------------------------------------
  def dis_input(word)
    case word
    when "down"
      @inputed_code[@pos] = "Down"
      @pos += 1
    when "left"
      @inputed_code[@pos] = "Left"
      @pos += 1
    when "right"
      @inputed_code[@pos] = "Right"
      @pos += 1
    when "up"
      @inputed_code[@pos] = "Up"
      @pos += 1
    when "a"
      @inputed_code[@pos] = "A"
      @pos += 1
    when "b"
      if R2_BONUS_CODES::HIDE_COMMAND
        @inputed_code[@pos] = "B"
        @pos += 1
      else
        process_handling
      end
    when "c"
      @inputed_code[@pos] = "C"
      @pos += 1
    when "x"
      @inputed_code[@pos] = "X"
      @pos += 1
    when "y"
      @inputed_code[@pos] = "Y"
      @pos += 1
    when "z"
      @inputed_code[@pos] = "Z"
      @pos += 1
    when "l"
      @inputed_code[@pos] = "L"
      @pos += 1
    when "r"
      @inputed_code[@pos] = "R"
      @pos += 1
    when "ctrl"
      @inputed_code[@pos] = "Ctrl"
      @pos += 1
    when "alt"
      @inputed_code[@pos] = "Alt"
      @pos += 1
    when "f7"
      process_handling if R2_BONUS_CODES::HIDE_COMMAND
    end
  end
end

#######################################################################
# * Add title command for codes
#######################################################################
class Window_TitleCommand < Window_Command
  def make_command_list
    codes = R2_BONUS_CODES::CONTINUE ? !continue_enabled : true
    add_command(Vocab::new_game, :new_game)
    add_command(Vocab::continue, :continue, continue_enabled)
    add_command(Vocab::shutdown, :shutdown)
    add_command("Enter Codes", :bonus_code, codes) unless R2_BONUS_CODES::HIDE_COMMAND
  end
end

#######################################################################
# * Scene Title
#######################################################################
class Scene_Title < Scene_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
    alias r2_bonus_code_start    start
  def start
    r2_bonus_code_start
    @r2_btn_press = 0
    @temp_count = 0
        @cheatcodes = []
    @linecode = []
    for i in 0..R2_BONUS_CODES::CHEATCODES.size - 1
      @cheatcodes.push(false)
      @linecode.push(true)
    end
    create_code_window
        @enter_code = false
  end
  #--------------------------------------------------------------------------
  # * Create Command Window
  #--------------------------------------------------------------------------
  def create_command_window
    @command_window = Window_TitleCommand.new
    @command_window.set_handler(:new_game, method(:command_new_game))
    @command_window.set_handler(:continue, method(:command_continue))
    @command_window.set_handler(:shutdown, method(:command_shutdown))
    @command_window.set_handler(:bonus_code, method(:command_bonus_code)) unless R2_BONUS_CODES::HIDE_COMMAND
  end
  #--------------------------------------------------------------------------
  # * Create Code Window
  #--------------------------------------------------------------------------
  def create_code_window
    @code_window = Window_CodeCommand.new(0, 160, Graphics.width, 48)
    @code_window.viewport = @viewport
    @code_window.x = 0
    @code_window.y = Graphics.height / 2 - 50
    @code_window.hide
    @code_window.set_handler(:cancel,    method(:close_code_window))
  end
  #--------------------------------------------------------------------------
  # * Close Code Window
  #--------------------------------------------------------------------------
  def close_code_window
    @code_window.deactivate
    @code_window.hide
    @command_window.activate
    for i in 0..R2_BONUS_CODES::CHEATCODES.size - 1
      @linecode[i] = true if @linecode[i] == false
    end
        @enter_code = false
  end
  #--------------------------------------------------------------------------
  # * [New Game] Command
  #--------------------------------------------------------------------------
  def command_new_game
    DataManager.setup_new_game
    close_command_window
    fadeout_all
    $game_map.autoplay
    SceneManager.goto(Scene_Map)
    check_bonus
  end
  #--------------------------------------------------------------------------
  # * Activate switches
  #--------------------------------------------------------------------------
  def check_bonus
    R2_BONUS_CODES::CODE_SWITCHES.each_with_index { |code, i|
      next if code == 0
      if @cheatcodes[i] == true
        $game_switches[R2_BONUS_CODES::CODE_SWITCHES[i]] = true
      end
    }
  end
  #--------------------------------------------------------------------------
  # * Show code window
  #--------------------------------------------------------------------------
  def command_bonus_code
    @code_window.show
    @code_window.activate
    max_length
        @enter_code = true
    @command_window.deactivate
  end
  #--------------------------------------------------------------------------
  # * Show code window
  #--------------------------------------------------------------------------
  def max_length
    @max_length = 0
        R2_BONUS_CODES::CHEATCODES.each_with_index do |code_hash, c|
            code = code_hash[1]
      code.each_with_index do | step, i |
        @max_length = code.length if (@max_length < code.length)
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Wait to slow player input
  #--------------------------------------------------------------------------
  def wait(duration)
    count = 0
    duration.times { count += 1}
    return
  end
  #--------------------------------------------------------------------------
  # * Alias Update
  #--------------------------------------------------------------------------
    alias r2_bonus_code_update    update
  def update
    r2_bonus_code_update
    if R2_BONUS_CODES::HIDE_COMMAND
      command_bonus_code if Input.trigger?(:F8)
    end
    btn = triggered if @enter_code
    return if btn == nil
    RPG::SE.new(R2_BONUS_CODES::BTN).play
    wait(30) # wait between player input
    climb = false
    @r2_btn_press -= 1 if btn == "b"
    @r2_btn_press -= 1 if btn == "f7"
    @temp_count -= 1 if btn == "b"
    @temp_count -= 1 if btn == "f7"
    @code_window.reset if @r2_btn_press == -1
    @r2_btn_press = 0 if @r2_btn_press <= 0
    @temp_count = 0 if @temp_count <= 0
    if @r2_btn_press == 0
      for i in 0..R2_BONUS_CODES::CHEATCODES.size - 1
        @linecode[i] = true if @linecode[i] == false
      end
    end
        R2_BONUS_CODES::CHEATCODES.each_with_index do |code_hash, c|
      for line in code_hash
        next unless @linecode[c] == true
      end
            code = code_hash[1]
      code.each_with_index do | step, i |
        if (@r2_btn_press == i) && (btn == code[@r2_btn_press])
          climb = true
          if @r2_btn_press == code.length - 1
            @cheatcodes[c] = true
            RPG::SE.new(R2_BONUS_CODES::CODE).play
            reset
            for r in 0..R2_BONUS_CODES::CHEATCODES.size - 1
              @linecode[r] = true if @linecode[r] == false
            end
          end
        elsif (btn != code[@r2_btn_press])
          @linecode[c] = false
          if @temp_count > @max_length
            RPG::SE.new(R2_BONUS_CODES::BAD).play
            reset
          end
        end
      end
    end
    @temp_count += 1
    @r2_btn_press += 1 if climb == true
    code_count = 0
    @linecode.each do |b|
      if b == true
        code_count += 1
      end
    end
    if code_count == 0 && @r2_btn_press == 0
      @code_window.reset
      for i in 0..R2_BONUS_CODES::CHEATCODES.size - 1
        @linecode[i] = true if @linecode[i] == false
      end
      @temp_count = 0
    end
  end
  #--------------------------------------------------------------------------
  # * Reset - set values to 0
  #--------------------------------------------------------------------------
  def reset
    @code_window.reset
    @r2_btn_press = 0
    @temp_count = 0
  end
  #--------------------------------------------------------------------------
  # * Triggered - to check player input
  #--------------------------------------------------------------------------
  def triggered
    case true
    when Input.trigger?(:DOWN)
      @code_window.dis_input("down")
      return "down"
    when Input.trigger?(:LEFT)
      @code_window.dis_input("left")
      return "left"
    when Input.trigger?(:RIGHT)
      @code_window.dis_input("right")
      return "right"
    when Input.trigger?(:UP)
      @code_window.dis_input("up")
      return "up"
    when Input.trigger?(:A)
      @code_window.dis_input("a")
      return "a"
    when Input.trigger?(:B)
      @code_window.dis_input("b")
      return "b"
    when Input.trigger?(:C)
      @code_window.dis_input("c")
      return "c"
    when Input.trigger?(:X)
      @code_window.dis_input("x")
      return "x"
    when Input.trigger?(:Y)
      @code_window.dis_input("y")
      return "y"
    when Input.trigger?(:Z)
      @code_window.dis_input("z")
      return "z"
    when Input.trigger?(:L)
      @code_window.dis_input("l")
      return "l"
    when Input.trigger?(:R)
      @code_window.dis_input("r")
      return "r"
    when Input.trigger?(:CTRL)
      @code_window.dis_input("ctrl")
      return "ctrl"
    when Input.trigger?(:ALT)
      @code_window.dis_input("alt")
      return "alt"
    when Input.trigger?(:F7)
      @code_window.dis_input("f7")
    end
  end
end

 


Credit and Thanks
- Roninator2

Terms of use
Free for all RPG Maker VX Ace uses

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
Top ArrowTop Arrow Highlighted