Oir

Veteran
Veteran
Joined
Dec 19, 2020
Messages
104
Reaction score
45
First Language
English
Primarily Uses
RMMV
How does one normally go about animating user poses during skills? For example, let's say I want my character to throw a punch.

Using the "user pose" abssequence, I can have my sprite play a punching sprite pose but there doesn't seem to be any framework to change the direction of the punch depending on which way my sprite is currently facing?

Should we be using the "picture" abssequence instead? That certaintly allows for the graphic to change directions based on the user's direction. But should we be using that even for sprite poses? (once again, using the example of the user throwing a punch).

Appreciate the help!
 

aniaaous

lazy potato
Veteran
Joined
Jul 14, 2018
Messages
99
Reaction score
43
First Language
french
Primarily Uses
RMMV
How does one normally go about animating user poses during skills? For example, let's say I want my character to throw a punch.

Using the "user pose" abssequence, I can have my sprite play a punching sprite pose but there doesn't seem to be any framework to change the direction of the punch depending on which way my sprite is currently facing?

Should we be using the "picture" abssequence instead? That certaintly allows for the graphic to change directions based on the user's direction. But should we be using that even for sprite poses? (once again, using the example of the user throwing a punch).

Appreciate the help!
I think you need to name the skill like this punch2 punch8 punch4 punch6 on Qsprite editor
 

Oir

Veteran
Veteran
Joined
Dec 19, 2020
Messages
104
Reaction score
45
First Language
English
Primarily Uses
RMMV
I think you need to name the skill like this punch2 punch8 punch4 punch6 on Qsprite editor

EDIT: You're completely right!

I hadn't thought that you could just add 2,4,6,8 as directional naming conventions to the end of any pose. I thought that only applied to default poses which was wrong. Thank you!
 
Last edited:

id0

Villager
Member
Joined
May 28, 2013
Messages
27
Reaction score
4
First Language
Russian
Primarily Uses
N/A
I want to make combo in qabs. Is it possible somehow?
 

Oir

Veteran
Veteran
Joined
Dec 19, 2020
Messages
104
Reaction score
45
First Language
English
Primarily Uses
RMMV
To change the player's actor, I'd normally just get funky with the Change Party Members event command. But QABS breaks that.

Is there a way to change the player's actor without relying on the follower/party members system?
 

id0

Villager
Member
Joined
May 28, 2013
Messages
27
Reaction score
4
First Language
Russian
Primarily Uses
N/A
Change Party Members works perfectly fine for me.

But you can just hide followers, add whole party, and just swap them on script call:

$gameParty.swapOrder(0,1);
,
$gameParty.swapOrder(0,2);
,
etc...

P.S. So did anyone manage to make a combo in qabs? I'm stll trough it.
 

Attachments

  • sdgagd.jpg
    sdgagd.jpg
    96 KB · Views: 5
Last edited:
  • Like
Reactions: Oir

Oir

Veteran
Veteran
Joined
Dec 19, 2020
Messages
104
Reaction score
45
First Language
English
Primarily Uses
RMMV
I want to make combo in qabs. Is it possible somehow?

I received help on this exact topic in this thread here.
I was able to event a very simple combo system using the advice I got there.


So consider the combo "Slash 1" into "Slash 2" into "Slash 3"

Essentially, I created an event which detects when I click my mouse (which is how my character uses Slash 1, 2, and 3). When I click my mouse (causing Slash 1 to go off) I execute a change skill event command which makes my character forget slash 1 and learn slash 2. Then once I execute Slash 2, I issue an event command to forget Slash 2 and learn Slash 3 and so on.

To get the timing implemented (in my video, I have to attack within 1 second of the last attack or else the combo "ends" and I go back to attack 1) you need to make each part of the combo its own event page. Have each event page triggered by a switch. Each event page should activate a switch that leads to the next event page which causes you to learn the next skill and forget the previous skill as discussed earlier.

Check out the discussion I linked for more details.
 
