let W = window.innerWidth; let H = window.innerHeight; const canvas = document.getElementById("canvas"); const context = canvas.getContext("2d"); const maxConfettis = 150; const particles = []; const possibleColors = [ "DodgerBlue", "OliveDrab", "Gold", "Pink", "SlateBlue", "LightBlue", "Gold", "Violet", "PaleGreen", "SteelBlue", "SandyBrown", "Chocolate", "Crimson" ]; function randomFromTo(from, to) { return Math.floor(Math.random() * (to - from + 1) + from); } function confettiParticle() { this.x = Math.random() * W; // x this.y = Math.random() * H - H; // y this.r = randomFromTo(11, 33); // radius this.d = Math.random() * maxConfettis + 11; this.color = possibleColors[Math.floor(Math.random() * possibleColors.length)]; this.tilt = Math.floor(Math.random() * 33) - 11; this.tiltAngleIncremental = Math.random() * 0.07 + 0.05; this.tiltAngle = 0; this.draw = function() { context.beginPath(); context.lineWidth = this.r / 2; context.strokeStyle = this.color; context.moveTo(this.x + this.tilt + this.r / 3, this.y); context.lineTo(this.x + this.tilt, this.y + this.tilt + this.r / 5); return context.stroke(); }; } function Draw() { const results = []; // Magical recursive functional love requestAnimationFrame(Draw); context.clearRect(0, 0, W, window.innerHeight); for (var i = 0; i < maxConfettis; i++) { results.push(particles[i].draw()); } let particle = {}; let remainingFlakes = 0; for (var i = 0; i < maxConfettis; i++) { particle = particles[i]; particle.tiltAngle += particle.tiltAngleIncremental; particle.y += (Math.cos(particle.d) + 3 + particle.r / 2) / 2; particle.tilt = Math.sin(particle.tiltAngle - i / 3) * 15; if (particle.y <= H) remainingFlakes++; // If a confetti has fluttered out of view, // bring it back to above the viewport and let if re-fall. if (particle.x > W + 30 || particle.x < -30 || particle.y > H) { particle.x = Math.random() * W; particle.y = -30; particle.tilt = Math.floor(Math.random() * 10) - 20; } } return results; } window.addEventListener( "resize", function() { W = window.innerWidth; H = window.innerHeight; canvas.width = window.innerWidth; canvas.height = window.innerHeight; }, false ); // Push new confetti objects to `particles[]` for (var i = 0; i < maxConfettis; i++) { particles.push(new confettiParticle()); } // Initialize canvas.width = W; canvas.height = H; Draw();
top of page

Menu:

Get your fill and save your Gil!

Mejillones al Ajillo

A sumptuous serving of delectable mussels smothered

in an oily garlic sauce, each one a perfectly bite-sized burst of flavor.

Trapper's Quiche

Eggs, cheese, and chopped eft blended together and baked in a flaky crust. A favorite amongst Ishgardian nobles.

Boscaiola

A hearty dish of chewy noodles, heaped with a generous portion of seasonal mushrooms and drowned in tomato sauce.

Imam Bayildi

Miniature Doman eggplants stuffed to bursting with juicy marinated vegetables─and enough peppers to knock a trained Fist of Rhalgr monk out cold.

bouisomething.png
trapperquiche.png
spaghet.png
imambiyaldi.png

Mole Loaf

A moist, juicy loaf of ground mole meat and onions, baked to a golden brown. A Thanalanian staple.

moleloaf.png

Full Meals

Warrior's Stew

A simple stew commonly made of diced dzo chuck and whatever vegetables are readily available. A popular dish amongst the nomadic tribes of the Azim Steppe.

stew.png

Banh Xao

A traditional Nangxian dish consisting of meat and vegetables swaddled in a thin shell of crispy fried batter.

banhxao.png

Futo-Maki Rolls

Crisp dried seaweed and sweet vinegared rice rolled into a smorgasbord of sweet and savory fillings. Thought to bring good fortune...or at least end hunger.

futomaki.png

Dodo Omlette

A traditional Plainsfolk dish, made from deftly whisked dodo eggs fried in butter and expertly formed into a soft, fluffy mountain.

dodoomlette.png
bottom of page