credits: bgm, updates, other improvements
This commit is contained in:
parent
877f00ce78
commit
013a205a92
7 changed files with 153 additions and 29 deletions
3
resources/bgm/credits.bgm
Normal file
3
resources/bgm/credits.bgm
Normal file
|
@ -0,0 +1,3 @@
|
|||
title = Existential Field
|
||||
artist = Tuck V
|
||||
loop = res/bgm/credits.ogg
|
BIN
resources/bgm/credits.ogg
Normal file
BIN
resources/bgm/credits.ogg
Normal file
Binary file not shown.
165
src/credits.c
165
src/credits.c
|
@ -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();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in a new issue