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.
DT's Difficulty

0 Members and 1 Guest are viewing this topic.

****
Rep:
Level 71
DT's Difficulty
Version: 1.0.0
Author: DoctorTodd
Date: 6/25/2012

Version History


  • Version 1.0.0  2012/6/25 - Original Release

Planned Future Versions

  • You tell me!

Description


 Lets the player select the games difficulty.

Features

  • Option to add to menu.
  • Pick between easy, normal, heroic, and hard.

Screenshots


Instructions

Paste above main.
Call using SceneManager.call(Scene_Difficulty)

Script


Code: [Select]
#===============================================================================
#
# DT's Difficulty
# Author: DoctorTodd
# Date (06/24/2012)
# Version: (1.0.0) (VXA)
# Level: (Medium)
# Email: Todd@beacongames.com
#
#===============================================================================
#
# NOTES: 1)This script will only work with ace.
#        2)A difficulty must be selected before the first battle or the game WILL
#        CRASH.
#
#===============================================================================
#
# Description: Lets the player select the games difficulty.
#
# Credits: Me (DoctorTodd), D&P3 for saving bug fix.
#
#===============================================================================
#
# Instructions
# Paste above main.
#
#===============================================================================
#
# Free for any use as long as I'm credited.
#
#===============================================================================
#
# Editing begins 38 and ends on 71.
#
#===============================================================================
module TODDDIFFICULTY
 
  #Easy Text.
  EASYT = "Easy"
 
  #Normal Text.
  NORMALT = "Normal"
 
  #Heroic Text.
  HEROICT = "Heroic"
 
  #Hard Text.
  HARDT = "Hard"
 
  #Easy enemy parameters multiplier.
  EASYM = 0.5
 
  #Heroic enemy parameters multiplier (Normal is skipped since it's what put
  #you into the database).
  HEROICM = 1.5
 
  #Hard enemy parameters multiplier.
  HARDM = 2
 
  #The text above where the selection is made.
  TEXT = "Please select a difficulty:"
 
  #Menu command?
  MENU = true
 
  #Sound effect to play when difficulty is selected.
  SE = "Darkness8"
 
  #Switch to allow cancelling the difficulty selection.
  #MUST NOT BE ON WHEN SELECTING FOR THE FIRST TIME.
  SWITCH = 5

end
#==============================================================================
# ** Game_Enemy
#------------------------------------------------------------------------------
#  This class handles enemies. It used within the Game_Troop class
# ($game_troop).
#==============================================================================

class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # * Get Base Value of Parameter
  #--------------------------------------------------------------------------
  alias todd_difficulty_gmen_param_base param_base
  def param_base(param_id, *args)
  n1 = todd_difficulty_gmen_param_base(param_id, *args)
  n2 = case $game_system.todd_difficulty
  when 0 then TODDDIFFICULTY::EASYM
  when 1 then 1
  when 2 then TODDDIFFICULTY::HEROICM
  when 3 then TODDDIFFICULTY::HARDM
  end
  return n1 * n2
 end
end


#==============================================================================
# ** Game_System
#------------------------------------------------------------------------------
#  This class handles system data. It saves the disable state of saving and
# menus. Instances of this class are referenced by $game_system.
#==============================================================================

class Game_System
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :todd_difficulty            # save forbidden
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  alias todd_difficulty_gamesystem_init initialize
  def initialize
    @todd_difficulty = 0
    todd_difficulty_gamesystem_init
  end
end

#==============================================================================
# ** Window_DifficultySelection
#==============================================================================

class Window_DifficultySelection < Window_HorzCommand
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0)
  end
  #--------------------------------------------------------------------------
  # * Get Window Width
  #--------------------------------------------------------------------------
  def window_width
    Graphics.width/2 + 20
  end
  #--------------------------------------------------------------------------
  # * Get Digit Count
  #--------------------------------------------------------------------------
  def col_max
    return 4
  end
  #--------------------------------------------------------------------------
  # * Create Command List
  #--------------------------------------------------------------------------
  def make_command_list
    add_command(TODDDIFFICULTY::EASYT,     :easy)
    add_command(TODDDIFFICULTY::NORMALT,   :normal)
    add_command(TODDDIFFICULTY::HEROICT,    :heroic)
    add_command(TODDDIFFICULTY::HARDT, :hard)
  end
end
#==============================================================================
# ** Window_DifficultyName
#==============================================================================

class Window_DifficultyName < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, window_width, fitting_height(1))
    refresh
  end
  #--------------------------------------------------------------------------
  # * Get Window Width
  #--------------------------------------------------------------------------
  def window_width
    return Graphics.width/2 + 20
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    draw_text(15, -27, 400, 80, TODDDIFFICULTY::TEXT)
  end
