I have been wanting to write a difficulty script for a long time now. With the help of Dekita it has finally happened. While it is extremely simple right now, I do plan on having some more features. I just don't know what to add really.
I will post the script here as it's very short, but if I end up do adding stuff, and it gets too long it will be put on pastebin, or something like that.
#=============================================================================##Script By: Bloodmorphed#Difficulty Script v3.5##Change Log:#v5.0# This is a decently big change. This version completely enables full#customization. There is no longer set in stone rules, if you want higher then#4 difficulties all you have to do is add them! I have also enabled you to use#more then 4 battlers for difficulties. You just have to change it where it#is needed.#It's Located in Script: Game_Party (Line 72) Change the return 4 to whatever.## Now a little bit how it works now.# Param_Settings = { #don't touch# Corresponding Params:# MHP, MMP, ATK, DEF, MAT, MDF, AGI, LUK# :easy => [0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5],# :normal => [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],# :hard => [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0],# :insane => [4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0],# } #don't touch# This is the old way I have it, it will stay the same... unless you want to#change it. You can even change the name of them, for example :easy could be#renamed to :normal### Here is an example:# Param_Settings = { #don't touch# Corresponding Params:# MHP, MMP, ATK, DEF, MAT, MDF, AGI, LUK# :normal => [0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5],# :medium => [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],# :hard => [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0],# :insane => [4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0],# :impossible = > [6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0, 6.0],# } #don't touch## See how I changed the name of two, AND created another one? Yup that works.#Now, while this will work seamlessly for using the Party, very easily, you#have to know what the variable you will be corrisponds to what.##```NOTICE````NOTICE!!!!!!#If you change ANYTHING on one thing, you MUST change it on everything! #(otherwise you will either get errors, or weird changes)#If you re-name :easy in one thing, you must re-name it in all things. if you also#make a new difficulty, such as :impossible above, you MUST make it every where else, as well.#Everything must have the same order as well! If it is:#:normal :medium :hard in one category it must be the same for every category.#For example you cant have it like this :medium :normal :hard in one category and the other way in another!### Let's say this is our Enemy settings, which is set to 99 variable by default.## When this is set to 0 it pulls from :normal# 1 = :medium# 2 = :hard# See, easy, right? So be sure to if you do this by events and not party to#use the right setting you want to!###v4.0#Condensed the script down some (reduced some line lengths.)#Added an option to use the party size for the difficulty.##v3.6#Removed the "+1" from gold and XP to avoid confusion and so that if you put#0 in the database for XP or Gold it will be 0 rather then 1.##v3.5#Added TP Settings. CAUTION: Try not to set them higher then 5! It will get#broken past that! Based on actor getting hit only!###v3.0#I've added Actor params, and you can now disable Actor edits, and Enemy edits.#Putting these both to false will disable the script, if needed.## Note:# You can use this script as you please, as long as you give credit! This# script was made possible by massive help from Dekita.##=============================================================================##=============================================================================## Param_Settings is each param that will be modified. You may edit these as# you please. Keep in mind I have added something that will NEVER make these# reach 0.## Exp_Settings is the experience gained based on difficulty, normally people# use higher Experience the lower the difficulty, but this your choice!## Gold_Settings increases or decreases gold gain. Again most peopel would give# more gold the lower the difficulty, but again, it is your choice!## Keep in mind everything is MULTIPLIED! Not ADDED. To go lower, use 0.9 and# lower. For example## gold * 0.5 will be HALF of what it used to be.#=============================================================================#module Blood #----------------------------------------------------------------------------- #Putting these both to false will disable the script, if you ever need to. #If you are going to use Use_Party, Use_Enemy must also be true! # #Note: If you use party for difficulty you do not need to setup a event! #----------------------------------------------------------------------------- Use_Enemy = true #Use enemy edits? Default is true Use_Actor = false #Use actor edits? Default is false Use_Party = false #Use Party? Default is false module Enemy Param_Settings = { #don't touch # Corresponding Params: # MHP, MMP, ATK, DEF, MAT, MDF, AGI, LUK :easy => [0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5], :normal => [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], :hard => [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0], :insane => [4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0], } #don't touch Exp_Settings = { #don't touch :easy => 2, :normal => 1, :hard => 0.8, :insane => 0.5, } #don't touch Gold_Settings = { #don't touch :easy => 2, :normal => 1, :hard => 0.8, :insane => 0.5, } #don't touch end #ends Enemy module Actor#=============================================================================## Param_Settings is each param that will be modified. You may edit these as# you please. Keep in mind I have added something that will NEVER make these# reach 0.## This part people usually go higher the easier difficulty, lower the higher.#=============================================================================# Param_Settings = { #don't touch # Corresponding Params: # MHP, MMP, ATK, DEF, MAT, MDF, AGI, LUK :easy => [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0], :normal => [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], :hard => [0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8], :insane => [0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5], } #don't touch #========================================================================= # TP Settings scales QUICKLY, do not go over 5, if you do it gets pretty # broken. I didn't test this exstensively but it works well. This only # effects the CHARGE of TP (Getting hit) # # easy default = 2 # normal default = 1 # hard default = 0.8 # insane default = 0.5 #========================================================================= TP_Settings = { #don't touch :easy => 2, :normal => 1, :hard => 0.8, :insane => 0.5, } #don't touch end #ends Actor #============================================================================# # Variable to use. This variable will be used for the difficulty setting #============================================================================# module Variable Enemy_Variable = 99 # Which to use for enemy/party. Default is 99 Actor_Variable = 100 # Which to use for actor. Default 100 end #ends variableend #ends Blood#==============================================================================## Do not edit anything past this point, unless you know what you are doing# edit at your own risk, just know that if you have no idea what you are doing,# you could break it.#==============================================================================#if Blood::Use_Party == true#=============================================================================== class Scene_Map < Scene_Base#=============================================================================== alias bloody_update update #------------------------------------------------------------------------- #Updates our party difficulty #------------------------------------------------------------------------- def update bloody_update update_difficulty end #ends update #------------------------------------------------------------------------- #Increases, or decreses the Enemy_Variable based on party members #------------------------------------------------------------------------- def update_difficulty @old_size = 0 if @old_size.nil? if @old_size != $game_party.battle_members.size $game_variables[Blood::Variable::Enemy_Variable] = [$game_party.battle_members.size - 1,$game_party.max_battle_members].min @old_size = $game_party.battle_members.size end #ends if end #ends update_difficulty end #ends classend #ends if Use_Partyif Blood::Use_Enemy == true#=============================================================================== class Game_Enemy#=============================================================================== #----------------------------------------------------------------------------- # List Of Aliased Methods #----------------------------------------------------------------------------- alias :bloody_param :param #----------------------------------------------------------------------------- # Method to determine value of enemies params based on difficulty. #----------------------------------------------------------------------------- def param(param_id) eps = Blood::Enemy::Param_Settings diff = eps.keys[$game_variables[Blood::Variable::Enemy_Variable]] return (bloody_param(param_id) * eps[diff][param_id] + 1).to_i end #ends def #-------------------------------------------------------------------------- # * Get Experience #-------------------------------------------------------------------------- alias :blood_exp :exp def exp ees = Blood::Enemy::Exp_Settings diff = ees.keys[$game_variables[Blood::Variable::Enemy_Variable]] return (blood_exp * ees[diff]).to_i end #end def #-------------------------------------------------------------------------- # * Get Gold #-------------------------------------------------------------------------- alias :blood_gold :gold def gold egs = Blood::Enemy::Gold_Settings diff = egs.keys[$game_variables[Blood::Variable::Enemy_Variable]] return (blood_gold * egs[diff]).to_i end #ends def end #ends classend #ends ifif Blood::Use_Actor == true#=============================================================================== class Game_Actor#=============================================================================== #----------------------------------------------------------------------------- # List Of Aliased Methods #----------------------------------------------------------------------------- alias :bloody_param :param #----------------------------------------------------------------------------- # Method to determine value of actors params based on difficulty. #----------------------------------------------------------------------------- def param(param_id) aps = Blood::Actor::Param_Settings diff = aps.keys[$game_variables[Blood::Variable::Actor_Variable]] return (bloody_param(param_id) * aps[diff][param_id] + 1).to_i end #ends def # # TP Regen # def charge_tp_by_damage(damage_rate) calc = self.tp += 50 * damage_rate * tcr ats = Blood::Actor::TP_Settings diff = ats.keys[$game_variables[Blood::Variable::Actor_Variable]] return (calc * ats[diff]).to_i end #ends def end #ends classend #ends if
You need an event like this, before your game starts.
-You can now use your battle members for difficulty, now also able to change the max easily (even past 4!)
-Individual editing of each parameter.
-Experience editing.
-Gold Editing.
-Enabaling and disabling the use of Actor, and Enemy edits. Putting both to false will disable the script, if needed.
-Added TP Settings (This is based on the actor getting hit, not the actor hitting!)
I'm not too sure what else to put in here. If you have suggestions please let me know. I'm new to scripting and scripting something this simple is a BIG help, you have no idea.
Credit:
Bloodmorphed for writing it.
Dekita for his major guidance in the process.
Use it as you please, with credits of course.
I would like to thank Dekita and others for their support and help through this, they have been patient with me! You guys are awesome!