Last edited:
  • Like
Reactions: id0

id0

Villager
Member
Joined
May 28, 2013
Messages
27
Reaction score
4
First Language
Russian
Primarily Uses
N/A
I received help on this exact topic in this thread here.
I was able to event a very simple combo system using the advice I got there.


Check out the discussion I linked for more details.

I tried your solution and it is glitchy. It is very tied to the frame rate in the game and reacts differently with low and high. This is why I decided to write this script. This is not a brilliant script, and I'm a bad programmer and I hate coding. But time after time I have to do this. Sometimes the state just doesn't reset to 0 and I don't understand why. So I will be grateful to anyone who improves it.

Just save as plugin (Combo.js or something), add it like any others, and make script call from anywhere:

ComboAttack();

skillId - id of the skill, can be change in the code, like the timing too (comboTimer , combowait).

Script itself:

Code:
    var combo = 0;

    var comboId = 0;
    var c_skillId = 0;
    var comboTimer = 0;
    var combowait = 0;

function ComboAttack() {

    switch (combo) {


      case 0: {
        Combo1();
        break;
      }
      case 1: {
        Combo2();
        break;
      }
      case 2: {
        Combo3();
        break;
      }
      case 3: {
        ComboDeal();
        break;
      }
      case 4: {
        ComboEnd();
        break;
      }
    }
}

Combo1 = function() {

    if(combo === 0){
        comboTimer = 30;
        combo = 1;
    }
}

Combo2 = function() {


    comboTimer -= 1;
    if(comboTimer > 0){

            comboTimer = 30;
            combowait = 15;
            comboId = 2;
            c_skillId = 27;
            combo = 3;
    }

    else{
        combowait = 300;
        combo = 4;
    }
}


Combo3 = function() {


    comboTimer -= 1;
    if(comboTimer > 0) {

        comboTimer = 30;
        combowait = 16;
        comboId = 4;
        c_skillId = 28;
        combo = 3;
    }
    else{
        combowait = 300;
        combo = 4;
    }
}

ComboDeal = function() {

    combowait = -1;

    if(combowait <= 0){
        $gamePlayer.forceSkill(c_skillId);
        combo = comboId;
        combowait = 40;
    }
}

ComboEnd = function() {

    combowait = -1;

    if(combowait <= 0){
        comboId = 0;
        combowait = 0;
        combo = 0;
    }
}

You can add more combo, or make different, if you understand something in this mess.
 
Last edited:

Oir

Veteran
Veteran
Joined
Dec 19, 2020
Messages
104
Reaction score
45
First Language
English
Primarily Uses
RMMV
I tried your solution and it is glitchy. It is very tied to the frame rate in the game and reacts differently with low and high. This is why I decided to write this script. This is not a brilliant script, and I'm a bad programmer and I hate coding. But time after time I have to do this. Sometimes the state just doesn't reset to 0 and I don't understand why. So I will be grateful to anyone who improves it.

Just save as plugin (Combo.js or something), add it like any others, and make script call from anywhere:

ComboAttack();

skillId - id of the skill, can be change in the code, like the timing too (comboTimer , combowait).

Script itself:

Code:
    var combo = 0;

    var comboId = 0;
    var c_skillId = 0;
    var comboTimer = 0;
    var combowait = 0;

function ComboAttack() {

    switch (combo) {


      case 0: {
        Combo1();
        break;
      }
      case 1: {
        Combo2();
        break;
      }
      case 2: {
        Combo3();
        break;
      }
      case 3: {
        ComboDeal();
        break;
      }
      case 4: {
        ComboEnd();
        break;
      }
    }
}

Combo1 = function() {

    if(combo === 0){
        comboTimer = 30;
        combo = 1;
    }
}

Combo2 = function() {


    comboTimer -= 1;
    if(comboTimer > 0){

            comboTimer = 30;
            combowait = 15;
            comboId = 2;
            c_skillId = 27;
            combo = 3;
    }

    else{
        combowait = 300;
        combo = 4;
    }
}


