Merge remote-tracking branch 'speedrun_comparison/master'
This commit is contained in:
commit
376ab80b03
1 changed files with 171 additions and 0 deletions
171
spddiff.avs
Normal file
171
spddiff.avs
Normal file
|
@ -0,0 +1,171 @@
|
||||||
|
global fontsize = 26
|
||||||
|
|
||||||
|
function DiffClip(clip c, int diff)
|
||||||
|
{ BlankClip(c, diff).Subtitle(String(-diff), align=5, size=c.Height / 8) }
|
||||||
|
|
||||||
|
function PadWithDiff(clip c, int len)
|
||||||
|
{ c.FrameCount < len ? c + DiffClip(c, len - c.FrameCount) : c }
|
||||||
|
|
||||||
|
function DualMonoToStereo(clip left, clip right)
|
||||||
|
{ MergeChannels(ConvertToMono(left), ConvertToMono(right)) }
|
||||||
|
|
||||||
|
function MergeHoriz(clip left, clip right, int audio_index)
|
||||||
|
{
|
||||||
|
v = Overlay(AddBorders(left, 0, 0, right.Width, 0), right, left.Width, 0)
|
||||||
|
return audio_index == 0 \
|
||||||
|
? AudioDub(v, DualMonoToStereo(left, right)) \
|
||||||
|
: audio_index == 1 ? AudioDub(v, left) \
|
||||||
|
: audio_index == 2 ? AudioDub(v, right) \
|
||||||
|
: v
|
||||||
|
}
|
||||||
|
|
||||||
|
function MergeVert(clip top, clip bottom, int audio_index)
|
||||||
|
{
|
||||||
|
v = Overlay(AddBorders(top, 0, 0, 0, bottom.Height), bottom, 0, top.Height)
|
||||||
|
return audio_index == 0 \
|
||||||
|
? AudioDub(v, DualMonoToStereo(top, bottom)) \
|
||||||
|
: audio_index == 1 ? AudioDub(v, top) \
|
||||||
|
: audio_index == 2 ? AudioDub(v, bottom) \
|
||||||
|
: v
|
||||||
|
}
|
||||||
|
|
||||||
|
function Cmp(clip left, clip right)
|
||||||
|
{
|
||||||
|
frames = max(left.FrameCount, right.FrameCount)
|
||||||
|
left = PadWithDiff(left, frames)
|
||||||
|
right = PadWithDiff(right, frames)
|
||||||
|
return MergeHoriz(left, right, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
function TextHoriz(clip c, int frames, string left, string right)
|
||||||
|
{
|
||||||
|
size = fontsize
|
||||||
|
tleft = BlankClip(c, frames, height=size).Subtitle(left, align=2, size=size)
|
||||||
|
tright = BlankClip(c, frames, height=size).Subtitle(right, align=2, size=size)
|
||||||
|
MergeHoriz(tleft, tright, -1)
|
||||||
|
AddBorders(0, 2, 0, 2)
|
||||||
|
}
|
||||||
|
|
||||||
|
function MakeFrameNumberClip(clip c, int frames)
|
||||||
|
{
|
||||||
|
width = fontsize * 5 / 2 + 1
|
||||||
|
halved = (c.Width - width) / 2
|
||||||
|
ShowFrameNumber(BlankClip(c, frames, width=width, height=fontsize + 1), size=fontsize)
|
||||||
|
Crop(0, 5, -0, -0)
|
||||||
|
AddBorders(halved, 0, halved, 4)
|
||||||
|
AddBorders(0, 2, 0, 2)
|
||||||
|
}
|
||||||
|
|
||||||
|
function AdjustClip(clip c, int offset)
|
||||||
|
{
|
||||||
|
# set up your padding and resizing here
|
||||||
|
PointResize(c, c.Width * 2, c.Height * 2)
|
||||||
|
AddBorders(64 + offset, 0, 64 - offset, 0)
|
||||||
|
MergeVert(MakeFrameNumberClip(last.FrameCount), last, 2)
|
||||||
|
AddBorders(0, 16 - 2, 0, 16)
|
||||||
|
}
|
||||||
|
|
||||||
|
# http://tasvideos.org/485M.html
|
||||||
|
global old_name = "phil"
|
||||||
|
global old_date = "2006-02-25"
|
||||||
|
global old_frames = 32248
|
||||||
|
global old_time = "08:57.47"
|
||||||
|
global old_comment = "http://tasvideos.org/985S.html"
|
||||||
|
AviSource("phil5-ddragon-again.avi")+\
|
||||||
|
AviSource("phil5-ddragon-again_part2.avi")+\
|
||||||
|
AviSource("phil5-ddragon-again_part3.avi")
|
||||||
|
Trim(0, old_frames + 1636)
|
||||||
|
#ShowFrameNumber(scroll=true)
|
||||||
|
AdjustClip(0)#-48)
|
||||||
|
global old = last
|
||||||
|
|
||||||
|
# http://tasvideos.org/3211M.html
|
||||||
|
global new_name = "alyosha"
|
||||||
|
global new_date = "2016-08-28"
|
||||||
|
global new_frames = 31869
|
||||||
|
global new_time = "08:50.28"
|
||||||
|
global new_comment = "http://tasvideos.org/5207S.html"
|
||||||
|
AviSource("alyosha-doubledragon-again.avi")+\
|
||||||
|
AviSource("alyosha-doubledragon-again_part2.avi")+\
|
||||||
|
AviSource("alyosha-doubledragon-again_part3.avi")
|
||||||
|
Trim(0, new_frames + 1636)
|
||||||
|
#ShowFrameNumber(scroll=true)
|
||||||
|
AdjustClip(0)#48)
|
||||||
|
global new = last
|
||||||
|
|
||||||
|
# compare by slice
|
||||||
|
function x(int oldStart, int oldEnd, int newStart, int newEnd, string title)
|
||||||
|
{
|
||||||
|
left = Trim(old, oldStart, oldEnd)
|
||||||
|
right = Trim(new, newStart, newEnd)
|
||||||
|
frames = max(left.FrameCount, right.FrameCount)
|
||||||
|
fc = MakeFrameNumberClip(left, frames)
|
||||||
|
TextHoriz(left, frames, old_name + " (" + old_date + ")", new_name + " (" + new_date + ")")
|
||||||
|
MergeVert(last, TextHoriz(left, frames, String(old_frames) + " frames (" + old_time + ")", string(new_frames) + " frames (" + new_time + ")"), -1)
|
||||||
|
MergeVert(last, TextHoriz(left, frames, old_comment, new_comment), -1)
|
||||||
|
MergeVert(last, Cmp(left, right), 2)
|
||||||
|
MergeVert(last, TextHoriz(left, frames, title, title), 1)
|
||||||
|
MergeVert(last, TextHoriz(left, frames, "in " + String(left.FrameCount) + " frames", "in " + String(Right.FrameCount) + " frames"), 1)
|
||||||
|
MergeVert(last, MergeHoriz(fc, fc, -1), 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
# compare by split (start is last split)
|
||||||
|
global prevOldSplit = 0
|
||||||
|
global prevNewSplit = 0
|
||||||
|
function s(int oldSplit, int newSplit, string title)
|
||||||
|
{
|
||||||
|
ot = prevOldSplit
|
||||||
|
nt = prevNewSplit
|
||||||
|
global prevOldSplit = oldSplit + 1
|
||||||
|
global prevNewSplit = newSplit + 1
|
||||||
|
return x(ot, oldSplit, nt, newSplit, title)
|
||||||
|
}
|
||||||
|
|
||||||
|
# TODO: frames gained/lost in corner per file
|
||||||
|
|
||||||
|
s( 1557, 1547, "first screen scroll")+\
|
||||||
|
s( 1869, 1862, "first door opening")+\
|
||||||
|
s( 2123, 2143, "second screen scroll")+\
|
||||||
|
s( 3041, 3067, "third screen scroll")+\
|
||||||
|
s( 3973, 4017, "door entered")+\
|
||||||
|
s( 4729, 4817, "mission completed")+\
|
||||||
|
s( 5943, 6059, "first screen scroll")+\
|
||||||
|
s( 6489, 6601, "background visible again")+\
|
||||||
|
s( 7118, 7229, "second screen scroll")+\
|
||||||
|
s( 7604, 7713, "top of first ladder")+\
|
||||||
|
s( 7988, 8094, "top of second ladder")+\
|
||||||
|
s( 8316, 8416, "top of third ladder")+\
|
||||||
|
s( 8649, 8749, "first door opening")+\
|
||||||
|
s( 9291, 9393, "mission completed")+\
|
||||||
|
s(10515,10611, "first screen scroll")+\
|
||||||
|
s(11695,11747, "second screen scroll")+\
|
||||||
|
s(12514,12581, "third screen scroll")+\
|
||||||
|
s(13412,13543, "fourth screen scroll")+\
|
||||||
|
s(14588,14773, "door entered")+\
|
||||||
|
s(15369,15548, "platformer begin")+\
|
||||||
|
s(15764,15933, "platformer finished")+\
|
||||||
|
s(16087,16256, "first door opening")+\
|
||||||
|
s(16941,17111, "door entered")+\
|
||||||
|
s(17008,17179, "loaded")+\
|
||||||
|
s(17794,17984, "first screen scroll")+\
|
||||||
|
s(18793,18983, "black screen")+\
|
||||||
|
s(19398,19608, "boss defeated")+\
|
||||||
|
s(20776,20994, "mission completed")+\
|
||||||
|
s(22572,22804, "first screen scroll")+\
|
||||||
|
s(23183,23400, "climbed wall")+\
|
||||||
|
s(24076,24398, "black screen")+\
|
||||||
|
s(24326,24642, "top of first ladder")+\
|
||||||
|
s(24788,25108, "top of second ladder")+\
|
||||||
|
s(25606,25917, "top of third ladder")+\
|
||||||
|
s(26147,26446, "top of fourth ladder")+\
|
||||||
|
s(26283,26642, "black screen")+\
|
||||||
|
s(27623,27788, "first screen scroll")+\
|
||||||
|
s(27951,28118, "first door opening")+\
|
||||||
|
s(28800,28585, "second door opening")+\
|
||||||
|
s(29492,29152, "third door opening")+\
|
||||||
|
s(29660,29320, "fourth door opening")+\
|
||||||
|
s(29944,29545, "fifth door opening")+\
|
||||||
|
s(30683,30290, "sixth door opening")+\
|
||||||
|
s(old_frames,new_frames, "end of input")+\
|
||||||
|
s( 0, 0, "end of game")
|
||||||
|
AddBorders(0, 16, 0, 16)
|
Loading…
Reference in a new issue