# Character names #character colors and names for the text box define base = Character(ctc="ctc_end_marker", ctc_pause="ctc_mid_marker", ctc_timedpause=Null(), ctc_position="nestled") #imagine having to tell your users they need to interact with the video game define narrator = Character(kind=base) define narrator_old = Character() define unknown = Character('???', base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) # Grey define I = Character(_('Inco'), base, color="#dbe0ff", who_outlines=[(gui.name_text_thickness, '#0e0841')]) # Navy blue define O = Character(_('Olivia'), base, color="#73fdb1", who_outlines=[(gui.name_text_thickness, '#03200c')]) define B = Character(_('Ben'), base, color="#9aceff", who_outlines=[(gui.name_text_thickness, '#0b0d22')]) define Scal = Character (_('Scaler'), base, color="#ffd9a8", who_outlines=[(gui.name_text_thickness, '#200505')]) # Bright fuckin' yellow define Proc = Character (_('Prockling'), base, color="#ffeaf2", who_outlines=[(gui.name_text_thickness, '#4e024a')]) define Coach = Character(_('Coach'), base, color="#ffa494", who_outlines=[(gui.name_text_thickness, '#350404')]) define D = Character(_('Damien'), base, color="#fdddd4", who_outlines=[(gui.name_text_thickness, '#2c0e03')]) # Some kinda pastel velvet? define L = Character(_('Liz'), base, color="#faeeca", who_outlines=[(gui.name_text_thickness, '#032449')]) # Some kinda pastel velvet? define Iad = Character(_('Iadakan'), base, color="#fff8e6", who_outlines=[(gui.name_text_thickness, '#272b09')]) define Mia = Character(_('Mia'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#8a0e0e')]) define Lu = Character(_('Lunara'), base, color="#effdff", who_outlines=[(gui.name_text_thickness, '#082b30')]) define K = Character(_('Kiara'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) # Grey define Fe = Character(_('Mr. Ferris'), base, color="#b7abf8", who_outlines=[(gui.name_text_thickness, '#000000')]) define Ra = Character(_('Randy'), base, color="#ec738d", who_outlines=[(gui.name_text_thickness, '#220a05')]) define Sp = Character(_('Sophia'), base, color="#d3e6ff", who_outlines=[(gui.name_text_thickness, '#0b1431')]) define Vi = Character(_('Vinny'), base, color="#fff3b0", who_outlines=[(gui.name_text_thickness, '#311c04')]) define So = Character(_('Solly'), base, color="#ffd4cc", who_outlines=[(gui.name_text_thickness, '#350404')]) define Bu = Character(_('Buster'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) define Grm = Character(_('Groom'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) define Janitor = Character(_('Janitor'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) define MallCop = Character(_('Mall Cop'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) define Dad = Character(_('Dad'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) define Driver = Character(_('Driver'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) define Nurse = Character(_('Nurse'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) define Waitress = Character(_('Waitress'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) define Chef = Character(_('Chef'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) define Miquella = Character(_('Miquella'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) define Alena = Character(_('Alena'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) define Ted = Character(_('Ted'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) define Journo = Character(_('Journo'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) define Ale = Character(_('Alejandro'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) # Grey define Miq = Character(_('Miquella'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) # Grey define InDa = Character('{image=DamText} & {image=InText}', base, color = "#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) define MiOl = Character('{image=MiaText} & {image=OlText}', base, color = "#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) define OlInc = Character('{image=OlText} & {image=InText}', base, color = "#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) define BInco = Character('{image=BenText} & {image=InText}', base, color = "#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) define JK = Character(_('Jurasskick'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) define OO = Character(_('Funny Gator Girl on Wheels'), color="#001aff", who_outlines=[(0, '#03200c')]) define Toy = Character(_('Toy'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) define Grill = Character(_('Grill'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) define Everyone = Character(_('Everyone'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) # Grey define Teacher = Character(_('Teacher'), base, color="#fff8e6", who_outlines=[(gui.name_text_thickness, '#272b09')]) # Grey define Phone = Character(_('Phone'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) define Speakers = Character(_('Speakers'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) define Crowd = Character(_('Crowd'), base, color="#ffffff", who_outlines=[(gui.name_text_thickness, '#000000')]) # Text displayables to show the individual color and outlines in the dual character textboxes image InText = Text(_("Inco"), color="#dbe0ff", outlines=[(gui.name_text_thickness, '#0e0841')]) image MiaText = Text(_("Mia"), color="#ffffff", outlines=[(gui.name_text_thickness, '#8a0e0e')]) image OlText = Text(_("Olivia"), color="#73fdb1", outlines=[(gui.name_text_thickness, '#03200c')]) image DamText = Text(_("Damien"), color="#fdddd4", outlines=[(gui.name_text_thickness, '#2c0e03')]) image BenText = Text(_("Ben"), color="#9aceff", outlines=[(gui.name_text_thickness, '#0b0d22')]) # Particle effects image spr_particle_darker: alpha 0.2 "spr_particle" image spr_particle_dark: alpha 0.5 "spr_particle" image vfx_embereffect_darker_instant = AlphaMask(Fixed(SnowBlossom("spr_particle_darker", 50, xspeed=(-20, 20), yspeed=(-100, -50), start=1, fast=True)), "spr_creditsimage_gradient") image vfx_embereffect_dark_instant = AlphaMask(Fixed(SnowBlossom("spr_particle_dark", 50, xspeed=(-35, 35), yspeed=(-200, -100), start=1, fast=True)), "spr_creditsimage_gradient") image vfx_embereffect_instant = AlphaMask(Fixed(SnowBlossom("spr_particle", 50, xspeed=(-50, 50), yspeed=(-300, -150), start=1, fast=True)), "spr_creditsimage_gradient") image vfx_embereffect_darker = AlphaMask(Fixed(SnowBlossom("spr_particle_darker", 50, xspeed=(-20, 20), yspeed=(-100, -50), start=1)), "spr_creditsimage_gradient") image vfx_embereffect_dark = AlphaMask(Fixed(SnowBlossom("spr_particle_dark", 50, xspeed=(-35, 35), yspeed=(-200, -100), start=1)), "spr_creditsimage_gradient") image vfx_embereffect = AlphaMask(Fixed(SnowBlossom("spr_particle", 50, xspeed=(-50, 50), yspeed=(-300, -150), start=1)), "spr_creditsimage_gradient") # Matrix defines # This color is #586C81 applied as multiply blending, same as the darkened background. define elevator_multiply = Matrix([1.0 * 0.34509803921568627, 0.0, 0.0, 0.0, 0.0, 1.0 * 0.42352941176470588, 0.0, 0.0, 0.0, 0.0, 1.0 * 0.50588235294117647, 0.0, 0.0, 0.0, 0.0, 1.0, ]) #Helper functions init python: # Shows two lines of dialogue at the same time, spoken by 'speaker' # Speaker: Character definiton, Line_1: Line of dialogue of the top, Line_2: Line of dialogue of the bottom def sim_text(speaker,line_1,line_2): strings = [] if not config.skipping: for i in range(max(len(line_1),len(line_2))): char_1 = min(i, len(line_1)) char_2 = min(i, len(line_2)) strings.append(f"{line_1[0:char_1]}\n{line_2[0:char_2]}{{fast}}{{nw}}{{done}}") strings.append(f"{line_1}\n{line_2}{{fast}}") for string in strings: speaker(string) # Get the position properties of a tag within the master layer def tag_get_placement(tag, layer="master"): return renpy.get_placement(renpy.game.context().scene_lists.get_displayable_by_tag(layer, tag)) # xpos positions for crowd sprites, in order from back to front: # chilling1: 1.68 # phone1: 1.18 # chilling2: 0.44 # watching4: 2.5 # watching1: 0.85 # idle1: 0.0 # phone3: 0.65 # idle3: 0.88 # idle4: 1.96 # idle2: 1.59 # phone2: 1.8 # watching3: 0.39 # watching2: 1.33 # chilling3: 0.6 # # xpos 2.4 for idle1 to complete the loop # # Formula for calculating the delay before sprites move to give their offsets: # time * (a sprite xpos / xpos of sprite that completes the loop)) # Get the sprites started by sprHandler_CrowdTransitionIn and smoothly transition them out def sprHandler_crowdTransitionAway(instant=False): # TODO: Make sprHandler_crowdTransitionAway search through the scene's list of tags instead of a premade array #tags = renpy.get_showing_tags() #for i in tags: # if i.find("spr_crowdperson_"): crowd_list = ["spr_crowdperson_chilling1", "spr_crowdperson_phone1", "spr_crowdperson_chilling2", "spr_crowdperson_watching4", "spr_crowdperson_watching1", "spr_crowdperson_idle1", "spr_crowdperson_phone3", "spr_crowdperson_idle3", "spr_crowdperson_idle4", "spr_crowdperson_idle2", "spr_crowdperson_phone2", "spr_crowdperson_watching3", "spr_crowdperson_watching2", "spr_crowdperson_chilling3",] if instant: for i in crowd_list: renpy.show(i, at_list=[setx()], layer="effects") # Override any transform currenlty happening, the sprite will disappear before this transform shows renpy.hide(i, layer="effects") else: for i in crowd_list: crowd_pos = tag_get_placement(i, "effects") dist_from_reset_point = crowd_pos.xpos - (0.9 - 2.4) new_interp_time = 3 * (dist_from_reset_point / 2.4) renpy.show(i, at_list=[tf_crowdperson_hide(new_interp_time)], layer="effects") renpy.hide(i, layer="effects") def sprHandler_CrowdTransitionIn(instant=False): if instant: renpy.show("spr_crowdperson_chilling1", at_list=[tf_crowdperson_scroll_instant(1.68, 1, "#113509")], layer="effects") renpy.show("spr_crowdperson_phone1", at_list=[tf_crowdperson_scroll_instant(1.18, 1, "#372020")], layer="effects") renpy.show("spr_crowdperson_chilling2", at_list=[tf_crowdperson_scroll_instant(0.44, -1, "#4f522f")], layer="effects") renpy.show("spr_crowdperson_watching4", at_list=[tf_crowdperson_scroll_instant(2.5, 1, "#340d2f")], layer="effects") renpy.show("spr_crowdperson_watching1", at_list=[tf_crowdperson_scroll_instant(0.85, -1, "#0f203f")], layer="effects") renpy.show("spr_crowdperson_idle1", at_list=[tf_crowdperson_scroll_instant(0.0, 1, "#19171E")], layer="effects") renpy.show("spr_crowdperson_phone3", at_list=[tf_crowdperson_scroll_instant(0.65, 1, "#292128")], layer="effects") renpy.show("spr_crowdperson_idle3", at_list=[tf_crowdperson_scroll_instant(0.88, 1, "#2A372F")], layer="effects") renpy.show("spr_crowdperson_idle4", at_list=[tf_crowdperson_scroll_instant(1.96, -1, "#0C122D")], layer="effects") renpy.show("spr_crowdperson_idle2", at_list=[tf_crowdperson_scroll_instant(1.59, 1, "#364b10")], layer="effects") renpy.show("spr_crowdperson_phone2", at_list=[tf_crowdperson_scroll_instant(1.8, 1, "#0D341E")], layer="effects") renpy.show("spr_crowdperson_watching3", at_list=[tf_crowdperson_scroll_instant(0.39, 1, "#142943")], layer="effects") renpy.show("spr_crowdperson_watching2", at_list=[tf_crowdperson_scroll_instant(1.33, -1, "#481818")], layer="effects") renpy.show("spr_crowdperson_chilling3", at_list=[tf_crowdperson_scroll_instant(0.6, 1, "#370B0D")], layer="effects") else: renpy.show("spr_crowdperson_chilling1", at_list=[tf_crowdperson_scroll(1.68, 1, "#113509")], layer="effects") renpy.show("spr_crowdperson_phone1", at_list=[tf_crowdperson_scroll(1.18, 1, "#372020")], layer="effects") renpy.show("spr_crowdperson_chilling2", at_list=[tf_crowdperson_scroll(0.44, -1, "#4f522f")], layer="effects") renpy.show("spr_crowdperson_watching4", at_list=[tf_crowdperson_scroll(2.5, 1, "#340d2f")], layer="effects") renpy.show("spr_crowdperson_watching1", at_list=[tf_crowdperson_scroll(0.85, -1, "#0f203f")], layer="effects") renpy.show("spr_crowdperson_idle1", at_list=[tf_crowdperson_scroll(0.0, 1, "#19171E")], layer="effects") renpy.show("spr_crowdperson_phone3", at_list=[tf_crowdperson_scroll(0.65, 1, "#292128")], layer="effects") renpy.show("spr_crowdperson_idle3", at_list=[tf_crowdperson_scroll(0.88, 1, "#2A372F")], layer="effects") renpy.show("spr_crowdperson_idle4", at_list=[tf_crowdperson_scroll(1.96, -1, "#0C122D")], layer="effects") renpy.show("spr_crowdperson_idle2", at_list=[tf_crowdperson_scroll(1.59, 1, "#364b10")], layer="effects") renpy.show("spr_crowdperson_phone2", at_list=[tf_crowdperson_scroll(1.8, 1, "#0D341E")], layer="effects") renpy.show("spr_crowdperson_watching3", at_list=[tf_crowdperson_scroll(0.39, 1, "#142943")], layer="effects") renpy.show("spr_crowdperson_watching2", at_list=[tf_crowdperson_scroll(1.33, -1, "#481818")], layer="effects") renpy.show("spr_crowdperson_chilling3", at_list=[tf_crowdperson_scroll(0.6, 1, "#370B0D")], layer="effects") def pause_music(fadeout=1.0,channel="music"): song_name = renpy.music.get_playing(channel) loop_point = "0" if song_name != None: if "loop" in song_name: # Gets the loop point in the current playing song by splitting it, makes it work with pre-defined loops and pausing a song that has already been paused # Example of a song that has a predefined loop: define audio.mus_somber = "audio/music/mus_somber.ogg" loop_point = song_name.split("<")[1].split(">")[0].split(" ")[-1] if "<" in song_name: # Gets only the song name, no loops or from song_name = song_name.split("<")[1].split(">")[-1] # We clear the last played song if we are playing nothing and pause the music, so that we avoid carrying songs from older chapters into new ones # This is due to the fact that we also "play nothing" when the player has the game muted so that could lead to undefined behavior, tho is it better to play nothing instead? - Legalo store.last_played[channel] = (str(renpy.music.get_pos(channel)), loop_point, song_name) renpy.music.stop(channel,fadeout) def resume_music(fadein=1.0, channel="music"): try: # For some fucking reason get_pos() will return a None if the user has "Mute All" active, this doesn't happen if volume is set to 0 if store.last_played[channel][0] != "None" and store.last_played[channel][2] != None: # Formats the audio file to play from that place toPlay = ""+store.last_played[channel][2] renpy.music.play(toPlay, channel,fadein=fadein) except KeyError: pass define last_played = {} # Transforms for the crowd transitions above transform tf_crowdperson_hide(t): on hide: linear t xpos 0.9 - 2.4 transform tf_crowdperson_scroll(x=0.0, flip=1, color="#ffffff", _offset=0.9, t=3): zoom 2.285714 ypos -0.91 xpos _offset xzoom flip alpha 0.0 matrixcolor ColorizeMatrix(color, "#ffffff") pause t * (x / 2.4) alpha 1 block: linear t xpos _offset - 2.4 xpos _offset repeat transform tf_crowdperson_scroll_instant(x=0.0, flip=1, color="#ffffff", _offset=0.9, t=3): zoom 2.285714 ypos -0.91 xpos _offset - (2.4 - x) xzoom flip matrixcolor ColorizeMatrix(color, "#ffffff") linear t * (x / 2.4) xpos _offset - 2.4 block: xpos _offset linear t xpos _offset - 2.4 repeat # # METRO STUFF # init -300: define animation_controller = 1 init python: # some stupid bullshit you have to do to get sounds playing in an ATL block def play_metro_bump_sound(a,b,c): renpy.play("audio/sounds/snd_metro_bump" + DEFAULT_SOUND_EXTENSION, channel='audio') def play_metro_announcer1_sound(a,b,c): renpy.play("audio/sounds/snd_metro_announcer1" + DEFAULT_SOUND_EXTENSION, channel='audio') def play_metro_announcer2_sound(a,b,c): renpy.play("audio/sounds/snd_metro_announcer2" + DEFAULT_SOUND_EXTENSION, channel='audio') def play_metro_announcer3_sound(a,b,c): renpy.play("audio/sounds/snd_metro_announcer3" + DEFAULT_SOUND_EXTENSION, channel='audio') def play_metro_beep_sound(a,b,c): renpy.play("audio/sounds/snd_metro_beep" + DEFAULT_SOUND_EXTENSION, channel='audio') def bump(a,b,c): renpy.invoke_in_thread(fn=animate_hair) return def animate_hair(): import time time.sleep(0.1) store.animation_controller = 2 time.sleep(0.0832) store.animation_controller = 3 time.sleep(0.0832) store.animation_controller = 4 time.sleep(0.0832) store.animation_controller = 1 return def hair_controller(st, at, name): return f"{name}{store.animation_controller}",0.03 #TODO make the car kino more "real" feeling transform tf_car_cameramove: parallel: parallel: ease_quad 1.5 xoffset 0 ease_quad 1.0 xoffset -1 ease_quad 1.3 xoffset 1 ease_quad 1.0 xoffset -1 ease_quad 1.2 xoffset 2 ease_quad 1.0 xoffset -1 ease_quad 1.2 xoffset -3 ease_quad 1.4 xoffset 0 repeat parallel: ease_quad 1.0 yoffset 0 ease_quad 1.4 yoffset 2 ease_quad 1.1 yoffset -3 ease_quad 1.5 yoffset 1 ease_quad 1.1 yoffset 3 ease_quad 1.0 yoffset -1 repeat parallel: # autistic workaround for the 'time' statement not working in these blocks. pause 8 block: parallel: pause 16 parallel: function bump linear 0.04 yanchor 0.002 linear 0.055 yanchor 0.0 linear 0.07 yanchor 0.005 linear 0.07 yanchor 0.0 linear 0.07 yanchor 0.01 linear 0.07 yanchor 0.0 linear 0.07 yanchor 0.005 linear 0.09 yanchor 0.0 linear 0.09 yanchor 0.002 linear 0.09 yanchor 0.0 repeat transform tf_metro_cameramove: parallel: parallel: ease_quad 1.5 xoffset 1 ease_quad 1.0 xoffset -2 ease_quad 1.3 xoffset 2 ease_quad 1.0 xoffset -2 ease_quad 1.2 xoffset 3 ease_quad 1.0 xoffset -2 ease_quad 1.2 xoffset -4 ease_quad 1.4 xoffset 0 repeat parallel: ease_quad 1.0 yoffset -1 ease_quad 1.4 yoffset 3 ease_quad 1.1 yoffset -4 ease_quad 1.5 yoffset 2 ease_quad 1.1 yoffset 4 ease_quad 1.0 yoffset -2 repeat parallel: # autistic workaround for the 'time' statement not working in these blocks. pause 8 block: parallel: pause 8 parallel: linear 0.04 yanchor 0.002 linear 0.055 yanchor 0.0 linear 0.07 yanchor 0.005 linear 0.07 yanchor 0.0 linear 0.07 yanchor 0.01 linear 0.07 yanchor 0.0 linear 0.07 yanchor 0.005 linear 0.09 yanchor 0.0 linear 0.09 yanchor 0.002 linear 0.09 yanchor 0.0 repeat # Transform that includes the bump function, this is needed because renpy is stupid and if you have that there whenever a camera pan and a bump happen at the same time the camera will be reset back to its original position transform tf_metro_cameramove_olivia: parallel: parallel: ease_quad 1.5 xoffset 1 ease_quad 1.0 xoffset -2 ease_quad 1.3 xoffset 2 ease_quad 1.0 xoffset -2 ease_quad 1.2 xoffset 3 ease_quad 1.0 xoffset -2 ease_quad 1.2 xoffset -4 ease_quad 1.4 xoffset 0 repeat parallel: ease_quad 1.0 yoffset -1 ease_quad 1.4 yoffset 3 ease_quad 1.1 yoffset -4 ease_quad 1.5 yoffset 2 ease_quad 1.1 yoffset 4 ease_quad 1.0 yoffset -2 repeat parallel: # autistic workaround for the 'time' statement not working in these blocks. pause 8 block: parallel: pause 8 parallel: function bump linear 0.04 yanchor 0.002 linear 0.055 yanchor 0.0 linear 0.07 yanchor 0.005 linear 0.07 yanchor 0.0 linear 0.07 yanchor 0.01 linear 0.07 yanchor 0.0 linear 0.07 yanchor 0.005 linear 0.09 yanchor 0.0 linear 0.09 yanchor 0.002 linear 0.09 yanchor 0.0 repeat transform tf_metro_camerastop: parallel: ease_quad 1.4 xoffset 0 parallel: ease_quad 1.0 yoffset 0 transform tf_metro_soundplayer: parallel: pause 7.5 function play_metro_bump_sound pause 0.5 repeat parallel: pause 10 function play_metro_beep_sound pause 1 function play_metro_announcer1_sound pause 20 function play_metro_beep_sound pause 1 function play_metro_announcer2_sound pause 17 function play_metro_beep_sound pause 1 function play_metro_announcer3_sound pause 6 repeat #constants init python: # Metro asset aligns. Effectively the camera, but the camera's position would not be affected. This makes it so the default view lets the camera be located at (0.0, 0.0) METRO_DEFAULTALIGNX = 0.5 METRO_DEFAULTALIGNY = 0.59 # Positions for the camera to pan up/down METRO_CAMERA_FERRISVIEW = 600 METRO_CAMERA_OLIVIAVIEW = -400 # Aligns the metro to it's default view to the camera without needing to adjust the camera to the correct position transform tf_metro_defaultalign: xalign METRO_DEFAULTALIGNX yalign METRO_DEFAULTALIGNY # Call these labels, so you can quickly setup the metro scene in a chapter label l_metro_day_sound: scene black show bg_metro_skyline: xpos 0.46 ypos -0.69 matrixtransform RotateMatrix(0.0, -9.0, 0.0) block: xpan 0 linear 140 xpan 360 repeat show bg_metro_skyline as bg_metro_skyline2: xpos -0.96 ypos -0.69 matrixtransform RotateMatrix(0.0, 9.0, 0.0) block: xpan 0 linear 140 xpan -360 repeat show bg_metro_day at tf_metro_defaultalign show spr_metrorandy_hoe: tf_metro_defaultalign pause 4 "spr_metrorandy_hoe_blink" pause 4.1 block: "spr_metrorandy_hoe_bump" pause 4 "spr_metrorandy_hoe_blink" pause 4 "spr_metrorandy_hoe_bump" pause 5 "spr_metrorandy_hoe_blink" pause 3 repeat show spr_metrorandy_rebels: tf_metro_defaultalign pause 8.1 block: "spr_metrorandy_rebels_bump" pause 8 repeat show spr_metrorandy_paperguy: tf_metro_defaultalign pause 8.1 block: "spr_metrorandy_paperguy_bump" pause 3 "spr_metrorandy_paperguy_turnpage" pause 5 "spr_metrorandy_paperguy_bump" pause 8 "spr_metrorandy_paperguy_bump" pause 8 repeat show bg_metro_bars at tf_metro_defaultalign show bg_metro_overlay at tf_metro_defaultalign return label l_metro_day: scene black show bg_metro_skyline: xpos 0.46 ypos -0.69 matrixtransform RotateMatrix(0.0, -9.0, 0.0) block: xpan 0 linear 140 xpan 360 repeat show bg_metro_skyline as bg_metro_skyline2: xpos -0.96 ypos -0.69 matrixtransform RotateMatrix(0.0, 9.0, 0.0) block: xpan 0 linear 140 xpan -360 repeat show bg_metro_day at tf_metro_defaultalign show spr_metrorandy_hoe: tf_metro_defaultalign pause 4 "spr_metrorandy_hoe_blink" pause 4.1 block: "spr_metrorandy_hoe_bump" pause 4 "spr_metrorandy_hoe_blink" pause 4 "spr_metrorandy_hoe_bump" pause 5 "spr_metrorandy_hoe_blink" pause 3 repeat show spr_metrorandy_rebels: tf_metro_defaultalign pause 8.1 block: "spr_metrorandy_rebels_bump" pause 8 repeat show spr_metrorandy_paperguy: tf_metro_defaultalign pause 8.1 block: "spr_metrorandy_paperguy_bump" pause 3 "spr_metrorandy_paperguy_turnpage" pause 5 "spr_metrorandy_paperguy_bump" pause 8 "spr_metrorandy_paperguy_bump" pause 8 repeat show bg_metro_bars at tf_metro_defaultalign show bg_metro_overlay at tf_metro_defaultalign camera: perspective True tf_metro_cameramove return label l_metro_dusk: scene black show bg_metro_skyline: xpos 0.46 ypos -0.69 matrixtransform RotateMatrix(0.0, -9.0, 0.0) block: xpan 0 linear 140 xpan -360 repeat show bg_metro_skyline as bg_metro_skyline2: xpos -0.96 ypos -0.69 matrixtransform RotateMatrix(0.0, 9.0, 0.0) block: xpan 0 linear 140 xpan 360 repeat show bg_metro_day at tf_metro_defaultalign show spr_metrorandy_paperguy: tf_metro_defaultalign pause 8.1 block: "spr_metrorandy_paperguy_bump" pause 3 "spr_metrorandy_paperguy_turnpage" pause 5 "spr_metrorandy_paperguy_bump" pause 8 "spr_metrorandy_paperguy_bump" pause 8 repeat show bg_metro_bars at tf_metro_defaultalign show bg_metro_overlay at tf_metro_defaultalign camera: perspective True matrixcolor BrightnessMatrix(0.1)*TintMatrix("#FFA976")*ContrastMatrix(value=1.2) tf_metro_cameramove return label l_metro_night: scene black show bg_metro_skyline_night: xpos 0.46 ypos -0.69 matrixtransform RotateMatrix(0.0, -9.0, 0.0) block: xpan 0 linear 140 xpan -360 repeat show bg_metro_skyline_night as bg_metro_skyline2: xpos -0.96 ypos -0.69 matrixtransform RotateMatrix(0.0, 9.0, 0.0) block: xpan 0 linear 140 xpan 360 repeat show bg_metro_night: tf_metro_defaultalign matrixcolor HueMatrix(22.0) * SaturationMatrix(1.3) * BrightnessMatrix(-0.09) show spr_metrorandy_rebels: tf_metro_defaultalign matrixcolor HueMatrix(22.0) * SaturationMatrix(1.3) * BrightnessMatrix(-0.04) pause 8.1 block: "spr_metrorandy_rebels_bump" pause 8 repeat show bg_metro_bars: tf_metro_defaultalign matrixcolor HueMatrix(22.0) * SaturationMatrix(1.3) * BrightnessMatrix(-0.09) show bg_metro_overlay: tf_metro_defaultalign matrixcolor BrightnessMatrix(-0.09) camera: perspective True tf_metro_cameramove return label l_metro_day_empty: scene black show bg_metro_skyline: xpos 0.46 ypos -0.69 matrixtransform RotateMatrix(0.0, -9.0, 0.0) block: xpan 0 linear 140 xpan 360 repeat show bg_metro_skyline as bg_metro_skyline2: xpos -0.96 ypos -0.69 matrixtransform RotateMatrix(0.0, 9.0, 0.0) block: xpan 0 linear 140 xpan -360 repeat show bg_metro_day at tf_metro_defaultalign show bg_metro_bars at tf_metro_defaultalign show bg_metro_overlay at tf_metro_defaultalign return label l_metro_night_empty: scene black show bg_metro_skyline_night: xpos 0.46 ypos -0.69 matrixtransform RotateMatrix(0.0, -9.0, 0.0) block: xpan 0 linear 140 xpan -360 repeat show bg_metro_skyline_night as bg_metro_skyline2: xpos -0.96 ypos -0.69 matrixtransform RotateMatrix(0.0, 9.0, 0.0) block: xpan 0 linear 140 xpan 360 repeat show bg_metro_night: tf_metro_defaultalign matrixcolor HueMatrix(22.0) * SaturationMatrix(1.3) * BrightnessMatrix(-0.09) show bg_metro_bars: tf_metro_defaultalign matrixcolor HueMatrix(22.0) * SaturationMatrix(1.3) * BrightnessMatrix(-0.09) show bg_metro_overlay: tf_metro_defaultalign matrixcolor BrightnessMatrix(-0.09) camera: perspective True tf_metro_cameramove return # # DEMO STUFF # transform tf_endofdemo_delayshow(p): alpha 0.0 pause p linear 0.5 alpha 1.1 screen endofdemo_1(): text _("You've reached the end of the demo!") yalign 0.7 xalign 0.5 size 50 text_align 0.5 at tf_endofdemo_delayshow(1) screen endofdemo_2(): style_prefix "main_menu" vbox: xalign 0.5 yanchor 0.7 ypos 0.885 spacing 40 text _("You can purchase the full game on Itch.io or Steam.") yalign 0.7 xalign 0.5 size 50 xmaximum 1400 text_align 0.5 button at tf_draw_moveindown(0.0): xalign 0.5 xmaximum 450 ymaximum 100 action OpenURL("https://store.steampowered.com/app/1895350/I_Wani_Hug_that_Gator/") activate_sound "audio/ui/snd_ui_click.wav" fixed: add "gui/button/menubuttons/menu_button.png" zoom 1.2 yalign 0.5 xalign 0.5 text _("Steam") size 35 yalign 0.5 xalign 0.5 button at tf_draw_moveindown(0.0): xalign 0.5 xmaximum 450 ymaximum 100 action OpenURL("https://cavemanon.itch.io/i-wani-hug-that-gator/purchase") activate_sound "audio/ui/snd_ui_click.wav" fixed: add "gui/button/menubuttons/menu_button.png" zoom 1.2 yalign 0.5 xalign 0.5 text _("Itch.io") size 35 yalign 0.5 xalign 0.5 screen endofdemo_3(): text _("Thanks for playing!") yalign 0.7 xalign 0.5 size 50 text_align 0.5 label end_of_demo: $ quick_menu = False window auto hide pause 0.5 scene black camera: resetcamera() zoom 1.0 rotate None play music mus_rock noloop pause 1.3 if persistent.splashtype == 1: $ demo_logo = "anim_logoalt" else: $ demo_logo = "anim_logo" show vfx_embereffect_darker: alpha 0.0 easeout_quad 5 alpha 1.0 show vfx_embereffect_dark: alpha 0.0 easeout_quad 5 alpha 1.0 show vfx_embereffect: alpha 0.0 easeout_quad 5 alpha 1.0 show expression demo_logo: subpixel True xalign 0.5 yalign 0.5 zoom 0.9 linear 8 zoom 0.75 pause 8 show expression demo_logo: subpixel True zoom 0.75 ease_cubic 2 yoffset -200 zoom 0.5 show screen endofdemo_1 pause 3.5 hide screen endofdemo_1 with Dissolve(0.5) pause 0.25 show screen endofdemo_2 with Dissolve(0.5) pause hide screen endofdemo_2 with Dissolve(0.5) pause 0.25 show screen endofdemo_3 with Dissolve(0.5) pause 3 stop music fadeout 3 hide expression demo_logo hide screen endofdemo_3 hide vfx_embereffect_darker hide vfx_embereffect_dark hide vfx_embereffect with Dissolve(2) pause 1.25 # This is so fucking stupid image nothing = Transform("#000000", alpha=0)