Changeset - r4120:a593e0a0559d
[Not reviewed]
master
0 6 2
belugas - 18 years ago 2006-07-07 02:44:51
belugas@openttd.org
(svn r5464) [Behaviour Fix] : When starting the game, the system will now verify the presence of music files in gm forlder.
A song can now be removed from the programmed list (in custom list 1 and 2) by clicking on it.
Added music.c[ch] files, to make it all a bit cleaner.
Now, the name of the gm file is associated with the title of the song.
8 files changed with 113 insertions and 68 deletions:
0 comments (0 inline, 0 general)
Makefile
Show inline comments
 
@@ -671,6 +671,7 @@ SRCS += misc.c
 
SRCS += misc_cmd.c
 
SRCS += misc_gui.c
 
SRCS += mixer.c
 
SRCS += music.c
 
SRCS += music_gui.c
 
SRCS += namegen.c
 
SRCS += network.c
lang/english.txt
Show inline comments
 
@@ -551,6 +551,7 @@ STR_01F7_SELECT_CUSTOM_2_USER_DEFINED   
 
STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1                          :{BLACK}Clear current programme (Custom1 or Custom2 only)
 
STR_01F9_SAVE_MUSIC_SETTINGS                                    :{BLACK}Save music settings
 
STR_01FA_CLICK_ON_MUSIC_TRACK_TO                                :{BLACK}Click on music track to add to current programme (Custom1 or Custom2 only)
 
STR_CLICK_ON_TRACK_TO_REMOVE                                    :{BLACK}Click on music track to remove it from current programme (Custom1 or Custom2 only)
 
STR_01FB_TOGGLE_PROGRAM_SHUFFLE                                 :{BLACK}Toggle programme shuffle on/off
 
STR_01FC_SHOW_MUSIC_TRACK_SELECTION                             :{BLACK}Show music track selection window
 
STR_01FD_CLICK_ON_SERVICE_TO_CENTER                             :{BLACK}Click on service to centre view on industry/town
music.c
Show inline comments
 
new file 100644
 
/* $Id */
 

	
 
#include "music.h"
 

	
 
const SongSpecs origin_songs_specs[NUM_SONGS_AVAILABLE] = {
 
	{"gm_tt00.gm", "Tycoon DELUXE Theme"},
 
	{"gm_tt02.gm", "Easy Driver"},
 
	{"gm_tt03.gm", "Little Red Diesel"},
 
	{"gm_tt17.gm", "Cruise Control"},
 
	{"gm_tt07.gm", "Don't Walk!"},
 
	{"gm_tt09.gm", "Fell Apart On Me"},
 
	{"gm_tt04.gm", "City Groove"},
 
	{"gm_tt19.gm", "Funk Central"},
 
	{"gm_tt06.gm", "Stoke It"},
 
	{"gm_tt12.gm", "Road Hog"},
 
	{"gm_tt05.gm", "Aliens Ate My Railway"},
 
	{"gm_tt01.gm", "Snarl Up"},
 
	{"gm_tt18.gm", "Stroll On"},
 
	{"gm_tt10.gm", "Can't Get There From Here"},
 
	{"gm_tt08.gm", "Sawyer's Tune"},
 
	{"gm_tt13.gm", "Hold That Train!"},
 
	{"gm_tt21.gm", "Movin' On"},
 
	{"gm_tt15.gm", "Goss Groove"},
 
	{"gm_tt16.gm", "Small Town"},
 
	{"gm_tt14.gm", "Broomer's Oil Rag"},
 
	{"gm_tt20.gm", "Jammit"},
 
	{"gm_tt11.gm", "Hard Drivin'"},
 
};
music.h
Show inline comments
 
new file 100644
 
/* $Id */
 

	
 
#ifndef MUSIC_H
 
#define MUSIC_H
 

	
 
#define NUM_SONGS_PLAYLIST 33
 
#define NUM_SONGS_AVAILABLE 22
 

	
 
typedef struct SongSpecs {
 
	char filename[256];
 
	char song_name[64];
 
} SongSpecs;
 

	
 
extern const SongSpecs origin_songs_specs[NUM_SONGS_AVAILABLE];
 

	
 
#endif //MUSIC_H
music_gui.c
Show inline comments
 
@@ -10,12 +10,12 @@
 
#include "hal.h"
 
#include "macros.h"
 
#include "variables.h"
 
#include "music.h"
 

	
 
static byte _music_wnd_cursong;
 
static bool _song_is_active;
 
static byte _cur_playlist[33];
 
static byte _cur_playlist[NUM_SONGS_PLAYLIST];
 

	
 
#define NUM_SONGS_AVAILABLE 22
 

	
 

	
 
static byte _playlist_all[] = {
 
@@ -43,33 +43,6 @@ static byte * const _playlists[] = {
 
	msf.custom_2,
 
};
 

	
 
// Map the order of the song names to the numbers of the midi filenames
 
static const byte midi_idx[] = {
 
	 0, // Tycoon DELUXE Theme
 
	 2, // Easy Driver
 
	 3, // Little Red Diesel
 
	17, // Cruise Control
 
	 7, // Don't Walk!
 
	 9, // Fell Apart On Me
 
	 4, // City Groove
 
	19, // Funk Central
 
	 6, // Stoke It
 
	12, // Road Hog
 
	 5, // Aliens Ate My Railway
 
	 1, // Snarl Up
 
	18, // Stroll On
 
	10, // Can't Get There From Here
 
	 8, // Sawyer's Tune
 
	13, // Hold That Train!
 
	21, // Movin' On
 
	15, // Goss Groove
 
	16, // Small Town
 
	14, // Broomer's Oil Rag
 
	20, // Jammit
 
	11  // Hard Drivin'
 
};
 

	
 

	
 
static void SkipToPrevSong(void)
 
{
 
	byte *b = _cur_playlist;
 
@@ -118,8 +91,8 @@ static void MusicVolumeChanged(byte new_
 
static void DoPlaySong(void)
 
{
 
	char filename[256];
 
	snprintf(filename, sizeof(filename), "%sgm_tt%.2d.gm",
 
		_path.gm_dir, midi_idx[_music_wnd_cursong - 1]);
 
	snprintf(filename, sizeof(filename), "%s%s",
 
		_path.gm_dir, origin_songs_specs[_music_wnd_cursong - 1].filename);
 
	_music_driver->play_song(filename);
 
}
 

	
 
@@ -131,10 +104,19 @@ static void DoStopMusic(void)
 
static void SelectSongToPlay(void)
 
{
 
	uint i = 0;
 
	uint j = 0;
 
	char filename[256];
 

	
 
	memset(_cur_playlist, 0, sizeof(_cur_playlist));
 
	do {
 
		_cur_playlist[i] = _playlists[msf.playlist][i];
 
		snprintf(filename, sizeof(filename),  "%s%s",
 
		_path.gm_dir, origin_songs_specs[_playlists[msf.playlist][i]].filename);
 
		//we are now checking for the existence of that file prior
 
		//to add it to the list of available songs
 
		if (FileExists(filename)) {
 
			_cur_playlist[j] = _playlists[msf.playlist][i];
 
			j++;
 
		}
 
	} while (_playlists[msf.playlist][i++] != 0 && i < lengthof(_cur_playlist) - 1);
 

	
 
	if (msf.shuffle) {
 
@@ -165,7 +147,15 @@ static void PlayPlaylistSong(void)
 
{
 
	if (_cur_playlist[0] == 0) {
 
		SelectSongToPlay();
 
		if (_cur_playlist[0] == 0) return;
 
		//if there is not songs in the playlist, it may indicate
 
		//no file on the gm folder, or even no gm folder.
 
		//Stop the playback, then
 
		if (_cur_playlist[0] == 0) {
 
			_song_is_active = false;
 
			_music_wnd_cursong = 0;
 
			msf.playing = false;
 
			return;
 
		}
 
	}
 
	_music_wnd_cursong = _cur_playlist[0];
 
	DoPlaySong();
 
@@ -188,7 +178,7 @@ void MusicLoop(void)
 
		PlayPlaylistSong();
 
	}
 

	
 
	if (_song_is_active == false) return;
 
	if (!_song_is_active) return;
 

	
 
	if (!_music_driver->is_song_playing()) {
 
		if (_game_mode != GM_MENU) {
 
@@ -233,7 +223,7 @@ static void MusicTrackSelectionWndProc(W
 
		}
 

	
 
		DrawStringCentered(216, 45+8*6+16, STR_01F0_CLEAR, 0);
 
		DrawStringCentered(216, 45+8*6+16*2, STR_01F1_SAVE, 0);
 
		//DrawStringCentered(216, 45+8*6+16*2, STR_01F1_SAVE, 0);
 

	
 
		y = 23;
 
		for (p = _playlists[msf.playlist], i = 0; (i = *p) != 0; p++) {
 
@@ -257,7 +247,7 @@ static void MusicTrackSelectionWndProc(W
 
			if (!IS_INT_INSIDE(y, 0, NUM_SONGS_AVAILABLE)) return;
 

	
 
			p = _playlists[msf.playlist];
 
			for (i = 0; i != 32; i++) {
 
			for (i = 0; i != NUM_SONGS_PLAYLIST - 1; i++) {
 
				if (p[i] == 0) {
 
					p[i] = y + 1;
 
					p[i + 1] = 0;
 
@@ -266,17 +256,36 @@ static void MusicTrackSelectionWndProc(W
 
					break;
 
				}
 
			}
 
		} break;
 

	
 
		case 4: { /* remove from playlist */
 
			int y = (e->click.pt.y - 23) / 6;
 
			uint i;
 
			byte *p;
 

	
 
			if (msf.playlist < 4) return;
 
			if (!IS_INT_INSIDE(y, 0, NUM_SONGS_AVAILABLE)) return;
 

	
 
			p = _playlists[msf.playlist];
 
			for (i = y; i != NUM_SONGS_PLAYLIST - 1; i++) {
 
				p[i] = p[i + 1];
 
				}
 

	
 
			SetWindowDirty(w);
 
			SelectSongToPlay();
 
		} break;
 

	
 
		case 11: /* clear */
 
			_playlists[msf.playlist][0] = 0;
 
			SetWindowDirty(w);
 
			StopMusic();
 
			SelectSongToPlay();
 
			break;
 
		case 12: /* save */
 
			ShowInfo("MusicTrackSelectionWndProc:save not implemented\n");
 
			break;
 

	
 
		//case 12: /* save */
 
		//	ShowInfo("MusicTrackSelectionWndProc:save not implemented\n");
 
		//	break;
 

	
 
		case 5: case 6: case 7: case 8: case 9: case 10: /* set playlist */
 
			msf.playlist = e->click.widget - 5;
 
			SetWindowDirty(w);
 
@@ -294,7 +303,7 @@ static const Widget _music_track_selecti
 
{    WWT_CAPTION,   RESIZE_NONE,    14,    11,   431,     0,    13, STR_01EB_MUSIC_PROGRAM_SELECTION, STR_018C_WINDOW_TITLE_DRAG_THIS},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     0,   431,    14,   217, 0x0,			STR_NULL},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,     2,   181,    22,   215, 0x0,			STR_01FA_CLICK_ON_MUSIC_TRACK_TO},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,   250,   429,    22,   215, 0x0,			STR_01F2_CURRENT_PROGRAM_OF_MUSIC},
 
{     WWT_IMGBTN,   RESIZE_NONE,    14,   250,   429,    22,   215, 0x0,			STR_CLICK_ON_TRACK_TO_REMOVE},
 
{ WWT_PUSHIMGBTN,   RESIZE_NONE,    14,   186,   245,    44,    51, 0x0,			STR_01F3_SELECT_ALL_TRACKS_PROGRAM},
 
{ WWT_PUSHIMGBTN,   RESIZE_NONE,    14,   186,   245,    52,    59, 0x0,			STR_01F4_SELECT_OLD_STYLE_MUSIC},
 
{ WWT_PUSHIMGBTN,   RESIZE_NONE,    14,   186,   245,    60,    67, 0x0,			STR_01F5_SELECT_NEW_STYLE_MUSIC},
 
@@ -302,7 +311,7 @@ static const Widget _music_track_selecti
 
{ WWT_PUSHIMGBTN,   RESIZE_NONE,    14,   186,   245,    76,    83, 0x0,			STR_01F6_SELECT_CUSTOM_1_USER_DEFINED},
 
{ WWT_PUSHIMGBTN,   RESIZE_NONE,    14,   186,   245,    84,    91, 0x0,			STR_01F7_SELECT_CUSTOM_2_USER_DEFINED},
 
{ WWT_PUSHIMGBTN,   RESIZE_NONE,    14,   186,   245,   108,   115, 0x0,			STR_01F8_CLEAR_CURRENT_PROGRAM_CUSTOM1},
 
{ WWT_PUSHIMGBTN,   RESIZE_NONE,    14,   186,   245,   124,   131, 0x0,			STR_01F9_SAVE_MUSIC_SETTINGS},
 
//{ WWT_PUSHIMGBTN,   RESIZE_NONE,    14,   186,   245,   124,   131, 0x0,			STR_01F9_SAVE_MUSIC_SETTINGS},
 
{   WIDGETS_END},
 
};
 

	
 
@@ -339,7 +348,7 @@ static void MusicWindowWndProc(Window *w
 
					color = 0xB8;
 
				}
 
			}
 
			GfxFillRect(187, 33 - i * 2, 200, 33 - i * 2, color);
 
			GfxFillRect(187, NUM_SONGS_PLAYLIST - i * 2, 200, NUM_SONGS_PLAYLIST - i * 2, color);
 
		}
 

	
 
		GfxFillRect(60, 46, 239, 52, 0);
openttd.vcproj
Show inline comments
 
@@ -253,6 +253,9 @@
 
				RelativePath=".\mixer.c">
 
			</File>
 
			<File
 
				RelativePath=".\music.c">
 
			</File>
 
			<File
 
				RelativePath=".\namegen.c">
 
			</File>
 
			<File
 
@@ -479,6 +482,9 @@
 
				RelativePath=".\mixer.h">
 
			</File>
 
			<File
 
				RelativePath=".\music.h">
 
			</File>
 
			<File
 
				RelativePath=".\network.h">
 
			</File>
 
			<File
openttd_vs80.vcproj
Show inline comments
 
@@ -346,6 +346,10 @@
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\music.c"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\namegen.c"
 
				>
 
			</File>
 
@@ -655,6 +659,10 @@
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\music.h"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\network.h"
 
				>
 
			</File>
strings.c
Show inline comments
 
@@ -18,6 +18,7 @@
 
#include "variables.h"
 
#include "newgrf_text.h"
 
#include "table/landscape_const.h"
 
#include "music.h"
 

	
 
char _userstring[128];
 

	
 
@@ -1015,31 +1016,6 @@ static char *GenPresidentName(char *buff
 
	return buff;
 
}
 

	
 
static const char * const _song_names[] = {
 
	"Tycoon DELUXE Theme",
 
	"Easy Driver",
 
	"Little Red Diesel",
 
	"Cruise Control",
 
	"Don't Walk!",
 
	"Fell Apart On Me",
 
	"City Groove",
 
	"Funk Central",
 
	"Stoke It",
 
	"Road Hog",
 
	"Aliens Ate My Railway",
 
	"Snarl Up",
 
	"Stroll On",
 
	"Can't Get There From Here",
 
	"Sawyer's Tune",
 
	"Hold That Train!",
 
	"Movin' On",
 
	"Goss Groove",
 
	"Small Town",
 
	"Broomer's Oil Rag",
 
	"Jammit",
 
	"Hard Drivin'"
 
};
 

	
 
static char *GetSpecialPlayerNameString(char *buff, int ind, const int32 *argv)
 
{
 
	switch (ind) {
 
@@ -1053,7 +1029,7 @@ static char *GetSpecialPlayerNameString(
 
			return GenPresidentName(buff, GetInt32(&argv));
 

	
 
		case 4: // song names
 
			return strecpy(buff, _song_names[GetInt32(&argv) - 1], NULL);
 
			return strecpy(buff, origin_songs_specs[GetInt32(&argv) - 1].song_name, NULL);
 
	}
 

	
 
	// town name?
0 comments (0 inline, 0 general)