summaryrefslogblamecommitdiffstats
path: root/src/audio/MusicManager.cpp
blob: 1d059a466d7888448e01bcac620438735b768963 (plain) (tree)
1
2
3
4
5
6
7
8
9
                   
                         
                   

                 

                         

                  
                  
                    
                    
 



                                                         
 

                            
 
                                



                                                                                         
                                                                                                

                                     
                                                           






                                  

                                            



                 


                                                                               

                                        
 



                            


                                                                                                 
                                              
 
                                                                

                                                                              

                                                                            
                                                                             




                                                                   



                                                                     
                                                     
                                                    
                                                           

                                                       
                        


                                                                              
                                                  

                                                                               
 
                                                                                  

                                                            

                                                                  
                                                                     
                                                                        
                                                                      
                                         
                                                                                     

                                                         

                                 
                 
 
                                    
 











                                                                         
                  
 
                                                                                                   
 


                                                                                                  

                                                 

                                             
                                   
                 








                                                                             
                                                                                                                                           
 
                                     





                                                                                             
         
 
      













                           













                                          
 
            
                                      



                         
            
                                              



                         
            
                                          



                         

                                               



                         

                                      



                         

                                  



                         
            
                                    



                         
            
                                                    

                         






                                      









                                                            
 
#include "common.h"
#include "MusicManager.h"
#include "Camera.h"
#include "Font.h"
#include "Hud.h"
#include "ModelIndices.h"
#include "Replay.h"
#include "Text.h"
#include "Timer.h"
#include "World.h"
#include "sampman.h"
#include "patcher.h"

cMusicManager &MusicManager = *(cMusicManager *)0x8F3964;
int32 &gNumRetunePresses = *(int32 *)0x650B80;
wchar *pCurrentStation = (wchar *)0x650B9C;
uint8 &cDisplay = *(uint8 *)0x650BA1;

bool
cMusicManager::PlayerInCar()
{
	if(!FindPlayerVehicle())
		return false;
	else {
		int32 State = CWorld::Players[CWorld::PlayerInFocus].m_pPed->m_nPedState;

		if(State == PED_DRAG_FROM_CAR || State == PED_EXIT_CAR || State == PED_ARRESTED)
			return false;

		switch(FindPlayerVehicle()->m_modelIndex) {
		case MI_FIRETRUCK:
		case MI_AMBULAN:
		case MI_MRWHOOP:
		case MI_PREDATOR:
		case MI_TRAIN:
		case MI_SPEEDER:
		case MI_REEFER:
		case MI_GHOST: return false;
		default: return true;
		}
	}
}

