Users browsing this thread: 1 Guest(s)
Request: Faster Quadra Slam/Quadra Slice

#1
Posts: 6
Threads: 2
Thanks Received: 0
Thanks Given: 7
Joined: Aug 2018
Reputation: 0
Status
None
Hi everyone. In my quest to turn Cyan into a character I would actually enjoy having in my party, I'm looking for a way to speed up Quadra Slam/Slice's animation. I've managed to cut the animation down to approximately 5.6ish seconds, but I'd like to get it in the 3 second range if possible. The original code for the animation is posted below, with another code block below it that show the changes I've made so far:

Original code:
Code:
; [ Animation Script $01D3: Quadra Slam, Quadra Slice (sprite) ]

D0/73A2: 00 80                    speed 1, initial position $80
D0/73A4: C5                       jump based on swdtech hit ($73AD, $73FB, $7431, $747A)
D0/73AD: 80 02                    command $80/$02
D0/73AF: 85                       move to attacker position
D0/73B0: 95                       calculate vector from attacker to target
D0/73B1: CA 01                    double character action speed
D0/73B3: 93 00                    move to vector position 0
D0/73B5: 8E 01                    show animation on weapon-hand side of character/monster sprites
D0/73B7: 81 12 13                 change attacker graphic to 18 (walking forward, frame 2) if facing left or 19 (walking forward, hands up) if facing right
D0/73BA: 83 C7                    move up 8
D0/73BC: C9 5B                    play sound effect $5B
D0/73BE: 1F                       [---]
D0/73BF: A0 06 03                 jump forward along vector at speed 6, branch to $73BE
D0/73C2: C2 80                    unpause bg1 thread
D0/73C4: C9 00                    play default sound effect
D0/73C6: 8E 01                    show animation on weapon-hand side of character/monster sprites
D0/73C8: 81 12 13                 change attacker graphic to 18 (walking forward, frame 2) if facing left or 19 (walking forward, hands up) if facing right
D0/73CB: C8 00                    change attacker action to 0 (no action)
D0/73CD: 8F 61                    move forward 2 if mirrored
D0/73CF: 83 F6                    move up/back 23
D0/73D1: 04                       [$04]
D0/73D2: 04                       [$04]
D0/73D3: 04                       [$04]
D0/73D4: 04                       [$04]
D0/73D5: 81 04 06                 change attacker graphic to 4 (walking forward, frame 1) if facing left or 6 (walking forward, frame 3) if facing right
D0/73D8: 83 CA                    move up 11
D0/73DA: 83 74                    move forward 21
D0/73DC: B0 FF                    set background color addition to 31 (white)
D0/73DE: 05                       [$05]
D0/73DF: 05                       [$05]
D0/73E0: 05                       [$05]
D0/73E1: 05                       [$05]
D0/73E2: 06                       [$06]
D0/73E3: 06                       [$06]
D0/73E4: 06                       [$06]
D0/73E5: 06                       [$06]
D0/73E6: 83 36                    move down 23
D0/73E8: 83 7A                    move forward 27
D0/73EA: 89 08                    loop start (8 times)
D0/73EC: 87 23                    move target down 4
D0/73EE: B5 F2                    decrease background color addition by 2 (white)
D0/73F0: 07                       [$07]
D0/73F1: 87 C3                    move target up 4
D0/73F3: B5 F2                    decrease background color addition by 2 (white)
D0/73F5: 07                       [$07]
D0/73F6: 8A                       loop end
D0/73F7: 81 00 00                 change attacker graphic to 0 (no action)
D0/73FA: FF                       end of script

