Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
This source release does not contain any game data, the game data remains subject to the original EULA and applicable law.
wolf_actor_ai.c, 300 строк одинакового кода:case en_mecha:
Sound_StartSound( NULL, 1, CHAN_VOICE, Sound_RegisterSound( "sfx/084.wav" ), 1, ATTN_NORM, 0 );
break;
case en_hitler:
Sound_StartSound( NULL, 1, CHAN_VOICE, Sound_RegisterSound( "sfx/044.wav" ), 1, ATTN_NORM, 0 );
break;
// ...
case en_will:
Sound_StartSound( NULL, 1, CHAN_VOICE, Sound_RegisterSound( "sfx/072.wav" ), 1, ATTN_NORM, 0 );
break;
case en_death:
Sound_StartSound( NULL, 1, CHAN_VOICE, Sound_RegisterSound( "sfx/090.wav" ), 1, ATTN_NORM, 0 );
break;
case en_mecha:
Play_Sound( "sfx/084.wav" );
break;
case en_hitler:
Play_Sound( "sfx/044.wav" );
break;
// ...
case en_will:
Play_Sound( "sfx/072.wav" );
break;
case en_death:
Play_Sound( "sfx/090.wav" );
break;
enum myenum {
value_a,
value_b
};
char *myvalues[] = {
[value_a] = "123",
[value_b] = "456"
}
typedef struct mypair mypair_t;
struct mypair {
int id;
char *path;
};
enum values {
value_a,
value_b
last_value
};
mypair_t source[] = {
{ value_a, "123" },
{ value_b, "456" }
{ -1, NULL }
};
char *cache[last_value];
void init() {
for (int i = 0; i < last_value; i++)
cache[source[i].id] = source[i].path;
}
init_array_cache(sound_spec, sound_cache);
init_array_cache(video_spec, video_cache);
char* soundFile = dbSounds[id]; // en_mecha, en_hitler, etc
PlaySound( soundFile );
// A proportional drop in lighting sounds like a better idea, but
// this linear drop seems to look nicer. It's not like Doom's
// lighting is realistic in any case...
DOOM Classic и Wolfenstein 3D в исходниках