Advertisement
ICF-Soft

ICF-Soft Enemy Selector 1.01 RPG Maker MV

Feb 19th, 2016
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.01 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.  * Minimun 2 numbers separated, first by ":" and others by ",".
  61.  * The first is the value for the selector and others are enemy ids to alter.
  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,11
  70.  * </ENEMY SELECTOR>
  71.  *
  72.  * This enemy will change to database enemy 2 when selected variable become 1.
  73.  * If selected variable become 2, enemy will be 10 or 11.
  74.  *
  75.  * ============================================================================
  76.  * Lunatic Mode
  77.  * ============================================================================
  78.  *
  79.  * For those who want another way to select enemies I've added a lunatic mode.
  80.  *
  81.  * It also work in notetags:
  82.  *
  83.  * <CUSTOM ENEMY SELECTOR>
  84.  * converted = 2;
  85.  * converted += 25;
  86.  * </CUSTOM ENEMY SELECTOR>
  87.  *
  88.  * It runs after normal selection if you want to use both for an enemy.
  89.  * You can use javascript between these tags to alter the final result.
  90.  *
  91.  * converted - This is the enemyId that you are changing, by your own formula
  92.  *             for especified enemy.
  93.  *
  94.  * ============================================================================
  95.  * Incompatibilities
  96.  * ============================================================================
  97.  *
  98.  * There's no known incompatible plugins yet.
  99.  *
  100.  * ============================================================================
  101.  * Known isues
  102.  * ============================================================================
  103.  *
  104.  * Different enemy sizes can look weird.
  105.  * Pointer position is on bottom left corner.
  106.  *
  107.  * ============================================================================
  108.  * Changelog
  109.  * ============================================================================
  110.  *
  111.  * Version 1.01:
  112.  * - Added randomizing to standard procedure.
  113.  * - Added lunatic mode.
  114.  *
  115.  * Version 1.00:
  116.  * - Finished plugin!
  117.  *
  118.  * ============================================================================
  119.  *
  120.  * Commercial use avaiable.
  121.  * Credit to ICF-Soft.
  122.  * This entire header must be included with plugin.
  123.  *
  124.  * ============================================================================
  125. */
  126. //=============================================================================
  127.  /*:es
  128.  * @plugindesc v1.01 Este complemento permite cambiar los enemigos antes
  129.  * de que la batalla comience.
  130.  * @author ICF-Soft [http://icfsoft.blogspot.com.es/]
  131.  *
  132.  * @param Absolute
  133.  * @desc Si se activa, el enemigo cambiará solo si coincide el
  134.  * selector, si no, cuando sea mayor o igual.  No - false   Si - true
  135.  * @default false
  136.  *
  137.  * @param Enemy Var
  138.  * @desc La variable donde se almacena el selector.
  139.  * @default 40
  140.  *
  141.  * @help
  142.  * ============================================================================
  143.  * Introducción
  144.  * ============================================================================
  145.  *
  146.  * En la base de datos hay un tope de 2000 elementos por pestaña. Por un lado
  147.  * tenemos hasta 2000 enemigos distintos y por otro hasta 2000 grupos de enemigos
  148.  * a los que se puede enfrentar en el juego.
  149.  * Normalmente no se utiliza un grupo para cada enemigo, sino varios grupos con dos
  150.  * o tres enemigos del mismo tipo y diversas combinaciones de enemigos, por lo que
  151.  * en realidad se utilizan bastantes tipos de enemigos menos.
  152.  *
  153.  * Este script permite aprovechar el máximo de enemigos posible reduciendo,
  154.  * a su vez, el número de grupos de enemigos.
  155.  *
  156.  * La utilidad principal reside en que se puede hacer un sistema de dificultad
  157.  * creciente y/o aprovechar mejor el número de enemigos de la base de datos.
  158.  *
  159.  * ============================================================================
  160.  * Parámetros
  161.  * ============================================================================
  162.  *
  163.  * Absolute: Indica si el valor debe ser exacto para que el enemigo cambie.
  164.  * Cuando está desactivado el enemigo cambiará cuando el valor sea mayor o igual,
  165.  * haciendo un sistema de dificultad creciente.
  166.  *
  167.  * Enemy Var: Indica qué variable vas a utilizar para almacenar el selector.
  168.  *
  169.  * ============================================================================
  170.  * Configurar los enemigos
  171.  * ============================================================================
  172.  *
  173.  * Los enemigos se configuran en la base de datos en el apartado de las notas.
  174.  *
  175.  * Se empieza una línea con "<ENEMY SELECTOR>", se ponen en cada línea sucesiva
  176.  * los números en pares separados por ":" en donde el primero es el valor que debe
  177.  * tomar el selector y el segundo el enemigo por el que se cambia en ese caso.
  178.  * Los selectores deben ir en orden ascendente.
  179.  * Finalmente se termina con la línea "</ENEMY SELECTOR>".
  180.  *
  181.  * Ejemplo:
  182.  *
  183.  * <ENEMY SELECTOR>
  184.  * 1:2
  185.  * 2:10,11
  186.  * </ENEMY SELECTOR>
  187.  *
  188.  * Este enemigo cuando la variable escogida valga 1 será sustituido por el enemigo
  189.  * número 2 de la base de datos.
  190.  * En cambio, si la variable vale 2 será sustituido por el enemigo número 10 o el 11
  191.  * de la base de datos.
  192.  *
  193.  * ============================================================================
  194.  * Lunatic Mode
  195.  * ============================================================================
  196.  *
  197.  * Para aquellos que quieren otro modo de seleccionar los enemigos he añadido el
  198.  * modo lunático.
  199.  * El modo lunático permite utilizar código javascript diréctamente.
  200.  *
  201.  * Usa las siguientes etiquetas:
  202.  *
  203.  * <CUSTOM ENEMY SELECTOR>
  204.  * converted = 2;
  205.  * converted += 25;
  206.  * </CUSTOM ENEMY SELECTOR>
  207.  *
  208.  * En el caso de que se quiera combinar con el modo anterior, este código se
  209.  * ejecuta después.
  210.  *
  211.  * converted - Este es el resultado, contiene el enemyId inicial que puedes
  212.  *             alterar bajo tu criterio.
  213.  *
  214.  * ============================================================================
  215.  * Incompatibilidades
  216.  * ============================================================================
  217.  *
  218.  * No se conocen complementos que sean incompatibles hasta la fecha.
  219.  *
  220.  * ============================================================================
  221.  * Problemas conocidos
  222.  * ============================================================================
  223.  *
  224.  * Si los enemigos que se intercambian son de distintos tamaños pueden quedar
  225.  * vistosamente mal colocados.
  226.  * La posición viene definida por la esquina inferior izquierda.
  227.  *
  228.  * ============================================================================
  229.  * Historial de versiones
  230.  * ============================================================================
  231.  *
  232.  * Version 1.01:
  233.  * - Se ha añadido una función para aleatorizar.
  234.  * - Se ha añadido el modo lunático.
  235.  *
  236.  * Version 1.00:
  237.  * - Complemento terminado.
  238.  *
  239.  * ============================================================================
  240.  *
  241.  * Se permite el uso comercial.
  242.  * Se debe incluir a ICF-Soft en los créditos.
  243.  * Esta cabecera debe incluirse íntegramente con el plugin.
  244.  *
  245.  * ============================================================================
  246. */
  247. //=============================================================================
  248.  
  249. //=============================================================================
  250. // Parameter Variables
  251. //=============================================================================
  252.  
  253. ICF.Parameters = PluginManager.parameters('ICFSoft_EnemySelector');
  254. ICF.Param = ICF.Param || {};
  255.  
  256. ICF.Param.EnemyVarAbsolute = ICF.Parameters['Absolute'].toLowerCase() === "true";
  257. ICF.Param.EnemyVar = Number(ICF.Parameters['Enemy Var']);
  258.  
  259. //=============================================================================
  260. // DataManager
  261. //=============================================================================
  262.  
  263. ICF.EnemySelect.DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
  264. DataManager.isDatabaseLoaded = function() {
  265.     if (!ICF.EnemySelect.DataManager_isDatabaseLoaded.call(this)) return false;
  266.     this.processEnemySelectNotetags($dataEnemies);
  267.     return true;
  268. };
  269.  
  270. DataManager.processEnemySelectNotetags = function(group) {
  271.   var note1 = /<(?:ENEMY SELECTOR)>/i;
  272.   var note2 = /<\/(?:ENEMY SELECTOR)>/i;
  273.   var note3 = /<(?:CUSTOM ENEMY SELECTOR)>/i;
  274.   var note4 = /<\/(?:CUSTOM ENEMY SELECTOR)>/i;
  275.   ICF.EnemySelect.Enemies = [];
  276.   ICF.EnemySelect.CustEnemies = [];
  277.   for (var n = 1; n < group.length; n++) {
  278.     var obj = group[n];
  279.     var notedata = obj.note.split(/[\r\n]+/);
  280.  
  281.     ICF.EnemySelect.Enemies[n] = [];
  282.     ICF.EnemySelect.CustEnemies[n] = '';
  283.  
  284.     var esFlag = false;
  285.     var esFlag2 = false;
  286.  
  287.       for (var i = 0; i < notedata.length; i++) {
  288.         var line = notedata[i];
  289.         if (line.match(note1)) {
  290.             esFlag = true;
  291.         } else if (line.match(note2)) {
  292.             esFlag = false;
  293.         } else if (line.match(note3)) {
  294.             esFlag2 = true;
  295.         } else if (line.match(note4)) {
  296.             esFlag2 = false;
  297.         } else if (esFlag) {
  298.             line = line.split(/:|,/);
  299.             if ((line.length > 1)&&(line[0] != NaN)&&(line[1] != NaN)) {
  300.                 ICF.EnemySelect.Enemies[n].push(line);
  301.             }
  302.         } else if (esFlag2) {
  303.             ICF.EnemySelect.CustEnemies[n] = ICF.EnemySelect.CustEnemies[n] + line + ' ';
  304.         }
  305.  
  306.       }
  307.   }
  308. };
  309.  
  310. //=============================================================================
  311. // Game_Enemy
  312. //=============================================================================
  313.  
  314. ICF.EnemySelect.setupEnemy = Game_Enemy.prototype.initialize;
  315. Game_Enemy.prototype.initialize = function(enemyId, x, y) {
  316.     var converted = enemyId;
  317.         var ary = ICF.EnemySelect.Enemies[enemyId];
  318.  
  319.     if (ary.length == 0) {
  320.         converted = enemyId;
  321.     } else if (ICF.Param.EnemyVarAbsolute) {
  322.         for (i = 0; i < ary.length; i++) {
  323.             if (ary[i][0] == $gameVariables.value(ICF.Param.EnemyVar)) {
  324.                 converted = ary[i][Math.floor((Math.random() * (ary[i].length - 1)) + 1)];
  325.                 break;
  326.             }
  327.         }
  328.     } else {
  329.         for (i = ary.length - 1; i >= 0; i--) {
  330.             if (ary[i][0] <= $gameVariables.value(ICF.Param.EnemyVar)) {
  331.                 converted = ary[i][Math.floor((Math.random() * (ary[i].length - 1)) + 1)];
  332.                 break;
  333.             }
  334.         }
  335.     }
  336.     if (ICF.EnemySelect.CustEnemies[enemyId] != '') {
  337.         eval(ICF.EnemySelect.CustEnemies[enemyId]);
  338.     }
  339.  
  340.     ICF.EnemySelect.setupEnemy.call(this, converted, x, y);
  341. };
  342.  
  343. //=============================================================================
  344. // End of File
  345. //=============================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement