[RMMV] DragonBones 2d Animation Integration

KillerGin

Freddie
Veteran
Joined
Dec 18, 2015
Messages
365
Reaction score
198
First Language
English
Primarily Uses
N/A
I found a bug that breaks SV battlers when you install dragon bones (I tested 1.05 and 1.07)

This problem affects some of the enemy SV animations (especially the enemy damage animation)

Some people may think theirs has no issue but I am sure if you look closely your SV enemy damage animation is missing. To check, use enemies like the slime or a bat.... instead of the damage animation it will simply move back slightly and flash.... thats broken.

(ALSO to make battle test works correctly when you change the scripts you have to run the game, then close it, then test battle again for updates to take effect)
 

KillerGin

Freddie
Veteran
Joined
Dec 18, 2015
Messages
365
Reaction score
198
First Language
English
Primarily Uses
N/A
Bug still ongoing but I may have found a clue:

Sorry for posting so much but I think I may have found something that helps..... when you attack an SV enemy it seems dragon bones takes over and automatically idles them so they dont do the damage animation for the enemies.... and when they attack etc it reports that action is not defined which I am sure can make other animations fail etc...
 

Jufry_A

Villager
Member
Joined
Sep 27, 2018
Messages
8
Reaction score
2
First Language
Indonesia
Primarily Uses
RMMV
Why state motions (like Abnormal, Sleep, Dying, etc) not work?
 

KillerGin

Freddie
Veteran
Joined
Dec 18, 2015
Messages
365
Reaction score
198
First Language
English
Primarily Uses
N/A
I reported the bug to Aekashics who confirmed that is indeed a bug. Aekashics said they will be more testing and if confirmed will be reported to Yanfly. YAY!
 

Gregaur

Veteran
Veteran
Joined
Jan 3, 2017
Messages
132
Reaction score
19
First Language
french
Primarily Uses
RMMV
Hello guys !

I have a question. I'm using the Summon core from Somerandomdude which allow you to Sumon some actors. http://sumrndm.site/summon-core/

The problem is : When I use the skill it doesn't work with Dragonbones actor (only animated SV ones).

I think the dragonbones actor isn't load if he isn't at the start of the battle. Is there a command to force the loading of the dragonbones battle I can use with a common event ?

Anyways ! Thanks for you time and have a great making !!!
 
Joined
Jul 2, 2019
Messages
2
Reaction score
0
First Language
English
Primarily Uses
RMMV
I encountered a bug while playtesting v1.06. All my plugins are the recent versions. While playing an animation on a Dragonbones Battler assigned to an actor in the party, you'll crash with an error:

TypeError: Cannot read property 'battler' of undefined
at Sprite_Animation.updateDragonBonesPosition
(KELYEP_DragonBones.js:1094:47)
...​
I poked around the plugin code and narrowed it down to this line:

var heightRate = this.battler.battler().getFloatHeight() + this.battler.battler().getJumpHeight();
Removing "this" and accessing the local "battler" variable seems to fix this issue:

var heightRate = battler.battler().getFloatHeight() + battler.battler().getJumpHeight();
Let me know if this is an actual bug or this was intended. I spent 3 days tracking this down, and even taking the default Dragonbones starter project and replacing its 1.00 version plugin with the 1.06 version to reproduce problem.
 
Joined
Jul 2, 2019
Messages
2
Reaction score
0
First Language
English
Primarily Uses
RMMV
@Waterguy I see. Thank you, I downloaded the one from Yanfly's website, which I guess hasn't been updated yet (The sample project is 1.00 as well).
 

TonytheHylian

Villager
Member
Joined
Apr 29, 2015
Messages
11
Reaction score
0
First Language
English
Primarily Uses
RMMV
Hey this is a really cool plugin so thanks for it!

I'm making an SRPG using Gakuto Mikagami's SRPG Engine MV translated by RyanBram and this plugin almost works with it. The problem seems to be that loads the same DragonBones assets for all party members when in battle but only animates the first party member. I have Actor1 set for the swordsman asset using the example note found in the help file and Actor2 set for the demon asset also using the example note.
So when Actor1 attacks an enemy both of their DragonBones animations work as intended. However when Actor2 attacks an enemy it uses Actor1's DragonBones assets but doenst animate them while the enemy's work fine.
I went through the SRPG plugins and as far as I can see they dont draw the battlers for the battle scenes so I'm not sure whats causing this issue. So if anyone could help me out in figuring out if there is a way to fix it or if I'm just out of luck it would be greatly appreciated.
 

AfroditeOhki

Villager
Member
Joined
Oct 3, 2019
Messages
28
Reaction score
9
First Language
Portuguese
Primarily Uses
RMMV
When using the Demo's script codes to draw the animations directly on screen (during a cutscene/conversation), is it possible to do those things?

1- draw two different Dragonbones characters on screen at once
2- have them drawn UNDER the text/talk window?

If so, how?
 

AfroditeOhki

