Skip to content

Commit bef0e2d

Browse files
committed
Fix magnesis breaking due to divine beast skybox fix
1 parent 7dc73e9 commit bef0e2d

File tree

1 file changed

+64
-49
lines changed

1 file changed

+64
-49
lines changed

resources/BreathOfTheWild_BetterVR/patch_RND_StereoRendering.asm

Lines changed: 64 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -389,21 +389,6 @@ blr
389389
0x03415584 = requestLODMgrModelsAndUpdateDebugInput:
390390
0x03414D74 = runActorUpdateStuff:
391391

392-
; custom_PostCalc:
393-
; mflr r0
394-
; stw r0, 0x04(r1)
395-
; stwu r1, -0x18(r1)
396-
; lwz r0, 0x00(r4)
397-
; lis r3, GameScene__postCalc@ha
398-
; addi r3, r3, GameScene__postCalc@l
399-
; lwz r3, 0x08(r3)
400-
; addi r4, r1, 0x08
401-
; stw r0, 0x08(r1)
402-
; bl GameScene__postCalc
403-
; lwz r0, 0x1C(r1)
404-
; mtlr r0
405-
; addi r1, r1, 0x18
406-
; blr
407392

408393
0x10463E64 = GameScene_sBinderStatus:
409394
0x02C4FAD4 = StageBinder_getStage:
@@ -417,36 +402,56 @@ stw r3, 0x1C(r1)
417402
stw r4, 0x18(r1)
418403
stw r5, 0x14(r1)
419404
stw r6, 0x10(r1)
405+
stw r7, 0x0C(r1)
420406

421407
lwz r3, 0x1C(r1)
422408
lwz r3, 0x200(r3)
423409
cmpwi r3, 0
424410
beq skip_custom_PostCalc
425411

426-
lis r3, GameScene_sBinderStatus@ha
427-
lwz r3, GameScene_sBinderStatus@l(r3)
428-
cmpwi r3, 2
412+
lis r6, GameScene_sBinderStatus@ha
413+
lwz r6, GameScene_sBinderStatus@l(r6)
414+
cmpwi r6, 2
429415
beq skip_custom_PostCalc
430416

431-
lis r3, StageBinder_getStage@ha
432-
addi r3, r3, StageBinder_getStage@l
433-
mtctr r3
434-
lwz r3, 0x1C(r1)
417+
; get stage
418+
lis r6, StageBinder_getStage@ha
419+
addi r6, r6, StageBinder_getStage@l
420+
mtctr r6
421+
;lwz r3, 0x1C(r1)
435422
bctrl ; bl StageBinder_getStage
436423

424+
; check if stage is valid
437425
cmpwi r3, 0
438426
beq skip_custom_PostCalc
439427

440-
lis r8, stru_101C1474@ha
441-
addi r8, r8, stru_101C1474@l
442-
stw r8, 8(r1)
443-
lwz r9, 0(r3)
444-
lwz r0, 0x4C(r9)
445-
mtctr r0
446-
addi r4, r1, 8
447-
bctrl ; bl Stage__postCalc
428+
lis r5, stru_101C1474@ha
429+
addi r5, r5, stru_101C1474@l
430+
stw r5, 0x08(r1) ; store callback vtable on stack
431+
addi r4, r1, 0x08
432+
433+
0x02C44944 = MainFieldDungeonStage__postCalc:
434+
lwz r6, 0x00(r3) ; stage->vtable
435+
lwz r6, 0x4C(r6) ; get Stage::postCalc function pointer
436+
lis r7, MainFieldDungeonStage__postCalc@ha
437+
addi r7, r7, MainFieldDungeonStage__postCalc@l
438+
cmpw r6, r7
439+
bne skip_custom_PostCalc
440+
441+
; run ONE function of the stage's postCalc
442+
0x02C42FF0 = BackgroundCamera_postCalc:
443+
lis r7, BackgroundCamera_postCalc@ha
444+
addi r7, r7, BackgroundCamera_postCalc@l
445+
mtctr r7
446+
bctrl ; bl BackgroundCamera::postCalc
447+
448+
; lwz r6, 0x00(r3) ; stage->vtable
449+
; lwz r6, 0x4C(r6) ; get Stage::postCalc function pointer
450+
; mtctr r6
451+
; bctrl ; bl Stage::postCalc
448452

449453
skip_custom_PostCalc:
454+
lwz r7, 0x0C(r1)
450455
lwz r6, 0x10(r1)
451456
lwz r5, 0x14(r1)
452457
lwz r4, 0x18(r1)
@@ -459,10 +464,10 @@ blr
459464

460465
custom_GameScene_calcAndRunStateMachine:
461466
mflr r0
462-
stwu r1, -0x10(r1)
463-
stw r0, 0x14(r1)
464-
stw r3, 0x0C(r1)
465-
stw r4, 0x08(r1)
467+
stwu r1, -0x20(r1)
468+
stw r0, 0x24(r1)
469+
stw r3, 0x0C(r1) ; stores System*
470+
stw r4, 0x08(r1) ; stores Framework*
466471
stw r5, 0x04(r1)
467472

468473
lis r3, currentEyeSide@ha
@@ -591,34 +596,44 @@ lbz r3, byte_10463E7C@l(r3)
591596
; run gameScene::calcGraphicsStuff(*a2)
592597
0x03416590 = gameScene__calcGraphicsStuff:
593598

594-
lis r3, gameScene__calcGraphicsStuff@ha
595-
addi r3, r3, gameScene__calcGraphicsStuff@l
596-
mtctr r3
597-
lwz r3, 0x0C(r1)
598-
lwz r4, 0x08(r1)
599-
lwz r5, 0x04(r1)
600-
lwz r3, 0x0(r4)
599+
;lis r3, gameScene__calcGraphicsStuff@ha
600+
;addi r3, r3, gameScene__calcGraphicsStuff@l
601+
;mtctr r3
602+
;lwz r3, 0x0C(r1)
603+
;lwz r4, 0x08(r1)
604+
;lwz r5, 0x04(r1)
605+
;lwz r3, 0x0(r4)
606+
;;bctrl
607+
;
608+
;lis r3, uking__frm__System__postCalc@ha
609+
;addi r3, r3, uking__frm__System__postCalc@l
610+
;mtctr r3
611+
;lwz r3, 0x0C(r1)
612+
;lwz r4, 0x08(r1)
613+
;lwz r5, 0x04(r1)
601614
;bctrl
602615

603-
604-
lis r3, uking__frm__System__postCalc@ha
605-
addi r3, r3, uking__frm__System__postCalc@l
606-
mtctr r3
616+
; load system and framework pointers
607617
lwz r3, 0x0C(r1)
608618
lwz r4, 0x08(r1)
609619
lwz r5, 0x04(r1)
610-
bctrl
620+
; store callback pointer
621+
lwz r5, 0x0(r4)
622+
addi r4, r1, 0x18
623+
stw r5, 0x18(r1)
624+
625+
lwz r3, 0x08(r3) ; uking::frm::Scene->gameScene
611626

612-
;bl custom_PostCalc
627+
bl custom_PostCalc
613628

614629

615630
continuecalcAndRunStateMachine__run:
616-
lwz r0, 0x14(r1)
631+
lwz r0, 0x24(r1)
617632
mtlr r0
618633
lwz r3, 0x0C(r1)
619634
lwz r4, 0x08(r1)
620635
lwz r5, 0x04(r1)
621-
addi r1, r1, 0x10
636+
addi r1, r1, 0x20
622637
blr
623638

624639
; hook the precall to run our custom code which runs the pre, run and post calc

0 commit comments

Comments
 (0)