Advertisement
ICF-Soft

ICF-Soft Enemy Selector RPG Maker MV

Dec 31st, 2015
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //=============================================================================
  2. // ICF-Soft Plugins - Enemy Selector
  3. // ICFSoft_EnemySelector.js
  4. //=============================================================================
  5.  
  6. var Imported = Imported || {};
  7. Imported.ICFSoft_EnemySelector = true;
  8.  
  9. var ICF = ICF || {};
  10. ICF.EnemySelect = ICF.EnemySelect || {};
  11.  
  12. //=============================================================================
  13.  /*:
  14.  * @plugindesc v1.00 This plugin allows you to change enemies before
  15.  * start battle.
  16.  * @author ICF-Soft [http://icfsoft.blogspot.com.es/]
  17.  *
  18.  * @param Absolute
  19.  * @desc If true, enemy chage if var is equal to selector instead
  20.  * of equal or higher.   NO - false     YES - true
  21.  * @default false
  22.  *
  23.  * @param Enemy Var
  24.  * @desc The  game variable where the selector is stored.
  25.  * @default 40
  26.  *
  27.  * @help
  28.  * ============================================================================
  29.  * Introduction
  30.  *
  31.  * In database we have a 2000 item cap per tab. So we have up to 2000 different
  32.  * enemies and up to 2000 enemy groups.
  33.  * It's usual to use some groups for a different number of same enemy
  34.  * (ex: 2 and 3 bats) and different enemy combinations, so a less number of enemy
  35.  * types are used.
  36.  *
  37.  * This plugin allow to increase the number of used enemies and, at same time,
  38.  * use a lower number of enemy groups.
  39.  *
  40.  * Main utility is to implement an ingame difficult increase system with different
  41.  * enemies.
  42.  *
  43.  * ============================================================================
  44.  * Parameters
  45.  * ============================================================================
  46.  *
  47.  * Absolute: Tell if value must be exact to swap enemy.
  48.  * When off enemy will change if value is equal or higher, making an ingame
  49.  * difficult increase system.
  50.  *
  51.  * Enemy Var: Tell wich variable vill be used as selector.
  52.  *
  53.  * ============================================================================
  54.  * Config enemies
  55.  * ============================================================================
  56.  *
  57.  * Enemies are configured via notetags.
  58.  *
  59.  * Starts with "<ENEMY SELECTOR>", then the selectors come in succesive lines.
  60.  * Pairs of number separated by ":" first is the value for the selector and
  61.  * segond is enemy id will be changed.
  62.  * Selectors must be in ascending order.
  63.  * And finish with "</ENEMY SELECTOR>".
  64.  *
  65.  * Example:
  66.  *
  67.  * <ENEMY SELECTOR>
  68.  * 1:2
  69.  * 2:10
  70.  * </ENEMY SELECTOR>
  71.  *
  72.  * This enemy will change to database enemy 2 when selected variable become 1.
  73.  * Or will be database enemy 10 if selected variable become 2.
  74.  *
  75.  * ============================================================================
  76.  * Incompatibilities
  77.  * ============================================================================
  78.  *
  79.  * There's no known incompatible plugins yet.
  80.  *
  81.  * ============================================================================
  82.  * Known isues
  83.  * ============================================================================
  84.  *
  85.  * Different enemy sizes can look weird.
  86.  * Pointer position is on bottom left corner.
  87.  *
  88.  * ============================================================================
  89.  *
  90.  * Commercial use avaiable.
  91.  * Credit to ICF-Soft.
  92.  * This entire header must be included with plugin.
  93.  *
  94.  * ============================================================================
  95. */
  96. //=============================================================================
  97.  /*:es
  98.  * @plugindesc v1.00 Este complemento permite cambiar los enemigos antes
  99.  * de que la batalla comience.
  100.  * @author ICF-Soft [http://icfsoft.blogspot.com.es/]
  101.  *
  102.  * @param Absolute
  103.  * @desc Si se activa, el enemigo cambiará solo si coincide el
  104.  * selector, si no, cuando sea mayor o igual.  No - false   Si - true
  105.  * @default false
  106.  *
  107.  * @param Enemy Var
  108.  * @desc La variable donde se almacena el selector.
  109.  * @default 40
  110.  *
  111.  * @help
  112.  * ============================================================================
  113.  * Introducción
  114.  * ============================================================================
  115.  *
  116.  * En la base de datos hay un tope de 2000 elementos por pestaña. Por un lado
  117.  * tenemos hasta 2000 enemigos distintos y por otro hasta 2000 grupos de enemigos
  118.  * a los que se puede enfrentar en el juego.
  119.  * Normalmente no se utiliza un grupo para cada enemigo, sino varios grupos con dos
  120.  * o tres enemigos del mismo tipo y diversas combinaciones de enemigos, por lo que
  121.  * en realidad se utilizan bastantes tipos de enemigos menos.
  122.  *
  123.  * Este script permite aprovechar el máximo de enemigos posible reduciendo,
  124.  * a su vez, el número de grupos de enemigos.
  125.  *
  126.  * La utilidad principal reside en que se puede hacer un sistema de dificultad
  127.  * creciente y/o aprovechar mejor el número de enemigos de la base de datos.
  128.  *
  129.  * ============================================================================
  130.  * Parámetros
  131.  * ============================================================================
  132.  *
  133.  * Absolute: Indica si el valor debe ser exacto para que el enemigo cambie.
  134.  * Cuando está desactivado el enemigo cambiará cuando el valor sea mayor o igual,
  135.  * haciendo un sistema de dificultad creciente.
  136.  *
  137.  * Enemy Var: Indica qué variable vas a utilizar para almacenar el selector.
  138.  *
  139.  * ============================================================================
  140.  * Configurar los enemigos
  141.  * ============================================================================
  142.  *
  143.  * Los enemigos se configuran en la base de datos en el apartado de las notas.
  144.  *
  145.  * Se empieza una línea con "<ENEMY SELECTOR>", se ponen en cada línea sucesiva
  146.  * los números en pares separados por ":" en donde el primero es el valor que debe
  147.  * tomar el selector y el segundo el enemigo por el que se cambia en ese caso.
  148.  * Los selectores deben ir en orden ascendente.
  149.  * Finalmente se termina con la línea "</ENEMY SELECTOR>".
  150.  *
  151.  * Ejemplo:
  152.  *
  153.  * <ENEMY SELECTOR>
  154.  * 1:2
  155.  * 2:10
  156.  * </ENEMY SELECTOR>
  157.  *
  158.  * Este enemigo cuando la variable escogida valga 1 será sustituido por el enemigo
  159.  * número 2 de la base de datos.
  160.  * En cambio, si la variable vale 2 será sustituido por el enemigo número 10 de la
  161.  * base de datos.
  162.  *
  163.  * ============================================================================
  164.  * Incompatibilidades
  165.  * ============================================================================
  166.  *
  167.  * No se conocen complementos que sean incompatibles hasta la fecha.
  168.  *
  169.  * ============================================================================
  170.  * Problemas conocidos
  171.  * ============================================================================
  172.  *
  173.  * Si los enemigos que se intercambian son de distintos tamaños pueden quedar
  174.  * vistosamente mal colocados.
  175.  * La posición viene definida por la esquina inferior izquierda.
  176.  *
  177.  * ============================================================================
  178.  *
  179.  * Se permite el uso comercial.
  180.  * Se debe incluir a ICF-Soft en los créditos.
  181.  * Esta cabecera debe incluirse íntegramente con el plugin.
  182.  *
  183.  * ============================================================================
  184. */
  185. //=============================================================================
  186.  
  187. //=============================================================================
  188. // Parameter Variables
  189. //=============================================================================
  190.  
  191. ICF.Parameters = PluginManager.parameters('ICFSoft_EnemySelector');
  192. ICF.Param = ICF.Param || {};
  193.  
  194. ICF.Param.EnemyVarAbsolute = ICF.Parameters['Absolute'].toLowerCase() === "true";
  195. ICF.Param.EnemyVar = Number(ICF.Parameters['Enemy Var']);
  196.  
  197. //=============================================================================
  198. // DataManager
  199. //=============================================================================
  200.  
  201. ICF.EnemySelect.DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
  202. DataManager.isDatabaseLoaded = function() {
  203.     if (!ICF.EnemySelect.DataManager_isDatabaseLoaded.call(this)) return false;
  204.     this.processEnemySelectNotetags($dataEnemies);
  205.     return true;
  206. };
  207.  
  208. DataManager.processEnemySelectNotetags = function(group) {
  209.   var note1 = /<(?:ENEMY SELECTOR)>/i;
  210.   var note2 = /<\/(?:ENEMY SELECTOR)>/i;
  211.   ICF.EnemySelect.Enemies = [];
  212.   for (var n = 1; n < group.length; n++) {
  213.     var obj = group[n];
  214.     var notedata = obj.note.split(/[\r\n]+/);
  215.  
  216.     ICF.EnemySelect.Enemies[n] = [];
  217.  
  218.     var esFlag = false;
  219.  
  220.       for (var i = 0; i < notedata.length; i++) {
  221.         var line = notedata[i];
  222.         if (line.match(note1)) {
  223.             esFlag = true;
  224.         } else if (line.match(note2)) {
  225.             esFlag = false;
  226.         } else if (esFlag) {
  227.             line = line.split(":");
  228.             if ((line.length > 1)&&(line[0] != NaN)&&(line[1] != NaN)) {
  229.                 ICF.EnemySelect.Enemies[n].push(line);
  230.             }
  231.         }
  232.       }
  233.   }
  234. };
  235.  
  236. //=============================================================================
  237. // Game_Enemy
  238. //=============================================================================
  239.  
  240. ICF.EnemySelect.setupEnemy = Game_Enemy.prototype.initialize;
  241. Game_Enemy.prototype.initialize = function(enemyId, x, y) {
  242.     var converted = enemyId;
  243.         var ary = ICF.EnemySelect.Enemies[enemyId];
  244.  
  245.     if (ary.length == 0) {
  246.         converted = enemyId;
  247.     } else if (ICF.Param.EnemyVarAbsolute) {
  248.         for (i = 0; i < ary.length; i++) {
  249.             if (ary[i][0] == $gameVariables.value(ICF.Param.EnemyVar)) {
  250.                 converted = ary[i][1];
  251.                 break;
  252.             }
  253.         }
  254.     } else {
  255.         for (i = ary.length - 1; i >= 0; i--) {
  256.             if (ary[i][0] <= $gameVariables.value(ICF.Param.EnemyVar)) {
  257.                 converted = ary[i][1];
  258.                 break;
  259.             }
  260.         }
  261.     }
  262.     ICF.EnemySelect.setupEnemy.call(this, converted, x, y);
  263. };
  264.  
  265. //=============================================================================
  266. // End of File
  267. //=============================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement