Introduction
Have you even thought... my random enemies don't seem to match my heroes when they engage them? Have you ever thought that maybe you could swap out the enemies in your Troops with other enemies if the average party member's level is high enough? Now you can.
Script
Spoiler: Leveled Lists
Code:
#============================================================================== # ** Leveled Enemy Lists #------------------------------------------------------------------------------ # by DerVVulfman # version 1.0 # 09-12-2019 (MM-DD-YYYY) # RGSS / RMXP #============================================================================== # # INTRODUCTION: # # Have you even thought... my random enemies don't seem to match my heroes # when they engage them? Have you ever thought that maybe you could swap out # the enemies in your Troops with other enemies if the average party member's # level is high enough? Now you can. # # #============================================================================== # # LEVELED ENEMIES: # # The feature examines each enemy from the troops database, and checks to # see if it is the 'key' to one of the lists in the LeveledEnemies module. # If it is to be replaced, it uses the enemy within the array (or arrays) # that the entry supplies. # # IF... (hehehe)... the replacement enemy is actually a 'key' to another # list in the LeveledEnemies module, it TOO can get replaced. Yes, dear # reader... recusion abouds so you can make very detailed level lists! # # * * * # # Each Entry within the LIST hash array is as follows: # # LIST[ key ] = [ leveled enemies ] # # As stated above, the 'key' is the ID of an enemy that will be replaced # within your troops database. In our default script, the first list # replaces the GHOST (enemy #1) while the second list in the default # script replaces the SAGAHIN (#3) # # * * * # # The leveled lists are a collection of arrays. There must be at least # one array like this: # # LIST[key] = [ [list of enemies], [list of enemies],... [list of enemies] ] # # Types of 'list of enemies': # 1) Array of enemy IDs: [ id, id, id, id, ... id ] # 2) Array with a min level & list of enemy IDs: [ lvl, [ id, id, id....] ] # # # Style #1) This is just a list of enemy IDs. It will randomly select from # this list. # # Style #2) This is a level-based list. It has a level to test against the # average level* of the party. And only IF the party's average is # higher than this test value will it use the enemies in the list # of enemies next to it. # # IF an enemy list has a required level and the party has not # reached that minimum level, no substitution will occur. # #============================================================================== # # TERMS OF USE # # Free for use, even in commercial works. Only due credit is required. # #============================================================================== module LeveledEnemies LIST = {} # ID # LIST OF MONSTERS #============ ================== LIST[1] = [[2,3,4], [5,[5,6,7,8]] ] LIST[2] = [ [15, [22,23,24]]] LIST[3] = [[10,11,18,19]] # NOTES FROM A WEREWOLF: #------------------------------------------------------------------------- # LIST[1] ... Any ghost can be replaced by enemies 2,3 or 4 under normal # circumstances But if the level of the party is level 5, # then the ghost is replaced by enemies 5, 6, 7 or 8. # # IF the ghost is replaced by a Basilisk or Sagahin, look at # the next two lists! THEY DO COUNT! # # LIST[2] ... If a Basilisk is encountered, it can only be replaced by # enemies if the level of the party as a while is at least 15. # Otherwise, the basilisk remains in the troop. # # LIST[3] ... If a Sagahin is encountered, it can be replaced with no # problems with enemies 10, 11, 18 and 19. # #------------------------------------------------------------------------- end #============================================================================== # ** Game_Enemy #------------------------------------------------------------------------------ # This class handles enemies. It's used within the Game_Troop class # ($game_troop). #============================================================================== class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_accessor :member_index # Member index (position in troop) #-------------------------------------------------------------------------- # * Alias Listings #-------------------------------------------------------------------------- alias meebers initialize #-------------------------------------------------------------------------- # * Object Initialization # troop_id : troop ID # member_index : troop member index #-------------------------------------------------------------------------- def initialize(troop_id, member_index, enemy_id=nil) # Perform a normal initialize meebers(troop_id, member_index) # Exit if no custom enemy ID sent return if enemy_id.nil? # Re-perform the initialize with the new enemy ID @troop_id = troop_id @member_index = member_index troop = $data_troops[@troop_id] @enemy_id = enemy_id enemy = $data_enemies[@enemy_id] @battler_name = enemy.battler_name @battler_hue = enemy.battler_hue @hp = maxhp @sp = maxsp @hidden = troop.members[@member_index].hidden @immortal = troop.members[@member_index].immortal end end #============================================================================== # ** Game_Troop #------------------------------------------------------------------------------ # This class deals with troops. Refer to "$game_troop" for the instance of # this class. #============================================================================== class Game_Troop #-------------------------------------------------------------------------- # * Alias Listings #-------------------------------------------------------------------------- alias moobers setup #-------------------------------------------------------------------------- # * Setup # troop_id : troop ID #-------------------------------------------------------------------------- def setup(troop_id) # Perform the original call moobers(troop_id) # Obtain party level @level = setup_level # Replace setup_replace(troop_id) end #-------------------------------------------------------------------------- # * Setup : Acquiring average level of all party members #-------------------------------------------------------------------------- def setup_level level = 0 for actor in $game_party.actors level += actor.level end level /= $game_party.actors.size return level.to_i end #-------------------------------------------------------------------------- # * Setup : Loop through and replace enemy as needed # troop_id : troop ID #-------------------------------------------------------------------------- def setup_replace(troop_id) # Create a temp array temp = [] # Cycle through each enemy for enemy in @enemies # Get new enemy ID based on old enemy enemy_id = setup_individual(enemy) # Push into temp array temp.push(Game_Enemy.new(troop_id, enemy.member_index, enemy_id)) end # Replace the enemy array with the temp array @enemies = temp end #-------------------------------------------------------------------------- # * Setup : Loop through and replace enemy as needed # troop_id : troop ID #-------------------------------------------------------------------------- def setup_individual(enemy) # Perform a loop loop do # Get the enemy's ID e_id = enemy.id # Perform only if enemy list has the enemy ID as a key if LeveledEnemies::LIST.has_key?(e_id) result = setup_listchoice(e_id) enemy = result unless result.nil? end # Break if list doesn't supply proper content break if result.nil? # Oooh... only exit loop if no matching enemy ID as a key break unless LeveledEnemies::LIST.has_key?(enemy.id) end # Return the new enemy ID return enemy.id end #-------------------------------------------------------------------------- # * Setup : Loop individual sets to choose # troop_id : troop ID #-------------------------------------------------------------------------- def setup_listchoice(e_id) array_list = LeveledEnemies::LIST[e_id] enemy = nil # Cycle through each set for set in array_list # Reset temp list temp_list = [] # Determine if has set level or not if set.size == 2 min_level = set[0] temp_list = set[1] else min_level = nil temp_list = set end # If there's no minimum if min_level.nil? rand_size = temp_list.size choice = temp_list[rand(rand_size)] enemy = $data_enemies[choice] # or if player level is exceeding min required level for set elsif @level >= min_level rand_size = temp_list.size choice = temp_list[rand(rand_size)] enemy = $data_enemies[choice] end end return enemy end end
Instructions
They're inside the script.
FAQ
They may generally look like the Leveled Lists from the Elder Scrolls games from Morrowind on up.
Compatibility
Designed for RPGMaker XP.
Terms of Use
Free for use, even in Commercial products. Due credit is required.