init python in credits: def convert(text): lines = text.split("\n") output_lines = [] for line in lines: if line.startswith("###"): text = line[3:].strip() output_lines.append(f"{{=credits_header3}}{text}{{/}}") elif line.startswith("##"): text = line[2:].strip() output_lines.append(f"{{=credits_header2}}{text}{{/}}") elif line.startswith("#"): text = line[1:].strip() output_lines.append(f"{{=credits_header1}}{text}{{/}}") elif line.startswith("-"): text = line[1:].strip() output_lines.append(f"{{=credits_entry}}{text}{{/}}") else: # Plain text and Ren'py text tags. output_lines.append(line) return "\n".join(output_lines) image game_logo = Image("gui/creamy_pumpkin_pie/game_logo.png", oversample=8) image engine_logo = Image("gui/creamy_pumpkin_pie/engine_logo.png", oversample=2) define credits_images = [] # TODO: Add images once new chibis are in. # define credits_images = ( # (Transform("ch_sna wand_defend", xzoom=-1), 1, 12, True), # ("ch_sna jerk_off", 15, 8, False), # ("ch_hem run", 17, 6, True), # (Transform("hj", zoom=2, crop=(225,200,200,235)), 25, 8, True), # ) define credits_mods = _("\n\n## Game Mods\n\n") + "\n\n".join(["### " + i[1]["Name"] + "\n- " + i[1]["Author"] for i in mods_list.items()]) if mods_list else "" define credits = credits.convert(_(f"""{{image=game_logo}}{{vspace=10}} ## Development Team ### Project Lead ### Lead Programmer ### Lead Artist and Designer ### UI/UX Designer and {{flip}}{{=credits_animator}}Animator{{/}}{{/flip}} - LoafyLemon ### Game Director ### Lead Writer ### Lead Game Tester ### Sound Designer ### Scriptwriter - Johnny28 ## Contributors ### Programmers - STG Anon - MadMerlin - Asease1 - TropeCode - Gouvernathor ### Writers - MadMerlin - Livvypoo - Mo ### Proofreaders - Livvypoo - MedicBear - MaiL - Lineup - Cosmic ### Character Designers - Soggy - DostojevskijSTG - Noodle - MadMerlin - Artguy ### Clothing Designers - Soggy - perniciousducks - DostojevskijSTG - Noodle - MadMerlin - BopJp ### Scene Designers - BopJp - KitsuneArts ### Game Testers - MadMerlin - Livvypoo - Cosmic - MaiL - Lineup - MedicBear - perniciousducks ### Mirror of Erised ### Content Creators - Livvypoo - NotTera - Ignatz - Waxerred{credits_mods} ## Music ### Kevin MacLeod - "Anguish" - "Awkward Meeting" - "Deadly Roulette" - "Brittle Rille" - "Firebrand" - "Chipper Doodle v2" - "Dark Fog" - "Despair" - "Game Over Theme" - "Boss Theme" - "Hitman" - "Music for Manatees" - "Plaint" - "Fuzzball Parade" - "Teddy Bear Waltz" - "Scheming Weasel (Slower version)" - "Open Those Bright Eyes" - "Wallpaper" - "Hidden Agenda" - "Aquarium" - "Court of the Queen" - "Machinations" - "Brandenburg Concerto No. 4 in G, Movement I (Allegro), BWV 1049" - "March of the spoons" - "The other side of the door" ### PhobyAk - "Under-the-radar ### Shadow16nh - "Playful Tension (Orchestral)" ### controllerhead - "Item Shop" ### jrayteam6 - "Grape Soda is Fucking Raw" ### Juhani Junkala - "Title Screen" - "Level 1" - "Level 3" ### Snabisch - "Only 115 (Dance Loop)" ### Nene - "Boss Battle #2" ### Tim Kulig - "Anticipations" ### BoxCat Games - "Battle (Boss)" ## Additional Credits ### Miscellaneous Artwork - CaptainNemo - Darwin7 - That one Disney employee - Johnny28 ### Miscellaneous Sound Effects - LoafyLemon ### Creative Hecklers - Livvypoo - perniciousducks - Cosmic ### Discord Moderators - Dr. Lupin - MadMerlin - Perniciousducks - Livvypoo - Cosmic - Lineup - MedicBear - Johnny28 - LoafyLemon ### Social Media Managers - Soggy - Sandmaster - MadMerlin - Johnny28 - LoafyLemon ### Servers & Websites - LoafyLemon ## Special Thanks ### Akabur - The creator of the original Witch Trainer and other awesome games! - Booom313 - Pinguino - UE Crew - Catbug - Linear - Amadan - Heretic - Maverick - Cleanzo - Techy - Zuel32 - Ven - Armise - Anonymous ## Software {{image=engine_logo}} ### Ren'Py Engine v[renpy.version_only] - [renpy.license!t] {{vspace=400}} # Thank you for playing!{{vspace=400}} """)) style credits_header1: color "#ffffff" outlines [(3, "#000000", 1, 1)] hinting "auto" font gui.bold_font size 48 xalign 0.5 style credits_header2 is credits_header1: color "#61BDEA" outlines [(3, "#000000", 1, 1)] size 32 style credits_header3 is credits_header1: color "#EA8E61" size 24 outlines [(2, "#000000", 1, 1)] style credits_entry: color "#ffffff" outlines [(1, "#000000", 1, 1)] size 18 xalign 0.5 style credits_animator is credits_header3: xoffset -243 style credits_you is credits_header1: color "#61BDEA" outlines [(3, "#000000", 1, 1)] hinting "auto" font gui.bold_font size 48 xoffset -240 style credits_text: color "#fff" outlines [(2, "#000", 0, 0)] transform credits_scroll(duration): subpixel True yanchor 0.0 alpha 0.0 pause 1 linear 1.0 alpha 1.0 pause 3 parallel: linear (duration - 1) yanchor 1.0 parallel: linear (duration - 1) ypos (config.screen_height) pause 7 linear 1.0 alpha 0.0 transform credits_fade_image(start, duration): alpha 0 pause start linear 0.5 alpha 1.0 pause duration linear 0.5 alpha 0.0 screen credits(): layer "interface" zorder 0 modal True predict False style_prefix "credits" default duration = 180 default pauses = 13 add "gui_fade_both" at gui_fade use close_button_background(Hide("credits"), "game_menu") for img, t, d, left in credits_images: add img: at credits_fade_image(t, d) if left: pos (20, config.screen_height - 20) anchor (0.0, 1.0) else: pos (config.screen_width - 20, config.screen_height - 20) anchor (1.0, 1.0) text credits: at credits_scroll(duration) xalign 0.5 text_align 0.5 # Note: This is different from setting xalign inside the style. use player((0.025, 0.88)) timer duration+pauses action [Hide("credits"), Function(achievements.unlock, "Credits")]