credits: bgm, updates, other improvements

This commit is contained in:
Andrei Alexeyev 2017-12-28 05:49:37 +02:00
parent 877f00ce78
commit 013a205a92
No known key found for this signature in database
GPG key ID: 363707CD4C7FE8A4
7 changed files with 153 additions and 29 deletions

View file

@ -0,0 +1,3 @@
title = Existential Field
artist = Tuck V
loop = res/bgm/credits.ogg

BIN
resources/bgm/credits.ogg Normal file

Binary file not shown.

View file

@ -26,6 +26,14 @@ static struct {
int end;
} credits;
#define CREDITS_ENTRY_FADEIN 200.0
#define CREDITS_ENTRY_FADEOUT 100.0
#define CREDITS_YUKKURI_SCALE 0.5
#define CREDITS_FADEOUT 240
#define ENTRY_TIME 350
void credits_fill(void) {
// In case the shortened URLs break,
// Tuck V's YouTube: https://www.youtube.com/channel/UCaw73cuHLnFCSpjOtt_9pyg
@ -33,19 +41,115 @@ void credits_fill(void) {
// vnutriya's bandcamp: https://vnutriya.bandcamp.com/
credits_add("Taisei Project\nbrought to you by…", 200);
credits_add("laochailan\nLukas Weber\nlaochailan@web.de\n\nProgramming, game design,\ngraphics", 300);
credits_add("Akari\nAndrei Alexeyev\nakari@alienslab.net\n\nProgramming, game design", 300);
credits_add("Tuck V\nDiscord: @Tuck#1679\nYouTube: https://is.gd/exafez\n\nOriginal soundtrack", 300);
credits_add("vnutriya\nMikhail Novik\nBandcamp: https://is.gd/owojix\n\nSound effects", 300);
credits_add("Lalasa\nOla Kruzel\nokruzel@comcast.net\nYouTube: https://is.gd/ohihef\n\nWriting, playtesting", 300);
credits_add("lachs0r\nMartin Herkt\nlachs0r@hong-mailing.de\n\nHosting, packaging,\nspiritual guidance", 300);
credits_add("makise-homura\nIgor Molchanov\nakemi_homura@kurisa.ch\n\nCode contributions\nElbrus compatible™", 300);
credits_add("aiju\nJulius Schmidt\nhttp://aiju.de/\n\nI don't remember what this guy did", 300);
credits_add("Special Thanks", 300);
credits_add("ZUN\nfor Tōhō Project\nhttp://www16.big.or.jp/~zun/", 300);
credits_add("Mochizuki Ado\nfor a nice yukkuri image", 300);
credits_add("…and You!\nfor playing", 300);
credits_add("Visit Us\nhttps://taisei-project.org/\n\nAnd join our IRC channel\n#taisei-project at irc.freenode.net\n\nOr our Discord server\nhttps://discord.gg/JEHCMzW", 500);
credits_add((
"laochailan\n"
"Lukas Weber\n"
"laochailan@web.de\n\n"
"Programming, game design,"
"\ngraphics"
), ENTRY_TIME);
credits_add((
"Akari\n"
"Andrei Alexeyev\n"
"akari@alienslab.net\n\n"
"Programming, game design"
), ENTRY_TIME);
credits_add((
"Tuck V\n"
"Discord: @Tuck#1679\n"
"YouTube: https://is.gd/exafez\n\n"
"Original soundtrack"
), ENTRY_TIME);
credits_add((
"vnutriya\n"
"Mikhail Novik\n"
"Bandcamp: https://is.gd/owojix\n\n"
"Sound effects"
), ENTRY_TIME);
credits_add((
"Lalasa\n"
"Ola Kruzel\n"
"okruzel@comcast.net\n"
"YouTube: https://is.gd/ohihef\n\n"
"Writing, playtesting"
), ENTRY_TIME);
credits_add((
"lachs0r\n"
"Martin Herkt\n"
"lachs0r@hong-mailing.de\n\n"
"Hosting, packaging, editing,\n"
"spiritual guidance"
), ENTRY_TIME);
credits_add((
"makise-homura\n"
"Igor Molchanov\n"
"akemi_homura@kurisa.ch\n\n"
"Code contributions\n"
"Elbrus compatible™"
), ENTRY_TIME);
credits_add((
"aiju\n"
"Julius Schmidt\n"
"http://aiju.de/\n\n"
"I don't remember\n"
"what this guy did"
), ENTRY_TIME);
credits_add("Special Thanks", ENTRY_TIME);
credits_add((
"ZUN\n"
"for Tōhō Project\n"
"http://www16.big.or.jp/~zun/"
), ENTRY_TIME);
credits_add((
"Free Software\n"
"Simple DirectMedia Layer\n"
"https://libsdl.org/\n\n"
"zlib\n"
"https://zlib.net/\n\n"
"libpng\n"
"http://www.libpng.org/\n\n"
"Ogg Vorbis\n"
"https://xiph.org/vorbis/\n\n"
"libzip\n"
"https://libzip.org/\n\n"
"Meson build system\n"
"http://mesonbuild.com/\n\n"
"M cross environment\n"
"http://mxe.cc/\n\n"
"and many other projects"
), 700);
credits_add((
"Mochizuki Ado\n"
"for a nice yukkuri image"
), ENTRY_TIME);
credits_add((
"…and You!\n"
"for playing"
), ENTRY_TIME);
credits_add((
"Visit Us\n"
"https://taisei-project.org/\n\n"
"And join our IRC channel\n"
"#taisei-project at irc.freenode.net\n\n"
"Or our Discord server\n"
"https://discord.gg/JEHCMzW"
), ENTRY_TIME);
// yukkureimu
credits_add("*", 150);
}
@ -130,6 +234,8 @@ void credits_init(void) {
global.frames = 0;
credits_fill();
credits.end += 500 + CREDITS_ENTRY_FADEOUT;
start_bgm("credits");
}
void credits_draw_entry(CreditsEntry *e) {
@ -142,26 +248,40 @@ void credits_draw_entry(CreditsEntry *e) {
for(o = credits.entries; o != e; ++o)
time -= o->time + CREDITS_ENTRY_FADEOUT;
int ofs = 5 * e->lines;
if(*(e->data[0]) == '*') {
yukkuri = true;
ofs = 25;
}
time -= ofs;
if(time < 0)
return;
ofs *= 2;
if(time <= CREDITS_ENTRY_FADEIN)
fadein = time / CREDITS_ENTRY_FADEIN;
if(time - e->time - CREDITS_ENTRY_FADEIN > 0)
fadeout = max(0, 1 - (time - e->time - CREDITS_ENTRY_FADEIN) / CREDITS_ENTRY_FADEOUT);
if(time - e->time - CREDITS_ENTRY_FADEIN + ofs > 0)
fadeout = max(0, 1 - (time - e->time - CREDITS_ENTRY_FADEIN + ofs) / CREDITS_ENTRY_FADEOUT);
if(!fadein || !fadeout)
return;
if(*(e->data[0]) == '*') {
yukkuri = true;
if(yukkuri) {
ytex = get_tex("yukkureimu");
}
first = yukkuri? ytex->trueh * CREDITS_YUKKURI_SCALE : (stringheight(e->data[0], _fonts.mainmenu) * 1.2);
if(e->lines > 1)
other = stringheight(e->data[1], _fonts.standard) * 1.3;
first = yukkuri ?
(ytex->trueh * CREDITS_YUKKURI_SCALE) :
(font_line_spacing(_fonts.mainmenu) + stringheight(e->data[0], _fonts.mainmenu));
if(e->lines > 1) {
other = font_line_spacing(_fonts.standard) + stringheight(e->data[1], _fonts.standard);
}
glPushMatrix();
if(fadein < 1)
@ -208,8 +328,11 @@ void credits_draw(void) {
glColor4f(1, 1, 1, credits.panelalpha * 0.7);
glTranslatef(SCREEN_W/4*3, SCREEN_H/2, 0);
glColor4f(1, 1, 1, 1);
int i; for(i = 0; i < credits.ecount; ++i)
for(int i = 0; i < credits.ecount; ++i) {
credits_draw_entry(&(credits.entries[i]));
}
glPopMatrix();
draw_transition();

View file

@ -12,9 +12,3 @@
void credits_loop(void);
void credits_add(char*, int);
void credits_preload(void);
#define CREDITS_ENTRY_FADEIN 200.0
#define CREDITS_ENTRY_FADEOUT 100.0
#define CREDITS_YUKKURI_SCALE 0.5
#define CREDITS_FADEOUT 120

View file

@ -109,9 +109,7 @@ static void start_game_internal(MenuData *menu, StageInfo *info, bool difficulty
global.replay_stage = NULL;
if(global.game_over == GAMEOVER_WIN && !info) {
start_bgm("ending");
ending_loop();
start_bgm("credits");
credits_loop();
free_resources(false);
}

View file

@ -407,6 +407,10 @@ int charwidth(char c, Font *font) {
return stringwidth(s, font);
}
int font_line_spacing(Font *font) {
return TTF_FontLineSkip(font->ttf);
}
void shorten_text_up_to_width(char *s, float width, Font *font) {
while(stringwidth(s, font) > width) {
int l = strlen(s);

View file

@ -54,6 +54,8 @@ int stringwidth(char *s, Font *font);
int stringheight(char *s, Font *font);
int charwidth(char c, Font *font);
int font_line_spacing(Font *font);
void shorten_text_up_to_width(char *s, float width, Font *font);
void wrap_text(char *buf, size_t bufsize, const char *src, int width, Font *font);