Combo3 = function() {


    comboTimer -= 1;
    if(comboTimer > 0) {

        comboTimer = 30;
        combowait = 16;
        comboId = 4;
        c_skillId = 28;
        combo = 3;
    }
    else{
        combowait = 300;
        combo = 4;
    }
}

ComboDeal = function() {

    combowait = -1;

    if(combowait <= 0){
        $gamePlayer.forceSkill(c_skillId);
        combo = comboId;
        combowait = 40;
    }
}

ComboEnd = function() {

    combowait = -1;

    if(combowait <= 0){
        comboId = 0;
        combowait = 0;
        combo = 0;
    }
}

You can add more combo, or make different, if you understand something in this mess.

Dang that's so neat that you just up and wrote a script like that. Thank you for sharing it!
I don't really understand the script that well but it looks like you're still using frames to time the combos so wouldn't it still be tied to the framerate?

Would changing to a time-based system (i.e. milliseconds) instead of frames make it more consistent? The timer Event Command in RPGMaker can only do seconds but maybe milliseconds is possible with scripting?

I know nothing about Javascript but could I ask how the ComboEnd function is activated?
 

id0

Villager
Member
Joined
May 28, 2013
Messages
27
Reaction score
4
First Language
Russian
Primarily Uses
N/A
Dang that's so neat that you just up and wrote a script like that. Thank you for sharing it!
I don't really understand the script that well but it looks like you're still using frames to time the combos so wouldn't it still be tied to the framerate?

Maybe that's why states not read properly somtimes. But now at least it's not link to any variables, and It's more stable for my tests.

I know nothing about Javascript but could I ask how the ComboEnd function is activated?

It's calling when last combo end, or if combo is reset. At least it should be. ComboEnd function call when
ComboAttack() switch to 4 state.
ComboDeal function make skill, then check what state (combo) is next and switch to this state. States added in Combo1, Combo2 function.

I already told I'm not good coder, and can make some mistakes.
 

Oir

Veteran
Veteran
Joined
Dec 19, 2020
Messages
104
Reaction score
45
First Language
English
Primarily Uses
RMMV
How do y'all keep your spritesheets at a manageable size? The main way that animations are played while using abilities is with the user pose abssequence. But the downside of that is that all the attack animations that your character can do must all be on the same spritesheet?

There's a huge downside to this if true. Different attacks take a different amount of space. For example, let's say that my character normally is 200x200 pixels. And let's say I wanted to double my character's size for one specific attack (400x400 pixels). Well since that "doubling size" attack has to be on the same spritesheet as everything else, now even my 200x200 pixel sprites need to be spaced out by 400x400 so that QSprite can properly read it.

And that seems like a fringe example but it's super common. Like a big sword sweep or a jump attack or some sort of stab or hell, even a running animation compared to a walking animation all take up more horizontal or vertical space than other things.

Just seems really limiting and I can see this problem doubling or tripling the size of my spritesheet alone. If anybody is porting this over to MZ, the ability for "user pose" to access any spritesheet to play any pose as opposed to just that character's spritesheet would be super awesome for optimization.

In the meantime, has anybody else dealt with this problem in some other way? Could you swap out actor images on certain skills which would essentially swap out the spritesheet? Not sure how you'd force the actor image to swap before the skill goes off though if they're both triggered by, say, the attack button.
 

Jragyn

JABS codemonkey
Veteran
Joined
Aug 14, 2012
Messages
50
Reaction score
36
First Language
English
Primarily Uses
RMMZ
...

In the meantime, has anybody else dealt with this problem in some other way? Could you swap out actor images on certain skills which would essentially swap out the spritesheet? Not sure how you'd force the actor image to swap before the skill goes off though if they're both triggered by, say, the attack button.

-This is exactly what I did in JABS' "animation" support. Granted, I am not a pixel artist, and am very bad at spriting, but I just swapped out the actor's spritesheet for a different one to execute "animations" of sorts. Of course, this has room for improvement, and is limited to 3 frames per action basically, but it works for the more basic kinds of stuff.

