function badgeCode(g, context, frameNumber) {
frameNumber = 11 - frameNumber;
context.fillStyle = "#34495e";
context.fillRect(0, 0, width, height);
const sideLength = 20;
const numberOfLines = 100;
const line = g.selectAll("g")
.data(d3.range(numberOfLines))
.join("g")
.attr("transform", `translate(-${width/4},${height/3}) rotate(-40)`);
line.append("rect")
.attr("width", width * 1.2)
.attr("height", sideLength)
.attr("x", i => i * sideLength * 1.1 - frameNumber * 20 + Math.sin(i * 0.5 - frameNumber) * 10)
.attr("y", i => i * sideLength * 6)
.attr("fill", "#22a6b3");
const fn = x => Math.pow(x, 2) * -4/(frameNumber*12) + 10 - frameNumber * 0.46;
var x = d3.scaleLinear()
.range([0, width]);
var y = d3.scaleLinear()
.range([height, 0]);
const curveLine = d3.line()
.x(function (d) {return x(d.x);})
.y(function (d) {return y(d.y);})
.curve(d3.curveMonotoneX);
const data = [];
d3.range(-30, 30).forEach((function (d) {
if (fn(d) < 0) {
data.push({x:d, y:0});
return;
}
data.push({x:d, y:fn(d)});
}));
const generateTentacles = (start, curveOffset, frameOffset, vOffset=0) =>
`M ${start} ${40 + vOffset}, Q ${start + curveOffset - frameOffset} ${60 + vOffset},
${start} ${80 + vOffset}, ${start - curveOffset + frameOffset} ${100 + vOffset},
${start}, ${120 + vOffset}, T ${start} ${160 + vOffset}`;
g.append("g").attr("transform", `translate(${width * 0.26},${height*0.38}) scale(5) rotate(40)`)
.append('path')
.attr('d',
generateTentacles(60, 10, -frameNumber * 4, -frameNumber*5)
+ generateTentacles(75, 15, -frameNumber * 3, -frameNumber*4)
+ generateTentacles(90, 5, -frameNumber * 2, -frameNumber*3)
+ generateTentacles(105, -5, frameNumber * 2, -frameNumber*3)
+ generateTentacles(120, -15, frameNumber * 2, -frameNumber*4)
+ generateTentacles(135, -10, frameNumber * 4, -frameNumber*5))
.attr("fill", "none")
.attr("stroke", '#000')
.attr("stroke-width", "4px");
g.append("g").attr("transform", `translate(${width*0.6},${height*0.64}) scale(0.036) rotate(40)`)
.append('path')
.datum(data)
.attr('d', curveLine)
.attr("fill", '#000')
.attr("stroke", "none")
.attr("stroke-width", "500px");
g.append("g").attr("transform", `translate(${width * 0.24},${height*0.37}) scale(5) rotate(40)`)
.append('path')
.attr('d',
generateTentacles(60, 10, -frameNumber * 4, -frameNumber*5)
+ generateTentacles(75, 15, -frameNumber * 3, -frameNumber*4)
+ generateTentacles(90, 5, -frameNumber * 2, -frameNumber*3)
+ generateTentacles(105, -5, frameNumber * 2, -frameNumber*3)
+ generateTentacles(120, -15, frameNumber * 2, -frameNumber*4)
+ generateTentacles(135, -10, frameNumber * 4, -frameNumber*5))
.attr("fill", "none")
.attr("stroke", d3.interpolateOrRd((11-frameNumber)/40))
.attr("stroke-width", "5px");
g.append("g").attr("transform", `translate(${width*0.52},${height*0.65}) scale(0.036) rotate(40)`)
.append('path')
.datum(data)
.attr('d', curveLine)
.attr("fill", d3.interpolateOrRd((11-frameNumber)/40))
.attr("stroke", "none")
.attr("stroke-width", "500px");
g.append("g").attr("transform", `translate(${width * 0.4},${height*0.32}) scale(5) rotate(40)`)
.append('path')
.attr('d', `M 60 ${25+frameNumber} L 60 ${40+frameNumber} M 100 ${25+frameNumber} L 100 ${40+frameNumber}`)
.attr("fill", "none")
.attr("stroke-linecap", "round")
.attr("stroke", 'black')
.attr("stroke-width", "5px");
}