port AllCards to all Ep3 versions
This commit is contained in:
@@ -10,59 +10,8 @@ reloc0:
|
||||
.offsetof start
|
||||
|
||||
start:
|
||||
stwu [r1 - 0x20], r1
|
||||
mflr r0
|
||||
stw [r1 + 0x24], r0
|
||||
stw [r1 + 0x10], r31
|
||||
stw [r1 + 0x14], r30
|
||||
stw [r1 + 0x18], r29
|
||||
stw [r1 + 0x1C], r28
|
||||
|
||||
# Ep3PlayerDataSegment* seg = get_player_data_segment(0)
|
||||
lis r3, 0x802A
|
||||
ori r3, r3, 0x1BAC
|
||||
mtctr r3
|
||||
li r3, 0
|
||||
bctrl
|
||||
mr r31, r3
|
||||
|
||||
# decrypt_ep3_player_data_segment(seg)
|
||||
lis r3, 0x802A
|
||||
ori r3, r3, 0x15BC
|
||||
mtctr r3
|
||||
mr r3, r31
|
||||
bctrl
|
||||
|
||||
# Ep3PlayerDataSegment_on_card_obtained(seg, card_id) for each card, 99 times
|
||||
lis r28, 0x802A
|
||||
ori r28, r28, 0x17AC
|
||||
li r30, 1 # r30 = card_id
|
||||
obtain_card_99times:
|
||||
li r29, 99 # r29 = obtain count
|
||||
obtain_card_again:
|
||||
mr r3, r31
|
||||
mr r4, r30
|
||||
mtctr r28
|
||||
bctrl
|
||||
subi r29, r29, 1
|
||||
cmplwi r29, 0
|
||||
bne obtain_card_again
|
||||
addi r30, r30, 1
|
||||
cmplwi r30, 0x2F0
|
||||
ble obtain_card_99times
|
||||
|
||||
# encrypt_ep3_player_data_segment(seg)
|
||||
lis r3, 0x802A
|
||||
ori r3, r3, 0x160C
|
||||
mtctr r3
|
||||
mr r3, r31
|
||||
bctrl
|
||||
|
||||
lwz r31, [r1 + 0x10]
|
||||
lwz r30, [r1 + 0x14]
|
||||
lwz r29, [r1 + 0x18]
|
||||
lwz r28, [r1 + 0x1C]
|
||||
lwz r0, [r1 + 0x24]
|
||||
addi r1, r1, 0x20
|
||||
mtlr r0
|
||||
blr
|
||||
.include AllCards
|
||||
.data 0x802A1BAC # get_player_data_segment
|
||||
.data 0x802A15BC # decrypt_ep3_player_data_segment
|
||||
.data 0x802A17AC # Ep3PlayerDataSegment_on_card_obtained
|
||||
.data 0x802A160C # encrypt_ep3_player_data_segment
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
# This patch gives you the maximum number of each card. It only works if used
|
||||
# in-game, which means it must be used by running `$patch AllCards`.
|
||||
|
||||
.meta hide_from_patches_menu
|
||||
.meta name="Get all cards"
|
||||
.meta description="This patch gives you\nthe maximum number\nof each card."
|
||||
|
||||
entry_ptr:
|
||||
reloc0:
|
||||
.offsetof start
|
||||
|
||||
start:
|
||||
.include AllCards
|
||||
.data 0x802A1154 # get_player_data_segment
|
||||
.data 0x802A0B64 # decrypt_ep3_player_data_segment
|
||||
.data 0x802A0D54 # Ep3PlayerDataSegment_on_card_obtained
|
||||
.data 0x802A0BB4 # encrypt_ep3_player_data_segment
|
||||
@@ -10,59 +10,8 @@ reloc0:
|
||||
.offsetof start
|
||||
|
||||
start:
|
||||
stwu [r1 - 0x20], r1
|
||||
mflr r0
|
||||
stw [r1 + 0x24], r0
|
||||
stw [r1 + 0x10], r31
|
||||
stw [r1 + 0x14], r30
|
||||
stw [r1 + 0x18], r29
|
||||
stw [r1 + 0x1C], r28
|
||||
|
||||
# Ep3PlayerDataSegment* seg = get_player_data_segment(0)
|
||||
lis r3, 0x8029
|
||||
ori r3, r3, 0x987C
|
||||
mtctr r3
|
||||
li r3, 0
|
||||
bctrl
|
||||
mr r31, r3
|
||||
|
||||
# decrypt_ep3_player_data_segment(seg)
|
||||
lis r3, 0x8029
|
||||
ori r3, r3, 0x92A4
|
||||
mtctr r3
|
||||
mr r3, r31
|
||||
bctrl
|
||||
|
||||
# Ep3PlayerDataSegment_on_card_obtained(seg, card_id) for each card, 99 times
|
||||
lis r28, 0x8029
|
||||
ori r28, r28, 0x94C0
|
||||
li r30, 1 # r30 = card_id
|
||||
obtain_card_99times:
|
||||
li r29, 99 # r29 = obtain count
|
||||
obtain_card_again:
|
||||
mr r3, r31
|
||||
mr r4, r30
|
||||
mtctr r28
|
||||
bctrl
|
||||
subi r29, r29, 1
|
||||
cmplwi r29, 0
|
||||
bne obtain_card_again
|
||||
addi r30, r30, 1
|
||||
cmplwi r30, 0x2F0
|
||||
ble obtain_card_99times
|
||||
|
||||
# encrypt_ep3_player_data_segment(seg)
|
||||
lis r3, 0x8029
|
||||
ori r3, r3, 0x92F8
|
||||
mtctr r3
|
||||
mr r3, r31
|
||||
bctrl
|
||||
|
||||
lwz r31, [r1 + 0x10]
|
||||
lwz r30, [r1 + 0x14]
|
||||
lwz r29, [r1 + 0x18]
|
||||
lwz r28, [r1 + 0x1C]
|
||||
lwz r0, [r1 + 0x24]
|
||||
addi r1, r1, 0x20
|
||||
mtlr r0
|
||||
blr
|
||||
.include AllCards
|
||||
.data 0x8029987C # get_player_data_segment
|
||||
.data 0x802992A4 # decrypt_ep3_player_data_segment
|
||||
.data 0x802994C0 # Ep3PlayerDataSegment_on_card_obtained
|
||||
.data 0x802992F8 # encrypt_ep3_player_data_segment
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
# This patch gives you the maximum number of each card. It only works if used
|
||||
# in-game, which means it must be used by running `$patch AllCards`.
|
||||
|
||||
.meta hide_from_patches_menu
|
||||
.meta name="Get all cards"
|
||||
.meta description="This patch gives you\nthe maximum number\nof each card."
|
||||
|
||||
entry_ptr:
|
||||
reloc0:
|
||||
.offsetof start
|
||||
|
||||
start:
|
||||
.include AllCards
|
||||
.data 0x802A25A4 # get_player_data_segment
|
||||
.data 0x802A1FB4 # decrypt_ep3_player_data_segment
|
||||
.data 0x802A21A4 # Ep3PlayerDataSegment_on_card_obtained
|
||||
.data 0x802A2004 # encrypt_ep3_player_data_segment
|
||||
@@ -0,0 +1,54 @@
|
||||
start:
|
||||
stwu [r1 - 0x20], r1
|
||||
mflr r0
|
||||
stw [r1 + 0x24], r0
|
||||
stmw [r1 + 0x0C], r27
|
||||
|
||||
b get_data
|
||||
get_data_ret:
|
||||
mflr r27
|
||||
|
||||
# Ep3PlayerDataSegment* seg = get_player_data_segment(0)
|
||||
lwz r3, [r27]
|
||||
mtctr r3
|
||||
li r3, 0
|
||||
bctrl
|
||||
mr r31, r3
|
||||
|
||||
# decrypt_ep3_player_data_segment(seg)
|
||||
lwz r3, [r27 + 4]
|
||||
mtctr r3
|
||||
mr r3, r31
|
||||
bctrl
|
||||
|
||||
# Ep3PlayerDataSegment_on_card_obtained(seg, card_id) for each card, 99 times
|
||||
lwz r28, [r27 + 8] # Ep3PlayerDataSegment_on_card_obtained
|
||||
li r30, 1 # r30 = card_id
|
||||
obtain_card_99times:
|
||||
li r29, 99 # r29 = obtain count
|
||||
obtain_card_again:
|
||||
mr r3, r31
|
||||
mr r4, r30
|
||||
mtctr r28
|
||||
bctrl
|
||||
subi r29, r29, 1
|
||||
cmplwi r29, 0
|
||||
bne obtain_card_again
|
||||
addi r30, r30, 1
|
||||
cmplwi r30, 0x2F0
|
||||
ble obtain_card_99times
|
||||
|
||||
# encrypt_ep3_player_data_segment(seg)
|
||||
lwz r3, [r27 + 0x0C] # encrypt_ep3_player_data_segment
|
||||
mtctr r3
|
||||
mr r3, r31
|
||||
bctrl
|
||||
|
||||
lmw r27, [r1 + 0x0C]
|
||||
lwz r0, [r1 + 0x24]
|
||||
addi r1, r1, 0x20
|
||||
mtlr r0
|
||||
blr
|
||||
|
||||
get_data:
|
||||
bl get_data_ret
|
||||
@@ -1,7 +1,3 @@
|
||||
# This patch can't be used currently because the EU version of Episode 3 doesn't
|
||||
# natively support B2, and there is no buffer-overflow exploit (yet) to address
|
||||
# this.
|
||||
|
||||
.meta name="Get VIP card"
|
||||
.meta description="Gives you a VIP card"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user