Skip to content

Commit 502b38e

Browse files
committed
Fix divine beast (and more) cutscenes
1 parent 871d422 commit 502b38e

File tree

3 files changed

+27
-61
lines changed

3 files changed

+27
-61
lines changed

resources/BreathOfTheWild_BetterVR/patch_FirstPersonMode_Events.asm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ moduleMatches = 0x6267BFD0
33

44
.origin = codecave
55

6-
0x031CA268 = ba import.coreinit.hook_GetEventName
7-
0x031CA288 = ba import.coreinit.hook_GetEventName
6+
;0x031CA268 = ba import.coreinit.hook_GetEventName
7+
;0x031CA288 = ba import.coreinit.hook_GetEventName

resources/BreathOfTheWild_BetterVR/patch_Settings.asm

Lines changed: 21 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,6 @@ stw r3, 0x1C(r1)
6161
stw r4, 0x18(r1)
6262
stw r5, 0x14(r1)
6363
stw r6, 0x10(r1)
64-
stw r7, 0x0C(r1)
65-
stw r8, 0x08(r1)
6664

6765
lis r5, data_settingsOffset@ha
6866
addi r5, r5, data_settingsOffset@l
@@ -79,68 +77,33 @@ cmpwi r3, 0
7977
beq skipGetEventName
8078

8179
; get active event name
80+
lis r3, EventMgr__getActiveEventName@ha
81+
addi r3, r3, EventMgr__getActiveEventName@l
82+
mtctr r3
83+
li r3, 0
84+
addi r5, r1, 0x0C ; ptr to store entrypoint name
85+
stw r3, 0x0C(r1)
86+
addi r4, r1, 0x08 ; ptr to store event name
87+
stw r3, 0x08(r1)
8288
lis r3, EventMgr__sInstance@ha
8389
lwz r3, EventMgr__sInstance@l(r3)
84-
addis r3, r3, 1
85-
lwz r3, 0x75B0(r3)
86-
; EventMgr::sInstance->activeEventContext
87-
cmpwi r3, 0
88-
beq noActiveEvent
89-
90-
; r3 = EventMgr::sInstance->activeEventContext
91-
92-
; load active event name
93-
lwz r4, 0x18C(r3) ; load index to event indices
94-
addi r8, r3, 0x184 ; load array start
95-
cmplwi r4, 8 ;.int 0x28040008 ;cmplwi r4, 8 ; .long 0x28040008
96-
lwz r6, 4(r3)
97-
bge loc_31D8C8C
98-
add r8, r8, r4
99-
100-
loc_31D8C8C:
101-
; r4 is unused from here
102-
li r4, 0
103-
li r7, 0
104-
; -------------------------
105-
106-
lbz r5, 0(r8)
107-
extsb r5, r5 ; .int 0x7CA50774 ; extsb r5, r5
108-
cmplw r5, r6
109-
li r4, 0
110-
bge loc_31D8CAC
111-
lwz r7, 0x0C(r3)
112-
slwi r8, r5, 2
113-
lwzx r4, r8, r7
114-
115-
loc_31D8CAC:
116-
cmpwi r4, 0
117-
beq noActiveEvent ; skip if no valid event pointer
118-
lwz r4, 8(r4)
119-
li r3, 1
120-
bla import.coreinit.hook_GetEventName
121-
b skipGetEventName
122-
;lis r3, EventMgr__sInstance@ha
123-
;lwz r3, EventMgr__sInstance@l(r3)
124-
;bctrl
90+
bctrl ; bl EventMgr::getActiveEventName
12591

126-
noActiveEvent:
127-
li r3, 0
92+
; call C++ hook to handle the results
93+
lwz r4, 0x08(r1) ; event name
94+
lwz r5, 0x0C(r1) ; entrypoint name
12895
bla import.coreinit.hook_GetEventName
12996

13097
skipGetEventName:
131-
132-
; spawn check
133-
li r3, 0
134-
bl import.coreinit.hook_CreateNewActor
135-
cmpwi r3, 1
136-
bne notSpawnActor
137-
;bl vr_spawnEquipment
138-
notSpawnActor:
139-
140-
;bl checkIfDropWeapon
141-
142-
lwz r8, 0x08(r1)
143-
lwz r7, 0x0C(r1)
98+
; ; spawn check
99+
; li r3, 0
100+
; bl import.coreinit.hook_CreateNewActor
101+
; cmpwi r3, 1
102+
; bne notSpawnActor
103+
; ;bl vr_spawnEquipment
104+
; notSpawnActor:
105+
;
106+
; ;bl checkIfDropWeapon
144107
lwz r6, 0x10(r1)
145108
lwz r5, 0x14(r1)
146109
lwz r4, 0x18(r1)

src/hooking/camera.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -569,13 +569,16 @@ void CemuHooks::hook_GetEventName(PPCInterpreter_t* hCPU) {
569569

570570
uint32_t isEventActive = hCPU->gpr[3];
571571
uint32_t eventNamePtr = hCPU->gpr[4];
572+
uint32_t entryPointNamePtr = hCPU->gpr[5];
572573

573574
if (isEventActive) {
574575
std::string eventName = std::string((char*)s_memoryBaseAddress + eventNamePtr);
576+
std::string entryPointName = std::string((char*)s_memoryBaseAddress + entryPointNamePtr);
577+
575578
if (s_currentEvent == eventName) {
576579
return;
577580
}
578-
Log::print<INFO>("Event '{}' is now active.", eventName);
581+
Log::print<INFO>("Event '{}' is now active (using entry point '{}').", eventName, entryPointName);
579582
s_currentEvent = eventName;
580583

581584
auto it = s_eventSettings.find(eventName);

0 commit comments

Comments
 (0)