CPU bot[Dea]
#1
CPU bot[Dea]

Works every game mode but offline only.

NTSC-J
C252EEB8 00000003
801E0018 2C000000
40820008 38000001
60000000 00000000
C27258DC 00000003
80630038 2C030000
40820008 38600001
60000000 00000000

NTSC-U
C252A9F0 00000003
801E0018 2C000000
40820008 38000001
60000000 00000000
C2721E40 00000003
80630038 2C030000
40820008 38600001
60000000 00000000

PAL(untested)
C252F538 00000003
801E0018 2C000000
40820008 38000001
60000000 00000000
C2726270 00000003
80630038 2C030000
40820008 38600001
60000000 00000000

NTSC-K(untested)
C251D590 00000003
801E0018 2C000000
40820008 38000001
60000000 00000000
C2714618 00000003
80630038 2C030000
40820008 38600001
60000000 00000000

Reference https://youtu.be/PuNHqc29_u4
Reply
#2
Loaded up wstrt and threw in the addresses and quickly tested NTSC-U, and it worked. wstrt port is awesome (and I'm a noob lol)

Code:
#───────────────────────────────────────────────────────────────────────────────
#    PAL        USA        JAP        KOR     where  status
#───────────────────────────────────────────────────────────────────────────────
0x8052f538 0x8052a9f0 0x8052eeb8 0x8051d590  REL1   0: verified
0x80726270 0x80721e40 0x807258dc 0x80714618  REL1   0: verified
#───────────────────────────────────────────────────────────────────────────────

NTSC-U
C252A9F0 00000003
801E0018 2C000000
40820008 38000001
60000000 00000000
C2721E40 00000003
80630038 2C030000
40820008 38600001
60000000 00000000

PAL
C252F538 00000003
801E0018 2C000000
40820008 38000001
60000000 00000000
C2726270 00000003
80630038 2C030000
40820008 38600001
60000000 00000000

KOR
C251D590 00000003
801E0018 2C000000
40820008 38000001
60000000 00000000
C2714618 00000003
80630038 2C030000
40820008 38600001
60000000 00000000

I confirmed NTSC-U working, but not PAL or KOR. Awesome code by the way, better than MarioBOT, it acts just like the CPUs (mostly, my test run it got stuck on the water at the very end of Koopa Cape >.>), including drifts and item usage.
Reply
#3
Considering this code only requires a hook address port, and it's now ported, I went ahead and moved the thread out of incomplete/outdated to Offline: Non Item.
Reply
#4
Could it be possible to make variants of this code to affect just a certain player? As if you'd be playing in splitscreen mode but you're just 1 and still want to see a 2-4 player perspective
Reply
#5
(07-09-2022, 10:56 PM)AGES Wrote: Could it be possible to make variants of this code to affect just a certain player? As if you'd be playing in splitscreen mode but you're just 1 and still want to see a 2-4 player perspective

Bumping this. I'd love to race against my Miis in 4 player mode.
Reply
#6
Frankenstein'd this up really quick, try this out. untested. In PAL, too lazy to port.

X = slot that code effects, make sure both X values match

PAL
C252F538 00000004
2C1A000X 801E0018
40A20010 2C000000
40820008 38000001
60000000 00000000
C272625C 00000002
5460063E 5464063E
60000000 00000000
C272627C 00000003
2C04000X 5403D97E
40A20008 38600001
60000000 00000000


Code:
#PAL

#8052F538
#r26 always = slot
cmpwi r26, 0
lwz r0, 0x0018 (r30) #OG instruction, 0 = Human? 1 = CPU? 3 = idk?
bne+ end
cmpwi r0, 0 #Just incase r0 is 3, we don't wanna change 3 to 1 for w/e reason???
bne- end
li r0, 1 #Force to CPU?
end:

=============

#8072625C
#Original Instruction
#Slot in r3, extract byte and place in r0
rlwinm r0, r3, 0, 24, 31

#Also Save Slot in r4 (safe, preserved til next ASM code)
rlwinm r4, r3, 0, 24, 31

=============

#8072627C
#Appears that r3 is suppose to return some sort of bool? Idk
#Check slot (r4)
cmpwi r4, 0
rlwinm r3, r0, 27, 5, 31
bne+ 0x8
li r3, 1 #When slot is met, force return of True
Reply
#7
(06-03-2024, 02:28 AM)Vega Wrote: Frankenstein'd this up really quick, try this out. untested. In PAL, too lazy to port.

X = slot that code effects, make sure both X values match

PAL
C252F538 00000004
2C1A000X 801E0018
40A20010 2C000000
40820008 38000001
60000000 00000000
C272625C 00000002
5460063E 5464063E
60000000 00000000
C272625C 00000002
2C04000X 41820008
5403D97E 00000000

Code:
#PAL

#8052F538
#r26 always = slot
cmpwi r26, 0
lwz r0, 0x0018 (r30) #OG instruction, 0 = Human? 1 = CPU? 3 = idk?
bne+ end
cmpwi r0, 0 #Just incase r0 is 3, we don't wanna change 3 to 1 for w/e reason???
bne- end
li r0, 1 #Force to CPU?
end:

=============

#8072625C
#Original Instruction
#Slot in r3, extract byte and place in r0
rlwinm r0, r3, 0, 24, 31

#Also Save Slot in r4 (safe, preserved til next ASM code)
rlwinm r4, r3, 0, 24, 31

=============

#8072627C
#Appears that r3 is suppose to return some sort of bool? Idk
#Check slot (r4)
cmpwi r4, 0
beq- 0x8 #if eq, go to end

#Original instruction, why mask bits 5 thru 31?
rlwinm r3, r0, 27, 5, 31

I don't have the PAL version of the game, how would I go about getting it / porting this code to NTSC-U? Sorry for the inconvenience.
Reply
#8
(06-03-2024, 02:55 AM)emeraldvixen Wrote:
(06-03-2024, 02:28 AM)Vega Wrote: Frankenstein'd this up really quick, try this out. untested. In PAL, too lazy to port.

X = slot that code effects, make sure both X values match

PAL
C252F538 00000004
2C1A000X 801E0018
40A20010 2C000000
40820008 38000001
60000000 00000000
C272625C 00000002
5460063E 5464063E
60000000 00000000
C272625C 00000002
2C04000X 41820008
5403D97E 00000000

Code:
#PAL

#8052F538
#r26 always = slot
cmpwi r26, 0
lwz r0, 0x0018 (r30) #OG instruction, 0 = Human? 1 = CPU? 3 = idk?
bne+ end
cmpwi r0, 0 #Just incase r0 is 3, we don't wanna change 3 to 1 for w/e reason???
bne- end
li r0, 1 #Force to CPU?
end:

=============

#8072625C
#Original Instruction
#Slot in r3, extract byte and place in r0
rlwinm r0, r3, 0, 24, 31

#Also Save Slot in r4 (safe, preserved til next ASM code)
rlwinm r4, r3, 0, 24, 31

=============

#8072627C
#Appears that r3 is suppose to return some sort of bool? Idk
#Check slot (r4)
cmpwi r4, 0
beq- 0x8 #if eq, go to end

#Original instruction, why mask bits 5 thru 31?
rlwinm r3, r0, 27, 5, 31

I don't have the PAL version of the game, how would I go about getting it / porting this code to NTSC-U? Sorry for the inconvenience.

Nevermind. I was able to get the PAL version. I tried the code and got some errors, I took a screenshot of the first one.    

After a few, I hit "ignore" and when the race started it didn't work (I set both X values to 2, so that should mean Player 2 gets set to a CPU, right?)

For further information I tested with CPUs off in a 2 player VS match. Don't know if that effects anything.

Thanks for your help so far, it's greatly appreciated
Reply
#9
(06-03-2024, 02:55 AM)emeraldvixen Wrote:
(06-03-2024, 02:28 AM)Vega Wrote: Frankenstein'd this up really quick, try this out. untested. In PAL, too lazy to port.

X = slot that code effects, make sure both X values match

PAL
C252F538 00000004
2C1A000X 801E0018
40A20010 2C000000
40820008 38000001
60000000 00000000
C272625C 00000002
5460063E 5464063E
60000000 00000000
C272625C 00000002
2C04000X 41820008
5403D97E 00000000

Code:
#PAL

#8052F538
#r26 always = slot
cmpwi r26, 0
lwz r0, 0x0018 (r30) #OG instruction, 0 = Human? 1 = CPU? 3 = idk?
bne+ end
cmpwi r0, 0 #Just incase r0 is 3, we don't wanna change 3 to 1 for w/e reason???
bne- end
li r0, 1 #Force to CPU?
end:

=============

#8072625C
#Original Instruction
#Slot in r3, extract byte and place in r0
rlwinm r0, r3, 0, 24, 31

#Also Save Slot in r4 (safe, preserved til next ASM code)
rlwinm r4, r3, 0, 24, 31

=============

#8072627C
#Appears that r3 is suppose to return some sort of bool? Idk
#Check slot (r4)
cmpwi r4, 0
beq- 0x8 #if eq, go to end

#Original instruction, why mask bits 5 thru 31?
rlwinm r3, r0, 27, 5, 31

I don't have the PAL version of the game, how would I go about getting it / porting this code to NTSC-U? Sorry for the inconvenience.

I was also wondering for an NTSC version
Reply
#10
Apologies. I've made two silly mistakes with the code. Regarding slots....

Slot 0 = P1
Slot 1 = P2/CPU1
Slot 2 = P3/CPU2
.. ..
Slot B = Final CPU

X = slot that code effects, make sure both X values match

PAL
C252F538 00000004
2C1A000X 801E0018
40A20010 2C000000
40820008 38000001
60000000 00000000
C272625C 00000002
5460063E 5464063E
60000000 00000000
C272627C 00000003
2C04000X 5403D97E
40A20008 38600001
60000000 00000000

Here's NTSC-U
C252A9F0 00000004
2C1A000X 801E0018
40A20010 2C000000
40820008 38000001
60000000 00000000
C2721E2C 00000002
5460063E 5464063E
60000000 00000000
C2721E4C 00000003
2C04000X 5403D97E
40A20008 38600001
60000000 00000000
Reply


Forum Jump:


Users browsing this thread: 6 Guest(s)