This beatmap was submitted using in-game submission on Tuesday, May 17, 2016 at 8:18:10 AM
Artist: toby fox
Title: Death by Glamour
Source: UNDERTALE
Tags: Mettaton Radiation Chiptune EX OST
BPM: 148
Filesize: 7945kb
Play Time: 02:12
Difficulties Available:
Information: Scores/Beatmap Listing
---------------
Mettaton.
The storyboard is ABSOLUTELY BEAUTIFUL.
This map contains Undertale spoilers!
[Guest Difficulties]
BlueberrySansy's Mettaton EXtra: p/5126975
[Storyboard Code]
I ported the old storyboard from SGL to osbpy. Here is the newest storyboard code:
Artist: toby fox
Title: Death by Glamour
Source: UNDERTALE
Tags: Mettaton Radiation Chiptune EX OST
BPM: 148
Filesize: 7945kb
Play Time: 02:12
Difficulties Available:
- BlueberrySansy's Mettaton EXtra (4.6 stars, 642 notes)
- Hard (2.98 stars, 366 notes)
- Insane (3.87 stars, 465 notes)
- Normal (1.9 stars, 194 notes)
- OH YES (5.13 stars, 543 notes)
Information: Scores/Beatmap Listing
---------------
Mettaton.
The storyboard is ABSOLUTELY BEAUTIFUL.
This map contains Undertale spoilers!
[Guest Difficulties]
BlueberrySansy's Mettaton EXtra: p/5126975
[Storyboard Code]
I ported the old storyboard from SGL to osbpy. Here is the newest storyboard code:
storyboard.py
from osbpy import *
from math import *
beat = 405
start = 113
end = 133085
#Ratings Chart
ratingLeft = 50
ratingBottom = 200
ratingBorder = 2
def makeRatingGraph(layer, startRating, endRating):
ratingGraph = []
for i in range(8):
graphLine = osbject("sb/white_square.png", layer, "CentreLeft", ratingLeft + i * 21, ratingBottom)
graphLine.color(0, start, end, 255, 0, 255, 255, 0, 255)
ratingGraph.append(graphLine)
ratingBar = osbject("sb/white_square.png", layer, "CentreLeft", ratingLeft, ratingBottom - startRating)
ratingBar.color(0, start, end, 0, 255, 255, 0, 255, 255)
ratingBar.vecscale(0, start, end, 160, 1.2, 160, 1.2)
ratingDiff = endRating - startRating
prevRating = startRating
for t in range(start, 132579, beat//2):
currentRating = int(startRating + ratingDiff * (t-start)/(end - start))
if currentRating != prevRating:
ratingBar.moveY(0, t, t, ratingBottom - currentRating, ratingBottom - currentRating)
prevRating = currentRating
ratings = [randint(0, currentRating) for i in range(9)]
for i in range(8):
thisRating = ratings[i]
nextRating = ratings[i+1]
dx = 21
dy = nextRating - thisRating
length = sqrt(dx * dx + dy * dy)
angle = -atan2(dy, dx)
ratingGraph[i].moveY(0, t, t, ratingBottom - thisRating, ratingBottom - ratings[i])
ratingGraph[i].rotate(0, t, t, angle, angle)
ratingGraph[i].vecscale(0, t, t, length, 2, length, 2)
makeRatingGraph("Pass", 30, 70)
makeRatingGraph("Fail", 10, 40)
goalRatingBar = osbject("sb/white_square.png", "Foreground", "CentreLeft", ratingLeft, ratingBottom - 74)
goalRatingBar.color(0, start, end, 255, 255, 0, 255, 255, 0)
goalRatingBar.vecscale(0, start, end, 160, 1.2, 160, 1.2)
rating_yAxis = osbject("sb/white_square.png", "Foreground", "BottomCentre", ratingLeft, ratingBottom)
rating_yAxis.vecscale(0, start, end, 2, 92, 2, 92)
rating_xAxis = osbject("sb/white_square.png", "Foreground", "CentreLeft", ratingLeft, ratingBottom)
rating_xAxis.vecscale(0, start, end, 161, 2, 161, 2)
ratingText = osbject("sb/ratings.png", "Foreground", "BottomCentre", ratingLeft + 80, ratingBottom - 90)
ratingText.loop(start, (end-start)//(beat * 2) + 1)
ratingText.vecscale(17, 0, beat, 1.05, 1, 1, 1.1, True)
ratingText.vecscale(17, beat, 2*beat, 1, 1.1, 1.05, 1, True)
ratingText.moveY(17, 0, beat, ratingBottom-90, ratingBottom-92, True)
ratingText.moveY(17, beat, 2*beat, ratingBottom-92, ratingBottom-90, True)
ratingPassText = osbject("sb/combo.png", "Foreground", "TopCentre", ratingLeft + 80, ratingBottom + 5)
ratingPassText.trigger("Passing", start, end)
ratingPassText.fade(2, 0, 2*beat, 1, 0, True)
ratingFailText = osbject("sb/disappoint.png", "Foreground", "TopCentre", ratingLeft + 80, ratingBottom + 5)
ratingFailText.trigger("Failing", start, end)
ratingFailText.fade(2, 0, 2*beat, 1, 0, True)
#Mettaton
leg0L = osbject("sb/leg0.png", "Foreground", "CentreLeft", 320, 240)
leg0R = osbject("sb/leg0.png", "Foreground", "CentreRight", 320, 240)
leg1L = osbject("sb/leg1.png", "Foreground", "TopCentre", 320, 240)
leg1R = osbject("sb/leg1.png", "Foreground", "TopCentre", 320, 240)
leg2L = osbject("sb/leg2.png", "Foreground", "TopLeft", 320, 240)
leg2R = osbject("sb/leg2.png", "Foreground", "TopRight", 320, 240)
leg3L = osbject("sb/leg3.png", "Foreground", "TopLeft", 320, 240)
leg3R = osbject("sb/leg3.png", "Foreground", "TopRight", 320, 240)
leg4L = osbject("sb/leg4.png", "Foreground", "TopLeft", 320, 240)
leg4R = osbject("sb/leg4.png", "Foreground", "TopRight", 320, 240)
legsL = [leg0L, leg1L, leg2L, leg3L, leg4L]
legsR = [leg0R, leg1R, leg2R, leg3R, leg4R]
armsR = [0, 0, 0, 0, 0, 0, 0]
armsL = [0, 0, 0, 0, 0, 0, 0]
for i in [0, 1, 3, 4, 6]:
armsL[i] = osbject("sb/arm" + str(i) + ".png", "Foreground", "Centre", 320, 240)
armsR[i] = osbject("sb/arm" + str(i) + ".png", "Foreground", "Centre", 320, 240)
body = osbject("sb/body.png", "Foreground", "Centre", 320, 240)
armsL[5] = osbject("sb/arm5.png", "Foreground", "Centre", 320, 240)
armsR[5] = osbject("sb/arm5.png", "Foreground", "Centre", 320, 240)
heads = []
for i in range(12):
heads.append(osbject("sb/head" + str(i) + ".png", "Foreground", "Centre", 320, 240))
armsL[2] = osbject("sb/arm2.png", "Foreground", "Centre", 320, 240)
armsR[2] = osbject("sb/arm2.png", "Foreground", "Centre", 320, 240)
legsL_Active = [True for i in range(5)]
legsR_Active = [True for i in range(5)]
armsL_Active = [True for i in range(7)]
armsR_Active = [True for i in range(7)]
heads_Active = [True for i in range(12)]
legsL_Times = [[0] for i in range(5)]
legsR_Times = [[0] for i in range(5)]
armsL_Times = [[0] for i in range(7)]
armsR_Times = [[0] for i in range(7)]
heads_Times = [[0] for i in range(12)]
for s in legsR + armsR:
s.para(0, start, end, "H")
def ellipseMovement(sprite, x, y, dx, dy):
sprite.loop(start, (end-start)//beat)
sprite.moveX(17, 0, beat//2, x + dx, x - dx, True)
sprite.moveX(17, beat//2, beat, x - dx, x + dx, True)
sprite.loop(start + beat//4, (end-start)//beat)
sprite.moveY(17, 0, beat//2, y + dy, y - dy, True)
sprite.moveY(17, beat//2, beat, y - dy, y + dy, True)
def refresh(sprites, flags, times, activeSprite, t):
for i in range(len(sprites)):
if i == activeSprite and not flags[i]:
times[i].append(t)
flags[i] = True
elif i != activeSprite and flags[i]:
times[i].append(t)
flags[i] = False
def generatePoses(sprites, times):
for i in range(len(times)):
L = times[i]
for j in range(len(L) - 1):
if j % 2 == 0:
sprites[i].fade(0, L[j], L[j+1], 1, 1)
else:
sprites[i].fade(0, L[j], L[j+1], 0, 0)
if len(L) % 2 == 0:
sprites[i].fade(0, L[-1], 131463, 0, 0)
else:
sprites[i].fade(0, L[-1], 131463, 1, 1)
def makeStar(t, side):
star = osbject("sb/star.png", "Foreground", "Centre", 0, 0)
delay = randint(0, 100)
life = randint(1000, 2000)
xDist = randint(120, 500)
yDist = randint(150, 480)
startAng = radians(randint(0, 360))
size = 0.01 * randint(50, 125)
t0 = t + delay
g = randint(0, 255)
b = randint(168, 255)
star.para(0, t0, t0 + life, "A");
if side:
star.moveX(0, t0, t0 + life, 650, 640 - xDist)
star.rotate(0, t0, t0+life, startAng, startAng + 2 * pi)
else:
star.moveX(0, t0, t0 + life, -10, xDist)
star.rotate(0, t0, t0+life, startAng, startAng - 2 * pi)
star.moveY(4, t0, t0 + 0.75*life, 490, 490 - yDist)
star.moveY(3, t0 + 0.75*life, t0 + life, 490 - yDist, 490 - 0.88888888 * yDist)
star.fade(2, t0, t0 + life, 1, 0)
star.scale(1, t0, t0 + life, 0.4, size)
star.color(1, t0, t0 + life, 255, 255, 255, 255, g, b)
def makeStar2(t, x, xEasing):
star = osbject("sb/star.png", "Foreground", "Centre", 0, 0)
delay = randint(0, 100)
life = randint(1000, 2000)
xDist = randint(-200, 200)
yDist = randint(150, 480)
startAng = radians(randint(0, 360))
size = 0.01 * randint(50, 125)
t0 = t + delay
g = randint(0, 255)
b = randint(168, 255)
star.para(0, t0, t0 + life, "A");
star.moveX(xEasing, t0, t0 + life, x, x + xDist)
if xDist < 0:
star.rotate(0, t0, t0+life, startAng, startAng + 2 * pi)
else:
star.rotate(0, t0, t0+life, startAng, startAng - 2 * pi)
star.moveY(4, t0, t0 + 0.75*life, 490, 490 - yDist)
star.moveY(3, t0 + 0.75*life, t0 + life, 490 - yDist, 490 - 0.88888888 * yDist)
star.fade(2, t0, t0 + life, 1, 0)
star.scale(1, t0, t0 + life, 0.4, size)
star.color(1, t0, t0 + life, 255, 255, 255, 255, g, b)
legOffsetX = [-7, 12, -8, -6, -2]
legOffsetY = [42, 31, 32, 28, 24]
armOffsetX = [34, 68, 40, 52, 70, 58, 30]
armOffsetY = [34, 22, -38, -54, -8, 12, -82]
#Movement
ellipseMovement(body, 320, 240, 2, 3)
for s in heads:
ellipseMovement(s, 317, 180, 3, -1)
for i in range(5):
ellipseMovement(legsL[i], 320 + legOffsetX[i], 240 + legOffsetY[i], 1, 1)
ellipseMovement(legsR[i], 320 - legOffsetX[i], 240 + legOffsetY[i], 1, 1)
for i in range(7):
ellipseMovement(armsL[i], 320 + armOffsetX[i], 240 + armOffsetY[i], 2, 3)
ellipseMovement(armsR[i], 320 - armOffsetX[i], 240 + armOffsetY[i], 2, 3)
legLWavePeriod = 2962
legRWavePeriod = 3252
legsL[0].loop(start, (end-start)//legLWavePeriod + 1)
legsL[0].rotate(17, 0, legLWavePeriod//2, radians(5), radians(-20), True)
legsL[0].rotate(17, legLWavePeriod//2, legLWavePeriod, radians(-20), radians(5), True)
legsR[0].loop(start, (end-start)//legRWavePeriod + 1)
legsR[0].rotate(17, 0, legRWavePeriod//2, radians(-5), radians(20), True)
legsR[0].rotate(17, legRWavePeriod//2, legRWavePeriod, radians(20), radians(-5), True)
legsL[3].loop(start, (end-start)//legLWavePeriod + 1)
legsL[3].rotate(17, 0, legLWavePeriod//2, radians(5), radians(-20), True)
legsL[3].rotate(17, legLWavePeriod//2, legLWavePeriod, radians(-20), radians(5), True)
legsR[3].loop(start, (end-start)//legRWavePeriod + 1)
legsR[3].rotate(17, 0, legRWavePeriod//2, radians(-5), radians(20), True)
legsR[3].rotate(17, legRWavePeriod//2, legRWavePeriod, radians(20), radians(-5), True)
for i in range(1, 5):
legsL[i].loop(start, (end-start)//legLWavePeriod + 1)
legsL[i].vecscale(17, 0, legLWavePeriod//2, 1, 1, 1, 1.1, True)
legsL[i].vecscale(17, legLWavePeriod//2, legLWavePeriod, 1, 1.1, 1, 1, True)
legsR[i].loop(start, (end-start)//legRWavePeriod + 1)
legsR[i].vecscale(17, 0, legRWavePeriod//2, 1, 1, 1, 1.1, True)
legsR[i].vecscale(17, legRWavePeriod//2, legRWavePeriod, 1, 1.1, 1, 1, True)
# Poses
activeHead = 1
activeLegL = 2
activeLegR = 2
activeArmL = 1
activeArmR = 1
refresh(heads, heads_Active, heads_Times, activeHead, start)
refresh(legsL, legsL_Active, legsL_Times, activeLegL, start)
refresh(legsR, legsR_Active, legsR_Times, activeLegR, start)
refresh(armsL, armsL_Active, armsL_Times, activeArmL, start)
refresh(armsR, armsR_Active, armsR_Times, activeArmR, start)
poseChangeTimes = []
for i in range(6599, 90923, beat):
poseChangeTimes.append(i)
for i in range(90923, 116869, beat//4):
poseChangeTimes.append(i)
for i in range(116869, 131464, beat):
poseChangeTimes.append(i)
for t in poseChangeTimes:
if t == poseChangeTimes[-1]:
activeHead = 7
activeLegL = 2
activeLegR = 2
activeArmL = 6
activeArmR = 4
else:
activeHead = (activeHead + randint(1, 11)) % 12
activeLegL = (activeLegL + randint(1, 4)) % 5
activeLegR = (activeLegR + randint(1, 4)) % 5
activeArmL = (activeArmL + randint(1, 6)) % 7
activeArmR = (activeArmR + randint(1, 6)) % 7
refresh(heads, heads_Active, heads_Times, activeHead, t)
refresh(legsL, legsL_Active, legsL_Times, activeLegL, t)
refresh(legsR, legsR_Active, legsR_Times, activeLegR, t)
refresh(armsL, armsL_Active, armsL_Times, activeArmL, t)
refresh(armsR, armsR_Active, armsR_Times, activeArmR, t)
generatePoses(heads, heads_Times)
generatePoses(legsL, legsL_Times)
generatePoses(legsR, legsR_Times)
generatePoses(armsL, armsL_Times)
generatePoses(armsR, armsR_Times)
#Special Effects
counter = 0
for t in range(90963, 131464, beat//2):
flip = counter % 2 == 0
posX = 500 + 100*sin(radians(t)*0.36) if flip else 140 - 100*sin(radians(t)*0.36)
light = osbject("sb/light.png", "Foreground", "TopCentre", posX, -20)
light.para(0, t, t + 4*beat, "A")
if counter % 4 < 2 :
light.color(0, t, t+4*beat, 255, 115, 201, 255, 115, 201)
else:
light.color(0, t, t+4*beat, 255, 183, 247, 255, 183, 247)
sign = 1 if flip else -1
light.rotate(0, t, t+4*beat, radians(-sign * 45), radians(sign * 90))
light.scale(0, t, t + beat//2, 0, 1)
light.scale(0, t+3.5*beat, t+4*beat, 1, 0);
light.fade(0, t, t+beat, 0, 1)
light.fade(0, t+3*beat, t+4*beat, 1, 0)
counter += 1
bottomLight = osbject("sb/light2.png", "Background", "BottomCentre", 320, 480)
bottomLight.para(0, 89302, end, "A")
bottomLight.color(0, 89302, end, 194, 0, 128, 194, 0, 128)
bottomLight.fade(0, 89302, 90923, 0, 0.5)
bottomLight.loop(90923, (116869-90923)//beat + 1)
bottomLight.fade(0, 0, beat, 1, 0.5, True)
for t in range(90923, 116869 - beat, beat):
for i in range(50):
makeStar(t, True)
makeStar(t, False)
for i in range(30):
for j in [0, 160, 320, 480, 640]:
for k in [0, 2]:
makeStar2(116869, j, k);
removeBackground = osbject("undertale.png", "Background", "Centre", 320, 240)
undertale = osbject("undertale.png", "Foreground", "Centre", 320, 240)
undertale.fade(0, 0, start, 1, 1)
undertale.fade(0, start, start+beat, 1, 0)
undertale.fade(0, 132680, 134713, 1, 1)
osbject.end("redacted")
osbpy.py
from random import randint
import os
import pylab as plt
import math
import numpy as np
from scipy.io import wavfile
layers = ["Background","Fail","Pass","Foreground"]
origins = ["TopLeft","TopCentre","TopRight","CentreLeft","Centre","CentreRight","BottomLeft","BottomCentre","BottomRight"]
spect = []
def sinus(har, radius, sinheight):
x1 = np.linspace(0, sinheight, har)
y1 = np.sin(x1)
sinus = plt.plot(x1, y1, 'bo')
ysinus = sinus[0].get_ydata()*radius
return ysinus
def gencircle(r, n):
for i in range(len(r)):
for j in range(n[i]):
yield r[i], j*(2 * np.pi / n[i])
def circle(har, radius):
circle = []
xcircle = {}
ycircle = {}
for r, t in gencircle([2*radius], [har]):
circle += plt.plot(r * np.cos(t), r * np.sin(t), 'bo')
for index, val in enumerate(circle):
xcircle[index] = val.get_xdata()
ycircle[index] = val.get_ydata()
return ycircle, xcircle
def check_easing(es):
if es not in range(35):
return True
else:
return False
class osbject:
back_obj = []
fail_obj = []
pass_obj = []
fore_obj = []
obj_layers = {"Background" : back_obj, "Fail" : fail_obj, "Pass" : pass_obj, "Foreground" : fore_obj}
def __init__(self, path, layer, origin, posX, posY, framecount=None, framerate=None, loop=None):
osbject.obj_layers[layer].append(self)
valid = True
errors = []
self.props = []
if type(path) is not str:
errors.append("Invalid Path! ")
valid = False
if layer not in layers:
errors.append("Invalid Layer! ")
valid = False
if origin not in origins:
errors.append("Invalid Origin! ")
valid = False
try:
posX = int(posX)
posY = int(posY)
except:
errors.append("Invalid Position! ")
valid = False
if framecount is not None and framerate is not None and loop is not None:
if not isinstance(framecount, int) or not isinstance(framerate, int):
errors.append("Invalid Frame count or Frame rate! ")
valid = False
if loop not in ["LoopForever","LoopOnce"]:
errors.append("Invalid Type! ")
valid = False
if valid:
self.props.append("Animation,%s,%s,%s,%s,%s,%s,%s,%s" % (layer, origin, path, posX, posY, framecount, framerate, loop))
else:
self.props = errors
else:
if valid:
self.props.append("Sprite,%s,%s,\"%s\",%s,%s" % (layer, origin, path, posX, posY))
else:
self.props = errors
def fade(self, easing,startTime,endTime,startFade,endFade,loop = False):
valid = True
errors = ""
if check_easing(easing):
errors.append("Invalid Easing! ")
valid = False
try:
startTime = int(startTime)
endTime = int(endTime)
except:
errors.append("Invalid Time! ")
valid = False
try:
startFade = float(startFade)
endFade = float(endFade)
except:
errors.append("Invalid Fade! ")
valid = False
if valid:
if loop:
self.props.append("\n F,%s,%s,%s,%s,%s" % (easing, startTime, endTime, startFade, endFade))
else:
self.props.append("\n F,%s,%s,%s,%s,%s" % (easing, startTime, endTime, startFade, endFade))
else:
self.props.append("\n" + "".join(errors))
def move(self, easing,startTime,endTime,startmoveX,startmoveY,endmoveX,endmoveY,loop = False):
valid = True
errors = ""
if check_easing(easing):
errors.append("Invalid Easing! ")
valid = False
try:
startTime = int(startTime)
endTime = int(endTime)
except:
errors.append("Invalid Time! ")
valid = False
if not isinstance(startmoveX, int) or not isinstance(startmoveY, int) or not isinstance(endmoveX, int) or not isinstance(endmoveY, int):
errors.append("Invalid Move! ")
valid = False
if valid:
if loop:
self.props.append("\n M,%s,%s,%s,%s,%s,%s,%s" % (easing, startTime, endTime, startmoveX, startmoveY, endmoveX, endmoveY))
else:
self.props.append("\n M,%s,%s,%s,%s,%s,%s,%s" % (easing, startTime, endTime, startmoveX, startmoveY, endmoveX, endmoveY))
else:
self.props.append("\n" + "".join(errors))
def moveX(self, easing,startTime,endTime,startmoveX,endmoveX,loop = False):
valid = True
errors = ""
if check_easing(easing):
errors.append("Invalid Easing! ")
valid = False
try:
startTime = int(startTime)
endTime = int(endTime)
startmoveX = int(startmoveX)
endmoveX = int(endmoveX)
except:
errors.append("Invalid Arguments! ")
valid = False
if valid:
if loop:
self.props.append("\n MX,%s,%s,%s,%s,%s" % (easing, startTime, endTime, startmoveX, endmoveX))
else:
self.props.append("\n MX,%s,%s,%s,%s,%s" % (easing, startTime, endTime, startmoveX, endmoveX))
else:
self.props.append("\n" + "".join(errors))
def moveY(self, easing,startTime,endTime,startmoveY,endmoveY,loop = False):
valid = True
errors = ""
if check_easing(easing):
errors.append("Invalid Easing! ")
valid = False
try:
startTime = int(startTime)
endTime = int(endTime)
startmoveY = int(startmoveY)
endmoveY = int(endmoveY)
except:
errors.append("Invalid Arguments! ")
valid = False
if valid:
if loop:
self.props.append("\n MY,%s,%s,%s,%s,%s" % (easing, startTime, endTime, startmoveY, endmoveY))
else:
self.props.append("\n MY,%s,%s,%s,%s,%s" % (easing, startTime, endTime, startmoveY, endmoveY))
else:
self.props.append("\n" + "".join(errors))
def scale(self, easing,startTime,endTime,startScale,endScale,loop = False):
valid = True
errors = ""
if check_easing(easing):
errors.append("Invalid Easing! ")
valid = False
try:
startTime = int(startTime)
endTime = int(endTime)
startScale = float(startScale)
endScale = float(endScale)
except:
errors.append("Invalid Arguments! ")
valid = False
if valid:
if loop:
self.props.append("\n S,%s,%s,%s,%s,%s" % (easing, startTime, endTime, startScale, endScale))
else:
self.props.append("\n S,%s,%s,%s,%s,%s" % (easing, startTime, endTime, startScale, endScale))
else:
self.props.append("\n" + "".join(errors))
def vecscale(self, easing,startTime,endTime,startscaleX,startscaleY,endscaleX,endscaleY,loop = False):
valid = True
errors = ""
if check_easing(easing):
errors.append("Invalid Easing! ")
valid = False
if check_easing(easing):
errors.append("Invalid Easing! ")
valid = False
try:
startTime = int(startTime)
endTime = int(endTime)
startscaleX = float(startscaleX)
endscaleX = float(endscaleX)
startscaleY = float(startscaleY)
endscaleY = float(endscaleY)
except:
errors.append("Invalid Arguments! ")
valid = False
if valid:
if loop:
self.props.append("\n V,%s,%s,%s,%s,%s,%s,%s" % (easing, startTime, endTime, startscaleX, startscaleY, endscaleX, endscaleY))
else:
self.props.append("\n V,%s,%s,%s,%s,%s,%s,%s" % (easing, startTime, endTime, startscaleX, startscaleY, endscaleX, endscaleY))
else:
self.props.append("\n" + "".join(errors))
def rotate(self, easing,startTime,endTime,startRotate,endRotate,loop = False):
valid = True
errors = ""
if check_easing(easing):
errors.append("Invalid Easing! ")
valid = False
try:
startTime = int(startTime)
endTime = int(endTime)
startRotate = float(startRotate)
endRotate = float(endRotate)
except:
errors.append("Invalid Arguments! ")
valid = False
if valid:
if loop:
self.props.append("\n R,%s,%s,%s,%s,%s" % (easing, startTime, endTime, startRotate, endRotate))
else:
self.props.append("\n R,%s,%s,%s,%s,%s" % (easing, startTime, endTime, startRotate, endRotate))
else:
self.props.append("\n" + "".join(errors))
def color(self, easing,startTime,endTime,startR,startG,startB,endR,endG,endB,loop = False):
valid = True
errors = ""
if check_easing(easing):
errors.append("Invalid Easing! ")
valid = False
try:
startTime = int(startTime)
endTime = int(endTime)
startR = int(startR)
startG = int(startG)
startB = int(startB)
endR = int(endR)
endG = int(endG)
endB = int(endB)
except:
errors.append("Invalid Arguments! ")
valid = False
if valid:
if loop:
self.props.append("\n C,%s,%s,%s,%s,%s,%s,%s,%s,%s" % (easing, startTime, endTime, startR, startG, startB, endR, endG, endB))
else:
self.props.append("\n C,%s,%s,%s,%s,%s,%s,%s,%s,%s" % (easing, startTime, endTime, startR, startG, startB, endR, endG, endB))
else:
self.props.append("\n" + "".join(errors))
def para(self, easing,startTime,endTime,parameter):
valid = True
errors = ""
if check_easing(easing):
errors.append("Invalid Easing! ")
valid = False
try:
startTime = int(startTime)
endTime = int(endTime)
except:
errors.append("Invalid Arguments! ")
valid = False
if parameter not in ["H", "V", "A"]:
errors.append("Invalid Parameter!")
valid = False
if valid:
self.props.append("\n P,%s,%s,%s,%s" % (easing, startTime, endTime, parameter))
else:
self.props.append("\n" + "".join(errors))
def loop(self, startTime,loopCount):
valid = True
errors = ""
try:
startTime = int(startTime)
loopCount = int(loopCount)
except:
errors.append("Invalid Arguments! ")
valid = False
if valid:
self.props.append("\n L,%s,%s" % (startTime, loopCount))
else:
self.props.append("\n" + "".join(errors))
def trigger(self, trigger, startTime, endTime):
valid = True
errors = ""
if type(trigger) is not str:
errors.append("Invalid Trigger!")
valid = False
try:
startTime = int(startTime)
endTime = int(endTime)
except:
errors.append("Invalid Arguments! ")
valid = False
if valid:
self.props.append("\n T,%s,%s,%s" % (trigger,startTime, endTime))
else:
self.props.append("\n" + "".join(errors))
@classmethod
def end(cl,osbfile):
if os.path.isfile(osbfile):
os.remove(osbfile)
with open(osbfile, "a") as text:
text.write("[Events]\n//Background and Video events\n//Storyboard Layer 0 (Background)\n")
for val in cl.back_obj:
text.write("%s\n" % "".join(val.props))
text.write("//Storyboard Layer 1 (Fail)\n")
for val in cl.fail_obj:
text.write("%s\n" % "".join(val.props))
text.write("//Storyboard Layer 2 (Pass)\n")
for val in cl.pass_obj:
text.write("%s\n" % "".join(val.props))
text.write("//Storyboard Layer 3 (Foreground)\n")
for val in cl.fore_obj:
text.write("%s\n" % "".join(val.props))
text.write("//Storyboard Sound Samples")
def spectrum(wav_file,mi,mx,har,start,end,posX,posY,layer,origin,gap=0,arrange="",radius=30,sinheight=6.1):
frame_rate, snd = wavfile.read(wav_file)
sound_info = snd[:,0]
spectrum, freqs, t, im = plt.specgram(sound_info,NFFT=1024,Fs=frame_rate,noverlap=5,mode='magnitude')
n = 0
rotation = 6.2831
sinpos = {}
cirpos = {}
if arrange is "sinus":
sinpos = sinus(har,radius,sinheight)
for i in range(har):
cirpos[i] = 0
elif arrange is "circle":
gap = 0
sinpos, cirpos = circle(har,radius)
rotation /= har
else:
for i in range(har):
sinpos[i] = 0
for i in range(har):
cirpos[i] = 0
maximum = plt.amax(spectrum)
minimum = plt.amin(spectrum)
position = 0
while n < har:
lastval = ((spectrum[n][0]-minimum)/(maximum - minimum))*(mx-mi)+mi
lastval = math.ceil(lastval*1000)/1000
lasttime = int(round(t[0]*1000))
spect.append(osbject("bar.png",layer,origin,posX+position*gap+int(round(float(cirpos[n]))),posY+int(round(float(sinpos[n])))))
position += 1
if arrange is "circle":
spect[n].rotate(0,start,start,math.ceil((1.5707+n*rotation)*1000)/1000,math.ceil((1.5707+n*rotation)*1000)/1000)
for index,power in enumerate(spectrum[n]):
power = ((power-minimum)/(maximum - minimum))*(mx-mi)+mi
power = math.ceil(power*1000)/1000
if power == lastval or int(round(t[index]*1000)) < start or int(round(t[index]*1000)) > end or index % 2 is not 0:
lasttime = int(round(t[index]*1000))
continue
else:
spect[n].vecscale(0,lasttime,int(round(t[index]*1000)),1,lastval,1,power)
lastval = power
lasttime = int(round(t[index]*1000))
n += 1
SGF - Old Storyboard (Kept in case someone wants an example of SGL)
var pi = 3.1415926;
var deg2Rad = pi / 180;
var beat = 405;
var start = 113;
var end = 133085;
var leg4L = new Sprite("sb/leg4.png", Foreground, CentreRight);
var leg4R = new Sprite("sb/leg4.png", Foreground, CentreLeft); leg4R.flipH(0, end);
var leg1L = new Sprite("sb/leg1.png");
var leg1R = new Sprite("sb/leg1.png"); leg1R.flipH(0, end);
var leg2L = new Sprite("sb/leg2.png", Foreground, TopRight);
var leg2R = new Sprite("sb/leg2.png", Foreground, TopLeft); leg2R.flipH(0, end);
var leg3L = new Sprite("sb/leg3.png");
var leg3R = new Sprite("sb/leg3.png"); leg3R.flipH(0, end);
var leg5L = new Sprite("sb/leg5.png");
var leg5R = new Sprite("sb/leg5.png"); leg5R.flipH(0, end);
var arm1L = new Sprite("sb/arm1.png");
var arm1R = new Sprite("sb/arm1.png"); arm1R.flipH(0, end);
var arm2L = new Sprite("sb/arm2.png");
var arm2R = new Sprite("sb/arm2.png"); arm2R.flipH(0, end);
var arm3L = new Sprite("sb/arm3.png");
var arm3R = new Sprite("sb/arm3.png"); arm3R.flipH(0, end);
var arm4L = new Sprite("sb/arm4.png");
var arm4R = new Sprite("sb/arm4.png"); arm4R.flipH(0, end);
var arm6L = new Sprite("sb/arm6.png");
var arm6R = new Sprite("sb/arm6.png"); arm6R.flipH(0, end);
var body = new Sprite("sb/body.png");
var head1 = new Sprite("sb/head1.png");
var head2 = new Sprite("sb/head2.png");
var head3 = new Sprite("sb/head3.png");
var head4 = new Sprite("sb/head4.png");
var head5 = new Sprite("sb/head5.png");
var head6 = new Sprite("sb/head6.png");
var arm5L = new Sprite("sb/arm5.png");
var arm5R = new Sprite("sb/arm5.png"); arm5R.flipH(0, end);
var arm7L = new Sprite("sb/arm7.png");
var arm7R = new Sprite("sb/arm7.png"); arm7R.flipH(0, end);
var light2 = new Sprite("sb/light2.png", Background, BottomCentre);
light2.move(89302, 320, 480);
light2.additive(89302, end + beat);
light2.color(89302, 194, 0, 128);
light2.fade(89302, 90923, 0, 0.5);
//light2.fade(90923, 90923 + beat, 1, 0.5);
function mainCircleHelper(obj, x, y, dx, dy, startTime, t, i) {
if (i % 4 == 0) {
obj.moveX(17, startTime + t * i, startTime + t * (i+2), x + dx, x - dx);
}
else if (i % 4 == 1) {
obj.moveY(17, startTime + t * i, startTime + t * (i+2), y + dy, y - dy);
}
else if (i % 4 == 2) {
obj.moveX(17, startTime + t * i, startTime + t * (i+2), x - dx, x + dx);
}
else {
obj.moveY(17, startTime + t * i, startTime + t * (i+2), y - dy, y + dy);
}
}
function rotateHelper(obj, start, end, startTime, t, i) {
if (i % 4 == 0) {
obj.rotate(17, startTime + t * i, startTime + t * (i+3), start, end);
}
else if (i % 4 == 3) {
obj.rotate(17, startTime + t * i, startTime + t * (i+1), end, start);
}
}
function hide(obj, t) {
obj.fade(t, 0);
}
function show(obj, t) {
obj.fade(t, 1);
}
function makeStar(t, side) {
var star = new Sprite("sb/star.png");
var delay = rand(0, 100);
var life = rand(1000, 2000);
var xDist = rand(120, 500);
var yDist = rand(150, 480);
var startAng = rand(0, 360) * 3.1415926 / 180;
var size = 0.01*rand(50, 125);
var t0 = t + delay;
var g = rand(0, 255);
var b = rand(168, 255);
star.additive(t0, t0 + life);
if (side) {
star.moveX(t0, t0 + life, 650, 640 - xDist);
star.rotate(t0, t0+life, startAng, startAng + 3.1415926 * 2);
}
else {
star.moveX(t0, t0 + life, -10, xDist);
star.rotate(t0, t0+life, startAng, startAng - 3.1415926 * 2);
}
star.moveY(4, t0, t0 + 0.75*life, 490, 490 - yDist);
star.moveY(3, t0 + 0.75*life, t0 + life, 490 - yDist, 490 - 0.88888888*yDist);
star.fade(2, t0, t0 + life, 1, 0);
star.scale(1, t0, t0+life, 0.4, size);
star.color(1, t0, t0+life, 255, 255, 255, 255, g, b);
}
function makeStar2(t, x, xEasing) {
var star = new Sprite("sb/star.png");
var delay = rand(0, 100);
var life = rand(1000, 2000);
var xDist = rand(-200, 200);
var yDist = rand(150, 480);
var startAng = rand(0, 360) * 3.1415926 / 180;
var size = 0.01*rand(50, 125);
var t0 = t + delay;
var g = rand(0, 255);
var b = rand(168, 255);
star.additive(t0, t0 + life);
star.moveX(xEasing, t0, t0 + life, x, x + xDist);
if (xDist < 0) {
star.rotate(t0, t0+life, startAng, startAng + 3.1415926 * 2);
}
else {
star.rotate(t0, t0+life, startAng, startAng - 3.1415926 * 2);
}
star.moveY(4, t0, t0 + 0.75*life, 490, 490 - yDist);
star.moveY(3, t0 + 0.75*life, t0 + life, 490 - yDist, 490 - 0.88888888*yDist);
star.fade(2, t0, t0 + life, 1, 0);
star.scale(1, t0, t0+life, 0.4, size);
star.color(1, t0, t0+life, 255, 255, 255, 255, g, b);
}
var mainX = 323;
var mainY = 240;
var arm1X = 25;
var arm1Y = -70;
var arm2X = 29;
var arm2Y = 25;
var arm3X = 90;
var arm3Y = -10;
var arm4X = 60;
var arm4Y = -50;
var arm5X = 40;
var arm5Y = -40;
var arm6X = 60;
var arm6Y = 20;
var arm7X = 60;
var arm7Y = 10;
var leg1X = 44;
var leg1Y = 304;
var leg2X = -3;
var leg2Y = 260;
var leg3X = 12;
var leg3Y = 335;
var leg4X = -6;
var leg4Y = 270;
var leg5X = 44;
var leg5Y = 300;
var refreshArmL = true;
var refreshArmR = true;
var refreshHead = true;
var refreshLegL = true;
var refreshLegR = true;
var activeArmL = 6;
var activeArmR = 6;
var activeHead = 1;
var activeLegL = 1;
var activeLegR = 1;
var headX = -3;
var headY = -60;
var dt = beat * 0.25;
for (var i = 0; i <= (end - start)/dt; i++) {
mainCircleHelper(body, mainX, mainY, 2, 3, start, dt, i);
var time = start + i * dt;
if (time >= 6194 && time <= 131261) {
if (i % 4 == 0 || (time >= 90923 && time <= 116869)) {
activeArmL = (activeArmL - 1 + rand(1, 6)) % 7 + 1;
activeArmR = (activeArmR - 1 + rand(1, 6)) % 7 + 1;
activeHead = (activeHead - 1 + rand(1, 5)) % 6 + 1;
activeLegL = (activeLegL - 1 + rand(1, 4)) % 5 + 1;
activeLegR = (activeLegR - 1 + rand(1, 4)) % 5 + 1;
refreshArmL = true;
refreshArmR = true;
refreshHead = true;
refreshLegL = true;
refreshLegR = true;
}
}
else if (time >= 131261 && time <= 131667) {
if (i % 4 == 0) {
activeArmL = 6;
activeArmR = 1;
activeHead = 2;
activeLegL = 1;
activeLegR = 1;
refreshArmL = true;
refreshArmR = true;
refreshHead = true;
refreshLegL = true;
refreshLegR = true;
}
}
if (time >= 90822 && time < 131464) {
if (i%4 == 0) {
if (time <= 116869) {
light2.fade(time, time + beat, 1, 0.5);
if (time <= 116667) {
for (var j = 0; j < 30; j++) {
makeStar(time, true);
makeStar(time, false);
}
}
else {
for (var j = 0; j < 50; j++) {
var xEasing = 0;
if (j < 25) {
xEasing = 2;
}
makeStar2(time, 0, xEasing);
makeStar2(time, 160, xEasing);
makeStar2(time, 320, xEasing);
makeStar2(time, 480, xEasing);
makeStar2(time, 640, xEasing);
}
}
}
var light = new Sprite("sb/light.png", Foreground, TopCentre);
light.additive(time, time + 4*beat);
if (i%8 == 0) {
light.color(time, 255, 115, 201);
}
else {
light.color(time, 255, 183, 247);
}
light.move(time, 500 + 100*sin(time*deg2Rad*0.36), -20);
light.rotate(time, time + 4*beat, -45 * deg2Rad, 90 * deg2Rad);
light.scale(time, time + 2*dt, 0, 1);
light.scale(time+4*beat-2*dt, time+4*beat, 1, 0);
light.fade(time, time + beat, 0, 1);
light.fade(time + beat * 3, time + beat * 4, 1, 0);
}
if (i%4 == 2) {
var light = new Sprite("sb/light.png", Foreground, TopCentre);
light.additive(time, time + 4*beat);
light.flipH(time, time + 4*beat);
if (i%8 == 2) {
light.color(time, 255, 115, 201);
}
else {
light.color(time, 255, 183, 247);
}
light.move(time, 140 - 100*sin(time*deg2Rad*0.36), -20);
light.rotate(time, time + 4*beat, 45 * deg2Rad, -90 * deg2Rad);
light.scale(time, time + 2*dt, 0, 1);
light.scale(time+4*beat-2*dt, time+4*beat, 1, 0);
light.fade(time, time + beat, 0, 1);
light.fade(time + beat * 3, time + beat * 4, 1, 0);
}
}
if (activeArmL == 1) {
mainCircleHelper(arm1L, mainX - arm1X, mainY + arm1Y, 2, 3, start, dt, i);
if (refreshArmL) {
show(arm1L, time);
hide(arm2L, time);
hide(arm3L, time);
hide(arm4L, time);
hide(arm5L, time);
hide(arm6L, time);
hide(arm7L, time);
refreshArmL = false;
}
}
else if (activeArmL == 2) {
mainCircleHelper(arm2L, mainX - arm2X, mainY + arm2Y, 2, 3, start, dt, i);
if (refreshArmL) {
hide(arm1L, time);
show(arm2L, time);
hide(arm3L, time);
hide(arm4L, time);
hide(arm5L, time);
hide(arm6L, time);
hide(arm7L, time);
refreshArmL = false;
}
}
else if (activeArmL == 3) {
mainCircleHelper(arm3L, mainX - arm3X, mainY + arm3Y, 2, 3, start, dt, i);
if (refreshArmL) {
hide(arm1L, time);
hide(arm2L, time);
show(arm3L, time);
hide(arm4L, time);
hide(arm5L, time);
hide(arm6L, time);
hide(arm7L, time);
refreshArmL = false;
}
}
else if (activeArmL == 4) {
mainCircleHelper(arm4L, mainX - arm4X, mainY + arm4Y, 2, 3, start, dt, i);
if (refreshArmL) {
hide(arm1L, time);
hide(arm2L, time);
hide(arm3L, time);
show(arm4L, time);
hide(arm5L, time);
hide(arm6L, time);
hide(arm7L, time);
refreshArmL = false;
}
}
else if (activeArmL == 5) {
mainCircleHelper(arm5L, mainX - arm5X, mainY + arm5Y, 2, 3, start, dt, i);
if (refreshArmL) {
hide(arm1L, time);
hide(arm2L, time);
hide(arm3L, time);
hide(arm4L, time);
show(arm5L, time);
hide(arm6L, time);
hide(arm7L, time);
refreshArmL = false;
}
}
else if (activeArmL == 6) {
mainCircleHelper(arm6L, mainX - arm6X, mainY + arm6Y, 2, 3, start, dt, i);
if (refreshArmL) {
hide(arm1L, time);
hide(arm2L, time);
hide(arm3L, time);
hide(arm4L, time);
hide(arm5L, time);
show(arm6L, time);
hide(arm7L, time);
refreshArmL = false;
}
}
else {
mainCircleHelper(arm7L, mainX - arm7X, mainY + arm7Y, 2, 3, start, dt, i);
if (refreshArmL) {
hide(arm1L, time);
hide(arm2L, time);
hide(arm3L, time);
hide(arm4L, time);
hide(arm5L, time);
hide(arm6L, time);
show(arm7L, time);
refreshArmL = false;
}
}
if (activeArmR == 1) {
mainCircleHelper(arm1R, mainX + arm1X, mainY + arm1Y, 2, 3, start, dt, i);
if (refreshArmR) {
show(arm1R, time);
hide(arm2R, time);
hide(arm3R, time);
hide(arm4R, time);
hide(arm5R, time);
hide(arm6R, time);
hide(arm7R, time);
refreshArmR = false;
}
}
else if (activeArmR == 2) {
mainCircleHelper(arm2R, mainX + arm2X, mainY + arm2Y, 2, 3, start, dt, i);
if (refreshArmR) {
hide(arm1R, time);
show(arm2R, time);
hide(arm3R, time);
hide(arm4R, time);
hide(arm5R, time);
hide(arm6R, time);
hide(arm7R, time);
refreshArmR = false;
}
}
else if (activeArmR == 3) {
mainCircleHelper(arm3R, mainX + arm3X, mainY + arm3Y, 2, 3, start, dt, i);
if (refreshArmR) {
hide(arm1R, time);
hide(arm2R, time);
show(arm3R, time);
hide(arm4R, time);
hide(arm5R, time);
hide(arm6R, time);
hide(arm7R, time);
refreshArmR = false;
}
}
else if (activeArmR == 4) {
mainCircleHelper(arm4R, mainX + arm4X, mainY + arm4Y, 2, 3, start, dt, i);
if (refreshArmR) {
hide(arm1R, time);
hide(arm2R, time);
hide(arm3R, time);
show(arm4R, time);
hide(arm5R, time);
hide(arm6R, time);
hide(arm7R, time);
refreshArmR = false;
}
}
else if (activeArmR == 5) {
mainCircleHelper(arm5R, mainX + arm5X, mainY + arm5Y, 2, 3, start, dt, i);
if (refreshArmR) {
hide(arm1R, time);
hide(arm2R, time);
hide(arm3R, time);
hide(arm4R, time);
show(arm5R, time);
hide(arm6R, time);
hide(arm7R, time);
refreshArmR = false;
}
}
else if (activeArmR == 6) {
mainCircleHelper(arm6R, mainX + arm6X, mainY + arm6Y, 2, 3, start, dt, i);
if (refreshArmR) {
hide(arm1R, time);
hide(arm2R, time);
hide(arm3R, time);
hide(arm4R, time);
hide(arm5R, time);
show(arm6R, time);
hide(arm7R, time);
refreshArmR = false;
}
}
else {
mainCircleHelper(arm7R, mainX + arm7X, mainY + arm7Y, 2, 3, start, dt, i);
if (refreshArmR) {
hide(arm1R, time);
hide(arm2R, time);
hide(arm3R, time);
hide(arm4R, time);
hide(arm5R, time);
hide(arm6R, time);
show(arm7R, time);
refreshArmR = false;
}
}
if (activeHead == 1) {
mainCircleHelper(head1, mainX + headX, mainY + headY, 3, -1, start, dt, i);
if (refreshHead) {
show(head1, time);
hide(head2, time);
hide(head3, time);
hide(head4, time);
hide(head5, time);
hide(head6, time);
refreshHead = false;
}
}
else if (activeHead == 2) {
mainCircleHelper(head2, mainX + headX, mainY + headY, 3, -1, start, dt, i);
if (refreshHead) {
hide(head1, time);
show(head2, time);
hide(head3, time);
hide(head4, time);
hide(head5, time);
hide(head6, time);
refreshHead = false;
}
}
else if (activeHead == 3) {
mainCircleHelper(head3, mainX + headX, mainY + headY, 3, -1, start, dt, i);
if (refreshHead) {
hide(head1, time);
hide(head2, time);
show(head3, time);
hide(head4, time);
hide(head5, time);
hide(head6, time);
refreshHead = false;
}
}
else if (activeHead == 4) {
mainCircleHelper(head4, mainX + headX, mainY + headY, 3, -1, start, dt, i);
if (refreshHead) {
hide(head1, time);
hide(head2, time);
hide(head3, time);
show(head4, time);
hide(head5, time);
hide(head6, time);
refreshHead = false;
}
}
else if (activeHead == 5) {
mainCircleHelper(head5, mainX + headX, mainY + headY, 3, -1, start, dt, i);
if (refreshHead) {
hide(head1, time);
hide(head2, time);
hide(head3, time);
hide(head4, time);
show(head5, time);
hide(head6, time);
refreshHead = false;
}
}
else {
mainCircleHelper(head6, mainX + headX, mainY + headY, 3, -1, start, dt, i);
if (refreshHead) {
hide(head1, time);
hide(head2, time);
hide(head3, time);
hide(head4, time);
hide(head5, time);
show(head6, time);
refreshHead = false;
}
}
if (activeLegL == 1) {
mainCircleHelper(leg1L, 320 - leg1X, leg1Y, 1, 1, start, dt, i);
if (refreshLegL) {
show(leg1L, time);
hide(leg2L, time);
hide(leg3L, time);
hide(leg4L, time);
hide(leg5L, time);
refreshLegL = false;
}
}
else if (activeLegL == 2) {
mainCircleHelper(leg2L, mainX - leg2X, leg2Y, 1, 1, start, dt, i);
rotateHelper(leg2L, -5 * deg2Rad, 5 * deg2Rad, start, dt, i);
if (refreshLegL) {
show(leg2L, time);
hide(leg1L, time);
hide(leg3L, time);
hide(leg4L, time);
hide(leg5L, time);
refreshLegL = false;
}
}
else if (activeLegL == 3) {
mainCircleHelper(leg3L, 320 - leg3X, leg3Y, 1, 1, start, dt, i);
if (refreshLegL) {
show(leg3L, time);
hide(leg2L, time);
hide(leg1L, time);
hide(leg4L, time);
hide(leg5L, time);
refreshLegL = false;
}
}
else if (activeLegL == 4) {
mainCircleHelper(leg4L, mainX - leg4X, leg4Y, 1, 1, start, dt, i);
rotateHelper(leg4L, -5 * deg2Rad, 5 * deg2Rad, start, dt, i);
if (refreshLegL) {
show(leg4L, time);
hide(leg2L, time);
hide(leg3L, time);
hide(leg1L, time);
hide(leg5L, time);
refreshLegL = false;
}
}
else {
mainCircleHelper(leg5L, 320 - leg5X, leg5Y, 1, 1, start, dt, i);
if (refreshLegL) {
show(leg5L, time);
hide(leg2L, time);
hide(leg3L, time);
hide(leg4L, time);
hide(leg1L, time);
refreshLegL = false;
}
}
if (activeLegR == 1) {
mainCircleHelper(leg1R, 320 + leg1X, leg1Y, 1, 1, start, dt, i);
if (refreshLegR) {
show(leg1R, time);
hide(leg2R, time);
hide(leg3R, time);
hide(leg4R, time);
hide(leg5R, time);
refreshLegR = false;
}
}
else if (activeLegR == 2) {
mainCircleHelper(leg2R, mainX + leg2X, leg2Y, 1, 1, start, dt, i);
rotateHelper(leg2R, 5 * deg2Rad, -5 * deg2Rad, start, dt, i);
if (refreshLegR) {
show(leg2R, time);
hide(leg1R, time);
hide(leg3R, time);
hide(leg4R, time);
hide(leg5R, time);
refreshLegR = false;
}
}
else if (activeLegR == 3) {
mainCircleHelper(leg3R, 320 + leg3X, leg3Y, 1, 1, start, dt, i);
if (refreshLegR) {
show(leg3R, time);
hide(leg2R, time);
hide(leg1R, time);
hide(leg4R, time);
hide(leg5R, time);
refreshLegR = false;
}
}
else if (activeLegR == 4) {
mainCircleHelper(leg4R, mainX + leg4X, leg4Y, 1, 1, start, dt, i);
rotateHelper(leg4R, 5 * deg2Rad, -5 * deg2Rad, start, dt, i);
if (refreshLegR) {
show(leg4R, time);
hide(leg2R, time);
hide(leg3R, time);
hide(leg1R, time);
hide(leg5R, time);
refreshLegR = false;
}
}
else {
mainCircleHelper(leg5R, 320 + leg5X, leg5Y, 1, 1, start, dt, i);
if (refreshLegR) {
show(leg5R, time);
hide(leg2R, time);
hide(leg3R, time);
hide(leg4R, time);
hide(leg1R, time);
refreshLegR = false;
}
}
}
var removeBackground = new Sprite("undertale.png", Background, Centre);
var undertale = new Sprite("undertale.png");
undertale.fade(-1000, 0, 1, 1);
undertale.fade(0, start + beat, 1, 0);
undertale.fade(132680, end + 2*beat, 1, 1);