end
#==============================================================================
# ** Scene_Difficulty
#==============================================================================

class Scene_Difficulty < Scene_MenuBase
  #--------------------------------------------------------------------------
  # * Start Processing
  #--------------------------------------------------------------------------
  def start
    super
    create_command_window
    create_name_window
  end
  #--------------------------------------------------------------------------
  # * Create Command Window
  #--------------------------------------------------------------------------
  def create_command_window
    @command_window = Window_DifficultySelection.new
    @command_window.set_handler(:easy,      method(:command_easy))
    @command_window.set_handler(:normal,     method(:command_normal))
    @command_window.set_handler(:heroic,     method(:command_heroic))
    @command_window.set_handler(:hard,    method(:command_hard))
    @command_window.set_handler(:cancel,    method(:return_scene))if $game_switches[TODDDIFFICULTY::SWITCH] == true
    @command_window.x = Graphics.width/2 - 170
    @command_window.y = Graphics.height/2 - 50
  end
  #--------------------------------------------------------------------------
  # * Create Difficulty Window
  #--------------------------------------------------------------------------
  def create_name_window
    @name_window = Window_DifficultyName.new
    @name_window.x = Graphics.width/2 - 170
    @name_window.y = Graphics.height/2 - 97
  end
  #--------------------------------------------------------------------------
  # * [easy] Command
  #--------------------------------------------------------------------------
  def command_easy
    $game_system.todd_difficulty = 0
    Audio.se_play("Audio/SE/" + TODDDIFFICULTY::SE, 100, 100)
    return_scene
   end
  #--------------------------------------------------------------------------
  # * [normal] Command
  #--------------------------------------------------------------------------
  def command_normal
    $game_system.todd_difficulty = 1
    Audio.se_play("Audio/SE/" + TODDDIFFICULTY::SE, 100, 100)
    return_scene
   end
  #--------------------------------------------------------------------------
  # * [heroic] Command
  #--------------------------------------------------------------------------
  def command_heroic
    $game_system.todd_difficulty = 2
      Audio.se_play("Audio/SE/" + TODDDIFFICULTY::SE, 100, 100)
    return_scene
   end
  #--------------------------------------------------------------------------
  # * [hard] Command
  #--------------------------------------------------------------------------
  def command_hard
    $game_system.todd_difficulty = 3
        Audio.se_play("Audio/SE/" + TODDDIFFICULTY::SE, 100, 100)
    return_scene
   end
 end
 if TODDDIFFICULTY::MENU == true
#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
#  This class performs the menu screen processing.
#==============================================================================

class Scene_Menu < Scene_MenuBase
  #--------------------------------------------------------------------------
  # * Create Command Window
  #--------------------------------------------------------------------------
  alias todd_dif_menu_add_menu_command create_command_window
  def create_command_window
    todd_dif_menu_add_menu_command
    @command_window.set_handler(:dif,      method(:command_dif))
  end
end
  #--------------------------------------------------------------------------
  # * [Difficulty] Command
  #--------------------------------------------------------------------------
  def command_dif
  SceneManager.call(Scene_Difficulty)
  end
end

if TODDDIFFICULTY::MENU == true
#==============================================================================
# ** Window_MenuCommand
#------------------------------------------------------------------------------
#  This command window appears on the menu screen.
#==============================================================================

class Window_MenuCommand < Window_Command
  #--------------------------------------------------------------------------
  # * Add Main Commands to List
  #--------------------------------------------------------------------------
  alias todd_dif_menu_command_add_to_menu add_main_commands
  def add_main_commands
     todd_dif_menu_command_add_to_menu
    add_command("Difficulty",   :dif,   main_commands_enabled)
  end
 end
end



Credit/Thanks


  • DoctorTodd
  • D&P3 for saving bug fix.

Support


Post here for quickest support, or send an email to Todd@beacongames.com.

Known Compatibility Issues

This script is incompatible with every ABS (Sapphire, XAS, ect... ).

Author's Notes


This is actually my second attempt at a script like this, a few months ago I tried to modify the enemy parameters in Game_Battler and I kept getting an error so I quit. I just now realized that it would have also modified the actors, making the entire script completely pointless.

Restrictions

Check the header of the script.
« Last Edit: February 17, 2013, 06:28:42 PM by DoctorTodd »

***
Rep:
Level 77
RMRK Junior
How could this work with Yanfly's Enemy Levels and System Game Options? Maybe add an option to change levels rather than stat? Also I'd swap Hard and Heroic(at least in name, Heroic sounds way harder). Just sayin'.

****
Rep:
Level 71
System options, yes. Enemy levels, May be. I chose the names based upon halo 3 (except for hard). Either way you get to customize the name.

***
Rep:
Level 57
Everything about Rendered Fate
This script seems really good for like a Touhou game, don't you think?
Link to my game is here.
http://rmrk.net/index.php/topic,45507.0.html
Feedback will be nice to get, constructive or otherwise.

****
Rep:
Level 71
I've never played one, so may be.  :)

*****
my name is Timothy what's yours
Rep:
Level 79
Hello
2014 Most Missed Member2014 Zero to Hero2014 Best IRC Quote2012 Zero To HeroSecret Santa 2012 ParticipantContestant - GIAW 9For frequently finding and reporting spam and spam bots2011 Zero to Hero
Just looked through a bit of your code, and while I do say that there's nothing wrong with what you've done, there are more efficient and safer ways for what you've done. Mainly, the core adjustment made with this script, the Game_Enemy#param_base method you overwrote. You may have thought about how to alias this method, and there's nothing wrong with not seeing it; it's not as clear as most methods are.

Code: [Select]
class Game_Enemy < Game_Battler
  alias todd_difficulty_gmen_param_base param_base
  def param_base(param_id, *args)
  n1 = todd_difficulty_gmen_param_base(param_id, *args)
  n2 = case $difficulty
  when 0 then TODDDIFFICULTY::EASYM
  when 1 then 1
  when 2 then TODDDIFFICULTY::HEROICM
  when 3 then TODDDIFFICULTY::HARDM
  end
  return n1 * n2
 end
end

Would be the way I'd do it. There's nothing necessarily wrong with the way you've done it, I'm simply paranoid about overwriting methods.
it's like a metaphor or something i don't know

***
Rep:
Level 77
RMRK Junior
I also noticed there's no way to call the scene... Unless I'm missing something?

*****
my name is Timothy what's yours
Rep:
Level 79
Hello
2014 Most Missed Member2014 Zero to Hero2014 Best IRC Quote2012 Zero To HeroSecret Santa 2012 ParticipantContestant - GIAW 9For frequently finding and reporting spam and spam bots2011 Zero to Hero
You can call the scene with Scene_Difficulty.new in a script call, and there is also an option to include it in the main menu.
it's like a metaphor or something i don't know

****
Rep:
Level 71
@Pacman Alright I'll check to make sure there's a safer way next time.

@Wiimeiser What Pacman said, I'll update the topic to include it.

*
*crack*
Rep:
Level 64
2012 Most Unsung Member2012 Best NewbieFor frequently finding and reporting spam and spam bots
Seems like a good idea :)

I've got suggestion to allow changing the battle theme depending on which difficulty is selected :D
Of course that's only if the creator actually wants to allow the battle theme to be changed.
All of my scripts are totally free to use for commercial use. You don't need to ask me for permission. I'm too lazy to update every single script post I ever made with this addendum. So ignore whatever "rule" I posted there. :)

All scripts can be found at: https://pastebin.com/u/diamondandplatinum3

****
Rep:
Level 71
I can probably add that feature today.  :)

I may do it tomorrow, I tried it today and this happened.  :P
« Last Edit: July 05, 2012, 10:21:20 PM by DoctorTodd »

*
*crack*
Rep:
Level 64
2012 Most Unsung Member2012 Best NewbieFor frequently finding and reporting spam and spam bots
Whoa, that's no good :-\

I don't work with VXA, is it the same method when changing the battle theme?



Actually this reminds me of someone at my Uni who constantly manages to crash visual studio, not memory leaks, but actually breaks the program.
It's become a usual thing to blame him whenever something goes wrong on anyone's game :P
« Last Edit: July 09, 2012, 03:31:56 PM by D&P3 »
All of my scripts are totally free to use for commercial use. You don't need to ask me for permission. I'm too lazy to update every single script post I ever made with this addendum. So ignore whatever "rule" I posted there. :)

All scripts can be found at: https://pastebin.com/u/diamondandplatinum3

***
Rep:
Level 77
RMRK Junior
What maker do you use?

****
Rep:
Level 71
lol  ;D

I forgot about working on this, I'll try to release the new version this week.

****
Rep:
Level 71
I still haven't done the battle themes yet, I've been busy. I don't know when I can get to it, sorry. Any way this script is incompatible with every ABS (Sapphire, XAS, ect... ). You can run the game but you will not be able to load.

**
Rep:
Level 86
Deviant Designer
I like KGC's difficulty script better, too bad someone doesn't convert it to Ace.

**
Rep: +0/-0Level 55
RMRK Junior
When I use the the script call Scene_Difficulty.new, it doesn't call the screen up. I know you can have it in the menu (which I plan to) but I want to make it so you choose at the very beginning and the screen won't come up. Can anyone help me with this?

****
Rep:
Level 71
Code: [Select]
SceneManager.call(Scene_Difficulty)

**
Rep: +0/-0Level 55
RMRK Junior

**
Rep: +0/-0Level 55
RMRK Junior
Unfortunatly, I seem to have run into another problem. Let's say I pick a difficulty (it doesn't matter in this case) and I walk around, get into fights and it works fine. I save and then load the fine, get into a fight and again, it works fine. But when I completely close the game, load a file and go into a battle, the game crashes. I know why it crashes. The error is the error when a difficulty has not been chosen which leads to me to the question for this script to work, does the difficulty have to be chosen every time the game is opened? I can't seem to find a solution to this (it crashes every time) so if you could help me out I would really appreciate it.
Thank you

****
Rep:
Level 71
I managed to recreate the problem, I'll try to fix it tomorrow since I have to head to bed.

**
Rep: +0/-0Level 55
RMRK Junior
Thanks for helping with this.

****
Rep:
Level 71
Sorry I wasn't able to try and fix it today, I'm been pretty busy but I may be able to fix it this week.

**
Rep: +0/-0Level 55
RMRK Junior
No problem, take your time!

****
Rep:
Level 71
I'm sorry for making you wait so long, here's a fixed version.
Turns out all I had to do was add $difficulty = $difficulty to battle manager.
Code: [Select]
#===============================================================================
#
# DT's Difficulty
# Author: DoctorTodd
# Date (06/24/2012)
# Version: (1.0.0) (VXA)
# Level: (Medium)
# Email: Todd@beacongames.com
#
#===============================================================================
#
# NOTES: 1)This script will only work with ace.
#        2)A difficulty must be selected before the first battle or the game WILL
#        CRASH.
#
#===============================================================================
#
# Description: Lets the player select the games difficulty.
#
# Credits: Me (DoctorTodd)
#
#===============================================================================
#
# Instructions
# Paste above main.
#
#===============================================================================
#
# Free for any use as long as I'm credited.
#
#===============================================================================
#
# Editing begins 38 and ends on 71.
#
#===============================================================================
module TODDDIFFICULTY
 
  #Easy Text.
  EASYT = "Easy"
 
  #Normal Text.
  NORMALT = "Normal"
 
  #Heroic Text.
  HEROICT = "Heroic"
 
  #Hard Text.
  HARDT = "Hard"
 
  #Easy enemy parameters multiplier.
  EASYM = 0.5
 
  #Heroic enemy parameters multiplier (Normal is skipped since it's what put
  #you into the database).
  HEROICM = 1.5
 
  #Hard enemy parameters multiplier.
  HARDM = 2
 
  #The text above where the selection is made.
  TEXT = "Please select a difficulty:"
 
  #Menu command?
  MENU = true
 
  #Sound effect to play when difficulty is selected.
  SE = "Darkness8"
 
  #Switch to allow cancelling the difficulty selection.
  #MUST NOT BE ON WHEN SELECTING FOR THE FIRST TIME.
  SWITCH = 5

end
#==============================================================================
# ** Game_Enemy
#------------------------------------------------------------------------------
#  This class handles enemies. It used within the Game_Troop class
# ($game_troop).
#==============================================================================

class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # * Get Base Value of Parameter
  #--------------------------------------------------------------------------
  def param_base(param_id)
  case $difficulty
  when 0
  enemy.params[param_id] * TODDDIFFICULTY::EASYM
  when 1
  enemy.params[param_id]
  when 2
  enemy.params[param_id] * TODDDIFFICULTY::HEROICM
  when 3
  enemy.params[param_id] * TODDDIFFICULTY::HARDM
  else
  enemy.params[param_id]
  end
 end
end
#==============================================================================
# ** BattleManager
#------------------------------------------------------------------------------
#  This module manages battle progress.
#==============================================================================

module BattleManager
  #--------------------------------------------------------------------------
  # * Setup
  #--------------------------------------------------------------------------
  def self.setup(troop_id, can_escape = true, can_lose = false)
    init_members
    $difficulty = $difficulty
    $game_troop.setup(troop_id)
    @can_escape = can_escape
    @can_lose = can_lose
    make_escape_ratio
  end
end
#==============================================================================
# ** Window_DifficultySelection
#==============================================================================

