Skip to content

Commit

Permalink
music: move track flags to TRX
Browse files Browse the repository at this point in the history
This moves music track flags to TRX.
  • Loading branch information
lahm86 committed Feb 8, 2025
1 parent cfc12aa commit d0049c4
Show file tree
Hide file tree
Showing 20 changed files with 80 additions and 47 deletions.
20 changes: 20 additions & 0 deletions src/libtrx/game/music.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#include "game/music.h"

static uint16_t m_MusicTrackFlags[MAX_CD_TRACKS] = {};

void Music_ResetTrackFlags(void)
{
for (int32_t i = 0; i < MAX_CD_TRACKS; i++) {
m_MusicTrackFlags[i] = 0;
}
}

uint16_t Music_GetTrackFlags(const int32_t track_idx)
{
return m_MusicTrackFlags[track_idx];
}

void Music_SetTrackFlags(const int32_t track, const uint16_t flags)
{
m_MusicTrackFlags[track] = flags;
}
1 change: 1 addition & 0 deletions src/libtrx/include/libtrx/game/music.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#pragma once

#include "./music/common.h"
#include "./music/const.h"
#include "./music/ids.h"
6 changes: 6 additions & 0 deletions src/libtrx/include/libtrx/game/music/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
#include "./enum.h"
#include "./ids.h"

#include <stdint.h>

// Stops playing current track and plays a single track.
//
// MPM_ALWAYS:
Expand All @@ -25,3 +27,7 @@ extern void Music_Pause(void);

// Unpauses the music.
extern void Music_Unpause(void);

void Music_ResetTrackFlags(void);
uint16_t Music_GetTrackFlags(int32_t track_idx);
void Music_SetTrackFlags(int32_t track, uint16_t flags);
3 changes: 3 additions & 0 deletions src/libtrx/include/libtrx/game/music/const.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#pragma once

#define MAX_CD_TRACKS 64
1 change: 1 addition & 0 deletions src/libtrx/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ sources = [
'game/math/trig.c',
'game/math/util.c',
'game/matrix.c',
'game/music.c',
'game/objects/common.c',
'game/objects/names.c',
'game/objects/vars.c',
Expand Down
4 changes: 1 addition & 3 deletions src/tr1/game/level.c
Original file line number Diff line number Diff line change
Expand Up @@ -603,9 +603,7 @@ bool Level_Initialise(const GF_LEVEL *const level)
g_FlipMapTable[i] = 0;
}

for (int32_t i = 0; i < MAX_CD_TRACKS; i++) {
g_MusicTrackFlags[i] = 0;
}
Music_ResetTrackFlags();

/* Clear Object Loaded flags */
for (int32_t i = 0; i < O_NUMBER_OF; i++) {
Expand Down
21 changes: 12 additions & 9 deletions src/tr1/game/room.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,10 @@ static void M_TriggerMusicTrack(int16_t track, const TRIGGER *const trigger)
}