This is also what I believe moghunter does for his action animations for XAS/chrono-engine (in a more complicatedly).
 
  • Like
Reactions: Oir

Oir

Veteran
Veteran
Joined
Dec 19, 2020
Messages
104
Reaction score
45
First Language
English
Primarily Uses
RMMV
I gotta be missing something super obvious.

Is there a way to control where the colliders of your skills are? (i.e. offset them similarly to how you offset the colliders on actors in Qmovement).

The only option I see in QABS is to set the size of the collider, whether or not its centered or in front of your character, and you can move it forward and backwards.
 

KotoYama

Veteran
Veteran
Joined
Apr 20, 2019
Messages
232
Reaction score
20
First Language
Spanish
Primarily Uses
RMMV
So, apparently plugin command for changing the player's collider still doesn't work?
I have tried this, and some other variations, but nothing :(
(plugin command)
qMovement changeCollider player, default, box 48, 48, 0, 0
 

Oir

Veteran
Veteran
Joined
Dec 19, 2020
Messages
104
Reaction score
45
First Language
English
Primarily Uses
RMMV
So, apparently plugin command for changing the player's collider still doesn't work?
I have tried this, and some other variations, but nothing :(
(plugin command)
qMovement changeCollider player, default, box 48, 48, 0, 0

I swapped out player for "0" and it worked for me
 

id0

Villager
Member
Joined
May 28, 2013
Messages
27
Reaction score
4
First Language
Russian
Primarily Uses
N/A
Tell me, please, how to make player walk through events, bun NOT through other colliders?
 

Oir

Veteran
Veteran
Joined
Dec 19, 2020
Messages
104
Reaction score
45
First Language
English
Primarily Uses
RMMV
Tell me, please, how to make player walk through events, bun NOT through other colliders?

Not really sure what you mean. You want your player to be able to walk through an event without triggering it? Or you want your player to walk through an event and interact with it but not physically collide with it?
 

id0

Villager
Member
Joined
May 28, 2013
Messages
27
Reaction score
4
First Language
Russian
Primarily Uses
N/A
I have the skill - somersaults dash, I even added the command "through" to the code, but all I can do is get the player through everything, which is not what I want. I want the player to avoid attacks if he is in the corner.
 

Oir

Veteran
Veteran
Joined
Dec 19, 2020
Messages
104
Reaction score
45
First Language
English
Primarily Uses
RMMV
I have the skill - somersaults dash, I even added the command "through" to the code, but all I can do is get the player through everything, which is not what I want. I want the player to avoid attacks if he is in the corner.
You could do that in QMovement? Simply shrink the players hitbox to 0 with a plug-in command, triggered by whatever key uses summersault (probably have to script call it)
 

id0

Villager
Member
Joined
May 28, 2013
Messages
27
Reaction score
4
First Language
Russian
Primarily Uses
N/A
You could do that in QMovement? Simply shrink the players hitbox to 0 with a plug-in command, triggered by whatever key uses summersault (probably have to script call it)
What's the point? He's also go though everything: walls, rocks etc. and then stuck to it when change back.
 

Latest Threads

Latest Posts

Latest Profile Posts

I just watched a trailer for the upcoming 2021 JRPG Fantasian. They demonstrated an interesting mechanic where random encounters can be sent to a stockpile instead of fighting them right away, which can be emptied in a single battle string at the player's choice of timing.
"The pleasure from the senses seems like nectar at first, but it is sour as the toxin in the end." -Kirshna
Just finished my first ever game - Aeon's Destiny! This was a lifelong dream and after hundreds of hours, I've made something I'm very proud of. Please check it out!

Demo project with NPC Scheduler and other OcRam -plugins is now available!

Forum statistics

Threads
109,151
Messages
1,042,566
Members
141,654
Latest member
SDesires
Top