[XCX] Fix QTE bug for real!

This commit is contained in:
Crementif 2022-07-27 01:08:29 +02:00
parent 55efd442df
commit cd738463d6
5 changed files with 79 additions and 22 deletions

View File

@ -1,5 +1,5 @@
[XCX_FPS++_Cutscene]
moduleMatches = 0x218F6E07, 0xF882D5CF, 0x30B6E091, 0x7672271D ; 1.0.0E, 1.0.1E, 1.0.2U, 1.0.2J
moduleMatches = 0xF882D5CF, 0x30B6E091, 0x7672271D ; 1.0.1E, 1.0.2U, 1.0.2J
.origin = codecave

View File

@ -1,5 +1,5 @@
[XCX_FPS++_GameSpeed]
moduleMatches = 0x218F6E07, 0xF882D5CF, 0x30B6E091, 0x7672271D ; 1.0.0E, 1.0.1E, 1.0.2U, 1.0.2J
moduleMatches = 0xF882D5CF, 0x30B6E091, 0x7672271D ; 1.0.1E, 1.0.2U, 1.0.2J
.origin = codecave
@ -258,8 +258,8 @@ lwz r10, 0x14(r1)
blr
[XCX_FPS++_GameSpeed_V100E_V101E]
moduleMatches = 0x218F6E07, 0xF882D5CF
[XCX_FPS++_GameSpeed_V101E]
moduleMatches = 0xF882D5CF
; Global data patch
0x10171980 = havokHalfSpeed:

View File

@ -1,5 +1,5 @@
[XCX_FPS++_Overdrive_General] ; ########################################################
moduleMatches = 0xF882D5CF, 0x30B6E091, 0xAB97DE6B, 0x7672271D ; 1.0.1E, 1.0.2U, 1.0.1U, 1.0.2J
moduleMatches = 0xF882D5CF, 0x30B6E091, 0x7672271D ; 1.0.1E, 1.0.2U, 1.0.2J
.origin = codecave
@ -11,13 +11,13 @@ _over:
blr
[XCX_FPS++_Overdrive_NonJ] ; ########################################################
moduleMatches = 0xF882D5CF, 0x30B6E091, 0xAB97DE6B ; 1.0.1E, 1.0.2U, 1.0.1U
[XCX_FPS++_Overdrive_V101E_102U] ; ########################################################
moduleMatches = 0xF882D5CF, 0x30B6E091 ; 1.0.1E, 1.0.2U
0x021BC904 = bla _over
0x021E2020 = bla _over ; Skell Overdrive
[XCX_FPS++_Overdrive_2J] ; ########################################################
[XCX_FPS++_Overdrive_V102J] ; ########################################################
moduleMatches = 0x7672271D ; 1.0.2J
0x021BC3D0 = bla _over

View File

@ -1,22 +1,79 @@
[XCX_FPS++_QTE_General] ; ########################################################
moduleMatches = 0x218F6E07, 0xF882D5CF, 0x30B6E091, 0x7672271D ; 1.0.1E, 1.0.2U, 1.0.1U, 1.0.2J
moduleMatches = 0xF882D5CF, 0x30B6E091, 0x7672271D ; 1.0.1E, 1.0.2U, 1.0.2J
.origin = codecave
timingFloatConv:
timingFloatConvHa:
.uint 0
timingFloatConvL:
.uint 0
correctedTimingTemp:
correctedTimingTempHa:
.uint 0
correctedTimingTempL:
.uint 1
_justFrame1:
lwz r12, 0x47C(r29)
lis r10, averageFPS1IntInv@ha
lbz r10, averageFPS1IntInv@l(r10)
mullw r12, r12, r10
; mr r12, r10
; Convert timing to floating point for multiplication
xoris r12, r12, 0x8000
lis r27, timingFloatConv@ha
stw r12, timingFloatConv@l+0x4(r27)
lis r12, 0x4330
stw r12, timingFloatConv@l+0x0(r27)
lfd f13, timingFloatConv@l+0x0(r27)
lis r27, convSub@ha
lfd f0, convSub@l(r27)
fsub f13, f13, f0
frsp f13, f13
; Multiply timing
lis r27, averageFPS1@ha
lfs f0, averageFPS1@l(r27)
fmuls f13, f13, f0
; Convert and load corrected timing back
fctiwz f13, f13
lis r27, correctedTimingTemp@ha
stfd f13, correctedTimingTemp@l(r27)
lis r27, correctedTimingTempL@ha
lwz r12, correctedTimingTempL@l(r27)
blr
_justFrame2:
lwz r0, 0x478(r29)
lis r8, averageFPS1IntInv@ha
lbz r8, averageFPS1IntInv@l(r8)
mullw r0, r0, r8
; mr r0, r8
cmpwi r0, 0
beqlr
; Convert timing to floating point for multiplication
xoris r0, r0, 0x8000
lis r8, timingFloatConv@ha
stw r0, timingFloatConv@l+0x4(r8)
lis r0, 0x4330
stw r0, timingFloatConv@l+0x0(r8)
lfd f13, timingFloatConv@l+0x0(r8)
lis r8, convSub@ha
lfd f0, convSub@l(r8)
fsub f13, f13, f0
frsp f13, f13
; Multiply timing
lis r8, averageFPS1@ha
lfs f0, averageFPS1@l(r8)
fmuls f13, f13, f0
; Convert corrected timing back
fctiwz f13, f13
lis r8, correctedTimingTemp@ha
stfd f13, correctedTimingTemp@l(r8)
lis r8, correctedTimingTempL@ha
lwz r0, correctedTimingTempL@l(r8)
blr
[XCX_FPS++_QTE_1E] ; ########################################################

View File

@ -2,7 +2,7 @@
titleIds = 0005000010116100,00050000101C4C00,00050000101C4D00
name = FPS++ For Xenoblade Chronicles X
path = "Xenoblade Chronicles X/Mods/FPS++ For XCX"
description = Allows you to change the FPS and the speed that most things run at.|Some bugs might still occur if you run games at 60FPS.
description = Allows you to change the FPS and the speed that most things run at.|Some bugs might still occur if you run games at 60FPS.|Only supports the latest update!
version = 6
[Default]