MV - SRPG Engine MV - Plugins for creating Tactical Battle System

● ARCHIVED · READ-ONLY
Started by RyanBram 3313 posts Page 152 of 166 View original ↗
  1. Most of your incompatibility issues are you using plenty of YEP plugins. YEP was never meant to be comptable with other systems. You will need to see what works and what not. I think you should use dopans demo srpg core instead.. boomys shoukang and even mine are based on the 1.34Q which has no YEP at all
  2. I see.
    I don't understand what happened but now Boomy's SRPG_Windows plugin works lol.
    I just disabled all plugins that are not SRPG and reactivate them one by one and there is no problem anymore.

    However I copied his FE GBA quick status window code + his FE GBA prediction windows code (in his GitHub page https://github.com/boomyville/RMMV/tree/master/SRPG Window ) and
    2 things disturb me (one more ... strange than the other).

    First the HP gauge don't display in the quick status window
    gauge don't display
    1701175795909.png

    The second (and a little more disturbing) is that the dammage prediction is completly wrong.
    Prediction window tells me that the enemy will do 1 dammage, but in reality I take 19 damage lol
    Prediction window
    1701175975264.png
    dammage problem.jpg


    Maybe there are problems in the code used. I will copy it there

    Quick status window lunatic code :
    Code:
    if (this._battler.isActor()) { this.drawActorFace(this._battler, 0, 0, Window_Base._faceWidth, Window_Base._faceHeight); } else { this.drawEnemyFace(this._battler, 0, 0, Window_Base._faceWidth, Window_Base._faceHeight); } this.drawText(this._battler.name(), Window_Base._faceWidth + this.padding, 0, Window_Base._faceWidth, 'right'); this.drawText(this._battler.hp + '/' + this._battler.mhp, Window_Base._faceWidth + this.padding, this.windowHeight() / 3, Window_Base._faceWidth, 'right'); this.drawGauge(Window_Base._faceWidth + this.padding, this.windowHeight() / 3 * 2, Window_Base._faceWidth, this._battler.hpRate(), '#FF0000', '#00FF00');

    Prediction window lunatic code (normaly ";" means go on another line. To more lisibility I created a new line each time I saw a ";")
    Code:
    this.drawText(this._actionArray[1].name(), Window_Base._iconWidth + this.padding, this.fittingHeight(0), this.windowWidth() - Window_Base._iconWidth);
    if (this._actionArray[1].isActor()) { if(this._actionArray[1].weapons()[0]) { this.drawIcon(this._actionArray[1].weapons()[0].iconIndex, 0, this.fittingHeight(0));
    } } else if (this._actionArray[1].enemy().meta.srpgWeapon) { this.drawIcon($dataWeapons[this._actionArray[1].enemy().meta.srpgWeapon].iconIndex, 0, this.fittingHeight(0));
    } this.drawIcon(this._actionArray[1].currentAction().item().iconIndex, 0, this.fittingHeight(1)); this.drawText(this._actionArray[1].currentAction().item().name, Window_Base._iconWidth + this.padding, this.fittingHeight(1), this.windowWidth() - Window_Base._iconWidth);
    this.drawText('PV', this.windowWidth() / 2 - this.textWidth('PV') / 2, this.fittingHeight(2), this.textWidth('PV')); this.drawText(this._actionArray[1].hp, 0, this.fittingHeight(2), this.textWidth(this._actionArray[1].hp), 'left');
    if (this._actionArray[1] != this._targetArray[1] && this._targetArray[1].currentAction() !== null) { this.drawText(this._targetArray[1].hp, this.windowWidth() - this.textWidth(this._targetArray[1].hp) - this.padding * 2, this.fittingHeight(2), this.textWidth(this._targetArray[1].hp), 'right');
    } this.drawText('Dmg', this.windowWidth() / 2 - this.textWidth('Dmg') / 2, this.fittingHeight(3), this.textWidth('Dmg')); 
    if(this._actionArray[1].canUse(this._actionArray[1].currentAction().item())) { if(this._actionArray[1].currentAction().srpgPredictionDamage(this._targetArray[1]) !== 0) { this.drawText(this._actionArray[1].currentAction().srpgPredictionDamage(this._targetArray[1]), 0, this.fittingHeight(3), this.textWidth(this._actionArray[1].currentAction().srpgPredictionDamage(this._targetArray[1])), 'left');
    } } if(this._targetArray[1].canUse(this._targetArray[1].currentAction().item())) { if(this._targetArray[1].currentAction().srpgPredictionDamage(this._actionArray[1]) != 0) { if (this._actionArray[1] != this._targetArray[1] && this._targetArray[1].currentAction() !== null) { this.drawText(this._targetArray[1].currentAction().srpgPredictionDamage(this._actionArray[1]), this.windowWidth() - this.padding * 2 - this.textWidth(this._actionArray[1].currentAction().srpgPredictionDamage(this._actionArray[1])), this.fittingHeight(3), this.textWidth(this._targetArray[1].currentAction().srpgPredictionDamage(this._actionArray[1])), 'right');
    } } } this.drawText('Prc', this.windowWidth() / 2 - this.textWidth('Prc') / 2, this.fittingHeight(4), this.textWidth('Prc')); this.drawText(Math.round(100 * this._actionArray[1].currentAction().itemHit(this._targetArray[1])), 0, this.fittingHeight(4), this.textWidth(Math.round(100 * this._actionArray[1].currentAction().itemHit(this._targetArray[1]))), 'left');
    if (this._actionArray[1] != this._targetArray[1] && this._targetArray[1].canUse(this._targetArray[1].currentAction().item())) { this.drawText(Math.round(this._targetArray[1].currentAction().itemHit(this._actionArray[1]) * 100), this.windowWidth() - this.padding * 2 - this.textWidth(Math.round(this._targetArray[1].currentAction().itemHit(this._actionArray[1]) * 100)), this.fittingHeight(4), this.textWidth(Math.round(this._targetArray[1].currentAction().itemHit(this._actionArray[1]) * 100)), 'right');
    } this.drawText('Crit', this.windowWidth() / 2 - this.textWidth('Crit') / 2, this.fittingHeight(5), this.textWidth('Crit')); this.drawText(Math.round(100 * this._actionArray[1].currentAction().itemCri(this._targetArray[1])), 0, this.fittingHeight(5), this.textWidth(Math.round(100 * this._actionArray[1].currentAction().itemCri(this._targetArray[1]))), 'left');
    if (this._actionArray[1] != this._targetArray[1] && this._targetArray[1].canUse(this._targetArray[1].currentAction().item())) { this.drawText(Math.round(100 * this._targetArray[1].currentAction().itemCri(this._actionArray[1])), this.windowWidth() - this.padding * 2 - this.textWidth(Math.round(100 * this._targetArray[1].currentAction().itemCri(this._actionArray[1]))), this.fittingHeight(5), this.textWidth(Math.round(100 * this._targetArray[1].currentAction().itemCri(this._actionArray[1]))), 'right');
    } if (this._actionArray[1] != this._targetArray[1] && this._targetArray[1].canUse(this._targetArray[1].currentAction().item())) { this.drawText(this._targetArray[1].currentAction().item().name, 0, this.fittingHeight(6), this.windowWidth() - Window_Base._iconWidth - this.padding * 3, 'right');
    } if (this._actionArray[1] != this._targetArray[1] && this._targetArray[1].canUse(this._targetArray[1].currentAction().item())) { this.drawIcon(this._targetArray[1].currentAction().item().iconIndex, this.windowWidth() - Window_Base._iconWidth - this.padding * 2, this.fittingHeight(6));
    } if (this._actionArray[1] != this._targetArray[1] && this._targetArray[1].currentAction() !== null) { this.drawText(this._targetArray[1].name(), 0, this.fittingHeight(7), this.windowWidth() - Window_Base._iconWidth - this.padding * 3, 'right');
    } if (this._actionArray[1] != this._targetArray[1] && this._targetArray[1].currentAction() !== null) { if (this._targetArray[1].isActor()) { if(this._targetArray[1].weapons()[0]) { this.drawIcon(this._targetArray[1].weapons()[0].iconIndex, this.windowWidth() - Window_Base._iconWidth * 2, this.fittingHeight(7));
    } } else if (this._targetArray[1].enemy().meta.srpgWeapon) { this.drawIcon($dataWeapons[this._targetArray[1].enemy().meta.srpgWeapon].iconIndex, this.windowWidth() - 2 * Window_Base._iconWidth, this.fittingHeight(7)); } }
  3. AngelYuko said:
    I see.
    I don't understand what happened but now Boomy's SRPG_Windows plugin works lol.
    I just disabled all plugins that are not SRPG and reactivate them one by one and there is no problem anymore.

    However I copied his FE GBA quick status window code + his FE GBA prediction windows code (in his GitHub page https://github.com/boomyville/RMMV/tree/master/SRPG Window ) and
    2 things disturb me (one more ... strange than the other).

    First the HP gauge don't display in the quick status window
    gauge don't display
    View attachment 285469

    The second (and a little more disturbing) is that the dammage prediction is completly wrong.
    Prediction window tells me that the enemy will do 1 dammage, but in reality I take 19 damage lol
    Prediction window
    View attachment 285470
    View attachment 285471


    Maybe there are problems in the code used. I will copy it there

    Quick status window lunatic code :
    Code:
    if (this._battler.isActor()) { this.drawActorFace(this._battler, 0, 0, Window_Base._faceWidth, Window_Base._faceHeight); } else { this.drawEnemyFace(this._battler, 0, 0, Window_Base._faceWidth, Window_Base._faceHeight); } this.drawText(this._battler.name(), Window_Base._faceWidth + this.padding, 0, Window_Base._faceWidth, 'right'); this.drawText(this._battler.hp + '/' + this._battler.mhp, Window_Base._faceWidth + this.padding, this.windowHeight() / 3, Window_Base._faceWidth, 'right'); this.drawGauge(Window_Base._faceWidth + this.padding, this.windowHeight() / 3 * 2, Window_Base._faceWidth, this._battler.hpRate(), '#FF0000', '#00FF00');

    Prediction window lunatic code (normaly ";" means go on another line. To more lisibility I created a new line each time I saw a ";")
    Code:
    this.drawText(this._actionArray[1].name(), Window_Base._iconWidth + this.padding, this.fittingHeight(0), this.windowWidth() - Window_Base._iconWidth);
    if (this._actionArray[1].isActor()) { if(this._actionArray[1].weapons()[0]) { this.drawIcon(this._actionArray[1].weapons()[0].iconIndex, 0, this.fittingHeight(0));
    } } else if (this._actionArray[1].enemy().meta.srpgWeapon) { this.drawIcon($dataWeapons[this._actionArray[1].enemy().meta.srpgWeapon].iconIndex, 0, this.fittingHeight(0));
    } this.drawIcon(this._actionArray[1].currentAction().item().iconIndex, 0, this.fittingHeight(1)); this.drawText(this._actionArray[1].currentAction().item().name, Window_Base._iconWidth + this.padding, this.fittingHeight(1), this.windowWidth() - Window_Base._iconWidth);
    this.drawText('PV', this.windowWidth() / 2 - this.textWidth('PV') / 2, this.fittingHeight(2), this.textWidth('PV')); this.drawText(this._actionArray[1].hp, 0, this.fittingHeight(2), this.textWidth(this._actionArray[1].hp), 'left');
    if (this._actionArray[1] != this._targetArray[1] && this._targetArray[1].currentAction() !== null) { this.drawText(this._targetArray[1].hp, this.windowWidth() - this.textWidth(this._targetArray[1].hp) - this.padding * 2, this.fittingHeight(2), this.textWidth(this._targetArray[1].hp), 'right');
    } this.drawText('Dmg', this.windowWidth() / 2 - this.textWidth('Dmg') / 2, this.fittingHeight(3), this.textWidth('Dmg'));
    if(this._actionArray[1].canUse(this._actionArray[1].currentAction().item())) { if(this._actionArray[1].currentAction().srpgPredictionDamage(this._targetArray[1]) !== 0) { this.drawText(this._actionArray[1].currentAction().srpgPredictionDamage(this._targetArray[1]), 0, this.fittingHeight(3), this.textWidth(this._actionArray[1].currentAction().srpgPredictionDamage(this._targetArray[1])), 'left');
    } } if(this._targetArray[1].canUse(this._targetArray[1].currentAction().item())) { if(this._targetArray[1].currentAction().srpgPredictionDamage(this._actionArray[1]) != 0) { if (this._actionArray[1] != this._targetArray[1] && this._targetArray[1].currentAction() !== null) { this.drawText(this._targetArray[1].currentAction().srpgPredictionDamage(this._actionArray[1]), this.windowWidth() - this.padding * 2 - this.textWidth(this._actionArray[1].currentAction().srpgPredictionDamage(this._actionArray[1])), this.fittingHeight(3), this.textWidth(this._targetArray[1].currentAction().srpgPredictionDamage(this._actionArray[1])), 'right');
    } } } this.drawText('Prc', this.windowWidth() / 2 - this.textWidth('Prc') / 2, this.fittingHeight(4), this.textWidth('Prc')); this.drawText(Math.round(100 * this._actionArray[1].currentAction().itemHit(this._targetArray[1])), 0, this.fittingHeight(4), this.textWidth(Math.round(100 * this._actionArray[1].currentAction().itemHit(this._targetArray[1]))), 'left');
    if (this._actionArray[1] != this._targetArray[1] && this._targetArray[1].canUse(this._targetArray[1].currentAction().item())) { this.drawText(Math.round(this._targetArray[1].currentAction().itemHit(this._actionArray[1]) * 100), this.windowWidth() - this.padding * 2 - this.textWidth(Math.round(this._targetArray[1].currentAction().itemHit(this._actionArray[1]) * 100)), this.fittingHeight(4), this.textWidth(Math.round(this._targetArray[1].currentAction().itemHit(this._actionArray[1]) * 100)), 'right');
    } this.drawText('Crit', this.windowWidth() / 2 - this.textWidth('Crit') / 2, this.fittingHeight(5), this.textWidth('Crit')); this.drawText(Math.round(100 * this._actionArray[1].currentAction().itemCri(this._targetArray[1])), 0, this.fittingHeight(5), this.textWidth(Math.round(100 * this._actionArray[1].currentAction().itemCri(this._targetArray[1]))), 'left');
    if (this._actionArray[1] != this._targetArray[1] && this._targetArray[1].canUse(this._targetArray[1].currentAction().item())) { this.drawText(Math.round(100 * this._targetArray[1].currentAction().itemCri(this._actionArray[1])), this.windowWidth() - this.padding * 2 - this.textWidth(Math.round(100 * this._targetArray[1].currentAction().itemCri(this._actionArray[1]))), this.fittingHeight(5), this.textWidth(Math.round(100 * this._targetArray[1].currentAction().itemCri(this._actionArray[1]))), 'right');
    } if (this._actionArray[1] != this._targetArray[1] && this._targetArray[1].canUse(this._targetArray[1].currentAction().item())) { this.drawText(this._targetArray[1].currentAction().item().name, 0, this.fittingHeight(6), this.windowWidth() - Window_Base._iconWidth - this.padding * 3, 'right');
    } if (this._actionArray[1] != this._targetArray[1] && this._targetArray[1].canUse(this._targetArray[1].currentAction().item())) { this.drawIcon(this._targetArray[1].currentAction().item().iconIndex, this.windowWidth() - Window_Base._iconWidth - this.padding * 2, this.fittingHeight(6));
    } if (this._actionArray[1] != this._targetArray[1] && this._targetArray[1].currentAction() !== null) { this.drawText(this._targetArray[1].name(), 0, this.fittingHeight(7), this.windowWidth() - Window_Base._iconWidth - this.padding * 3, 'right');
    } if (this._actionArray[1] != this._targetArray[1] && this._targetArray[1].currentAction() !== null) { if (this._targetArray[1].isActor()) { if(this._targetArray[1].weapons()[0]) { this.drawIcon(this._targetArray[1].weapons()[0].iconIndex, this.windowWidth() - Window_Base._iconWidth * 2, this.fittingHeight(7));
    } } else if (this._targetArray[1].enemy().meta.srpgWeapon) { this.drawIcon($dataWeapons[this._targetArray[1].enemy().meta.srpgWeapon].iconIndex, this.windowWidth() - 2 * Window_Base._iconWidth, this.fittingHeight(7)); } }
    Boomy's sample window is full of errors and basically requires you to nearly rewrite the whole thing from scratch.
  4. Arg I see.
    I'm fully beginer in coding (I used scratch at university but only to draw basics forms like square, triangle and creating basic algorithme ect, only to resolve math exercices in fact lol)
    So I have no idea how to use it to rewrite the code lol
    I Will try but at this time it's seems complicated in my mind
  5. has any body successfully redesigned the srpg prediction window to that of Fire Emblem Engage?
    Portrait, Name, Current Equip, Max HP, HP after Battle, Damage done, Hit Rate, Crit Rate?
    1701351036132.png

    The current SRPG Prediction Window has too many redundant info, and is blocking the battle field view
    draw name, draw class, draw level, draw HP MP TP, draw weapon slot, draw parameters
    draw action choice, hit, range, damage
    --> i added the skill effective here
    1701351237799.png

    even tactics ogre has a more intuitive UI
    dHtyE4SdbKnXu8r3TEo7q6.jpg
  6. RK DracoRoy said:
    How do I check if a user or active event is standing on a certain region? Intending to use this in a pre-battle event.
    $gameMap.regionId($gamePlayer.posX(), $gamePlayer.posY())
    or
    $gameMap.regionId($gameTemp.activeEvent().posX(), $gameTemp.activeEvent().posY())
    If its a pre-SRPG battle event, $gameTemp.activeEvent() will be undefined so replace with whatever event you want
    MetalKing11417 said:
    Boomy's sample window is full of errors and basically requires you to nearly rewrite the whole thing from scratch.
    I agree. I don't use it myself. It's too hard to customise the prediction/status windows using a plugin
    xabileug said:
    has any body successfully redesigned the srpg prediction window to that of Fire Emblem Engage?
    This is my version of the prediction window
    It's missing stuff (like hit/crit) but it is possible to strip the window to become more intuitive

    1701437809182.png
  7. @boomy what is the code lunatic for that setup? Thank you I like how it is portrait and not face graphic! Also uses icon parameters.

    Id like to retain the max HP, hp after combat, dmg, hit, crit. Im already using your code for is attack effective (300%) and not effective (50%)
  8. xabileug said:
    has any body successfully redesigned the srpg prediction window to that of Fire Emblem Engage?
    Portrait, Name, Current Equip, Max HP, HP after Battle, Damage done, Hit Rate, Crit Rate?


    You mean something like this?
    dQffARx.png
    (Ignore the poor mapping, this is a demo I made quickly to share with someone else lol)

    It took awhile to do and it's not quite done yet, still some cases I need to account for like healing and whatnot. But it's all there aside from HP after, special thanks to Boomy for the awesome plugin :)
  9. gsc said:
    You mean something like this?
    dQffARx.png
    (Ignore the poor mapping, this is a demo I made quickly to share with someone else lol)

    It took awhile to do and it's not quite done yet, still some cases I need to account for like healing and whatnot. But it's all there aside from HP after, special thanks to Boomy for the awesome plugin :)
    Yes! Absolutely, can tou share the code?
  10. For AI units to take advantage of range without counterattacks, use this formula.

    Code:
    <aiTarget: Math.max(1, (a.atk - b.def)) + (b.srpgWeaponRange() <= a.srpgWeaponRange() && b.srpgWeaponMinRange() <= a.srpgWeaponMinRange() && range || a.srpgWeaponMinRange() < b.srpgWeaponMinRange() && range < Math.max(2, b.srpgWeaponMinRange()))>

    Of course, this targets who takes the most damage but 1-2 fights 2 range at 1 range. 2-3 fights 3-8 range at 2 range. If they don't have enough movement to reach you but make up for it with range, they'll target you at range then take advantage on the next turn (if you don't move on that turn).

    I assume for weaponless skills, it's "srpgSkillRange(), srpgSkillMinRange()"

    Whatever formula you got, make sure to include this part for range. (And perhaps put parenthesis around that formula but keep the range outside that)
    Code:
    + (b.srpgWeaponRange() <= a.srpgWeaponRange() && b.srpgWeaponMinRange() <= a.srpgWeaponMinRange() && range || a.srpgWeaponMinRange() < b.srpgWeaponMinRange() && range < Math.max(2, b.srpgWeaponMinRange()))
  11. okay i finally hard coded some stuff from boomy's SRPG Window to srpg core of GearMV 1.11Q

    here's what's in my UI ala Fire Emblem Heroes :
    sprg status left and right -> invisible
    srpg battle command -> center
    srpg prediction window
    • user portrait, target portrait, window background
    • user name, target name
    • user HP, HP after, HP gauge || target HP, taget HP after, HP gauge
    • Damage, Hit, Crit (Hit considers user hit and target eva)
    • Action Order - improved with 2 block arrow icons
    • action name - improved with icon attack effective (50% for weak, 300% for strong)

    type1
    1701958936069.png

    type2
    1701958970082.png
  12. xabileug said:
    okay i finally hard coded some stuff from boomy's SRPG Window to srpg core of GearMV 1.11Q

    here's what's in my UI ala Fire Emblem Heroes :
    sprg status left and right -> invisible
    srpg battle command -> center
    srpg prediction window
    • user portrait, target portrait, window background
    • user name, target name
    • user HP, HP after, HP gauge || target HP, taget HP after, HP gauge
    • Damage, Hit, Crit (Hit considers user hit and target eva)
    • Action Order - improved with 2 block arrow icons
    • action name - improved with icon attack effective (50% for weak, 300% for strong)

    type1
    View attachment 286895

    type2
    View attachment 286896
    Is it possible to share your code ?
    I want to do something similar with prédiction Windows (not with detailed action but just put a *2 icon next to dmg when agi attack trigger)

    Do you know how to display Hit / Cri to a fix value ?
    For exemple how to display hit = 100% if the real hit rate is >= 100% (exemple my True hit is 140% but I want to display 100% in the Window)
  13. AngelYuko said:
    Do you know how to display Hit / Cri to a fix value ?
    For exemple how to display hit = 100% if the real hit rate is >= 100% (exemple my True hit is 140% but I want to display 100% in the Window)
    This is pretty simple. You just want to check both rates and see if they are greater than 100%. Here's the pseudo code:

    IF CRI >= 100:
    Write 100;
    ELSE IF CRI <= 0:
    Write 0;
    ELSE:
    Write Cri;


    The same general idea can be applied to both hit and crit, you just have to change out the variables.
  14. gsc said:
    This is pretty simple. You just want to check both rates and see if they are greater than 100%. Here's the pseudo code:

    IF CRI >= 100:
    Write 100;
    ELSE IF CRI <= 0:
    Write 0;
    ELSE:
    Write Cri;


    The same general idea can be applied to both hit and crit, you just have to change out the variables.
    I have the idea yeah but I didn't have any basis in javascript (I don't know what to write) + I don't have any idea where I must write the code lol
  15. I will share the code, but i wiil not customize alignment to your needs. Credits to ariake_takumi, boomy, and gsc
    Here's the edited draw contents for Window_SrpgPrediction
    window srpg prediction
    JavaScript:
    // 内容を描画する
        Window_SrpgPrediction.prototype.drawContents = function() {
            
            this.opacity = 0;
            this.resetFontSettings();
            var windowWidth = this.windowWidth(); //adjust height
            var lineHeight = this.lineHeight();
            var padding = 24;
            var user = this._actionArray[1];
            var target = this._targetArray[1];
            
            // add background image 816 x 624 px located in system folder
            this._background = new Sprite(ImageManager.loadSystem('prediction'));
            this.addChildAt(this._background, 1);
            this._background.anchor.x = 0.5;
            this._background.anchor.y = 0.5;
            this._background.x = Graphics.boxWidth / 2;
            this._background.y = -86;
            this._background.z = 1;
            
            // draw user bust (right side) 300 x 300 px located in system folder           
            this._bust = new Sprite(ImageManager.loadSystem(user.name()));
            this._bust.scale.x = -1;
            this.addChildAt(this._bust, 1);
            this._bust.anchor.x = 0.5;
            this._bust.anchor.y = 1;
            this._bust.x = Graphics.boxWidth * (10 / 12);
            this._bust.y = Graphics.boxHeight - 624;
    
            // draw target bust (left side) 300 x 300 px located in system folder   
            if(!target.isActor()) {
                var loadBust = target.name();
                this._bust2 = new Sprite(ImageManager.loadSystem(loadBust));
                this._bust2.visible = true;
            } else {
                this._bust2 = new Sprite(ImageManager.loadSystem(target.name()));
                if (user === target) { this._bust2.visible = false;}
                this._bust2.scale.x = 1;   
            }
            this.addChildAt(this._bust2, 1);
            this._bust2.anchor.x = 0.5;
            this._bust2.anchor.y = 1;
            this._bust2.x = Graphics.boxWidth * (2 / 12);
            this._bust2.y = Graphics.boxHeight - 624;
            
            // attacker
            var action = user.currentAction();
            var damage = action.srpgPredictionDamage(target);
            var hit = action.itemHit(target);
            var eva = action.itemEva(target);
            var cri = action.itemCri(user);
            var xx = 96 ;   
            
            this.drawText('Action', orderX - 8, -8, iconBoxWidth * 2, 'center');
            // draw name and action name
            this.drawText(user.name(), windowWidth / 2 + 32, lineHeight * 0 - 4, windowWidth / 2, 'center');
            this.drawSrpgBattleActionName(user, action, windowWidth / 2 + padding * 2 + xx, lineHeight * 1 - 8, true);
            //this.drawSrpgBattleDistance(user, action, windowWidth / 2 + 172 + padding * 2, lineHeight * 3);
            this.contents.fontSize = 20;
            // draw damage hit crit
            this.drawSrpgBattleDamage(damage, windowWidth / 2 + padding + 100 + xx, lineHeight * 3 + 4);
            this.drawSrpgBattleHit(hit, eva, windowWidth / 2 + padding + 100 + xx, lineHeight * 4 - 6);
            this.drawSrpgBattleCri(cri, windowWidth / 2 + padding + 100 + xx, lineHeight * 5 - 18);
            // draw HP icon       
            this.drawIcon(13, windowWidth / 2 + 16 + 32 + xx, lineHeight * 2 + 2);
            this.contents.fontSize = 40;
            this.drawText(user.hp, windowWidth / 2 + 16 + 64 + xx, lineHeight * 2);       
            this.contents.fontSize = 16;
            // check if double action is true and action used is normal attack   
            if (_srpgUseAgiAttackPlus == 'true' && target.agi > user.agi && user.attackSkillId() === action.item().id) {
                var nowHp = user.hp - (2 * target.currentAction().srpgPredictionDamage(user));
            } else {var nowHp = user.hp - target.currentAction().srpgPredictionDamage(user);}
            // limit new HP to 0 and maxp HP
            if (nowHp > user.mhp) { nowHp = user.mhp;
            } else if (nowHp < 0) { nowHp = 0; }
            var width = this.textWidth('00000');       
            this.drawText(nowHp, windowWidth / 2 + 160 + width + 16 + xx, lineHeight * 2 + 12);
            this.resetFontSettings();
            // draw HP gauge
            var rate = nowHp / user.mhp;
            this.drawGauge(windowWidth / 2 + 16 + 32 + xx, lineHeight * 2 + 12, windowWidth / 3 - 48, rate, this.hpGaugeColor1(), this.hpGaugeColor2());
            
            //     target
            var reaction = target.currentAction();
            // If the skill cannot be used or the attacker is unable to respond
            if (reaction && (!target.canUse(reaction.item()) || user.currentAction().item().meta.srpgUncounterable)) {
                reaction = null;
            }
            if (!reaction || user === target) {
                this.drawSrpgBattleActionName(target, reaction, padding, lineHeight * 0, false);
            } else {
                var damage = reaction.srpgPredictionDamage(user);
                var hit = reaction.itemHit(user);
                var eva = reaction.itemEva(user);
                var cri = reaction.itemCri(target);
                // draw name and action name   
                this.drawText(target.name(),-64, lineHeight * 0 - 4,windowWidth / 2, 'center');
                this.drawSrpgBattleActionName(target, reaction, padding + 32, lineHeight * 1 - 8, true);
                //this.drawSrpgBattleDistance(target, reaction, 172 + padding, lineHeight * 1);
                // draw damage hit crit
                this.contents.fontSize = 20;
                this.drawSrpgBattleDamage(damage, padding + 100, lineHeight * 3 + 4);
                this.drawSrpgBattleHit(hit, eva, padding + 100, lineHeight * 4 - 6);
                this.drawSrpgBattleCri(cri, padding + 100, lineHeight * 5 - 18);
                // draw HP icon           
                this.drawIcon(13, padding + 36, lineHeight * 2 + 2);
                this.contents.fontSize = 40;
                this.drawText(target.hp, padding + 16 + 64, lineHeight * 2);           
                this.contents.fontSize = 16;
                // check if double action is true and action used is normal attack
                if (_srpgUseAgiAttackPlus == 'true' && user.agi > target.agi && target.attackSkillId() === action.item().id) {
                var nowHp = target.hp - (2 * user.currentAction().srpgPredictionDamage(target));
                } else {var nowHp = target.hp - user.currentAction().srpgPredictionDamage(target);}
                // limit new HP to 0 and maxp HP
                if (nowHp > target.mhp) { nowHp = target.mhp;
                } else if (nowHp < 0) { nowHp = 0; }           
                var width = this.textWidth('00000');
                this.drawText( nowHp, padding + 150 + width + 16, lineHeight * 2 + 12);
                this.resetFontSettings();
                // draw HP Gauage
                var rate = nowHp / target.mhp;
                this.drawGauge( 28 + 32 , lineHeight * 2 + 12, windowWidth / 3 - 48, rate, this.hpGaugeColor1(), this.hpGaugeColor2());
            }
            if (_srpgPredictionWindowMode === 2) return;
            // action order
            BattleManager.makeActionOrders();
            this.contents.fontSize = 18;
            var order = BattleManager.actionBattlers();
            var doubleActioncheck = [];
            var doubleActionRate = 0;
            var iconBoxWidth = Window_Base._iconWidth + 4;
            var orderX = this.windowWidth() / 2 - this.standardPadding() - iconBoxWidth  +10;
            var orderY = lineHeight - 2;
            var line = 0
            this.drawText('Action', orderX - 8, -8, iconBoxWidth * 2, 'center');
            for (var i = 0; i < order.length; i++) {
                battler = order[i];
                // user
                if (user === battler && action && action.item()) {
                    // first action
                    if (doubleActioncheck.indexOf(battler) < 0) {
                        this.drawSrpgBattleOrders(battler, action.item(), orderX, 17 + orderY * line);
                    // double action
                    } else if (_srpgUseAgiAttackPlus === 'true' && doubleActioncheck.indexOf(battler) >= 0) {
                        actionRate = this.setDoubleActionRate(user, target);
                        if (actionRate > 0) {
                            this.drawSrpgBattleOrders(battler, action.item(), orderX, 17 + orderY * line);
                            this.drawSrpgActionRate(actionRate, orderX + iconBoxWidth, 17 + orderY * line);
                        }
                    }
                    // next
                    doubleActioncheck.push(battler);
                    line++;
                // target   
                } else if (target === battler && reaction && reaction.item()) {
                    // 初回行動時
                    if (doubleActioncheck.indexOf(battler) < 0) {
                        this.drawSrpgBattleOrders(battler, reaction.item(), orderX,  17 + orderY * line);
                        // 応戦が反撃率に応じる場合
                        if (_srpgBattleReaction === 2 && target.cnt > 0) {
                            this.drawSrpgActionRate(target.cnt * 100, orderX, 17 + orderY * line);
                        }
                    // double action
                    } else if (_srpgUseAgiAttackPlus === 'true' && doubleActioncheck.indexOf(battler) >= 0) {
                        actionRate = this.setDoubleActionRate(target, user);
                        if (_srpgBattleReaction === 2 && target.cnt > 0) actionRate = Math.floor(actionRate * target.cnt);
                        if (actionRate > 0) {
                            this.drawSrpgBattleOrders(battler, reaction.item(), orderX,  17 + orderY * line);
                            this.drawSrpgActionRate(actionRate, orderX, 17 + orderY * line);
                        }
                    }
                    // next
                    doubleActioncheck.push(battler);
                    line++;
                }
            }
        };

    action order
    JavaScript:
        // draw action order
        Window_SrpgPrediction.prototype.drawSrpgBattleOrders = function(battler, item, x, y) {
            // for nomal attack, show weapon icon
            var arrowicon1 = 92;   // actor arrow head
            var arrowicon2 = 93;   // actor arrow tail
            var arrowicon3 = 90;   // actor arrow tail
            var arrowicon4 = 91;   // actor arrow head
            if (DataManager.isSkill(item) && item.id === battler.attackSkillId() &&
                !battler.hasNoWeapons()) {
                if (battler.isActor()) {
                    var item = battler.weapons()[0];
                    this.drawIcon(arrowicon1, x-32, y + 2);
                    this.drawIcon(arrowicon2, x, y + 2);
                    this.drawIcon(item.iconIndex, x + 32, y + 2);
                } else {
                    var item = $dataWeapons[Number(battler.enemy().meta.srpgWeapon)];
                    this.drawIcon(item.iconIndex, x, y + 2);
                    this.drawIcon(arrowicon3, x + 32, y + 2);
                    this.drawIcon(arrowicon4, x + 64, y + 2);
                }
            // else draw skill icon
            } else {
                if (battler.isActor()) {
                    this.drawIcon(item.iconIndex, x + 32 , y + 2);
                } else {
                    this.drawIcon(item.iconIndex, x , y + 2);
                }
            }
        };

    attack effective
    JavaScript:
        // 使用する攻撃名の描画
        Window_SrpgPrediction.prototype.drawSrpgBattleActionName = function(battler, action, x, y, flag) {
            if (action && flag === true) {
                var skill = action.item();
                if (skill) {
                    var costWidth = this.costWidth();
                    this.changePaintOpacity(this.isEnabled(battler, skill));
                    // 通常攻撃の場合、装備している武器名を表示する
                    if (DataManager.isSkill(skill) && skill.id === battler.attackSkillId() &&
                        !battler.hasNoWeapons()) {
                        if (battler.isActor()) {
                            var item = battler.weapons()[0];
                        } else {
                            var item = $dataWeapons[Number(battler.enemy().meta.srpgWeapon)];
                        }
                        this.drawItemName(item, x, y, 280 - costWidth);
                    // 通常攻撃以外のスキル名はそのまま表示する
                    } else {
                        this.drawItemName(skill, x, y, 280 - costWidth);
                    }
                    this.drawSkillCost(battler, skill, x, y, 288);
                    this.changePaintOpacity(1);               
                    
                    // is attack effective
                    if (battler.isActor()) {
                        if ($gameSystem.EventToUnit($gameTemp.targetEvent().eventId())[1].elementRate($gameSystem.EventToUnit($gameTemp.activeEvent().eventId())[1].currentAction().item().damage.elementId) > 1) {
                            this.drawIcon(94, x + 6, y - 6);  // effective icon ID
                        } else if ($gameSystem.EventToUnit($gameTemp.targetEvent().eventId())[1].elementRate($gameSystem.EventToUnit($gameTemp.activeEvent().eventId())[1].currentAction().item().damage.elementId) < 1) {
                            this.drawIcon(95, x + 6, y + 6); // not effective icon ID
                        }
                    } else if (!battler.isActor()) {
                        if ($gameSystem.EventToUnit($gameTemp.activeEvent().eventId())[1].elementRate($gameSystem.EventToUnit($gameTemp.targetEvent().eventId())[1].currentAction().item().damage.elementId) > 1) {
                            this.drawIcon(94, x + 6, y + 6);  // effective icon ID
                        } else if ($gameSystem.EventToUnit($gameTemp.activeEvent().eventId())[1].elementRate($gameSystem.EventToUnit($gameTemp.targetEvent().eventId())[1].currentAction().item().damage.elementId) < 1) {
                            this.drawIcon(95, x + 6, y + 6); // not effective icon ID
                        }
                    }
                    
                } else {
                    this.drawText('------------', x + 52, y, 96, 'right');
                }
            } else {
                this.drawText('------------', x + 52, y, 96, 'right');
            }
        };

    dmg hit cri
    JavaScript:
        // battle damage
        Window_SrpgPrediction.prototype.drawSrpgBattleDamage = function(damage, x, y) {
            this.changeTextColor(this.systemColor());
            var width = this.textWidth('00000');
            if (damage >= 0) {
                this.drawText(_textSrpgDamage, x, y, 164);
                this.resetTextColor();
                this.drawText(damage, x + 90, y, width, 'right');
            } else {
                this.drawText(_textSrpgHealing, x, y, 164);
                this.resetTextColor();
                this.drawText(damage * -1, x + 90, y, width, 'right');
            }
        };
    
        // battle cri
        Window_SrpgPrediction.prototype.drawSrpgBattleCri = function(cri, x, y) {
            var val = cri;
            var width = this.textWidth('000%');
            this.changeTextColor(this.systemColor());
            this.drawText("Cri", x, y, 98);
            this.resetTextColor();
            this.drawText(Math.floor(val * 100) + '%', x + 110, y, width, 'right');
        };
    
        // battle hit
        Window_SrpgPrediction.prototype.drawSrpgBattleHit = function(hit, eva, x, y) {
            var val = Math.floor((hit.clamp(0, 1.0) * (1.0 - eva).clamp(0, 1.0)) * 100); // 命中・回避を同時に処理する
            var width = this.textWidth('000%');
            this.changeTextColor(this.systemColor());
            this.drawText(TextManager.param(8), x, y, 98);
            this.resetTextColor();
            this.drawText(val.clamp(0, 100) + '%', x + 110, y, width, 'right');
        };
  16. xabileug said:
    I will share the code, but i wiil not customize alignment to your needs. Credits to ariake_takumi, boomy, and gsc
    Here's the edited draw contents for Window_SrpgPrediction
    window srpg prediction
    JavaScript:
    // 内容を描画する
        Window_SrpgPrediction.prototype.drawContents = function() {
           
            this.opacity = 0;
            this.resetFontSettings();
            var windowWidth = this.windowWidth(); //adjust height
            var lineHeight = this.lineHeight();
            var padding = 24;
            var user = this._actionArray[1];
            var target = this._targetArray[1];
           
            // add background image 816 x 624 px located in system folder
            this._background = new Sprite(ImageManager.loadSystem('prediction'));
            this.addChildAt(this._background, 1);
            this._background.anchor.x = 0.5;
            this._background.anchor.y = 0.5;
            this._background.x = Graphics.boxWidth / 2;
            this._background.y = -86;
            this._background.z = 1;
           
            // draw user bust (right side) 300 x 300 px located in system folder          
            this._bust = new Sprite(ImageManager.loadSystem(user.name()));
            this._bust.scale.x = -1;
            this.addChildAt(this._bust, 1);
            this._bust.anchor.x = 0.5;
            this._bust.anchor.y = 1;
            this._bust.x = Graphics.boxWidth * (10 / 12);
            this._bust.y = Graphics.boxHeight - 624;
    
            // draw target bust (left side) 300 x 300 px located in system folder  
            if(!target.isActor()) {
                var loadBust = target.name();
                this._bust2 = new Sprite(ImageManager.loadSystem(loadBust));
                this._bust2.visible = true;
            } else {
                this._bust2 = new Sprite(ImageManager.loadSystem(target.name()));
                if (user === target) { this._bust2.visible = false;}
                this._bust2.scale.x = 1;  
            }
            this.addChildAt(this._bust2, 1);
            this._bust2.anchor.x = 0.5;
            this._bust2.anchor.y = 1;
            this._bust2.x = Graphics.boxWidth * (2 / 12);
            this._bust2.y = Graphics.boxHeight - 624;
           
            // attacker
            var action = user.currentAction();
            var damage = action.srpgPredictionDamage(target);
            var hit = action.itemHit(target);
            var eva = action.itemEva(target);
            var cri = action.itemCri(user);
            var xx = 96 ;  
           
            this.drawText('Action', orderX - 8, -8, iconBoxWidth * 2, 'center');
            // draw name and action name
            this.drawText(user.name(), windowWidth / 2 + 32, lineHeight * 0 - 4, windowWidth / 2, 'center');
            this.drawSrpgBattleActionName(user, action, windowWidth / 2 + padding * 2 + xx, lineHeight * 1 - 8, true);
            //this.drawSrpgBattleDistance(user, action, windowWidth / 2 + 172 + padding * 2, lineHeight * 3);
            this.contents.fontSize = 20;
            // draw damage hit crit
            this.drawSrpgBattleDamage(damage, windowWidth / 2 + padding + 100 + xx, lineHeight * 3 + 4);
            this.drawSrpgBattleHit(hit, eva, windowWidth / 2 + padding + 100 + xx, lineHeight * 4 - 6);
            this.drawSrpgBattleCri(cri, windowWidth / 2 + padding + 100 + xx, lineHeight * 5 - 18);
            // draw HP icon      
            this.drawIcon(13, windowWidth / 2 + 16 + 32 + xx, lineHeight * 2 + 2);
            this.contents.fontSize = 40;
            this.drawText(user.hp, windowWidth / 2 + 16 + 64 + xx, lineHeight * 2);      
            this.contents.fontSize = 16;
            // check if double action is true and action used is normal attack  
            if (_srpgUseAgiAttackPlus == 'true' && target.agi > user.agi && user.attackSkillId() === action.item().id) {
                var nowHp = user.hp - (2 * target.currentAction().srpgPredictionDamage(user));
            } else {var nowHp = user.hp - target.currentAction().srpgPredictionDamage(user);}
            // limit new HP to 0 and maxp HP
            if (nowHp > user.mhp) { nowHp = user.mhp;
            } else if (nowHp < 0) { nowHp = 0; }
            var width = this.textWidth('00000');      
            this.drawText(nowHp, windowWidth / 2 + 160 + width + 16 + xx, lineHeight * 2 + 12);
            this.resetFontSettings();
            // draw HP gauge
            var rate = nowHp / user.mhp;
            this.drawGauge(windowWidth / 2 + 16 + 32 + xx, lineHeight * 2 + 12, windowWidth / 3 - 48, rate, this.hpGaugeColor1(), this.hpGaugeColor2());
           
            //     target
            var reaction = target.currentAction();
            // If the skill cannot be used or the attacker is unable to respond
            if (reaction && (!target.canUse(reaction.item()) || user.currentAction().item().meta.srpgUncounterable)) {
                reaction = null;
            }
            if (!reaction || user === target) {
                this.drawSrpgBattleActionName(target, reaction, padding, lineHeight * 0, false);
            } else {
                var damage = reaction.srpgPredictionDamage(user);
                var hit = reaction.itemHit(user);
                var eva = reaction.itemEva(user);
                var cri = reaction.itemCri(target);
                // draw name and action name  
                this.drawText(target.name(),-64, lineHeight * 0 - 4,windowWidth / 2, 'center');
                this.drawSrpgBattleActionName(target, reaction, padding + 32, lineHeight * 1 - 8, true);
                //this.drawSrpgBattleDistance(target, reaction, 172 + padding, lineHeight * 1);
                // draw damage hit crit
                this.contents.fontSize = 20;
                this.drawSrpgBattleDamage(damage, padding + 100, lineHeight * 3 + 4);
                this.drawSrpgBattleHit(hit, eva, padding + 100, lineHeight * 4 - 6);
                this.drawSrpgBattleCri(cri, padding + 100, lineHeight * 5 - 18);
                // draw HP icon          
                this.drawIcon(13, padding + 36, lineHeight * 2 + 2);
                this.contents.fontSize = 40;
                this.drawText(target.hp, padding + 16 + 64, lineHeight * 2);          
                this.contents.fontSize = 16;
                // check if double action is true and action used is normal attack
                if (_srpgUseAgiAttackPlus == 'true' && user.agi > target.agi && target.attackSkillId() === action.item().id) {
                var nowHp = target.hp - (2 * user.currentAction().srpgPredictionDamage(target));
                } else {var nowHp = target.hp - user.currentAction().srpgPredictionDamage(target);}
                // limit new HP to 0 and maxp HP
                if (nowHp > target.mhp) { nowHp = target.mhp;
                } else if (nowHp < 0) { nowHp = 0; }          
                var width = this.textWidth('00000');
                this.drawText( nowHp, padding + 150 + width + 16, lineHeight * 2 + 12);
                this.resetFontSettings();
                // draw HP Gauage
                var rate = nowHp / target.mhp;
                this.drawGauge( 28 + 32 , lineHeight * 2 + 12, windowWidth / 3 - 48, rate, this.hpGaugeColor1(), this.hpGaugeColor2());
            }
            if (_srpgPredictionWindowMode === 2) return;
            // action order
            BattleManager.makeActionOrders();
            this.contents.fontSize = 18;
            var order = BattleManager.actionBattlers();
            var doubleActioncheck = [];
            var doubleActionRate = 0;
            var iconBoxWidth = Window_Base._iconWidth + 4;
            var orderX = this.windowWidth() / 2 - this.standardPadding() - iconBoxWidth  +10;
            var orderY = lineHeight - 2;
            var line = 0
            this.drawText('Action', orderX - 8, -8, iconBoxWidth * 2, 'center');
            for (var i = 0; i < order.length; i++) {
                battler = order[i];
                // user
                if (user === battler && action && action.item()) {
                    // first action
                    if (doubleActioncheck.indexOf(battler) < 0) {
                        this.drawSrpgBattleOrders(battler, action.item(), orderX, 17 + orderY * line);
                    // double action
                    } else if (_srpgUseAgiAttackPlus === 'true' && doubleActioncheck.indexOf(battler) >= 0) {
                        actionRate = this.setDoubleActionRate(user, target);
                        if (actionRate > 0) {
                            this.drawSrpgBattleOrders(battler, action.item(), orderX, 17 + orderY * line);
                            this.drawSrpgActionRate(actionRate, orderX + iconBoxWidth, 17 + orderY * line);
                        }
                    }
                    // next
                    doubleActioncheck.push(battler);
                    line++;
                // target  
                } else if (target === battler && reaction && reaction.item()) {
                    // 初回行動時
                    if (doubleActioncheck.indexOf(battler) < 0) {
                        this.drawSrpgBattleOrders(battler, reaction.item(), orderX,  17 + orderY * line);
                        // 応戦が反撃率に応じる場合
                        if (_srpgBattleReaction === 2 && target.cnt > 0) {
                            this.drawSrpgActionRate(target.cnt * 100, orderX, 17 + orderY * line);
                        }
                    // double action
                    } else if (_srpgUseAgiAttackPlus === 'true' && doubleActioncheck.indexOf(battler) >= 0) {
                        actionRate = this.setDoubleActionRate(target, user);
                        if (_srpgBattleReaction === 2 && target.cnt > 0) actionRate = Math.floor(actionRate * target.cnt);
                        if (actionRate > 0) {
                            this.drawSrpgBattleOrders(battler, reaction.item(), orderX,  17 + orderY * line);
                            this.drawSrpgActionRate(actionRate, orderX, 17 + orderY * line);
                        }
                    }
                    // next
                    doubleActioncheck.push(battler);
                    line++;
                }
            }
        };

    action order
    JavaScript:
        // draw action order
        Window_SrpgPrediction.prototype.drawSrpgBattleOrders = function(battler, item, x, y) {
            // for nomal attack, show weapon icon
            var arrowicon1 = 92;   // actor arrow head
            var arrowicon2 = 93;   // actor arrow tail
            var arrowicon3 = 90;   // actor arrow tail
            var arrowicon4 = 91;   // actor arrow head
            if (DataManager.isSkill(item) && item.id === battler.attackSkillId() &&
                !battler.hasNoWeapons()) {
                if (battler.isActor()) {
                    var item = battler.weapons()[0];
                    this.drawIcon(arrowicon1, x-32, y + 2);
                    this.drawIcon(arrowicon2, x, y + 2);
                    this.drawIcon(item.iconIndex, x + 32, y + 2);
                } else {
                    var item = $dataWeapons[Number(battler.enemy().meta.srpgWeapon)];
                    this.drawIcon(item.iconIndex, x, y + 2);
                    this.drawIcon(arrowicon3, x + 32, y + 2);
                    this.drawIcon(arrowicon4, x + 64, y + 2);
                }
            // else draw skill icon
            } else {
                if (battler.isActor()) {
                    this.drawIcon(item.iconIndex, x + 32 , y + 2);
                } else {
                    this.drawIcon(item.iconIndex, x , y + 2);
                }
            }
        };

    attack effective
    JavaScript:
        // 使用する攻撃名の描画
        Window_SrpgPrediction.prototype.drawSrpgBattleActionName = function(battler, action, x, y, flag) {
            if (action && flag === true) {
                var skill = action.item();
                if (skill) {
                    var costWidth = this.costWidth();
                    this.changePaintOpacity(this.isEnabled(battler, skill));
                    // 通常攻撃の場合、装備している武器名を表示する
                    if (DataManager.isSkill(skill) && skill.id === battler.attackSkillId() &&
                        !battler.hasNoWeapons()) {
                        if (battler.isActor()) {
                            var item = battler.weapons()[0];
                        } else {
                            var item = $dataWeapons[Number(battler.enemy().meta.srpgWeapon)];
                        }
                        this.drawItemName(item, x, y, 280 - costWidth);
                    // 通常攻撃以外のスキル名はそのまま表示する
                    } else {
                        this.drawItemName(skill, x, y, 280 - costWidth);
                    }
                    this.drawSkillCost(battler, skill, x, y, 288);
                    this.changePaintOpacity(1);              
                   
                    // is attack effective
                    if (battler.isActor()) {
                        if ($gameSystem.EventToUnit($gameTemp.targetEvent().eventId())[1].elementRate($gameSystem.EventToUnit($gameTemp.activeEvent().eventId())[1].currentAction().item().damage.elementId) > 1) {
                            this.drawIcon(94, x + 6, y - 6);  // effective icon ID
                        } else if ($gameSystem.EventToUnit($gameTemp.targetEvent().eventId())[1].elementRate($gameSystem.EventToUnit($gameTemp.activeEvent().eventId())[1].currentAction().item().damage.elementId) < 1) {
                            this.drawIcon(95, x + 6, y + 6); // not effective icon ID
                        }
                    } else if (!battler.isActor()) {
                        if ($gameSystem.EventToUnit($gameTemp.activeEvent().eventId())[1].elementRate($gameSystem.EventToUnit($gameTemp.targetEvent().eventId())[1].currentAction().item().damage.elementId) > 1) {
                            this.drawIcon(94, x + 6, y + 6);  // effective icon ID
                        } else if ($gameSystem.EventToUnit($gameTemp.activeEvent().eventId())[1].elementRate($gameSystem.EventToUnit($gameTemp.targetEvent().eventId())[1].currentAction().item().damage.elementId) < 1) {
                            this.drawIcon(95, x + 6, y + 6); // not effective icon ID
                        }
                    }
                   
                } else {
                    this.drawText('------------', x + 52, y, 96, 'right');
                }
            } else {
                this.drawText('------------', x + 52, y, 96, 'right');
            }
        };

    dmg hit cri
    JavaScript:
        // battle damage
        Window_SrpgPrediction.prototype.drawSrpgBattleDamage = function(damage, x, y) {
            this.changeTextColor(this.systemColor());
            var width = this.textWidth('00000');
            if (damage >= 0) {
                this.drawText(_textSrpgDamage, x, y, 164);
                this.resetTextColor();
                this.drawText(damage, x + 90, y, width, 'right');
            } else {
                this.drawText(_textSrpgHealing, x, y, 164);
                this.resetTextColor();
                this.drawText(damage * -1, x + 90, y, width, 'right');
            }
        };
    
        // battle cri
        Window_SrpgPrediction.prototype.drawSrpgBattleCri = function(cri, x, y) {
            var val = cri;
            var width = this.textWidth('000%');
            this.changeTextColor(this.systemColor());
            this.drawText("Cri", x, y, 98);
            this.resetTextColor();
            this.drawText(Math.floor(val * 100) + '%', x + 110, y, width, 'right');
        };
    
        // battle hit
        Window_SrpgPrediction.prototype.drawSrpgBattleHit = function(hit, eva, x, y) {
            var val = Math.floor((hit.clamp(0, 1.0) * (1.0 - eva).clamp(0, 1.0)) * 100); // 命中・回避を同時に処理する
            var width = this.textWidth('000%');
            this.changeTextColor(this.systemColor());
            this.drawText(TextManager.param(8), x, y, 98);
            this.resetTextColor();
            this.drawText(val.clamp(0, 100) + '%', x + 110, y, width, 'right');
        };
    Thank you very much !
    Don't worry I will find a way to edit to my personal tastes when I will understand the code.

    Just a question. I don't understand that part
    prediction file part
    1702052611038.png
    What exactly is the file "prediction" ? I understood that was the background of the window but I don't have any idea how it should look like.
    Does the background of picture be transparent ? have a background color ? anything else ?

    Another question about that part :
    user / target.name
    1702052910010.png
    What the "user.name" / "target.name" refer to ? The names presents in the actor / enemy DDB ? (I don't want to do a mistake lol)
  17. Is it possible to display a down/dead sprite for actors or enemies that have been defeated in the MZ plugin? I was looking for it in the plugin instructions but couldn't find anything about it. I plan for enemies to disappear when defeated but actors to stay downed on the map until the match is over.
  18. rhaw757 said:
    Is it possible to display a down/dead sprite for actors or enemies that have been defeated in the MZ plugin? I was looking for it in the plugin instructions but couldn't find anything about it. I plan for enemies to disappear when defeated but actors to stay downed on the map until the match is over.
    its dopan's plugin, the graves here . Only tomoaky's SRPG version has the down image portrait upon defeat. SPRG Converter erases the event upon defeat while tomokay's activates Self Switch D. SRPG Converter is Fire Emblem Style, so the Final Fantasy Tactics defeat effect you want not really here yet

    AngelYuko said:
    What the "user.name" / "target.name" refer to ? The names presents in the actor / enemy DDB ? (I don't want to do a mistake lol)

    Just put the images in the system folder. those are Filenames. Rather than me explaining it all, please go to boomy's github SRPG Window, all the variables are explained there.

    1. prediction is the filename for the window background it should be the size 816 x 624
    2. all player bust portraits should be same name in Database. ex Aldo -> Aldo
    3. all enemy bust portraits should be same name in Database. ex. Slime -> Slime

    1702072563421.png
  19. Yeah I tried the graves plugin and got a "ReferenceError: ResourceHandler is not defined" error upon loading my game. Not sure if it's because it just doesn't work with MZ or what it is. It's almost crucial to my game to have the down sprites so I was hoping there would be a way to add it.
  20. xabileug said:
    its dopan's plugin, the graves here . Only tomoaky's SRPG version has the down image portrait upon defeat. SPRG Converter erases the event upon defeat while tomokay's activates Self Switch D. SRPG Converter is Fire Emblem Style, so the Final Fantasy Tactics defeat effect you want not really here yet



    Just put the images in the system folder. those are Filenames. Rather than me explaining it all, please go to boomy's github SRPG Window, all the variables are explained there.

    1. prediction is the filename for the window background it should be the size 816 x 624
    2. all player bust portraits should be same name in Database. ex Aldo -> Aldo
    3. all enemy bust portraits should be same name in Database. ex. Slime -> Slime

    View attachment 287077
    I see, thank you very much it's clearer now !

    Sorry to bother you again, but I have a bug when I copy your code in the SRPG_core / Window_SRPGPrediction (maybe I didn't paste where it should be)

    Bug report
    1702077517425.png
    The bug accure when I want to fight an enemy during SRPG Battle.

    Do you think it would work if I paste the code in the Lunatic Code section in Boomy's SRPG_Windows plugin's parameters instead of editing the SRPG_core directly ?