My battle system uses TP (reffered to in-game as SP) for skill cost. A character's Max TP is 3.
I'm working a boss ability that involves the boss grabbing one of the characters, and on the next turn "detonating" that character's TP, hitting once for each point of TP they have.
I've gotten pretty far already:
Spoiler: Action Sequences:
Code:
<target action> perform action motion wait: user if BattleManager._targets[0].tp > 0 EVAL: BattleManager._logWindow.addText("\\c[\\v[6]]\\n[" + BattleManager._targets[0].actorId() + "]\\c[0]'s \\c[\\v[5]]SP\\c[0] detonates."); action animation wait for animation TP -1: target action effect if BattleManager._targets[0].tp > 0 action animation wait for animation TP -1: target action effect if BattleManager._targets[0].tp > 0 action animation wait for animation TP -1: target action effect end end remove state 21: target else eval: BattleManager._logWindow.push('wait'); eval: BattleManager._logWindow.push('wait'); action common event death break </target action> <finish action> immortal: targets, false wait for new line clear battle log perform finish wait for movement wait for effect </finish action>
Things work as intended when the character has 0 TP or 2 TP
With 2TP, the animation plays twice in a row and then the two battle log messages with respective damage sound effect and screenshake appear, as intended.
With 3TP however, it shows like this:
Animation
Animation
Damage Feedback
Animation
Damage Feedback
Damage Feedback
Causing the effect to be muddled.
I suspected it had something to do with the yanfly double hit issue, so I disabled the plugin I use for that, but the default Battle Core was even more chaotic. *
The other major issue I have is when the character is at 1 TP, it still activates the common event for when they have 0 TP. This has me pretty perplexed, because I've never seen an if statement that executes both the if AND else, and I have no idea why that would happen at 1 TP, but not 2 or 3 TP.
* I don't use Turan's snippet since it plays the damage sound once before the battlelog messages, and I find for mechanical feedback and gamefeel purposes it's much better to have the hit effect accompany each battle log message reporting the damage.
It's a work in progress, I still get doubling from Scope: X random enemies and Substitute but here's what I got for reference:
Spoiler: YanflyDouble_Fix.js
Code:
Game_Battler.prototype.performResultEffects = function() { var result = this.result(); if (result.missed && result.physical) this.performMiss(); if (result.evaded) { if (result.physical) { this.performEvasion(); } else { this.performMagicEvasion(); } } if (result.hpAffected) { } if (this.isAlive() && result.mpDamage !== 0 && result.mpDamage < 0) { this.performRecovery(); } if (this.isAlive() && result.tpDamage !== 0 && result.tpDamage < 0) { this.performRecovery(); } };
Edit: For the sake of thoroughness, I've also tried an implementation using
Scope Extend. The help file says javascript expressions can be used, but my attempts did not execute.
Code:
<SERandomNum: BattleManager._targets[0].tp>
本贴来自国际rpgmaker官方论坛作者:Rethy处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:
https://forums.rpgmakerweb.com/threads/number-of-hits-based-on-targets-tp.183978/