// handle g_Lara gym routines
uint16_t flags = Music_GetTrackFlags(track);
switch (track) {
case MX_GYM_HINT_03:
if ((g_MusicTrackFlags[track] & IF_ONE_SHOT)
if ((flags & IF_ONE_SHOT)
&& g_LaraItem->current_anim_state == LS_JUMP_UP) {
track = MX_GYM_HINT_04;
}
Expand All @@ -68,7 +69,7 @@ static void M_TriggerMusicTrack(int16_t track, const TRIGGER *const trigger)
break;

case MX_GYM_HINT_17:
if ((g_MusicTrackFlags[track] & IF_ONE_SHOT)
if ((flags & IF_ONE_SHOT)
&& g_LaraItem->current_anim_state == LS_HANG) {
track = MX_GYM_HINT_18;
}
Expand All @@ -81,7 +82,7 @@ static void M_TriggerMusicTrack(int16_t track, const TRIGGER *const trigger)
break;

case MX_GYM_HINT_25:
if (g_MusicTrackFlags[track] & IF_ONE_SHOT) {
if (flags & IF_ONE_SHOT) {
static int16_t gym_completion_counter = 0;
gym_completion_counter++;
if (gym_completion_counter == LOGIC_FPS * 4) {
Expand All @@ -95,26 +96,28 @@ static void M_TriggerMusicTrack(int16_t track, const TRIGGER *const trigger)
}
// end of g_Lara gym routines

if (g_MusicTrackFlags[track] & IF_ONE_SHOT) {
if (flags & IF_ONE_SHOT) {
return;
}

if (trigger->type == TT_SWITCH) {
g_MusicTrackFlags[track] ^= trigger->mask;
flags ^= trigger->mask;
} else if (trigger->type == TT_ANTIPAD) {
g_MusicTrackFlags[track] &= -1 - trigger->mask;
flags &= -1 - trigger->mask;
} else if (trigger->mask) {
g_MusicTrackFlags[track] |= trigger->mask;
flags |= trigger->mask;
}

if ((g_MusicTrackFlags[track] & IF_CODE_BITS) == IF_CODE_BITS) {
if ((flags & IF_CODE_BITS) == IF_CODE_BITS) {
if (trigger->one_shot) {
g_MusicTrackFlags[track] |= IF_ONE_SHOT;
flags |= IF_ONE_SHOT;
}
Music_Play(track, MPM_TRACKED);
} else {
Music_StopTrack(track);
}

Music_SetTrackFlags(track, flags);
}

static void M_AddFlipItems(const ROOM *const room)
Expand Down
13 changes: 9 additions & 4 deletions src/tr1/game/savegame/savegame.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include <libtrx/debug.h>
#include <libtrx/enum_map.h>
#include <libtrx/filesystem.h>
#include <libtrx/game/music.h>
#include <libtrx/memory.h>

#include <stdint.h>
Expand Down Expand Up @@ -151,19 +152,23 @@ static void M_LoadPostprocess(void)

if (item->object_id == O_PIERRE && item->hit_points <= 0
&& (item->flags & IF_ONE_SHOT)) {
g_MusicTrackFlags[MX_PIERRE_SPEECH] |= IF_ONE_SHOT;
const uint16_t flags = Music_GetTrackFlags(MX_PIERRE_SPEECH);
Music_SetTrackFlags(MX_PIERRE_SPEECH, flags | IF_ONE_SHOT);
}

if (item->object_id == O_COWBOY && item->hit_points <= 0) {
g_MusicTrackFlags[MX_COWBOY_SPEECH] |= IF_ONE_SHOT;
const uint16_t flags = Music_GetTrackFlags(MX_COWBOY_SPEECH);
Music_SetTrackFlags(MX_COWBOY_SPEECH, flags | IF_ONE_SHOT);
}

if (item->object_id == O_BALDY && item->hit_points <= 0) {
g_MusicTrackFlags[MX_BALDY_SPEECH] |= IF_ONE_SHOT;
const uint16_t flags = Music_GetTrackFlags(MX_BALDY_SPEECH);
Music_SetTrackFlags(MX_BALDY_SPEECH, flags | IF_ONE_SHOT);
}

if (item->object_id == O_LARSON && item->hit_points <= 0) {
g_MusicTrackFlags[MX_BALDY_SPEECH] |= IF_ONE_SHOT;
const uint16_t flags = Music_GetTrackFlags(MX_LARSON_SPEECH);
Music_SetTrackFlags(MX_LARSON_SPEECH, flags | IF_ONE_SHOT);
}
}

Expand Down
8 changes: 4 additions & 4 deletions src/tr1/game/savegame/savegame_bson.c
Original file line number Diff line number Diff line change
Expand Up @@ -925,8 +925,8 @@ static bool M_LoadMusicTrackFlags(JSON_ARRAY *music_track_arr)
return true;
}

for (int i = 0; i < (signed)music_track_arr->length; i++) {
g_MusicTrackFlags[i] = JSON_ArrayGetInt(music_track_arr, i, 0);
for (int32_t i = 0; i < (signed)music_track_arr->length; i++) {
Music_SetTrackFlags(i, JSON_ArrayGetInt(music_track_arr, i, 0));
}

return true;
Expand Down Expand Up @@ -1281,8 +1281,8 @@ static JSON_OBJECT *M_DumpCurrentMusic(void)
static JSON_ARRAY *M_DumpMusicTrackFlags(void)
{
JSON_ARRAY *music_track_arr = JSON_ArrayNew();
for (int i = 0; i < MAX_CD_TRACKS; i++) {
JSON_ArrayAppendInt(music_track_arr, g_MusicTrackFlags[i]);
for (int32_t i = 0; i < MAX_CD_TRACKS; i++) {
JSON_ArrayAppendInt(music_track_arr, Music_GetTrackFlags(i));
}
return music_track_arr;
}
Expand Down
1 change: 0 additions & 1 deletion src/tr1/global/const.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
#define MAX_REQLINES 18
#define NUM_SLOTS 32
#define MAX_FRAMES 10
#define MAX_CD_TRACKS 64
#define MAX_FLIP_MAPS 10
#define MAX_SECRETS 16
#define LARA_MAX_HITPOINTS 1000
Expand Down
2 changes: 0 additions & 2 deletions src/tr1/global/vars.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

int32_t g_FPSCounter = 0;

uint16_t g_MusicTrackFlags[MAX_CD_TRACKS] = {};

int32_t g_OptionSelected = 0;

int32_t g_PhdPersp = 0;
Expand Down
2 changes: 0 additions & 2 deletions src/tr1/global/vars.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@ extern float g_FltResZBuf;

extern int32_t g_OptionSelected;

extern uint16_t g_MusicTrackFlags[MAX_CD_TRACKS];

extern int32_t g_FPSCounter;

extern LARA_INFO g_Lara;
Expand Down
4 changes: 1 addition & 3 deletions src/tr2/decomp/decomp.c
Original file line number Diff line number Diff line change
Expand Up @@ -192,9 +192,7 @@ void GetValidLevelsList(REQUEST_INFO *const req)

void InitialiseGameFlags(void)
{
for (int32_t i = 0; i < MAX_CD_TRACKS; i++) {
g_MusicTrackFlags[i] = 0;
}
Music_ResetTrackFlags();
for (GAME_OBJECT_ID obj_id = 0; obj_id < O_NUMBER_OF; obj_id++) {
Object_Get(obj_id)->loaded = 0;
}
Expand Down
7 changes: 5 additions & 2 deletions src/tr2/decomp/savegame.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@

#include <libtrx/debug.h>
#include <libtrx/filesystem.h>
#include <libtrx/game/music.h>

#include <stdio.h>
#include <string.h>
Expand Down Expand Up @@ -886,7 +887,9 @@ void CreateSaveGameInfo(void)
M_WriteU8(tflag);
}

M_Write(g_MusicTrackFlags, MAX_CD_TRACKS * sizeof(uint16_t));
for (int32_t i = 0; i < MAX_CD_TRACKS; i++) {
M_WriteU16(Music_GetTrackFlags(i));
}
for (int32_t i = 0; i < Camera_GetFixedObjectCount(); i++) {
const OBJECT_VECTOR *const object = Camera_GetFixedObject(i);
M_WriteS16(object->flags);
Expand Down Expand Up @@ -937,7 +940,7 @@ void ExtractSaveGameInfo(void)
}

for (int32_t i = 0; i < MAX_CD_TRACKS; i++) {
g_MusicTrackFlags[i] = M_ReadU16();
Music_SetTrackFlags(i, M_ReadU16());
}

for (int32_t i = 0; i < Camera_GetFixedObjectCount(); i++) {
Expand Down
5 changes: 3 additions & 2 deletions src/tr2/decomp/skidoo.c
Original file line number Diff line number Diff line change
Expand Up @@ -644,9 +644,10 @@ void Skidoo_Animation(
case LARA_STATE_SKIDOO_STILL: {
const int32_t music_track =
M_IsArmed(skidoo_data) ? MX_BATTLE_THEME : MX_SKIDOO_THEME;
if (!(g_MusicTrackFlags[music_track] & IF_ONE_SHOT)) {
const uint16_t music_flags = Music_GetTrackFlags(music_track);
if (!(music_flags & IF_ONE_SHOT)) {
Music_Play(music_track, MPM_ALWAYS);
g_MusicTrackFlags[music_track] |= IF_ONE_SHOT;
Music_SetTrackFlags(music_track, music_flags | IF_ONE_SHOT);
}

if (dead) {
Expand Down
1 change: 1 addition & 0 deletions src/tr2/game/music/music_backend_cdaudio.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include <libtrx/debug.h>
#include <libtrx/engine/audio.h>
#include <libtrx/filesystem.h>
#include <libtrx/game/music/const.h>
#include <libtrx/log.h>
#include <libtrx/memory.h>

Expand Down
23 changes: 13 additions & 10 deletions src/tr2/game/room.c
Original file line number Diff line number Diff line change
Expand Up @@ -100,39 +100,42 @@ static void M_TriggerMusicTrack(
return;
}

uint16_t flags = Music_GetTrackFlags(track);
if (trigger->type != TT_SWITCH) {
const int32_t code = trigger->mask;
if (g_MusicTrackFlags[track] & code) {
if ((flags & code) != 0) {
return;
}
if (trigger->one_shot) {
g_MusicTrackFlags[track] |= code;
flags |= code;
}
}

if (trigger->timer == 0) {
Music_Play(track, MPM_TRACKED);
return;
goto finish;
}

if (track != Music_GetDelayedTrack()) {
Music_Play(track, MPM_DELAYED);
g_MusicTrackFlags[track] = (g_MusicTrackFlags[track] & 0xFF00)
| ((FRAMES_PER_SECOND * trigger->timer) & 0xFF);
return;
flags =
(flags & 0xFF00) | ((FRAMES_PER_SECOND * trigger->timer) & 0xFF);
goto finish;
}

int32_t timer = g_MusicTrackFlags[track] & 0xFF;
int32_t timer = flags & 0xFF;
if (timer == 0) {
return;
goto finish;
}

timer--;
if (timer == 0) {
Music_Play(track, MPM_TRACKED);
}
g_MusicTrackFlags[track] =
(g_MusicTrackFlags[track] & 0xFF00) | (timer & 0xFF);
flags = (flags & 0xFF00) | (timer & 0xFF);

finish:
Music_SetTrackFlags(track, flags);
}

static bool M_TestLava(const ITEM *const item)
Expand Down
1 change: 0 additions & 1 deletion src/tr2/global/const.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@

#define MAX_AUDIO_SAMPLE_BUFFERS 256
#define MAX_AUDIO_SAMPLE_TRACKS 32
#define MAX_CD_TRACKS 64
#define MAX_PALETTES 16
#define MAX_FLIP_MAPS 10
#define MAX_VERTICES 0x2000
Expand Down
3 changes: 0 additions & 3 deletions src/tr2/global/vars.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

#include "game/spawn.h"

#include <libtrx/game/sound/ids.h>

#ifndef MESON_BUILD
const char *g_TRXVersion = "TR2X (non-Docker build)";
#endif
Expand Down Expand Up @@ -84,7 +82,6 @@ int32_t g_FlipMaps[MAX_FLIP_MAPS];
bool g_CameraUnderwater;
int32_t g_BoxCount;
char g_LevelFileName[256];
uint16_t g_MusicTrackFlags[64];

WEAPON_INFO g_Weapons[] = {
{},
Expand Down
1 change: 0 additions & 1 deletion src/tr2/global/vars.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,6 @@ extern int32_t g_FlipMaps[MAX_FLIP_MAPS];
extern bool g_CameraUnderwater;
extern int32_t g_BoxCount;
extern char g_LevelFileName[256];
extern uint16_t g_MusicTrackFlags[64];
extern WEAPON_INFO g_Weapons[];
extern int16_t g_FinalBossActive;
extern int16_t g_FinalLevelCount;
Expand Down

0 comments on commit d0049c4

Please sign in to comment.