D0/73FB: CB 81                    enable echo sprites (1 frame delay)
D0/73FD: 83 C7                    move up 8
D0/73FF: BF 65 74                 jump to subroutine $7465
D0/7402: B0 5F                    set background color addition to 31 (green)
D0/7404: C8 00                    change attacker action to 0 (no action)
D0/7406: 80 4F                    move to attacking character position
D0/7408: 81 12 13                 change attacker graphic to 18 (walking forward, frame 2) if facing left or 19 (walking forward, hands up) if facing right
D0/740B: 83 99                    move back 26
D0/740D: 83 3B                    move down 28
D0/740F: 00                       [$00]
D0/7410: 00                       [$00]
D0/7411: 83 71                    move forward 18
D0/7413: 81 04 06                 change attacker graphic to 4 (walking forward, frame 1) if facing left or 6 (walking forward, frame 3) if facing right
D0/7416: 01                       [$01]
D0/7417: 01                       [$01]
D0/7418: 8E 00                    show animation on off-hand side of character/monster sprites
D0/741A: 83 C5                    move up 6
D0/741C: 02                       [$02]
D0/741D: 02                       [$02]
D0/741E: 8F 61                    move forward 2 if mirrored
D0/7420: 89 04                    loop start (4 times)
D0/7422: 87 62                    move target forward 3
D0/7424: B5 54                    decrease background color addition by 4 (green)
D0/7426: 03                       [$03]
D0/7427: 87 82                    move target back 3
D0/7429: B5 54                    decrease background color addition by 4 (green)
D0/742B: 03                       [$03]
D0/742C: 8A                       loop end
D0/742D: 81 00 00                 change attacker graphic to 0 (no action)
D0/7430: FF                       end of script

D0/7431: 83 C7                    move up 8
D0/7433: BF 65 74                 jump to subroutine $7465
D0/7436: B0 3F                    set background color addition to 31 (blue)
D0/7438: C8 00                    change attacker action to 0 (no action)
D0/743A: 80 4F                    move to attacking character position
D0/743C: 81 12 13                 change attacker graphic to 18 (walking forward, frame 2) if facing left or 19 (walking forward, hands up) if facing right
D0/743F: 83 99                    move back 26
D0/7441: 83 3B                    move down 28
D0/7443: 00                       [$00]
D0/7444: 00                       [$00]
D0/7445: 83 71                    move forward 18
D0/7447: 81 04 06                 change attacker graphic to 4 (walking forward, frame 1) if facing left or 6 (walking forward, frame 3) if facing right
D0/744A: 01                       [$01]
D0/744B: 01                       [$01]
D0/744C: 8E 00                    show animation on off-hand side of character/monster sprites
D0/744E: 83 C5                    move up 6
D0/7450: 02                       [$02]
D0/7451: 02                       [$02]
D0/7452: 8F 61                    move forward 2 if mirrored
D0/7454: 89 04                    loop start (4 times)
D0/7456: 87 62                    move target forward 3
D0/7458: B5 34                    decrease background color addition by 4 (blue)
D0/745A: 03                       [$03]
D0/745B: 87 82                    move target back 3
D0/745D: B5 34                    decrease background color addition by 4 (blue)
D0/745F: 03                       [$03]
D0/7460: 8A                       loop end
D0/7461: 81 00 00                 change attacker graphic to 0 (no action)
D0/7464: FF                       end of script

D0/7465: 8E 01                    show animation on weapon-hand side of character/monster sprites
D0/7467: 80 3D                    command $80/$3D
D0/7469: C8 26                    change attacker action to 38 (jumping/laughing)
D0/746B: C9 5B                    play sound effect $5B
D0/746D: 1F                       [---]
D0/746E: C6                       command $C6
D0/746F: 06                       [$06]
D0/7470: 03                       [$03]
D0/7471: C2 80                    unpause bg1 thread
D0/7473: 89 10                    loop start (16 times)
D0/7475: 1F                       [---]
D0/7476: 8A                       loop end
D0/7477: C9 00                    play default sound effect
D0/7479: C0                       return from subroutine

D0/747A: 8E 01                    show animation on weapon-hand side of character/monster sprites
D0/747C: 80 3D                    command $80/$3D
D0/747E: 83 C7                    move up 8
D0/7480: C8 26                    change attacker action to 38 (jumping/laughing)
D0/7482: 1F                       [---]
D0/7483: C6                       command $C6
D0/7484: 06                       [$06]
D0/7485: 03                       [$03]
D0/7486: C2 80                    unpause bg1 thread
D0/7488: 89 10                    loop start (16 times)
D0/748A: 1F                       [---]
D0/748B: 8A                       loop end
D0/748C: C9 00                    play default sound effect
D0/748E: CB 01                    disable echo sprites
D0/7490: B0 9F                    set background color addition to 31 (red)
D0/7492: C8 00                    change attacker action to 0 (no action)
D0/7494: 80 4F                    move to attacking character position
D0/7496: 81 12 13                 change attacker graphic to 18 (walking forward, frame 2) if facing left or 19 (walking forward, hands up) if facing right
D0/7499: 83 99                    move back 26
D0/749B: 83 3B                    move down 28
D0/749D: 00                       [$00]
D0/749E: 00                       [$00]
D0/749F: 83 71                    move forward 18
D0/74A1: 81 04 06                 change attacker graphic to 4 (walking forward, frame 1) if facing left or 6 (walking forward, frame 3) if facing right
D0/74A4: 01                       [$01]
D0/74A5: 01                       [$01]
D0/74A6: 8E 00                    show animation on off-hand side of character/monster sprites
D0/74A8: 83 C5                    move up 6
D0/74AA: 02                       [$02]
D0/74AB: 02                       [$02]
D0/74AC: 8F 61                    move forward 2 if mirrored
D0/74AE: 89 04                    loop start (4 times)
D0/74B0: 87 62                    move target forward 3
D0/74B2: B5 94                    decrease background color addition by 4 (red)
D0/74B4: 03                       [$03]
D0/74B5: 87 82                    move target back 3
D0/74B7: B5 94                    decrease background color addition by 4 (red)
D0/74B9: 03                       [$03]
D0/74BA: 8A                       loop end
D0/74BB: 81 00 00                 change attacker graphic to 0 (no action)
D0/74BE: 80 03                    command $80/$03
D0/74C0: 80 00                    command $80/$00
D0/74C2: C8 03                    change attacker action to 3 (walking back)
D0/74C4: 1F                       [---]
D0/74C5: C6                       command $C6
D0/74C6: 06                       [$06]
D0/74C7: 03                       [$03]
D0/74C8: 80 01                    command $80/$01
D0/74CA: C8 26                    change attacker action to 38 (jumping/laughing)
D0/74CC: 89 08                    loop start (8 times)
D0/74CE: 1F                       [---]
D0/74CF: 8A                       loop end
D0/74D0: C8 00                    change attacker action to 0 (no action)
D0/74D2: CA 00                    normal character action speed
D0/74D4: FF                       end of script

Changes I've made so far that have helped:
Code:
D0/73B1: CA 0F                    changed 01 to 0F to make Cyan leap to his first attack almost instantly
D0/7473: 89 10                    changed 10 to 01 which seems to speed up the time between one of the animations
D0/7488: 89 10                    same as above
D0/74CC: 89 08                    changed 08 to 01 which seems to speed up the time between one of the animations

I'm going to continue to experiment and try things to cut down the animation time, however if anyone understands the script better than me and spots where I can make changes to speed things up, I'd appreciate the help. There's another code block where I can edit the number of attacks in Quadra Slam/Slice, so the nuclear option would be to move the number of attacks down from 4 to 3 and then edit the animation script accordingly. I'd like to avoid doing that if possible, since one of the main strengths of Cyan in my hack was going to be the ability to get out four max damage hits in the end game.
  Find
Quote  

#2
Posts: 3,575
Threads: 261
Thanks Received: 644
Thanks Given: 258
Joined: Oct 2011
Reputation: 60
Status
Faith
Have you tried 01 80 or 02 80 here?

Code:
D0/73A2: 00 80                    speed 1, initial position $80

Edit: There's also another speed value here (6).

Code:
D0/73BF: A0 06 03                 jump forward along vector at speed 6, branch to $73BE

This is all about experimentation since not a lot of people have modified those scripts!
  Find
Quote  
[-] The following 1 user says Thank You to madsiur for this post:
  • dtgenji (09-28-2018)

#3
Posts: 100
Threads: 2
Thanks Received: 96
Thanks Given: 6
Joined: Apr 2015
Reputation: 16
Status
None
At D0/73A2, the animation speed is actually stored in the high nibble of the first byte. So you would want to change it to $10 or $20 to change the animation speed. That sets the framerate for the entire animation. However, I think this value actually determines the number of screen frames (at 60Hz) per animation frame, so $00 would be the fastest animation speed - increasing it would actually make the animation run slower. Test it out though. I could be wrong.

Whenever you see [$05] or any other number in brackets in the script, that's when the animation actually stops to show a frame. You'll notice that many of the frames are duplicated a bunch of times in a row (D0/73DE through D0/73E1 for example, which shows animation frame 5 for four frames in a row). You could speed up the animation by deleting a couple of those values. But be careful because the pointers in the command at D0/73A4 are absolute pointers, so you would need to update them as well, and add some padding to the end of the script to keep the total length the same. Alternatively, you could try to replace a few of the [$05] commands with something equivalent to a NOP instruction in asm code. There aren't any animation commands designed for this, but you could try C3, DC, or maybe something like C4 00. The full list of commands is available on the wiki.
  Find
Quote  
[-] The following 2 users say Thank You to Everything for this post:
  • dtgenji (09-28-2018), madsiur (09-28-2018)

#4
Posts: 259
Threads: 3
Thanks Received: 18
Thanks Given: 9
Joined: Jun 2013
Reputation: 6
Status
None
I asked awhile back if the Aero animation could be sped up... could a similar methodology apply there?


"You don't have to be a vampire to die like one... b*t*h." -Simon Belmont
Quote  

#5
Posts: 122
Threads: 1
Thanks Received: 41
Thanks Given: 3
Joined: Oct 2015
Reputation: 14
Status
None
just be sure to not slow down Aero too much, because the Kansan 7-year-old still learning to ride their 2-wheeler in the tornado's center will promptly fall over due to lack of centrifugal force, and skin a knee.  the flying monkeys tasked with cleaning the wound are wholly unqualified and unversed in hygiene, though they mean well, so even a scrape risks getting infected.
Quote  
[-] The following 1 user says Thank You to assassin for this post:
  • madsiur (09-29-2018)

#6
Posts: 3,575
Threads: 261
Thanks Received: 644
Thanks Given: 258
Joined: Oct 2011
Reputation: 60
Status
Faith
Is this shorter enough?

.zip  aero.zip (140 bytes, 3 downloads)



  Find
Quote  
[-] The following 1 user says Thank You to madsiur for this post:
  • BTB (09-29-2018)

#7
Posts: 6
Threads: 2
Thanks Received: 0
Thanks Given: 7
Joined: Aug 2018
Reputation: 0
Status
None
Okay, finally had time to try out the suggestions here. I changed every animation frame to C3 instead of whatever frame number it was before, and the speedup is great. Unfortunately, Cyan no longer moves between enemies and the sword blade sprite doesn't appear, but that's completely fine with me. My headcanon is just that he's striking too quickly for even the game to show it. Thank you all for the help, maybe now I won't find Cyan as annoying to have in my party!
  Find
Quote  

#8
Posts: 3,575
Threads: 261
Thanks Received: 644
Thanks Given: 258
Joined: Oct 2011
Reputation: 60
Status
Faith
(10-21-2018, 08:31 PM)dtgenji Wrote: Thank you all for the help, maybe now I won't find Cyan as annoying to have in my party!

I'm glad we could help! The thing I did with the above Aero animation is cutting in half the repetition loops, it's another way to make things shorter. It can cut in half animation or parts of it depending what kind of loop it is. As and an example, if the animation had a loop of 30 iterations, I set it to 15. This can ruin some animations if you touch an intro or outro loop though you gotta be careful but it work in some cases.
  Find
Quote  
[-] The following 1 user says Thank You to madsiur for this post:
  • dtgenji (10-22-2018)

#9
Posts: 26
Threads: 4
Thanks Received: 0
Thanks Given: 11
Joined: Nov 2018
Reputation: 0
Status
None
Silly question here can't you just change the speed in ff3usme? in the animation it has a speed thing and you can pick his sword abilities since they are like spells i guess
  Find
Quote  

#10
Posts: 3,575
Threads: 261
Thanks Received: 644
Thanks Given: 258
Joined: Oct 2011
Reputation: 60
Status
Faith
(11-17-2018, 12:23 AM)Hashimo Wrote: Silly question here can't you just change the speed in ff3usme? in the animation it has a speed thing and you can pick his sword abilities since they are like spells i guess

Often that speed byte in the spell data editable in FF3usME is already maxed out, changing it does nothing or is already at the fastest.
  Find
Quote  



Forum Jump:

Users browsing this thread: 1 Guest(s)


Theme by Madsiur2017Custom Graphics by JamesWhite