Display State Turns On Icon

Discussion in 'JS Plugin Releases (RMMV)' started by DreamX, Nov 3, 2015.

  1. DreamX

    DreamX Veteran Veteran

    Messages:
    816
    Likes Received:
    813
    First Language:
    English
    Display State Turns On Icon v1.04
    By lolaccount


    Patch Notes

    v1.04 - Added font size and text position parameters.

    v1.03 - Added check if state has an icon, added compatibility for Yanfly's ATB, added decimal place parameter for non-integer turn counts, like in Yanfly's ATB. Fixed crashing when using tofixed out of battle

    v1.02 - Fixed slicing issue that caused more numbers than should be shown

    v1.01 - Added buff and debuffs turns, fixed displaying 1 or 0 for states that don't have turns, moved text up a bit

    Introduction
    This is my first plugin release. I'm a beginner.

    Features
    Shows the number of turns remaining for a state/buff/debuff on its icon.

    Screenshots
    [​IMG]

    How to Use
    Create a .js file (you can do so with a text editor by saving the file with .js at the end) and paste the script into it, then put it in the js\plugins folder for your project. The filename should be something descriptive to what it is. Turn the plugin on and you are good to go.

    Script

    //=============================================================================// Display State Turns On Icon// by lolaccount// Last Updated: 2015.11.26//=============================================================================/*: * @plugindesc v1.04 Number of turns remaining for states/debuffs/buffs is * displayed on the icon. * <lolaccount DisplayStateTurnsOnIcon> * @author lolaccount * * @param Font Size * @desc Default: 16 * @default 16 * * @param Position * @desc Options: bottomleft, center, rightcenter, bottomcenter, etc  Default: topright * @default topright * * @param ---Compatibility--- * @default * * @param Decimal Places * @desc # of decimal places for non-integer turn counts * Default: 0     * @default 0 * * @help This plugin does not provide plugin commands. * ============================================================================ * Patch Notes * ============================================================================ * v1.04 - Added Font Size Parameter, Added Position Parameter * v1.03 - Added check if state has an icon, added compatibility for Yanfly's ATB * added decimal place parameter for non-integer turn counts, like in Yanfly's * ATB. Fixed crashing when using tofixed out of battle * v1.02 - Fixed slicing issue that caused more numbers than should be shown * v1.01 - Added buff and debuffs turns, fixed displaying 1 or 0 for states * that don't have turns, moved text up a bit * ============================================================================ * How To Use * ============================================================================ * Plug and play. * ============================================================================ * Terms Of Use * ============================================================================ * Free to use and modify for commercial and noncommercial games, with or * without credit, as long as you do not claim the script as your own. * Credit is appreciated though. */(function () {    var parameters = $plugins.filter(function (p) {        return p.description.contains('<lolaccount DisplayStateTurnsOnIcon>');    })[0].parameters; //Thanks to Iavra// decimal places to show for turn count    var decimalPlaces = parseInt(parameters['Decimal Places'] || 0);// size of turn text font    var turnFontSize = parseInt(parameters['Font Size'] || 16);// position of turn text    var turnTextPosition = String(parameters['Position'] || 'topright');    // alias function    var _Window_Base_drawActorIcons = Window_Base.prototype.drawActorIcons;    Window_Base.prototype.drawActorIcons = function (actor, x, y, width) {        // the default we are making an alias for        _Window_Base_drawActorIcons.call(this, actor, x, y, width);        // array of turn integers corresponding to each state/debuff/buff        var turns = [];        // initialize loop variable        var i = 0;        // for each state actor has        actor.states().forEach(function (state) {            // check if autoremoval is not 0. If it is not 0 then it is removed            // automatically after a certain number of turns.            if (state.autoRemovalTiming != 0 && state.iconIndex > 0) {                turns.push(actor._stateTurns[actor._states]);            }            else {                // if autoremoval is 0, then it's a state that is not removed by                // turns, like defeat. add 0 to the array so that it is skipped                // when we are displaying the text.                turns.push(0);            }            // increment the loop variable            i++;        }, this);        // for each possible parameter that can have a        // buff or debuff        for (var j = 0; j < actor._buffs.length; j++) {            // check if the parameter has a buff/debuff            if (actor._buffs[j] !== 0) {                // if so add the number of turns the buff/debuff                // has to the turn array                turns.push(actor._buffTurns[j]);            }        }        turns = turns.slice(0, Math.floor(width / Window_Base._iconWidth));        // set font size to parameter        this.contents.fontSize = turnFontSize;        // for each state/debuff/buff, draw text for their turns remaining        for (var i = 0; i < actor.allIcons().length; i++) {            // This is a check for whether the turns remaining is 0 or not            // if we don't check we'll get a 0 displayed for states like death            // turns checks if turn is defined, if not we'll get an error with toFixed            if (turns && turns != 0) {                // draw the text for their turns remaining                this.drawText(turns.toFixed(decimalPlaces), this.turnsRemainingPosX(i,x), this.turnsRemainingPosY(y), Window_Base._iconWidth, 'center');            }        }        // reset font size so other stuff isn't resized as well        this.resetFontSettings();    };    Window_Base.prototype.turnsRemainingPosX = function (i, x) {        var returnValue = x + (Window_Base._iconWidth * i);        switch (turnTextPosition) {            case "topleft":            case "bottomleft":            case "leftcenter":                returnValue -= (Window_Base._iconWidth / 6);                break;            case "topright":            case "bottomright":            case "rightcenter":                returnValue += (Window_Base._iconWidth / 6);                break;        }        return returnValue;    };    Window_Base.prototype.turnsRemainingPosY = function (y) {        var returnValue = y;        switch (turnTextPosition) {            case "topleft":            case "topright":            case "topcenter":                returnValue -= (Window_Base._iconWidth / 6);                break;            case "bottomleft":            case "bottomright":            case "bottomcenter":                returnValue += (Window_Base._iconWidth / 6);                break;        }        return returnValue;    };})();
    Credit and Thanks
    - lolaccount

    Author's Notes
    Free to use and modify for commercial and noncommercial games, with or without credit, as long as you do not claim the script as your own. Credit is appreciated though.

    iconturns.jpg
     
    Last edited by a moderator: Nov 26, 2015
    #1
    Kazami, masterlobo, Cvrtis and 14 others like this.
  2. Digital Religion

    Digital Religion Dark Devil Veteran

    Messages:
    110
    Likes Received:
    32
    Location:
    Dallas. TX
    First Language:
    English
    Primarily Uses:
    RMMV
    This is great!
     
    #2
    DreamX likes this.
  3. Fernyfer775

    Fernyfer775 Veteran Veteran

    Messages:
    1,299
    Likes Received:
    802
    First Language:
    English
    Ohhhh, this will be useful for my players to know when to refresh buffs and stuff, thank you for this!
     
    #3
    DreamX likes this.
  4. Luth

    Luth Veteran Veteran

    Messages:
    128
    Likes Received:
    53
    First Language:
    French
    That's useful !

    It doesn't work in battle test though, so i thought there was a problem, but it works perfectly in-game.

    Thanks
     
    #4
    DreamX likes this.
  5. HeroicJay

    HeroicJay Veteran Veteran

    Messages:
    315
    Likes Received:
    173
    First Language:
    English
    Primarily Uses:
    RMMV
    Luth: I haven't tested this myself, but Battle Test tends to be a bit finicky with when you last saved the project. If you install the plugin and then immediately run a Battle Test, it won't load the plugin; this is universally true, not unique to this plugin. Hit "Save" first before running a Battle Test. (Having written my own plugins, I get tripped up on that one all the time.) This isn't a problem when running the full game in debug mode, because it automatically prompts you to save first.
     
    #5
    DreamX likes this.
  6. wrigty12

    wrigty12 Veteran Veteran

    Messages:
    533
    Likes Received:
    76
    First Language:
    English
    For some reason, all states that aren't removed with turns (including Knocked Out) show up as "1", then decrease to 0 at the end of the turn..

    EDIT:

    I did some quick adding to the script to easily remove this issue.
     
    Last edited by a moderator: Nov 4, 2015
    #6
    DreamX likes this.
  7. MikeMakes

    MikeMakes Veteran Veteran

    Messages:
    159
    Likes Received:
    41
    First Language:
    English
    Thank you for this, lolaccount. Does the display also apply to enemies?

    I can't wait to see it incorporate De/Buffs as well.
     
    #7
    DreamX likes this.
  8. DreamX

    DreamX Veteran Veteran

    Messages:
    816
    Likes Received:
    813
    First Language:
    English
    I updated the plugin to include buffs and debuffs.

    It does not apply to enemies yet, but I will do so in an update soon (doesn't seem like it would be much more difficult).

    I have fixed this issue with update v1.01, thank you for bringing it to my attention.
     
    #8
  9. MikeMakes

    MikeMakes Veteran Veteran

    Messages:
    159
    Likes Received:
    41
    First Language:
    English
    Thank you. You're doing great!
     
    Last edited by a moderator: Nov 5, 2015
    #9
  10. wrigty12

    wrigty12 Veteran Veteran

    Messages:
    533
    Likes Received:
    76
    First Language:
    English
    I believe you are now missing the part of the code that cuts off how many numbers are shown. Your slice function is gone, so it shows all numbers even if the icons are not drawn..
     
    #10
    DreamX likes this.
  11. DreamX

    DreamX Veteran Veteran

    Messages:
    816
    Likes Received:
    813
    First Language:
    English
    Thanks for catching that, it's been fixed :)
     
    #11
    wrigty12 likes this.
  12. wrigty12

    wrigty12 Veteran Veteran

    Messages:
    533
    Likes Received:
    76
    First Language:
    English
    Another thing, I liked the numbers on the bottom of the icon, not the top like you now have it. Maybe make that a parameter for the developer to set?
     
    #12
  13. Sawaragi Rikko

    Sawaragi Rikko Villager Member

    Messages:
    8
    Likes Received:
    0
    First Language:
    Indonesia
    excuse me, I want to ask, how i name the .js?

    Display State Turns On Icon.js?
     
    #13
  14. DreamX

    DreamX Veteran Veteran

    Messages:
    816
    Likes Received:
    813
    First Language:
    English
    Sure, I'll do that in an update.

    That's fine, you can name it whatever you want.
     
    #14
  15. tsunetakaryu

    tsunetakaryu Veteran Veteran

    Messages:
    40
    Likes Received:
    28
    First Language:
    Chinese
    Well, I found a bug and fixed by myself.

    after using Yanfly's YEP_BattleSysATB script, the stats countdown will not display correctly, for example it will show a value like "2.123456789". Then I checked your script (1.00) and modified something like that:

    this.drawText(actor._stateTurns[actor._states].toFixed(1), x + (Window_Base._iconWidth * i) + (Window_Base._iconWidth / 6), y + (Window_Base._iconWidth / 6), Window_Base._iconWidth, 'center');I used

    toFixed(1)to show the countdown number with one decimal.

    Since you've update this script to v1.02, I'll take a look. Anyway nice work, thanks for your share. 
     
    #15
  16. RockEsper

    RockEsper Villager Member

    Messages:
    19
    Likes Received:
    5
    First Language:
    English
    Thanks so much for this. A very neccessary script for strategic RPG battles. I look forward to this working for enemies.
     
    #16
  17. Roguedeus

    Roguedeus It's never too late to procrastinate... Veteran

    Messages:
    527
    Likes Received:
    106
    First Language:
    English
    Primarily Uses:
    N/A

    Moving the plugin to the front of the list and changing line 80 ( for v1.02) to this:

    this.drawText(turns.toFixed(0), x + (Window_Base._iconWidth * i) + (Window_Base._iconWidth / 6), y - (Window_Base._iconWidth / 6), Window_Base._iconWidth, 'center');Made it function normally for me with ATB Tick Timed Turns enabled.
     
    #17
  18. tsunetakaryu

    tsunetakaryu Veteran Veteran

    Messages:
    40
    Likes Received:
    28
    First Language:
    Chinese
    Yes, that's it. Thanks! 
     
    #18
  19. Roguedeus

    Roguedeus It's never too late to procrastinate... Veteran

    Messages:
    527
    Likes Received:
    106
    First Language:
    English
    Primarily Uses:
    N/A
    I've had to stop using the plugin for two reason. One cosmetic, one crashing.

    First, the turns (even with the toFixed) is sometimes reporting the wrong value when initially applied. (mostly for buffs)

    Second, applying a state with turns outside battle causes a crash.

    lolaccount, if you are still taking the time to support this, I can provide you with more details on the issues.

    Thanks for your time!
     
    #19
  20. DreamX

    DreamX Veteran Veteran

    Messages:
    816
    Likes Received:
    813
    First Language:
    English
    Absolutely, let me know.
     
    #20

Share This Page