mirror of
https://github.com/LostArtefacts/TRX.git
synced 2025-05-01 06:08:00 +03:00
port TriggerCDTrack and TriggerNormalCDTrack
This commit is contained in:
parent
1a4fdea193
commit
26d103678d
7 changed files with 102 additions and 14 deletions
|
@ -8,6 +8,7 @@
|
|||
#define MAX_ROOMS 1024
|
||||
#define MAX_ROOMS_TO_DRAW 100
|
||||
#define MAX_FRAMES 10
|
||||
#define MAX_CD_TRACKS 64
|
||||
#define MAX_TEXTURES 2048
|
||||
#define NUMBER_ITEMS 256
|
||||
#define MAX_SECRETS 16
|
||||
|
|
|
@ -982,6 +982,88 @@ void AddRoomFlipItems(ROOM_INFO* r)
|
|||
}
|
||||
}
|
||||
|
||||
void TriggerCDTrack(int16_t value, int16_t flags, int16_t type)
|
||||
{
|
||||
if (value <= 1 || value >= MAX_CD_TRACKS) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch (value) {
|
||||
case 28:
|
||||
if ((CDFlags[value] & IF_ONESHOT)
|
||||
&& LaraItem->current_anim_state == AS_UPJUMP) {
|
||||
value = 29;
|
||||
}
|
||||
break;
|
||||
|
||||
case 37:
|
||||
if (LaraItem->current_anim_state != AS_HANG) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
case 41:
|
||||
if (LaraItem->current_anim_state != AS_HANG) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
case 42:
|
||||
if ((CDFlags[value] & IF_ONESHOT)
|
||||
&& LaraItem->current_anim_state == AS_HANG) {
|
||||
value = 43;
|
||||
}
|
||||
break;
|
||||
|
||||
case 49:
|
||||
if (LaraItem->current_anim_state != AS_SURFTREAD) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
case 50:
|
||||
if (CDFlags[value] & IF_ONESHOT) {
|
||||
static int16_t gym_completion_counter = 0;
|
||||
gym_completion_counter++;
|
||||
if (gym_completion_counter == 30 * 4) {
|
||||
LevelComplete = 1;
|
||||
gym_completion_counter = 0;
|
||||
}
|
||||
} else if (LaraItem->current_anim_state != AS_WATEROUT) {
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
TriggerNormalCDTrack(value, flags, type);
|
||||
}
|
||||
|
||||
void TriggerNormalCDTrack(int16_t value, int16_t flags, int16_t type)
|
||||
{
|
||||
if (CDFlags[value] & IF_ONESHOT) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (type == TT_SWITCH) {
|
||||
CDFlags[value] ^= flags & IF_CODE_BITS;
|
||||
} else if (type == TT_ANTIPAD) {
|
||||
CDFlags[value] &= -1 - (flags & IF_CODE_BITS);
|
||||
} else if (flags & IF_CODE_BITS) {
|
||||
CDFlags[value] |= flags & IF_CODE_BITS;
|
||||
}
|
||||
|
||||
if ((CDFlags[value] & IF_CODE_BITS) == IF_CODE_BITS) {
|
||||
if (flags & IF_ONESHOT) {
|
||||
CDFlags[value] |= IF_ONESHOT;
|
||||
}
|
||||
if (value != CDTrack) {
|
||||
S_CDPlay(value);
|
||||
}
|
||||
} else {
|
||||
S_CDStop();
|
||||
}
|
||||
}
|
||||
|
||||
void T1MInjectGameControl()
|
||||
{
|
||||
INJECT(0x004133B0, ControlPhase);
|
||||
|
@ -1000,4 +1082,5 @@ void T1MInjectGameControl()
|
|||
INJECT(0x00414E50, xLOS);
|
||||
INJECT(0x004150C0, ClipTarget);
|
||||
INJECT(0x004151A0, FlipMap);
|
||||
INJECT(0x00415310, TriggerCDTrack);
|
||||
}
|
||||
|
|
|
@ -27,6 +27,8 @@ int32_t ClipTarget(GAME_VECTOR* start, GAME_VECTOR* target, FLOOR_INFO* floor);
|
|||
void FlipMap();
|
||||
void RemoveRoomFlipItems(ROOM_INFO* r);
|
||||
void AddRoomFlipItems(ROOM_INFO* r);
|
||||
void TriggerCDTrack(int16_t value, int16_t flags, int16_t type);
|
||||
void TriggerNormalCDTrack(int16_t value, int16_t flags, int16_t type);
|
||||
|
||||
void T1MInjectGameControl();
|
||||
|
||||
|
|
|
@ -110,6 +110,7 @@
|
|||
#define ControlText ARRAY_(0x0045A2F8, TEXTSTRING*, [2])
|
||||
#define ScanCodeNames ARRAY_(0x00454A40, char*, [])
|
||||
#define OptionMusicVolume VAR_I_(0x00456334, int32_t, 255)
|
||||
#define CDFlags ARRAY_(0x00462C20, int16_t, [MAX_CD_TRACKS])
|
||||
|
||||
// #define LaraControlRoutines ARRAY_(0x00456490, ControlRoutine, [])
|
||||
// #define LaraCollisionRoutines ARRAY_(0x00456570, CollisionRoutine, [])
|
||||
|
|
|
@ -2,11 +2,12 @@
|
|||
#define T1M_SPECIFIC_SNDPC_H
|
||||
|
||||
// clang-format off
|
||||
#define S_CDLoop ((void (*)())0x004380B0)
|
||||
#define S_CDStop ((void (*)())0x00438E40)
|
||||
#define S_CDVolume ((void (*)(int16_t volume))0x00437F30)
|
||||
#define SoundStart ((void (*)())0x0041CDA0)
|
||||
#define SoundInit ((int32_t (*)())0x00437E00)
|
||||
#define S_CDLoop ((void (*)())0x004380B0)
|
||||
#define S_CDStop ((void (*)())0x00438E40)
|
||||
#define S_CDPlay ((void (*)(int16_t track))0x00438D40)
|
||||
#define S_CDVolume ((void (*)(int16_t volume))0x00437F30)
|
||||
#define SoundStart ((void (*)())0x0041CDA0)
|
||||
#define SoundInit ((int32_t (*)())0x00437E00)
|
||||
// clang-format on
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue