Files
IWaniHugThatGator-Demo-Public/game/00src/definitions/other.rpy
2024-03-06 19:57:33 -06:00

870 lines
33 KiB
Plaintext

# 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 = "<loop 33.309563>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 = "<from "+store.last_played[channel][0]+" loop "+store.last_played[channel][1]+">"+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)