class Window_DifficultySelection < Window_HorzCommand
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0)
  end
  #--------------------------------------------------------------------------
  # * Get Window Width
  #--------------------------------------------------------------------------
  def window_width
    Graphics.width/2 + 20
  end
  #--------------------------------------------------------------------------
  # * Get Digit Count
  #--------------------------------------------------------------------------
  def col_max
    return 4
  end
  #--------------------------------------------------------------------------
  # * Create Command List
  #--------------------------------------------------------------------------
  def make_command_list
    add_command(TODDDIFFICULTY::EASYT,     :easy)
    add_command(TODDDIFFICULTY::NORMALT,   :normal)
    add_command(TODDDIFFICULTY::HEROICT,    :heroic)
    add_command(TODDDIFFICULTY::HARDT, :hard)
  end
end
#==============================================================================
# ** Window_DifficultyName
#==============================================================================

class Window_DifficultyName < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, window_width, fitting_height(1))
    refresh
  end
  #--------------------------------------------------------------------------
  # * Get Window Width
  #--------------------------------------------------------------------------
  def window_width
    return Graphics.width/2 + 20
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    draw_text(15, -27, 400, 80, TODDDIFFICULTY::TEXT)
  end
end
#==============================================================================
# ** Scene_Difficulty
#==============================================================================

class Scene_Difficulty < Scene_MenuBase
  #--------------------------------------------------------------------------
  # * Start Processing
  #--------------------------------------------------------------------------
  def start
    super
    create_command_window
    create_name_window
  end
  #--------------------------------------------------------------------------
  # * Create Command Window
  #--------------------------------------------------------------------------
  def create_command_window
    @command_window = Window_DifficultySelection.new
    @command_window.set_handler(:easy,      method(:command_easy))
    @command_window.set_handler(:normal,     method(:command_normal))
    @command_window.set_handler(:heroic,     method(:command_heroic))
    @command_window.set_handler(:hard,    method(:command_hard))
    @command_window.set_handler(:cancel,    method(:return_scene))if $game_switches[TODDDIFFICULTY::SWITCH] == true
    @command_window.x = Graphics.width/2 - 170
    @command_window.y = Graphics.height/2 - 50
  end
  #--------------------------------------------------------------------------
  # * Create Difficulty Window
  #--------------------------------------------------------------------------
  def create_name_window
    @name_window = Window_DifficultyName.new
    @name_window.x = Graphics.width/2 - 170
    @name_window.y = Graphics.height/2 - 97
  end
  #--------------------------------------------------------------------------
  # * [easy] Command
  #--------------------------------------------------------------------------
  def command_easy
    $difficulty = 0
    Audio.se_play("Audio/SE/" + TODDDIFFICULTY::SE, 100, 100)
    return_scene
   end
  #--------------------------------------------------------------------------
  # * [normal] Command
  #--------------------------------------------------------------------------
  def command_normal
    $difficulty = 1
    Audio.se_play("Audio/SE/" + TODDDIFFICULTY::SE, 100, 100)
    return_scene
   end
  #--------------------------------------------------------------------------
  # * [heroic] Command
  #--------------------------------------------------------------------------
  def command_heroic
    $difficulty = 2
      Audio.se_play("Audio/SE/" + TODDDIFFICULTY::SE, 100, 100)
    return_scene
   end
  #--------------------------------------------------------------------------
  # * [hard] Command
  #--------------------------------------------------------------------------
  def command_hard
    $difficulty = 3
        Audio.se_play("Audio/SE/" + TODDDIFFICULTY::SE, 100, 100)
    return_scene
   end
 end
 if TODDDIFFICULTY::MENU == true
#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
#  This class performs the menu screen processing.
#==============================================================================

class Scene_Menu < Scene_MenuBase
  #--------------------------------------------------------------------------
  # * Create Command Window
  #--------------------------------------------------------------------------
  alias todd_dif_menu_add_menu_command create_command_window
  def create_command_window
    todd_dif_menu_add_menu_command
    @command_window.set_handler(:dif,      method(:command_dif))
  end
end
  #--------------------------------------------------------------------------
  # * [Difficulty] Command
  #--------------------------------------------------------------------------
  def command_dif
  SceneManager.call(Scene_Difficulty)
  end
end

if TODDDIFFICULTY::MENU == true
#==============================================================================
# ** Window_MenuCommand
#------------------------------------------------------------------------------
#  This command window appears on the menu screen.
#==============================================================================

class Window_MenuCommand < Window_Command
  #--------------------------------------------------------------------------
  # * Add Main Commands to List
  #--------------------------------------------------------------------------
  alias todd_dif_menu_command_add_to_menu add_main_commands
  def add_main_commands
     todd_dif_menu_command_add_to_menu
    add_command("Difficulty",   :dif,   main_commands_enabled)
  end
 end
end