#if 0
WRAPPER void cMusicManager::DisplayRadioStationName(void) { EAXJMP(0x57E6D0); }
#else
void
cMusicManager::DisplayRadioStationName()
{
	int8 pRetune;
	int8 gStreamedSound;
	int8 gRetuneCounter;

	if(!CTimer::GetIsPaused() && !TheCamera.m_WideScreenOn && cMusicManager::PlayerInCar() &&
	   !CReplay::IsPlayingBack()) {
		if(MusicManager.m_bPlayerInCar && !MusicManager.m_bPreviousPlayerInCar)
			pCurrentStation = nil;

		if(SampleManager.IsMP3RadioChannelAvailable()) {
			gStreamedSound = MusicManager.m_nCurrentStreamedSound;

			if(gStreamedSound == STREAMED_SOUND_CITY_AMBIENT ||
			   gStreamedSound == STREAMED_SOUND_WATER_AMBIENT) {
				gStreamedSound = STREAMED_SOUND_RADIO_POLICE;
			} else {

				if(gStreamedSound >
				   STREAMED_SOUND_RADIO_MP3_PLAYER)
					return;
			}

			pRetune = gNumRetunePresses + gStreamedSound;

			if(pRetune == POLICE_RADIO) {
				pRetune = RADIO_OFF;
			} else if(pRetune > POLICE_RADIO) {
				pRetune = pRetune - 11;
			}
		} else {
			gStreamedSound = MusicManager.m_nCurrentStreamedSound;
			pRetune = gNumRetunePresses + gStreamedSound;

			if(pRetune >= USERTRACK) {
				gRetuneCounter = gNumRetunePresses;
				pRetune = MusicManager.m_nCurrentStreamedSound;

				if(gStreamedSound == STREAMED_SOUND_WATER_AMBIENT)
					pRetune = RADIO_OFF;

				while(gRetuneCounter) {
					if(pRetune == RADIO_OFF) {
						pRetune = HEAD_RADIO;
					} else if(pRetune < USERTRACK) {
						pRetune = pRetune + 1;
					}
					if(pRetune == USERTRACK) pRetune = RADIO_OFF;

					--gRetuneCounter;
				}
			}
		}

		wchar *string = nil;

		switch(pRetune) {
		case HEAD_RADIO: string = TheText.Get("FEA_FM0"); break;
		case DOUBLE_CLEF: string = TheText.Get("FEA_FM1"); break;
		case JAH_RADIO: string = TheText.Get("FEA_FM2"); break;
		case RISE_FM: string = TheText.Get("FEA_FM3"); break;
		case LIPS_106: string = TheText.Get("FEA_FM4"); break;
		case GAME_FM: string = TheText.Get("FEA_FM5"); break;
		case MSX_FM: string = TheText.Get("FEA_FM6"); break;
		case FLASHBACK: string = TheText.Get("FEA_FM7"); break;
		case CHATTERBOX: string = TheText.Get("FEA_FM8"); break;
		case USERTRACK: string = TheText.Get("FEA_FM9"); break;
		default: return;
		};

		if(pRetune > CHATTERBOX && !SampleManager.IsMP3RadioChannelAvailable()) { return; }

		if(string && pCurrentStation != string ||
		   MusicManager.m_nCurrentStreamedSound == STREAMED_SOUND_RADIO_MP3_PLAYER &&
		       MusicManager.m_nPreviousStreamedSound != STREAMED_SOUND_RADIO_MP3_PLAYER) {
			pCurrentStation = string;
			cDisplay = 60;
		} else {
			if(!cDisplay) return;
			--cDisplay;
		}

		CFont::SetJustifyOff();
		CFont::SetBackgroundOff();
		CFont::SetScale(SCREEN_SCALE_X(0.8f), SCREEN_SCALE_Y(1.35f));
		CFont::SetPropOn();
		CFont::SetFontStyle(FONT_HEADING);
		CFont::SetCentreOn();
		CFont::SetCentreSize(SCREEN_SCALE_X(640.0f));
		CFont::SetColor(CRGBA(0, 0, 0, 255));
		CFont::PrintString(SCREEN_WIDTH / 2 + SCREEN_SCALE_X(2.0f), SCREEN_SCALE_Y(22.0f) + SCREEN_SCALE_Y(2.0f), pCurrentStation);

		if(gNumRetunePresses)
			CFont::SetColor(CRGBA(102, 133, 143, 255));
		else
			CFont::SetColor(CRGBA(147, 196, 211, 255));

		CFont::PrintString(SCREEN_WIDTH / 2, SCREEN_SCALE_Y(22.0f), pCurrentStation);
		CFont::DrawFonts();
	}
}
#endif

WRAPPER
void
cMusicManager::Initialise()
{
	EAXJMP(0x57CF70);
}

WRAPPER
void
cMusicManager::Terminate()
{
	EAXJMP(0x57D140);
}

WRAPPER
void
cMusicManager::ChangeMusicMode(int32 mode)
{
	EAXJMP(0x57D310);
}

WRAPPER
void
cMusicManager::StopFrontEndTrack()
{
	EAXJMP(0x57E3D0);
}

WRAPPER void
cMusicManager::PlayAnnouncement(uint8)
{
	EAXJMP(0x57E430);
}

WRAPPER void
cMusicManager::PlayFrontEndTrack(uint8, uint8)
{
	EAXJMP(0x57E2E0);
}

WRAPPER void
cMusicManager::PreloadCutSceneMusic(uint8)
{
	EAXJMP(0x57E210);
}

WRAPPER void
cMusicManager::PlayPreloadedCutSceneMusic(void)
{
	EAXJMP(0x57E290);
}

WRAPPER void
cMusicManager::StopCutSceneMusic(void)
{
	EAXJMP(0x57E2B0);
}

WRAPPER int32
cMusicManager::GetRadioInCar(void)
{
	EAXJMP(0x57D1D0);
}

WRAPPER void
cMusicManager::SetRadioInCar(uint32)
{
	EAXJMP(0x57D2C0);
}

WRAPPER void
cMusicManager::SetRadioChannelByScript(uint8, int32)
{
	EAXJMP(0x57D180);
}

WRAPPER
void
cMusicManager::ResetMusicAfterReload()
{
	EAXJMP(0x57CF30);
}

WRAPPER
void cMusicManager::ResetTimers(int32) { EAXJMP(0x57D420); }

WRAPPER
void
cMusicManager::Service()
{
	EAXJMP(0x57D440);
}