Advertisement
ICF-Soft

ICF-Soft Enemy Selector 1.02 RPG Maker MV

May 19th, 2016
112
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.02 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.  * @param Developer HaltJS
  28.  * @desc When true it throws an error if an custom enemy selection
  29.  * javascript doesn't work.   NO - false     YES - true
  30.  * @default false
  31.  *
  32.  * @help
  33.  * ============================================================================
  34.  * Introduction
  35.  *
  36.  * In database we have a 2000 item cap per tab. So we have up to 2000 different
  37.  * enemies and up to 2000 enemy groups.
  38.  * It's usual to use some groups for a different number of same enemy
  39.  * (ex: 2 and 3 bats) and different enemy combinations, so a less number of enemy
  40.  * types are used.
  41.  *
  42.  * This plugin allow to increase the number of used enemies and, at same time,
  43.  * use a lower number of enemy groups.
  44.  *
  45.  * Main utility is to implement an ingame difficult increase system with different
  46.  * enemies.
  47.  *
  48.  * ============================================================================
  49.  * Parameters
  50.  * ============================================================================
  51.  *
  52.  * Absolute: Tell if value must be exact to swap enemy.
  53.  * When off enemy will change if value is equal or higher, making an ingame
  54.  * difficult increase system.
  55.  *
  56.  * Enemy Var: Tell wich variable vill be used as selector.
  57.  *
  58.  * Developer HaltJS: This is a development variable usefull to check if there is
  59.  * a wrong javascript enemy selection.
  60.  * When true will throw an error when it found a wrong javascript in lunatic
  61.  * mode and tell specified enemiId.
  62.  * When false it will be ignored and game continues.
  63.  *
  64.  * ============================================================================
  65.  * Config enemies
  66.  * ============================================================================
  67.  *
  68.  * Enemies are configured via notetags.
  69.  *
  70.  * Starts with "<ENEMY SELECTOR>", then the selectors come in succesive lines.
  71.  * Minimun 2 numbers separated, first by ":" and others by ",".
  72.  * The first is the value for the selector and others are enemy ids to alter.
  73.  * Selectors must be in ascending order.
  74.  * And finish with "</ENEMY SELECTOR>".
  75.  *
  76.  * Example:
  77.  *
  78.  * <ENEMY SELECTOR>
  79.  * 1:2
  80.  * 2:10,11
  81.  * </ENEMY SELECTOR>
  82.  *
  83.  * This enemy will change to database enemy 2 when selected variable become 1.
  84.  * If selected variable become 2, enemy will be 10 or 11.
  85.  *
  86.  * ============================================================================
  87.  * Lunatic Mode
  88.  * ============================================================================
  89.  *
  90.  * For those who want another way to select enemies I've added a lunatic mode.
  91.  *
  92.  * It also work in notetags:
  93.  *
  94.  * <CUSTOM ENEMY SELECTOR>
  95.  * converted = 2;
  96.  * converted += 25;
  97.  * </CUSTOM ENEMY SELECTOR>
  98.  *
  99.  * It runs after normal selection if you want to use both for an enemy.
  100.  * You can use javascript between these tags to alter the final result.
  101.  *
  102.  * converted - This is the enemyId that you are changing, by your own formula
  103.  *             for especified enemy.
  104.  *
  105.  * ============================================================================
  106.  * Incompatibilities
  107.  * ============================================================================
  108.  *
  109.  * There's no known incompatible plugins yet.
  110.  *
  111.  * ============================================================================
  112.  * Known isues
  113.  * ============================================================================
  114.  *
  115.  * Different enemy sizes can look weird.
  116.  * Pointer position is on bottom left corner.
  117.  *
  118.  * ============================================================================
  119.  * Changelog
  120.  * ============================================================================
  121.  *
  122.  * Version 1.02:
  123.  * - Improved lunatic mode.
  124.  *
  125.  * Version 1.01:
  126.  * - Added randomizing to standard procedure.
  127.  * - Added lunatic mode.
  128.  *
  129.  * Version 1.00:
  130.  * - Finished plugin!
  131.  *
  132.  * ============================================================================
  133.  *
  134.  * For commercial and non-commercial games.
  135.  * Credit to ICF-Soft.
  136.  * This entire header must be included with plugin.
  137.  *
  138.  * ============================================================================
  139. */
  140. //=============================================================================
  141.  /*:es
  142.  * @plugindesc v1.02 Este complemento permite cambiar los enemigos antes
  143.  * de que la batalla comience.
  144.  * @author ICF-Soft [http://icfsoft.blogspot.com.es/]
  145.  *
  146.  * @param Absolute
  147.  * @desc Si se activa, el enemigo cambiará solo si coincide el
  148.  * selector, si no, cuando sea mayor o igual.  No - false   Si - true
  149.  * @default false
  150.  *
  151.  * @param Enemy Var
  152.  * @desc La variable donde se almacena el selector.
  153.  * @default 40
  154.  *
  155.  * @param Developer HaltJS
  156.  * @desc Si está activado salta cuando una función personalizada
  157.  * da error.   No - false   Si - true
  158.  * @default false
  159.  *
  160.  * @help
  161.  * ============================================================================
  162.  * Introducción
  163.  * ============================================================================
  164.  *
  165.  * En la base de datos hay un tope de 2000 elementos por pestaña. Por un lado
  166.  * tenemos hasta 2000 enemigos distintos y por otro hasta 2000 grupos de enemigos
  167.  * a los que se puede enfrentar en el juego.
  168.  * Normalmente no se utiliza un grupo para cada enemigo, sino varios grupos con dos
  169.  * o tres enemigos del mismo tipo y diversas combinaciones de enemigos, por lo que
  170.  * en realidad se utilizan bastantes tipos de enemigos menos.
  171.  *
  172.  * Este script permite aprovechar el máximo de enemigos posible reduciendo,
  173.  * a su vez, el número de grupos de enemigos.
  174.  *
  175.  * La utilidad principal reside en que se puede hacer un sistema de dificultad
  176.  * creciente y/o aprovechar mejor el número de enemigos de la base de datos.
  177.  *
  178.  * ============================================================================
  179.  * Parámetros
  180.  * ============================================================================
  181.  *
  182.  * Absolute: Indica si el valor debe ser exacto para que el enemigo cambie.
  183.  * Cuando está desactivado el enemigo cambiará cuando el valor sea mayor o igual,
  184.  * haciendo un sistema de dificultad creciente.
  185.  *
  186.  * Enemy Var: Indica qué variable vas a utilizar para almacenar el selector.
  187.  *
  188.  * Developer HaltJS: Esta es una variable de uso durante el desarrollo del juego
  189.  * útil cuando quieres comprobar si hay alguna función personalizada incorrecta.
  190.  * Cuando está activado al encontrar un error el juego se para y muestra
  191.  * en qué enemigo se encuentra el error.
  192.  * Cuando está desactivado ignora el error y el juego continúa.
  193.  *
  194.  * ============================================================================
  195.  * Configurar los enemigos
  196.  * ============================================================================
  197.  *
  198.  * Los enemigos se configuran en la base de datos en el apartado de las notas.
  199.  *
  200.  * Se empieza una línea con "<ENEMY SELECTOR>", se ponen en cada línea sucesiva
  201.  * los números en pares separados por ":" en donde el primero es el valor que debe
  202.  * tomar el selector y el segundo el enemigo por el que se cambia en ese caso.
  203.  * Los selectores deben ir en orden ascendente.
  204.  * Finalmente se termina con la línea "</ENEMY SELECTOR>".
  205.  *
  206.  * Ejemplo:
  207.  *
  208.  * <ENEMY SELECTOR>
  209.  * 1:2
  210.  * 2:10,11
  211.  * </ENEMY SELECTOR>
  212.  *
  213.  * Este enemigo cuando la variable escogida valga 1 será sustituido por el enemigo
  214.  * número 2 de la base de datos.
  215.  * En cambio, si la variable vale 2 será sustituido por el enemigo número 10 o el 11
  216.  * de la base de datos.
  217.  *
  218.  * ============================================================================
  219.  * Lunatic Mode
  220.  * ============================================================================
  221.  *
  222.  * Para aquellos que quieren otro modo de seleccionar los enemigos he añadido el
  223.  * modo lunático.
  224.  * El modo lunático permite utilizar código javascript diréctamente.
  225.  *
  226.  * Usa las siguientes etiquetas:
  227.  *
  228.  * <CUSTOM ENEMY SELECTOR>
  229.  * converted = 2;
  230.  * converted += 25;
  231.  * </CUSTOM ENEMY SELECTOR>
  232.  *
  233.  * En el caso de que se quiera combinar con el modo anterior, este código se
  234.  * ejecuta después.
  235.  *
  236.  * converted - Este es el resultado, contiene el enemyId inicial que puedes
  237.  *             alterar bajo tu criterio.
  238.  *
  239.  * ============================================================================
  240.  * Incompatibilidades
  241.  * ============================================================================
  242.  *
  243.  * No se conocen complementos que sean incompatibles hasta la fecha.
  244.  *
  245.  * ============================================================================
  246.  * Problemas conocidos
  247.  * ============================================================================
  248.  *
  249.  * Si los enemigos que se intercambian son de distintos tamaños pueden quedar
  250.  * vistosamente mal colocados.
  251.  * La posición viene definida por la esquina inferior izquierda.
  252.  *
  253.  * ============================================================================
  254.  * Historial de versiones
  255.  * ============================================================================
  256.  *
  257.  * Versión 1.02:
  258.  * - Modo lunático mejorado.
  259.  *
  260.  * Versión 1.01:
  261.  * - Se ha añadido una función para aleatorizar.
  262.  * - Se ha añadido el modo lunático.
  263.  *
  264.  * Versión 1.00:
  265.  * - Complemento terminado.
  266.  *
  267.  * ============================================================================
  268.  *
  269.  * Para juegos comerciales y no comerciales.
  270.  * Se debe incluir a ICF-Soft en los créditos.
  271.  * Esta cabecera debe incluirse íntegramente con el plugin.
  272.  *
  273.  * ============================================================================
  274. */
  275. //=============================================================================
  276.  
  277. //=============================================================================
  278. // Parameter Variables
  279. //=============================================================================
  280.  
  281. ICF.Parameters = PluginManager.parameters('ICFSoft_EnemySelector');
  282. ICF.Param = ICF.Param || {};
  283.  
  284. ICF.Param.EnemyVarAbsolute = ICF.Parameters['Absolute'].toLowerCase() === "true";
  285. ICF.Param.EnemyVar = Number(ICF.Parameters['Enemy Var']);
  286.  
  287. ICF.Param.EnemySelHalt = ICF.Parameters['Developer HaltJS'].toLowerCase() === "true";
  288.  
  289. //=============================================================================
  290. // DataManager
  291. //=============================================================================
  292.  
  293. ICF.EnemySelect.DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
  294. DataManager.isDatabaseLoaded = function() {
  295.     if (!ICF.EnemySelect.DataManager_isDatabaseLoaded.call(this)) return false;
  296.     if (!ICF.EnemySelect.Procesed) {
  297.     this.processEnemySelectNotetags($dataEnemies);
  298.     ICF.EnemySelect.Procesed = true;
  299.     }
  300.     return true;
  301. };
  302.  
  303. DataManager.processEnemySelectNotetags = function(group) {
  304.   var note1 = /<(?:ENEMY SELECTOR)>/i;
  305.   var note2 = /<\/(?:ENEMY SELECTOR)>/i;
  306.   var note3 = /<(?:CUSTOM ENEMY SELECTOR)>/i;
  307.   var note4 = /<\/(?:CUSTOM ENEMY SELECTOR)>/i;
  308.   ICF.EnemySelect.Enemies = [];
  309.   ICF.EnemySelect.CustEnemies = [];
  310.   for (var n = 1; n < group.length; n++) {
  311.     var obj = group[n];
  312.     var notedata = obj.note.split(/[\r\n]+/);
  313.  
  314.     ICF.EnemySelect.Enemies[n] = [];
  315.     ICF.EnemySelect.CustEnemies[n] = '';
  316.  
  317.     var esFlag = false;
  318.     var esFlag2 = false;
  319.  
  320.       for (var i = 0; i < notedata.length; i++) {
  321.         var line = notedata[i];
  322.         if (line.match(note1)) {
  323.             esFlag = true;
  324.         } else if (line.match(note2)) {
  325.             esFlag = false;
  326.         } else if (line.match(note3)) {
  327.             esFlag2 = true;
  328.         } else if (line.match(note4)) {
  329.             esFlag2 = false;
  330.         } else if (esFlag) {
  331.             line = line.split(/:|,/);
  332.             if ((line.length > 1)&&(line[0] != NaN)&&(line[1] != NaN)) {
  333.                 ICF.EnemySelect.Enemies[n].push(line);
  334.             }
  335.         } else if (esFlag2) {
  336.             ICF.EnemySelect.CustEnemies[n] = ICF.EnemySelect.CustEnemies[n] + line + '\n';
  337.         }
  338.  
  339.       }
  340.   }
  341. };
  342.  
  343. //=============================================================================
  344. // Game_Enemy
  345. //=============================================================================
  346.  
  347. ICF.EnemySelect.setupEnemy = Game_Enemy.prototype.initialize;
  348. Game_Enemy.prototype.initialize = function(enemyId, x, y) {
  349.     var converted = enemyId;
  350.         var ary = ICF.EnemySelect.Enemies[enemyId];
  351.  
  352.     if (ary.length == 0) {
  353.         converted = enemyId;
  354.     } else if (ICF.Param.EnemyVarAbsolute) {
  355.         for (i = 0; i < ary.length; i++) {
  356.             if (ary[i][0] == $gameVariables.value(ICF.Param.EnemyVar)) {
  357.                 converted = ary[i][Math.floor((Math.random() * (ary[i].length - 1)) + 1)];
  358.                 break;
  359.             }
  360.         }
  361.     } else {
  362.         for (i = ary.length - 1; i >= 0; i--) {
  363.             if (ary[i][0] <= $gameVariables.value(ICF.Param.EnemyVar)) {
  364.                 converted = ary[i][Math.floor((Math.random() * (ary[i].length - 1)) + 1)];
  365.                 break;
  366.             }
  367.         }
  368.     }
  369.     if (ICF.EnemySelect.CustEnemies[enemyId] != '') {
  370.         try {eval(ICF.EnemySelect.CustEnemies[enemyId]);}
  371.         catch (e) {if(ICF.Param.EnemySelHalt){throw new Error('Error in custom enemy selection in enemy #' + enemyId);}}
  372.     }
  373.  
  374.     ICF.EnemySelect.setupEnemy.call(this, converted, x, y);
  375. };
  376.  
  377. //=============================================================================
  378. // End of File
  379. //=============================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement