Trick Anywhere Anytime [Vega]
#1
Trick Anywhere Anytime [Vega]

Video~



You can *almost* trick anywhere at anytime. There are still a few instances where you can't (such as after already being mid air by Halfpipe Ramps on DKS).

Here's a list of some of the new scenarios where you can now trick

- Can trick in cannons (trick sparkles and sound will work, but can't change cannon tradjectory)
- Can trick multiple times in the air during one jump
- Can trick w/o hopping
- Can trick w/o any speed or in reverse
- Can trick on any surface
- Can trick during the countdown (only sparkles and sound work)

Yes you 'trick' while in a Bullet Bill, but once you do that, your Bill will have a mind of its own and will travel to god knows where, lol.

You also have the ability to use something other than the trick button for tricks, so that way you can do both normal tricks and 'hacked' tricks.

Not only that, this also serves as a proxy 'Rapid Trick' code. Simple hold down your ZZZZ button and you will be tricking every frame.

NTSC-U
0456F538 80850004
0456F330 80A4001C
2834XXXX YYYYZZZZ
C256F538 00000007
80850004 817C0000
816B0000 896B0010
3D80809C 818C8F68
898C0B84 7C0B6000
40A20014 3D608056
616BF610 7D6803A6
4E800020 00000000
C256F330 00000007
80A4001C 817C0000
816B0000 896B0010
3D80809C 818C8F68
898C0B84 7C0B6000
40A20014 3D608056
616BF37C 7D6803A6
4E800020 00000000
E0000000 80008000

PAL
04575D9C 80850004
04575B94 80A4001C
2834XXXX YYYYZZZZ
C2575D9C 00000007
80850004 817C0000
816B0000 896B0010
3D80809C 818CD728
898C0B84 7C0B6000
40A20014 3D608057
616B5E74 7D6803A6
4E800020 00000000
C2575B94 00000007
80A4001C 817C0000
816B0000 896B0010
3D80809C 818CD728
898C0B84 7C0B6000
40A20014 3D608057
616B5BE0 7D6803A6
4E800020 00000000
E0000000 80008000

NTSC-J
0457571C 80850004
04575514 80A4001C
2834XXXX YYYYZZZZ
C257571C 00000007
80850004 817C0000
816B0000 896B0010
3D80809C 818CC788
898C0B84 7C0B6000
40A20014 3D608057
616B57F4 7D6803A6
4E800020 00000000
C2575514 00000007
80A4001C 817C0000
816B0000 896B0010
3D80809C 818CC788
898C0B84 7C0B6000
40A20014 3D608057
616B5560 7D6803A6
4E800020 00000000
E0000000 80008000

NTSC-K
04563DF4 80850004
04563BEC 80A4001C
2833XXXX YYYYZZZZ
C2563DF4 00000007
80850004 817C0000
816B0000 896B0010
3D80809B 818CBD68
898C0B84 7C0B6000
40A20014 3D608056
616B3ECC 7D6803A6
4E800020 00000000
C2563BEC 00000007
80A4001C 817C0000
816B0000 896B0010
3D80809B 818CBD68
898C0B84 7C0B6000
40A20014 3D608056
616B3C38 7D6803A6
4E800020 00000000
E0000000 80008000

Code creator: Vega
Code credits: Stebler (player.h and slot checking mechanism), Seeky (player.h, mkw_structures github repo)



#NOTE FOR BOTH ASM's
#1st ASM skips over the check for the game seeign if you are already in a trick (PAL 80575e5c, gets executed every frame) and skips over the speed check (PAL 80575e70)
#2nd ASM skips over..
#Airtime = 0 frames
#Airtime > 10 frames
#Airtime < 3 frames
#Trick Button hit within 14-frame window of when youre already on surface to when you're in air at 10 frames or less
#Trickable Surface
#Already in Trick (this check is also present in what's skipped in first ASM; keep in my mind not the same exact instruction at same address)
#First frame of Trick
#Over a Zipper

#START ASSEMBLY

#Address Ports
#PAL = 80575D9C
#NTSC-U = 8056F538
#NTSC-J = 8057571C
#NTSC-K = 80563DF4

#Region Compilation Setting

.set region, '' #Fill in P, E, J, or K (case sensitive)

.if (region == 'P')
        .set ptr_raceData, 0x809bd728
        .set landing_spot, 0x80575E74
.elseif (region == 'E')
        .set ptr_raceData, 0x809b8f68
        .set landing_spot, 0x8056F610
.elseif (region == 'J')
        .set ptr_raceData, 0x809bc788
        .set landing_spot, 0x805757F4
.elseif (region == 'K')
        .set ptr_raceData, 0x809abd68
        .set landing_spot, 0x80563ECC
.else
        .err
.endif

#Register Notes
#LR = safe
#r28 is w/e pointer that can be used for slot checking (idk the name, lol)

#Original Instruction
lwz r4, 0x0004 (r5)

#Get Slot function is hooked on
lwz r11, 0 (r28)
lwz r11, 0 (r11)
lbz r11, 0x10 (r11)

#Get Your Slot (added this so code works on both offline and online)
lis r12, ptr_raceData@ha
lwz r12, ptr_raceData@l (r12)
lbz r12, 0xb84 (r12)

#Check em'
cmpw r11, r12
bne+ end_code

#Jump 0xD4 ahead
lis r11, landing_spot@h
ori r11, r11, landing_spot@l
mtlr r11
blr

#End code
end_code:

#END ASSEMBLY

=====

#START ASSEMBLY

#Address Ports
#PAL = 80575B94
#NTSC-U = 8056F330
#NTSC-J = 80575514
#NTSC-K = 80563BEC

#Region Compilation Setting

.set region, '' #Fill in P, E, J, or K (case sensitive)

.if (region == 'P')
        .set ptr_raceData, 0x809bd728
        .set landing_spot, 0x80575BE0
.elseif (region == 'E')
        .set ptr_raceData, 0x809b8f68
        .set landing_spot, 0x8056F37C
.elseif (region == 'J')
        .set ptr_raceData, 0x809bc788
        .set landing_spot, 0x80575560
.elseif (region == 'K')
        .set ptr_raceData, 0x809abd68
        .set landing_spot, 0x80563C38
.else
        .err
.endif

#Register Notes
#LR = safe
#r28 & r29 is w/e pointer that can be used for slot checking (idk the name, lol)

#Original Instruction; load bitfield1 (line 431 of player.h)
lwz r5, 0x001C (r4)

#Get Slot function is hooked on
lwz r11, 0 (r28)
lwz r11, 0 (r11)
lbz r11, 0x10 (r11)

#Get Your Slot (added this so code works on both offline and online)
lis r12, ptr_raceData@ha
lwz r12, ptr_raceData@l (r12)
lbz r12, 0xb84 (r12)

#Check em'
cmpw r11, r12
bne+ end_code

#Jump 0x4C ahead
lis r11, landing_spot@h
ori r11, r11, landing_spot@l
mtlr r11
blr

#End code
end_code:

#END ASSEMBLY
Reply


Messages In This Thread
Trick Anywhere Anytime [Vega] - by Vega - 06-05-2022, 02:44 AM
RE: Trick Anywhere Anytime [Vega] - by Ryuk - 06-06-2022, 06:54 AM
RE: Trick Anywhere Anytime [Vega] - by Vega - 06-06-2022, 02:43 PM

Forum Jump:


Users browsing this thread: 1 Guest(s)