Villager
Member
Joined
Oct 3, 2019
Messages
28
Reaction score
9
First Language
Portuguese
Primarily Uses
RMMV
I'll look into it, thanks! Though I'm not a programmer so this is puzzling me a lot xD

Edit: I managed to place a second character on screen by just changing the assigned window name for the second character in the code in the demo of this plugin. Still trying to figure out how to draw them behind the message text box though.

Edit2: I asked my friend who works with Javascript and he got the under-message-box solved for me. Where in the demo the draw on screen part reads:

SceneManager._scene.addChild(window.tempDragonBones);

I replaced it for

SceneManager._scene.addChildAt(window.tempDragonBones, 1);




Edit3: in case someone runs into the same problem I did with an error that doesn't let the game even reach the load screen, after a lot of trial and error and testing I discovered that it doesn't support two parts with mesh in the same bone (or in the same object?)... In my case I had my character change clothes so I used the thingy where you put the images into one object so you can pick which one is showing (used for eye blinking in the Ubbie-Mesh that comes with DB ) and it wasn't working. My solution was to keep working as usual, and when it's time to export I delete the parts until there's only one and export that, then return to the saved file and delete the other parts and save with another armature name.
 
Last edited:

xjurr

Villager
Member
Joined
Dec 25, 2015
Messages
7
Reaction score
3
First Language
English
Primarily Uses
I searched for a while for an answer to this but couldn't find anything:
Is it possible to use Dragonbones animations for different skills in the same enemy WITHOUT the action sequence packs or is that the only way to do it? The enemy will play dragonbones basic attack animation just fine but when I try to use a newly made skill with it, no matter what motion I change in the enemy notetags dragonbone settings it just plays the default walk forward animation instead of one of the alternate dragonbones attack animations that are available to it.

I put the motion notetags in the skill notebox too but it didn't do anything, though I may be setting it up incorrectly.
 

Black Mamba

Veteran
Veteran
Joined
Mar 6, 2014
Messages
262
Reaction score
79
First Language
pt-br
Primarily Uses
someone plan to make a addon to use it in-map, not in battle?
 

glaphen

Veteran
Veteran
Joined
Jan 13, 2019
Messages
326
Reaction score
120
First Language
English
Primarily Uses
RMMV
So after seeing this reddit thread yesterday I decided to try this since it seems easy enough to make it out of SV battlers that are already in parts and making 54 copies of the same outfit per outfit per character sounds like torture so I decided this looked easier, but I saw no way to change parts besides increased lag potential and even more state spam from Waterguys plugin and require a ton of copies of the same thing, not to mention I want different weapons multiplying everything. I already fear for my FPS as it is from state spam so I searched all day with my near 0 scripting knowledge and finally after tinkering with different word combos for hours I managed to get it to swap on the fly.

dragonBonesIntegration.ArmatureDatabaseActor[0].armature.getSlot("eye").displayController = "none";
dragonBonesIntegration.ArmatureDatabaseActor[0].armature.getSlot("eye").displayIndex = 1;

Running that in a common/troop event as a script call in the demo will change Ubbie to its other eye set for the whole battle. To use it just change ArmatureDatabaseActor[0] to the correct actor id and getSlot("eye") as this slot thing circled in red which holds the images used.
UbbieEye.png
Change the displayIndex = 1; the correct number, 0 would be eye, 1 would be eye2, 2 would be whatever eye3 if it existed and -1 would make it blank.

I haven't really tested much as I haven't even made anything out of it but it works in the demo. Don't ask me for help because I don't know how to script at all. I found most of this in google mainly these 2 links. https://github.com/DragonBones/DragonBonesCSharp/issues/31
The first half of code was hours of trying combinations to get the actors armature.
Also it works for the map picture with window.tempDragonBone.armature.getSlot("eye").displayIndex = 1;
 

glaphen

Veteran
Veteran
Joined
Jan 13, 2019
Messages
326
Reaction score
120
First Language
English
Primarily Uses
RMMV
Posting again because I found how to change the notetags before combat.
Code:
$dataActors[1].meta.dragonbone_ani_walk = "walkforward";
If you use this in a script call before you enter battle Ubbie's idle will become walkforward animation name, if you enter this
Code:
$dataActors[1].meta.dragonbone_ani_walk = "attack";
Ubbie's idle will become spamming attack over and over
Code:
$dataActors[1].meta.dragonbone_ani_swing = "walk";
now his swings become walk. You can also change scale with
Code:
$dataActors[1].meta.dragonbone_scaley = "x";
, replace scaley with scalex, height, width. You can change whole armature with
Code:
$dataActors[1].meta.dragonbone = "Demon";
but you need to give it a negative x or it will be mirrored.

EDIT: Just figured out how to change animation notetags mid battle.
Code:
$gameActors.actor(1).dragonboneAnimation.walk = "walkforward";
.walk change it into the motion name and "walkforward" into the animation name.

Can also change scale with
Code:
dragonBonesIntegration.ArmatureDatabaseActor[0].scale.x = "x";
Don't really think I can figure out how to change armature itself without a plugin. But that already exists if you really need that kind of transformation. https://forums.rpgmakerweb.com/index.php?threads/yr-plugins.69148/

Oh and I forgot to post this yesterday but if you change idle mid battle it doesn't update instantly, You can get around that by using.
Code:
dragonBonesIntegration.ArmatureDatabaseActor[0].armature.animation.play('walkforward');
so you can use
Code:
$gameActors.actor(1).dragonboneAnimation.walk = "walkforward";
dragonBonesIntegration.ArmatureDatabaseActor[0].armature.animation.play('walkforward');
to instantly change it and next update it would go back to itself.
 
Last edited:

glaphen

Veteran
Veteran
Joined
Jan 13, 2019
Messages
326
Reaction score
120
First Language
English
Primarily Uses
RMMV
I think I managed to fix the animated SV battlers not playing damage animation, it only took like a minute, I just copied the code from yanfly animated SV into the bottom of the dragonbones code

Code:
Game_Enemy.prototype.performDamage = function() {
  Game_Battler.prototype.performDamage.call(this);
  SoundManager.playEnemyDamage();

  var result = false;
  if (this.hasDragonBone === true) {
    result = dragonBonesIntegration.PlayAnimationOnBattler(this, "damage");
  }

  //if dragonbones animation fail to play then run default
  if (result === false) {
     if (!this.hasSVBattler()) {
      return Yanfly.SVE.Game_Enemy_performDamage.call(this);
    }
    Game_Battler.prototype.performDamage.call(this);
    if (this.isSpriteVisible()) {
      this.requestMotion(this.damageMotion());
    } else {
      $gameScreen.startShake(5, 5, 10);
    }
    SoundManager.playEnemyDamage();
    this.requestEffect('blink');
  }
};
Just Ctrl+F the top line and copy and paste over it all to the bottom };

You can erase the this.requestEffect('blink'); if you don't want them to blink.

As for evade motion or others I'm not even sure if there are problems with as I haven't tested any of them, mine don't seem to play evade animation even with dragonbones off.

Turned off my plugins in batches, seems to be Yanfly HitAccuracy causing evasion not to play.

Ok figured out and solved reason why it never plays evade with Yanfly HitAccuracy plugin, by default the formula turns everything into hits and misses and 0 chance to evade.
I edited the formula to be
Code:
skillHitRate * userHitRate
for accuracy, so it multiplies the skill itselfs chance by user hit rate from actor traits ect.
Code:
targetEvadeRate - skillHitRate * userHitRate
then I made it so it does that again but minus the targets evasion. Now this still doesn't solve the fact that on misses against it doesn't evade motion so I did the opposite and made it so the actors also not evade during misses.
Code:
Game_Actor.prototype.performEvasion = function() {
    Game_Battler.prototype.performEvasion.call(this);
    var result = this.result();
    if (!result.missed) this.requestMotion('evade');
};

Game_Actor.prototype.performMagicEvasion = function() {
    Game_Battler.prototype.performMagicEvasion.call(this);
    var result = this.result();
    if (!result.missed) this.requestMotion('evade');
};
I changed that in the base scripts but you can probably put it in there as a script high up the list.
Or you can leave the default hit formula in the plugin and just use this which erases misses turning it into only evades.
Code:
Game_Action.prototype.apply = function(target) {
    var result = target.result();
    this.subject().clearResult();
    result.clear();
    result.used = this.testApply(target);
    result.evaded = (result.used && Math.random() >= this.itemHit(target));
    result.physical = this.isPhysical();
    result.drain = this.isDrain();
    if (result.isHit()) {
        if (this.item().damage.type > 0) {
            result.critical = (Math.random() < this.itemCri(target));
            var value = this.makeDamageValue(target, result.critical);
            this.executeDamage(target, value);
        }
        this.item().effects.forEach(function(effect) {
            this.applyItemEffect(target, effect);
        }, this);
        this.applyItemUserEffect(target);
    }
};
Probably affects dragonbones as well, doubt they evade with that plugin used.
 
Last edited:

Users Who Are Viewing This Thread (Users: 0, Guests: 2)

Latest Threads

Latest Profile Posts

So in my stream for the No Travel Game Jam, I mentioned we were going to do a teaching make a game from beginning to end series of streams, but it had to wait on an announcement I couldn't make yet before I could start... Keep your eyes on our twitter tonight.
Surprise extra Text Adventure session! Feel free to drop by!
I just started parallax mapping. Better results for sure, but a lot more time consuming. It's more fun than I thought though.
After a bit of away time due to virus and friends in crisis (friends get priority!) I think things have calmed enough for me to try to resume my activity everywhere. :kaoluv:(I still been working on projects though!)
After watching 'Whisper Of The Heart' I've got the song 'Country roads' stuck in my head.
Don't mind it so much as that I was singing today at my Church. :kaoswt:

Forum statistics

Threads
98,114
Messages
949,382
Members
129,392
Latest member
starshot90
Top