Change the number in line 5 to
Change the number in line 5 to get different melodies.
Log in to post a comment.
// --- Configuration Système de Niveaux ---
ditty.bpm = 124;
// CHANGE CE CHIFFRE (1 à 4) POUR CHANGER L'INTENSITÉ DU JEU
let gameLevel = 4;
// --- INSTRUMENTS ---
const cyberPluck = synth.def((phase, env) => {
const v = (phase % 1) < 0.5 ? 1 : -1;
return Math.tanh(v * 2) * env.value;
}, { attack: 0.001, release: 0.15 });
const industrialBass = synth.def((phase, env, tick) => {
const v = (phase % 1) * 2 - 1;
// La basse s'ouvre avec le niveau
const cutoff = (0.05 * gameLevel) + Math.abs(Math.sin(tick * 0.3)) * 0.2;
return v * cutoff * env.value;
}, { attack: 0.01, release: 0.25 });
const hardKick = synth.def((phase, env, tick) => {
const p = Math.exp(-tick * 18);
return Math.sin(phase * 2 * Math.PI * (1 + p * 9)) * env.value;
}, { attack: 0.001, release: 0.35 });
const hatSynth = synth.def((phase, env) => (Math.random()*2-1) * env.value, {attack:0.001, release:0.05});
// --- LOGIQUE DE JEU (AUTO-LEVEL UP TOUTES LES 16 MESURES POUR TESTER) ---
loop((i) => {
gameLevel = 1 + Math.floor((ditty.tick / 16) % 4);
sleep(1);
}, { name: 'game_manager' });
// --- SÉQUENÇAGE DYNAMIQUE ---
// 1. MÉLODIE (DÉVERROUILLÉE AU NIVEAU 2)
const tetrisFull = [e5, b4, c5, d5, c5, b4, a4, a4, c5, e5, d5, c5, b4, c5, d5, e5, c5, a4, a4];
loop((i) => {
if (gameLevel >= 2) {
const note = tetrisFull[i % tetrisFull.length];
cyberPluck.play(note, { amp: 0.3 });
// Harmonies de Boss (Niveau 4 uniquement)
if (gameLevel >= 4 && i % 4 === 0) {
cyberPluck.play(note - 12, { amp: 0.2, release: 0.4 });
}
}
sleep(0.25);
}, { name: 'melody_layer' });
// 2. KICK (TOUJOURS PRÉSENT)
loop((i) => {
hardKick.play(c2, { amp: 1.2 });
// Le Rumble n'apparaît qu'au niveau 3
if (gameLevel >= 3 && i % 2 === 1) {
sleep(0.5);
hardKick.play(c1, { amp: 0.5, attack: 0.05, release: 0.15 });
return;
}
sleep(0.5);
}, { name: 'kick_layer' });
// 3. BASSE (ÉVOLUE AVEC LE NIVEAU)
loop((i) => {
const bassNotes = [a1, e1, a1, f1];
industrialBass.play(bassNotes[i % bassNotes.length], {
amp: 0.4 + (gameLevel * 0.1)
});
sleep(0.5);
}, { name: 'bass_layer' });
// 4. HI-HATS (DÉVERROUILLÉS AU NIVEAU 3)
loop((i) => {
if (gameLevel >= 3) {
sleep(0.5);
hatSynth.play(c4, { amp: 0.15 });
sleep(0.5);
} else {
sleep(1);
}
}, { name: 'percussion_layer' });