Skip to content

Commit 3b4a952

Browse files
committed
TriggerCDTrack(), TriggerNormalCDTrack() decompiled
1 parent b754652 commit 3b4a952

File tree

3 files changed

+47
-8
lines changed

3 files changed

+47
-8
lines changed

TR2_progress.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -231,8 +231,8 @@ x function is unused / included in another function
231231
0x00416610: * FlipMap
232232
0x004166D0: RemoveRoomFlipItems
233233
0x00416770: AddRoomFlipItems
234-
0x004167D0: TriggerCDTrack
235-
0x00416800: TriggerNormalCDTrack
234+
0x004167D0: + TriggerCDTrack
235+
0x00416800: + TriggerNormalCDTrack
236236

237237
game/demo.cpp
238238
0x004168E0: * DoDemoSequence

game/control.cpp

+41-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017-2020 Michael Chaban. All rights reserved.
2+
* Copyright (c) 2017-2021 Michael Chaban. All rights reserved.
33
* Original game is written by Core Design Ltd. in 1997.
44
* Lara Croft and Tomb Raider are trademarks of Square Enix Ltd.
55
*
@@ -173,6 +173,43 @@ int __cdecl ControlPhase(int nTicks, BOOL demoMode) {
173173
return 0;
174174
}
175175

176+
void __cdecl TriggerCDTrack(__int16 value, UINT16 flags, __int16 type) {
177+
if( value > 1 && value < 64 ) {
178+
TriggerNormalCDTrack(value, flags, type);
179+
}
180+
}
181+
182+
void __cdecl TriggerNormalCDTrack(__int16 value, UINT16 flags, __int16 type) {
183+
if( type != 2 ) {
184+
UINT16 codebits = flags & IFL_CODEBITS;
185+
if( CHK_ANY(codebits, CD_Flags[value]) ){
186+
return;
187+
}
188+
if( CHK_ANY(flags, IFL_INVISIBLE) ) {
189+
CD_Flags[value] |= codebits;
190+
}
191+
}
192+
193+
if( value == CD_TrackID ) {
194+
UINT8 timer = CD_Flags[value] & 0xFF;
195+
if( timer ) {
196+
if( !--timer ) {
197+
CD_TrackID = -1;
198+
S_CDPlay(value, FALSE);
199+
}
200+
CD_Flags[value] = (CD_Flags[value] & ~0xFF) | timer;
201+
}
202+
} else {
203+
UINT8 timer = flags & 0xFF;
204+
if( timer ) {
205+
CD_TrackID = value;
206+
CD_Flags[value] = (CD_Flags[value] & ~0xFF) | ((timer * 30) & 0xFF);
207+
} else {
208+
S_CDPlay(value, FALSE);
209+
}
210+
}
211+
}
212+
176213
/*
177214
* Inject function
178215
*/
@@ -197,6 +234,7 @@ void Inject_Control() {
197234
// INJECT(0x00416610, FlipMap);
198235
// INJECT(0x004166D0, RemoveRoomFlipItems);
199236
// INJECT(0x00416770, AddRoomFlipItems);
200-
// INJECT(0x004167D0, TriggerCDTrack);
201-
// INJECT(0x00416800, TriggerNormalCDTrack);
237+
238+
INJECT(0x004167D0, TriggerCDTrack);
239+
INJECT(0x00416800, TriggerNormalCDTrack);
202240
}

game/control.h

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017-2020 Michael Chaban. All rights reserved.
2+
* Copyright (c) 2017-2021 Michael Chaban. All rights reserved.
33
* Original game is written by Core Design Ltd. in 1997.
44
* Lara Croft and Tomb Raider are trademarks of Square Enix Ltd.
55
*
@@ -57,7 +57,8 @@ int __cdecl ControlPhase(int nTicks, BOOL demoMode);
5757

5858
// 0x004166D0: RemoveRoomFlipItems
5959
// 0x00416770: AddRoomFlipItems
60-
// 0x004167D0: TriggerCDTrack
61-
// 0x00416800: TriggerNormalCDTrack
60+
61+
void __cdecl TriggerCDTrack(__int16 value, UINT16 flags, __int16 type); // 0x004167D0
62+
void __cdecl TriggerNormalCDTrack(__int16 value, UINT16 flags, __int16 type); // 0x00416800;
6263

6364
#endif // CONTROL_H_INCLUDED

0 commit comments

Comments
 (0)