Tensy 1.0.1 - redistribution notices Original developer: ROllerozxa Source: https://github.com/rollerozxa/tensy Project license declared by F-Droid: GPL-3.0-only Corresponding source: tensy-1.0.1-source.tar.gz APK redistributed without modification. Store media is normalized without cropping. FILE: se.voxelmanip.tensy_2_src.tar.gz/LICENSE Tensy Copyright (C) 2024 ROllerozxa This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . FILE: se.voxelmanip.tensy_2_src.tar.gz/src/scenes/credits.c #include "consts.h" #include "draw.h" #include "input.h" #include "media/music.h" #include "media/textures.h" #include "scene.h" #include "text.h" #include #include #include static const char *credits_text[] = { "Tensy", "", "------------", "", "", "Programming", "---", "ROllerozxa", "", "", "Graphics", "---", "ROllerozxa", "Datagoblin (monogram font)", "", "", "Sound", "---", "ROllerozxa", "jsfxr (by chr15m)", "Various freesound.org authors (CC0)", "", "", "Music", "---", "Main Menu Theme", "cs127 - Digital Rectal Exam", "", "Credits Theme", "Andreas Viklund - Allt jag vill", "", "", "Third-party libraries used", "---", "SDL & SDL_mixer (zlib)", "Sam Lantinga, Ryan Gordon, et al.", "", "QOI (MIT)", "Dominic Szablewski", "", "libxmp (MIT)", "Claudio Matsuoka, Hipolito Carraro Jr, et al.", "", "", "Special thanks to", "---", "krisbug", "", "", "", "", "---", "For a full catalogue of licensing for", "libraries and assets used in the game,", "see", "tensy.voxelmanip.se/attribution", "---", "", "", "", "", "", "\"Have some cheesy quote here, or something\"", "-Some clever person", "", "", "", "", "", "Copyleft MMXXV ROllerozxa", "", "All events in the game are fictional,", "unless stated otherwise.", "", "", }; #define NUM_CREDITS_LINES (sizeof(credits_text)/sizeof(credits_text[0])) static float scroll_y = SCREEN_H; static float scroll_speed = 25.0f; static float wave_amplitude = 12.0f; static float wave_frequency = 4.0f; static int phase = 1; static float introcard_timeout = 0.0f; static float introcard_opacity = 0; void credits_init(void) { music_play(MUS_CREDITS, -1); scroll_y = SCREEN_H; phase = 1; introcard_timeout = 0; introcard_opacity = 0; } void credits_event(const SDL_Event *ev) { if (is_escaping(ev)) { music_fade_out(1000); scene_switch("mainmenu"); } } void credits_update(float dt) { if (phase == 1) { introcard_timeout += dt; if (introcard_timeout > 3) { phase = 2; } } else if (phase == 2) { introcard_opacity += 400 * dt; if (introcard_opacity > SDL_ALPHA_OPAQUE) { introcard_opacity = 0; phase = 3; } } else if (phase == 3) { scroll_y -= scroll_speed * dt; } } void credits_draw(void) { if (phase == 1 || phase == 2) { draw_set_alpha(SDL_ALPHA_OPAQUE); draw_set_color(0x151515); draw_fill_rect(&FULL_RECT()); draw_texture(TEX_INTRO_RACCOON, NULL, &FULL_RECT()); draw_texture(TEX_INTRO_TEXT, NULL, &FULL_RECT()); if (phase == 2) { draw_set_blend(true); draw_set_color(0x102a6e); draw_set_alpha((unsigned char)introcard_opacity); draw_fill_rect(&FULL_RECT()); } } else { for (size_t i = 0; i < NUM_CREDITS_LINES; i++) { SDL_FRect rect = { /*sinf((scroll_y + i * 30) * 0.075f) * wave_amplitude*/ 0, scroll_y + i * 30, SCREEN_W, 30 }; if (rect.y < SCREEN_H) { text_draw_shadow_centered(credits_text[i], &rect, i == 0 ? 8 : 2); } } } } Scene credits_scene = { "credits", credits_init, credits_event, credits_update, credits_draw, 0x102a6e };