How to make the best SB :3
Good job and Good lcuk!!
Good job and Good lcuk!!
my freezer is full alreadyEvilElvisV2 wrote:
so what bout babies Damnae?
holy crap what i don't evenNatteke wrote:
DUUUDE
I usually post the sgl script for my storyboards, but I didn't do it with this one because I experimented a lot and it became quite messy.peppy wrote:
Any chance of uploading the SGL script as a gist or something? Would be great to see how easy it was to make that awesome effect, so others can get inspired.
Zero__wind wrote:
Hey Damnae you're famous
var beat_duration = 511 - 162;
var time_intro = 163;
var time_intro_spinner_start = 31732;
var time_part1 = 33651;
var time_part1_a = 44814;
var time_part1_b = 55976;
var time_break = 67139;
var time_part2 = 78302;
var time_part3 = 89465;
var time_part3_spinner_start = 131325;
var time_kiai_start = 134116;
var time_kiai_end = 156093;
var time_part4 = 156442;
var time_part5 = 178767;
var time_end = 187139;
var time_scoreboard = 188535;
var deg_to_rad = 3.14 / 180;
// --- BACKGROUND
var bg_height = 768.0;
var widescreen_scale = 1024.0 / 1366.0;
var sb_scale = 480.0 / bg_height;
var bg = new Sprite("bg.jpg", Background, Centre);
bg.scale(sb_scale);
bg.fade(time_intro, 0);
bg.color(time_intro, 255,255,255);
var chains1_path = "chains.png";
var chains2_path = "title_chains.png";
// -- INTRO
function flash(sprite, time, duration, a0, a1, a2) {
sprite.fade(1, time, time + duration / 2, a0, a1);
sprite.fade(0, time + duration / 2, time + duration, a1, a2);
}
function makeScrollChains(path, start_time, end_time, x, y, chainScale, opacity, angle, length, loops, isAdditive) {
var chainLength = 850 * chainScale;
var dx2 = -sin(angle) * chainLength;
var dy2 = cos(angle) * chainLength;
var dt = (end_time - start_time) / loops;
for (var i = 0; i < length; i++) {
var chains = new Sprite(path, Foreground, Centre);
var dx = sin(angle) * chainLength;
var dy = -cos(angle) * chainLength;
var x0 = x + dx2 * i;
var y0 = y + dy2 * i;
var x1 = x0 + dx;
var y1 = y0 + dy;
if (isAdditive) {
chains.additive(start_time, end_time);
var fadeTime = (end_time - start_time) / 8;
chains.fade(1, start_time, start_time + fadeTime, 0, opacity);
chains.fade(2, end_time - fadeTime, end_time, opacity, 0);
} else {
chains.fade(start_time, opacity);
}
chains.rotate(start_time, angle);
chains.scale(start_time, chainScale);
chains.startLoop(start_time, loops);
chains.move(0, dt, x0, y0, x1, y1);
chains.endLoop();
}
}
makeScrollChains(chains1_path, time_intro, time_part1, -100, 500, 1.4, .8, 15 * deg_to_rad, 2, 2, false);
makeScrollChains(chains1_path, time_intro, time_part1, 260, 400, 1, .9, -20 * deg_to_rad, 2, 3, false);
makeScrollChains(chains1_path, time_intro, time_part1, 430, 200, .6, 1, 200 * deg_to_rad, 2, 1, false);
makeScrollChains(chains1_path, time_intro, time_part1, 530, 500, .4, .7, 160 * deg_to_rad, 3, 2, false);
makeScrollChains(chains1_path, time_intro, time_part1, 540, 500, .2, .5, 190 * deg_to_rad, 4, 3, false);
flash(bg, 2604, beat_duration / 4, 0, 0.2, 0);
flash(bg, 4349, beat_duration / 4, 0, 0.2, 0);
flash(bg, 4697, beat_duration / 4, 0, 0.5, 0);
flash(bg, 5744, beat_duration / 4, 0, 0.1, 0);
flash(bg, 7488, beat_duration / 4, 0, 0.5, 0);
flash(bg, 8186, beat_duration / 4, 0, 0.1, 0);
flash(bg, 9581, beat_duration / 4, 0, 0.1, 0);
flash(bg, 9756, beat_duration / 4, 0, 1, 0);
flash(bg, 10628, beat_duration / 4, 0, 0.5, 0);
flash(bg, 11325, beat_duration, 0,1, 0);
flash(bg, 13069, beat_duration / 4, 0, 0.1, 0);
flash(bg, 13593, beat_duration / 4, 0, 0.5, 0);
flash(bg, 14116, beat_duration, 0, 1, 0);
flash(bg, 15686, beat_duration / 4, 0, 0.5, 0);
flash(bg, 16558, beat_duration / 4, 0, 0.5, 0);
flash(bg, 16907, beat_duration, 0, 1, 0);
flash(bg, 17953, beat_duration / 4, 0, 0.5, 0);
flash(bg, 18302, beat_duration / 4, 0, 0.1, 0);
flash(bg, 18825, beat_duration / 4, 0, 0.5, 0);
flash(bg, 19697, beat_duration * 8, 0, 0.5, 0.2);
flash(bg, 22488, beat_duration * 8, 0, 0.7, 0);
flash(bg, 25279, beat_duration * 8, 0, 1, 0);
flash(bg, 28069, beat_duration * 8, 0, 0.7, 0);
flash(bg, 30860, beat_duration * 8, 0, 0.3, 0);
// -- PART 1
function circleCCMove1(s, t0, t1, x, y, circleSizeX, circleSizeY) {
s.moveX(1, t0, t1, x, x - circleSizeX);
s.moveY(2, t0, t1, y - circleSizeY, y);
}
function circleCCMove2(s, t0, t1, x, y, circleSizeX, circleSizeY) {
s.moveX(2, t0, t1, x - circleSizeX, x);
s.moveY(1, t0, t1, y, y + circleSizeY);
}
function circleCCMove3(s, t0, t1, x, y, circleSizeX, circleSizeY) {
s.moveX(1, t0, t1, x, x + circleSizeX);
s.moveY(2, t0, t1, y + circleSizeY, y);
}
function circleCCMove4(s, t0, t1, x, y, circleSizeX, circleSizeY) {
s.moveX(2, t0, t1, x + circleSizeX, x);
s.moveY(1, t0, t1, y, y - circleSizeY);
}
function makeCircle(path, t0, t1, x, y, circleSize, loops) {
var d = (t1 - t0) / loops;
var qd = d / 4;
var s = new Sprite(path, Foreground, TopCentre);
s.startLoop(t0, loops);
s.rotate(0, d, 0, -3.14 * 2);
circleCCMove1(s, 0, qd, x, y, circleSize, circleSize);
circleCCMove2(s, qd, qd * 2, x, y, circleSize, circleSize);
circleCCMove3(s, qd * 2, qd * 3, x, y, circleSize, circleSize);
circleCCMove4(s, qd * 3, d, x, y, circleSize, circleSize);
s.endLoop();
return s;
}
function makeCircleChain(path, t0, t1, beat_duration, amount, spacing, size, circleSize, rotationSpeed) {
for (var i = 0; i < amount; i++) {
var dt = (beat_duration / 10) * i;
var delay = dt;
var ht0 = t0 + dt;
var ht1 = t1 + dt + delay;
var ht1b = ht1;
if (ht1b > t1) {
ht1b = t1;
}
var x = (i - amount/2) * spacing;
var y = sin(i * 0.1) * 20 + sin(i * 0.3) * 10 + sin(i * 0.06) * 100;
var dx = x;
if (dx < 0) {
dx = -dx;
}
dx = 1.0 - (dx / (amount * spacing * 0.5));
var s = makeCircle(path, ht0, ht1, 320 + x, 240 + y, circleSize, rotationSpeed);
s.fade(1, ht0, ht0 + beat_duration / 2, 0, 0.7 * dx);
s.fade(2, ht1b - beat_duration * 4, ht1b, 0.7 * dx, 0);
s.scale(ht0, size);
if (rand(0, 1) == 1) {
s.flipH(ht0, ht1);
}
if (rand(0, 1) == 1) {
s.flipV(ht0, ht1);
}
s.startTriggerLoop(HitSoundClap, ht0, ht1);
s.scale(0, beat_duration, size * 0.8 + dx, size);
s.endLoop();
var size2 = 0.8;
var s2 = makeCircle(path, ht0, ht1, 320 - x * 0.6, 240 - y, circleSize * 0.8, rotationSpeed / 2);
s2.fade(1, ht0, ht0 + beat_duration / 2, 0, 0.5 * dx);
s2.fade(2, ht1b - beat_duration * 4, ht1b, 0.5 * dx, 0);
s2.scale(ht0, size * size2);
if (rand(0, 1) == 1) {
s2.flipH(ht0, ht1);
}
if (rand(0, 1) == 1) {
s2.flipV(ht0, ht1);
}
s2.startTriggerLoop(HitSoundWhistle, ht0, ht1);
s2.scale(0, beat_duration, size * 0.8 + dx, size);
s2.endLoop();
}
}
flash(bg, time_part1, beat_duration * 4 * 8, 0, 0.4, 0.2);
flash(bg, time_part1_a, beat_duration * 4 * 8, 0.2, 0.4, 0.2);
flash(bg, time_part1_b, beat_duration * 4 * 8, 0.2, 0.4, 0);
makeCircleChain("chain.png", time_part1, time_break, beat_duration, 130, 4, 0.4, 40, 30);
makeScrollChains(chains1_path, time_part1, time_break, 300, 80, 1.1, 1, 92 * deg_to_rad, 2, 2, false);
makeScrollChains(chains1_path, time_part1, time_break, 450, 450, 1.1, 1, -88 * deg_to_rad, 2, 3, false);
// -- BREAK + PART2
function make_fire_spark(t0, x, y) {
var t1 = t0 + rand(3000, 9000);
var spark = new Sprite("sp.png", Foreground, Centre);
var opacity = rand(20, 60) / 100.0;
var size = rand(40, 100) / 100.0;
var fadeT = t0 + (t1 - t0) / 10;
spark.fade(1, t0, fadeT, opacity, opacity);
spark.fade(2, fadeT, t1, opacity, 0);
spark.scale(1, t0, fadeT, size * 0.1, size);
spark.scale(1, fadeT, t1, size, size * 0.3);
spark.move(2, t0, t1, x, y, x, y + rand(100, 400));
spark.additive(t0, t1);
}
function make_fire_spark_line(t0, t1, x0, x1, y) {
var time_a = t0 + (t1 - t0) / 4.0;
var time_b = t0 + 3 * (t1 - t0) / 4.0;
var spark_time = t0;
while (spark_time < t1) {
var delta = (spark_time - t0) / (t1 - t0);
var spark_x = x0 + (x1 - x0) * delta;
make_fire_spark(spark_time, spark_x + rand(-100, 100), y + rand(-100, 100));
if (spark_time < time_a || spark_time > time_b) {
spark_time = spark_time + rand(500, 1000);
} else {
spark_time = spark_time + rand(400, 800);
}
}
}
function make_title_dust(t0, t1, x) {
var time_title_start = t0;
var time_title_end = t1;
var time_title_a = time_title_start + (time_title_end - time_title_start) / 4.0;
var time_title_b = time_title_start + 5 * (time_title_end - time_title_start) / 6.0;
var deg_to_rad = 3.14 / 180;
var start_angle = rand(0, 360);
var x_end = x - 280;
var y = rand(100, 150);
var size = rand(40, 60) / 100.0;
var r = 255 - rand(20, 40);
var g = 205 - rand(50, 70);
var b = 205 - rand(80, 100);
var dust = new Sprite("d.png", Foreground, Centre);
dust.color(time_title_start, time_title_end, r,g,b, r,g,b);
dust.scale(size);
dust.fade(1, time_title_start, time_title_a, 0, 0.7);
dust.fade(time_title_b, time_title_end, 0.7, 0);
dust.move(time_title_start, time_title_end, x, y, x_end, y);
dust.rotate(time_title_start, time_title_end, start_angle * deg_to_rad, (start_angle + 180) * deg_to_rad * size);
if (rand(0, 1) == 1) {
dust.flipH(time_title_start, time_title_end);
}
if (rand(0, 1) == 1) {
dust.flipV(time_title_start, time_title_end);
}
make_fire_spark_line(time_title_a, time_title_b, x, x_end, y);
}
function make_title_effect(t0, t1) {
var x = 700;
for (var i = 0; i < 10; i++) {
make_title_dust(t0 + i * 50, t1 + i * 100, x);
x = x - rand(40, 80);
}
}
function makeGrowingChain(path, t0, t1) {
var deg_to_rad = 3.14 / 180;
var chainScale = rand(10, 15) / 100.0;
var chainLength = 850 * chainScale;
var x = rand(-40, 680);
var y = 512 + 128 * chainScale;
var steps = rand(6, 10);
var dt = (t1 - t0) / steps;
var flip = rand(0, 100) < 50;
for (var i = 0; i < steps; i++) {
var chainAngle = rand(-20, 20) * deg_to_rad;
var ta = t0 + dt * i;
var tb = ta + dt;
var chains = new Sprite(path, Foreground, BottomCentre);
if (flip) {
chains.flipH(t0, t1 + 2000);
}
chains.move(ta, x, y);
chains.rotate(ta, chainAngle);
chains.fade(1, ta, tb, 0, 1);
chains.fade(2, t1, t1 + 2000, 1, 0);
chains.scale(ta, tb, 0, chainScale);
var dx = sin(chainAngle) * chainLength;
var dy = -cos(chainAngle) * chainLength;
x = x + dx;
y = y + dy + 32;
flip = !flip;
}
}
// title
make_title_effect(time_break, time_break + 6000);
makeScrollChains(chains2_path, time_break, 74814, 700, 180, .2, 0.4, 100 * deg_to_rad, 7, 10, true);
makeScrollChains(chains2_path, time_break, 74814, 150, 130, .4, 0.8, -96 * deg_to_rad, 3, 6, true);
makeScrollChains(chains2_path, time_break, 74814, 250, 130, 1, 1, 94 * deg_to_rad, 2, 1, true);
// growing chains
flash(bg, 72721, 88069 - 72721, 0, 1, 0);
for (var i = 0; i < 8 * 4; i++) {
makeGrowingChain("chains.png", 72721 + i * beat_duration / 2, 88069);
}
// mask
var mask = new Sprite("bg.jpg", Foreground, Centre);
mask.scale(sb_scale);
mask.color(0, 0, 0);
mask.fade(0);
mask.startLoop(time_break, 8);
flash(mask, 0, beat_duration * 4, 1, .5, .9);
mask.endLoop();
mask.startLoop(78302, 8);
flash(mask, 0, beat_duration * 4, 1, .2, .9);
mask.endLoop();
// -- PART 3 + KIAI + PART 4
function make_fire_spark2(t0, x, y) {
var t1 = t0 + rand(3000, 9000);
var spark = new Sprite("sp.png", Foreground, Centre);
var opacity = rand(20, 60) / 100.0;
var size = rand(40, 100) / 100.0;
var fadeT = t0 + (t1 - t0) / 10;
spark.fade(1, t0, fadeT, opacity, opacity);
spark.fade(2, fadeT, t1, opacity, 0);
spark.scale(1, t0, fadeT, size * 0.1, size);
spark.scale(1, fadeT, t1, size, size * 0.3);
spark.move(2, t0, t1, x, y, x, y - rand(100, 400));
spark.additive(t0, t1);
}
function make_fire_spark_line2(t0, t1, x0, x1, y) {
var time_a = t0 + (t1 - t0) / 4.0;
var time_b = t0 + 3 * (t1 - t0) / 4.0;
var spark_time = t0;
while (spark_time < t1) {
var delta = (spark_time - t0) / (t1 - t0);
var spark_x = x0 + (x1 - x0) * delta;
make_fire_spark2(spark_time, spark_x + rand(-100, 100), y - rand(-100, 100));
if (spark_time < time_a || spark_time > time_b) {
spark_time = spark_time + rand(500, 1000);
} else {
spark_time = spark_time + rand(400, 800);
}
}
}
function make_title_dust2(t0, t1, x) {
var time_title_start = t0;
var time_title_end = t1;
var time_title_a = time_title_start + (time_title_end - time_title_start) / 4.0;
var time_title_b = time_title_start + 5 * (time_title_end - time_title_start) / 6.0;
var deg_to_rad = 3.14 / 180;
var start_angle = rand(0, 360);
var x_end = x + 280;
var y = 580 - rand(100, 150);
var size = rand(40, 60) / 100.0;
var r = 255 - rand(20, 40);
var g = 205 - rand(50, 70);
var b = 205 - rand(80, 100);
var dust = new Sprite("d.png", Foreground, Centre);
dust.color(time_title_start, time_title_end, r,g,b, r,g,b);
dust.scale(size);
dust.fade(1, time_title_start, time_title_a, 0, 0.7);
dust.fade(time_title_b, time_title_end, 0.7, 0);
dust.move(time_title_start, time_title_end, x, y, x_end, y);
dust.rotate(time_title_start, time_title_end, start_angle * deg_to_rad, (start_angle + 180) * deg_to_rad * size);
if (rand(0, 1) == 1) {
dust.flipH(time_title_start, time_title_end);
}
if (rand(0, 1) == 1) {
dust.flipV(time_title_start, time_title_end);
}
make_fire_spark_line2(time_title_a, time_title_b, x, x_end, y);
}
function make_title_effect2(t0, t1) {
var x = 640 + 280;
for (var i = 0; i < 9; i++) {
make_title_dust(t0 + i * 10, t1 + i * 20, x);
x = x - 100;
}
}
function make_title_effect3(t0, t1) {
var x = -280;
for (var i = 0; i < 9; i++) {
make_title_dust2(t0 + i * 10, t1 + i * 20, x);
x = x + 100;
}
}
function makeCircleChain2(path, t0, t1, beat_duration, amount, spacing, size, circleSize, rotationSpeed) {
for (var i = 0; i < amount; i++) {
var dt = (beat_duration / 10) * i;
var delay = dt;
var ht0 = t0 + dt;
var ht1 = t1 + dt + delay;
var ht1b = ht1;
if (ht1b > t1) {
ht1b = t1;
}
var x = (i - amount/2) * spacing;
var y = sin(i * 0.1) * 20 + sin(i * 0.3) * 10 + sin(i * 0.06) * 100;
var dx = x;
if (dx < 0) {
dx = -dx;
}
dx = 1.0 - (dx / (amount * spacing * 0.5));
var s = makeCircle(path, ht0, ht1, 320 + x, 240 + y, circleSize, rotationSpeed);
s.fade(1, ht0, ht0 + beat_duration / 2, 0, 0.7 * dx);
s.fade(2, ht1b - beat_duration * 4, ht1b, 0.7 * dx, 0);
s.scale(ht0, size);
if (rand(0, 1) == 1) {
s.flipH(ht0, ht1);
}
if (rand(0, 1) == 1) {
s.flipV(ht0, ht1);
}
s.startTriggerLoop(HitSoundClap, ht0, ht1);
s.scale(0, beat_duration, size * 0.6 + dx * 1.4, size);
s.endLoop();
var size2 = 0.8;
var s2 = makeCircle(path, ht0, ht1, 320 - x * 0.6, 240 - y, circleSize * 0.8, rotationSpeed / 2);
s2.fade(1, ht0, ht0 + beat_duration / 2, 0, 0.5 * dx);
s2.fade(2, ht1b - beat_duration * 4, ht1b, 0.5 * dx, 0);
s2.scale(ht0, size * size2);
if (rand(0, 1) == 1) {
s2.flipH(ht0, ht1);
}
if (rand(0, 1) == 1) {
s2.flipV(ht0, ht1);
}
s2.startTriggerLoop(HitSoundFinish, ht0, ht1);
s2.scale(0, beat_duration, size * 0.6 + dx * 1.4, size);
s2.endLoop();
}
}
flash(bg, 89465, beat_duration * 4 * 8, 0, 0.4, 0.2);
flash(bg, 100628, beat_duration * 4 * 8, 0, 0.4, 0.2);
flash(bg, 111790, beat_duration * 4 * 8, 0, 0.4, 0.2);
flash(bg, 122953, beat_duration * 4 * 8, 0, 0.4, 0);
flash(bg, 156442, beat_duration * 4 * 8, 0, 0.4, 0.2);
flash(bg, 167604, beat_duration * 4 * 8, 0, 0.4, 0.2);
makeCircleChain2("chain.png", 89116, 133767, beat_duration, 130, 4, 0.4, 50, 60);
makeCircleChain2("chain.png", 156093, 178767, beat_duration, 130, 4, 0.4, 50, 30);
makeScrollChains(chains1_path, 89465, 133767, 300, 80, 1.1, 1, 92 * deg_to_rad, 2, 8, false);
makeScrollChains(chains1_path, 89465, 133767, 450, 450, 1.1, 1, -88 * deg_to_rad, 2, 10, false);
makeScrollChains(chains1_path, 156093, 178767, 300, 80, 1.1, 1, 92 * deg_to_rad, 2, 4, false);
makeScrollChains(chains1_path, 156093, 178767, 450, 450, 1.1, 1, -88 * deg_to_rad, 2, 5, false);
makeScrollChains(chains2_path, 133767, 156093, 300, 80, 1.1, 1, 92 * deg_to_rad, 2, 20, true);
makeScrollChains(chains2_path, 133767, 156093, 450, 450, 1.1, 1, -88 * deg_to_rad, 2, 24, true);
make_title_effect2(133767, 156442);
make_title_effect3(133767, 156442);
http://puu.sh/9d4GT/e7f675f298.zipTags wrote:
dnb Split The Atom W_h_i_t_e TicClick
Amamiya Yuko wrote: