Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
/****
* Plugins
****/
var storage = LK.import("@upit/storage.v1");
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var ManualAnimation = Container.expand(function (options) {
var self = Container.call(this);
options = options || {};
self.frames = options.frames || [];
self.frameDuration = options.frameDuration || 80;
self.loop = options.loop !== undefined ? options.loop : true;
self.currentFrame = 0;
self.intervalId = null;
self.playing = false;
self.onComplete = options.onComplete || null;
self.anchor = {
set: function set(x, y) {
if (!self.pivot) {
self.pivot = {};
}
self.pivot.x = 850 * x;
self.pivot.y = 200 * y;
}
};
if (options.x !== undefined) {
self.x = options.x;
}
if (options.y !== undefined) {
self.y = options.y;
}
var setFrame = function setFrame(frameIndex) {
console.log(">> setFrame: Ustawiam klatke na indeks: " + frameIndex);
self.removeChildren();
var frame = self.frames[frameIndex];
if (frame) {
if (typeof currentEyeColor !== 'undefined') {
var newTint = (Math.floor(currentEyeColor.r) << 16) + (Math.floor(currentEyeColor.g) << 8) + Math.floor(currentEyeColor.b);
frame.tint = newTint;
}
self.addChild(frame);
}
};
self.gotoFrame = function (frameIndex) {
console.log(">> gotoFrame: Przechodze do klatki: " + frameIndex);
if (frameIndex >= 0 && frameIndex < self.frames.length) {
self.currentFrame = frameIndex;
setFrame(self.currentFrame);
}
};
self.play = function () {
console.log(">> play: START. Klatka: " + self.currentFrame + ", playing: " + self.playing + ", klatek w sekwencji: " + self.frames.length);
if (self.playing || self.frames.length === 0) {
return;
}
self.playing = true;
setFrame(self.currentFrame);
self.intervalId = LK.setInterval(function () {
if (!self.playing || self.destroyed) {
LK.clearInterval(self.intervalId);
return;
}
self.currentFrame++;
if (self.currentFrame >= self.frames.length) {
if (self.loop) {
self.currentFrame = 0;
} else {
console.log(">> play: Animacja ukonczona, onComplete zaraz sie odpali. Zatrzyuje interwal.");
self.playing = false;
LK.clearInterval(self.intervalId);
if (self.onComplete) {
self.onComplete();
}
return;
}
}
setFrame(self.currentFrame);
}, self.frameDuration);
};
self.stop = function () {
console.log(">> stop: STOP. Klatka: " + self.currentFrame + ", playing: " + self.playing);
self.playing = false;
if (self.intervalId) {
LK.clearInterval(self.intervalId);
self.intervalId = null;
}
};
var originalDestroy = self.destroy;
self.destroy = function () {
self.stop();
if (originalDestroy) {
originalDestroy.call(self);
}
};
return self;
});
var Note = Container.expand(function (noteType, swipeDir, targetHitTimeFull, centerXVal, noteColumnIndex, isIncomingBuffNote, incomingBuffType, holdDurationMs) {
var self = Container.call(this);
self.noteColumnIndex = noteColumnIndex;
self.noteType = noteType || 'tap';
self.swipeDir = swipeDir || null;
self.targetHitTime = targetHitTimeFull;
self.visualSpawnTime = self.targetHitTime - noteTravelTime;
self.hit = false;
self.judged = false;
self.scaleStart = 1.0;
self.scaleEnd = 1.0;
self.centerX = centerXVal;
self.centerY = 1800;
self.startY = -150;
self.noteAsset = null;
self.brightnessOverlay = null;
self.isWiderSwipePart = false;
self.isBuffNote = isIncomingBuffNote || false;
self.buffType = incomingBuffType || null;
self.isHoldNote = self.noteType === 'hold';
self.holdDuration = self.isHoldNote ? holdDurationMs || 1000 : 0;
self.holdPressTime = 0;
self.isBeingHeld = false;
self.holdFullyCompleted = false;
self.holdBroken = false;
self.initialHoldHeight = 0;
self.feedbackShownForBroken = false;
self.holdButton = null;
self.yOffset = 0;
if (self.isBuffNote) {
var buffAssetKey = '';
if (self.buffType === 'potion') {
buffAssetKey = 'hpPotionAsset';
} else if (self.buffType === 'shield') {
buffAssetKey = 'shieldAsset';
} else if (self.buffType === 'precision') {
buffAssetKey = 'precisionAsset';
}
if (buffAssetKey) {
self.noteAsset = self.attachAsset(buffAssetKey, {
anchorX: 0.5,
anchorY: 0.5,
width: 400,
height: 400
});
}
if (self.isBuffNote) {
self.noteType = 'tap';
self.isHoldNote = false;
}
} else if (self.isHoldNote) {
var pixelsPerMs = (self.centerY - self.startY) / noteTravelTime;
var calculatedTotalHeight = Math.max(50, self.holdDuration * pixelsPerMs);
self.initialHoldHeight = calculatedTotalHeight;
var holdAssetKey = 'hold';
var calculatedYOffset;
if (noteColumnIndex === 1) {
holdAssetKey = 'hold1';
calculatedYOffset = 135;
} else if (noteColumnIndex === 2) {
holdAssetKey = 'hold2';
calculatedYOffset = 225;
} else {
holdAssetKey = 'hold';
calculatedYOffset = 185;
}
self.yOffset = calculatedYOffset;
self.noteAsset = self.attachAsset(holdAssetKey, {
anchorX: 0.5,
anchorY: 1,
y: self.yOffset,
height: self.initialHoldHeight
});
var holdButtonAssetKey;
if (noteColumnIndex === 0) {
holdButtonAssetKey = 'holdButtonAsset_col0';
} else if (noteColumnIndex === 1) {
holdButtonAssetKey = 'holdButtonAsset_col1';
} else {
holdButtonAssetKey = 'holdButtonAsset_col2';
}
self.holdButton = self.attachAsset(holdButtonAssetKey, {
anchorX: 0.5,
anchorY: 1,
y: self.yOffset,
interactive: true,
cursor: "pointer"
});
self.brightnessOverlay = self.attachAsset('brightnessOverlayAsset', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: self.yOffset,
width: 200,
height: 200,
alpha: 0,
visible: true
});
} else {
if (self.noteType === 'tap') {
var tapAssetKey = 'tap0';
if (noteColumnIndex !== undefined) {
if (noteColumnIndex === 0) {
tapAssetKey = 'tap0';
} else if (noteColumnIndex === 1) {
tapAssetKey = 'tap1';
} else if (noteColumnIndex === 2) {
tapAssetKey = 'tap2';
}
}
self.noteAsset = self.attachAsset(tapAssetKey, {
anchorX: 0.5,
anchorY: 0.5
});
self.noteAsset.scaleX = 1.3;
self.noteAsset.scaleY = 1.3;
} else if (self.noteType === 'swipe') {
var swipeAssetKey = 'swipe_col0';
if (noteColumnIndex !== undefined) {
if (noteColumnIndex === 0) {
swipeAssetKey = 'swipe_col0';
} else if (noteColumnIndex === 1) {
swipeAssetKey = 'swipe_col1';
} else if (noteColumnIndex === 2) {
swipeAssetKey = 'swipe_col2';
}
}
self.noteAsset = self.attachAsset(swipeAssetKey, {
anchorX: 0.5,
anchorY: 0.5
});
if (self.swipeDir && self.noteAsset) {
var rotationAngle = 0;
if (self.swipeDir === 'left') {
rotationAngle = Math.PI;
} else if (self.swipeDir === 'right') {
rotationAngle = 0;
} else if (self.swipeDir === 'up') {
rotationAngle = -Math.PI / 2;
} else if (self.swipeDir === 'down') {
rotationAngle = Math.PI / 2;
}
self.noteAsset.rotation = rotationAngle;
}
} else if (self.noteType === 'trap') {
self.noteAsset = self.attachAsset('trapNote', {
anchorX: 0.5,
anchorY: 0.5
});
}
}
self.alpha = 0;
self.showHitFeedback = function (result, feedbackTextOverride) {
var feedbackCircle = LK.getAsset('hitFeedback', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: self.yOffset,
scaleX: 0.7,
scaleY: 0.7,
alpha: 0.7
});
if (self.isHoldNote) {
feedbackCircle.x = 0;
} else if (self.noteAsset && self.noteAsset.anchorY === 0) {
feedbackCircle.y = self.noteAsset.height / 2;
} else if (self.noteAsset && self.noteAsset.anchorY === 0.5) {
feedbackCircle.x = 0;
feedbackCircle.y = 0;
}
var feedbackTextContent = feedbackTextOverride || "";
var feedbackTextColor = 0xFFFFFF;
if (!feedbackTextOverride) {
if (self.isBuffNote && result !== 'miss') {
feedbackCircle.tint = 0x40E0D0;
feedbackTextContent = self.buffType.charAt(0).toUpperCase() + self.buffType.slice(1) + "!";
feedbackTextColor = 0x40E0D0;
} else if (result === 'perfect') {
feedbackCircle.tint = 0xffff00;
feedbackTextContent = "Perfect!";
feedbackTextColor = 0xffff00;
} else if (result === 'good') {
feedbackCircle.tint = 0x00ff00;
feedbackTextContent = "Good!";
feedbackTextColor = 0x00ff00;
} else if (result === 'hold_ok') {
feedbackCircle.tint = 0x00FF7F;
feedbackTextContent = "Held!";
feedbackTextColor = 0x00FF7F;
} else {
feedbackCircle.tint = 0xff0000;
feedbackTextContent = result === 'hold_broken' ? "Broken!" : "Miss";
feedbackTextColor = 0xff0000;
}
}
self.addChild(feedbackCircle);
tween(feedbackCircle, {
alpha: 0,
scaleX: 1.5,
scaleY: 1.5
}, {
duration: 350,
easing: tween.easeOut,
onFinish: function onFinish() {
if (feedbackCircle.parent) {
feedbackCircle.destroy();
}
}
});
if (feedbackTextContent) {
var scorePopup = new Text2(feedbackTextContent, {
size: 60,
fill: feedbackTextColor,
stroke: 0x000000,
strokeThickness: 3
});
scorePopup.anchor.set(0.5, 0.5);
var initialYPopup;
var noteVisualHeightForFeedback = self.noteAsset ? self.noteAsset.height : SWIPE_NOTE_WIDTH;
if (self.isHoldNote && self.noteAsset) {
initialYPopup = self.y - self.noteAsset.width * 0.25 - 30;
} else if (self.noteAsset && self.noteAsset.anchorY === 0.5) {
initialYPopup = self.y - noteVisualHeightForFeedback / 2 - 30;
} else {
initialYPopup = self.y - 30;
}
scorePopup.x = self.x;
scorePopup.y = initialYPopup;
if (self.parent) {
self.parent.addChild(scorePopup);
tween(scorePopup, {
y: initialYPopup - 80,
alpha: 0
}, {
duration: 700,
easing: tween.easeOut,
onFinish: function onFinish() {
if (scorePopup.parent) {
scorePopup.destroy();
}
}
});
}
}
if (self.parent && (result === 'good' || result === 'perfect' || result === 'hold_ok')) {
var particleSpawnX = self.x;
var particleSpawnY;
if (self.isHoldNote && self.noteAsset) {
particleSpawnY = self.y - self.noteAsset.width * 0.25;
} else if (self.noteAsset && self.noteAsset.anchorY === 0.5) {
particleSpawnY = self.y;
} else if (self.noteAsset) {
particleSpawnY = self.y + self.noteAsset.height / 2;
} else {
particleSpawnY = self.y;
}
spawnParticleEffect(particleSpawnX, particleSpawnY, result, self.parent);
}
};
self.update = function () {
var now = Date.now();
if (!self.judged && isFinalBossActive && autoplayColumns[self.noteColumnIndex] && self.noteType !== 'trap') {
if (now >= self.targetHitTime - 16) {
self.judged = true;
var result = 'perfect';
if (self.isHoldNote) {
self.showHitFeedback('hold_ok', 'Auto-Held!');
addScore(result);
} else {
self.showHitFeedback(result, 'Auto!');
addScore(result);
}
addCombo();
flashColumn(self.noteColumnIndex);
if (!isTutorialMode && !gameOverFlag) {
bossCurrentHP = Math.max(0, bossCurrentHP - 2);
updateBossHpDisplay();
}
self.alpha = 0;
return;
}
}
if (self.judged) {
if (self.alpha > 0) {
self.alpha = 0;
}
if (self.brightnessOverlay) {
self.brightnessOverlay.alpha = 0;
}
return;
}
if (self.alpha === 0 && now >= self.visualSpawnTime) {
self.alpha = 1;
}
if (self.alpha === 0) {
return;
}
if (self.isHoldNote && self.isBeingHeld) {
if (self.holdBroken) {
self.isBeingHeld = false;
self.judged = true;
if (self.brightnessOverlay) {
self.brightnessOverlay.alpha = 0;
}
if (!self.feedbackShownForBroken) {
self.showHitFeedback('hold_broken');
self.feedbackShownForBroken = true;
}
return;
}
if (self.noteAsset) {
if (now >= self.targetHitTime) {
var timeHeldPastHitLine = now - self.targetHitTime;
var pixelsPerMs = (self.centerY - self.startY) / noteTravelTime;
var pixelsConsumed = Math.min(timeHeldPastHitLine * pixelsPerMs, self.initialHoldHeight);
self.noteAsset.height = Math.max(0, self.initialHoldHeight - pixelsConsumed);
} else {
self.noteAsset.height = self.initialHoldHeight;
}
}
if (self.brightnessOverlay && !self.holdBroken) {}
if (now >= self.targetHitTime + self.holdDuration && !self.holdFullyCompleted) {
self.holdFullyCompleted = true;
}
var progressHold = (now - self.visualSpawnTime) / noteTravelTime;
var newYHold = self.startY + (self.centerY - self.startY) * progressHold;
if (newYHold >= self.centerY || self.y === self.centerY) {
self.y = self.centerY;
} else {
self.y = newYHold;
}
self.x = self.centerX;
return;
} else if (self.isHoldNote && self.brightnessOverlay) {
self.brightnessOverlay.alpha = 0;
}
var progress = (now - self.visualSpawnTime) / noteTravelTime;
self.y = self.startY + (self.centerY - self.startY) * progress;
self.x = self.centerX;
if (!self.judged) {
var currentTime = Date.now();
if (self.isHoldNote && self.holdPressTime === 0) {
if (currentTime > self.targetHitTime + hitWindowGood + ADDITIONAL_HOLD_MISS_DELAY) {
self.judged = true;
self.showHitFeedback('miss');
if (!isTutorialMode && !isShieldActive) {
resetCombo();
}
}
} else if (self.noteType !== 'trap' && !self.isHoldNote) {
if (currentTime > self.targetHitTime + hitWindowGood) {
self.judged = true;
if (self.isBuffNote) {
self.showHitFeedback('miss');
if (!isTutorialMode && !isShieldActive) {
resetCombo();
}
} else {
game.onNoteMiss(self);
}
}
}
}
};
self.isInHitWindow = function () {
var now = Date.now();
var dt = Math.abs(now - self.targetHitTime);
return dt <= hitWindowGood;
};
self.getHitAccuracy = function () {
var now = Date.now();
var dt = Math.abs(now - self.targetHitTime);
if (dt <= hitWindowPerfect) {
return 'perfect';
}
if (dt <= hitWindowGood) {
return 'good';
}
return 'miss';
};
self.judgeHoldRelease = function () {
if (self.brightnessOverlay) {
self.brightnessOverlay.alpha = 0;
}
if (!self.isHoldNote || self.judged && self.holdFullyCompleted && !self.holdBroken) {
if (self.isBeingHeld) {
self.isBeingHeld = false;
}
return;
}
var now = Date.now();
self.isBeingHeld = false;
self.judged = true;
if (self.holdBroken) {
if (!self.feedbackShownForBroken) {
self.showHitFeedback('hold_broken');
self.feedbackShownForBroken = true;
}
if (!isTutorialMode && !isShieldActive) {
resetCombo();
}
if (self.alpha > 0) {
self.alpha = 0;
}
if (self.noteColumnIndex !== undefined) {
if (!isFinalBossActive) {
var overlay = columnFlashOverlays[self.noteColumnIndex];
if (overlay) {
tween(overlay, {
alpha: 0
}, {
duration: 150,
easing: tween.easeOutQuad
});
}
}
}
return;
}
var requiredHoldTimeOnScreen = self.targetHitTime + self.holdDuration;
if (now >= requiredHoldTimeOnScreen - hitWindowGood) {
self.holdFullyCompleted = true;
self.showHitFeedback('hold_ok');
if (!isTutorialMode) {
addScore('perfect');
addCombo();
if (!gameOverFlag) {
bossCurrentHP = Math.max(0, bossCurrentHP - 2);
updateBossHpDisplay();
}
}
} else {
self.showHitFeedback('miss', 'Too Early!');
if (!isTutorialMode && !isShieldActive) {
resetCombo();
}
}
if (self.alpha > 0) {
self.alpha = 0;
}
if (self.noteColumnIndex !== undefined) {
if (!isFinalBossActive) {
var overlay = columnFlashOverlays[self.noteColumnIndex];
if (overlay) {
tween(overlay, {
alpha: 0
}, {
duration: 150,
easing: tween.easeOutQuad
});
}
}
}
};
return self;
});
var SpriteAnimation = Container.expand(function (options) {
var self = Container.call(this);
options = options || {};
self.frames = options.frames || [];
self.frameDuration = options.frameDuration || 120;
self.loop = options.loop !== undefined ? options.loop : true;
self.currentFrame = 0;
self.frameTimer = 0;
self.playing = true;
self.alpha = options.alpha !== undefined ? options.alpha : 1;
if (options.x !== undefined) {
self.x = options.x;
}
if (options.y !== undefined) {
self.y = options.y;
}
if (options.anchorX !== undefined || options.anchorY !== undefined) {
var anchorX = options.anchorX !== undefined ? options.anchorX : 0;
var anchorY = options.anchorY !== undefined ? options.anchorY : 0;
self.frames.forEach(function (frame) {
if (frame && frame.anchor) {
frame.anchor.set(anchorX, anchorY);
}
});
}
if (self.frames.length > 0) {
self.removeChildren();
var firstFrame = self.frames[self.currentFrame];
if (firstFrame && firstFrame.anchor) {
firstFrame.anchor.set(options.anchorX || 0, options.anchorY || 0);
}
if (firstFrame) {
firstFrame.alpha = self.alpha;
}
self.addChild(firstFrame);
}
self.update = function () {
if (!self.playing || self.frames.length === 0) {
return;
}
self.frameTimer++;
if (self.frameTimer >= self.frameDuration / (1000 / 60)) {
self.frameTimer = 0;
if (self.children.length > 0) {
self.removeChild(self.children[0]);
}
self.currentFrame++;
if (self.currentFrame >= self.frames.length) {
if (self.loop) {
self.currentFrame = 0;
var nextFrame = self.frames[self.currentFrame];
if (nextFrame) {
nextFrame.alpha = self.alpha;
}
self.addChild(nextFrame);
} else {
self.playing = false;
if (typeof self.onComplete === 'function') {
self.onComplete();
}
return;
}
} else {
var nextFrame = self.frames[self.currentFrame];
if (nextFrame) {
nextFrame.alpha = self.alpha;
}
self.addChild(nextFrame);
}
}
};
self.stop = function () {
self.playing = false;
};
self.play = function () {
self.playing = true;
};
self.gotoFrame = function (frameIndex) {
if (frameIndex >= 0 && frameIndex < self.frames.length) {
self.removeChildren();
self.currentFrame = frameIndex;
self.addChild(self.frames[self.currentFrame]);
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x181828
});
/****
* Game Code
****/
// Placeholder strzałki
// np. węższa środkowa
// Pomarańczowa główka
// Złoty segment ogona (wysokość bazowa)
// np. pomarańczowy/żółty box
// np. fioletowy box
1;
function _typeof6(o) {
"@babel/helpers - typeof";
return _typeof6 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof6(o);
}
function _defineProperty(e, r, t) {
return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
value: t,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[r] = t, e;
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == _typeof6(i) ? i : i + "";
}
function _toPrimitive(t, r) {
if ("object" != _typeof6(t) || !t) {
return t;
}
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof6(i)) {
return i;
}
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
var noteStreamStarted = false;
var lastNoteGenerationTime = 0;
var currentScreenState = '';
var columnFlashOverlays = [null, null, null];
var mainMenuScreenElements = [];
var isTutorialMode = false;
var HOLD_HITBOX_WIDTH = 250;
var HOLD_HITBOX_HEIGHT = 250;
var currentlyHeldNotes = {};
var tutorialSongData = {
id: "TutorialTrack",
title: "How to Play",
artist: "Game System",
musicAsset: "tutorial",
bossAssetKey: null,
config: {
playerMaxHP: 10,
bossMaxHP: 1
},
rawRhythmMap: [{
time: 12000,
type: "tap",
columnIndex: 0
}, {
time: 12524,
type: "tap",
columnIndex: 1
}, {
time: 12978,
type: "tap",
columnIndex: 2
}, {
time: 16966,
type: "swipe",
columnIndex: 0,
swipeDir: "right"
}, {
time: 20420,
type: "swipe",
columnIndex: 2,
swipeDir: "left"
}, {
time: 24711,
type: "tap",
columnIndex: 0
}, {
time: 25125,
type: "tap",
columnIndex: 1
}, {
time: 25510,
type: "tap",
columnIndex: 2
}, {
time: 25934,
type: "tap",
columnIndex: 1
}, {
time: 39597,
type: "tap",
columnIndex: 0
}, {
time: 40031,
type: "swipe",
columnIndex: 0,
swipeDir: "up"
}, {
time: 40484,
type: "tap",
columnIndex: 1
}, {
time: 41747,
type: "tap",
columnIndex: 0
}, {
time: 42204,
type: "tap",
columnIndex: 1
}, {
time: 42626,
type: "tap",
columnIndex: 0
}, {
time: 51606,
type: "hold",
columnIndex: 1,
duration: 2000
}, {
time: 66984,
type: "tap",
columnIndex: 0
}, {
time: 67396,
type: "tap",
columnIndex: 0
}, {
time: 67863,
type: "tap",
columnIndex: 1
}, {
time: 68315,
type: "swipe",
columnIndex: 1,
swipeDir: "up"
}, {
time: 68764,
type: "tap",
columnIndex: 0
}, {
time: 69171,
type: "tap",
columnIndex: 0
}, {
time: 69629,
type: "tap",
columnIndex: 2
}, {
time: 69818,
type: "tap",
columnIndex: 2
}, {
time: 70008,
type: "tap",
columnIndex: 2
}, {
time: 70449,
type: "tap",
columnIndex: 0
}, {
time: 71766,
type: "hold",
columnIndex: 1,
duration: 1094
}, {
time: 73943,
type: "tap",
columnIndex: 0
}, {
time: 75129,
type: "tap",
columnIndex: 0
}, {
time: 75572,
type: "swipe",
columnIndex: 1,
swipeDir: "up"
}, {
time: 76046,
type: "tap",
columnIndex: 0
}, {
time: 76470,
type: "tap",
columnIndex: 0
}, {
time: 76653,
type: "tap",
columnIndex: 0
}, {
time: 76833,
type: "tap",
columnIndex: 0
}, {
time: 76999,
type: "tap",
columnIndex: 0
}, {
time: 77326,
type: "swipe",
columnIndex: 1,
swipeDir: "up"
}, {
time: 80766,
type: "tap",
columnIndex: 0
}, {
time: 81199,
type: "tap",
columnIndex: 0
}, {
time: 81586,
type: "tap",
columnIndex: 0
}, {
time: 81816,
type: "tap",
columnIndex: 0
}, {
time: 82002,
type: "tap",
columnIndex: 0
}, {
time: 84273,
type: "tap",
columnIndex: 0
}, {
time: 84674,
type: "tap",
columnIndex: 0
}, {
time: 85091,
type: "tap",
columnIndex: 1
}, {
time: 85919,
type: "tap",
columnIndex: 2
}, {
time: 86772,
type: "swipe",
columnIndex: 1,
swipeDir: "up"
}, {
time: 87770,
type: "tap",
columnIndex: 0
}],
isTutorial: true
};
var hasShownInitialMenuAnimation = false;
var statsScreenElements = [];
var currentBossDisplayElements = [];
var currentStatsBossIndex = 0;
var miniGameBackgroundInstance = null;
var miniGameViewport = {
x: 380,
y: 1020,
width: 1150,
height: 780
};
var endlessTimelineOffsetMs = 0;
var miniGameScreenElements = [];
var miniGamePlayer = null;
var miniGameObstacles = [];
var currentEyeColor = {
r: 255,
g: 255,
b: 255
};
var isFinalBossActive = false;
var nextSpecialEventIdx = 0;
var isMidCutsceneActive = false;
var miniGameScore = 0;
var miniGameScoreText = null;
var endlessTimerTxt = null;
var endlessStartTime = 0;
var endlessMissCount = 0;
var isHealOverTimeActive = false;
var healOverTimeEndTime = 0;
var healAmountPerTick = 2;
var healTickInterval = 1000;
var lastHealTickTime = 0;
var ENDLESS_STATS_KEY = 'walkmanFighters_endlessStats';
var isMiniGameOver = false;
var currentMiniGameMusicTrack = null;
var ambientParticles = [];
var ambientSpawnEnergy = 0;
var MAX_AMBIENT_PARTICLES = 80;
var AMBIENT_PARTICLE_ASSETS = ['ambient_particle_col0', 'ambient_particle_col1', 'ambient_particle_col2'];
var startScreenElements = [];
var pressStartBlinkInterval = null;
var PLAYER_HP_BAR_X = 1020;
var PLAYER_HP_BAR_Y = 2680;
var MINI_GAME_LANE_Y_POSITIONS = [];
var MINI_GAME_NUMBER_OF_LANES = 3;
var MINI_GAME_LANE_HEIGHT = 0;
var MINI_GAME_OBJECT_SPEED = 8;
var currentMiniGameObjectSpeed = 0;
var miniGameTimeActive = 0;
var SPATIAL_HITBOX_MULTIPLIER = 1.3;
var MINI_GAME_SPEED_INCREASE_INTERVAL = 5000;
var MINI_GAME_OBSTACLE_SPAWN_INTERVAL = 2000;
var MINI_GAME_SPEED_INCREMENT = 0.5;
var MINI_GAME_MOB_SPAWN_INTERVAL = 3500;
var lastMiniGameObstacleSpawnTime = 0;
var MINI_GAME_OBSTACLE_WIDTH = 100;
var MINI_GAME_OBSTACLE_HEIGHT = 100;
var mainMenuItemTextObjects = [];
var currentMainMenuMusicTrack = null;
var mainMenuItems = ["Music Battle", "How To Play", "Endless mode", "Mini game", "Stats", "Credits"];
var selectedMainMenuItemIndex = 0;
var gameScreenWidth = 2048;
var hitZoneY = 1800;
var playerShieldAnimation = null;
// === PONIŻSZE DEKLARACJE PRZENOSIMY NA GÓRĘ ===
var STATIC_HIT_FRAME_WIDTH = 2000; // Dodana nowa stała dla szerokości statycznej ramki
var STATIC_HIT_FRAME_HEIGHT = 300; // Dodana nowa stała dla wysokości statycznej ramki
var staticHitFrame = null; // Deklaracja statycznej ramki obszaru uderzenia
var staticPerfectLine = null; // Deklaracja statycznej linii perfect
var PERFECT_LINE_ASSET_KEY = 'perfectLineAsset'; // Nazwa assetu dla cienkiej linii
var PERFECT_LINE_HEIGHT = 2; // Wysokość cienkiej linii perfect
// === KONIEC PRZENIESIONYCH DEKLARACJI ===
var gameScreenHeight = Math.round(gameScreenWidth * (2732 / 2048));
var playfieldWidth = 1808;
var NUM_COLUMNS = 3;
var columnCenterXs = [350, 1024, 1700]; // Podaj swoje wartości!
var columnFlashWidths = [620, 400, 620];
var SWIPE_NOTE_WIDTH = 180;
// HP System Variables
var playerMaxHP = 12;
var BOSS_HP_BAR_X = 2030 / 2;
var BOSS_HP_BAR_Y = 70;
var playerCurrentHP = 10;
var bossMaxHP = 30;
var bossCurrentHP = 30;
var gameOverFlag = false;
// HP Bar UI Elements Configuration (actual elements created in setupHpBars)
var hpBarWidth = 600;
var hpBarHeight = 100;
// UI Container
var gameUIContainer; // Declare gameUIContainer
// HP Bar Containers (will be initialized in setupHpBars)
var playerHpBarContainer;
var playerHpBarFill;
var leftEye = null;
var rightEye = null;
var eyeFrameAssets = [];
var eyesBlinkTimer = null;
var currentEndlessDifficulty = 0.5;
var ENDLESS_DIFFICULTY_INCREASE_RATE = 0.02;
var MAX_ENDLESS_DIFFICULTY = 1.0;
var bossHpBarContainer;
var bossHpBarFill;
var isLockedBossMessageActive = false;
var activePowerUpItems = [];
var SHIELD_DURATION = 8000;
var isShieldActive = false;
var shieldEndTime = 0;
var POTION_HEAL_AMOUNT = 5;
var SWIPE_TO_TAP_BUFF_DURATION = 5000;
var isSwipeToTapBuffActive = false;
var swipeToTapBuffEndTime = 0;
var shieldTimerDisplayContainer;
var playerHUD = null;
var bossHUD = null;
var precisionBuffTimerDisplayContainer;
var smallPrecisionIconDisplay;
var precisionBuffTimerTextDisplay;
var smallShieldIconDisplay;
var shieldTimerTextDisplay;
var swipeToTapTimerDisplayContainer;
var smallSwipeToTapIconDisplay;
var swipeToTapTimerTextDisplay;
var currentBossSprite;
var powerUpDisplayContainer;
var hpPotionIcon, shieldIcon, swipeToTapIcon;
var hpPotionCountText, shieldCountText, swipeToTapCountText;
var currentActiveRhythmMap = null;
var ENDLESS_TRAP_CHANCE = 0.08;
var noteTravelTime = 3300;
var BUFF_CHANCE = 0.04;
var ENDLESS_BUFF_CHANCE = 0.12;
var gameplayBackground = null;
var PRECISION_BUFF_DURATION = 7000;
var isPrecisionBuffActive = false;
var precisionBuffEndTime = 0;
var originalHitWindowPerfect = 0;
var precisionBuffHitWindowMultiplier = 1.8;
var hitWindowPerfect = 220;
var hitWindowGood = 310;
var ADDITIONAL_HOLD_MISS_DELAY = 350;
var HOLD_NOTE_GOOD_WINDOW_EXTENSION = 120;
var MIN_SWIPE_DISTANCE = 60;
var notes = [];
var nextNoteIdx = 0;
var gameStartTime = 0;
var score = 0;
var bossWasDefeatedThisSong = false;
var songSummaryContainer = null;
var bossUnlockProgress = {};
var GAME_SCORES_KEY = 'walkmanFighters_scores';
var BOSS_UNLOCK_KEY = 'walkmanFighters_bossUnlock';
var currentFightingBossId = null;
var lastPlayedSongKeyForRestart = null;
var combo = 0;
var maxCombo = 0;
var swipeStart = null;
var inputLocked = false;
var hpBarsInitialized = false;
function _typeof5(o) {
"@babel/helpers - typeof";
return _typeof5 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof5(o);
}
function _typeof4(o) {
"@babel/helpers - typeof";
return _typeof4 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof4(o);
}
function _typeof3(o) {
"@babel/helpers - typeof";
return _typeof3 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof3(o);
}
function _typeof2(o) {
"@babel/helpers - typeof";
return _typeof2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof2(o);
}
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function showTemporaryMessage(message, duration, styleOptions) {
var textStyle = {
size: 70,
fill: 0xFFD700,
stroke: 0x000000,
strokeThickness: 4,
align: 'center',
wordWrap: true,
wordWrapWidth: gameScreenWidth * 0.8
};
if (styleOptions) {
for (var key in styleOptions) {
if (styleOptions.hasOwnProperty(key)) {
textStyle[key] = styleOptions[key];
}
}
}
var messageText = new Text2(message, textStyle);
messageText.anchor.set(0.5, 0.5);
messageText.x = gameScreenWidth / 2;
messageText.y = gameScreenHeight / 2;
messageText.alpha = 0;
game.addChild(messageText);
tween(messageText, {
alpha: 1
}, {
duration: 300,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(messageText, {
alpha: 0
}, {
duration: 300,
delay: duration || 2000,
easing: tween.easeIn,
onFinish: function onFinish() {
if (messageText.parent) {
messageText.destroy();
}
}
});
}
});
}
var activeMusicTrack = null;
var activeMusicKey = null;
function restartMiniGame() {
isMiniGameOver = false;
miniGameScore = 0;
miniGameTimeActive = 0;
currentMiniGameObjectSpeed = MINI_GAME_OBJECT_SPEED;
lastMiniGameObstacleSpawnTime = Date.now();
if (miniGamePlayer && miniGamePlayer.asset) {
miniGamePlayer.lane = 1;
miniGamePlayer.y = MINI_GAME_LANE_Y_POSITIONS[1];
if (miniGamePlayer.asset) {
miniGamePlayer.asset.y = miniGamePlayer.y;
miniGamePlayer.asset.tint = 0xFFFFFF;
}
}
for (var i = miniGameObstacles.length - 1; i >= 0; i--) {
if (miniGameObstacles[i].asset && miniGameObstacles[i].asset.parent) {
miniGameObstacles[i].asset.destroy();
}
}
miniGameObstacles = [];
var gameOverText = miniGameScreenElements.find(function (el) {
return el.isGameOverText;
});
if (gameOverText && gameOverText.parent) {
gameOverText.destroy();
var idx = miniGameScreenElements.indexOf(gameOverText);
if (idx > -1) {
miniGameScreenElements.splice(idx, 1);
}
}
updateMiniGameScoreDisplay();
}
function setupGameplayElements() {
if (staticPerfectLine && staticPerfectLine.parent) {
staticPerfectLine.destroy();
}
staticPerfectLine = LK.getAsset(PERFECT_LINE_ASSET_KEY, {
anchorX: 0.5,
anchorY: 0.5,
x: gameScreenWidth / 2,
y: hitZoneY,
width: playfieldWidth,
height: PERFECT_LINE_HEIGHT,
alpha: 0.9,
visible: false
});
game.addChild(staticPerfectLine);
if (staticHitFrame && staticHitFrame.parent) {
staticHitFrame.destroy();
}
staticHitFrame = LK.getAsset('FRAME1', {
anchorX: 0.5,
anchorY: 0.5,
x: gameScreenWidth / 2,
y: hitZoneY,
width: STATIC_HIT_FRAME_WIDTH,
height: STATIC_HIT_FRAME_HEIGHT,
alpha: 0.7,
visible: false
});
game.addChild(staticHitFrame);
for (var i = 0; i < NUM_COLUMNS; i++) {
if (columnFlashOverlays[i] && columnFlashOverlays[i].parent) {
columnFlashOverlays[i].destroy();
}
var overlayAssetKey;
if (currentScreenState === 'endlessLoopActive') {
overlayAssetKey = 'endlessFlash_col' + i;
} else {
overlayAssetKey = 'flashOverlay_col' + i;
}
columnFlashOverlays[i] = LK.getAsset(overlayAssetKey, {
anchorX: 0.5,
anchorY: 0.5,
x: columnCenterXs[i],
y: gameScreenHeight / 2
});
if (columnFlashOverlays[i]) {
game.addChild(columnFlashOverlays[i]);
columnFlashOverlays[i].alpha = 0;
}
}
}
function fadeInGameplayElements(duration) {
var fadeInDuration = duration || 1500;
var elementsToFade = [playerHUD, bossHUD, staticHitFrame, staticPerfectLine, scoreTxt, comboTxt];
elementsToFade.forEach(function (el) {
if (el) {
el.visible = true;
el.alpha = 0;
var finalAlpha = 1.0;
if (el === comboTxt) {
finalAlpha = 0.5;
}
if (el === staticHitFrame) {
finalAlpha = 0.7;
}
if (el === staticPerfectLine) {
finalAlpha = 0.9;
}
tween(el, {
alpha: finalAlpha
}, {
duration: fadeInDuration,
easing: tween.easeOutQuad
});
}
});
}
var allParticleAssetKeys = [];
for (var i = 1; i <= 12; i++) {
allParticleAssetKeys.push('particle' + i);
}
function createAndAnimateParticle(assetKey, startX, startY, parentContainer) {
var comboScaleMultiplier = 1 + Math.floor(combo / 20) * 0.1; // Bazowy mnożnik 1, zwiększa się o 0.1 co 20 combo
var particle = LK.getAsset(assetKey, {
anchorX: 0.5,
anchorY: 0.5,
x: startX,
y: startY,
alpha: 1,
scaleX: (3 + Math.random() * 1.2) * comboScaleMultiplier,
scaleY: (3 + Math.random() * 1.2) * comboScaleMultiplier,
rotation: Math.random() * Math.PI * 2 // Losowa rotacja początkowa
});
parentContainer.addChild(particle);
var travelAngle = Math.random() * Math.PI * 2;
var travelDistance = 50 + Math.random() * 100; // 50 do 150px
var targetX = startX + Math.cos(travelAngle) * travelDistance;
var targetY = startY + Math.sin(travelAngle) * travelDistance;
var duration = 500 + Math.random() * 500; // 500ms do 1000ms
tween(particle, {
x: targetX,
y: targetY,
alpha: 0,
scaleX: 1 + Math.random() * 2,
// Większa skala końcowa X (np. od 0.3 do 0.6)
scaleY: 1 + Math.random() * 2,
// Większa skala końcowa Y (np. od 0.3 do 0.6)
// Skala końcowa Y
rotation: particle.rotation + (Math.random() * Math.PI - Math.PI / 2) // Dodatkowa losowa rotacja
}, {
duration: duration,
easing: tween.easeOutQuad,
onFinish: function onFinish() {
if (particle.parent) {
particle.destroy();
}
}
});
}
function spawnParticleEffect(spawnX, spawnY, accuracy, parentContainer) {
var numParticlesBase = 0;
var numTypesToPick = 0;
if (accuracy === 'good') {
numParticlesBase = 4;
numTypesToPick = 2 + Math.floor(Math.random() * 2); // 2 lub 3 typy
} else if (accuracy === 'perfect') {
numParticlesBase = 9;
numTypesToPick = 3 + Math.floor(Math.random() * 2); // 3 lub 4 typy
} else {
return; // Nie twórz cząsteczek dla 'miss' lub innych
}
// Wzmocnienie z combo (prosty przykład, można dostosować)
var comboBonusParticles = Math.floor(combo / 3); // 1 dodatkowa cząsteczka co 10 combo
var totalParticlesToSpawn = numParticlesBase + comboBonusParticles;
if (totalParticlesToSpawn === 0) {
return;
}
// Losowy wybór typów cząsteczek
var availableTypes = [].concat(allParticleAssetKeys); // Kopia tablicy
var pickedTypes = [];
for (var i = 0; i < numTypesToPick; i++) {
if (availableTypes.length === 0) {
break;
}
var randomIndex = Math.floor(Math.random() * availableTypes.length);
pickedTypes.push(availableTypes.splice(randomIndex, 1)[0]);
}
if (pickedTypes.length === 0) {
// Na wszelki wypadek, jeśli coś pójdzie nie tak
pickedTypes.push(allParticleAssetKeys[Math.floor(Math.random() * allParticleAssetKeys.length)]);
}
for (var i = 0; i < totalParticlesToSpawn; i++) {
var particleAssetKey = pickedTypes[i % pickedTypes.length]; // Cyklicznie przez wybrane typy
createAndAnimateParticle(particleAssetKey, spawnX, spawnY, parentContainer);
}
}
function flashColumn(columnIndex) {
if (isFinalBossActive) {
return;
}
if (columnIndex >= 0 && columnIndex < NUM_COLUMNS && columnFlashOverlays[columnIndex]) {
var overlay = columnFlashOverlays[columnIndex];
var flashAlpha;
var flashDuration;
if (currentScreenState === 'endlessLoopActive') {
flashAlpha = 0.8;
flashDuration = 1150;
} else {
flashAlpha = 0.6;
flashDuration = 250;
}
overlay.alpha = flashAlpha;
tween(overlay, {
alpha: 0
}, {
duration: flashDuration,
easing: tween.easeOutQuad
});
}
}
function showStartScreen() {
if (typeof startScreenElements !== 'undefined' && startScreenElements.forEach) {
startScreenElements.forEach(function (el) {
if (el && el.parent) {
el.destroy();
}
});
}
startScreenElements = [];
if (typeof simpleFlickerTimeout !== 'undefined' && simpleFlickerTimeout) {
LK.clearTimeout(simpleFlickerTimeout);
simpleFlickerTimeout = null;
}
if (typeof simpleFlickerPhaseEndTimeout !== 'undefined' && simpleFlickerPhaseEndTimeout) {
LK.clearTimeout(simpleFlickerPhaseEndTimeout);
simpleFlickerPhaseEndTimeout = null;
}
if (typeof pressStartBlinkInterval !== 'undefined' && pressStartBlinkInterval) {
LK.clearInterval(pressStartBlinkInterval);
pressStartBlinkInterval = null;
}
var pressStartMainGlitchTimer = null;
var glowFlickerBurstTimer = null;
var subtleJitterTimer = null;
currentScreenState = 'startScreenWithGlitch';
if (typeof gameUIContainer !== 'undefined' && gameUIContainer) {
gameUIContainer.visible = false;
}
if (typeof staticHitFrame !== 'undefined' && staticHitFrame) {
staticHitFrame.visible = false;
}
if (typeof staticPerfectLine !== 'undefined' && staticPerfectLine) {
staticPerfectLine.visible = false;
}
var walkmanScreenCenterX = gameScreenWidth / 2 - 300;
var walkmanScreenCenterY = gameScreenHeight / 2 + 100;
var walkmanScreenWidth = 1200;
var walkmanScreenHeight = 1200;
var pressStartRotation = Math.PI / 16;
var pressStartAssetKey = 'pressStartTextAsset';
var glowAssetKey = 'walkmanScreenGlowAsset';
var backgroundAssetKey = 'walkmanStartScreenBg';
var pressStartVisuals = {
main: null,
copies: []
};
var pressStartContainer = new Container();
pressStartContainer.x = walkmanScreenCenterX;
pressStartContainer.y = walkmanScreenCenterY;
startScreenElements.push(pressStartContainer);
game.addChild(pressStartContainer);
pressStartVisuals.main = LK.getAsset(pressStartAssetKey, {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: 0,
rotation: pressStartRotation,
interactive: true,
cursor: "pointer"
});
pressStartContainer.addChild(pressStartVisuals.main);
for (var i = 0; i < 2; i++) {
var copy = LK.getAsset(pressStartAssetKey, {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: 0,
rotation: pressStartRotation,
alpha: 0
});
pressStartContainer.addChild(copy);
pressStartVisuals.copies.push(copy);
}
var glowingScreen = LK.getAsset(glowAssetKey, {
anchorX: 0.5,
anchorY: 0.5,
x: walkmanScreenCenterX,
y: walkmanScreenCenterY,
width: walkmanScreenWidth,
height: walkmanScreenHeight,
alpha: 0.5
});
startScreenElements.push(glowingScreen);
game.addChild(glowingScreen);
var background = LK.getAsset(backgroundAssetKey, {
x: gameScreenWidth / 2,
y: gameScreenHeight / 2,
anchorX: 0.5,
anchorY: 0.5,
width: gameScreenWidth,
height: gameScreenHeight
});
startScreenElements.push(background);
game.addChild(background);
game.setChildIndex(pressStartContainer, game.children.length - 3);
game.setChildIndex(glowingScreen, game.children.length - 2);
game.setChildIndex(background, game.children.length - 1);
function triggerGlowFlickerBurst() {
if (currentScreenState !== 'startScreenWithGlitch' || !glowingScreen || !glowingScreen.parent) {
if (glowFlickerBurstTimer) {
LK.clearTimeout(glowFlickerBurstTimer);
}
glowFlickerBurstTimer = null;
return;
}
var burstCount = Math.floor(Math.random() * 3) + 2;
var currentBurst = 0;
var baseAlpha = 0.5 + Math.random() * 0.2;
function singleGlowFlicker() {
if (currentBurst >= burstCount || !glowingScreen || !glowingScreen.parent || currentScreenState !== 'startScreenWithGlitch') {
if (glowingScreen && glowingScreen.parent) {
glowingScreen.alpha = baseAlpha * 0.8;
}
glowFlickerBurstTimer = LK.setTimeout(triggerGlowFlickerBurst, 2500 + Math.random() * 3000);
return;
}
var flickerToAlpha = Math.random() < 0.5 ? baseAlpha * 0.3 + Math.random() * 0.2 : baseAlpha * 1.2 + Math.random() * 0.3;
glowingScreen.alpha = Math.max(0.1, Math.min(0.9, flickerToAlpha));
currentBurst++;
glowFlickerBurstTimer = LK.setTimeout(singleGlowFlicker, 50 + Math.random() * 100);
}
singleGlowFlicker();
}
function continuousSubtleJitter() {
if (currentScreenState !== 'startScreenWithGlitch' || !pressStartVisuals.main || !pressStartVisuals.main.parent) {
if (subtleJitterTimer) {
LK.clearTimeout(subtleJitterTimer);
}
subtleJitterTimer = null;
return;
}
var mainAsset = pressStartVisuals.main;
var jitterAmount = 1.5;
mainAsset.x = (Math.random() - 0.5) * jitterAmount;
mainAsset.y = (Math.random() - 0.5) * jitterAmount;
subtleJitterTimer = LK.setTimeout(continuousSubtleJitter, 70 + Math.random() * 60);
}
function performMainGlitch() {
if (currentScreenState !== 'startScreenWithGlitch' || !pressStartVisuals.main || !pressStartVisuals.main.parent) {
if (pressStartMainGlitchTimer) {
LK.clearTimeout(pressStartMainGlitchTimer);
}
pressStartMainGlitchTimer = null;
return;
}
var glitchType = Math.random();
var mainAsset = pressStartVisuals.main;
var copies = pressStartVisuals.copies;
var originalTint = mainAsset.tint || 0xFFFFFF;
var originalAlpha = mainAsset.alpha;
var textAssetNominalWidth = 280;
var textAssetNominalHeight = 70;
if (glitchType < 0.08) {
var animateDuringSlide = function animateDuringSlide() {
if (!mainAsset.parent || !mainAsset.visible || currentScreenState !== 'startScreenWithGlitch') {
if (slideEffectInterval) {
LK.clearInterval(slideEffectInterval);
}
if (mainAsset.parent) {
mainAsset.tint = originalTint;
mainAsset.alpha = originalAlpha;
}
return;
}
mainAsset.alpha = 0.15 + Math.random() * 0.5;
mainAsset.tint = glitchColors[effectStep % glitchColors.length];
effectStep++;
};
var currentJitterX = mainAsset.x;
var currentJitterY = mainAsset.y;
var slideOutFactorX = 3.0 + Math.random() * 2.0;
var slideOutFactorY = Math.random() < 0.3 ? 2.0 + Math.random() * 1.5 : 0;
var slideDistanceX = textAssetNominalWidth * slideOutFactorX;
var slideDistanceY = textAssetNominalHeight * slideOutFactorY;
var targetX = (Math.random() > 0.5 ? 1 : -1) * slideDistanceX;
var targetY = (Math.random() > 0.5 ? 1 : -1) * slideDistanceY;
var slideDuration = 30 + Math.random() * 20;
var slideEffectInterval = null;
var effectStep = 0;
var glitchColors = [0xff3333, 0x33ff33, 0x3333ff, 0xffff33, 0xcccccc, 0x555555];
if (mainAsset.parent) {
slideEffectInterval = LK.setInterval(animateDuringSlide, 20);
}
tween(mainAsset, {
x: targetX,
y: targetY
}, {
duration: slideDuration,
easing: tween.easeOutQuad,
onFinish: function onFinish() {
if (slideEffectInterval) {
LK.clearInterval(slideEffectInterval);
}
if (mainAsset.parent) {
mainAsset.tint = originalTint;
mainAsset.alpha = 0;
}
LK.setTimeout(function () {
if (mainAsset.parent) {
mainAsset.alpha = originalAlpha;
tween(mainAsset, {
x: currentJitterX,
y: currentJitterY
}, {
duration: 100 + Math.random() * 70,
easing: tween.easeInCubic
});
}
}, 150 + Math.random() * 200);
}
});
} else if (glitchType < 0.25) {
if (!mainAsset.parent) {
return;
}
var prevAlpha = mainAsset.alpha;
mainAsset.alpha = 0;
LK.setTimeout(function () {
if (mainAsset.parent && currentScreenState === 'startScreenWithGlitch') {
mainAsset.alpha = prevAlpha;
}
}, 500);
} else if (glitchType < 0.45) {
if (!mainAsset.parent) {
return;
}
var glitchColorsSet = [0xff0000, 0x00ff00, 0x0000ff, 0x8A2BE2, 0xFFD700, 0x333333];
var oldTint = mainAsset.tint || 0xFFFFFF;
mainAsset.tint = glitchColorsSet[Math.floor(Math.random() * glitchColorsSet.length)];
LK.setTimeout(function () {
if (mainAsset.parent && currentScreenState === 'startScreenWithGlitch') {
mainAsset.tint = oldTint;
}
}, 100 + Math.random() * 150);
} else if (glitchType < 0.70) {
var _doSingleTextFlicker = function doSingleTextFlicker(count) {
if (!mainAsset.parent || count <= 0 || currentScreenState !== 'startScreenWithGlitch') {
if (mainAsset.parent) {
mainAsset.alpha = baseAlpha;
}
return;
}
mainAsset.alpha = Math.random() < 0.6 ? 0.1 : Math.random() * 0.4 + 0.5;
LK.setTimeout(function () {
_doSingleTextFlicker(count - 1);
}, flickerInterval);
};
var baseAlpha = mainAsset.alpha;
if (!mainAsset.parent) {
return;
}
var flickerCount = Math.floor(Math.random() * 4) + 3;
var flickerInterval = 25 + Math.random() * 30;
_doSingleTextFlicker(flickerCount);
} else {
if (mainAsset.parent) {
mainAsset.alpha = 0;
} else {
return;
}
var colors = [0xff0000, 0x00ff00, 0x0000ff];
var offsetAmount = 12 + Math.random() * 6;
copies.forEach(function (copy, index) {
if (!copy.parent) {
return;
}
copy.tint = colors[index % colors.length];
copy.alpha = 0.55 + Math.random() * 0.25;
copy.x = mainAsset.x + (Math.random() - 0.5) * offsetAmount * (index + 1.8);
copy.y = mainAsset.y + (Math.random() - 0.5) * offsetAmount * (index + 1.8);
});
LK.setTimeout(function () {
if (mainAsset.parent && currentScreenState === 'startScreenWithGlitch') {
mainAsset.alpha = 1;
}
copies.forEach(function (copy) {
if (copy.parent) {
copy.alpha = 0;
}
});
}, 70 + Math.random() * 80);
}
pressStartMainGlitchTimer = LK.setTimeout(performMainGlitch, 800 + Math.random() * 1500);
}
pressStartVisuals.main.down = function () {
if (currentScreenState !== 'startScreenWithGlitch') {
return;
}
LK.stopMusic();
LK.playMusic('introMusic');
if (pressStartMainGlitchTimer) {
LK.clearTimeout(pressStartMainGlitchTimer);
pressStartMainGlitchTimer = null;
}
if (glowFlickerBurstTimer) {
LK.clearTimeout(glowFlickerBurstTimer);
glowFlickerBurstTimer = null;
}
if (subtleJitterTimer) {
LK.clearTimeout(subtleJitterTimer);
subtleJitterTimer = null;
}
startScreenElements.forEach(function (el) {
if (el && el.parent) {
el.destroy();
}
});
startScreenElements = [];
showIntro();
};
glowFlickerBurstTimer = LK.setTimeout(triggerGlowFlickerBurst, 800 + Math.random() * 700);
subtleJitterTimer = LK.setTimeout(continuousSubtleJitter, 100);
pressStartMainGlitchTimer = LK.setTimeout(performMainGlitch, 1500 + Math.random() * 1000);
}
function updateMainMenuHighlight(newIndex) {
var defaultTint = 0xFFFFFF; // Biały tint (brak efektu, oryginalny kolor tekstu)
var highlightTint = 0xFFD700; // Żółty tint dla podświetlenia
var defaultScale = 1.0;
var highlightScale = 1.15; // Skala dla podświetlonej opcji
// Resetuj styl dla wszystkich opcji
for (var i = 0; i < mainMenuItemTextObjects.length; i++) {
if (mainMenuItemTextObjects[i] && mainMenuItemTextObjects[i].parent) {
// Zakładamy, że bazowy .fill tekstu jest biały (ustawiony przy tworzeniu)
mainMenuItemTextObjects[i].tint = defaultTint;
mainMenuItemTextObjects[i].scale.set(defaultScale);
}
}
// Ustaw styl dla nowo wybranej opcji
if (newIndex >= 0 && newIndex < mainMenuItemTextObjects.length) {
if (mainMenuItemTextObjects[newIndex] && mainMenuItemTextObjects[newIndex].parent) {
var targetItem = mainMenuItemTextObjects[newIndex];
targetItem.tint = highlightTint;
targetItem.scale.set(highlightScale);
}
}
selectedMainMenuItemIndex = newIndex; // Aktualizuj globalny indeks
}
function showMainMenu(fadeInDuration) {
while (mainMenuScreenElements.length > 0) {
var el = mainMenuScreenElements.pop();
if (el && el.parent) {
el.destroy();
}
}
if (gameplayBackground && gameplayBackground.parent) {
gameplayBackground.destroy();
gameplayBackground = null;
}
mainMenuScreenElements = [];
mainMenuItemTextObjects = [];
var mainMenuContainer = new Container();
game.addChild(mainMenuContainer);
mainMenuScreenElements.push(mainMenuContainer);
currentScreenState = 'mainmenu_walkman';
initializeBossData();
if (gameUIContainer) {
gameUIContainer.visible = false;
}
if (staticHitFrame) {
staticHitFrame.visible = false;
}
if (staticPerfectLine) {
staticPerfectLine.visible = false;
}
if (shieldTimerDisplayContainer) {
shieldTimerDisplayContainer.visible = false;
}
if (swipeToTapTimerDisplayContainer) {
swipeToTapTimerDisplayContainer.visible = false;
}
if (songSummaryContainer && songSummaryContainer.parent) {
songSummaryContainer.destroy();
songSummaryContainer = null;
}
var glassX = 380;
var glassY = 1020;
var glassWidth = 1150;
var glassHeight = 820;
var glassInitialAlpha = 0.3;
var glassFinalAlpha = 0.7;
var menuItemFontSize = 120;
var menuItemSpacing = 225;
var TARGET_CENTER_X_FOR_MENU_ITEMS = glassX + glassWidth / 2;
var TARGET_CENTER_Y_FOR_SELECTED_ITEM = glassY + glassHeight / 2;
var menuTextContainer = new Container();
mainMenuContainer.addChild(menuTextContainer);
var creditsGraphic = LK.getAsset('creditsTextAsset', {
x: TARGET_CENTER_X_FOR_MENU_ITEMS,
y: TARGET_CENTER_Y_FOR_SELECTED_ITEM,
anchorX: 0.5,
anchorY: 0.5,
visible: false
});
mainMenuContainer.addChild(creditsGraphic);
selectedMainMenuItemIndex = 0;
for (var i_menu = 0; i_menu < mainMenuItems.length; i_menu++) {
var itemText_menu = new Text2(mainMenuItems[i_menu], {
size: menuItemFontSize,
fill: 0xFFFFFF,
align: 'center',
wordWrap: false
});
itemText_menu.anchor.set(0.5, 0.5);
itemText_menu.interactive = false;
menuTextContainer.addChild(itemText_menu);
mainMenuItemTextObjects.push(itemText_menu);
}
var layoutAndHighlightFunctionRef = function layoutAndHighlightFunctionRef() {
var defaultTint = 0xFFFFFF;
var highlightTint = 0xFFD700;
var defaultScale = 1.0;
var highlightScale = 1.15;
for (var idx = 0; idx < mainMenuItemTextObjects.length; idx++) {
var item_layout = mainMenuItemTextObjects[idx];
if (item_layout && item_layout.parent) {
item_layout.x = TARGET_CENTER_X_FOR_MENU_ITEMS;
item_layout.y = TARGET_CENTER_Y_FOR_SELECTED_ITEM + (idx - selectedMainMenuItemIndex) * menuItemSpacing;
if (idx === selectedMainMenuItemIndex) {
item_layout.tint = highlightTint;
item_layout.scale.set(highlightScale);
} else {
item_layout.tint = defaultTint;
item_layout.scale.set(defaultScale);
}
}
}
};
var glass = LK.getAsset('glass', {
x: glassX,
y: glassY,
width: glassWidth,
height: glassHeight,
alpha: 0,
interactive: false
});
mainMenuContainer.addChild(glass);
var glass2 = LK.getAsset('glass2', {
x: glassX,
y: glassY,
width: glassWidth,
height: glassHeight,
alpha: 0,
interactive: false
});
mainMenuContainer.addChild(glass2);
var walkmanFrame = LK.getAsset('mainmenu', {
x: 0,
y: 0,
width: gameScreenWidth,
height: gameScreenHeight
});
mainMenuContainer.addChild(walkmanFrame);
var upButton = LK.getAsset('upbutton', {});
upButton.x = 210;
upButton.y = gameScreenHeight / 2 - 180;
upButton.anchor.set(0.5, 0.5);
upButton.interactive = true;
upButton.cursor = "pointer";
upButton.down = function () {
if (isConfirmationDialogActive) {
selectedConfirmationOptionIndex = 0;
updateConfirmationHighlight();
} else if (currentScreenState === 'mainmenu_walkman') {
if (selectedMainMenuItemIndex > 0) {
selectedMainMenuItemIndex--;
} else {
selectedMainMenuItemIndex = mainMenuItems.length - 1;
}
layoutAndHighlightFunctionRef();
} else if (currentScreenState === 'miniGameActive' && !isMiniGameOver) {
if (miniGamePlayer && miniGamePlayer.lane > 0) {
miniGamePlayer.lane--;
miniGamePlayer.y = MINI_GAME_LANE_Y_POSITIONS[miniGamePlayer.lane];
if (miniGamePlayer.asset) {
miniGamePlayer.asset.y = miniGamePlayer.y;
}
}
}
};
mainMenuContainer.addChild(upButton);
var downButton = LK.getAsset('downbutton', {});
downButton.x = 210;
downButton.y = gameScreenHeight / 2 + 220;
downButton.anchor.set(0.5, 0.5);
downButton.interactive = true;
downButton.cursor = "pointer";
downButton.down = function () {
if (isConfirmationDialogActive) {
selectedConfirmationOptionIndex = 1;
updateConfirmationHighlight();
} else if (currentScreenState === 'mainmenu_walkman') {
if (selectedMainMenuItemIndex < mainMenuItems.length - 1) {
selectedMainMenuItemIndex++;
} else {
selectedMainMenuItemIndex = 0;
}
layoutAndHighlightFunctionRef();
} else if (currentScreenState === 'miniGameActive' && !isMiniGameOver) {
if (miniGamePlayer && miniGamePlayer.lane < MINI_GAME_NUMBER_OF_LANES - 1) {
miniGamePlayer.lane++;
miniGamePlayer.y = MINI_GAME_LANE_Y_POSITIONS[miniGamePlayer.lane];
if (miniGamePlayer.asset) {
miniGamePlayer.asset.y = miniGamePlayer.y;
}
}
}
};
mainMenuContainer.addChild(downButton);
var playButton = LK.getAsset('play', {});
playButton.x = gameScreenWidth - 350;
playButton.y = gameScreenHeight / 2 - 240;
playButton.anchor.set(0.5, 0.5);
playButton.interactive = true;
playButton.cursor = "pointer";
playButton.down = function () {
if (currentScreenState === 'mainmenu_walkman') {
LK.stopMusic();
LK.playMusic('introMusic');
}
};
mainMenuContainer.addChild(playButton);
var stopButton = LK.getAsset('stop', {});
stopButton.x = gameScreenWidth - 350;
stopButton.y = gameScreenHeight / 2;
stopButton.anchor.set(0.5, 0.5);
stopButton.interactive = true;
stopButton.cursor = "pointer";
stopButton.down = function () {
LK.stopMusic();
};
mainMenuContainer.addChild(stopButton);
var fightButton = LK.getAsset('fight', {});
fightButton.x = gameScreenWidth - 350;
fightButton.y = gameScreenHeight / 2 + 240;
fightButton.anchor.set(0.5, 0.5);
fightButton.interactive = true;
fightButton.cursor = "pointer";
fightButton.down = function () {
if (isConfirmationDialogActive) {
if (selectedConfirmationOptionIndex === 0) {
if (onConfirmYes) {
onConfirmYes();
}
} else {
if (onConfirmNo) {
onConfirmNo();
}
}
return;
}
if (currentScreenState !== 'mainmenu_walkman') {
if (currentScreenState === 'miniGameActive' && isMiniGameOver) {
restartMiniGame();
}
return;
}
var selectedAction = mainMenuItems[selectedMainMenuItemIndex];
switch (selectedAction) {
case "Music Battle":
case "Endless mode":
case "How To Play":
mainMenuScreenElements.forEach(function (el) {
if (el && el.parent) {
el.destroy();
}
});
mainMenuScreenElements = [];
mainMenuItemTextObjects = [];
if (menuTextContainer && menuTextContainer.parent) {
menuTextContainer.destroy();
}
menuTextContainer = null;
if (selectedAction === "Music Battle") {
showBossSelectionScreen();
} else if (selectedAction === "Endless mode") {
startEndlessMode();
} else if (selectedAction === "How To Play") {
LK.stopMusic();
runTutorialGameplay();
}
break;
case "Stats":
case "Mini game":
if (menuTextContainer) {
menuTextContainer.visible = false;
}
if (selectedAction === "Stats") {
showStatsScreen();
} else if (selectedAction === "Mini game") {
LK.stopMusic();
showMiniGameScreen();
}
break;
case "Credits":
if (menuTextContainer) {
menuTextContainer.visible = false;
}
if (creditsGraphic) {
creditsGraphic.visible = true;
}
currentScreenState = 'mainmenu_credits';
break;
}
};
mainMenuContainer.addChild(fightButton);
var rewindButtonMainMenu = LK.getAsset('rewindbutton', {});
rewindButtonMainMenu.x = 350;
rewindButtonMainMenu.y = gameScreenHeight / 2 + 650;
rewindButtonMainMenu.anchor.set(0.5, 0.5);
rewindButtonMainMenu.interactive = true;
rewindButtonMainMenu.cursor = "pointer";
rewindButtonMainMenu.down = function () {
if (currentScreenState === 'mainmenu_credits') {
currentScreenState = 'mainmenu_walkman';
menuTextContainer.visible = true;
creditsGraphic.visible = false;
}
};
mainMenuContainer.addChild(rewindButtonMainMenu);
var allStandardBossesDefeated = true;
var specialBossButtonAssetKey = allStandardBossesDefeated ? 'specialboss_unlocked' : 'specialboss_locked';
var specialBossButtonMainMenu = LK.getAsset(specialBossButtonAssetKey, {});
specialBossButtonMainMenu.width = 250;
var originalAssetWidthForRatioSB = 300;
var originalAssetHeightUnlockedSB = 250;
var originalAssetHeightLockedSB = 250;
specialBossButtonMainMenu.height = (specialBossButtonAssetKey === 'specialboss_unlocked' ? originalAssetHeightUnlockedSB : originalAssetHeightLockedSB) * (specialBossButtonMainMenu.width / originalAssetWidthForRatioSB);
specialBossButtonMainMenu.x = 950;
specialBossButtonMainMenu.y = 2030;
specialBossButtonMainMenu.anchor.set(0.5, 0.5);
specialBossButtonMainMenu.interactive = true;
if (allStandardBossesDefeated) {
specialBossButtonMainMenu.cursor = "pointer";
specialBossButtonMainMenu.down = function () {
if (isConfirmationDialogActive) {
return;
}
showConfirmationDialog(mainMenuContainer, glass2, menuTextContainer, function () {
hideConfirmationDialog(menuTextContainer, glass2);
mainMenuScreenElements.forEach(function (el) {
if (el && el.parent) {
el.destroy();
}
});
mainMenuScreenElements = [];
showFinalBossIntro(function () {
loadFinalBossEncounter();
});
}, function () {
hideConfirmationDialog(menuTextContainer, glass2);
});
};
} else {
specialBossButtonMainMenu.cursor = "default";
specialBossButtonMainMenu.down = function () {
if (currentScreenState !== 'mainmenu_walkman' && currentScreenState !== 'bossGallery_paged') {
return;
}
var containerToFade = null;
if (currentScreenState === 'mainmenu_walkman') {
containerToFade = menuTextContainer;
} else if (currentScreenState === 'bossGallery_paged') {
containerToFade = cardsContainer;
}
displayLockedMessage(containerToFade, mainMenuContainer, glass2);
};
}
mainMenuContainer.addChild(specialBossButtonMainMenu);
layoutAndHighlightFunctionRef();
if (!hasShownInitialMenuAnimation) {
hasShownInitialMenuAnimation = true;
mainMenuContainer.alpha = 0;
menuTextContainer.alpha = 0;
glass.alpha = glassInitialAlpha;
glass2.alpha = 0;
tween(mainMenuContainer, {
alpha: 1
}, {
duration: 1000,
easing: tween.easeLinear
});
tween(glass, {
alpha: 0
}, {
duration: 2000,
delay: 500,
easing: tween.easeLinear
});
tween(glass2, {
alpha: glassFinalAlpha
}, {
duration: 2000,
delay: 500,
easing: tween.easeLinear
});
LK.setTimeout(function () {
if (menuTextContainer && menuTextContainer.parent) {
tween(menuTextContainer, {
alpha: 1
}, {
duration: 800,
easing: tween.easeLinear
});
}
}, 2000);
} else {
mainMenuContainer.alpha = 1;
menuTextContainer.alpha = 1;
glass.alpha = 0;
glass2.alpha = glassFinalAlpha;
}
}
function exitMiniGameAndReturnToMainMenu() {
LK.stopMusic();
LK.playMusic('introMusic');
if (miniGamePlayer && miniGamePlayer.asset && miniGamePlayer.asset.hasOwnProperty('tint')) {
miniGamePlayer.asset.tint = 0xFFFFFF;
}
isMiniGameOver = true;
if (miniGameBackgroundInstance && miniGameBackgroundInstance.parent) {
miniGameBackgroundInstance.visible = false;
}
while (miniGameScreenElements.length > 0) {
var el_exit_mg = miniGameScreenElements.pop();
if (el_exit_mg && el_exit_mg.parent) {
if (el_exit_mg === miniGameBackgroundInstance && miniGameBackgroundInstance && miniGameBackgroundInstance.visible === false) {} else {
el_exit_mg.destroy();
}
}
}
if (miniGameBackgroundInstance && miniGameBackgroundInstance.parent && miniGameBackgroundInstance.visible === false) {} else if (miniGameBackgroundInstance && !miniGameBackgroundInstance.parent) {
miniGameBackgroundInstance = null;
}
miniGamePlayer = null;
miniGameObstacles = [];
if (miniGameScoreText && miniGameScoreText.parent) {
miniGameScoreText.destroy();
}
miniGameScoreText = null;
currentScreenState = 'mainmenu_walkman';
showMainMenu();
}
function startEyeColorCycling() {
var colors = [0x66FF66, 0x6666FF, 0xFFFF66, 0xFF66FF, 0x66FFFF, 0xFFFFFF, 0xFF6666];
var colorIndex = 0;
var colorTweenInterval = null;
if (eyeColorInterval) {
LK.clearInterval(eyeColorInterval);
}
var changeColor = function changeColor() {
if (!leftEye || !rightEye || !leftEye.parent || !rightEye.parent) {
if (eyeColorInterval) {
LK.clearInterval(eyeColorInterval);
}
if (colorTweenInterval) {
LK.clearInterval(colorTweenInterval);
}
eyeColorInterval = null;
colorTweenInterval = null;
return;
}
if (colorTweenInterval) {
LK.clearInterval(colorTweenInterval);
}
var startColor = {
r: currentEyeColor.r,
g: currentEyeColor.g,
b: currentEyeColor.b
};
var targetHex = colors[colorIndex % colors.length];
colorIndex++;
var targetColor = {
r: targetHex >> 16 & 255,
g: targetHex >> 8 & 255,
b: targetHex & 255
};
var duration = 2000;
var startTime = Date.now();
colorTweenInterval = LK.setInterval(function () {
var now = Date.now();
var progress = (now - startTime) / duration;
if (progress >= 1) {
progress = 1;
if (colorTweenInterval) {
LK.clearInterval(colorTweenInterval);
colorTweenInterval = null;
}
}
var easedProgress = progress < 0.5 ? 2 * progress * progress : 1 - Math.pow(-2 * progress + 2, 2) / 2;
currentEyeColor.r = startColor.r + (targetColor.r - startColor.r) * easedProgress;
currentEyeColor.g = startColor.g + (targetColor.g - startColor.g) * easedProgress;
currentEyeColor.b = startColor.b + (targetColor.b - startColor.b) * easedProgress;
}, 30);
};
eyeColorInterval = LK.setInterval(changeColor, 10000);
changeColor();
}
function spawnMiniGameObstacle() {
// Zmieniona nazwa i usunięte mobki
var now = Date.now();
if (now > lastMiniGameObstacleSpawnTime + MINI_GAME_OBSTACLE_SPAWN_INTERVAL * (0.5 + Math.random())) {
var randomLane = Math.floor(Math.random() * MINI_GAME_NUMBER_OF_LANES);
var obstacleFrames = [LK.getAsset('obstacle_anim_1', {}), LK.getAsset('obstacle_anim_2', {}), LK.getAsset('obstacle_anim_3', {}), LK.getAsset('obstacle_anim_4', {}), LK.getAsset('obstacle_anim_5', {})];
var obstacleAnimation = new SpriteAnimation({
frames: obstacleFrames,
frameDuration: 350,
loop: true,
anchorX: 0.5,
anchorY: 0.5,
x: miniGameViewport.x + miniGameViewport.width + MINI_GAME_OBSTACLE_WIDTH / 2 - 50,
y: MINI_GAME_LANE_Y_POSITIONS[randomLane]
});
var newObstacle = {
x: obstacleAnimation.x,
y: obstacleAnimation.y,
width: MINI_GAME_OBSTACLE_WIDTH,
height: MINI_GAME_OBSTACLE_HEIGHT,
type: 'obstacle',
asset: obstacleAnimation,
scored: false
};
game.addChild(obstacleAnimation);
miniGameScreenElements.push(obstacleAnimation);
miniGameObstacles.push(newObstacle);
lastMiniGameObstacleSpawnTime = now;
// console.log("Spawned obstacle in lane " + randomLane);
}
}
function moveMiniGameObstacles() {
if (!miniGamePlayer || isMiniGameOver) {
return;
}
for (var i = miniGameObstacles.length - 1; i >= 0; i--) {
var obs = miniGameObstacles[i];
obs.x -= currentMiniGameObjectSpeed;
if (obs.asset) {
obs.asset.x = obs.x;
}
if (!obs.scored && obs.x < miniGamePlayer.x - miniGamePlayer.width / 2) {
miniGameScore += 5;
obs.scored = true;
updateMiniGameScoreDisplay();
}
if (obs.x < miniGameViewport.x - obs.width / 2 + 50) {
if (obs.asset && obs.asset.parent) {
obs.asset.destroy();
}
var obsAssetIndex = miniGameScreenElements.indexOf(obs.asset);
if (obsAssetIndex > -1) {
miniGameScreenElements.splice(obsAssetIndex, 1);
}
miniGameObstacles.splice(i, 1);
}
}
}
function updateMiniGameScoreDisplay() {
if (miniGameScoreText) {
miniGameScoreText.setText("Score: " + miniGameScore);
}
}
var allBossData = [];
var activeHelperBosses = [];
var autoplayColumns = [false, false, false];
var confirmationContentContainer = null;
var confirmationOptions = [];
var selectedConfirmationOptionIndex = 0;
var isConfirmationDialogActive = false;
var onConfirmYes = null;
var onConfirmNo = null;
var currentBossViewStartIndex = 0;
var cardsContainer = null;
var visibleBossCards = [null, null, null, null];
var selectedCardSlotIndex = 0;
var peekingBossCards = [null, null];
var placeholderMusicKey = 'test1';
var placeholderSongMapKey = 'defaultTestTrack';
var visibleBossCards = [null, null];
var helperBossContainer = null;
var finalBossEventList = [{
time: 73000,
type: 'helper_appear',
buffType: 'shield',
duration: 7000,
bossId: 'boss1',
text: "I'll protect you!"
}, {
time: 76000,
type: 'helper_appear',
buffType: 'autoplay',
duration: 30000,
bossId: 'boss8',
targetColumn: 1,
text: "I'll handle this!"
}, {
time: 76000,
type: 'helper_appear',
buffType: 'autoplay',
duration: 30000,
bossId: 'boss6',
targetColumn: 2,
text: "Let me help!"
}, {
time: 116000,
type: 'helper_appear',
buffType: 'heal_over_time',
duration: 15000,
bossId: 'boss2',
text: "You can do it!"
}, {
time: 126000,
type: 'helper_appear',
buffType: 'autoplay',
duration: 30000,
bossId: 'boss7',
targetColumn: 0,
text: "My turn!"
}, {
time: 126000,
type: 'helper_appear',
buffType: 'autoplay',
duration: 30000,
bossId: 'boss5',
targetColumn: 2,
text: "Leave it to me!"
}, {
time: 149256,
type: 'start_mid_cutscene'
}];
function initializeBossData() {
allBossData = [{
id: 'boss1',
displayName: 'Boss 1',
cardAssetKey: 'boss1',
musicAssetKey: 'Orctave',
songMapKey: 'OrctaveBossTrack',
defeatsRequired: 0
}, {
id: 'boss2',
displayName: 'Boss 2',
cardAssetKey: 'boss2',
musicAssetKey: 'Goblop',
songMapKey: 'GoblopBossTrack',
defeatsRequired: 0
}, {
id: 'boss3',
displayName: 'Boss 3',
cardAssetKey: 'boss3',
musicAssetKey: 'Noizboy',
songMapKey: 'NoizboyTrack',
defeatsRequired: 0
}, {
id: 'boss4',
displayName: 'Boss 4',
cardAssetKey: 'boss4',
musicAssetKey: 'Octobeat',
songMapKey: 'OctobeatBossTrack',
defeatsRequired: 1
}, {
id: 'boss5',
displayName: 'Bitbot',
cardAssetKey: 'boss5',
musicAssetKey: 'Bitbot',
songMapKey: 'BitbotBossTrack',
defeatsRequired: 2
}, {
id: 'boss6',
displayName: 'Salabass',
cardAssetKey: 'boss6',
musicAssetKey: 'Salabass',
songMapKey: 'SalabassTrack',
defeatsRequired: 3
}, {
id: 'boss7',
displayName: 'Funkilla',
cardAssetKey: 'boss7',
musicAssetKey: 'Funkilla',
songMapKey: 'Funkilla_Track',
defeatsRequired: 4
}, {
id: 'boss8',
displayName: 'DJ Pepe',
cardAssetKey: 'boss8',
musicAssetKey: 'djpepe',
songMapKey: 'DJPepe_Track',
defeatsRequired: 5
}];
var loadedUnlockProgress = storage[BOSS_UNLOCK_KEY];
if (loadedUnlockProgress) {
bossUnlockProgress = loadedUnlockProgress;
for (var i = 0; i < allBossData.length; i++) {
var bossId = allBossData[i].id;
if (!bossUnlockProgress.hasOwnProperty(bossId)) {
bossUnlockProgress[bossId] = false;
}
}
} else {
bossUnlockProgress = {};
for (var j = 0; j < allBossData.length; j++) {
bossUnlockProgress[allBossData[j].id] = false;
}
}
}
function updateSelectedCardVisual() {
for (var i = 0; i < visibleBossCards.length; i++) {
var cardContainer = visibleBossCards[i];
if (cardContainer && cardContainer.visualAsset) {
if (i === selectedCardSlotIndex) {
cardContainer.visualAsset.tint = 0xFFFF00;
cardContainer.scale.set(1.05);
} else {
cardContainer.visualAsset.tint = 0xFFFFFF;
cardContainer.scale.set(1.0);
}
}
}
}
function displayBossCards(newStartIndex, isInitialDisplay, numberOfDefeated) {
currentBossViewStartIndex = newStartIndex;
var singleCardDisplayWidth = 400;
var singleCardDisplayHeight = 380;
var spacingBetweenCardsX = 80;
var cardSlotX_0 = singleCardDisplayWidth / 2;
var cardSlotX_1 = singleCardDisplayWidth * 1.5 + spacingBetweenCardsX;
var mainCardsCenterY_relative = singleCardDisplayHeight / 2;
var peekingCardVisibleSliceHeight = 80;
var verticalOffsetMainToPeeking = 140;
var mainCardSlotsPositions = [{
x: cardSlotX_0,
y: mainCardsCenterY_relative
}, {
x: cardSlotX_1,
y: mainCardsCenterY_relative
}];
var peekingCardsTopY_relative = mainCardsCenterY_relative + singleCardDisplayHeight / 2 + verticalOffsetMainToPeeking;
var peekingCardSlotsPositions = [{
x: cardSlotX_0,
y: peekingCardsTopY_relative
}, {
x: cardSlotX_1,
y: peekingCardsTopY_relative
}];
if (!cardsContainer) {
return;
}
while (cardsContainer.children[0]) {
cardsContainer.removeChild(cardsContainer.children[0]).destroy();
}
visibleBossCards = [null, null];
peekingBossCards = [null, null];
for (var i = 0; i < 2; i++) {
var dataIndex = currentBossViewStartIndex + i;
if (dataIndex < allBossData.length) {
var bossData = allBossData[dataIndex];
var cardContainer = new Container();
cardContainer.x = mainCardSlotsPositions[i].x;
cardContainer.y = mainCardSlotsPositions[i].y;
cardContainer.bossData = bossData;
cardContainer.slotIndex = i;
var cardAsset = LK.getAsset(bossData.cardAssetKey, {});
cardAsset.anchor.set(0.5, 0.5);
cardAsset.width = singleCardDisplayWidth;
cardAsset.height = singleCardDisplayHeight;
cardContainer.visualAsset = cardAsset;
cardContainer.addChild(cardAsset);
var isUnlocked = bossData.defeatsRequired === 0 || numberOfDefeated >= bossData.defeatsRequired;
bossData.isUnlocked = isUnlocked;
cardContainer.interactive = true;
cardContainer.cursor = "pointer";
cardContainer.down = function () {
selectedCardSlotIndex = this.slotIndex;
updateSelectedCardVisual();
};
cardsContainer.addChild(cardContainer);
visibleBossCards[i] = cardContainer;
}
}
for (var j = 0; j < 2; j++) {
var peekingDataIndex = currentBossViewStartIndex + 2 + j;
if (peekingDataIndex < allBossData.length) {
var peekingBossData = allBossData[peekingDataIndex];
var peekingCardContainer = new Container();
peekingCardContainer.x = peekingCardSlotsPositions[j].x;
peekingCardContainer.y = peekingCardSlotsPositions[j].y;
var peekingCardAsset = LK.getAsset(peekingBossData.cardAssetKey, {});
peekingCardAsset.anchor.set(0.5, 0);
peekingCardAsset.width = singleCardDisplayWidth;
peekingCardAsset.height = singleCardDisplayHeight;
peekingCardContainer.addChild(peekingCardAsset);
peekingCardContainer.interactive = false;
cardsContainer.addChild(peekingCardContainer);
peekingBossCards[j] = peekingCardContainer;
}
}
if (isInitialDisplay) {
selectedCardSlotIndex = 0;
} else {
var maxSlotOnNewPage = Math.min(1, allBossData.length - 1 - currentBossViewStartIndex);
if (selectedCardSlotIndex > maxSlotOnNewPage) {
selectedCardSlotIndex = maxSlotOnNewPage;
}
}
updateSelectedCardVisual();
}
function getNumberOfDefeatedBosses() {
var count = 0;
for (var i = 0; i < allBossData.length; i++) {
// Zakładamy, że allBossData zawiera tylko standardowych bossów (1-8)
var bossId = allBossData[i].id;
if (bossUnlockProgress.hasOwnProperty(bossId) && bossUnlockProgress[bossId] === true) {
count++;
}
}
return count;
}
function showBossSelectionScreen() {
if (songSummaryContainer && songSummaryContainer.parent) {
songSummaryContainer.destroy();
songSummaryContainer = null;
}
currentScreenState = 'bossGallery_paged';
if (gameUIContainer) {
gameUIContainer.visible = false;
}
if (staticHitFrame) {
staticHitFrame.visible = false;
}
if (staticPerfectLine) {
staticPerfectLine.visible = false;
}
if (shieldTimerDisplayContainer) {
shieldTimerDisplayContainer.visible = false;
}
if (swipeToTapTimerDisplayContainer) {
swipeToTapTimerDisplayContainer.visible = false;
}
initializeBossData();
var numberOfDefeated = getNumberOfDefeatedBosses();
var screenElements = [];
var tempSingleCardDisplayWidth = 400;
var tempSingleCardDisplayHeight = 380;
var tempSpacingBetweenCardsX = 80;
var tempGroupHorizontalOffset = -60;
var tempGroupVerticalOffset = -90;
var screenAreaContentWidth = tempSingleCardDisplayWidth * 2 + tempSpacingBetweenCardsX;
var screenAreaX = (gameScreenWidth - screenAreaContentWidth) / 2 + tempGroupHorizontalOffset;
var screenAreaY = gameScreenHeight / 2 + tempGroupVerticalOffset - tempSingleCardDisplayHeight / 2;
if (cardsContainer && cardsContainer.parent) {
cardsContainer.destroy();
}
cardsContainer = new Container();
cardsContainer.x = screenAreaX;
cardsContainer.y = screenAreaY;
game.addChild(cardsContainer);
screenElements.push(cardsContainer);
displayBossCards(0, true, numberOfDefeated);
var glassAsset = LK.getAsset('glass2', {
x: 324,
y: 886,
width: 1180,
height: 1300,
alpha: 0.4,
interactive: false
});
game.addChild(glassAsset);
screenElements.push(glassAsset);
var galleryBg = LK.getAsset('galleryBackground', {
width: gameScreenWidth,
height: gameScreenHeight,
x: 0,
y: 0
});
game.addChild(galleryBg);
screenElements.push(galleryBg);
var upButton = LK.getAsset('upbutton', {});
upButton.x = 210;
upButton.y = gameScreenHeight / 2 - 180;
upButton.anchor.set(0.5, 0.5);
upButton.interactive = true;
upButton.cursor = "pointer";
upButton.down = function () {
if (isConfirmationDialogActive) {
selectedConfirmationOptionIndex = 0;
updateConfirmationHighlight();
} else {
var newStartIndex = currentBossViewStartIndex - 2;
if (newStartIndex < 0) {
newStartIndex = 0;
}
if (newStartIndex !== currentBossViewStartIndex) {
displayBossCards(newStartIndex, false, numberOfDefeated);
}
}
};
game.addChild(upButton);
screenElements.push(upButton);
var downButton = LK.getAsset('downbutton', {});
downButton.x = 210;
downButton.y = gameScreenHeight / 2 + 220;
downButton.anchor.set(0.5, 0.5);
downButton.interactive = true;
downButton.cursor = "pointer";
downButton.down = function () {
if (isConfirmationDialogActive) {
selectedConfirmationOptionIndex = 1;
updateConfirmationHighlight();
} else {
var newStartIndex = currentBossViewStartIndex + 2;
if (newStartIndex < allBossData.length) {
displayBossCards(newStartIndex, false, numberOfDefeated);
}
}
};
game.addChild(downButton);
screenElements.push(downButton);
var playButton = LK.getAsset('play', {});
playButton.x = gameScreenWidth - 350;
playButton.y = gameScreenHeight / 2 - 240;
playButton.anchor.set(0.5, 0.5);
playButton.interactive = true;
playButton.cursor = "pointer";
playButton.down = function () {
if (isConfirmationDialogActive) {
return;
}
var selectedBossDataIndex = currentBossViewStartIndex + selectedCardSlotIndex;
if (selectedBossDataIndex < allBossData.length) {
var bossData = allBossData[selectedBossDataIndex];
if (bossData.musicAssetKey) {
LK.stopMusic();
LK.playMusic(bossData.musicAssetKey);
}
}
};
game.addChild(playButton);
screenElements.push(playButton);
var stopButton = LK.getAsset('stop', {});
stopButton.x = gameScreenWidth - 350;
stopButton.y = gameScreenHeight / 2;
stopButton.anchor.set(0.5, 0.5);
stopButton.interactive = true;
stopButton.cursor = "pointer";
stopButton.down = function () {
if (isConfirmationDialogActive) {
return;
}
LK.stopMusic();
};
game.addChild(stopButton);
screenElements.push(stopButton);
var fightButton = LK.getAsset('fight', {});
fightButton.x = gameScreenWidth - 350;
fightButton.y = gameScreenHeight / 2 + 240;
fightButton.anchor.set(0.5, 0.5);
fightButton.interactive = true;
fightButton.cursor = "pointer";
fightButton.down = function () {
if (isConfirmationDialogActive) {
if (selectedConfirmationOptionIndex === 0) {
if (onConfirmYes) {
onConfirmYes();
}
} else {
if (onConfirmNo) {
onConfirmNo();
}
}
return;
}
LK.stopMusic();
var selectedDataIndex = currentBossViewStartIndex + selectedCardSlotIndex;
if (selectedDataIndex < allBossData.length) {
var selectedBoss = allBossData[selectedDataIndex];
if (selectedBoss && selectedBoss.isUnlocked) {
var bossIdNumber = parseInt(selectedBoss.id.replace('boss', ''), 10);
screenElements.forEach(function (el) {
if (el && el.parent) {
el.destroy();
}
});
screenElements = [];
if (cardsContainer && cardsContainer.parent) {
cardsContainer.destroy();
cardsContainer = null;
}
loadSong(selectedBoss.songMapKey);
}
}
};
game.addChild(fightButton);
screenElements.push(fightButton);
var rewindButton = LK.getAsset('rewindbutton', {});
rewindButton.x = 350;
rewindButton.y = gameScreenHeight / 2 + 650;
rewindButton.anchorX = 0.5;
rewindButton.anchorY = 0.5;
rewindButton.interactive = true;
rewindButton.cursor = "pointer";
rewindButton.down = function () {
if (isConfirmationDialogActive) {
if (onConfirmNo) {
onConfirmNo();
}
return;
}
LK.stopMusic();
LK.playMusic('introMusic');
screenElements.forEach(function (el) {
if (el && el.parent) {
el.destroy();
}
});
screenElements = [];
if (cardsContainer && cardsContainer.parent) {
cardsContainer.destroy();
cardsContainer = null;
}
currentBossViewStartIndex = 0;
selectedCardSlotIndex = 0;
showMainMenu();
};
game.addChild(rewindButton);
screenElements.push(rewindButton);
var allStandardBossesDefeated = true;
var specialBossButtonAssetKey = allStandardBossesDefeated ? 'specialboss_unlocked' : 'specialboss_locked';
var specialBossButton = LK.getAsset(specialBossButtonAssetKey, {});
specialBossButton.width = 250;
var originalAssetWidthForRatioSB = 300;
var originalAssetHeightUnlockedSB = 250;
var originalAssetHeightLockedSB = 250;
specialBossButton.height = (specialBossButtonAssetKey === 'specialboss_unlocked' ? originalAssetHeightUnlockedSB : originalAssetHeightLockedSB) * (specialBossButton.width / originalAssetWidthForRatioSB);
specialBossButton.x = 950;
specialBossButton.y = 2030;
specialBossButton.anchor.set(0.5, 0.5);
specialBossButton.interactive = true;
if (allStandardBossesDefeated) {
specialBossButton.cursor = "pointer";
specialBossButton.down = function () {
if (isConfirmationDialogActive) {
return;
}
showConfirmationDialog(game, glassAsset, cardsContainer, function () {
hideConfirmationDialog(cardsContainer, glassAsset);
screenElements.forEach(function (el) {
if (el && el.parent) {
el.destroy();
}
});
screenElements = [];
showFinalBossIntro(function () {
loadFinalBossEncounter();
});
}, function () {
hideConfirmationDialog(cardsContainer, glassAsset);
});
};
} else {
specialBossButton.cursor = "default";
specialBossButton.down = function () {
if (isConfirmationDialogActive) {
return;
}
displayLockedMessage(cardsContainer, game, glassAsset);
};
}
game.addChild(specialBossButton);
screenElements.push(specialBossButton);
}
function updateConfirmationHighlight() {
var defaultTint = 0xFFFFFF;
var highlightTint = 0xFFD700;
var defaultScale = 1.0;
var highlightScale = 1.15;
for (var i = 0; i < confirmationOptions.length; i++) {
var option = confirmationOptions[i];
if (option && option.parent) {
if (i === selectedConfirmationOptionIndex) {
option.tint = highlightTint;
option.scale.set(highlightScale);
} else {
option.tint = defaultTint;
option.scale.set(defaultScale);
}
}
}
}
function hideConfirmationDialog(containerToFadeIn, glassToRestore) {
if (confirmationContentContainer && confirmationContentContainer.parent) {
confirmationContentContainer.destroy();
}
if (containerToFadeIn) {
containerToFadeIn.visible = true;
tween(containerToFadeIn, {
alpha: 1
}, {
duration: 400
});
}
if (glassToRestore) {
tween(glassToRestore, {
alpha: 0.4
}, {
duration: 400
});
}
confirmationContentContainer = null;
confirmationOptions = [];
isConfirmationDialogActive = false;
onConfirmYes = null;
onConfirmNo = null;
}
function showConfirmationDialog(parentContainer, referenceObject, containerToFade, yesCallback, noCallback) {
if (isConfirmationDialogActive) {
return;
}
if (referenceObject) {
tween(referenceObject, {
alpha: 0.1
}, {
duration: 400
});
}
if (containerToFade) {
tween(containerToFade, {
alpha: 0
}, {
duration: 400,
onFinish: function onFinish() {
containerToFade.visible = false;
}
});
}
isConfirmationDialogActive = true;
onConfirmYes = yesCallback;
onConfirmNo = noCallback;
selectedConfirmationOptionIndex = 0;
confirmationContentContainer = new Container();
var centerX = 380 + 1150 / 2;
var centerY = 1020 + 890 / 2;
confirmationContentContainer.x = centerX;
confirmationContentContainer.y = centerY - 65;
var referenceIndex = parentContainer.getChildIndex(referenceObject);
parentContainer.addChildAt(confirmationContentContainer, referenceIndex + 1);
var frame = LK.getAsset('finalBossConfirmationFrame', {
anchorX: 0.5,
anchorY: 0.5
});
confirmationContentContainer.addChild(frame);
var shadowOffset = 4;
var questionTextShadow = new Text2("Are you sure?", {
size: 105,
fill: 0x000000,
align: 'center'
});
questionTextShadow.anchor.set(0.5, 0.5);
questionTextShadow.y = -80 + shadowOffset;
questionTextShadow.x = shadowOffset;
confirmationContentContainer.addChild(questionTextShadow);
var questionText = new Text2("Are you sure?", {
size: 120,
fill: 0xb5ac01,
align: 'center'
});
questionText.anchor.set(0.5, 0.5);
questionText.y = -80;
confirmationContentContainer.addChild(questionText);
var yesText = new Text2("Yes", {
size: 85,
fill: 0xFFFFFF,
align: 'center'
});
yesText.anchor.set(0.5, 0.5);
yesText.x = -150;
yesText.y = 80;
confirmationContentContainer.addChild(yesText);
var noText = new Text2("No", {
size: 85,
fill: 0xFFFFFF,
align: 'center'
});
noText.anchor.set(0.5, 0.5);
noText.x = 150;
noText.y = 80;
confirmationContentContainer.addChild(noText);
confirmationOptions = [yesText, noText];
updateConfirmationHighlight();
}
function displayStatsForBoss(bossIndex) {
console.log("--- displayStatsForBoss called for index: " + bossIndex + " ---");
while (currentBossDisplayElements.length > 0) {
var el = currentBossDisplayElements.pop();
if (el && el.parent) {
el.destroy();
}
}
if (bossIndex < 0 || bossIndex >= allBossData.length) {
console.error("Invalid bossIndex for stats: " + bossIndex);
return;
}
var bossData = allBossData[bossIndex];
if (!bossData) {
console.error("No bossData found for index: " + bossIndex);
return;
}
console.log("Displaying stats for boss: " + bossData.displayName);
var viewport = miniGameViewport;
var padding = 40;
var bossStatDetailsContainer = new Container();
bossStatDetailsContainer.x = viewport.x;
bossStatDetailsContainer.y = viewport.y + 60 + 80;
game.addChild(bossStatDetailsContainer);
currentBossDisplayElements.push(bossStatDetailsContainer);
var bossImageWidth = viewport.width * 0.35;
var bossImageHeight = (viewport.height - (viewport.y + 60 + 80 - bossStatDetailsContainer.y)) * 0.7;
if (bossImageHeight > bossImageWidth * 1.5) {
bossImageHeight = bossImageWidth * 1.5;
}
var bossImageX = padding + bossImageWidth / 2;
var bossImageY = padding + bossImageHeight / 2;
var bossAssetKeyToDisplay = bossData.cardAssetKey;
if (!bossAssetKeyToDisplay) {
console.warn("Boss " + bossData.displayName + " has an empty cardAssetKey. Using placeholder.");
bossAssetKeyToDisplay = 'statsBossPlaceholder';
}
var bossImage = LK.getAsset(bossAssetKeyToDisplay, {
anchorX: 0.5,
anchorY: 0.5,
x: bossImageX,
y: bossImageY,
width: bossImageWidth,
height: bossImageHeight
});
bossStatDetailsContainer.addChild(bossImage);
console.log("Boss image: " + bossAssetKeyToDisplay + " at x=" + bossImageX + ", y=" + bossImageY);
// B. Teksty statystyk
var statsTextX = bossImageX + bossImageWidth / 2 + 40; // Zwiększony odstęp od obrazka
var currentTextY = padding + 30; // Startowa pozycja Y dla pierwszego tekstu statystyk (Best Score)
// Możesz dostosować tę wartość, aby ładnie pasowała pod/obok obrazka
var valueFontSize = 65; // Zwiększyłem trochę rozmiar dla wartości statystyk
var lineSpacing = 115; // Zwiększyłem trochę odstęp między liniami
var statsMaxWidth = viewport.width - statsTextX - padding * 1.5;
var songStats = getSongStats(bossData.songMapKey);
var bestScore = songStats.bestScore;
var bestCombo = songStats.bestCombo;
var defeatedStatus = bossUnlockProgress[bossData.id] ? "YES" : "NO";
var defeatedColor = bossUnlockProgress[bossData.id] ? 0x32CD32 : 0xFF4500;
console.log("Stats values - Score: " + bestScore + ", Combo: " + bestCombo + ", Defeated: " + defeatedStatus);
// Usunięto wyświetlanie "nameText" (nazwy bossa)
// Best Score - teraz jako pierwszy tekst
var scoreText = new Text2("Best Score: " + bestScore, {
size: valueFontSize,
fill: 0xFFFFFF,
align: 'left',
wordWrap: true,
wordWrapWidth: statsMaxWidth
});
scoreText.anchor.set(0, 0);
scoreText.x = statsTextX;
scoreText.y = currentTextY;
bossStatDetailsContainer.addChild(scoreText);
currentTextY += valueFontSize + 65; // Odstęp pod Best Score (dostosuj)
// Best Combo
var comboText = new Text2("Best Combo: " + bestCombo, {
size: valueFontSize,
fill: 0xFFFFFF,
align: 'left',
wordWrap: true,
wordWrapWidth: statsMaxWidth
});
comboText.anchor.set(0, 0);
comboText.x = statsTextX;
comboText.y = currentTextY;
bossStatDetailsContainer.addChild(comboText);
currentTextY += valueFontSize + 65; // Odstęp pod Best Combo (dostosuj)
// Boss Defeated
var defeatedText = new Text2("Defeated: ", {
size: valueFontSize,
fill: 0xFFFFFF,
align: 'left'
});
defeatedText.anchor.set(0, 0);
defeatedText.x = statsTextX;
defeatedText.y = currentTextY;
bossStatDetailsContainer.addChild(defeatedText);
var defeatedValue = new Text2(defeatedStatus, {
size: valueFontSize,
fill: defeatedColor,
align: 'left'
});
defeatedValue.anchor.set(0, 0);
defeatedValue.x = statsTextX + defeatedText.width + 10;
defeatedValue.y = currentTextY;
bossStatDetailsContainer.addChild(defeatedValue);
console.log("Stat texts (without boss name) added to container.");
}
function createPlayerHUD() {
if (playerHUD && playerHUD.parent) {
playerHUD.destroy();
}
playerHUD = new Container();
playerHUD.alpha = 0;
playerHUD.visible = false;
gameUIContainer.addChild(playerHUD);
var bg = playerHUD.addChild(LK.getAsset('playerHudBgAsset', {
anchorX: 0.5,
anchorY: 1,
x: gameScreenWidth / 2,
y: 2950,
width: 900,
height: 500,
alpha: 1
}));
playerHpBarFill = playerHUD.addChild(LK.getAsset('playerHpFill', {
width: hpBarWidth,
height: hpBarHeight,
anchorX: 0,
anchorY: 0.5,
x: PLAYER_HP_BAR_X - hpBarWidth / 2,
y: PLAYER_HP_BAR_Y
}));
var shieldFrames = [];
for (var i = 1; i <= 11; i++) {
shieldFrames.push(LK.getAsset('shield' + i, {}));
}
playerShieldAnimation = new SpriteAnimation({
frames: shieldFrames,
frameDuration: 100,
loop: true,
anchorX: 0.5,
anchorY: 0.5,
x: gameScreenWidth / 2,
y: 2700
});
playerShieldAnimation.rotation = Math.PI / 2;
playerShieldAnimation.visible = false;
playerHUD.addChild(playerShieldAnimation);
}
function createBossHUD() {
if (bossHUD && bossHUD.parent) {
bossHUD.destroy();
}
bossHUD = new Container();
bossHUD.alpha = 0;
bossHUD.visible = false;
gameUIContainer.addChild(bossHUD);
var bg = bossHUD.addChild(LK.getAsset('bossHudBgAsset', {
anchorX: 0.5,
anchorY: 0,
x: gameScreenWidth / 2,
y: -200,
width: 900,
height: 500,
alpha: 0.8
}));
bossHpBarFill = bossHUD.addChild(LK.getAsset('bossHpFill', {
width: 600,
height: 100,
anchorX: 0,
anchorY: 0.5,
x: BOSS_HP_BAR_X - hpBarWidth / 2,
y: BOSS_HP_BAR_Y
}));
}
function forceStopAllMusic() {
console.log("--- ROZPOCZYNAM WYMUSZONE ZATRZYMANIE MUZYKI ---");
console.log("Aktualny klucz muzyki (activeMusicKey):", activeMusicKey);
console.log("Czy obiekt muzyki (activeMusicTrack) istnieje?", activeMusicTrack ? 'TAK' : 'NIE');
if (activeMusicTrack && typeof activeMusicTrack.stop === 'function') {
console.log("Obiekt muzyki znaleziony. Wywoluje metode .stop()...");
activeMusicTrack.stop();
console.log("Metoda .stop() zostala wywolana.");
} else {
console.log("BŁĄD: Nie znaleziono obiektu muzyki lub nie ma on metody .stop()!");
}
activeMusicTrack = null;
activeMusicKey = null;
console.log("Zmienne muzyki wyczyszczone. Muzyka powinna byc wylaczona.");
console.log("--- ZAKONCZONO WYMUSZONE ZATRZYMANIE MUZYKI ---");
}
function showMiniGameScreen() {
currentScreenState = 'miniGameActive';
isMiniGameOver = false;
miniGameScore = 0;
miniGameObstacles = [];
while (miniGameScreenElements.length > 0) {
var el_mg_clear = miniGameScreenElements.pop();
if (el_mg_clear && el_mg_clear.parent) {
el_mg_clear.destroy();
}
}
if (miniGamePlayer && miniGamePlayer.asset && miniGamePlayer.asset.parent) {
miniGamePlayer.asset.destroy();
}
miniGamePlayer = null;
if (miniGameScoreText && miniGameScoreText.parent) {
miniGameScoreText.destroy();
}
miniGameScoreText = null;
LK.stopMusic();
LK.playMusic('rollsouls');
if (!miniGameBackgroundInstance || !miniGameBackgroundInstance.parent) {
miniGameBackgroundInstance = LK.getAsset('miniGameRollSoulsBg', {});
if (miniGameBackgroundInstance) {
var faktorSkali = 0.8;
var nowaSzerokoscTla = miniGameViewport.width * faktorSkali;
var nowaWysokoscTla = miniGameViewport.height * faktorSkali;
miniGameBackgroundInstance.width = nowaSzerokoscTla;
miniGameBackgroundInstance.height = nowaWysokoscTla;
miniGameBackgroundInstance.x = miniGameViewport.x + (miniGameViewport.width - nowaSzerokoscTla) / 2;
miniGameBackgroundInstance.y = miniGameViewport.y + (miniGameViewport.height - nowaWysokoscTla) / 2;
game.addChild(miniGameBackgroundInstance);
}
}
if (miniGameBackgroundInstance) {
miniGameBackgroundInstance.visible = true;
miniGameBackgroundInstance.alpha = 0.7;
if (!miniGameScreenElements.includes(miniGameBackgroundInstance)) {
miniGameScreenElements.push(miniGameBackgroundInstance);
}
}
MINI_GAME_LANE_HEIGHT = miniGameViewport.height / MINI_GAME_NUMBER_OF_LANES;
MINI_GAME_LANE_Y_POSITIONS = [];
for (var lane_idx = 0; lane_idx < MINI_GAME_NUMBER_OF_LANES; lane_idx++) {
MINI_GAME_LANE_Y_POSITIONS.push(miniGameViewport.y + lane_idx * MINI_GAME_LANE_HEIGHT + MINI_GAME_LANE_HEIGHT / 2);
}
var playerFrames = [LK.getAsset('player_anim_1', {}), LK.getAsset('player_anim_2', {}), LK.getAsset('player_anim_3', {})];
var playerAnimation = new SpriteAnimation({
frames: playerFrames,
frameDuration: 350,
loop: true,
anchorX: 0.5,
anchorY: 0.5
});
miniGamePlayer = {
lane: 1,
y: MINI_GAME_LANE_Y_POSITIONS[1],
x: miniGameViewport.x + 100,
width: 50,
height: 50,
asset: playerAnimation
};
playerAnimation.x = miniGamePlayer.x;
playerAnimation.y = miniGamePlayer.y;
game.addChild(playerAnimation);
miniGameScreenElements.push(playerAnimation);
var scoreTextInstance = new Text2("Score: 0", {
size: 40,
fill: 0xFFFFFF,
align: 'left'
});
scoreTextInstance.anchor.set(0, 0);
scoreTextInstance.x = miniGameViewport.x + 20;
scoreTextInstance.y = miniGameViewport.y + 20;
game.addChild(scoreTextInstance);
miniGameScreenElements.push(scoreTextInstance);
miniGameScoreText = scoreTextInstance;
lastMiniGameObstacleSpawnTime = Date.now();
currentMiniGameObjectSpeed = MINI_GAME_OBJECT_SPEED;
miniGameTimeActive = 0;
var glassAssetFromMainMenu = null;
for (var i_glass = 0; i_glass < mainMenuScreenElements.length; i_glass++) {
var el_glass_check = mainMenuScreenElements[i_glass];
if (el_glass_check && el_glass_check.x === miniGameViewport.x && el_glass_check.y === miniGameViewport.y && el_glass_check.width === miniGameViewport.width && el_glass_check.height === miniGameViewport.height && el_glass_check.alpha && Math.abs(el_glass_check.alpha - 0.3) < 0.01) {
glassAssetFromMainMenu = el_glass_check;
break;
}
}
if (glassAssetFromMainMenu && glassAssetFromMainMenu.parent) {
var parentContainer = glassAssetFromMainMenu.parent;
parentContainer.removeChild(glassAssetFromMainMenu);
parentContainer.addChild(glassAssetFromMainMenu);
}
var rewindButtonMiniGame = LK.getAsset('rewindbutton', {
x: 350,
y: gameScreenHeight / 2 + 650,
anchorX: 0.5,
anchorY: 0.5,
interactive: true,
cursor: "pointer"
});
rewindButtonMiniGame.down = function () {
exitMiniGameAndReturnToMainMenu();
};
game.addChild(rewindButtonMiniGame);
miniGameScreenElements.push(rewindButtonMiniGame);
}
function showStatsScreen() {
console.log("Showing Stats Screen - Full Setup");
while (statsScreenElements.length > 0) {
var el = statsScreenElements.pop();
if (el && el.parent) {
el.destroy();
}
}
while (currentBossDisplayElements.length > 0) {
var cbdEl = currentBossDisplayElements.pop();
if (cbdEl && cbdEl.parent) {
cbdEl.destroy();
}
}
initializeBossData(); // <<<< DODAJ TĘ LINIĘ NA POCZĄTKU FUNKCJI
currentScreenState = 'statsScreen';
currentStatsBossIndex = 0;
var glassStats = LK.getAsset('glass2', {
x: miniGameViewport.x,
y: miniGameViewport.y,
width: miniGameViewport.width,
height: miniGameViewport.height,
alpha: 0.15,
interactive: false
});
game.addChild(glassStats);
statsScreenElements.push(glassStats);
var statsTitle = new Text2("PLAYER STATS", {
size: 60,
fill: 0xFFFFFF,
align: 'center',
stroke: 0x000000,
strokeThickness: 4
});
statsTitle.anchor.set(0.5, 0.5);
statsTitle.x = miniGameViewport.x + miniGameViewport.width / 2;
statsTitle.y = miniGameViewport.y + 100;
game.addChild(statsTitle);
statsScreenElements.push(statsTitle);
displayStatsForBoss(currentStatsBossIndex);
// Przyciski nawigacyjne dla ekranu Stats
var upButtonStats = LK.getAsset('upbutton', {});
upButtonStats.x = 210;
upButtonStats.y = gameScreenHeight / 2 - 180;
upButtonStats.anchor.set(0.5, 0.5);
upButtonStats.interactive = true;
upButtonStats.cursor = "pointer";
upButtonStats.down = function () {
if (currentStatsBossIndex > 0) {
currentStatsBossIndex--;
displayStatsForBoss(currentStatsBossIndex);
}
};
game.addChild(upButtonStats);
statsScreenElements.push(upButtonStats);
var downButtonStats = LK.getAsset('downbutton', {});
downButtonStats.x = 210;
downButtonStats.y = gameScreenHeight / 2 + 220;
downButtonStats.anchor.set(0.5, 0.5);
downButtonStats.interactive = true;
downButtonStats.cursor = "pointer";
downButtonStats.down = function () {
if (currentStatsBossIndex < allBossData.length - 1) {
currentStatsBossIndex++;
displayStatsForBoss(currentStatsBossIndex);
}
};
game.addChild(downButtonStats);
statsScreenElements.push(downButtonStats);
var rewindButtonStats = LK.getAsset('rewindbutton', {
x: 350,
y: gameScreenHeight / 2 + 650,
anchorX: 0.5,
anchorY: 0.5,
interactive: true,
cursor: "pointer"
});
rewindButtonStats.down = function () {
console.log("Rewind button pressed: Exiting Stats screen.");
while (statsScreenElements.length > 0) {
var elToDestroyStats = statsScreenElements.pop();
if (elToDestroyStats && elToDestroyStats.parent) {
elToDestroyStats.destroy();
}
}
while (currentBossDisplayElements.length > 0) {
var cbdElExit = currentBossDisplayElements.pop(); // Zmieniona nazwa zmiennej
if (cbdElExit && cbdElExit.parent) {
cbdElExit.destroy();
}
}
showMainMenu();
};
game.addChild(rewindButtonStats);
statsScreenElements.push(rewindButtonStats);
var playButtonStats = LK.getAsset('play', {});
playButtonStats.x = gameScreenWidth - 350;
playButtonStats.y = gameScreenHeight / 2 - 240;
playButtonStats.anchor.set(0.5, 0.5);
playButtonStats.interactive = false;
playButtonStats.alpha = 0.5;
game.addChild(playButtonStats);
statsScreenElements.push(playButtonStats);
var stopButtonStats = LK.getAsset('stop', {});
stopButtonStats.x = gameScreenWidth - 350;
stopButtonStats.y = gameScreenHeight / 2;
stopButtonStats.anchor.set(0.5, 0.5);
stopButtonStats.interactive = false;
stopButtonStats.alpha = 0.5;
game.addChild(stopButtonStats);
statsScreenElements.push(stopButtonStats);
var fightButtonStats = LK.getAsset('fight', {});
fightButtonStats.x = gameScreenWidth - 350;
fightButtonStats.y = gameScreenHeight / 2 + 240;
fightButtonStats.anchor.set(0.5, 0.5);
fightButtonStats.interactive = false;
fightButtonStats.alpha = 0.5;
game.addChild(fightButtonStats);
statsScreenElements.push(fightButtonStats);
}
function showEndlessIntro() {
var introElements = [];
var localIntroTimers = [];
var comicPanelsContainer = null;
var skipButton = null;
function clearLocalIntroTimers() {
localIntroTimers.forEach(function (timerId) {
if (timerId) {
LK.clearTimeout(timerId);
}
});
localIntroTimers = [];
}
function endEndlessIntroAndStartGame() {
if (currentScreenState !== 'intro_endless' && currentScreenState !== 'transitioning_to_endless') {
return;
}
currentScreenState = 'transitioning_to_endless';
clearLocalIntroTimers();
var elementsToFade = introElements.slice();
var fadedCount = 0;
var totalToFade = elementsToFade.length;
var onAllFadedOut = function onAllFadedOut() {
elementsToFade.forEach(function (el) {
if (el && el.parent) {
el.destroy();
}
});
introElements = [];
comicPanelsContainer = null;
skipButton = null;
initializeEndlessGameplay(false);
};
if (totalToFade === 0) {
onAllFadedOut();
return;
}
elementsToFade.forEach(function (el) {
tween(el, {
alpha: 0
}, {
duration: 800,
easing: tween.easeOut,
onFinish: function onFinish() {
fadedCount++;
if (fadedCount === totalToFade) {
onAllFadedOut();
}
}
});
});
}
function displayPanelWithFadeIn(assetKey, positionConfig, durationMs, callback) {
if (currentScreenState !== 'intro_endless' || !comicPanelsContainer) {
return;
}
var panel = LK.getAsset(assetKey, {
anchorX: 0.5,
anchorY: 0.5,
x: positionConfig.x,
y: positionConfig.y,
width: positionConfig.width,
height: positionConfig.height,
alpha: 0
});
comicPanelsContainer.addChild(panel);
introElements.push(panel);
tween(panel, {
alpha: 1
}, {
duration: durationMs,
easing: tween.linear,
onFinish: function onFinish() {
if (callback && currentScreenState === 'intro_endless') {
callback();
}
}
});
}
function hideAndDestroyPanels(durationMs, callback) {
var panelsToFade = introElements.filter(function (el) {
return el !== skipButton && el !== comicPanelsContainer;
});
if (panelsToFade.length === 0) {
if (callback) {
callback();
}
return;
}
var fadedCount = 0;
panelsToFade.forEach(function (p) {
if (p && p.parent) {
tween(p, {
alpha: 0
}, {
duration: durationMs,
easing: tween.linear,
onFinish: function onFinish() {
var idx = introElements.indexOf(p);
if (idx > -1) {
introElements.splice(idx, 1);
}
if (p.parent) {
p.destroy();
}
fadedCount++;
if (fadedCount === panelsToFade.length && callback && currentScreenState === 'intro_endless') {
callback();
}
}
});
} else {
fadedCount++;
if (fadedCount === panelsToFade.length && callback && currentScreenState === 'intro_endless') {
callback();
}
}
});
}
currentScreenState = 'intro_endless';
game.setBackgroundColor(0x000000);
comicPanelsContainer = new Container();
game.addChild(comicPanelsContainer);
introElements.push(comicPanelsContainer);
skipButton = new Text2("SKIP", {
size: 60,
fill: 0xBBBBBB,
align: 'right'
});
skipButton.anchor.set(1, 0);
skipButton.x = gameScreenWidth - 40;
skipButton.y = 40;
skipButton.interactive = true;
skipButton.cursor = "pointer";
game.addChild(skipButton);
introElements.push(skipButton);
skipButton.down = function () {
if (currentScreenState === 'intro_endless') {
endEndlessIntroAndStartGame();
}
};
var panelWidth = gameScreenWidth * 0.85;
var panelHeight = gameScreenHeight / 3 - 60;
var panelX = gameScreenWidth / 2;
var panelPositions = [{
x: panelX,
y: panelHeight / 2 + 40,
width: panelWidth,
height: panelHeight
}, {
x: panelX,
y: panelHeight * 1.5 + 60,
width: panelWidth,
height: panelHeight
}, {
x: panelX,
y: panelHeight * 2.5 + 80,
width: panelWidth,
height: panelHeight
}];
var endlessIntroAssetKeys = ['endless_intro_1', 'endless_intro_2', 'endless_intro_3', 'endless_intro_4', 'endless_intro_5', 'endless_intro_6'];
function proceedToEndlessPhase2() {
if (currentScreenState !== 'intro_endless') {
return;
}
hideAndDestroyPanels(800, function () {
if (currentScreenState !== 'intro_endless') {
return;
}
displayPanelWithFadeIn(endlessIntroAssetKeys[3], panelPositions[0], 800, function () {
localIntroTimers.push(LK.setTimeout(function () {
displayPanelWithFadeIn(endlessIntroAssetKeys[4], panelPositions[1], 800, function () {
localIntroTimers.push(LK.setTimeout(function () {
displayPanelWithFadeIn(endlessIntroAssetKeys[5], panelPositions[2], 800, function () {
localIntroTimers.push(LK.setTimeout(function () {
if (currentScreenState === 'intro_endless') {
endEndlessIntroAndStartGame();
}
}, 3000));
});
}, 3000));
});
}, 3000));
});
});
}
displayPanelWithFadeIn(endlessIntroAssetKeys[0], panelPositions[0], 800, function () {
localIntroTimers.push(LK.setTimeout(function () {
displayPanelWithFadeIn(endlessIntroAssetKeys[1], panelPositions[1], 800, function () {
localIntroTimers.push(LK.setTimeout(function () {
displayPanelWithFadeIn(endlessIntroAssetKeys[2], panelPositions[2], 800, function () {
localIntroTimers.push(LK.setTimeout(proceedToEndlessPhase2, 3000));
});
}, 3000));
});
}, 3000));
});
}
// Musimy też dodać tę pustą funkcję, aby uniknąć błędu.
// W niej zbudujemy logikę ładowania tła, muzyki i generatora.
function initializeEndlessGameplay(isRestart) {
console.log("Endless: Inicjalizacja rozgrywki.");
if (isRestart) {
LK.stopMusic();
LK.playMusic('endless_intro_music', {
loop: true
});
}
currentScreenState = 'endlessLoopActive';
currentEndlessDifficulty = 0.5;
noteStreamStarted = false;
resetGameState();
if (gameplayBackground && gameplayBackground.parent) {
gameplayBackground.destroy();
}
gameplayBackground = LK.getAsset('endless_background_asset', {
x: 0,
y: 0,
width: gameScreenWidth,
height: gameScreenHeight,
alpha: 0
});
game.addChildAt(gameplayBackground, 0);
var scenicContainer = new Container();
game.addChild(scenicContainer);
setupEndlessEyes();
if (leftEye) {
scenicContainer.addChild(leftEye);
}
if (rightEye) {
scenicContainer.addChild(rightEye);
}
currentActiveRhythmMap = [];
endlessTimelineOffsetMs = 10000 + noteTravelTime;
createPlayerHUD();
playerCurrentHP = playerMaxHP;
if (gameUIContainer) {
gameUIContainer.visible = true;
}
// === ZMIANA TUTAJ: Ustawiamy scoreTxt i comboTxt na widoczne ===
if (scoreTxt) {
scoreTxt.visible = true;
scoreTxt.alpha = 0; // Będzie animowane w dół
}
if (comboTxt) {
comboTxt.visible = true;
comboTxt.alpha = 0; // Będzie animowane w dół
}
// === KONIEC ZMIANY ===
if (endlessTimerTxt && endlessTimerTxt.parent) {
endlessTimerTxt.destroy();
}
endlessTimerTxt = new Text2('Time: 00:00', {
size: 80,
fill: 0xFFFFFF,
stroke: 0x000000,
strokeThickness: 4,
align: 'center'
});
endlessTimerTxt.anchor.set(0.5, 0);
endlessTimerTxt.x = gameScreenWidth / 2;
endlessTimerTxt.y = 20;
gameUIContainer.addChild(endlessTimerTxt);
endlessTimerTxt.visible = true;
endlessTimerTxt.alpha = 0;
if (playerHUD) {
playerHUD.visible = true;
playerHUD.alpha = 0;
}
if (bossHUD) {
bossHUD.visible = false;
}
setupGameplayElements();
if (staticHitFrame) {
staticHitFrame.visible = true;
staticHitFrame.alpha = 0;
}
if (staticPerfectLine) {
staticPerfectLine.visible = true;
staticPerfectLine.alpha = 0;
}
game.setChildIndex(scenicContainer, 1);
LK.setTimeout(function () {
if (leftEye && rightEye) {
leftEye.visible = true;
rightEye.visible = true;
leftEye.play();
rightEye.play();
}
}, 3000);
var elementsToFadeIn = [gameplayBackground, playerHUD, endlessTimerTxt, staticHitFrame, staticPerfectLine, scoreTxt, comboTxt]; // Dodane scoreTxt i comboTxt
var fadeDuration = 8000;
elementsToFadeIn.forEach(function (el) {
if (el) {
var finalAlpha = el === gameplayBackground || el === staticHitFrame || el === scoreTxt ? 0.8 : 1.0; // Dostosuj alpha dla scoreTxt
if (el === comboTxt) {
finalAlpha = 0.5;
}
tween(el, {
alpha: finalAlpha
}, {
duration: fadeDuration,
easing: tween.easeIn
});
}
});
gameStartTime = Date.now();
endlessStartTime = gameStartTime;
}
function generateProceduralRhythmMap(durationSeconds, currentDifficulty, bpm) {
var newMap = [];
var currentChunkTimeMs = 0;
var targetDurationMs = durationSeconds * 1000;
var lastNoteTime = 0;
var MIN_NOTE_GAP_MS = 290; // Zwiększona wartość dla większego bezpieczeństwa
var INITIAL_TIME_MULTIPLIER = 8.0;
var FINAL_TIME_MULTIPLIER = 1.0;
var INTER_PATTERN_BASE_GAP_MS = 2200; // Twoja wartość, którą już zmieniłeś
var patternLibrary = [{
notes: [{
type: 'tap',
col: 0,
delayMs: 150
}, {
type: 'tap',
col: 0,
delayMs: 496
}, {
type: 'swipe',
col: 0,
delayMs: 557
}, {
type: 'tap',
col: 1,
delayMs: 913
}, {
type: 'tap',
col: 1,
delayMs: 458
}, {
type: 'swipe',
col: 1,
delayMs: 510
}, {
type: 'tap',
col: 2,
delayMs: 941
}, {
type: 'tap',
col: 2,
delayMs: 524
}, {
type: 'swipe',
col: 2,
delayMs: 507
}]
}, {
notes: [{
type: 'swipe',
col: 2,
delayMs: 0
}, {
type: 'swipe',
col: 0,
delayMs: 492
}, {
type: 'swipe',
col: 1,
delayMs: 425
}, {
type: 'swipe',
col: 0,
delayMs: 340
}, {
type: 'swipe',
col: 2,
delayMs: 336
}, {
type: 'tap',
col: 1,
delayMs: 268
}, {
type: 'tap',
col: 2,
delayMs: 467
}, {
type: 'tap',
col: 1,
delayMs: 418
}, {
type: 'tap',
col: 0,
delayMs: 317
}, {
type: 'tap',
col: 1,
delayMs: 389
}, {
type: 'swipe',
col: 1,
delayMs: 236
}, {
type: 'swipe',
col: 0,
delayMs: 459
}, {
type: 'swipe',
col: 1,
delayMs: 465
}, {
type: 'swipe',
col: 2,
delayMs: 373
}, {
type: 'swipe',
col: 1,
delayMs: 352
}, {
type: 'tap',
col: 1,
delayMs: 192
}, {
type: 'tap',
col: 2,
delayMs: 443
}, {
type: 'tap',
col: 1,
delayMs: 426
}, {
type: 'tap',
col: 0,
delayMs: 391
}, {
type: 'tap',
col: 2,
delayMs: 314
}]
}, {
notes: [{
type: 'swipe',
col: 2,
delayMs: 0
}, {
type: 'swipe',
col: 0,
delayMs: 440
}, {
type: 'swipe',
col: 2,
delayMs: 468
}, {
type: 'swipe',
col: 0,
delayMs: 456
}, {
type: 'swipe',
col: 2,
delayMs: 484
}, {
type: 'swipe',
col: 0,
delayMs: 464
}, {
type: 'swipe',
col: 2,
delayMs: 464
}, {
type: 'swipe',
col: 0,
delayMs: 449
}, {
type: 'swipe',
col: 2,
delayMs: 420
}, {
type: 'tap',
col: 0,
delayMs: 313
}, {
type: 'tap',
col: 2,
delayMs: 265
}, {
type: 'tap',
col: 0,
delayMs: 468
}, {
type: 'tap',
col: 2,
delayMs: 444
}, {
type: 'tap',
col: 0,
delayMs: 376
}, {
type: 'tap',
col: 2,
delayMs: 390
}, {
type: 'tap',
col: 1,
delayMs: 189
}, {
type: 'swipe',
col: 1,
delayMs: 468
}, {
type: 'swipe',
col: 0,
delayMs: 460
}, {
type: 'swipe',
col: 1,
delayMs: 229
}, {
type: 'swipe',
col: 2,
delayMs: 278
}, {
type: 'tap',
col: 1,
delayMs: 468
}, {
type: 'tap',
col: 2,
delayMs: 439
}, {
type: 'tap',
col: 0,
delayMs: 476
}]
}, {
notes: [{
type: 'tap',
col: 0,
delayMs: 0
}, {
type: 'tap',
col: 1,
delayMs: 177
}, {
type: 'tap',
col: 2,
delayMs: 264
}, {
type: 'tap',
col: 0,
delayMs: 260
}, {
type: 'tap',
col: 1,
delayMs: 206
}, {
type: 'tap',
col: 2,
delayMs: 154
}, {
type: 'tap',
col: 2,
delayMs: 293
}, {
type: 'tap',
col: 1,
delayMs: 156
}, {
type: 'tap',
col: 0,
delayMs: 160
}, {
type: 'tap',
col: 0,
delayMs: 317
}, {
type: 'tap',
col: 0,
delayMs: 393
}, {
type: 'tap',
col: 1,
delayMs: 426
}, {
type: 'tap',
col: 2,
delayMs: 345
}, {
type: 'tap',
col: 2,
delayMs: 326
}, {
type: 'tap',
col: 1,
delayMs: 249
}]
}, {
notes: [{
type: 'tap',
col: 0,
delayMs: 0
}, {
type: 'swipe',
col: 0,
delayMs: 289
}, {
type: 'tap',
col: 0,
delayMs: 270
}, {
type: 'tap',
col: 1,
delayMs: 408
}, {
type: 'swipe',
col: 1,
delayMs: 282
}, {
type: 'tap',
col: 1,
delayMs: 320
}, {
type: 'tap',
col: 2,
delayMs: 694
}, {
type: 'swipe',
col: 2,
delayMs: 284
}, {
type: 'tap',
col: 2,
delayMs: 339
}]
}, {
notes: [{
type: 'tap',
col: 0,
delayMs: 0
}, {
type: 'tap',
col: 1,
delayMs: 251
}, {
type: 'tap',
col: 2,
delayMs: 509
}, {
type: 'swipe',
col: 2,
delayMs: 388
}, {
type: 'swipe',
col: 1,
delayMs: 271
}, {
type: 'swipe',
col: 0,
delayMs: 253
}, {
type: 'tap',
col: 0,
delayMs: 727
}, {
type: 'tap',
col: 1,
delayMs: 217
}, {
type: 'tap',
col: 2,
delayMs: 226
}]
}, {
notes: [{
type: 'tap',
col: 2,
delayMs: 150
}, {
type: 'tap',
col: 2,
delayMs: 491
}, {
type: 'tap',
col: 1,
delayMs: 543
}, {
type: 'tap',
col: 1,
delayMs: 477
}, {
type: 'tap',
col: 0,
delayMs: 473
}, {
type: 'tap',
col: 0,
delayMs: 526
}, {
type: 'tap',
col: 0,
delayMs: 463
}, {
type: 'tap',
col: 0,
delayMs: 573
}, {
type: 'tap',
col: 1,
delayMs: 454
}, {
type: 'tap',
col: 0,
delayMs: 503
}, {
type: 'tap',
col: 1,
delayMs: 512
}, {
type: 'tap',
col: 0,
delayMs: 435
}, {
type: 'tap',
col: 1,
delayMs: 554
}]
}, {
notes: [{
type: 'swipe',
col: 0,
delayMs: 150
}, {
type: 'swipe',
col: 2,
delayMs: 629
}, {
type: 'swipe',
col: 0,
delayMs: 584
}, {
type: 'swipe',
col: 2,
delayMs: 550
}, {
type: 'swipe',
col: 1,
delayMs: 566
}, {
type: 'swipe',
col: 0,
delayMs: 564
}, {
type: 'swipe',
col: 1,
delayMs: 556
}, {
type: 'swipe',
col: 0,
delayMs: 634
}]
}, {
notes: [{
type: 'tap',
col: 0,
delayMs: 150
}, {
type: 'swipe',
col: 2,
delayMs: 541
}, {
type: 'swipe',
col: 2,
delayMs: 513
}, {
type: 'tap',
col: 1,
delayMs: 476
}, {
type: 'swipe',
col: 1,
delayMs: 419
}, {
type: 'swipe',
col: 1,
delayMs: 537
}, {
type: 'tap',
col: 2,
delayMs: 433
}, {
type: 'swipe',
col: 0,
delayMs: 533
}, {
type: 'swipe',
col: 0,
delayMs: 488
}, {
type: 'tap',
col: 1,
delayMs: 425
}, {
type: 'tap',
col: 2,
delayMs: 401
}, {
type: 'tap',
col: 0,
delayMs: 396
}]
}, {
notes: [{
type: 'tap',
col: 2,
delayMs: 150
}, {
type: 'tap',
col: 2,
delayMs: 567
}, {
type: 'tap',
col: 2,
delayMs: 498
}, {
type: 'swipe',
col: 0,
delayMs: 491
}, {
type: 'swipe',
col: 1,
delayMs: 504
}, {
type: 'tap',
col: 1,
delayMs: 528
}, {
type: 'tap',
col: 2,
delayMs: 459
}, {
type: 'tap',
col: 0,
delayMs: 541
}, {
type: 'tap',
col: 0,
delayMs: 802
}, {
type: 'swipe',
col: 1,
delayMs: 827
}, {
type: 'swipe',
col: 1,
delayMs: 812
}, {
type: 'swipe',
col: 2,
delayMs: 467
}, {
type: 'tap',
col: 1,
delayMs: 789
}, {
type: 'tap',
col: 1,
delayMs: 449
}, {
type: 'tap',
col: 2,
delayMs: 448
}, {
type: 'tap',
col: 0,
delayMs: 425
}]
}, {
notes: [{
type: 'tap',
col: 0,
delayMs: 150
}, {
type: 'tap',
col: 1,
delayMs: 590
}, {
type: 'tap',
col: 2,
delayMs: 565
}, {
type: 'tap',
col: 2,
delayMs: 573
}, {
type: 'tap',
col: 1,
delayMs: 580
}, {
type: 'tap',
col: 0,
delayMs: 591
}, {
type: 'tap',
col: 0,
delayMs: 538
}, {
type: 'tap',
col: 1,
delayMs: 541
}, {
type: 'tap',
col: 2,
delayMs: 639
}]
}, {
notes: [{
type: 'swipe',
col: 2,
delayMs: 150
}, {
type: 'tap',
col: 1,
delayMs: 500
}, {
type: 'tap',
col: 1,
delayMs: 469
}, {
type: 'swipe',
col: 1,
delayMs: 417
}, {
type: 'tap',
col: 1,
delayMs: 563
}, {
type: 'tap',
col: 1,
delayMs: 440
}, {
type: 'swipe',
col: 1,
delayMs: 404
}, {
type: 'tap',
col: 2,
delayMs: 616
}, {
type: 'tap',
col: 2,
delayMs: 405
}, {
type: 'swipe',
col: 0,
delayMs: 385
}, {
type: 'tap',
col: 0,
delayMs: 596
}, {
type: 'tap',
col: 0,
delayMs: 428
}]
}, {
notes: [{
type: 'tap',
col: 0,
delayMs: 150
}, {
type: 'tap',
col: 2,
delayMs: 709
}, {
type: 'swipe',
col: 1,
delayMs: 670
}, {
type: 'swipe',
col: 1,
delayMs: 528
}, {
type: 'tap',
col: 0,
delayMs: 744
}, {
type: 'tap',
col: 2,
delayMs: 686
}, {
type: 'swipe',
col: 1,
delayMs: 654
}, {
type: 'swipe',
col: 1,
delayMs: 485
}, {
type: 'tap',
col: 0,
delayMs: 783
}, {
type: 'tap',
col: 2,
delayMs: 646
}, {
type: 'tap',
col: 1,
delayMs: 703
}, {
type: 'tap',
col: 1,
delayMs: 450
}]
}, {
notes: [{
type: 'swipe',
col: 0,
delayMs: 150
}, {
type: 'swipe',
col: 1,
delayMs: 609
}, {
type: 'swipe',
col: 2,
delayMs: 654
}, {
type: 'swipe',
col: 1,
delayMs: 546
}, {
type: 'swipe',
col: 2,
delayMs: 613
}, {
type: 'tap',
col: 2,
delayMs: 658
}, {
type: 'tap',
col: 2,
delayMs: 540
}, {
type: 'tap',
col: 2,
delayMs: 484
}, {
type: 'tap',
col: 1,
delayMs: 400
}]
}, {
notes: [{
type: 'swipe',
col: 1,
delayMs: 150
}, {
type: 'tap',
col: 0,
delayMs: 603
}, {
type: 'tap',
col: 1,
delayMs: 639
}, {
type: 'tap',
col: 2,
delayMs: 683
}, {
type: 'swipe',
col: 2,
delayMs: 438
}, {
type: 'tap',
col: 2,
delayMs: 565
}, {
type: 'tap',
col: 1,
delayMs: 638
}, {
type: 'tap',
col: 0,
delayMs: 390
}, {
type: 'swipe',
col: 0,
delayMs: 684
}, {
type: 'tap',
col: 0,
delayMs: 595
}, {
type: 'tap',
col: 1,
delayMs: 595
}, {
type: 'tap',
col: 2,
delayMs: 619
}]
}];
var difficultyProgress = Math.min(1, currentDifficulty / MAX_ENDLESS_DIFFICULTY);
var multiplierRange = INITIAL_TIME_MULTIPLIER - FINAL_TIME_MULTIPLIER;
var currentTimeMultiplier = FINAL_TIME_MULTIPLIER + multiplierRange * (1 - difficultyProgress);
while (currentChunkTimeMs < targetDurationMs) {
var patternIndex = Math.floor(Math.random() * patternLibrary.length);
var chosenPattern = patternLibrary[patternIndex];
chosenPattern.notes.forEach(function (pNote) {
var stretchedDelayMs = pNote.delayMs * currentTimeMultiplier;
if (pNote.delayMs > 0) {
currentChunkTimeMs += stretchedDelayMs;
}
// --- POPRAWIONA LOGIKA BEZPIECZEŃSTWA ---
if (currentChunkTimeMs < lastNoteTime + MIN_NOTE_GAP_MS) {
currentChunkTimeMs = lastNoteTime + MIN_NOTE_GAP_MS;
}
// --- KONIEC POPRAWKI ---
var newNote = {};
newNote.time = currentChunkTimeMs;
newNote.columnIndex = pNote.col;
newNote.type = pNote.type;
if (newNote.type === 'tap') {
if (Math.random() < ENDLESS_TRAP_CHANCE) {
newNote.type = 'trap';
}
}
if (pNote.type === 'swipe') {
var swipeDirs = ['up', 'down', 'left', 'right'];
newNote.swipeDir = swipeDirs[Math.floor(Math.random() * swipeDirs.length)];
}
newMap.push(newNote);
lastNoteTime = newNote.time;
});
var stretchedInterPatternGap = INTER_PATTERN_BASE_GAP_MS * currentTimeMultiplier;
currentChunkTimeMs += stretchedInterPatternGap;
}
return {
map: newMap,
duration: currentChunkTimeMs
};
}
function showIntro() {
if (typeof introElements !== 'undefined' && introElements.forEach) {
introElements.forEach(function (el) {
if (el && el.parent) {
el.destroy();
}
});
}
introElements = [];
var localIntroTimers = [];
var introArrowObject = null;
var isWaitingForUserClick = false;
var comicPanelsContainer = null;
var skipButton = null;
function clearLocalIntroTimers(clearArrowPulse) {
localIntroTimers.forEach(function (timerId) {
if (timerId) {
LK.clearTimeout(timerId);
}
});
localIntroTimers = [];
if (clearArrowPulse && introArrowObject && introArrowObject.pulseTimerId) {
LK.clearTimeout(introArrowObject.pulseTimerId);
introArrowObject.pulseTimerId = null;
}
}
if (typeof gameUIContainer !== 'undefined' && gameUIContainer) {
gameUIContainer.visible = false;
}
if (typeof staticHitFrame !== 'undefined' && staticHitFrame) {
staticHitFrame.visible = false;
}
if (typeof staticPerfectLine !== 'undefined' && staticPerfectLine) {
staticPerfectLine.visible = false;
}
currentScreenState = 'intro';
game.setBackgroundColor(0x000000);
comicPanelsContainer = new Container();
game.addChild(comicPanelsContainer);
introElements.push(comicPanelsContainer);
skipButton = new Text2("SKIP", {
size: 60,
fill: 0xBBBBBB,
align: 'right'
});
skipButton.anchor.set(1, 0);
skipButton.x = gameScreenWidth - 40;
skipButton.y = 40;
skipButton.interactive = true;
skipButton.cursor = "pointer";
game.addChild(skipButton);
introElements.push(skipButton);
skipButton.down = function () {
if (currentScreenState === 'intro') {
endIntroSequence();
}
};
var panelWidth = gameScreenWidth * 0.85;
var panelHeight = gameScreenHeight / 3 - 60;
var panelX = gameScreenWidth / 2;
var panelPositions = [{
x: panelX,
y: panelHeight / 2 + 40,
width: panelWidth,
height: panelHeight
}, {
x: panelX,
y: panelHeight * 1.5 + 60,
width: panelWidth,
height: panelHeight
}, {
x: panelX,
y: panelHeight * 2.5 + 80,
width: panelWidth,
height: panelHeight
}];
var introAssetKeys = ['intro_scene_1', 'intro_scene_2', 'intro_scene_3', 'intro_scene_4', 'intro_scene_5', 'intro_scene_6', 'intro_scene_7', 'intro_scene_8', 'intro_scene_9'];
var introArrowAssetKey = 'intro_arrow_down';
var activePanelObjects = [];
function endIntroSequence() {
if (currentScreenState !== 'intro' && currentScreenState !== 'transitioning_to_menu') {
return;
}
currentScreenState = 'transitioning_to_menu';
clearLocalIntroTimers(true);
isWaitingForUserClick = false;
var elementsToFade = [];
if (comicPanelsContainer && comicPanelsContainer.parent) {
elementsToFade.push(comicPanelsContainer);
}
if (skipButton && skipButton.parent) {
elementsToFade.push(skipButton);
}
if (introArrowObject && introArrowObject.parent) {
elementsToFade.push(introArrowObject);
}
var fadedCount = 0;
var totalToFade = elementsToFade.length;
var onAllFadedOut = function onAllFadedOut() {
introElements.forEach(function (el) {
if (el && el.parent) {
el.destroy();
}
});
introElements = [];
activePanelObjects = [];
comicPanelsContainer = null;
skipButton = null;
introArrowObject = null;
showMainMenu(1000);
};
if (totalToFade === 0) {
onAllFadedOut();
return;
}
elementsToFade.forEach(function (el) {
tween(el, {
alpha: 0
}, {
duration: 800,
easing: tween.easeOut,
onFinish: function onFinish() {
fadedCount++;
if (fadedCount === totalToFade) {
onAllFadedOut();
}
}
});
});
}
function displayPanelWithFadeIn(assetKey, positionConfig, durationMs, callback) {
if (currentScreenState !== 'intro' || !comicPanelsContainer) {
return;
}
var panel = LK.getAsset(assetKey, {
anchorX: 0.5,
anchorY: 0.5,
x: positionConfig.x,
y: positionConfig.y,
width: positionConfig.width,
height: positionConfig.height,
alpha: 0
});
comicPanelsContainer.addChild(panel);
activePanelObjects.push(panel);
tween(panel, {
alpha: 1
}, {
duration: durationMs,
easing: tween.linear,
onFinish: function onFinish() {
if (callback && currentScreenState === 'intro') {
callback();
}
}
});
}
function hideAndDestroyPanels(panelsToProcess, durationMs, callback) {
var panelsToFade = panelsToProcess.slice();
activePanelObjects = [];
if (currentScreenState !== 'intro' && panelsToFade.length > 0) {
panelsToFade.forEach(function (p) {
if (p && p.parent) {
p.destroy();
}
});
if (callback) {
callback();
}
return;
}
if (panelsToFade.length === 0) {
if (callback) {
callback();
}
return;
}
var fadedCount = 0;
panelsToFade.forEach(function (p) {
if (p && p.parent) {
tween(p, {
alpha: 0
}, {
duration: durationMs,
easing: tween.linear,
onFinish: function onFinish() {
if (p.parent) {
p.destroy();
}
fadedCount++;
if (fadedCount === panelsToFade.length && callback && currentScreenState === 'intro') {
callback();
}
}
});
} else {
fadedCount++;
if (fadedCount === panelsToFade.length && callback && currentScreenState === 'intro') {
callback();
}
}
});
}
function showArrowAndAwaitClick(actionOnClick) {
if (currentScreenState !== 'intro') {
return;
}
if (introArrowObject && introArrowObject.parent) {
if (introArrowObject.pulseTimerId) {
LK.clearTimeout(introArrowObject.pulseTimerId);
}
introArrowObject.destroy();
var idxOldArr = introElements.indexOf(introArrowObject);
if (idxOldArr > -1) {
introElements.splice(idxOldArr, 1);
}
introArrowObject = null;
}
isWaitingForUserClick = true;
introArrowObject = LK.getAsset(introArrowAssetKey, {
anchorX: 0.5,
anchorY: 1,
x: gameScreenWidth / 2,
y: gameScreenHeight - 30,
alpha: 0,
interactive: true,
cursor: "pointer"
});
game.addChild(introArrowObject);
introElements.push(introArrowObject);
if (comicPanelsContainer && comicPanelsContainer.parent) {
game.setChildIndex(introArrowObject, game.getChildIndex(comicPanelsContainer) + 1);
}
if (skipButton && skipButton.parent) {
game.setChildIndex(skipButton, game.children.length - 1);
}
tween(introArrowObject, {
alpha: 1
}, {
duration: 500
});
var arrowPulseDir = 1;
function pulseArrow() {
if (!isWaitingForUserClick || !introArrowObject || !introArrowObject.parent || currentScreenState !== 'intro') {
if (introArrowObject && introArrowObject.pulseTimerId) {
LK.clearTimeout(introArrowObject.pulseTimerId);
}
if (introArrowObject) {
introArrowObject.pulseTimerId = null;
}
return;
}
var targetScale = arrowPulseDir > 0 ? 1.15 : 1.0;
arrowPulseDir *= -1;
tween(introArrowObject.scale, {
x: targetScale,
y: targetScale
}, {
duration: 700,
easing: tween.easeInOutQuad,
onFinish: function onFinish() {
if (isWaitingForUserClick && introArrowObject && introArrowObject.parent) {
introArrowObject.pulseTimerId = LK.setTimeout(pulseArrow, 100);
}
}
});
}
introArrowObject.pulseTimerId = LK.setTimeout(pulseArrow, 500);
var thisArrowInstance = introArrowObject;
thisArrowInstance.down = function () {
if (isWaitingForUserClick && currentScreenState === 'intro' && thisArrowInstance && thisArrowInstance.parent) {
isWaitingForUserClick = false;
if (thisArrowInstance.pulseTimerId) {
LK.clearTimeout(thisArrowInstance.pulseTimerId);
thisArrowInstance.pulseTimerId = null;
}
tween(thisArrowInstance, {
alpha: 0
}, {
duration: 200,
onFinish: function onFinish() {
if (thisArrowInstance.parent) {
thisArrowInstance.destroy();
}
var idx = introElements.indexOf(thisArrowInstance);
if (idx > -1) {
introElements.splice(idx, 1);
}
if (introArrowObject === thisArrowInstance) {
introArrowObject = null;
}
}
});
clearLocalIntroTimers(false);
actionOnClick();
}
};
}
function proceedToPhase2() {
if (currentScreenState !== 'intro') {
return;
}
hideAndDestroyPanels(activePanelObjects.slice(), 800, function () {
if (currentScreenState !== 'intro') {
return;
}
displayPanelWithFadeIn(introAssetKeys[3], panelPositions[0], 800, function () {
if (currentScreenState !== 'intro') {
return;
}
localIntroTimers.push(LK.setTimeout(function () {
if (currentScreenState !== 'intro') {
return;
}
displayPanelWithFadeIn(introAssetKeys[4], panelPositions[1], 800, function () {
if (currentScreenState !== 'intro') {
return;
}
localIntroTimers.push(LK.setTimeout(function () {
if (currentScreenState !== 'intro') {
return;
}
displayPanelWithFadeIn(introAssetKeys[5], panelPositions[2], 800, function () {
if (currentScreenState !== 'intro') {
return;
}
localIntroTimers.push(LK.setTimeout(function () {
if (currentScreenState === 'intro') {
showArrowAndAwaitClick(proceedToPhase3);
}
}, 3000));
});
}, 3000));
});
}, 3000));
});
});
}
function proceedToPhase3() {
if (currentScreenState !== 'intro') {
return;
}
hideAndDestroyPanels(activePanelObjects.slice(), 800, function () {
if (currentScreenState !== 'intro') {
return;
}
displayPanelWithFadeIn(introAssetKeys[6], panelPositions[0], 800, function () {
if (currentScreenState !== 'intro') {
return;
}
localIntroTimers.push(LK.setTimeout(function () {
if (currentScreenState !== 'intro') {
return;
}
displayPanelWithFadeIn(introAssetKeys[7], panelPositions[1], 800, function () {
if (currentScreenState !== 'intro') {
return;
}
localIntroTimers.push(LK.setTimeout(function () {
if (currentScreenState !== 'intro') {
return;
}
displayPanelWithFadeIn(introAssetKeys[8], panelPositions[2], 800, function () {
if (currentScreenState !== 'intro') {
return;
}
localIntroTimers.push(LK.setTimeout(function () {
if (currentScreenState === 'intro') {
endIntroSequence();
}
}, 3000));
});
}, 3000));
});
}, 3000));
});
});
}
displayPanelWithFadeIn(introAssetKeys[0], panelPositions[0], 800, function () {
if (currentScreenState !== 'intro') {
return;
}
localIntroTimers.push(LK.setTimeout(function () {
if (currentScreenState !== 'intro') {
return;
}
displayPanelWithFadeIn(introAssetKeys[1], panelPositions[1], 800, function () {
if (currentScreenState !== 'intro') {
return;
}
localIntroTimers.push(LK.setTimeout(function () {
if (currentScreenState !== 'intro') {
return;
}
displayPanelWithFadeIn(introAssetKeys[2], panelPositions[2], 800, function () {
if (currentScreenState === 'intro') {
showArrowAndAwaitClick(proceedToPhase2);
}
});
}, 3000));
});
}, 3000));
});
}
function checkMiniGameCollisions() {
if (!miniGamePlayer || !miniGamePlayer.asset || isMiniGameOver) {
return;
}
for (var i = miniGameObstacles.length - 1; i >= 0; i--) {
var obs = miniGameObstacles[i];
if (miniGameRectsIntersect(miniGamePlayer, obs)) {
console.log("Game Over - Hit obstacle!");
isMiniGameOver = true;
if (miniGamePlayer.asset) {
miniGamePlayer.asset.tint = 0xFF0000;
}
return;
}
}
}
function miniGameRectsIntersect(r1Player, r2Object) {
var r1Details = {
x: r1Player.x,
y: r1Player.y,
width: r1Player.width,
height: r1Player.height
};
var r2Details = {
x: r2Object.x,
y: r2Object.y,
width: r2Object.width,
height: r2Object.height
};
var r1left = r1Details.x - r1Details.width / 2;
var r1right = r1Details.x + r1Details.width / 2;
var r1top = r1Details.y - r1Details.height / 2;
var r1bottom = r1Details.y + r1Details.height / 2;
var r2left = r2Details.x - r2Details.width / 2;
var r2right = r2Details.x + r2Details.width / 2;
var r2top = r2Details.y - r2Details.height / 2;
var r2bottom = r2Details.y + r2Details.height / 2;
return !(r2left >= r1right || r2right <= r1left || r2top >= r1bottom || r2bottom <= r1top);
}
function setupEndlessEyes() {
if (leftEye && leftEye.parent) {
leftEye.destroy();
}
if (rightEye && rightEye.parent) {
rightEye.destroy();
}
eyeFrameAssets = [];
for (var i = 1; i <= 10; i++) {
eyeFrameAssets.push('eyes' + i);
}
var leftEyeFrames = [];
for (var i = 0; i < eyeFrameAssets.length; i++) {
var frameAsset = LK.getAsset(eyeFrameAssets[i], {});
if (frameAsset) {
leftEyeFrames.push(frameAsset);
}
}
var rightEyeFrames = [];
for (var i = 0; i < eyeFrameAssets.length; i++) {
var frameAsset = LK.getAsset(eyeFrameAssets[i], {});
if (frameAsset) {
rightEyeFrames.push(frameAsset);
}
}
if (leftEyeFrames.length === 0 || rightEyeFrames.length === 0) {
return;
}
var onOpenComplete = function onOpenComplete() {
console.log("--- onOpenComplete (po otwarciu oka) ---");
console.log("Oko jest statyczne. Ustawiam timer na " + (5000 + Math.random() * 5000).toFixed(0) + "ms do nastepnego mrugniecia.");
if (eyesBlinkTimer) {
LK.clearTimeout(eyesBlinkTimer);
}
var randomInterval = 5000 + Math.random() * 5000;
eyesBlinkTimer = LK.setTimeout(triggerEyesBlink, randomInterval);
};
leftEye = new ManualAnimation({
frames: leftEyeFrames,
frameDuration: 80,
loop: false,
x: gameScreenWidth / 2 - 520,
y: 400,
onComplete: onOpenComplete
});
rightEye = new ManualAnimation({
frames: rightEyeFrames,
frameDuration: 80,
loop: false,
x: gameScreenWidth / 2 + 520,
y: 400,
onComplete: onOpenComplete
});
leftEye.anchor.set(0.5, 0.5);
rightEye.anchor.set(0.5, 0.5);
rightEye.scale.x = -1;
leftEye.visible = false;
rightEye.visible = false;
}
function triggerEyesBlink() {
console.log("--- triggerEyesBlink START ---");
if (!leftEye || !rightEye || !leftEye.parent || !rightEye.parent) {
return;
}
var pickAndSetNewEyeColor = function pickAndSetNewEyeColor() {
var colors = [0x66FF66, 0x6666FF, 0xFFFF66, 0xFF66FF, 0x66FFFF, 0xFFFFFF, 0xFF0000];
var currentHex = (Math.floor(currentEyeColor.r) << 16) + (Math.floor(currentEyeColor.g) << 8) + Math.floor(currentEyeColor.b);
var newHex;
do {
newHex = colors[Math.floor(Math.random() * colors.length)];
} while (newHex === currentHex && colors.length > 1);
currentEyeColor.r = newHex >> 16 & 255;
currentEyeColor.g = newHex >> 8 & 255;
currentEyeColor.b = newHex & 255;
};
var closingFrameNames = [];
for (var i = 9; i >= 0; i--) {
closingFrameNames.push(eyeFrameAssets[i]);
}
var openingFrameNames = eyeFrameAssets.slice();
var createFrameInstances = function createFrameInstances(frameNames) {
var instances = [];
for (var i = 0; i < frameNames.length; i++) {
var asset = LK.getAsset(frameNames[i], {});
if (asset) {
instances.push(asset);
}
}
return instances;
};
var openEyes = function openEyes(eye) {
console.log("-> openEyes: START. Aktualna klatka: " + eye.currentFrame);
eye.stop();
eye.frames = createFrameInstances(openingFrameNames);
eye.loop = false;
eye.onComplete = function () {
console.log("-> openEyes: onComplete odpalony.");
if (eye === rightEye) {
if (eyesBlinkTimer) {
LK.clearTimeout(eyesBlinkTimer);
}
var randomInterval = 5000 + Math.random() * 5000;
eyesBlinkTimer = LK.setTimeout(triggerEyesBlink, randomInterval);
}
};
eye.gotoFrame(0);
eye.play();
};
var closeEyes = function closeEyes(eye) {
console.log("-> closeEyes: START. Aktualna klatka: " + eye.currentFrame);
eye.stop();
eye.frames = createFrameInstances(closingFrameNames);
eye.loop = false;
eye.onComplete = function () {
console.log("-> closeEyes: onComplete odpalony.");
if (eye === leftEye) {
pickAndSetNewEyeColor();
}
openEyes(eye);
};
eye.gotoFrame(0);
eye.play();
};
closeEyes(leftEye);
closeEyes(rightEye);
}
function runTutorialGameplay() {
if (currentMainMenuMusicTrack && typeof currentMainMenuMusicTrack.stop === 'function') {
currentMainMenuMusicTrack.stop();
}
while (mainMenuScreenElements.length > 0) {
var elemToDestroy = mainMenuScreenElements.pop();
if (elemToDestroy && elemToDestroy.parent) {
elemToDestroy.destroy();
}
}
mainMenuItemTextObjects = [];
if (typeof menuTextContainer !== 'undefined' && menuTextContainer && menuTextContainer.parent) {
menuTextContainer.destroy(); // Zniszcz kontener, jeśli istnieje
}
menuTextContainer = null; // Zresetuj referencję
isTutorialMode = true;
currentScreenState = 'gameplay';
allSongData["TutorialTrack"] = tutorialSongData;
currentFightingBossId = null;
loadSong("TutorialTrack");
}
function exitTutorialGameplay() {
isTutorialMode = false;
LK.stopMusic();
LK.playMusic('introMusic');
resetGameState();
if (gameplayBackground && gameplayBackground.parent) {
gameplayBackground.destroy();
gameplayBackground = null;
}
if (scoreTxt) {
scoreTxt.visible = true;
}
if (comboTxt) {
comboTxt.visible = true;
}
if (gameUIContainer) {
gameUIContainer.visible = false;
}
if (staticHitFrame) {
staticHitFrame.visible = false;
}
if (staticPerfectLine) {
staticPerfectLine.visible = false;
}
showMainMenu();
}
function displayEndlessSummaryScreen(summaryData) {
if (songSummaryContainer && songSummaryContainer.parent) {
songSummaryContainer.destroy();
}
songSummaryContainer = new Container();
game.addChild(songSummaryContainer);
currentScreenState = 'songSummary';
saveEndlessStats(summaryData.time, summaryData.maxCombo);
var bestStats = getEndlessStats();
var overlay = LK.getAsset('summaryOverlayAsset', {
width: gameScreenWidth,
height: gameScreenHeight,
alpha: 0.7,
interactive: true
});
songSummaryContainer.addChild(overlay);
var popupWidth = gameScreenWidth * 0.85;
var popupHeight = 2000;
var popupX = (gameScreenWidth - popupWidth) / 2;
var popupY = (gameScreenHeight - popupHeight) / 2;
var popupBackground = LK.getAsset('endlesspopup', {
x: popupX,
y: popupY,
width: popupWidth,
height: popupHeight
});
songSummaryContainer.addChild(popupBackground);
var titleText = new Text2("ENDLESS MODE OVER", {
size: 70,
fill: 0xffffff,
align: 'center'
});
var timeText = new Text2("Time Survived: " + formatTime(summaryData.time), {
size: 50,
fill: 0xFFFFFF,
align: 'center'
});
var bestTimeText = new Text2("Best Time: " + formatTime(bestStats.bestTime), {
size: 50,
fill: 0xFFFF00,
align: 'center'
});
var comboText = new Text2("Max Combo: " + summaryData.maxCombo, {
size: 50,
fill: 0xFFFFFF,
align: 'center'
});
var bestComboText = new Text2("Best Combo: " + bestStats.bestCombo, {
size: 50,
fill: 0xFFFF00,
align: 'center'
});
var missesText = new Text2("Notes Missed: " + summaryData.misses, {
size: 50,
fill: 0xFFFFFF,
align: 'center'
});
var allElements = [titleText, timeText, bestTimeText, comboText, bestComboText, missesText];
var totalContentHeight = 0;
var v_gap = 70;
allElements.forEach(function (el) {
totalContentHeight += el.height + v_gap;
});
var buttonHeight = 70;
totalContentHeight += buttonHeight;
var currentY = popupY + (popupHeight - totalContentHeight) / 2 + 30;
allElements.forEach(function (element) {
element.y = currentY + element.height / 2;
element.x = popupX + popupWidth / 2;
element.anchor.set(0.5, 0.5);
songSummaryContainer.addChild(element);
if (element === titleText) {
element.y -= 60;
}
currentY += element.height + v_gap;
});
var buttonWidth = popupWidth * 0.45;
var buttonHeight = 90;
var buttonY = currentY + buttonHeight / 2;
var backButtonBg = LK.getAsset('summaryButtonBackgroundAsset', {
x: popupX + (popupWidth / 2 - buttonWidth - 15),
y: buttonY,
width: buttonWidth,
height: buttonHeight,
interactive: true,
cursor: "pointer"
});
songSummaryContainer.addChild(backButtonBg);
var backToMenuButton = new Text2("Back to Menu", {
size: 50,
fill: 0xFFD700,
stroke: 0x000000,
strokeThickness: 2
});
backToMenuButton.anchor.set(0.5, 0.5);
backToMenuButton.x = backButtonBg.x + buttonWidth / 2;
backToMenuButton.y = backButtonBg.y + buttonHeight / 2;
songSummaryContainer.addChild(backToMenuButton);
backButtonBg.down = function () {
LK.stopMusic();
LK.playMusic('introMusic');
resetGameState();
if (songSummaryContainer && songSummaryContainer.parent) {
songSummaryContainer.destroy();
}
if (gameplayBackground && gameplayBackground.parent) {
gameplayBackground.destroy();
}
showMainMenu();
};
var restartButtonBg = LK.getAsset('summaryButtonBackgroundAsset', {
x: popupX + (popupWidth / 2 + 15),
y: buttonY,
width: buttonWidth,
height: buttonHeight,
interactive: true,
cursor: "pointer"
});
songSummaryContainer.addChild(restartButtonBg);
var restartButton = new Text2("Restart Endless", {
size: 50,
fill: 0xFFD700,
stroke: 0x000000,
strokeThickness: 2
});
restartButton.anchor.set(0.5, 0.5);
restartButton.x = restartButtonBg.x + buttonWidth / 2;
restartButton.y = restartButtonBg.y + buttonHeight / 2;
songSummaryContainer.addChild(restartButton);
restartButtonBg.down = function () {
if (songSummaryContainer && songSummaryContainer.parent) {
songSummaryContainer.destroy();
}
if (gameplayBackground && gameplayBackground.parent) {
gameplayBackground.destroy();
}
initializeEndlessGameplay(true);
};
if (gameUIContainer) {
gameUIContainer.visible = false;
}
if (staticHitFrame) {
staticHitFrame.visible = false;
}
if (staticPerfectLine) {
staticPerfectLine.visible = false;
}
}
// Game State & Rhythm Logic Variables
var finalBossRawRhythmMap_Clean = [{
time: 9700,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 10288,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 10815,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 14926,
type: 'hold',
columnIndex: 0,
duration: 757
}, {
time: 16145,
type: 'hold',
columnIndex: 1,
duration: 905
}, {
time: 17467,
type: 'hold',
columnIndex: 2,
duration: 2047
}, {
time: 20226,
type: 'tap',
columnIndex: 0
}, {
time: 21452,
type: 'tap',
columnIndex: 1
}, {
time: 22026,
type: 'tap',
columnIndex: 2
}, {
time: 24473,
type: 'tap',
columnIndex: 0
}, {
time: 25814,
type: 'tap',
columnIndex: 1
}, {
time: 27039,
type: 'tap',
columnIndex: 2
}, {
time: 29019,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 30246,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 31296,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 32456,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 33673,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 34816,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 36296,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 36848,
type: 'swipe',
columnIndex: 0,
swipeDir: 'left'
}, {
time: 37219,
type: 'tap',
columnIndex: 2
}, {
time: 38228,
type: 'tap',
columnIndex: 0
}, {
time: 38765,
type: 'tap',
columnIndex: 2
}, {
time: 39786,
type: 'tap',
columnIndex: 0
}, {
time: 40300,
type: 'tap',
columnIndex: 1
}, {
time: 40752,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 41054,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 42081,
type: 'tap',
columnIndex: 0
}, {
time: 42521,
type: 'tap',
columnIndex: 1
}, {
time: 42908,
type: 'tap',
columnIndex: 2
}, {
time: 43256,
type: 'tap',
columnIndex: 1
}, {
time: 44401,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 44802,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 45240,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 45641,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 46694,
type: 'tap',
columnIndex: 2
}, {
time: 47137,
type: 'tap',
columnIndex: 1
}, {
time: 47520,
type: 'tap',
columnIndex: 0
}, {
time: 47843,
type: 'tap',
columnIndex: 1
}, {
time: 48911,
type: 'tap',
columnIndex: 0
}, {
time: 49329,
type: 'tap',
columnIndex: 1
}, {
time: 49744,
type: 'tap',
columnIndex: 2
}, {
time: 50041,
type: 'tap',
columnIndex: 1
}, {
time: 51104,
type: 'tap',
columnIndex: 0
}, {
time: 51512,
type: 'tap',
columnIndex: 0
}, {
time: 51925,
type: 'tap',
columnIndex: 1
}, {
time: 52285,
type: 'tap',
columnIndex: 2
}, {
time: 53371,
type: 'tap',
columnIndex: 2
}, {
time: 53818,
type: 'tap',
columnIndex: 2
}, {
time: 54256,
type: 'tap',
columnIndex: 1
}, {
time: 54520,
type: 'tap',
columnIndex: 0
}, {
time: 55697,
type: 'tap',
columnIndex: 0
}, {
time: 55944,
type: 'tap',
columnIndex: 1
}, {
time: 56314,
type: 'tap',
columnIndex: 2
}, {
time: 56794,
type: 'tap',
columnIndex: 1
}, {
time: 57330,
type: 'tap',
columnIndex: 0
}, {
time: 57886,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 58454,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 59018,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 59610,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 60148,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 60719,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 61264,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 61847,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 62389,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 62964,
type: 'swipe',
columnIndex: 0,
swipeDir: 'left'
}, {
time: 63563,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 64110,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 64646,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 65227,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 65494,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 65828,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 66375,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 66959,
type: 'tap',
columnIndex: 2
}, {
time: 67488,
type: 'tap',
columnIndex: 1
}, {
time: 67491,
type: 'tap',
columnIndex: 2
}, {
time: 67746,
type: 'tap',
columnIndex: 2
}, {
time: 68035,
type: 'tap',
columnIndex: 1
}, {
time: 68605,
type: 'tap',
columnIndex: 0
}, {
time: 68892,
type: 'tap',
columnIndex: 1
}, {
time: 69165,
type: 'tap',
columnIndex: 2
}, {
time: 69719,
type: 'tap',
columnIndex: 1
}, {
time: 70289,
type: 'tap',
columnIndex: 0
}, {
time: 70811,
type: 'tap',
columnIndex: 1
}, {
time: 71150,
type: 'tap',
columnIndex: 2
}, {
time: 71379,
type: 'tap',
columnIndex: 1
}, {
time: 71697,
type: 'tap',
columnIndex: 0
}, {
time: 71941,
type: 'tap',
columnIndex: 1
}, {
time: 72220,
type: 'tap',
columnIndex: 2
}, {
time: 72523,
type: 'tap',
columnIndex: 1
}, {
time: 74003,
type: 'tap',
columnIndex: 1
}, {
time: 74017,
type: 'tap',
columnIndex: 0
}, {
time: 74029,
type: 'tap',
columnIndex: 2
}, {
time: 74248,
type: 'tap',
columnIndex: 0
}, {
time: 74252,
type: 'tap',
columnIndex: 1
}, {
time: 74507,
type: 'tap',
columnIndex: 0
}, {
time: 74508,
type: 'tap',
columnIndex: 2
}, {
time: 74509,
type: 'tap',
columnIndex: 1
}, {
time: 74754,
type: 'tap',
columnIndex: 2
}, {
time: 74760,
type: 'tap',
columnIndex: 0
}, {
time: 74760,
type: 'tap',
columnIndex: 1
}, {
time: 75051,
type: 'tap',
columnIndex: 2
}, {
time: 75053,
type: 'tap',
columnIndex: 0
}, {
time: 75054,
type: 'tap',
columnIndex: 1
}, {
time: 75356,
type: 'tap',
columnIndex: 0
}, {
time: 75357,
type: 'tap',
columnIndex: 2
}, {
time: 75363,
type: 'tap',
columnIndex: 1
}, {
time: 75615,
type: 'tap',
columnIndex: 1
}, {
time: 75616,
type: 'tap',
columnIndex: 0
}, {
time: 75620,
type: 'tap',
columnIndex: 2
}, {
time: 75890,
type: 'tap',
columnIndex: 2
}, {
time: 76152,
type: 'tap',
columnIndex: 1
}, {
time: 76398,
type: 'tap',
columnIndex: 0
}, {
time: 76790,
type: 'tap',
columnIndex: 1
}, {
time: 77011,
type: 'tap',
columnIndex: 2
}, {
time: 77050,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 77267,
type: 'tap',
columnIndex: 1
}, {
time: 77550,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 77793,
type: 'tap',
columnIndex: 2
}, {
time: 78078,
type: 'tap',
columnIndex: 2
}, {
time: 78360,
type: 'tap',
columnIndex: 1
}, {
time: 78642,
type: 'tap',
columnIndex: 0
}, {
time: 78909,
type: 'tap',
columnIndex: 1
}, {
time: 79242,
type: 'tap',
columnIndex: 2
}, {
time: 79520,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 79787,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 80069,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 80343,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 80602,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 80917,
type: 'tap',
columnIndex: 2
}, {
time: 81187,
type: 'tap',
columnIndex: 1
}, {
time: 81463,
type: 'tap',
columnIndex: 0
}, {
time: 81720,
type: 'tap',
columnIndex: 1
}, {
time: 81991,
type: 'tap',
columnIndex: 2
}, {
time: 82340,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 82607,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 82883,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 83156,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 83435,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 83731,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 83985,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 84279,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 84546,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 84828,
type: 'tap',
columnIndex: 1
}, {
time: 85074,
type: 'tap',
columnIndex: 2
}, {
time: 85389,
type: 'tap',
columnIndex: 0
}, {
time: 85714,
type: 'tap',
columnIndex: 1
}, {
time: 86001,
type: 'tap',
columnIndex: 2
}, {
time: 86267,
type: 'tap',
columnIndex: 1
}, {
time: 86578,
type: 'tap',
columnIndex: 2
}, {
time: 86847,
type: 'tap',
columnIndex: 1
}, {
time: 87122,
type: 'tap',
columnIndex: 0
}, {
time: 87367,
type: 'tap',
columnIndex: 1
}, {
time: 87679,
type: 'tap',
columnIndex: 2
}, {
time: 87953,
type: 'tap',
columnIndex: 1
}, {
time: 88224,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 88513,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 88792,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 89086,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 89331,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 89631,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 89886,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 90178,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 90406,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 90761,
type: 'tap',
columnIndex: 2
}, {
time: 91001,
type: 'tap',
columnIndex: 2
}, {
time: 91308,
type: 'tap',
columnIndex: 1
}, {
time: 91576,
type: 'tap',
columnIndex: 0
}, {
time: 92085,
type: 'tap',
columnIndex: 1
}, {
time: 92663,
type: 'tap',
columnIndex: 2
}, {
time: 93261,
type: 'tap',
columnIndex: 1
}, {
time: 93499,
type: 'tap',
columnIndex: 1
}, {
time: 93796,
type: 'tap',
columnIndex: 2
}, {
time: 94392,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 94842,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 95291,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 95551,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 95825,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 96091,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 96671,
type: 'tap',
columnIndex: 2
}, {
time: 97286,
type: 'swipe',
columnIndex: 0,
swipeDir: 'left'
}, {
time: 97559,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 97800,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 98056,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 98346,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 98629,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 98935,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 99198,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 99515,
type: 'tap',
columnIndex: 2
}, {
time: 100053,
type: 'tap',
columnIndex: 1
}, {
time: 100623,
type: 'tap',
columnIndex: 0
}, {
time: 101084,
type: 'tap',
columnIndex: 1
}, {
time: 101648,
type: 'tap',
columnIndex: 2
}, {
time: 102188,
type: 'tap',
columnIndex: 1
}, {
time: 102603,
type: 'tap',
columnIndex: 0
}, {
time: 103739,
type: 'tap',
columnIndex: 0
}, {
time: 103954,
type: 'tap',
columnIndex: 0
}, {
time: 103962,
type: 'tap',
columnIndex: 1
}, {
time: 104173,
type: 'tap',
columnIndex: 2
}, {
time: 104973,
type: 'tap',
columnIndex: 0
}, {
time: 105129,
type: 'tap',
columnIndex: 1
}, {
time: 105265,
type: 'tap',
columnIndex: 2
}, {
time: 105913,
type: 'tap',
columnIndex: 0
}, {
time: 106020,
type: 'tap',
columnIndex: 1
}, {
time: 106154,
type: 'tap',
columnIndex: 2
}, {
time: 106921,
type: 'tap',
columnIndex: 2
}, {
time: 107112,
type: 'tap',
columnIndex: 1
}, {
time: 107244,
type: 'tap',
columnIndex: 0
}, {
time: 107479,
type: 'tap',
columnIndex: 0
}, {
time: 107716,
type: 'tap',
columnIndex: 1
}, {
time: 107822,
type: 'tap',
columnIndex: 2
}, {
time: 108336,
type: 'tap',
columnIndex: 0
}, {
time: 108457,
type: 'tap',
columnIndex: 1
}, {
time: 108643,
type: 'tap',
columnIndex: 2
}, {
time: 109487,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 109925,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 110332,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 110647,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 111130,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 111472,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 111650,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 111890,
type: 'hold',
columnIndex: 1,
duration: 1518
}, {
time: 113878,
type: 'hold',
columnIndex: 0,
duration: 1842
}, {
time: 116132,
type: 'hold',
columnIndex: 2,
duration: 1822
}, {
time: 118508,
type: 'tap',
columnIndex: 0
}, {
time: 119109,
type: 'tap',
columnIndex: 1
}, {
time: 119638,
type: 'tap',
columnIndex: 2
}, {
time: 121215,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 121507,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 121838,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 122443,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 122720,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 123052,
type: 'tap',
columnIndex: 1
}, {
time: 123293,
type: 'tap',
columnIndex: 2
}, {
time: 123561,
type: 'tap',
columnIndex: 1
}, {
time: 123831,
type: 'tap',
columnIndex: 0
}, {
time: 124168,
type: 'tap',
columnIndex: 2
}, {
time: 124205,
type: 'tap',
columnIndex: 0
}, {
time: 124435,
type: 'tap',
columnIndex: 2
}, {
time: 124520,
type: 'tap',
columnIndex: 0
}, {
time: 124768,
type: 'tap',
columnIndex: 1
}, {
time: 125016,
type: 'tap',
columnIndex: 2
}, {
time: 125268,
type: 'tap',
columnIndex: 1
}, {
time: 125527,
type: 'tap',
columnIndex: 0
}, {
time: 125821,
type: 'tap',
columnIndex: 0
}, {
time: 126078,
type: 'tap',
columnIndex: 1
}, {
time: 126305,
type: 'tap',
columnIndex: 2
}, {
time: 126581,
type: 'tap',
columnIndex: 0
}, {
time: 126808,
type: 'tap',
columnIndex: 2
}, {
time: 127165,
type: 'tap',
columnIndex: 0
}, {
time: 127492,
type: 'tap',
columnIndex: 1
}, {
time: 127715,
type: 'tap',
columnIndex: 2
}, {
time: 128039,
type: 'tap',
columnIndex: 1
}, {
time: 128339,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 128609,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 128913,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 129150,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 129435,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 129688,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 130072,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 130337,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 130584,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 130679,
type: 'tap',
columnIndex: 2
}, {
time: 130934,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 131206,
type: 'tap',
columnIndex: 1
}, {
time: 131461,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 131740,
type: 'tap',
columnIndex: 0
}, {
time: 132014,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 132295,
type: 'tap',
columnIndex: 2
}, {
time: 132555,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 132877,
type: 'tap',
columnIndex: 1
}, {
time: 133149,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 133449,
type: 'tap',
columnIndex: 0
}, {
time: 133708,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 134022,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 134255,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 134545,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 134754,
type: 'tap',
columnIndex: 1
}, {
time: 135033,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 135369,
type: 'tap',
columnIndex: 2
}, {
time: 135670,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 135945,
type: 'tap',
columnIndex: 1
}, {
time: 136229,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 136458,
type: 'tap',
columnIndex: 0
}, {
time: 136771,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 137024,
type: 'tap',
columnIndex: 2
}, {
time: 137357,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 137784,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 138105,
type: 'tap',
columnIndex: 0
}, {
time: 138315,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 138591,
type: 'tap',
columnIndex: 1
}, {
time: 138815,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 139305,
type: 'tap',
columnIndex: 2
}, {
time: 139853,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 140388,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 140704,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 140932,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 141180,
type: 'tap',
columnIndex: 2
}, {
time: 141517,
type: 'tap',
columnIndex: 1
}, {
time: 141857,
type: 'tap',
columnIndex: 2
}, {
time: 142141,
type: 'tap',
columnIndex: 1
}, {
time: 142442,
type: 'tap',
columnIndex: 2
}, {
time: 142733,
type: 'tap',
columnIndex: 1
}, {
time: 142999,
type: 'tap',
columnIndex: 2
}, {
time: 143252,
type: 'tap',
columnIndex: 0
}, {
time: 143535,
type: 'tap',
columnIndex: 1
}, {
time: 143749,
type: 'tap',
columnIndex: 0
}, {
time: 144014,
type: 'tap',
columnIndex: 1
}, {
time: 144307,
type: 'tap',
columnIndex: 0
}, {
time: 144598,
type: 'tap',
columnIndex: 1
}, {
time: 144843,
type: 'tap',
columnIndex: 0
}, {
time: 145160,
type: 'tap',
columnIndex: 1
}, {
time: 145277,
type: 'tap',
columnIndex: 0
}, {
time: 145537,
type: 'tap',
columnIndex: 1
}, {
time: 145823,
type: 'tap',
columnIndex: 2
}, {
time: 146059,
type: 'tap',
columnIndex: 1
}, {
time: 146330,
type: 'tap',
columnIndex: 2
}, {
time: 146634,
type: 'tap',
columnIndex: 1
}, {
time: 146904,
type: 'tap',
columnIndex: 2
}, {
time: 147195,
type: 'tap',
columnIndex: 1
}, {
time: 147486,
type: 'tap',
columnIndex: 2
}, {
time: 147712,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 147986,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 148309,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 148537,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 148875,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 149146,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 149440,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 210000,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 210311,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 210674,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 211004,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 211348,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 211664,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 212022,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 212322,
type: 'tap',
columnIndex: 2
}, {
time: 212663,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 213061,
type: 'tap',
columnIndex: 1
}, {
time: 213393,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 213734,
type: 'tap',
columnIndex: 1
}, {
time: 214047,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 214396,
type: 'tap',
columnIndex: 1
}, {
time: 214735,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 215083,
type: 'tap',
columnIndex: 0
}, {
time: 215416,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 215767,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 216140,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 216472,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 216863,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 217177,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 217520,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 217966,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 218227,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 218583,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 218874,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 219227,
type: 'tap',
columnIndex: 2
}, {
time: 219583,
type: 'tap',
columnIndex: 1
}, {
time: 219926,
type: 'tap',
columnIndex: 0
}, {
time: 220237,
type: 'tap',
columnIndex: 1
}, {
time: 220602,
type: 'tap',
columnIndex: 0
}, {
time: 220938,
type: 'tap',
columnIndex: 1
}, {
time: 221269,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 221633,
type: 'swipe',
columnIndex: 0,
swipeDir: 'left'
}, {
time: 222001,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 222351,
type: 'swipe',
columnIndex: 0,
swipeDir: 'left'
}, {
time: 222714,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 223038,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 223361,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 223681,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 224042,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 224373,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 224734,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 225059,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 225379,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 225734,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 226087,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 226405,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 226751,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 227120,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 227451,
type: 'tap',
columnIndex: 2
}, {
time: 227776,
type: 'tap',
columnIndex: 2
}, {
time: 228131,
type: 'tap',
columnIndex: 1
}, {
time: 228495,
type: 'tap',
columnIndex: 1
}, {
time: 228814,
type: 'tap',
columnIndex: 0
}, {
time: 229152,
type: 'tap',
columnIndex: 1
}, {
time: 229447,
type: 'tap',
columnIndex: 2
}, {
time: 229783,
type: 'tap',
columnIndex: 1
}, {
time: 230173,
type: 'tap',
columnIndex: 0
}, {
time: 230476,
type: 'tap',
columnIndex: 1
}, {
time: 230858,
type: 'tap',
columnIndex: 2
}, {
time: 231177,
type: 'tap',
columnIndex: 1
}, {
time: 231525,
type: 'tap',
columnIndex: 0
}, {
time: 231908,
type: 'tap',
columnIndex: 2
}, {
time: 232185,
type: 'tap',
columnIndex: 0
}, {
time: 232549,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 232988,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 233293,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 233627,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 233966,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 234326,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 234630,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 234973,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 235335,
type: 'tap',
columnIndex: 0
}, {
time: 235692,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 236036,
type: 'tap',
columnIndex: 0
}, {
time: 236372,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 236707,
type: 'tap',
columnIndex: 0
}, {
time: 237074,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 237341,
type: 'tap',
columnIndex: 0
}, {
time: 237718,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 238076,
type: 'tap',
columnIndex: 0
}, {
time: 238433,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 238782,
type: 'tap',
columnIndex: 0
}, {
time: 239102,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 239807,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 240147,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 240552,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 240836,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 241167,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 241491,
type: 'tap',
columnIndex: 1
}, {
time: 241823,
type: 'tap',
columnIndex: 2
}, {
time: 242167,
type: 'tap',
columnIndex: 1
}, {
time: 242545,
type: 'tap',
columnIndex: 0
}, {
time: 242868,
type: 'tap',
columnIndex: 1
}, {
time: 243208,
type: 'tap',
columnIndex: 2
}, {
time: 243902,
type: 'tap',
columnIndex: 0
}, {
time: 244632,
type: 'tap',
columnIndex: 1
}, {
time: 245289,
type: 'tap',
columnIndex: 2
}, {
time: 245980,
type: 'tap',
columnIndex: 0
}, {
time: 246667,
type: 'tap',
columnIndex: 1
}, {
time: 247321,
type: 'tap',
columnIndex: 2
}, {
time: 248011,
type: 'tap',
columnIndex: 0
}, {
time: 248648,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 249044,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 249414,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 249738,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 250063,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 250428,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 250768,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 251096,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 251450,
type: 'tap',
columnIndex: 2
}, {
time: 251787,
type: 'tap',
columnIndex: 1
}, {
time: 252147,
type: 'tap',
columnIndex: 0
}, {
time: 252495,
type: 'tap',
columnIndex: 1
}, {
time: 252836,
type: 'tap',
columnIndex: 0
}, {
time: 253145,
type: 'tap',
columnIndex: 1
}, {
time: 253543,
type: 'tap',
columnIndex: 2
}, {
time: 253857,
type: 'tap',
columnIndex: 1
}, {
time: 254198,
type: 'tap',
columnIndex: 0
}, {
time: 255968,
type: 'tap',
columnIndex: 0
}, {
time: 256358,
type: 'tap',
columnIndex: 1
}, {
time: 257072,
type: 'tap',
columnIndex: 2
}, {
time: 258197,
type: 'tap',
columnIndex: 1
}, {
time: 258960,
type: 'tap',
columnIndex: 2
}, {
time: 259660,
type: 'tap',
columnIndex: 0
}, {
time: 260921,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 261526,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 262099,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 262500,
type: 'swipe',
columnIndex: 0,
swipeDir: 'left'
}, {
time: 263733,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 264384,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 264847,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 265253,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 265912,
type: 'tap',
columnIndex: 2
}, {
time: 266312,
type: 'tap',
columnIndex: 1
}, {
time: 266613,
type: 'tap',
columnIndex: 0
}, {
time: 267135,
type: 'tap',
columnIndex: 1
}, {
time: 267905,
type: 'tap',
columnIndex: 2
}, {
time: 268660,
type: 'tap',
columnIndex: 1
}, {
time: 269306,
type: 'tap',
columnIndex: 0
}, {
time: 270677,
type: 'tap',
columnIndex: 2
}, {
time: 271369,
type: 'tap',
columnIndex: 0
}, {
time: 271727,
type: 'tap',
columnIndex: 1
}, {
time: 272079,
type: 'tap',
columnIndex: 2
}, {
time: 272703,
type: 'tap',
columnIndex: 0
}, {
time: 273428,
type: 'tap',
columnIndex: 1
}, {
time: 274716,
type: 'tap',
columnIndex: 2
}, {
time: 275394,
type: 'tap',
columnIndex: 1
}, {
time: 275790,
type: 'tap',
columnIndex: 0
}, {
time: 276257,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 276563,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 276840,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 277210,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 277535,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 277882,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 278190,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 278553,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 278866,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 279188,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 279540,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 279895,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 280264,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 280586,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 280941,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 281253,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 281603,
type: 'tap',
columnIndex: 2
}, {
time: 281955,
type: 'tap',
columnIndex: 1
}, {
time: 282314,
type: 'tap',
columnIndex: 2
}, {
time: 282641,
type: 'tap',
columnIndex: 0
}, {
time: 283011,
type: 'tap',
columnIndex: 1
}, {
time: 283318,
type: 'tap',
columnIndex: 2
}, {
time: 283696,
type: 'tap',
columnIndex: 0
}, {
time: 284026,
type: 'tap',
columnIndex: 1
}, {
time: 284352,
type: 'tap',
columnIndex: 2
}, {
time: 284718,
type: 'tap',
columnIndex: 2
}, {
time: 285088,
type: 'tap',
columnIndex: 0
}, {
time: 285434,
type: 'tap',
columnIndex: 0
}, {
time: 285761,
type: 'tap',
columnIndex: 1
}, {
time: 286097,
type: 'tap',
columnIndex: 1
}, {
time: 286429,
type: 'tap',
columnIndex: 0
}, {
time: 286797,
type: 'tap',
columnIndex: 0
}, {
time: 287081,
type: 'tap',
columnIndex: 2
}, {
time: 287426,
type: 'tap',
columnIndex: 1
}, {
time: 287774,
type: 'tap',
columnIndex: 2
}, {
time: 288113,
type: 'tap',
columnIndex: 1
}, {
time: 288443,
type: 'tap',
columnIndex: 2
}, {
time: 288822,
type: 'tap',
columnIndex: 0
}, {
time: 289141,
type: 'tap',
columnIndex: 2
}, {
time: 289509,
type: 'tap',
columnIndex: 0
}, {
time: 289856,
type: 'tap',
columnIndex: 1
}, {
time: 290200,
type: 'tap',
columnIndex: 0
}, {
time: 290568,
type: 'tap',
columnIndex: 1
}, {
time: 290870,
type: 'tap',
columnIndex: 0
}, {
time: 291213,
type: 'tap',
columnIndex: 1
}, {
time: 291465,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 291896,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 292261,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 292597,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 292937,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 293273,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 293636,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 293940,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 294309,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 294663,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 295004,
type: 'tap',
columnIndex: 2
}, {
time: 295365,
type: 'tap',
columnIndex: 1
}, {
time: 295667,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 296001,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 296348,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 296694,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 297044,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 297378,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 297722,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 298071,
type: 'tap',
columnIndex: 2
}];
var allSongData = {
"FinalBossTrack": {
musicAsset: "Finalbattle",
backgroundAssetKey: 'finalBossBgAsset',
config: {
playerMaxHP: 30,
bossMaxHP: 780
},
rawRhythmMap: finalBossRawRhythmMap_Clean
},
"NoizboyTrack": {
musicAsset: 'Noizboy',
bossAssetKey: 'Boss3',
config: {
playerMaxHP: 10,
bossMaxHP: 220
},
rawRhythmMap: [{
time: 12000,
type: "tap",
columnIndex: 0
}, {
time: 12613,
type: "tap",
columnIndex: 1
}, {
time: 13148,
type: "tap",
columnIndex: 0
}, {
time: 13759,
type: "tap",
columnIndex: 1
}, {
time: 14293,
type: "swipe",
columnIndex: 0,
swipeDir: "up"
}, {
time: 14860,
type: "swipe",
columnIndex: 0,
swipeDir: "up"
}, {
time: 15437,
type: "swipe",
columnIndex: 0,
swipeDir: "up"
}, {
time: 15960,
type: "swipe",
columnIndex: 0,
swipeDir: "up"
}, {
time: 16561,
type: "tap",
columnIndex: 2
}, {
time: 17133,
type: "tap",
columnIndex: 1
}, {
time: 17647,
type: "tap",
columnIndex: 0
}, {
time: 18180,
type: "tap",
columnIndex: 0
}, {
time: 18859,
type: "tap",
columnIndex: 1
}, {
time: 19422,
type: "tap",
columnIndex: 0
}, {
time: 20010,
type: "tap",
columnIndex: 1
}, {
time: 20272,
type: "tap",
columnIndex: 2
}, {
time: 20609,
type: "tap",
columnIndex: 2
}, {
time: 20840,
type: "tap",
columnIndex: 2
}, {
time: 21186,
type: "swipe",
columnIndex: 0,
swipeDir: "down"
}, {
time: 21829,
type: "swipe",
columnIndex: 0,
swipeDir: "down"
}, {
time: 22364,
type: "swipe",
columnIndex: 1,
swipeDir: "left"
}, {
time: 22935,
type: "swipe",
columnIndex: 1,
swipeDir: "left"
}, {
time: 23517,
type: "tap",
columnIndex: 1
}, {
time: 23812,
type: "tap",
columnIndex: 1
}, {
time: 24063,
type: "tap",
columnIndex: 2
}, {
time: 24415,
type: "tap",
columnIndex: 2
}, {
time: 24678,
type: "tap",
columnIndex: 0
}, {
time: 24965,
type: "tap",
columnIndex: 0
}, {
time: 25234,
type: "tap",
columnIndex: 1
}, {
time: 25846,
type: "tap",
columnIndex: 2
}, {
time: 26440,
type: "tap",
columnIndex: 2
}, {
time: 27003,
type: "tap",
columnIndex: 1
}, {
time: 27535,
type: "tap",
columnIndex: 1
}, {
time: 28133,
type: "tap",
columnIndex: 0
}, {
time: 28680,
type: "tap",
columnIndex: 0
}, {
time: 29225,
type: "tap",
columnIndex: 0
}, {
time: 29846,
type: "tap",
columnIndex: 0
}, {
time: 30459,
type: "swipe",
columnIndex: 0,
swipeDir: "right"
}, {
time: 31100,
type: "swipe",
columnIndex: 1,
swipeDir: "up"
}, {
time: 31660,
type: "swipe",
columnIndex: 2,
swipeDir: "left"
}, {
time: 32775,
type: "swipe",
columnIndex: 2,
swipeDir: "down"
}, {
time: 33347,
type: "swipe",
columnIndex: 1,
swipeDir: "up"
}, {
time: 33930,
type: "swipe",
columnIndex: 0,
swipeDir: "right"
}, {
time: 35058,
type: "tap",
columnIndex: 2
}, {
time: 35640,
type: "tap",
columnIndex: 1
}, {
time: 36187,
type: "tap",
columnIndex: 2
}, {
time: 36722,
type: "tap",
columnIndex: 1
}, {
time: 37385,
type: "tap",
columnIndex: 0
}, {
time: 37928,
type: "tap",
columnIndex: 0
}, {
time: 38148,
type: "tap",
columnIndex: 0
}, {
time: 38502,
type: "tap",
columnIndex: 0
}, {
time: 39022,
type: "tap",
columnIndex: 1
}, {
time: 39657,
type: "tap",
columnIndex: 2
}, {
time: 40209,
type: "tap",
columnIndex: 2
}, {
time: 40800,
type: "tap",
columnIndex: 0
}, {
time: 41347,
type: "tap",
columnIndex: 0
}, {
time: 41963,
type: "swipe",
columnIndex: 0,
swipeDir: "down"
}, {
time: 42496,
type: "tap",
columnIndex: 0
}, {
time: 43113,
type: "swipe",
columnIndex: 0,
swipeDir: "up"
}, {
time: 43723,
type: "tap",
columnIndex: 0
}, {
time: 44318,
type: "swipe",
columnIndex: 1,
swipeDir: "right"
}, {
time: 44871,
type: "swipe",
columnIndex: 1,
swipeDir: "right"
}, {
time: 45456,
type: "tap",
columnIndex: 1
}, {
time: 45996,
type: "tap",
columnIndex: 1
}, {
time: 46548,
type: "swipe",
columnIndex: 0,
swipeDir: "left"
}, {
time: 47158,
type: "swipe",
columnIndex: 0,
swipeDir: "left"
}, {
time: 47720,
type: "tap",
columnIndex: 2
}, {
time: 48324,
type: "tap",
columnIndex: 2
}, {
time: 48833,
type: "swipe",
columnIndex: 2,
swipeDir: "down"
}, {
time: 49449,
type: "swipe",
columnIndex: 2,
swipeDir: "down"
}, {
time: 50039,
type: "tap",
columnIndex: 0
}, {
time: 50616,
type: "tap",
columnIndex: 0
}, {
time: 51149,
type: "swipe",
columnIndex: 0,
swipeDir: "up"
}, {
time: 51781,
type: "swipe",
columnIndex: 0,
swipeDir: "up"
}, {
time: 52401,
type: "tap",
columnIndex: 2
}, {
time: 52729,
type: "tap",
columnIndex: 2
}, {
time: 53030,
type: "tap",
columnIndex: 2
}, {
time: 53306,
type: "tap",
columnIndex: 2
}, {
time: 53560,
type: "tap",
columnIndex: 1
}, {
time: 54118,
type: "tap",
columnIndex: 2
}, {
time: 54687,
type: "tap",
columnIndex: 1
}, {
time: 55274,
type: "tap",
columnIndex: 2
}, {
time: 55842,
type: "tap",
columnIndex: 1
}, {
time: 56416,
type: "swipe",
columnIndex: 0,
swipeDir: "left"
}, {
time: 57066,
type: "swipe",
columnIndex: 1,
swipeDir: "right"
}, {
time: 57597,
type: "tap",
columnIndex: 2
}, {
time: 58182,
type: "swipe",
columnIndex: 0,
swipeDir: "down"
}, {
time: 58773,
type: "tap",
columnIndex: 2
}, {
time: 59339,
type: "swipe",
columnIndex: 1,
swipeDir: "up"
}, {
time: 59894,
type: "tap",
columnIndex: 1
}, {
time: 60459,
type: "tap",
columnIndex: 2
}, {
time: 61083,
type: "tap",
columnIndex: 1
}, {
time: 61659,
type: "tap",
columnIndex: 2
}, {
time: 62221,
type: "tap",
columnIndex: 0
}, {
time: 62754,
type: "tap",
columnIndex: 1
}, {
time: 68064,
type: "hold",
columnIndex: 1,
duration: 1227
}, {
time: 69302,
type: "hold",
columnIndex: 2,
duration: 1134
}, {
time: 70476,
type: "hold",
columnIndex: 0,
duration: 1249
}, {
time: 71721,
type: "hold",
columnIndex: 1,
duration: 1188
}, {
time: 72898,
type: "hold",
columnIndex: 2,
duration: 1232
}, {
time: 74104,
type: "hold",
columnIndex: 0,
duration: 1277
}, {
time: 75409,
type: "hold",
columnIndex: 1,
duration: 965
}, {
time: 76370,
type: "hold",
columnIndex: 2,
duration: 1539
}, {
time: 78101,
type: "hold",
columnIndex: 1,
duration: 1002
}, {
time: 79259,
type: "hold",
columnIndex: 0,
duration: 1222
}, {
time: 80575,
type: "hold",
columnIndex: 1,
duration: 1071
}, {
time: 81723,
type: "hold",
columnIndex: 2,
duration: 884
}, {
time: 82719,
type: "swipe",
columnIndex: 0,
swipeDir: "right"
}, {
time: 83490,
type: "hold",
columnIndex: 2,
duration: 1150
}, {
time: 84679,
type: "swipe",
columnIndex: 0,
swipeDir: "left"
}, {
time: 85134,
type: "hold",
columnIndex: 1,
duration: 1173
}, {
time: 86436,
type: "tap",
columnIndex: 0
}, {
time: 86983,
type: "tap",
columnIndex: 1
}, {
time: 87567,
type: "tap",
columnIndex: 0
}, {
time: 88162,
type: "tap",
columnIndex: 0
}, {
time: 88727,
type: "tap",
columnIndex: 1
}, {
time: 89296,
type: "tap",
columnIndex: 1
}, {
time: 89880,
type: "tap",
columnIndex: 2
}, {
time: 90438,
type: "tap",
columnIndex: 2
}, {
time: 90998,
type: "tap",
columnIndex: 1
}, {
time: 91591,
type: "tap",
columnIndex: 1
}, {
time: 92159,
type: "tap",
columnIndex: 1
}, {
time: 92717,
type: "tap",
columnIndex: 1
}, {
time: 93030,
type: "tap",
columnIndex: 2
}, {
time: 93403,
type: "tap",
columnIndex: 0
}, {
time: 93950,
type: "tap",
columnIndex: 1
}, {
time: 94528,
type: "tap",
columnIndex: 0
}, {
time: 95074,
type: "tap",
columnIndex: 1
}, {
time: 95304,
type: "tap",
columnIndex: 2
}, {
time: 95642,
type: "tap",
columnIndex: 0
}, {
time: 96220,
type: "tap",
columnIndex: 1
}, {
time: 96811,
type: "tap",
columnIndex: 2
}, {
time: 97429,
type: "tap",
columnIndex: 1
}, {
time: 97926,
type: "tap",
columnIndex: 2
}]
},
"GoblopBossTrack": {
musicAsset: "Goblop",
bossAssetKey: 'Boss2_Asset',
config: {
playerMaxHP: 15,
bossMaxHP: 200
},
rawRhythmMap: [{
time: 7000,
type: "tap",
columnIndex: 0
}, {
time: 7637,
type: "tap",
columnIndex: 1
}, {
time: 8205,
type: "tap",
columnIndex: 2
}, {
time: 8783,
type: "tap",
columnIndex: 2
}, {
time: 9355,
type: "tap",
columnIndex: 0
}, {
time: 9966,
type: "tap",
columnIndex: 1
}, {
time: 10584,
type: "tap",
columnIndex: 0
}, {
time: 11124,
type: "tap",
columnIndex: 0
}, {
time: 11668,
type: "tap",
columnIndex: 0
}, {
time: 12254,
type: "tap",
columnIndex: 1
}, {
time: 12833,
type: "tap",
columnIndex: 2
}, {
time: 13428,
type: "tap",
columnIndex: 1
}, {
time: 14026,
type: "hold",
columnIndex: 1,
duration: 1205
}, {
time: 15270,
type: "hold",
columnIndex: 2,
duration: 1028
}, {
time: 16918,
type: "tap",
columnIndex: 0
}, {
time: 17481,
type: "tap",
columnIndex: 1
}, {
time: 18120,
type: "tap",
columnIndex: 0
}, {
time: 18697,
type: "tap",
columnIndex: 1
}, {
time: 19238,
type: "swipe",
columnIndex: 0,
swipeDir: "right"
}, {
time: 19853,
type: "tap",
columnIndex: 1
}, {
time: 20442,
type: "swipe",
columnIndex: 0,
swipeDir: "down"
}, {
time: 21008,
type: "tap",
columnIndex: 2
}, {
time: 21561,
type: "swipe",
columnIndex: 2,
swipeDir: "left"
}, {
time: 22225,
type: "tap",
columnIndex: 2
}, {
time: 22794,
type: "swipe",
columnIndex: 2,
swipeDir: "up"
}, {
time: 23316,
type: "tap",
columnIndex: 2
}, {
time: 23933,
type: "swipe",
columnIndex: 1,
swipeDir: "left"
}, {
time: 24538,
type: "swipe",
columnIndex: 0,
swipeDir: "up"
}, {
time: 25132,
type: "tap",
columnIndex: 1
}, {
time: 25655,
type: "tap",
columnIndex: 2
}, {
time: 26261,
type: "tap",
columnIndex: 0
}, {
time: 26840,
type: "tap",
columnIndex: 1
}, {
time: 27382,
type: "tap",
columnIndex: 2
}, {
time: 28000,
type: "tap",
columnIndex: 1
}, {
time: 28617,
type: "tap",
columnIndex: 0
}, {
time: 29194,
type: "tap",
columnIndex: 1
}, {
time: 29777,
type: "tap",
columnIndex: 2
}, {
time: 30341,
type: "tap",
columnIndex: 0
}, {
time: 30816,
type: "tap",
columnIndex: 1
}, {
time: 31506,
type: "tap",
columnIndex: 2
}, {
time: 32106,
type: "tap",
columnIndex: 0
}, {
time: 32693,
type: "hold",
columnIndex: 0,
duration: 1057
}, {
time: 33803,
type: "hold",
columnIndex: 1,
duration: 1052
}, {
time: 35102,
type: "tap",
columnIndex: 0
}, {
time: 37350,
type: "hold",
columnIndex: 1,
duration: 1851
}, {
time: 39629,
type: "hold",
columnIndex: 2,
duration: 2237
}, {
time: 42031,
type: "hold",
columnIndex: 0,
duration: 2178
}, {
time: 44365,
type: "tap",
columnIndex: 0
}, {
time: 44996,
type: "tap",
columnIndex: 0
}, {
time: 45618,
type: "tap",
columnIndex: 0
}, {
time: 46143,
type: "tap",
columnIndex: 0
}, {
time: 46708,
type: "tap",
columnIndex: 0
}, {
time: 47258,
type: "tap",
columnIndex: 0
}, {
time: 47812,
type: "tap",
columnIndex: 0
}, {
time: 48333,
type: "tap",
columnIndex: 0
}, {
time: 48601,
type: "tap",
columnIndex: 0
}, {
time: 48988,
type: "swipe",
columnIndex: 0,
swipeDir: "right"
}, {
time: 49568,
type: "swipe",
columnIndex: 2,
swipeDir: "up"
}, {
time: 50154,
type: "swipe",
columnIndex: 0,
swipeDir: "left"
}, {
time: 50768,
type: "swipe",
columnIndex: 1,
swipeDir: "down"
}, {
time: 51337,
type: "swipe",
columnIndex: 0,
swipeDir: "up"
}, {
time: 51939,
type: "swipe",
columnIndex: 0,
swipeDir: "up"
}, {
time: 52497,
type: "swipe",
columnIndex: 0,
swipeDir: "up"
}, {
time: 53086,
type: "swipe",
columnIndex: 0,
swipeDir: "up"
}, {
time: 53638,
type: "tap",
columnIndex: 2
}, {
time: 54286,
type: "tap",
columnIndex: 1
}, {
time: 54830,
type: "tap",
columnIndex: 2
}, {
time: 55440,
type: "tap",
columnIndex: 1
}, {
time: 55971,
type: "tap",
columnIndex: 2
}, {
time: 56523,
type: "tap",
columnIndex: 0
}, {
time: 57124,
type: "tap",
columnIndex: 1
}, {
time: 57742,
type: "tap",
columnIndex: 2
}, {
time: 58339,
type: "tap",
columnIndex: 0
}, {
time: 59372,
type: "hold",
columnIndex: 0,
duration: 1269
}, {
time: 60694,
type: "hold",
columnIndex: 1,
duration: 2119
}, {
time: 62848,
type: "hold",
columnIndex: 2,
duration: 2364
}, {
time: 65253,
type: "hold",
columnIndex: 0,
duration: 2294
}, {
time: 67709,
type: "tap",
columnIndex: 0
}, {
time: 68257,
type: "tap",
columnIndex: 0
}, {
time: 68812,
type: "tap",
columnIndex: 0
}, {
time: 69407,
type: "tap",
columnIndex: 0
}, {
time: 69707,
type: "tap",
columnIndex: 0
}, {
time: 69989,
type: "tap",
columnIndex: 0
}, {
time: 70554,
type: "tap",
columnIndex: 1
}, {
time: 71147,
type: "tap",
columnIndex: 0
}, {
time: 71721,
type: "tap",
columnIndex: 1
}, {
time: 72304,
type: "swipe",
columnIndex: 0,
swipeDir: "left"
}, {
time: 72909,
type: "swipe",
columnIndex: 1,
swipeDir: "down"
}, {
time: 73509,
type: "swipe",
columnIndex: 0,
swipeDir: "up"
}, {
time: 74070,
type: "swipe",
columnIndex: 1,
swipeDir: "right"
}, {
time: 74655,
type: "tap",
columnIndex: 0
}, {
time: 75270,
type: "swipe",
columnIndex: 0,
swipeDir: "left"
}, {
time: 75835,
type: "tap",
columnIndex: 0
}, {
time: 76391,
type: "swipe",
columnIndex: 0,
swipeDir: "down"
}, {
time: 76968,
type: "tap",
columnIndex: 0
}, {
time: 77527,
type: "swipe",
columnIndex: 0,
swipeDir: "up"
}, {
time: 78153,
type: "tap",
columnIndex: 1
}, {
time: 78701,
type: "swipe",
columnIndex: 1,
swipeDir: "right"
}, {
time: 79300,
type: "tap",
columnIndex: 2
}, {
time: 79856,
type: "swipe",
columnIndex: 1,
swipeDir: "down"
}, {
time: 80433,
type: "tap",
columnIndex: 2
}, {
time: 81041,
type: "tap",
columnIndex: 1
}, {
time: 81632,
type: "tap",
columnIndex: 2
}, {
time: 82232,
type: "tap",
columnIndex: 1
}, {
time: 82769,
type: "tap",
columnIndex: 2
}, {
time: 83391,
type: "tap",
columnIndex: 2
}, {
time: 83960,
type: "tap",
columnIndex: 1
}, {
time: 84554,
type: "tap",
columnIndex: 2
}, {
time: 85139,
type: "tap",
columnIndex: 0
}, {
time: 85715,
type: "tap",
columnIndex: 1
}, {
time: 86261,
type: "swipe",
columnIndex: 0,
swipeDir: "up"
}, {
time: 86858,
type: "swipe",
columnIndex: 0,
swipeDir: "up"
}, {
time: 87427,
type: "swipe",
columnIndex: 1,
swipeDir: "right"
}, {
time: 88060,
type: "swipe",
columnIndex: 1,
swipeDir: "right"
}, {
time: 88630,
type: "tap",
columnIndex: 1
}, {
time: 89198,
type: "swipe",
columnIndex: 1,
swipeDir: "down"
}, {
time: 89777,
type: "tap",
columnIndex: 1
}, {
time: 90334,
type: "swipe",
columnIndex: 2,
swipeDir: "up"
}, {
time: 90976,
type: "tap",
columnIndex: 2
}, {
time: 91533,
type: "swipe",
columnIndex: 2,
swipeDir: "left"
}, {
time: 92125,
type: "tap",
columnIndex: 2
}, {
time: 92691,
type: "swipe",
columnIndex: 2,
swipeDir: "right"
}, {
time: 93264,
type: "tap",
columnIndex: 0
}, {
time: 93848,
type: "swipe",
columnIndex: 0,
swipeDir: "down"
}, {
time: 94458,
type: "tap",
columnIndex: 1
}, {
time: 95026,
type: "swipe",
columnIndex: 1,
swipeDir: "up"
}, {
time: 95599,
type: "tap",
columnIndex: 2
}, {
time: 96194,
type: "tap",
columnIndex: 1
}, {
time: 96765,
type: "tap",
columnIndex: 0
}, {
time: 97338,
type: "tap",
columnIndex: 1
}, {
time: 97640,
type: "tap",
columnIndex: 2
}, {
time: 97979,
type: "tap",
columnIndex: 0
}]
},
"BitbotBossTrack": {
musicAsset: "Bitbot",
bossAssetKey: 'Boss5',
config: {
playerMaxHP: 10,
bossMaxHP: 230
},
rawRhythmMap: [{
time: 10000,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 11181,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 12370,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 13494,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 14638,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 15817,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 16906,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 18044,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 19292,
type: 'tap',
columnIndex: 2
}, {
time: 19848,
type: 'tap',
columnIndex: 1
}, {
time: 20433,
type: 'tap',
columnIndex: 0
}, {
time: 21001,
type: 'tap',
columnIndex: 0
}, {
time: 21550,
type: 'tap',
columnIndex: 1
}, {
time: 22137,
type: 'tap',
columnIndex: 2
}, {
time: 22708,
type: 'tap',
columnIndex: 2
}, {
time: 23292,
type: 'tap',
columnIndex: 1
}, {
time: 23860,
type: 'tap',
columnIndex: 0
}, {
time: 24446,
type: 'tap',
columnIndex: 1
}, {
time: 25005,
type: 'tap',
columnIndex: 0
}, {
time: 25534,
type: 'tap',
columnIndex: 1
}, {
time: 26161,
type: 'tap',
columnIndex: 2
}, {
time: 26689,
type: 'tap',
columnIndex: 1
}, {
time: 27296,
type: 'tap',
columnIndex: 2
}, {
time: 27829,
type: 'tap',
columnIndex: 1
}, {
time: 28457,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 29038,
type: 'tap',
columnIndex: 1
}, {
time: 29620,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 30184,
type: 'tap',
columnIndex: 0
}, {
time: 30745,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 31335,
type: 'tap',
columnIndex: 2
}, {
time: 31912,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 32528,
type: 'tap',
columnIndex: 1
}, {
time: 33076,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 33635,
type: 'tap',
columnIndex: 2
}, {
time: 34220,
type: 'tap',
columnIndex: 1
}, {
time: 34826,
type: 'tap',
columnIndex: 0
}, {
time: 35411,
type: 'tap',
columnIndex: 1
}, {
time: 35931,
type: 'tap',
columnIndex: 2
}, {
time: 36540,
type: 'tap',
columnIndex: 0
}, {
time: 40033,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 40596,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 41156,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 41731,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 42298,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 42866,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 43444,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 44073,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 44612,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 45205,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 45759,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 46334,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 46912,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 47477,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 48006,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 48591,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 49166,
type: 'hold',
columnIndex: 0,
duration: 899
}, {
time: 50313,
type: 'hold',
columnIndex: 1,
duration: 787
}, {
time: 51269,
type: 'hold',
columnIndex: 2,
duration: 1095
}, {
time: 52758,
type: 'tap',
columnIndex: 2
}, {
time: 53259,
type: 'tap',
columnIndex: 1
}, {
time: 53849,
type: 'tap',
columnIndex: 0
}, {
time: 54914,
type: 'tap',
columnIndex: 0
}, {
time: 55453,
type: 'tap',
columnIndex: 1
}, {
time: 56041,
type: 'tap',
columnIndex: 2
}, {
time: 56663,
type: 'tap',
columnIndex: 0
}, {
time: 57235,
type: 'tap',
columnIndex: 1
}, {
time: 57842,
type: 'tap',
columnIndex: 2
}, {
time: 58395,
type: 'tap',
columnIndex: 2
}, {
time: 58936,
type: 'tap',
columnIndex: 1
}, {
time: 59470,
type: 'tap',
columnIndex: 0
}, {
time: 60030,
type: 'tap',
columnIndex: 0
}, {
time: 60523,
type: 'tap',
columnIndex: 1
}, {
time: 61220,
type: 'tap',
columnIndex: 2
}, {
time: 61942,
type: 'tap',
columnIndex: 1
}, {
time: 62510,
type: 'tap',
columnIndex: 0
}, {
time: 65413,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 65981,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 66522,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 67167,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 67689,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 68312,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 68782,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 69415,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 69919,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 70565,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 71124,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 71702,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 72278,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 72864,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 73416,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 74034,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 74587,
type: 'tap',
columnIndex: 2
}, {
time: 75287,
type: 'tap',
columnIndex: 1
}, {
time: 77087,
type: 'tap',
columnIndex: 0
}, {
time: 78073,
type: 'tap',
columnIndex: 1
}, {
time: 78689,
type: 'tap',
columnIndex: 1
}, {
time: 79248,
type: 'tap',
columnIndex: 2
}, {
time: 79853,
type: 'tap',
columnIndex: 2
}, {
time: 80403,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 80959,
type: 'tap',
columnIndex: 2
}, {
time: 81507,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 82128,
type: 'tap',
columnIndex: 1
}, {
time: 82706,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 83270,
type: 'tap',
columnIndex: 0
}, {
time: 83809,
type: 'tap',
columnIndex: 1
}, {
time: 84348,
type: 'tap',
columnIndex: 2
}, {
time: 84771,
type: 'tap',
columnIndex: 1
}, {
time: 85020,
type: 'tap',
columnIndex: 1
}, {
time: 85559,
type: 'tap',
columnIndex: 1
}, {
time: 86178,
type: 'tap',
columnIndex: 0
}, {
time: 86733,
type: 'tap',
columnIndex: 1
}, {
time: 87282,
type: 'tap',
columnIndex: 2
}, {
time: 87847,
type: 'tap',
columnIndex: 1
}, {
time: 88464,
type: 'tap',
columnIndex: 0
}, {
time: 89023,
type: 'tap',
columnIndex: 1
}, {
time: 89536,
type: 'tap',
columnIndex: 2
}, {
time: 90156,
type: 'tap',
columnIndex: 0
}, {
time: 90761,
type: 'tap',
columnIndex: 2
}, {
time: 91315,
type: 'tap',
columnIndex: 1
}, {
time: 91832,
type: 'tap',
columnIndex: 0
}, {
time: 92335,
type: 'tap',
columnIndex: 1
}, {
time: 93053,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 93640,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 94219,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 95384,
type: 'hold',
columnIndex: 0,
duration: 878
}, {
time: 96599,
type: 'hold',
columnIndex: 1,
duration: 710
}, {
time: 97525,
type: 'hold',
columnIndex: 2,
duration: 936
}, {
time: 98807,
type: 'tap',
columnIndex: 0
}, {
time: 99181,
type: 'tap',
columnIndex: 1
}, {
time: 99381,
type: 'tap',
columnIndex: 1
}, {
time: 99729,
type: 'tap',
columnIndex: 2
}, {
time: 100050,
type: 'tap',
columnIndex: 1
}, {
time: 100645,
type: 'tap',
columnIndex: 0
}, {
time: 101195,
type: 'tap',
columnIndex: 1
}, {
time: 101771,
type: 'tap',
columnIndex: 2
}, {
time: 102337,
type: 'tap',
columnIndex: 1
}, {
time: 102867,
type: 'tap',
columnIndex: 2
}, {
time: 103433,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 104068,
type: 'tap',
columnIndex: 2
}, {
time: 104601,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 105198,
type: 'tap',
columnIndex: 1
}, {
time: 105702,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 106313,
type: 'tap',
columnIndex: 0
}, {
time: 106843,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 107447,
type: 'tap',
columnIndex: 1
}, {
time: 107960,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 108594,
type: 'tap',
columnIndex: 2
}, {
time: 109209,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 109748,
type: 'tap',
columnIndex: 0
}, {
time: 110092,
type: 'tap',
columnIndex: 1
}, {
time: 110274,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 110669,
type: 'tap',
columnIndex: 2
}, {
time: 111013,
type: 'tap',
columnIndex: 1
}, {
time: 111589,
type: 'tap',
columnIndex: 0
}, {
time: 112167,
type: 'tap',
columnIndex: 0
}]
},
"OctobeatBossTrack": {
musicAsset: "Octobeat",
bossAssetKey: 'boss4',
// PAMIĘTAJ, ŻEBY ZMIENIĆ NA WŁAŚCIWY ASSET!
config: {
playerMaxHP: 10,
bossMaxHP: 300
},
rawRhythmMap: [{
time: 9000,
type: 'tap',
columnIndex: 0
}, {
time: 9434,
type: 'tap',
columnIndex: 0
}, {
time: 9912,
type: 'tap',
columnIndex: 0
}, {
time: 10377,
type: 'tap',
columnIndex: 0
}, {
time: 10832,
type: 'tap',
columnIndex: 0
}, {
time: 11318,
type: 'tap',
columnIndex: 0
}, {
time: 11768,
type: 'tap',
columnIndex: 0
}, {
time: 12226,
type: 'tap',
columnIndex: 0
}, {
time: 12675,
type: 'tap',
columnIndex: 1
}, {
time: 13160,
type: 'tap',
columnIndex: 1
}, {
time: 13623,
type: 'tap',
columnIndex: 1
}, {
time: 14070,
type: 'tap',
columnIndex: 1
}, {
time: 14546,
type: 'tap',
columnIndex: 1
}, {
time: 14976,
type: 'tap',
columnIndex: 1
}, {
time: 15431,
type: 'tap',
columnIndex: 1
}, {
time: 15943,
type: 'tap',
columnIndex: 1
}, {
time: 16370,
type: 'tap',
columnIndex: 2
}, {
time: 16836,
type: 'tap',
columnIndex: 2
}, {
time: 17300,
type: 'tap',
columnIndex: 2
}, {
time: 17796,
type: 'tap',
columnIndex: 2
}, {
time: 18257,
type: 'tap',
columnIndex: 2
}, {
time: 18652,
type: 'tap',
columnIndex: 2
}, {
time: 19147,
type: 'tap',
columnIndex: 2
}, {
time: 19610,
type: 'tap',
columnIndex: 2
}, {
time: 20021,
type: 'hold',
columnIndex: 1,
duration: 1676
}, {
time: 23805,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 24245,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 24753,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 25164,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 25644,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 26127,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 26553,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 27051,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 27508,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 27910,
type: 'tap',
columnIndex: 2
}, {
time: 28397,
type: 'tap',
columnIndex: 1
}, {
time: 28881,
type: 'tap',
columnIndex: 2
}, {
time: 29323,
type: 'tap',
columnIndex: 0
}, {
time: 29798,
type: 'swipe',
columnIndex: 0,
swipeDir: 'left'
}, {
time: 30276,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 30713,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 31180,
type: 'tap',
columnIndex: 2
}, {
time: 31676,
type: 'tap',
columnIndex: 2
}, {
time: 32119,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 32610,
type: 'tap',
columnIndex: 2
}, {
time: 33034,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 33500,
type: 'tap',
columnIndex: 1
}, {
time: 33959,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 34411,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 34862,
type: 'tap',
columnIndex: 2
}, {
time: 35370,
type: 'tap',
columnIndex: 2
}, {
time: 35794,
type: 'tap',
columnIndex: 1
}, {
time: 36240,
type: 'tap',
columnIndex: 0
}, {
time: 36685,
type: 'tap',
columnIndex: 1
}, {
time: 37197,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 38586,
type: 'swipe',
columnIndex: 0,
swipeDir: 'left'
}, {
time: 38998,
type: 'swipe',
columnIndex: 0,
swipeDir: 'left'
}, {
time: 39471,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 39912,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 40365,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 40821,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 41281,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 41721,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 42183,
type: 'swipe',
columnIndex: 0,
swipeDir: 'left'
}, {
time: 42690,
type: 'swipe',
columnIndex: 0,
swipeDir: 'left'
}, {
time: 43132,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 43616,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 44079,
type: 'tap',
columnIndex: 2
}, {
time: 44564,
type: 'tap',
columnIndex: 0
}, {
time: 44987,
type: 'tap',
columnIndex: 2
}, {
time: 45462,
type: 'tap',
columnIndex: 1
}, {
time: 45923,
type: 'tap',
columnIndex: 2
}, {
time: 46376,
type: 'tap',
columnIndex: 1
}, {
time: 46849,
type: 'tap',
columnIndex: 0
}, {
time: 47298,
type: 'tap',
columnIndex: 1
}, {
time: 47779,
type: 'tap',
columnIndex: 2
}, {
time: 48229,
type: 'tap',
columnIndex: 2
}, {
time: 48629,
type: 'tap',
columnIndex: 1
}, {
time: 49136,
type: 'tap',
columnIndex: 2
}, {
time: 49592,
type: 'tap',
columnIndex: 1
}, {
time: 50058,
type: 'tap',
columnIndex: 0
}, {
time: 50553,
type: 'tap',
columnIndex: 1
}, {
time: 50971,
type: 'tap',
columnIndex: 2
}, {
time: 51452,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 51921,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 52377,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 52847,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 53244,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 54721,
type: 'tap',
columnIndex: 0
}, {
time: 55691,
type: 'tap',
columnIndex: 1
}, {
time: 56574,
type: 'tap',
columnIndex: 2
}, {
time: 57455,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 58360,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 59294,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 60217,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 61135,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 61625,
type: 'tap',
columnIndex: 2
}, {
time: 62111,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 62557,
type: 'tap',
columnIndex: 2
}, {
time: 63044,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 63516,
type: 'tap',
columnIndex: 1
}, {
time: 63956,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 64435,
type: 'tap',
columnIndex: 0
}, {
time: 64876,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 65333,
type: 'tap',
columnIndex: 0
}, {
time: 65776,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 66252,
type: 'tap',
columnIndex: 1
}, {
time: 66694,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 67137,
type: 'tap',
columnIndex: 1
}, {
time: 67573,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 68048,
type: 'tap',
columnIndex: 2
}, {
time: 71819,
type: 'tap',
columnIndex: 0
}, {
time: 72254,
type: 'tap',
columnIndex: 0
}, {
time: 72693,
type: 'tap',
columnIndex: 1
}, {
time: 73175,
type: 'tap',
columnIndex: 1
}, {
time: 73668,
type: 'tap',
columnIndex: 2
}, {
time: 74102,
type: 'tap',
columnIndex: 2
}, {
time: 74533,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 75030,
type: 'tap',
columnIndex: 2
}, {
time: 75486,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 75942,
type: 'tap',
columnIndex: 1
}, {
time: 76406,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 76888,
type: 'tap',
columnIndex: 0
}, {
time: 77302,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 77737,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 78202,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 78674,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 79173,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 79647,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 80116,
type: 'tap',
columnIndex: 2
}, {
time: 80586,
type: 'tap',
columnIndex: 1
}, {
time: 81056,
type: 'tap',
columnIndex: 2
}, {
time: 81505,
type: 'tap',
columnIndex: 1
}, {
time: 81966,
type: 'tap',
columnIndex: 2
}, {
time: 82413,
type: 'tap',
columnIndex: 0
}, {
time: 82865,
type: 'tap',
columnIndex: 1
}, {
time: 83282,
type: 'tap',
columnIndex: 2
}, {
time: 83781,
type: 'tap',
columnIndex: 1
}, {
time: 84260,
type: 'tap',
columnIndex: 0
}, {
time: 84721,
type: 'tap',
columnIndex: 1
}, {
time: 86554,
type: 'tap',
columnIndex: 2
}, {
time: 86977,
type: 'tap',
columnIndex: 2
}, {
time: 87417,
type: 'tap',
columnIndex: 1
}, {
time: 87875,
type: 'tap',
columnIndex: 1
}, {
time: 88331,
type: 'tap',
columnIndex: 2
}, {
time: 88819,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 89262,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 89739,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 90234,
type: 'tap',
columnIndex: 0
}, {
time: 90707,
type: 'tap',
columnIndex: 0
}, {
time: 91146,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 91569,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 92056,
type: 'tap',
columnIndex: 0
}, {
time: 92533,
type: 'tap',
columnIndex: 0
}, {
time: 92973,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 93469,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 93940,
type: 'tap',
columnIndex: 1
}, {
time: 94440,
type: 'tap',
columnIndex: 2
}, {
time: 94873,
type: 'tap',
columnIndex: 1
}, {
time: 95352,
type: 'tap',
columnIndex: 2
}, {
time: 95790,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 96257,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 96722,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 97187,
type: 'tap',
columnIndex: 1
}, {
time: 97630,
type: 'tap',
columnIndex: 2
}, {
time: 98141,
type: 'tap',
columnIndex: 0
}, {
time: 98544,
type: 'tap',
columnIndex: 1
}, {
time: 99017,
type: 'tap',
columnIndex: 2
}, {
time: 99517,
type: 'tap',
columnIndex: 1
}, {
time: 99954,
type: 'tap',
columnIndex: 2
}, {
time: 100405,
type: 'tap',
columnIndex: 1
}, {
time: 100858,
type: 'tap',
columnIndex: 1
}, {
time: 101297,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 101757,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 102188,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 102713,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 103194,
type: 'tap',
columnIndex: 1
}, {
time: 103683,
type: 'tap',
columnIndex: 1
}, {
time: 104091,
type: 'swipe',
columnIndex: 0,
swipeDir: 'left'
}, {
time: 104566,
type: 'swipe',
columnIndex: 0,
swipeDir: 'left'
}, {
time: 105046,
type: 'tap',
columnIndex: 0
}, {
time: 105519,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 106020,
type: 'tap',
columnIndex: 1
}, {
time: 106422,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 106844,
type: 'tap',
columnIndex: 2
}, {
time: 107264,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 107787,
type: 'tap',
columnIndex: 2
}, {
time: 108242,
type: 'swipe',
columnIndex: 0,
swipeDir: 'left'
}, {
time: 108725,
type: 'tap',
columnIndex: 1
}, {
time: 109610,
type: 'tap',
columnIndex: 2
}, {
time: 110364,
type: 'tap',
columnIndex: 0
}, {
time: 112347,
type: 'tap',
columnIndex: 2
}, {
time: 113209,
type: 'tap',
columnIndex: 1
}, {
time: 114038,
type: 'tap',
columnIndex: 0
}]
},
"SalabassTrack": {
musicAsset: "Salabass",
bossAssetKey: 'Boss6',
config: {
playerMaxHP: 10,
bossMaxHP: 200
},
rawRhythmMap: [{
time: 9000,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 10142,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 11326,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 13571,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 14659,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 15773,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 18616,
type: 'tap',
columnIndex: 0
}, {
time: 19183,
type: 'tap',
columnIndex: 2
}, {
time: 19761,
type: 'tap',
columnIndex: 0
}, {
time: 20361,
type: 'tap',
columnIndex: 2
}, {
time: 20876,
type: 'tap',
columnIndex: 0
}, {
time: 21409,
type: 'tap',
columnIndex: 1
}, {
time: 21986,
type: 'tap',
columnIndex: 0
}, {
time: 22530,
type: 'tap',
columnIndex: 1
}, {
time: 23025,
type: 'tap',
columnIndex: 2
}, {
time: 23651,
type: 'tap',
columnIndex: 1
}, {
time: 24223,
type: 'tap',
columnIndex: 0
}, {
time: 24701,
type: 'tap',
columnIndex: 1
}, {
time: 25237,
type: 'tap',
columnIndex: 2
}, {
time: 25848,
type: 'tap',
columnIndex: 1
}, {
time: 26404,
type: 'tap',
columnIndex: 2
}, {
time: 26988,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 27566,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 28152,
type: 'tap',
columnIndex: 0
}, {
time: 28715,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 29266,
type: 'tap',
columnIndex: 0
}, {
time: 29860,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 30418,
type: 'tap',
columnIndex: 1
}, {
time: 30839,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 31248,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 31485,
type: 'tap',
columnIndex: 1
}, {
time: 32013,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 32618,
type: 'tap',
columnIndex: 2
}, {
time: 33107,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 33480,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 33804,
type: 'tap',
columnIndex: 2
}, {
time: 34308,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 34876,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 35385,
type: 'tap',
columnIndex: 1
}, {
time: 35964,
type: 'tap',
columnIndex: 2
}, {
time: 36558,
type: 'tap',
columnIndex: 0
}, {
time: 37054,
type: 'tap',
columnIndex: 1
}, {
time: 38213,
type: 'tap',
columnIndex: 0
}, {
time: 38714,
type: 'tap',
columnIndex: 0
}, {
time: 39362,
type: 'tap',
columnIndex: 1
}, {
time: 39934,
type: 'tap',
columnIndex: 1
}, {
time: 40472,
type: 'tap',
columnIndex: 2
}, {
time: 41082,
type: 'tap',
columnIndex: 2
}, {
time: 41629,
type: 'tap',
columnIndex: 2
}, {
time: 42170,
type: 'tap',
columnIndex: 1
}, {
time: 42700,
type: 'tap',
columnIndex: 1
}, {
time: 43241,
type: 'tap',
columnIndex: 0
}, {
time: 43818,
type: 'tap',
columnIndex: 1
}, {
time: 47157,
type: 'tap',
columnIndex: 0
}, {
time: 47453,
type: 'tap',
columnIndex: 1
}, {
time: 47708,
type: 'tap',
columnIndex: 2
}, {
time: 47966,
type: 'tap',
columnIndex: 1
}, {
time: 48237,
type: 'tap',
columnIndex: 0
}, {
time: 48804,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 49308,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 49613,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 49907,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 50241,
type: 'swipe',
columnIndex: 0,
swipeDir: 'left'
}, {
time: 50505,
type: 'tap',
columnIndex: 2
}, {
time: 51035,
type: 'tap',
columnIndex: 1
}, {
time: 51595,
type: 'tap',
columnIndex: 0
}, {
time: 51999,
type: 'tap',
columnIndex: 1
}, {
time: 52278,
type: 'tap',
columnIndex: 2
}, {
time: 52537,
type: 'tap',
columnIndex: 1
}, {
time: 52804,
type: 'tap',
columnIndex: 0
}, {
time: 53284,
type: 'tap',
columnIndex: 1
}, {
time: 53819,
type: 'tap',
columnIndex: 2
}, {
time: 54231,
type: 'tap',
columnIndex: 1
}, {
time: 54548,
type: 'tap',
columnIndex: 1
}, {
time: 55022,
type: 'tap',
columnIndex: 0
}, {
time: 55514,
type: 'tap',
columnIndex: 1
}, {
time: 56143,
type: 'tap',
columnIndex: 2
}, {
time: 56700,
type: 'swipe',
columnIndex: 0,
swipeDir: 'left'
}, {
time: 57297,
type: 'tap',
columnIndex: 2
}, {
time: 57799,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 58392,
type: 'tap',
columnIndex: 1
}, {
time: 58887,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 59548,
type: 'tap',
columnIndex: 1
}, {
time: 60053,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 60627,
type: 'tap',
columnIndex: 0
}, {
time: 61138,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 61757,
type: 'tap',
columnIndex: 0
}, {
time: 62317,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 62865,
type: 'tap',
columnIndex: 0
}, {
time: 63398,
type: 'tap',
columnIndex: 1
}, {
time: 63983,
type: 'tap',
columnIndex: 2
}, {
time: 64530,
type: 'tap',
columnIndex: 0
}, {
time: 64892,
type: 'tap',
columnIndex: 1
}, {
time: 65280,
type: 'tap',
columnIndex: 2
}, {
time: 66784,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 67366,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 67886,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 69025,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 69566,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 69851,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 71288,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 71860,
type: 'swipe',
columnIndex: 0,
swipeDir: 'left'
}, {
time: 73053,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 73566,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 74169,
type: 'tap',
columnIndex: 0
}, {
time: 74681,
type: 'tap',
columnIndex: 2
}, {
time: 75247,
type: 'tap',
columnIndex: 0
}, {
time: 75792,
type: 'tap',
columnIndex: 1
}, {
time: 76321,
type: 'tap',
columnIndex: 0
}, {
time: 76891,
type: 'tap',
columnIndex: 2
}, {
time: 77430,
type: 'tap',
columnIndex: 0
}, {
time: 77987,
type: 'tap',
columnIndex: 1
}, {
time: 78582,
type: 'tap',
columnIndex: 0
}, {
time: 79126,
type: 'tap',
columnIndex: 2
}, {
time: 79684,
type: 'tap',
columnIndex: 0
}, {
time: 80230,
type: 'tap',
columnIndex: 1
}, {
time: 80806,
type: 'tap',
columnIndex: 2
}, {
time: 81389,
type: 'tap',
columnIndex: 1
}, {
time: 81641,
type: 'tap',
columnIndex: 0
}, {
time: 81986,
type: 'tap',
columnIndex: 1
}, {
time: 82231,
type: 'tap',
columnIndex: 2
}, {
time: 82540,
type: 'tap',
columnIndex: 1
}, {
time: 83115,
type: 'tap',
columnIndex: 0
}, {
time: 84183,
type: 'tap',
columnIndex: 1
}, {
time: 85310,
type: 'tap',
columnIndex: 2
}, {
time: 86400,
type: 'tap',
columnIndex: 2
}, {
time: 87564,
type: 'tap',
columnIndex: 1
}, {
time: 88652,
type: 'tap',
columnIndex: 0
}, {
time: 92009,
type: 'tap',
columnIndex: 0
}, {
time: 92310,
type: 'tap',
columnIndex: 1
}, {
time: 92553,
type: 'tap',
columnIndex: 2
}, {
time: 92825,
type: 'tap',
columnIndex: 1
}, {
time: 93153,
type: 'tap',
columnIndex: 0
}, {
time: 93667,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 93923,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 94223,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 94542,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 94840,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 95098,
type: 'tap',
columnIndex: 2
}, {
time: 95402,
type: 'tap',
columnIndex: 1
}, {
time: 95695,
type: 'tap',
columnIndex: 0
}, {
time: 96010,
type: 'tap',
columnIndex: 1
}, {
time: 96503,
type: 'tap',
columnIndex: 2
}, {
time: 96732,
type: 'tap',
columnIndex: 0
}, {
time: 97035,
type: 'tap',
columnIndex: 1
}, {
time: 97392,
type: 'tap',
columnIndex: 2
}, {
time: 97646,
type: 'tap',
columnIndex: 1
}, {
time: 98194,
type: 'tap',
columnIndex: 0
}, {
time: 98752,
type: 'tap',
columnIndex: 1
}, {
time: 99308,
type: 'tap',
columnIndex: 2
}, {
time: 99859,
type: 'tap',
columnIndex: 1
}, {
time: 100125,
type: 'tap',
columnIndex: 2
}, {
time: 100414,
type: 'tap',
columnIndex: 0
}, {
time: 100718,
type: 'tap',
columnIndex: 1
}, {
time: 101026,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 101585,
type: 'tap',
columnIndex: 2
}, {
time: 102115,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 102713,
type: 'tap',
columnIndex: 1
}, {
time: 103242,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 103572,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 103856,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 104431,
type: 'tap',
columnIndex: 0
}, {
time: 104693,
type: 'tap',
columnIndex: 1
}, {
time: 104948,
type: 'tap',
columnIndex: 2
}, {
time: 105501,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 106045,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 106594,
type: 'tap',
columnIndex: 1
}, {
time: 106849,
type: 'tap',
columnIndex: 2
}, {
time: 107170,
type: 'tap',
columnIndex: 0
}, {
time: 107455,
type: 'tap',
columnIndex: 1
}, {
time: 108048,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 108343,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 108613,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 108891,
type: 'tap',
columnIndex: 1
}, {
time: 109114,
type: 'tap',
columnIndex: 2
}, {
time: 109397,
type: 'tap',
columnIndex: 1
}, {
time: 109684,
type: 'tap',
columnIndex: 0
}, {
time: 110033,
type: 'swipe',
columnIndex: 0,
swipeDir: 'left'
}, {
time: 112244,
type: 'tap',
columnIndex: 0
}, {
time: 112796,
type: 'tap',
columnIndex: 1
}, {
time: 113314,
type: 'tap',
columnIndex: 2
}, {
time: 113915,
type: 'tap',
columnIndex: 0
}, {
time: 114151,
type: 'tap',
columnIndex: 1
}, {
time: 114482,
type: 'tap',
columnIndex: 2
}, {
time: 115018,
type: 'tap',
columnIndex: 2
}, {
time: 115555,
type: 'tap',
columnIndex: 1
}, {
time: 116005,
type: 'tap',
columnIndex: 0
}, {
time: 116286,
type: 'tap',
columnIndex: 0
}, {
time: 116714,
type: 'tap',
columnIndex: 1
}, {
time: 116994,
type: 'tap',
columnIndex: 2
}, {
time: 117267,
type: 'tap',
columnIndex: 1
}, {
time: 117755,
type: 'tap',
columnIndex: 0
}, {
time: 118088,
type: 'tap',
columnIndex: 0
}, {
time: 118368,
type: 'tap',
columnIndex: 1
}, {
time: 118643,
type: 'tap',
columnIndex: 2
}, {
time: 118912,
type: 'tap',
columnIndex: 1
}, {
time: 119521,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 120045,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 120611,
type: 'tap',
columnIndex: 1
}, {
time: 121185,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 121665,
type: 'tap',
columnIndex: 1
}, {
time: 122286,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 122870,
type: 'tap',
columnIndex: 1
}, {
time: 123380,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 124009,
type: 'tap',
columnIndex: 1
}, {
time: 124501,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 125119,
type: 'tap',
columnIndex: 1
}, {
time: 125654,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 126167,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 126771,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 127235,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 127846,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}]
},
"Funkilla_Track": {
musicAsset: 'Funkilla',
bossAssetKey: 'boss7',
config: {
playerMaxHP: 10,
bossMaxHP: 280
},
rawRhythmMap: [{
time: 14000,
type: 'tap',
columnIndex: 0
}, {
time: 14408,
type: 'tap',
columnIndex: 1
}, {
time: 14662,
type: 'tap',
columnIndex: 2
}, {
time: 15120,
type: 'tap',
columnIndex: 1
}, {
time: 15574,
type: 'tap',
columnIndex: 0
}, {
time: 16021,
type: 'tap',
columnIndex: 1
}, {
time: 16400,
type: 'tap',
columnIndex: 2
}, {
time: 17276,
type: 'tap',
columnIndex: 0
}, {
time: 17704,
type: 'tap',
columnIndex: 1
}, {
time: 17907,
type: 'tap',
columnIndex: 2
}, {
time: 18314,
type: 'tap',
columnIndex: 1
}, {
time: 18886,
type: 'tap',
columnIndex: 0
}, {
time: 19335,
type: 'tap',
columnIndex: 1
}, {
time: 19762,
type: 'tap',
columnIndex: 2
}, {
time: 20589,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 20996,
type: 'tap',
columnIndex: 0
}, {
time: 21430,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 21851,
type: 'tap',
columnIndex: 0
}, {
time: 22272,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 22693,
type: 'tap',
columnIndex: 0
}, {
time: 23060,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 23511,
type: 'tap',
columnIndex: 1
}, {
time: 23915,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 24354,
type: 'tap',
columnIndex: 1
}, {
time: 24699,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 25159,
type: 'tap',
columnIndex: 1
}, {
time: 25560,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 25977,
type: 'tap',
columnIndex: 1
}, {
time: 26370,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 26800,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 27216,
type: 'tap',
columnIndex: 2
}, {
time: 27658,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 28096,
type: 'tap',
columnIndex: 2
}, {
time: 28440,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 28914,
type: 'tap',
columnIndex: 2
}, {
time: 29320,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 29731,
type: 'tap',
columnIndex: 2
}, {
time: 30123,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 30545,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 30938,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 31321,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 31719,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 33405,
type: 'tap',
columnIndex: 0
}, {
time: 33861,
type: 'tap',
columnIndex: 1
}, {
time: 34253,
type: 'tap',
columnIndex: 0
}, {
time: 34670,
type: 'tap',
columnIndex: 1
}, {
time: 35056,
type: 'tap',
columnIndex: 2
}, {
time: 35489,
type: 'tap',
columnIndex: 1
}, {
time: 35911,
type: 'tap',
columnIndex: 0
}, {
time: 36294,
type: 'tap',
columnIndex: 1
}, {
time: 36736,
type: 'tap',
columnIndex: 0
}, {
time: 37159,
type: 'tap',
columnIndex: 0
}, {
time: 37539,
type: 'tap',
columnIndex: 1
}, {
time: 37926,
type: 'tap',
columnIndex: 2
}, {
time: 38374,
type: 'tap',
columnIndex: 2
}, {
time: 38763,
type: 'tap',
columnIndex: 0
}, {
time: 39271,
type: 'tap',
columnIndex: 0
}, {
time: 39599,
type: 'tap',
columnIndex: 1
}, {
time: 40057,
type: 'tap',
columnIndex: 2
}, {
time: 40482,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 40898,
type: 'tap',
columnIndex: 2
}, {
time: 41326,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 41728,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 42081,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 42515,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 42956,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 43332,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 43705,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 44148,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 44563,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 44964,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 45722,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 46575,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 47078,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 47414,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 47882,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 48287,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 48741,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 49120,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 49554,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 49954,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 50372,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 50818,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 51182,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 51620,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 52021,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 52460,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 52870,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 53287,
type: 'tap',
columnIndex: 0
}, {
time: 53690,
type: 'tap',
columnIndex: 1
}, {
time: 54088,
type: 'tap',
columnIndex: 2
}, {
time: 54491,
type: 'tap',
columnIndex: 1
}, {
time: 54941,
type: 'tap',
columnIndex: 0
}, {
time: 55354,
type: 'tap',
columnIndex: 1
}, {
time: 55743,
type: 'tap',
columnIndex: 2
}, {
time: 56167,
type: 'tap',
columnIndex: 1
}, {
time: 56585,
type: 'tap',
columnIndex: 0
}, {
time: 56839,
type: 'tap',
columnIndex: 0
}, {
time: 57036,
type: 'tap',
columnIndex: 0
}, {
time: 57414,
type: 'tap',
columnIndex: 0
}, {
time: 57813,
type: 'tap',
columnIndex: 0
}, {
time: 57987,
type: 'tap',
columnIndex: 0
}, {
time: 58443,
type: 'tap',
columnIndex: 0
}, {
time: 58653,
type: 'tap',
columnIndex: 0
}, {
time: 59048,
type: 'tap',
columnIndex: 0
}, {
time: 59478,
type: 'tap',
columnIndex: 0
}, {
time: 59901,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 60664,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 61341,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 62109,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 62735,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 63171,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 63933,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 64699,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 65547,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 66498,
type: 'tap',
columnIndex: 0
}, {
time: 66916,
type: 'tap',
columnIndex: 0
}, {
time: 67356,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 67724,
type: 'tap',
columnIndex: 0
}, {
time: 68116,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 68566,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 68786,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 69317,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 69752,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 70197,
type: 'tap',
columnIndex: 1
}, {
time: 70617,
type: 'tap',
columnIndex: 2
}, {
time: 71029,
type: 'tap',
columnIndex: 1
}, {
time: 71434,
type: 'tap',
columnIndex: 0
}, {
time: 71872,
type: 'tap',
columnIndex: 1
}, {
time: 72266,
type: 'tap',
columnIndex: 2
}, {
time: 72726,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 72926,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 73509,
type: 'tap',
columnIndex: 2
}, {
time: 73921,
type: 'tap',
columnIndex: 1
}, {
time: 74386,
type: 'tap',
columnIndex: 0
}, {
time: 74791,
type: 'tap',
columnIndex: 1
}, {
time: 75186,
type: 'tap',
columnIndex: 2
}, {
time: 75436,
type: 'tap',
columnIndex: 1
}, {
time: 75921,
type: 'tap',
columnIndex: 0
}, {
time: 76148,
type: 'tap',
columnIndex: 1
}, {
time: 76515,
type: 'tap',
columnIndex: 2
}, {
time: 76901,
type: 'tap',
columnIndex: 1
}, {
time: 77296,
type: 'tap',
columnIndex: 0
}, {
time: 77667,
type: 'tap',
columnIndex: 1
}, {
time: 78067,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 78791,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 79710,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 80146,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 93170,
type: 'tap',
columnIndex: 0
}, {
time: 93789,
type: 'tap',
columnIndex: 1
}, {
time: 94644,
type: 'tap',
columnIndex: 2
}, {
time: 95509,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 96267,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 97120,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 97981,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 98838,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 99700,
type: 'tap',
columnIndex: 2
}, {
time: 100508,
type: 'tap',
columnIndex: 2
}, {
time: 101316,
type: 'tap',
columnIndex: 2
}, {
time: 102092,
type: 'tap',
columnIndex: 1
}, {
time: 102887,
type: 'tap',
columnIndex: 0
}, {
time: 103750,
type: 'tap',
columnIndex: 0
}, {
time: 104539,
type: 'tap',
columnIndex: 1
}, {
time: 105371,
type: 'tap',
columnIndex: 2
}, {
time: 106190,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 107876,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 108765,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 109585,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 111196,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 112020,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 112817,
type: 'hold',
columnIndex: 0,
duration: 1225
}, {
time: 114439,
type: 'hold',
columnIndex: 1,
duration: 1476
}, {
time: 116176,
type: 'hold',
columnIndex: 0,
duration: 1421
}, {
time: 117777,
type: 'hold',
columnIndex: 1,
duration: 783
}, {
time: 118605,
type: 'hold',
columnIndex: 2,
duration: 706
}, {
time: 119484,
type: 'tap',
columnIndex: 0
}, {
time: 119947,
type: 'tap',
columnIndex: 0
}, {
time: 120328,
type: 'tap',
columnIndex: 0
}, {
time: 120773,
type: 'tap',
columnIndex: 0
}, {
time: 121165,
type: 'tap',
columnIndex: 0
}, {
time: 121548,
type: 'tap',
columnIndex: 0
}, {
time: 121952,
type: 'tap',
columnIndex: 0
}, {
time: 122362,
type: 'tap',
columnIndex: 0
}, {
time: 122735,
type: 'tap',
columnIndex: 2
}, {
time: 123201,
type: 'tap',
columnIndex: 2
}, {
time: 123612,
type: 'tap',
columnIndex: 2
}, {
time: 124006,
type: 'tap',
columnIndex: 2
}, {
time: 124462,
type: 'tap',
columnIndex: 2
}, {
time: 124853,
type: 'tap',
columnIndex: 2
}, {
time: 125279,
type: 'tap',
columnIndex: 2
}, {
time: 125663,
type: 'tap',
columnIndex: 2
}, {
time: 126092,
type: 'tap',
columnIndex: 1
}, {
time: 126504,
type: 'tap',
columnIndex: 1
}, {
time: 126917,
type: 'tap',
columnIndex: 1
}, {
time: 127336,
type: 'tap',
columnIndex: 1
}, {
time: 127760,
type: 'tap',
columnIndex: 1
}, {
time: 128158,
type: 'tap',
columnIndex: 1
}, {
time: 128556,
type: 'tap',
columnIndex: 1
}, {
time: 129002,
type: 'tap',
columnIndex: 1
}, {
time: 129394,
type: 'tap',
columnIndex: 0
}, {
time: 129822,
type: 'tap',
columnIndex: 0
}, {
time: 130235,
type: 'tap',
columnIndex: 1
}, {
time: 130659,
type: 'tap',
columnIndex: 1
}, {
time: 131059,
type: 'tap',
columnIndex: 2
}, {
time: 131487,
type: 'tap',
columnIndex: 2
}, {
time: 131907,
type: 'tap',
columnIndex: 2
}, {
time: 132335,
type: 'tap',
columnIndex: 2
}, {
time: 135940,
type: 'tap',
columnIndex: 0
}, {
time: 136089,
type: 'tap',
columnIndex: 1
}, {
time: 136436,
type: 'tap',
columnIndex: 1
}, {
time: 136826,
type: 'tap',
columnIndex: 2
}, {
time: 137228,
type: 'tap',
columnIndex: 1
}, {
time: 137649,
type: 'tap',
columnIndex: 0
}, {
time: 138072,
type: 'tap',
columnIndex: 1
}, {
time: 138469,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 138920,
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
time: 139330,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 139777,
type: 'tap',
columnIndex: 0
}, {
time: 140146,
type: 'tap',
columnIndex: 1
}, {
time: 140568,
type: 'tap',
columnIndex: 2
}, {
time: 140989,
type: 'tap',
columnIndex: 1
}, {
time: 141345,
type: 'tap',
columnIndex: 0
}, {
time: 141796,
type: 'tap',
columnIndex: 1
}, {
time: 142211,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 142596,
type: 'swipe',
columnIndex: 1,
swipeDir: 'down'
}, {
time: 143062,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 143478,
type: 'tap',
columnIndex: 2
}, {
time: 143919,
type: 'tap',
columnIndex: 1
}, {
time: 144312,
type: 'tap',
columnIndex: 0
}, {
time: 144715,
type: 'tap',
columnIndex: 1
}, {
time: 145134,
type: 'tap',
columnIndex: 2
}, {
time: 145507,
type: 'tap',
columnIndex: 0
}, {
time: 145915,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 146294,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 146747,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 147148,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 147576,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 148371,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 149212,
type: 'tap',
columnIndex: 0
}]
},
"DJPepe_Track": {
musicAsset: 'djpepe',
bossAssetKey: 'boss_intro_graphic_boss8',
config: {
playerMaxHP: 10,
bossMaxHP: 350
},
rawRhythmMap: [{
time: 10000,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 10531,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 11059,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 11497,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 11969,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 12429,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 12850,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 13294,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 13794,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 14227,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 14663,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 15126,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 15592,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 16040,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 16467,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 16906,
type: 'tap',
columnIndex: 2
}, {
time: 17809,
type: 'tap',
columnIndex: 1
}, {
time: 18673,
type: 'tap',
columnIndex: 0
}, {
time: 19593,
type: 'tap',
columnIndex: 2
}, {
time: 20561,
type: 'tap',
columnIndex: 1
}, {
time: 21448,
type: 'tap',
columnIndex: 0
}, {
time: 22307,
type: 'tap',
columnIndex: 0
}, {
time: 23234,
type: 'tap',
columnIndex: 1
}, {
time: 24128,
type: 'tap',
columnIndex: 0
}, {
time: 24593,
type: 'tap',
columnIndex: 1
}, {
time: 25055,
type: 'tap',
columnIndex: 0
}, {
time: 25503,
type: 'tap',
columnIndex: 1
}, {
time: 25963,
type: 'tap',
columnIndex: 2
}, {
time: 26396,
type: 'tap',
columnIndex: 1
}, {
time: 26848,
type: 'tap',
columnIndex: 2
}, {
time: 27298,
type: 'tap',
columnIndex: 1
}, {
time: 27761,
type: 'tap',
columnIndex: 0
}, {
time: 28220,
type: 'tap',
columnIndex: 1
}, {
time: 28651,
type: 'tap',
columnIndex: 0
}, {
time: 29141,
type: 'tap',
columnIndex: 1
}, {
time: 29558,
type: 'tap',
columnIndex: 0
}, {
time: 30008,
type: 'tap',
columnIndex: 2
}, {
time: 30443,
type: 'tap',
columnIndex: 0
}, {
time: 30927,
type: 'tap',
columnIndex: 2
}, {
time: 31352,
type: 'tap',
columnIndex: 0
}, {
time: 31761,
type: 'tap',
columnIndex: 1
}, {
time: 32220,
type: 'tap',
columnIndex: 0
}, {
time: 32464,
type: 'tap',
columnIndex: 1
}, {
time: 32685,
type: 'tap',
columnIndex: 0
}, {
time: 33127,
type: 'tap',
columnIndex: 1
}, {
time: 33354,
type: 'tap',
columnIndex: 0
}, {
time: 33594,
type: 'tap',
columnIndex: 1
}, {
time: 34052,
type: 'tap',
columnIndex: 0
}, {
time: 34258,
type: 'tap',
columnIndex: 1
}, {
time: 34474,
type: 'tap',
columnIndex: 0
}, {
time: 34959,
type: 'tap',
columnIndex: 0
}, {
time: 35166,
type: 'tap',
columnIndex: 1
}, {
time: 35381,
type: 'tap',
columnIndex: 0
}, {
time: 35791,
type: 'tap',
columnIndex: 0
}, {
time: 36050,
type: 'tap',
columnIndex: 1
}, {
time: 36284,
type: 'tap',
columnIndex: 0
}, {
time: 36766,
type: 'tap',
columnIndex: 1
}, {
time: 37191,
type: 'tap',
columnIndex: 2
}, {
time: 37644,
type: 'tap',
columnIndex: 1
}, {
time: 37872,
type: 'tap',
columnIndex: 0
}, {
time: 38115,
type: 'tap',
columnIndex: 1
}, {
time: 38547,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 39020,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 39484,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 39919,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 40359,
type: 'tap',
columnIndex: 0
}, {
time: 40825,
type: 'tap',
columnIndex: 1
}, {
time: 41282,
type: 'tap',
columnIndex: 2
}, {
time: 41717,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 42166,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 42613,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 43066,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 43486,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 43960,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 44431,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 44914,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 45363,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 45777,
type: 'tap',
columnIndex: 1
}, {
time: 46014,
type: 'tap',
columnIndex: 2
}, {
time: 46484,
type: 'tap',
columnIndex: 1
}, {
time: 46687,
type: 'tap',
columnIndex: 0
}, {
time: 47171,
type: 'tap',
columnIndex: 0
}, {
time: 47639,
type: 'tap',
columnIndex: 1
}, {
time: 47991,
type: 'tap',
columnIndex: 2
}, {
time: 48499,
type: 'tap',
columnIndex: 1
}, {
time: 48939,
type: 'tap',
columnIndex: 0
}, {
time: 49380,
type: 'tap',
columnIndex: 0
}, {
time: 49836,
type: 'tap',
columnIndex: 1
}, {
time: 50274,
type: 'tap',
columnIndex: 0
}, {
time: 50753,
type: 'tap',
columnIndex: 1
}, {
time: 51188,
type: 'tap',
columnIndex: 2
}, {
time: 53018,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 53464,
type: 'tap',
columnIndex: 0
}, {
time: 53888,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 54321,
type: 'tap',
columnIndex: 0
}, {
time: 54764,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 55229,
type: 'tap',
columnIndex: 0
}, {
time: 55679,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 56144,
type: 'tap',
columnIndex: 0
}, {
time: 56574,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 57046,
type: 'tap',
columnIndex: 0
}, {
time: 57491,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 57930,
type: 'tap',
columnIndex: 0
}, {
time: 58432,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 58860,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 59309,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 59761,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 60227,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 60661,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 61140,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 61545,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 62017,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 62446,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 62917,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 63358,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 63830,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 64273,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
}, {
time: 64721,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 65194,
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
time: 65617,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 66078,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 66517,
type: 'tap',
columnIndex: 0
}, {
time: 66980,
type: 'tap',
columnIndex: 0
}, {
time: 67424,
type: 'tap',
columnIndex: 1
}, {
time: 70562,
type: 'tap',
columnIndex: 2
}, {
time: 71501,
type: 'tap',
columnIndex: 0
}, {
time: 72424,
type: 'tap',
columnIndex: 2
}, {
time: 73366,
type: 'tap',
columnIndex: 0
}, {
time: 74192,
type: 'tap',
columnIndex: 2
}, {
time: 75140,
type: 'tap',
columnIndex: 0
}, {
time: 76031,
type: 'tap',
columnIndex: 2
}, {
time: 76925,
type: 'tap',
columnIndex: 0
}, {
time: 77822,
type: 'tap',
columnIndex: 2
}, {
time: 78756,
type: 'tap',
columnIndex: 0
}, {
time: 79614,
type: 'tap',
columnIndex: 2
}, {
time: 80521,
type: 'tap',
columnIndex: 0
}, {
time: 81401,
type: 'tap',
columnIndex: 2
}, {
time: 83665,
type: 'tap',
columnIndex: 1
}, {
time: 84095,
type: 'tap',
columnIndex: 2
}, {
time: 84600,
type: 'tap',
columnIndex: 1
}, {
time: 85081,
type: 'tap',
columnIndex: 2
}, {
time: 85556,
type: 'tap',
columnIndex: 0
}, {
time: 85989,
type: 'tap',
columnIndex: 1
}, {
time: 86498,
type: 'tap',
columnIndex: 2
}, {
time: 86875,
type: 'tap',
columnIndex: 1
}, {
time: 87325,
type: 'tap',
columnIndex: 0
}, {
time: 87731,
type: 'tap',
columnIndex: 2
}, {
time: 88197,
type: 'tap',
columnIndex: 0
}, {
time: 88671,
type: 'tap',
columnIndex: 1
}, {
time: 89061,
type: 'tap',
columnIndex: 2
}, {
time: 89490,
type: 'tap',
columnIndex: 1
}, {
time: 89942,
type: 'tap',
columnIndex: 0
}, {
time: 90367,
type: 'tap',
columnIndex: 1
}, {
time: 90875,
type: 'tap',
columnIndex: 2
}, {
time: 91342,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 97934,
type: 'tap',
columnIndex: 1
}, {
time: 98115,
type: 'tap',
columnIndex: 2
}, {
time: 98625,
type: 'tap',
columnIndex: 1
}, {
time: 98847,
type: 'tap',
columnIndex: 2
}, {
time: 99511,
type: 'tap',
columnIndex: 0
}, {
time: 99935,
type: 'tap',
columnIndex: 1
}, {
time: 100356,
type: 'tap',
columnIndex: 2
}, {
time: 100827,
type: 'tap',
columnIndex: 1
}, {
time: 101268,
type: 'tap',
columnIndex: 0
}, {
time: 101708,
type: 'tap',
columnIndex: 1
}, {
time: 102162,
type: 'tap',
columnIndex: 2
}, {
time: 102599,
type: 'tap',
columnIndex: 1
}, {
time: 103072,
type: 'tap',
columnIndex: 2
}, {
time: 103531,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 103994,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 104466,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 104880,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 105304,
type: 'tap',
columnIndex: 0
}, {
time: 105530,
type: 'tap',
columnIndex: 1
}, {
time: 106018,
type: 'tap',
columnIndex: 0
}, {
time: 106254,
type: 'tap',
columnIndex: 1
}, {
time: 106705,
type: 'tap',
columnIndex: 0
}, {
time: 107132,
type: 'tap',
columnIndex: 1
}, {
time: 107571,
type: 'tap',
columnIndex: 2
}, {
time: 108044,
type: 'tap',
columnIndex: 1
}, {
time: 108460,
type: 'tap',
columnIndex: 0
}, {
time: 108907,
type: 'tap',
columnIndex: 1
}, {
time: 109357,
type: 'tap',
columnIndex: 2
}, {
time: 109842,
type: 'tap',
columnIndex: 1
}, {
time: 110295,
type: 'tap',
columnIndex: 0
}, {
time: 110741,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 112536,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 113006,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 113450,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 113893,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 114350,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 114796,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 115240,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 115697,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 116142,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 116599,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 117052,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 117495,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 117942,
type: 'tap',
columnIndex: 0
}, {
time: 118393,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 118866,
type: 'tap',
columnIndex: 0
}, {
time: 119352,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 119778,
type: 'tap',
columnIndex: 1
}, {
time: 120229,
type: 'tap',
columnIndex: 2
}, {
time: 120730,
type: 'tap',
columnIndex: 1
}, {
time: 121155,
type: 'tap',
columnIndex: 2
}, {
time: 121587,
type: 'tap',
columnIndex: 1
}, {
time: 122018,
type: 'tap',
columnIndex: 0
}, {
time: 122487,
type: 'tap',
columnIndex: 1
}, {
time: 122912,
type: 'tap',
columnIndex: 2
}, {
time: 123373,
type: 'tap',
columnIndex: 1
}, {
time: 123855,
type: 'tap',
columnIndex: 0
}, {
time: 124270,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 124721,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 125167,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 126969,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 127453,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 127869,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 128352,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 128783,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 129235,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 129718,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 130106,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 130578,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 131040,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 131486,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 131909,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 132332,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 132818,
type: 'tap',
columnIndex: 1
}, {
time: 133292,
type: 'tap',
columnIndex: 2
}, {
time: 133764,
type: 'tap',
columnIndex: 1
}, {
time: 134221,
type: 'tap',
columnIndex: 0
}, {
time: 134652,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 135093,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 135522,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 135965,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 136419,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 136881,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
}, {
time: 137324,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 137785,
type: 'swipe',
columnIndex: 0,
swipeDir: 'down'
}, {
time: 138261,
type: 'tap',
columnIndex: 2
}, {
time: 138713,
type: 'tap',
columnIndex: 1
}, {
time: 139167,
type: 'tap',
columnIndex: 0
}, {
time: 139599,
type: 'tap',
columnIndex: 1
}]
},
"OrctaveBossTrack": {
musicAsset: "Orctave",
// Upewnij się, że masz asset muzyczny o tym kluczu
bossAssetKey: 'Boss1_Asset',
// Asset dla pierwszego bossa
config: {
playerMaxHP: 10,
bossMaxHP: 200
},
rawRhythmMap: [{
time: 8596,
type: 'tap',
columnIndex: 0
}, {
time: 8795,
type: 'tap',
columnIndex: 1
}, {
time: 9117,
type: 'tap',
columnIndex: 2
}, {
time: 9832,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 10536,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 11245,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 11888,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 12628,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 13308,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 13986,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 14696,
type: 'tap',
columnIndex: 2
}, {
time: 15456,
type: 'tap',
columnIndex: 2
}, {
time: 16140,
type: 'tap',
columnIndex: 1
}, {
time: 16863,
type: 'tap',
columnIndex: 1
}, {
time: 17547,
type: 'tap',
columnIndex: 0
}, {
time: 18275,
type: 'tap',
columnIndex: 0
}, {
time: 18955,
type: 'tap',
columnIndex: 0
}, {
time: 19670,
type: 'tap',
columnIndex: 0
}, {
time: 20333,
type: 'tap',
columnIndex: 1
}, {
time: 20740,
type: 'tap',
columnIndex: 2
}, {
time: 21063,
type: 'tap',
columnIndex: 1
}, {
time: 21411,
type: 'tap',
columnIndex: 0
}, {
time: 21742,
type: 'tap',
columnIndex: 1
}, {
time: 22110,
type: 'tap',
columnIndex: 2
}, {
time: 22463,
type: 'tap',
columnIndex: 1
}, {
time: 22797,
type: 'tap',
columnIndex: 0
}, {
time: 23336,
type: 'tap',
columnIndex: 2
}, {
time: 26163,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 26737,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 27351,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 27764,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 28116,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 28827,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 29546,
type: 'swipe',
columnIndex: 0,
swipeDir: 'left'
}, {
time: 30102,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 30534,
type: 'swipe',
columnIndex: 1,
swipeDir: 'right'
}, {
time: 30931,
type: 'swipe',
columnIndex: 0,
swipeDir: 'left'
}, {
time: 31677,
type: 'tap',
columnIndex: 2
}, {
time: 32392,
type: 'tap',
columnIndex: 1
}, {
time: 32989,
type: 'tap',
columnIndex: 2
}, {
time: 33386,
type: 'tap',
columnIndex: 2
}, {
time: 33781,
type: 'tap',
columnIndex: 1
}, {
time: 34568,
type: 'tap',
columnIndex: 2
}, {
time: 35234,
type: 'tap',
columnIndex: 1
}, {
time: 35749,
type: 'tap',
columnIndex: 2
}, {
time: 36182,
type: 'tap',
columnIndex: 2
}, {
time: 36583,
type: 'tap',
columnIndex: 0
}, {
time: 37302,
type: 'tap',
columnIndex: 0
}, {
time: 37681,
type: 'tap',
columnIndex: 1
}, {
time: 38033,
type: 'tap',
columnIndex: 2
}, {
time: 38354,
type: 'tap',
columnIndex: 2
}, {
time: 38721,
type: 'tap',
columnIndex: 1
}, {
time: 39067,
type: 'tap',
columnIndex: 0
}, {
time: 39471,
type: 'tap',
columnIndex: 1
}, {
time: 39821,
type: 'tap',
columnIndex: 2
}, {
time: 40164,
type: 'tap',
columnIndex: 1
}, {
time: 40488,
type: 'tap',
columnIndex: 0
}, {
time: 40861,
type: 'tap',
columnIndex: 0
}, {
time: 41250,
type: 'tap',
columnIndex: 1
}, {
time: 41609,
type: 'tap',
columnIndex: 2
}, {
time: 41946,
type: 'tap',
columnIndex: 1
}, {
time: 42290,
type: 'tap',
columnIndex: 0
}, {
time: 42643,
type: 'tap',
columnIndex: 2
}, {
time: 43068,
type: 'tap',
columnIndex: 1
}, {
time: 43379,
type: 'tap',
columnIndex: 2
}, {
time: 43726,
type: 'tap',
columnIndex: 1
}, {
time: 44078,
type: 'tap',
columnIndex: 2
}, {
time: 44414,
type: 'tap',
columnIndex: 1
}, {
time: 44728,
type: 'tap',
columnIndex: 2
}, {
time: 45115,
type: 'tap',
columnIndex: 1
}, {
time: 45475,
type: 'tap',
columnIndex: 2
}, {
time: 45809,
type: 'tap',
columnIndex: 0
}, {
time: 46199,
type: 'tap',
columnIndex: 1
}, {
time: 46521,
type: 'tap',
columnIndex: 2
}, {
time: 46855,
type: 'tap',
columnIndex: 1
}, {
time: 47190,
type: 'tap',
columnIndex: 0
}, {
time: 47535,
type: 'tap',
columnIndex: 2
}, {
time: 47874,
type: 'tap',
columnIndex: 1
}, {
time: 48252,
type: 'tap',
columnIndex: 2
}, {
time: 51448,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 52112,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 52853,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 53536,
type: 'swipe',
columnIndex: 2,
swipeDir: 'left'
}, {
time: 54251,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 54964,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 55618,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 56339,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 57058,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 57799,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 58512,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 59170,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 59911,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 60668,
type: 'tap',
columnIndex: 2
}, {
time: 61334,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 62084,
type: 'tap',
columnIndex: 2
}, {
time: 62744,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 63445,
type: 'tap',
columnIndex: 2
}, {
time: 64134,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 64827,
type: 'tap',
columnIndex: 1
}, {
time: 65532,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 66199,
type: 'tap',
columnIndex: 1
}, {
time: 66921,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 67679,
type: 'tap',
columnIndex: 1
}, {
time: 68353,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 69005,
type: 'tap',
columnIndex: 0
}, {
time: 69772,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 70457,
type: 'tap',
columnIndex: 0
}, {
time: 71178,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 71892,
type: 'swipe',
columnIndex: 2,
swipeDir: 'right'
}, {
time: 72585,
type: 'swipe',
columnIndex: 1,
swipeDir: 'left'
}, {
time: 73287,
type: 'swipe',
columnIndex: 0,
swipeDir: 'right'
}, {
time: 74094,
type: 'tap',
columnIndex: 2
}, {
time: 75031,
type: 'tap',
columnIndex: 1
}, {
time: 75469,
type: 'tap',
columnIndex: 2
}, {
time: 75831,
type: 'tap',
columnIndex: 2
}, {
time: 76181,
type: 'tap',
columnIndex: 1
}, {
time: 76909,
type: 'tap',
columnIndex: 0
}, {
time: 77641,
type: 'tap',
columnIndex: 1
}, {
time: 78208,
type: 'tap',
columnIndex: 2
}, {
time: 78675,
type: 'tap',
columnIndex: 2
}, {
time: 79001,
type: 'tap',
columnIndex: 1
}, {
time: 79743,
type: 'tap',
columnIndex: 0
}, {
time: 80401,
type: 'tap',
columnIndex: 1
}, {
time: 80982,
type: 'tap',
columnIndex: 0
}, {
time: 81387,
type: 'tap',
columnIndex: 0
}, {
time: 81769,
type: 'tap',
columnIndex: 1
}, {
time: 82537,
type: 'tap',
columnIndex: 2
}, {
time: 83216,
type: 'tap',
columnIndex: 1
}, {
time: 83789,
type: 'tap',
columnIndex: 0
}, {
time: 84229,
type: 'tap',
columnIndex: 0
}, {
time: 84566,
type: 'tap',
columnIndex: 0
}, {
time: 84923,
type: 'tap',
columnIndex: 0
}, {
time: 85105,
type: 'tap',
columnIndex: 0
}, {
time: 85305,
type: 'tap',
columnIndex: 1
}]
}
};
// Initialize and add gameUIContainer to the game scene
gameUIContainer = new Container();
game.addChild(gameUIContainer);
// Function to process raw rhythm map data (remains unchanged, ensure it's here)
function processRawRhythmMap(rawMapData, songKeyForLogging) {
console.log("Processing raw map for: " + songKeyForLogging + " with " + rawMapData.length + " initial notes.");
var processedMap = [];
var tempMap = [];
for (var k = 0; k < rawMapData.length; k++) {
var originalNote = rawMapData[k];
var copiedNote = {};
for (var key in originalNote) {
if (originalNote.hasOwnProperty(key)) {
copiedNote[key] = originalNote[key];
}
}
tempMap.push(copiedNote);
}
for (var i = 0; i < tempMap.length; i++) {
var note = tempMap[i];
if (note.type === 'swipe' && note.swipeDir) {
var dir = note.swipeDir.toLowerCase();
if (dir.includes('right')) {
note.swipeDir = 'right';
} else if (dir.includes('left')) {
note.swipeDir = 'left';
} else if (dir.includes('up')) {
note.swipeDir = 'up';
} else if (dir.includes('down')) {
note.swipeDir = 'down';
}
}
}
var timeGroupedNotes = {};
tempMap.forEach(function (note) {
if (!timeGroupedNotes[note.time]) {
timeGroupedNotes[note.time] = [];
}
timeGroupedNotes[note.time].push(note);
});
var finalMapNotes = [];
var sortedTimes = Object.keys(timeGroupedNotes).map(Number).sort(function (a, b) {
return a - b;
});
for (var tIdx = 0; tIdx < sortedTimes.length; tIdx++) {
var time = sortedTimes[tIdx];
var notesAtThisTime = timeGroupedNotes[time];
var notesToKeepAtThisTime = [];
var processedForWiderSwipeConversion = [];
var colsWithVerticalSwipes = [null, null, null, null];
notesAtThisTime.forEach(function (note) {
if (note.type === 'swipe' && (note.swipeDir === 'up' || note.swipeDir === 'down')) {
if (note.columnIndex >= 0 && note.columnIndex < NUM_COLUMNS) {
var alreadyConverted = false;
for (var convIdx = 0; convIdx < processedForWiderSwipeConversion.length; convIdx++) {
if (processedForWiderSwipeConversion[convIdx].originalTime === note.time && processedForWiderSwipeConversion[convIdx].originalColumn === note.columnIndex) {
alreadyConverted = true;
break;
}
}
if (!alreadyConverted) {
colsWithVerticalSwipes[note.columnIndex] = note.swipeDir;
}
}
}
});
for (var c = 0; c < NUM_COLUMNS - 1; c++) {
if (colsWithVerticalSwipes[c] && colsWithVerticalSwipes[c + 1] && colsWithVerticalSwipes[c] === colsWithVerticalSwipes[c + 1]) {
var randomHorizontalDir = Math.random() < 0.5 ? 'left' : 'right';
var pairCenterX = (columnCenterXs[c] + columnCenterXs[c + 1]) / 2;
notesToKeepAtThisTime.push({
time: time,
type: 'swipe',
swipeDir: randomHorizontalDir,
partOfWiderSwipe: 'leftHalf',
widerSwipePairCenterX: pairCenterX,
originalColumnHint: c
});
notesToKeepAtThisTime.push({
time: time,
type: 'swipe',
swipeDir: randomHorizontalDir,
partOfWiderSwipe: 'rightHalf',
widerSwipePairCenterX: pairCenterX,
originalColumnHint: c + 1
});
processedForWiderSwipeConversion.push({
originalTime: time,
originalColumn: c
});
processedForWiderSwipeConversion.push({
originalTime: time,
originalColumn: c + 1
});
colsWithVerticalSwipes[c] = null;
colsWithVerticalSwipes[c + 1] = null;
c++;
}
}
notesAtThisTime.forEach(function (note) {
var wasConverted = false;
for (var convIdx = 0; convIdx < processedForWiderSwipeConversion.length; convIdx++) {
if (processedForWiderSwipeConversion[convIdx].originalTime === note.time && processedForWiderSwipeConversion[convIdx].originalColumn === note.columnIndex && (note.swipeDir === 'up' || note.swipeDir === 'down')) {
wasConverted = true;
break;
}
}
if (!wasConverted) {
notesToKeepAtThisTime.push(note);
}
});
var horizontalWiderSwipePairs = {};
var notesForFinalProcessing = [];
var uniqueNotesAtThisTime = [];
var seenNotesKeysAtThisTime = {};
notesToKeepAtThisTime.forEach(function (note) {
var key = "" + note.type + "_" + (note.columnIndex !== undefined ? note.columnIndex : note.partOfWiderSwipe ? note.widerSwipePairCenterX + note.partOfWiderSwipe : '') + "_" + (note.swipeDir || '');
if (!seenNotesKeysAtThisTime[key]) {
uniqueNotesAtThisTime.push(note);
seenNotesKeysAtThisTime[key] = true;
}
});
uniqueNotesAtThisTime.sort(function (a, b) {
var valA = a.originalColumnHint !== undefined ? a.originalColumnHint : a.columnIndex !== undefined ? a.columnIndex : a.widerSwipePairCenterX || 0;
var valB = b.originalColumnHint !== undefined ? b.originalColumnHint : b.columnIndex !== undefined ? b.columnIndex : b.widerSwipePairCenterX || 0;
return valA - valB;
});
for (var nIdx = 0; nIdx < uniqueNotesAtThisTime.length; nIdx++) {
var note = uniqueNotesAtThisTime[nIdx];
if (note.partOfWiderSwipe) {
notesForFinalProcessing.push(note);
continue;
}
var potentialPartner = null;
if (nIdx + 1 < uniqueNotesAtThisTime.length) {
potentialPartner = uniqueNotesAtThisTime[nIdx + 1];
}
if (note.type === 'swipe' && (note.swipeDir === 'left' || note.swipeDir === 'right') && potentialPartner && potentialPartner.type === 'swipe' && potentialPartner.time === note.time && potentialPartner.swipeDir === note.swipeDir && potentialPartner.columnIndex === note.columnIndex + 1) {
var pairCenterX = (columnCenterXs[note.columnIndex] + columnCenterXs[potentialPartner.columnIndex]) / 2;
notesForFinalProcessing.push({
time: note.time,
type: 'swipe',
swipeDir: note.swipeDir,
partOfWiderSwipe: 'leftHalf',
widerSwipePairCenterX: pairCenterX,
originalColumnHint: note.columnIndex
});
notesForFinalProcessing.push({
time: potentialPartner.time,
type: 'swipe',
swipeDir: potentialPartner.swipeDir,
partOfWiderSwipe: 'rightHalf',
widerSwipePairCenterX: pairCenterX,
originalColumnHint: potentialPartner.columnIndex
});
nIdx++;
} else {
notesForFinalProcessing.push(note);
}
}
finalMapNotes.push.apply(finalMapNotes, notesForFinalProcessing);
}
var uniqueNotesOverall = [];
var seenNotesOverall = {};
finalMapNotes.sort(function (a, b) {
return a.time - b.time;
});
finalMapNotes.forEach(function (note) {
var cX;
var keyPartForColumn;
if (note.partOfWiderSwipe) {
cX = note.widerSwipePairCenterX + (note.partOfWiderSwipe === 'leftHalf' ? -(SWIPE_NOTE_WIDTH / 2) : SWIPE_NOTE_WIDTH / 2);
keyPartForColumn = "pC" + note.widerSwipePairCenterX + "h" + (note.partOfWiderSwipe === 'leftHalf' ? 'L' : 'R');
} else if (note.columnIndex !== undefined) {
cX = columnCenterXs[note.columnIndex];
keyPartForColumn = "c" + note.columnIndex;
} else {
cX = gameScreenWidth / 2;
keyPartForColumn = "cX" + cX;
}
var key = "" + note.time + "_" + note.type + "_" + keyPartForColumn + "_" + (note.swipeDir || '');
if (!seenNotesOverall[key]) {
uniqueNotesOverall.push(note);
seenNotesOverall[key] = true;
} else {
// console.log("Filtered final duplicate note: " + key);
}
});
console.log("Processed map for: " + songKeyForLogging + " FINALLY contains " + uniqueNotesOverall.length + " notes.");
return uniqueNotesOverall;
}
var hpBarsInitialized = false;
var scoreTxt = new Text2('Score: 0', {
size: 100,
fill: 0xFFFFFF,
alpha: 1
});
scoreTxt.anchor.set(1, 0); // Anchor center-top
scoreTxt.x = gameScreenWidth / 1;
scoreTxt.y = 20; // Position from the top of its container (gameUIContainer)
gameUIContainer.addChild(scoreTxt);
console.log("Restored scoreTxt: X=" + scoreTxt.x + " Y=" + scoreTxt.y + " Visible:" + scoreTxt.visible + " Parent: gameUIContainer");
var comboTxt = new Text2('Combo: 0', {
size: 50,
// Możesz dostosować rozmiar tekstu combo
fill: 0xFFFF00,
// Żółty kolor
alpha: 0.5
});
comboTxt.anchor.set(0, 0.5);
comboTxt.x = 100;
comboTxt.y = 1000;
comboTxt.rotation = -0.26;
gameUIContainer.addChild(comboTxt);
console.log("ComboTxt positioned: X=" + comboTxt.x + " Y=" + comboTxt.y + " Visible:" + comboTxt.visible + " Parent: gameUIContainer");
var hitZoneY = 1800;
var hitZoneVisualWidth = playfieldWidth;
function rectsIntersect(r1, r2) {
return !(r2.x > r1.x + r1.width || r2.x + r2.width < r1.x || r2.y > r1.y + r1.height || r2.y + r2.height < r1.y);
}
function resetGameState() {
notes.forEach(function (n) {
if (n && n.parent) {
n.destroy();
}
});
notes = [];
nextNoteIdx = 0;
score = 0;
combo = 0;
maxCombo = 0;
swipeStart = null;
inputLocked = false;
scoreTxt.setText('Score: 0');
comboTxt.setText('Combo: 0');
gameOverFlag = false;
playerCurrentHP = playerMaxHP;
bossCurrentHP = bossMaxHP;
hpBarsInitialized = false;
if (leftEye && leftEye.parent) {
leftEye.destroy();
leftEye = null;
}
if (rightEye && rightEye.parent) {
rightEye.destroy();
rightEye = null;
}
if (eyesBlinkTimer) {
LK.clearTimeout(eyesBlinkTimer);
eyesBlinkTimer = null;
}
if (isShieldActive) {
isShieldActive = false;
}
if (shieldTimerDisplayContainer) {
shieldTimerDisplayContainer.visible = false;
}
if (isPrecisionBuffActive) {
isPrecisionBuffActive = false;
if (originalHitWindowPerfect > 0) {
hitWindowPerfect = originalHitWindowPerfect;
}
if (originalHitWindowGood > 0) {
hitWindowGood = originalHitWindowGood;
}
}
if (precisionBuffTimerDisplayContainer) {
precisionBuffTimerDisplayContainer.visible = false;
}
if (hpBarsInitialized && playerHpBarFill && bossHpBarFill) {
updatePlayerHpDisplay();
updateBossHpDisplay();
}
if (endlessTimerTxt) {
endlessTimerTxt.visible = false;
}
endlessStartTime = 0;
endlessMissCount = 0;
ambientParticles.forEach(function (p) {
if (p && p.visual && p.visual.parent) {
p.visual.destroy();
}
});
ambientParticles = [];
}
function loadSong(songKey) {
LK.stopMusic();
if (songSummaryContainer && songSummaryContainer.parent) {
songSummaryContainer.destroy();
songSummaryContainer = null;
}
if (gameUIContainer) {
gameUIContainer.visible = true;
}
setupGameplayElements();
lastPlayedSongKeyForRestart = songKey;
bossWasDefeatedThisSong = false;
var songData;
if (isTutorialMode && songKey === "TutorialTrack") {
songData = tutorialSongData;
} else {
songData = allSongData[songKey];
}
if (!songData) {
console.log("Error: Song data not found for key: " + songKey);
if (allSongData["defaultTestTrack"]) {
songData = allSongData["defaultTestTrack"];
console.log("Fallback to defaultTestTrack");
} else {
currentActiveRhythmMap = [];
console.log("No fallback song data found.");
return;
}
}
currentFightingBossId = null;
if (!isTutorialMode) {
for (var i = 0; i < allBossData.length; i++) {
if (allBossData[i].songMapKey === songKey) {
currentFightingBossId = allBossData[i].id;
if (currentFightingBossId) {
showBossIntroAnimation(currentFightingBossId);
}
break;
}
}
}
if (songData.config) {
playerMaxHP = songData.config.playerMaxHP || 10;
bossMaxHP = songData.config.bossMaxHP || 50;
} else {
playerMaxHP = 10;
bossMaxHP = 50;
}
resetGameState();
createPlayerHUD();
createBossHUD();
if (gameplayBackground && gameplayBackground.parent) {
gameplayBackground.destroy();
gameplayBackground = null;
}
gameplayBackground = LK.getAsset('gameplayBg', {
x: 0,
y: 0,
width: gameScreenWidth,
height: gameScreenHeight,
alpha: 0.8
});
game.addChildAt(gameplayBackground, 0);
if (gameUIContainer) {
gameUIContainer.visible = true;
}
if (isTutorialMode) {
if (scoreTxt) {
scoreTxt.visible = false;
}
if (comboTxt) {
comboTxt.visible = false;
}
}
hpBarsInitialized = false;
nextNoteIdx = 0;
if (currentBossSprite && currentBossSprite.parent) {
currentBossSprite.destroy();
currentBossSprite = null;
} else if (isTutorialMode) {
if (currentBossSprite && currentBossSprite.parent) {
currentBossSprite.destroy();
currentBossSprite = null;
}
}
if (songData.rawRhythmMap) {
currentActiveRhythmMap = processRawRhythmMap(songData.rawRhythmMap, songKey);
} else {
currentActiveRhythmMap = [];
}
gameStartTime = Date.now();
LK.playMusic(songData.musicAsset, {
loop: false
});
currentScreenState = 'gameplay';
if (!isTutorialMode) {
fadeInGameplayElements(1500);
} else {
if (staticHitFrame) {
staticHitFrame.visible = true;
}
if (staticPerfectLine) {
staticPerfectLine.visible = true;
}
}
}
function setupPowerUpDisplay() {
var smallIconSize = 110;
if (shieldTimerDisplayContainer && shieldTimerDisplayContainer.parent) {
shieldTimerDisplayContainer.destroy();
}
shieldTimerDisplayContainer = new Container();
shieldTimerDisplayContainer.x = gameScreenWidth - 120;
shieldTimerDisplayContainer.y = 180;
if (gameUIContainer) {
gameUIContainer.addChild(shieldTimerDisplayContainer);
}
smallShieldIconDisplay = LK.getAsset('shieldAsset', {
anchorX: 0.5,
anchorY: 0.5,
width: smallIconSize,
height: smallIconSize
});
shieldTimerDisplayContainer.addChild(smallShieldIconDisplay);
shieldTimerTextDisplay = new Text2("", {
size: 50,
fill: 0xFFFFFF,
anchorX: 0.5,
anchorY: 0
});
shieldTimerTextDisplay.y = smallIconSize / 2 + 5;
shieldTimerDisplayContainer.addChild(shieldTimerTextDisplay);
shieldTimerDisplayContainer.visible = false;
if (precisionBuffTimerDisplayContainer && precisionBuffTimerDisplayContainer.parent) {
precisionBuffTimerDisplayContainer.destroy();
}
precisionBuffTimerDisplayContainer = new Container();
precisionBuffTimerDisplayContainer.x = gameScreenWidth - 120;
// Umieść poniżej timera tarczy lub w innym odpowiednim miejscu
precisionBuffTimerDisplayContainer.y = shieldTimerDisplayContainer.y + smallIconSize + 40 + 10;
if (gameUIContainer) {
gameUIContainer.addChild(precisionBuffTimerDisplayContainer);
}
smallPrecisionIconDisplay = LK.getAsset('shieldAsset', {
anchorX: 0.5,
anchorY: 0.5,
width: smallIconSize,
height: smallIconSize
});
precisionBuffTimerDisplayContainer.addChild(smallPrecisionIconDisplay);
precisionBuffTimerTextDisplay = new Text2("", {
size: 35,
fill: 0xFFFFFF,
anchorX: 0.5,
anchorY: 0
});
precisionBuffTimerTextDisplay.y = smallIconSize / 2 + 5;
precisionBuffTimerDisplayContainer.addChild(precisionBuffTimerTextDisplay);
precisionBuffTimerDisplayContainer.visible = false;
console.log("Timer UIs for Shield & Precision Buff created.");
}
function updatePowerUpDisplayCounts() {
if (hpPotionCountText) {
hpPotionCountText.setText("x" + collectedPowerUps.potion);
shieldCountText.setText("x" + collectedPowerUps.shield);
swipeToTapCountText.setText("x" + collectedPowerUps.swipeToTap);
}
}
function updatePlayerHpDisplay() {
if (playerHpBarFill) {
var healthPercent = playerCurrentHP / playerMaxHP;
playerHpBarFill.width = hpBarWidth * Math.max(0, healthPercent);
}
}
function updateBossHpDisplay() {
if (bossHpBarFill) {
var healthPercent = bossCurrentHP / bossMaxHP;
bossHpBarFill.width = hpBarWidth * Math.max(0, healthPercent);
}
}
function spawnNotes() {
if (!currentActiveRhythmMap || currentActiveRhythmMap.length === 0) {
return;
}
var now = Date.now();
if (!currentActiveRhythmMap) {
return;
}
while (nextNoteIdx < currentActiveRhythmMap.length) {
var noteData = currentActiveRhythmMap[nextNoteIdx];
var noteTargetHitTime = gameStartTime + noteData.time;
if (noteTargetHitTime - noteTravelTime <= now) {
var targetCenterX;
if (noteData.partOfWiderSwipe && noteData.widerSwipePairCenterX !== undefined) {
if (noteData.partOfWiderSwipe === 'leftHalf') {
targetCenterX = noteData.widerSwipePairCenterX - SWIPE_NOTE_WIDTH / 2;
} else if (noteData.partOfWiderSwipe === 'rightHalf') {
targetCenterX = noteData.widerSwipePairCenterX + SWIPE_NOTE_WIDTH / 2;
} else {
targetCenterX = columnCenterXs[noteData.originalColumnHint !== undefined ? noteData.originalColumnHint : Math.floor(NUM_COLUMNS / 2)];
}
} else if (noteData.columnIndex !== undefined && noteData.columnIndex >= 0 && noteData.columnIndex < NUM_COLUMNS) {
targetCenterX = columnCenterXs[noteData.columnIndex];
} else {
targetCenterX = playfieldWidth / 2;
console.warn("spawnNotes - Note spawned without proper columnIndex or widerSwipe info:", noteData);
}
var isBuffNoteFromGenerator = noteData.isBuffNote || false;
var buffTypeFromGenerator = noteData.buffType || null;
if (!isTutorialMode && !isFinalBossActive && noteData.type === 'tap' && !isBuffNoteFromGenerator) {
var chance = currentScreenState === 'endlessLoopActive' ? ENDLESS_BUFF_CHANCE : BUFF_CHANCE;
if (Math.random() < chance) {
isBuffNoteFromGenerator = true;
var availableBuffs = ['potion', 'shield', 'precision'];
buffTypeFromGenerator = availableBuffs[Math.floor(Math.random() * availableBuffs.length)];
}
}
var n = new Note(noteData.type, noteData.swipeDir, noteTargetHitTime, targetCenterX, noteData.columnIndex, isBuffNoteFromGenerator, buffTypeFromGenerator, noteData.duration);
n.mapData = noteData;
if (noteData.partOfWiderSwipe) {
n.isWiderSwipePart = true;
}
notes.push(n);
game.addChild(n);
nextNoteIdx++;
} else {
break;
}
}
}
function removeOldNotes() {
var now = Date.now();
for (var i = notes.length - 1; i >= 0; i--) {
var n = notes[i];
var timeToRemoveAfterJudged = 700; // ms po targetHitTime dla ocenionych notatek
var timeToRemoveIfNotJudged = noteTravelTime / 2 + hitWindowGood + 500; // Dłuższy czas, jeśli nieoceniona, liczony od targetHitTime
if (n.judged && now > n.targetHitTime + timeToRemoveAfterJudged) {
if (n.parent) {
n.destroy();
}
notes.splice(i, 1);
} else if (!n.judged && now > n.targetHitTime + timeToRemoveIfNotJudged) {
if (n.noteType !== 'trap') {}
if (n.parent) {
n.destroy();
}
notes.splice(i, 1);
}
}
}
function findNoteAt(x, y, typeToFind) {
var now = Date.now();
var bestNote = null;
var smallestTimeDiff = hitWindowGood + 1;
for (var i = 0; i < notes.length; i++) {
var n = notes[i];
if (n.judged || n.noteType !== typeToFind && !(typeToFind === 'tap' && n.isHoldNote && !n.isBeingHeld)) {
continue;
}
var compensatedTargetTime = n.targetHitTime;
var timeDiffWithCompensation = Math.abs(now - compensatedTargetTime);
if (timeDiffWithCompensation > hitWindowGood) {
continue;
}
var originalTimeDiff = Math.abs(now - n.targetHitTime);
var targetYCenter, hitRadiusX, hitRadiusY;
var spatialBuffMultiplier = isPrecisionBuffActive ? 1.5 : 1.0;
if (n.isHoldNote) {
targetYCenter = n.y + n.yOffset - HOLD_HITBOX_HEIGHT / 2;
hitRadiusX = HOLD_HITBOX_WIDTH / 2 * spatialBuffMultiplier;
hitRadiusY = HOLD_HITBOX_HEIGHT / 2 * spatialBuffMultiplier;
} else if (n.noteAsset) {
targetYCenter = n.y;
hitRadiusX = n.noteAsset.width * n.scale.x / 2 * spatialBuffMultiplier * SPATIAL_HITBOX_MULTIPLIER;
hitRadiusY = n.noteAsset.height * n.scale.y / 2 * spatialBuffMultiplier * SPATIAL_HITBOX_MULTIPLIER;
} else {
continue;
}
var dx = x - n.x;
var dy = y - targetYCenter;
if (Math.abs(dx) <= hitRadiusX && Math.abs(dy) <= hitRadiusY) {
if (originalTimeDiff < smallestTimeDiff) {
bestNote = n;
smallestTimeDiff = originalTimeDiff;
}
}
}
return bestNote;
}
function addScore(result) {
if (isTutorialMode) {
return;
}
if (result === 'perfect') {
score += 100;
} else if (result === 'good') {
score += 50;
}
scoreTxt.setText('Score: ' + score);
}
function addCombo() {
if (isTutorialMode) {
return;
}
combo += 1;
if (combo > maxCombo) {
maxCombo = combo;
}
comboTxt.setText('Combo: ' + combo);
if (combo > 1) {
var baseScale = 1.0;
tween(comboTxt.scale, {
x: baseScale * 1.3,
y: baseScale * 1.3
}, {
duration: 100,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(comboTxt.scale, {
x: baseScale,
y: baseScale
}, {
duration: 100,
easing: tween.easeIn
});
}
});
}
}
function resetCombo() {
combo = 0;
comboTxt.setText('Combo: 0');
}
function checkGameEnd() {
if (isTutorialMode || gameOverFlag) {
return;
}
if (playerCurrentHP <= 0) {
gameOverFlag = true;
console.log("GAME OVER - Player HP depleted");
if (currentScreenState === 'endlessLoopActive') {
var finalTime = Date.now() - endlessStartTime;
displayEndlessSummaryScreen({
time: finalTime,
maxCombo: maxCombo,
misses: endlessMissCount
});
} else {
var summaryData = {
score: score,
maxCombo: maxCombo,
bossWasActuallyDefeated: bossWasDefeatedThisSong
};
summaryData.statusMessage = "GAME OVER";
summaryData.bossWasActuallyDefeated = false;
displayEndOfSongScreen(summaryData);
}
return;
}
if (bossCurrentHP <= 0 && !bossWasDefeatedThisSong) {
bossWasDefeatedThisSong = true;
console.log("Boss HP depleted during song! Player continues playing.");
if (currentFightingBossId && bossUnlockProgress.hasOwnProperty(currentFightingBossId)) {
bossUnlockProgress[currentFightingBossId] = true;
console.log("Boss " + currentFightingBossId + " marked as defeated in progress.");
storage[BOSS_UNLOCK_KEY] = bossUnlockProgress;
console.log("Boss unlock progress saved to storage.");
}
}
if (currentScreenState !== 'endlessLoopActive') {
if (currentActiveRhythmMap && nextNoteIdx >= currentActiveRhythmMap.length && notes.length === 0) {
gameOverFlag = true;
console.log("SONG ENDED");
LK.stopMusic();
var summaryData = {
score: score,
maxCombo: maxCombo,
bossWasActuallyDefeated: bossWasDefeatedThisSong
};
if (bossWasDefeatedThisSong) {
summaryData.statusMessage = "VICTORY!";
} else {
summaryData.statusMessage = "SONG COMPLETED";
}
summaryData.bossWasActuallyDefeated = bossWasDefeatedThisSong;
displayEndOfSongScreen(summaryData);
return;
}
}
}
function getSongStats(songMapKey) {
console.log("getSongStats called for songMapKey:", songMapKey);
if (!songMapKey) {
console.warn("getSongStats: No songMapKey provided, returning default stats.");
return {
bestScore: 0,
bestCombo: 0
};
}
var individualSongStorageKey = 'wf_stats_' + songMapKey;
console.log("getSongStats: Attempting to read from storage key:", individualSongStorageKey);
var songStats = storage[individualSongStorageKey];
console.log("getSongStats: Raw data from storage for " + individualSongStorageKey + ":", songStats);
// Po prostu logujemy surowy obiekt songStats, bez JSON.parse(JSON.stringify(...))
if (songStats) {
var statsToReturn = {
bestScore: parseInt(songStats.bestScore, 10) || 0,
bestCombo: parseInt(songStats.bestCombo, 10) || 0
};
console.log("getSongStats: Parsed and returning stats:", statsToReturn);
return statsToReturn;
}
console.log("getSongStats: No stats found in storage for " + individualSongStorageKey + ", returning default stats.");
return {
bestScore: 0,
bestCombo: 0
};
}
function saveSongStats(songMapKey, currentScore, currentCombo) {
if (!songMapKey) {
return;
}
var individualSongStorageKey = 'wf_stats_' + songMapKey; // Unikalny klucz dla piosenki
// Odczytaj istniejące statystyki dla tej konkretnej piosenki lub utwórz nowy obiekt
var storedData = storage[individualSongStorageKey];
var songStats;
if (storedData) {
songStats = {
bestScore: storedData.bestScore,
bestCombo: storedData.bestCombo
};
} else {
songStats = {
bestScore: 0,
bestCombo: 0
};
}
var updated = false;
var numericCurrentScore = parseInt(currentScore, 10) || 0;
var numericCurrentCombo = parseInt(currentCombo, 10) || 0;
if (numericCurrentScore > (parseInt(songStats.bestScore, 10) || 0)) {
songStats.bestScore = numericCurrentScore;
updated = true;
console.log("New best score for " + songMapKey + " (" + individualSongStorageKey + "): " + numericCurrentScore);
}
if (numericCurrentCombo > (parseInt(songStats.bestCombo, 10) || 0)) {
songStats.bestCombo = numericCurrentCombo;
updated = true;
console.log("New best combo for " + songMapKey + " (" + individualSongStorageKey + "): " + numericCurrentCombo);
}
if (updated) {
storage[individualSongStorageKey] = songStats; // Zapisz obiekt statystyk dla tej piosenki
console.log("Song stats saved to storage for key: " + individualSongStorageKey);
}
}
function formatTime(ms) {
var totalSeconds = Math.floor(ms / 1000);
var minutes = Math.floor(totalSeconds / 60);
var seconds = totalSeconds % 60;
return (minutes < 10 ? '0' : '') + minutes + ':' + (seconds < 10 ? '0' : '') + seconds;
}
function displayLockedMessage(containerToFade, parentContainer, referenceObject) {
if (isLockedBossMessageActive) {
return;
}
isLockedBossMessageActive = true;
if (containerToFade) {
tween(containerToFade, {
alpha: 0
}, {
duration: 400,
easing: tween.easeOut,
onFinish: function onFinish() {
if (containerToFade) {
containerToFade.visible = false;
}
}
});
}
var centerX = 380 + 1150 / 2;
var centerY = 1020 + 890 / 2;
var lockedGraphic = LK.getAsset('silasLockedMessage', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX,
y: centerY - 85,
alpha: 0
});
if (parentContainer && referenceObject && referenceObject.parent === parentContainer) {
var referenceIndex = parentContainer.getChildIndex(referenceObject);
parentContainer.addChildAt(lockedGraphic, referenceIndex);
} else {
game.addChild(lockedGraphic);
}
tween(lockedGraphic, {
alpha: 1
}, {
duration: 800,
easing: tween.easeIn
});
LK.setTimeout(function () {
tween(lockedGraphic, {
alpha: 0
}, {
duration: 800,
easing: tween.easeOut,
onFinish: function onFinish() {
if (lockedGraphic.parent) {
lockedGraphic.destroy();
}
if (containerToFade) {
containerToFade.visible = true;
tween(containerToFade, {
alpha: 1
}, {
duration: 400,
easing: tween.easeIn,
onFinish: function onFinish() {
isLockedBossMessageActive = false;
}
});
} else {
isLockedBossMessageActive = false;
}
}
});
}, 4000);
}
function getEndlessStats() {
var stats = storage[ENDLESS_STATS_KEY];
if (stats) {
return {
bestTime: parseInt(stats.bestTime, 10) || 0,
bestCombo: parseInt(stats.bestCombo, 10) || 0
};
}
return {
bestTime: 0,
bestCombo: 0
};
}
function saveEndlessStats(currentTime, currentMaxCombo) {
var stats = getEndlessStats();
var numericCurrentTime = parseInt(currentTime, 10) || 0;
var numericCurrentCombo = parseInt(currentMaxCombo, 10) || 0;
var updated = false;
if (numericCurrentTime > stats.bestTime) {
stats.bestTime = numericCurrentTime;
console.log("New best endless time saved: " + numericCurrentTime);
updated = true;
}
if (numericCurrentCombo > stats.bestCombo) {
stats.bestCombo = numericCurrentCombo;
console.log("New best endless combo saved: " + numericCurrentCombo);
updated = true;
}
if (updated) {
storage[ENDLESS_STATS_KEY] = stats;
}
}
function startEndlessMode() {
LK.stopMusic();
endlessMusicPhaseIndex = 0;
showEndlessIntro();
LK.playMusic('endless_intro_music', {
loop: true
});
}
function showBossIntroAnimation(bossId) {
if (!bossId) {
return;
}
var graphicAssetKey;
if (bossId === "FinalBoss") {
graphicAssetKey = 'boss_intro_graphic_final';
} else {
graphicAssetKey = 'boss_intro_graphic_' + bossId;
}
var introGraphic = LK.getAsset(graphicAssetKey, {
anchorX: 0.5,
anchorY: 0.5,
scale: {
x: 2.5,
y: 2.5
}
});
if (!introGraphic) {
return;
}
var startX = -300;
var centerX = gameScreenWidth / 2;
var endX = gameScreenWidth + 300;
var centerY = gameScreenHeight / 2 - 400;
introGraphic.x = startX;
introGraphic.y = centerY;
introGraphic.alpha = 0;
game.addChild(introGraphic);
var animationSequence = function animationSequence() {
var levitateTween = null;
var onEnterComplete = function onEnterComplete() {
var levitateUp = {
y: centerY - 30
};
var levitateDown = {
y: centerY + 30
};
var doLevitate = function doLevitate() {
if (!introGraphic || !introGraphic.parent) {
return;
}
levitateTween = tween(introGraphic, introGraphic.y === levitateDown.y ? levitateUp : levitateDown, {
duration: 1500,
easing: tween.easeInOutSine,
onFinish: doLevitate
});
};
doLevitate();
LK.setTimeout(function () {
if (levitateTween) {
levitateTween.stop();
}
if (!introGraphic || !introGraphic.parent) {
return;
}
tween(introGraphic, {
x: endX,
alpha: 0
}, {
duration: 1000,
easing: tween.easeInCubic,
onFinish: function onFinish() {
if (introGraphic.parent) {
introGraphic.destroy();
}
}
});
}, 3000);
};
tween(introGraphic, {
x: centerX,
alpha: 1
}, {
duration: 1000,
easing: tween.easeOutCubic,
onFinish: onEnterComplete
});
};
LK.setTimeout(animationSequence, 500);
}
function showFinalBossIntro(onComplete) {
var introElements = [];
var slideTimeoutId = null;
var currentSlideObject = null;
var slides = [{
asset: 'final_intro_slide_1',
duration: 4000
}, {
asset: 'final_intro_slide_2',
duration: 4000
}, {
asset: 'final_intro_slide_3',
duration: 8000
}, {
asset: 'final_intro_slide_4',
duration: 5500
}, {
asset: 'final_intro_slide_5',
duration: 6500,
zoom: 1.1
}, {
asset: 'black_screen_asset',
duration: 1500
}];
function cleanupIntro() {
if (slideTimeoutId) {
LK.clearTimeout(slideTimeoutId);
slideTimeoutId = null;
}
introElements.forEach(function (el) {
if (el && el.parent) {
el.destroy();
}
});
introElements = [];
if (currentSlideObject && currentSlideObject.parent) {
currentSlideObject.destroy();
}
LK.stopMusic();
if (onComplete) {
onComplete();
}
}
var skipButton = new Text2("SKIP", {
size: 60,
fill: 0xBBBBBB,
align: 'right'
});
skipButton.anchor.set(1, 0);
skipButton.x = gameScreenWidth - 40;
skipButton.y = 40;
skipButton.interactive = true;
skipButton.cursor = "pointer";
skipButton.down = cleanupIntro;
game.addChild(skipButton);
introElements.push(skipButton);
function displaySlide(index) {
if (currentSlideObject) {
tween(currentSlideObject, {
alpha: 0
}, {
duration: 500,
onFinish: function onFinish() {
if (currentSlideObject && currentSlideObject.parent) {
currentSlideObject.destroy();
}
showNext(index);
}
});
} else {
showNext(index);
}
}
function showNext(index) {
if (index >= slides.length) {
cleanupIntro();
return;
}
var slideData = slides[index];
currentSlideObject = LK.getAsset(slideData.asset, {
x: gameScreenWidth / 2,
y: gameScreenHeight / 2,
anchorX: 0.5,
anchorY: 0.5,
width: gameScreenWidth,
height: gameScreenHeight,
alpha: 0
});
game.addChildAt(currentSlideObject, 0);
introElements.push(currentSlideObject);
tween(currentSlideObject, {
alpha: 1
}, {
duration: 500,
onFinish: function onFinish() {
if (slideData.zoom) {
tween(currentSlideObject.scale, {
x: slideData.zoom,
y: slideData.zoom
}, {
duration: slideData.duration,
easing: tween.linear
});
}
slideTimeoutId = LK.setTimeout(function () {
displaySlide(index + 1);
}, slideData.duration);
}
});
}
LK.playMusic('final_intro');
displaySlide(0);
}
function loadFinalBossEncounter() {
LK.stopMusic();
currentScreenState = 'gameplay';
isFinalBossActive = true;
nextSpecialEventIdx = 0;
var songData = allSongData["FinalBossTrack"];
if (!songData) {
console.log("CRITICAL ERROR: FinalBossTrack data not found!");
return;
}
resetGameState();
if (gameplayBackground && gameplayBackground.parent) {
gameplayBackground.destroy();
gameplayBackground = null;
}
gameplayBackground = LK.getAsset(songData.backgroundAssetKey, {
x: 0,
y: 0,
width: gameScreenWidth,
height: gameScreenHeight,
alpha: 0.8
});
game.addChildAt(gameplayBackground, 0);
if (songData.config) {
playerMaxHP = songData.config.playerMaxHP || 10;
bossMaxHP = songData.config.bossMaxHP || 50;
}
playerCurrentHP = playerMaxHP;
bossCurrentHP = bossMaxHP;
if (gameUIContainer) {
gameUIContainer.visible = true;
}
createPlayerHUD();
createBossHUD();
setupGameplayElements();
fadeInGameplayElements(1500);
currentFightingBossId = "FinalBoss";
showBossIntroAnimation(currentFightingBossId);
currentActiveRhythmMap = processRawRhythmMap(songData.rawRhythmMap, "FinalBossTrack");
gameStartTime = Date.now();
LK.playMusic(songData.musicAsset, {
loop: false
});
}
function fadeGameplay(direction, onComplete) {
var targetAlpha = direction === 'out' ? 0 : 1;
var gameplayElements = [gameplayBackground, gameUIContainer, staticHitFrame, staticPerfectLine];
var fadedCount = 0;
var totalToFade = gameplayElements.length;
gameplayElements.forEach(function (el) {
if (el) {
tween(el, {
alpha: targetAlpha
}, {
duration: 800,
easing: tween.easeOut,
onFinish: function onFinish() {
fadedCount++;
if (fadedCount === totalToFade && onComplete) {
onComplete();
}
}
});
} else {
fadedCount++;
if (fadedCount === totalToFade && onComplete) {
onComplete();
}
}
});
}
function showMidBattleCutscene(onComplete) {
var cutsceneElements = [];
var cutsceneTimeoutIds = [];
isMidCutsceneActive = true;
var cutsceneSequence = [{
type: 'zoom_rotate',
asset: 'mid_cutscene_slide_1',
duration: 6000,
width: 1800,
height: 2400,
startScale: 1.0,
endScale: 1.2,
endRotation: 0.1
}, {
type: 'fullscreen',
asset: 'mid_cutscene_slide_2',
duration: 3000
}, {
type: 'multi_sequential_zoom',
inter_delay: 3000,
final_wait: 4000,
slides: [{
asset: 'mid_cutscene_slide_3',
x: gameScreenWidth * 0.75,
y: gameScreenHeight * 0.25,
startScale: 0.4,
endScale: 0.7,
duration: 8000
}, {
asset: 'mid_cutscene_slide_4',
x: gameScreenWidth * 0.25,
y: gameScreenHeight * 0.75,
startScale: 0.4,
endScale: 0.7,
duration: 10000
}, {
asset: 'mid_cutscene_slide_5',
x: gameScreenWidth * 0.5,
y: gameScreenHeight * 0.5,
startScale: 0.4,
endScale: 0.8,
duration: 8000
}]
}, {
type: 'fullscreen',
asset: 'mid_cutscene_slide_6',
duration: 1500
}, {
type: 'multi_sequential_zoom',
inter_delay: 2200,
final_wait: 7000,
slides: [{
asset: 'mid_cutscene_slide_7',
duration: 11000,
startScale: 0.4,
endScale: 1.0,
x: gameScreenWidth * 0.25,
y: gameScreenHeight * 0.20
}, {
asset: 'mid_cutscene_slide_8',
duration: 11000,
startScale: 0.4,
endScale: 1.0,
x: gameScreenWidth * 0.75,
y: gameScreenHeight * 0.20
}, {
asset: 'mid_cutscene_slide_9',
duration: 11000,
startScale: 0.4,
endScale: 1.0,
x: gameScreenWidth * 0.25,
y: gameScreenHeight * 0.40
}, {
asset: 'mid_cutscene_slide_10',
duration: 11000,
startScale: 0.4,
endScale: 1.0,
x: gameScreenWidth * 0.75,
y: gameScreenHeight * 0.40
}, {
asset: 'mid_cutscene_slide_11',
duration: 11000,
startScale: 0.4,
endScale: 1.0,
x: gameScreenWidth * 0.25,
y: gameScreenHeight * 0.60
}, {
asset: 'mid_cutscene_slide_12',
duration: 11000,
startScale: 0.4,
endScale: 1.0,
x: gameScreenWidth * 0.75,
y: gameScreenHeight * 0.60
}, {
asset: 'mid_cutscene_slide_13',
duration: 11000,
startScale: 0.4,
endScale: 1.0,
x: gameScreenWidth * 0.25,
y: gameScreenHeight * 0.80
}, {
asset: 'mid_cutscene_slide_14',
duration: 11000,
startScale: 0.4,
endScale: 1.0,
x: gameScreenWidth * 0.75,
y: gameScreenHeight * 0.80
}]
}, {
type: 'fullscreen',
asset: 'mid_cutscene_slide_15',
duration: 4000
}, {
type: 'fullscreen',
asset: 'mid_cutscene_slide_16',
duration: 3000
}];
function cleanupCutscene() {
cutsceneTimeoutIds.forEach(function (id) {
LK.clearTimeout(id);
});
cutsceneElements.forEach(function (el) {
if (el && el.parent) {
el.destroy();
}
});
isMidCutsceneActive = false;
if (onComplete) {
onComplete();
}
}
var stageIndex = -1;
function nextStage() {
stageIndex++;
if (stageIndex >= cutsceneSequence.length) {
cleanupCutscene();
return;
}
var stageData = cutsceneSequence[stageIndex];
var fadeInSlide = function fadeInSlide(slide, onVisible) {
game.addChild(slide);
cutsceneElements.push(slide);
tween(slide, {
alpha: 1
}, {
duration: 500,
onFinish: onVisible
});
};
var fadeOutSlides = function fadeOutSlides(slidesToFade, onFaded) {
var faded = 0;
if (slidesToFade.length === 0 && onFaded) {
onFaded();
return;
}
slidesToFade.forEach(function (el) {
tween(el, {
alpha: 0
}, {
duration: 500,
onFinish: function onFinish() {
if (el.parent) {
el.destroy();
}
faded++;
if (faded === slidesToFade.length && onFaded) {
onFaded();
}
}
});
});
};
if (stageData.type === 'fullscreen' || stageData.type === 'zoom_rotate') {
var slide = LK.getAsset(stageData.asset, {
x: gameScreenWidth / 2,
y: gameScreenHeight / 2,
anchorX: 0.5,
anchorY: 0.5,
width: stageData.width || gameScreenWidth,
height: stageData.height || gameScreenHeight,
alpha: 0,
rotation: stageData.startRotation || 0,
scale: {
x: stageData.startScale || 1,
y: stageData.startScale || 1
}
});
fadeInSlide(slide, function () {
if (stageData.type === 'zoom_rotate') {
tween(slide.scale, {
x: stageData.endScale,
y: stageData.endScale
}, {
duration: stageData.duration,
easing: tween.linear
});
tween(slide, {
rotation: stageData.endRotation
}, {
duration: stageData.duration,
easing: tween.linear
});
}
var tid = LK.setTimeout(function () {
fadeOutSlides([slide], nextStage);
}, stageData.duration);
cutsceneTimeoutIds.push(tid);
});
} else if (stageData.type === 'multi_sequential_zoom') {
var activeSlides = [];
stageData.slides.forEach(function (slideData, i) {
var tid1 = LK.setTimeout(function () {
var xPos = slideData.x !== undefined ? slideData.x : gameScreenWidth * (0.15 + Math.random() * 0.7);
var yPos = slideData.y !== undefined ? slideData.y : gameScreenHeight * (0.15 + Math.random() * 0.7);
var slide = LK.getAsset(slideData.asset, {
x: xPos,
y: yPos,
anchorX: 0.5,
anchorY: 0.5,
alpha: 0,
scale: {
x: slideData.startScale,
y: slideData.startScale
}
});
activeSlides.push(slide);
cutsceneElements.push(slide);
fadeInSlide(slide, function () {
tween(slide.scale, {
x: slideData.endScale,
y: slideData.endScale
}, {
duration: slideData.duration,
easing: tween.easeInQuad
});
});
if (i === stageData.slides.length - 1) {
var tid2 = LK.setTimeout(function () {
fadeOutSlides(activeSlides, nextStage);
}, stageData.final_wait);
cutsceneTimeoutIds.push(tid2);
}
}, i * stageData.inter_delay);
cutsceneTimeoutIds.push(tid1);
});
}
}
nextStage();
}
function showHelperBoss(bossId, text, columnIndex) {
var localHelperContainer = new Container();
activeHelperBosses.push(localHelperContainer);
var bossData = allBossData.find(function (b) {
return b.id === bossId;
});
var assetKey = bossData ? bossData.cardAssetKey : 'boss1';
var bossSprite = LK.getAsset(assetKey, {
anchorX: 0.5,
anchorY: 0.5,
alpha: 1
});
var bubbleText = new Text2(text || "I've got this!", {
size: 40,
fill: 0xFFFF00,
stroke: 0x000000,
strokeThickness: 4
});
bubbleText.anchor.set(0.5, 1);
localHelperContainer.addChild(bossSprite);
localHelperContainer.addChild(bubbleText);
if (columnIndex !== undefined) {
bossSprite.width = 300;
bossSprite.height = 300;
bubbleText.y = -160;
localHelperContainer.x = columnCenterXs[columnIndex];
localHelperContainer.y = hitZoneY;
localHelperContainer.scale.set(1.2);
} else {
bossSprite.width = 200;
bossSprite.height = 200;
bubbleText.y = -110;
localHelperContainer.x = PLAYER_HP_BAR_X + hpBarWidth / 2 + 260;
localHelperContainer.y = PLAYER_HP_BAR_Y;
localHelperContainer.scale.set(2.0);
}
localHelperContainer.alpha = 0;
game.addChild(localHelperContainer);
game.setChildIndex(localHelperContainer, game.children.length - 1);
tween(localHelperContainer, {
alpha: 1
}, {
duration: 300
});
return localHelperContainer;
}
function clearAmbientParticles() {
while (ambientParticles.length > 0) {
var p = ambientParticles.pop();
if (p && p.visual && p.visual.parent) {
p.visual.destroy();
}
}
}
function clearAllHelpers() {
while (activeHelperBosses.length > 0) {
var helper = activeHelperBosses.pop();
if (helper && helper.parent) {
helper.destroy();
}
}
autoplayColumns = [false, false, false];
}
function hideHelperBoss(containerToHide) {
if (containerToHide && containerToHide.parent) {
var index = activeHelperBosses.indexOf(containerToHide);
if (index > -1) {
activeHelperBosses.splice(index, 1);
}
tween(containerToHide, {
alpha: 0
}, {
duration: 300,
onFinish: function onFinish() {
if (containerToHide && containerToHide.parent) {
containerToHide.destroy();
}
}
});
}
}
function scheduleAutoplayEnd(targetColumn, duration) {
LK.setTimeout(function () {
if (targetColumn !== undefined) {
autoplayColumns[targetColumn] = false;
}
hideHelperBoss();
}, duration);
}
function displayEndOfSongScreen(summaryData) {
if (songSummaryContainer && songSummaryContainer.parent) {
songSummaryContainer.destroy();
}
songSummaryContainer = new Container();
songSummaryContainer.x = 0;
songSummaryContainer.y = 0;
game.addChild(songSummaryContainer);
currentScreenState = 'songSummary';
if (lastPlayedSongKeyForRestart) {
saveSongStats(lastPlayedSongKeyForRestart, summaryData.score, summaryData.maxCombo);
}
var bestStats = getSongStats(lastPlayedSongKeyForRestart || summaryData.songMapKey);
var overlay = LK.getAsset('summaryOverlayAsset', {
width: gameScreenWidth,
height: gameScreenHeight,
alpha: 0.7,
interactive: true
});
songSummaryContainer.addChild(overlay);
var popupWidth = gameScreenWidth * 0.6;
var popupHeight = 2220;
var popupX = (gameScreenWidth - popupWidth) / 2;
var popupY = (gameScreenHeight - popupHeight) / 2;
var popupBackground = LK.getAsset('summaryPopupBackgroundAsset', {
x: popupX,
y: popupY,
width: popupWidth,
height: popupHeight
});
songSummaryContainer.addChild(popupBackground);
var v_gap_title = 80;
var v_gap_stats = 55;
var v_gap_bests = 55;
var v_gap_buttons = 90;
var titleText = new Text2(summaryData.statusMessage || "SONG ENDED", {
size: 70,
fill: 0xFFFFFF,
align: 'center'
});
var bossDefeatedContainer = new Container();
var bossDefeatedStatusText = new Text2("Boss Defeated: ", {
size: 60,
fill: 0xFFFFFF
});
var bossDefeatedValueText = new Text2(summaryData.bossWasActuallyDefeated ? "YES" : "NO", {
size: 60,
fill: summaryData.bossWasActuallyDefeated ? 0x00FF00 : 0xFF0000
});
bossDefeatedValueText.x = bossDefeatedStatusText.width + 10;
bossDefeatedContainer.addChild(bossDefeatedStatusText);
bossDefeatedContainer.addChild(bossDefeatedValueText);
var scoreTextSummary = new Text2("Score: " + summaryData.score, {
size: 50,
fill: 0xFFFFFF,
align: 'center'
});
var comboTextSummary = new Text2("Max Combo: " + summaryData.maxCombo, {
size: 50,
fill: 0xFFFFFF,
align: 'center'
});
var bestScoreText = new Text2("Best Score: " + bestStats.bestScore, {
size: 50,
fill: 0xFFFF00,
align: 'center'
});
var bestComboText = new Text2("Best Combo: " + bestStats.bestCombo, {
size: 50,
fill: 0xFFFF00,
align: 'center'
});
var allElements = [titleText, bossDefeatedContainer, scoreTextSummary, comboTextSummary, bestScoreText, bestComboText];
var gaps = [v_gap_title, v_gap_stats, v_gap_stats, v_gap_bests, v_gap_bests, v_gap_buttons];
var totalContentHeight = 0;
for (var i = 0; i < allElements.length; i++) {
totalContentHeight += allElements[i].height;
if (gaps[i]) {
totalContentHeight += gaps[i];
}
}
var buttonHeight = 70;
totalContentHeight += buttonHeight;
var currentY = popupY + (popupHeight - totalContentHeight) / 2;
allElements.forEach(function (element, index) {
element.y = currentY + element.height / 2;
element.x = popupX + popupWidth / 2;
if (element.anchor) {
element.anchor.set(0.5, 0.5);
} else {
element.pivot.x = element.width / 2;
element.pivot.y = element.height / 2;
}
songSummaryContainer.addChild(element);
currentY += element.height + gaps[index];
});
var buttonWidth = popupWidth * 0.4;
var buttonY = currentY + buttonHeight / 2;
var backButtonBg = LK.getAsset('summaryButtonBackgroundAsset', {
x: popupX + (popupWidth / 2 - buttonWidth - 15),
y: buttonY,
width: buttonWidth,
height: buttonHeight,
interactive: true,
cursor: "pointer"
});
songSummaryContainer.addChild(backButtonBg);
var backToMenuButton = new Text2("Back to Menu", {
size: 40,
fill: 0xFFD700,
stroke: 0x000000,
strokeThickness: 2
});
backToMenuButton.anchor.set(0.5, 0.5);
backToMenuButton.x = backButtonBg.x + buttonWidth / 2;
backToMenuButton.y = backButtonBg.y + buttonHeight / 2;
songSummaryContainer.addChild(backToMenuButton);
backButtonBg.down = function () {
LK.stopMusic();
if (songSummaryContainer && songSummaryContainer.parent) {
songSummaryContainer.destroy();
songSummaryContainer = null;
}
if (gameplayBackground && gameplayBackground.parent) {
gameplayBackground.destroy();
gameplayBackground = null;
}
showBossSelectionScreen();
};
var restartButtonBg = LK.getAsset('summaryButtonBackgroundAsset', {
x: popupX + (popupWidth / 2 + 15),
y: buttonY,
width: buttonWidth,
height: buttonHeight,
interactive: true,
cursor: "pointer"
});
songSummaryContainer.addChild(restartButtonBg);
var restartButton = new Text2("Restart Battle", {
size: 40,
fill: 0xFFD700,
stroke: 0x000000,
strokeThickness: 2
});
restartButton.anchor.set(0.5, 0.5);
restartButton.x = restartButtonBg.x + buttonWidth / 2;
restartButton.y = restartButtonBg.y + buttonHeight / 2;
songSummaryContainer.addChild(restartButton);
restartButtonBg.down = function () {
if (songSummaryContainer && songSummaryContainer.parent) {
songSummaryContainer.destroy();
songSummaryContainer = null;
}
if (currentFightingBossId === "FinalBoss") {
loadFinalBossEncounter();
} else if (lastPlayedSongKeyForRestart) {
loadSong(lastPlayedSongKeyForRestart);
} else {
showMainMenu();
}
};
if (gameUIContainer) {
gameUIContainer.visible = false;
}
if (staticHitFrame) {
staticHitFrame.visible = false;
}
if (staticPerfectLine) {
staticPerfectLine.visible = false;
}
}
game.onNoteMiss = function (note) {
if (!note) {
return;
}
note.showHitFeedback('miss');
if (!isTutorialMode) {
if (isShieldActive) {
console.log("Gracz ominął nutę, ale tarcza jest aktywna! Brak utraty HP i combo NIE zresetowane.");
} else {
resetCombo();
if (currentScreenState === 'endlessLoopActive') {
endlessMissCount++;
}
if (!gameOverFlag) {
playerCurrentHP = Math.max(0, playerCurrentHP - 1);
updatePlayerHpDisplay();
console.log("Player HP after miss: " + playerCurrentHP);
}
}
}
if (note.parent) {
LK.effects.flashObject(note, 0xff0000, 300);
}
};
function createAmbientParticle(columnIndex, direction) {
var particleAssetKey = AMBIENT_PARTICLE_ASSETS[columnIndex];
var columnX = columnCenterXs[columnIndex];
var columnWidth = columnFlashWidths[columnIndex];
var spawnX = columnX + (Math.random() - 0.5) * columnWidth;
var spawnY, initialVY;
if (direction === 'down') {
spawnY = -20;
initialVY = 6 + Math.random() * 8;
} else {
spawnY = gameScreenHeight + 20;
initialVY = -6 + Math.random() * -8;
}
var particle = {
vx: (Math.random() - 0.5) * 2.5,
vy: initialVY,
lifespan: 80 + Math.random() * 70,
age: 0
};
particle.visual = LK.getAsset(particleAssetKey, {
anchorX: 0.5,
anchorY: 0.5,
x: spawnX,
y: spawnY
});
var randomScale = 0.6 + Math.random() * 1.2;
particle.visual.scale.set(randomScale, randomScale);
game.addChild(particle.visual);
ambientParticles.push(particle);
}
function updateAmbientParticles() {
for (var i = ambientParticles.length - 1; i >= 0; i--) {
var p = ambientParticles[i];
p.age++;
p.visual.x += p.vx;
p.visual.y += p.vy;
p.vx *= 0.995;
p.vy *= 0.995;
p.vy += 0.05;
p.visual.alpha = 1 - p.age / p.lifespan;
if (p.age >= p.lifespan) {
p.visual.destroy();
ambientParticles.splice(i, 1);
}
}
}
game.down = function (x, y, obj) {
if (currentScreenState === 'gameplay' || currentScreenState === 'endlessLoopActive') {
if (inputLocked) {
return;
}
swipeStart = {
x: x,
y: y,
time: Date.now()
};
var now = Date.now();
for (var i_gp_pu = activeHelperBosses.length - 1; i_gp_pu >= 0; i_gp_pu--) {
var pItem_gp = activeHelperBosses[i_gp_pu];
if (pItem_gp && !pItem_gp.collected && pItem_gp.visualAsset && pItem_gp.parent) {
var pWidth_gp = pItem_gp.visualAsset.width * pItem_gp.scale.x;
var pHeight_gp = pItem_gp.visualAsset.height * pItem_gp.scale.y;
if (x >= pItem_gp.x - pWidth_gp / 2 && x <= pItem_gp.x + pWidth_gp / 2 && y >= pItem_gp.y - pHeight_gp / 2 && y <= pItem_gp.y + pHeight_gp / 2) {
if (Math.abs(pItem_gp.y - hitZoneY) < pHeight_gp * 1.5) {
pItem_gp.collect();
return;
}
}
}
}
var noteUnderCursorTrap = findNoteAt(x, y, 'trap');
if (noteUnderCursorTrap && !noteUnderCursorTrap.judged && noteUnderCursorTrap.isInHitWindow()) {
noteUnderCursorTrap.judged = true;
noteUnderCursorTrap.showHitFeedback('miss');
if (!isTutorialMode) {
if (isShieldActive) {
console.log("Gracz trafił w TRAP NOTE, ale tarcza jest aktywna! Brak utraty HP i combo NIE zresetowane.");
} else {
resetCombo();
LK.effects.flashScreen(0xff0000, 400);
if (currentScreenState === 'endlessLoopActive') {
endlessMissCount++;
}
if (!gameOverFlag) {
playerCurrentHP = Math.max(0, playerCurrentHP - 5);
updatePlayerHpDisplay();
if (playerCurrentHP <= 0) {
LK.stopMusic();
}
}
}
}
if (noteUnderCursorTrap.alpha > 0) {
noteUnderCursorTrap.alpha = 0;
}
inputLocked = true;
LK.setTimeout(function () {
inputLocked = false;
}, 200);
return;
}
var noteUnderCursor = findNoteAt(x, y, 'tap');
if (noteUnderCursor && !noteUnderCursor.judged && !noteUnderCursor.isBeingHeld && noteUnderCursor.isInHitWindow()) {
var result = noteUnderCursor.getHitAccuracy();
noteUnderCursor.hit = true;
if (noteUnderCursor.isHoldNote) {
if (result !== 'miss') {
noteUnderCursor.isBeingHeld = true;
noteUnderCursor.holdPressTime = now;
noteUnderCursor.showHitFeedback(result);
if (noteUnderCursor.noteColumnIndex !== undefined) {
if (!isFinalBossActive) {
var overlay = columnFlashOverlays[noteUnderCursor.noteColumnIndex];
if (overlay) {
overlay.alpha = 0.5;
}
}
}
if (!isTutorialMode) {
addScore(result);
addCombo();
if (!gameOverFlag) {
if (result === 'perfect') {
bossCurrentHP = Math.max(0, bossCurrentHP - 2);
} else if (result === 'good') {
bossCurrentHP = Math.max(0, bossCurrentHP - 1);
}
updateBossHpDisplay();
}
}
if (noteUnderCursor.mapData && noteUnderCursor.mapData.columnIndex !== undefined) {
currentlyHeldNotes[noteUnderCursor.mapData.columnIndex] = noteUnderCursor;
} else if (noteUnderCursor.originalColumnHint !== undefined) {
currentlyHeldNotes[noteUnderCursor.originalColumnHint] = noteUnderCursor;
}
} else {
noteUnderCursor.judged = true;
noteUnderCursor.showHitFeedback('miss');
if (!isTutorialMode && !isShieldActive) {
resetCombo();
}
if (noteUnderCursor.alpha > 0) {
noteUnderCursor.alpha = 0;
}
}
} else {
noteUnderCursor.judged = true;
noteUnderCursor.showHitFeedback(result);
if (noteUnderCursor.noteColumnIndex !== undefined) {
flashColumn(noteUnderCursor.noteColumnIndex);
}
if (noteUnderCursor.isBuffNote) {
if (result !== 'miss' && !isTutorialMode) {
var buffType = noteUnderCursor.buffType;
if (buffType === 'potion') {
playerCurrentHP = Math.min(playerMaxHP, playerCurrentHP + POTION_HEAL_AMOUNT);
updatePlayerHpDisplay();
} else if (buffType === 'shield') {
if (!isShieldActive) {
isShieldActive = true;
shieldEndTime = Date.now() + SHIELD_DURATION;
if (shieldTimerDisplayContainer) {
shieldTimerDisplayContainer.visible = true;
}
}
} else if (buffType === 'precision') {
if (!isPrecisionBuffActive) {
isPrecisionBuffActive = true;
precisionBuffEndTime = Date.now() + PRECISION_BUFF_DURATION;
originalHitWindowPerfect = hitWindowPerfect;
originalHitWindowGood = hitWindowGood;
hitWindowPerfect = Math.round(hitWindowPerfect * precisionBuffHitWindowMultiplier);
hitWindowGood = Math.round(hitWindowGood * precisionBuffHitWindowMultiplier);
if (precisionBuffTimerDisplayContainer) {
precisionBuffTimerDisplayContainer.visible = true;
}
if (staticHitFrame) {
tween(staticHitFrame, {
height: STATIC_HIT_FRAME_HEIGHT * 2
}, {
duration: 250,
easing: tween.easeOutQuad
});
}
}
}
} else if (result === 'miss' && !isTutorialMode && !isShieldActive) {
resetCombo();
}
} else {
if (result !== 'miss') {
addScore(result);
addCombo();
if (!isTutorialMode && !gameOverFlag) {
if (result === 'perfect') {
bossCurrentHP = Math.max(0, bossCurrentHP - 2);
} else if (result === 'good') {
bossCurrentHP = Math.max(0, bossCurrentHP - 1);
}
updateBossHpDisplay();
}
} else if (!isTutorialMode) {
if (!isShieldActive) {
resetCombo();
} else {
console.log("Tapnięcie nuty ocenione jako 'miss', ale tarcza jest aktywna! Combo NIE zresetowane.");
}
}
}
}
inputLocked = true;
LK.setTimeout(function () {
inputLocked = false;
}, 120);
return;
}
}
};
game.move = function (x, y, obj) {};
game.up = function (x, y, obj) {
if (currentScreenState === 'gameplay' || currentScreenState === 'endlessLoopActive') {
var holdReleasedThisUp = false;
for (var colIdx in currentlyHeldNotes) {
if (currentlyHeldNotes.hasOwnProperty(colIdx)) {
var heldNote = currentlyHeldNotes[colIdx];
if (heldNote && heldNote.isBeingHeld) {
console.log("Releasing hold note in column: " + (heldNote.noteColumnIndex !== undefined ? heldNote.noteColumnIndex : heldNote.mapData ? heldNote.mapData.columnIndex : 'unknown'));
heldNote.judgeHoldRelease();
delete currentlyHeldNotes[colIdx];
holdReleasedThisUp = true;
}
}
}
if (holdReleasedThisUp) {
swipeStart = null;
inputLocked = true;
LK.setTimeout(function () {
inputLocked = false;
}, 80);
return;
}
if (inputLocked || !swipeStart) {
swipeStart = null;
return;
}
var swipeEndX = x;
var swipeEndY = y;
var swipeEndTime = Date.now();
var dx = swipeEndX - swipeStart.x;
var dy = swipeEndY - swipeStart.y;
var dist = Math.sqrt(dx * dx + dy * dy);
var potentialSwipe = dist >= MIN_SWIPE_DISTANCE;
if (potentialSwipe) {
var detectedDir = null;
if (Math.abs(dx) > Math.abs(dy)) {
detectedDir = dx > 0 ? 'right' : 'left';
} else {
detectedDir = dy > 0 ? 'down' : 'up';
}
var swipeBoundingBox = {
x: Math.min(swipeStart.x, swipeEndX),
y: Math.min(swipeStart.y, swipeEndY),
width: Math.abs(dx),
height: Math.abs(dy)
};
var notesHitThisSwipe = [];
for (var i_swipe = 0; i_swipe < notes.length; i_swipe++) {
var n_swipe = notes[i_swipe];
if (n_swipe.judged || n_swipe.noteType !== 'swipe' || n_swipe.alpha === 0) {
continue;
}
var overallSwipeTimeMatchesNote = false;
if (n_swipe.targetHitTime >= swipeStart.time - hitWindowGood && n_swipe.targetHitTime <= swipeEndTime + hitWindowGood) {
overallSwipeTimeMatchesNote = true;
}
if (!overallSwipeTimeMatchesNote) {
if (swipeStart.time >= n_swipe.targetHitTime - hitWindowGood && swipeStart.time <= n_swipe.targetHitTime + hitWindowGood || swipeEndTime >= n_swipe.targetHitTime - hitWindowGood && swipeEndTime <= n_swipe.targetHitTime + hitWindowGood) {
overallSwipeTimeMatchesNote = true;
}
}
if (!overallSwipeTimeMatchesNote) {
continue;
}
var noteCurrentWidth_swipe = n_swipe.noteAsset ? n_swipe.noteAsset.width : SWIPE_NOTE_WIDTH;
var noteCurrentHeight_swipe = n_swipe.noteAsset ? n_swipe.noteAsset.height : SWIPE_NOTE_WIDTH;
var noteBoundingBox_swipe = {
x: n_swipe.x - noteCurrentWidth_swipe / 2,
y: n_swipe.y - noteCurrentHeight_swipe / 2,
width: noteCurrentWidth_swipe,
height: noteCurrentHeight_swipe
};
if (rectsIntersect(swipeBoundingBox, noteBoundingBox_swipe)) {
if (detectedDir === n_swipe.swipeDir) {
var verticalProximity = Math.abs(n_swipe.y - n_swipe.centerY);
var verticalTolerance = noteCurrentHeight_swipe / 1.5;
if (verticalProximity < verticalTolerance) {
notesHitThisSwipe.push(n_swipe);
}
}
}
}
if (notesHitThisSwipe.length > 0) {
notesHitThisSwipe.sort(function (a, b) {
var da = Math.abs(swipeEndTime - a.targetHitTime);
var db = Math.abs(swipeEndTime - b.targetHitTime);
return da - db;
});
var maxNotesToHitPerSwipe = 1;
var notesActuallyHitCount = 0;
for (var k_swipe = 0; k_swipe < notesHitThisSwipe.length && notesActuallyHitCount < maxNotesToHitPerSwipe; k_swipe++) {
var noteToJudge_swipe = notesHitThisSwipe[k_swipe];
if (noteToJudge_swipe.judged) {
continue;
}
var result_swipe = noteToJudge_swipe.getHitAccuracy();
noteToJudge_swipe.judged = true;
noteToJudge_swipe.showHitFeedback(result_swipe);
if (noteToJudge_swipe.noteColumnIndex !== undefined) {
flashColumn(noteToJudge_swipe.noteColumnIndex);
}
if (result_swipe !== 'miss') {
addScore(result_swipe);
addCombo();
if (!isTutorialMode && !gameOverFlag) {
if (result_swipe === 'perfect') {
bossCurrentHP = Math.max(0, bossCurrentHP - 2);
} else if (result_swipe === 'good') {
bossCurrentHP = Math.max(0, bossCurrentHP - 1);
}
updateBossHpDisplay();
}
} else if (!isTutorialMode && !isShieldActive) {
resetCombo();
}
notesActuallyHitCount++;
}
}
}
inputLocked = true;
LK.setTimeout(function () {
inputLocked = false;
}, 80);
swipeStart = null;
}
};
game.update = function () {
var now = Date.now();
if (typeof notes === 'undefined' || !Array.isArray(notes)) {
notes = [];
}
if (isFinalBossActive && !isMidCutsceneActive) {
var elapsedTime = now - gameStartTime;
while (nextSpecialEventIdx < finalBossEventList.length) {
var event = finalBossEventList[nextSpecialEventIdx];
if (elapsedTime >= event.time) {
if (event.type === 'start_mid_cutscene') {
isMidCutsceneActive = true;
clearAllHelpers();
clearAmbientParticles();
fadeGameplay('out', function () {
showMidBattleCutscene(function () {
if (gameplayBackground && gameplayBackground.parent) {
gameplayBackground.destroy();
}
gameplayBackground = LK.getAsset('finalBossBgAsset_Phase2', {
x: 0,
y: 0,
width: gameScreenWidth,
height: gameScreenHeight,
alpha: 0
});
game.addChildAt(gameplayBackground, 0);
fadeGameplay('in');
});
});
} else if (event.type === 'helper_appear') {
(function (e) {
var helperInstance = showHelperBoss(e.bossId, e.text, e.targetColumn);
if (e.buffType === 'shield') {
isShieldActive = true;
shieldEndTime = now + e.duration;
if (shieldTimerDisplayContainer) {
shieldTimerDisplayContainer.visible = true;
}
LK.setTimeout(function () {
hideHelperBoss(helperInstance);
}, e.duration);
} else if (e.buffType === 'autoplay') {
autoplayColumns[e.targetColumn] = true;
LK.setTimeout(function () {
autoplayColumns[e.targetColumn] = false;
hideHelperBoss(helperInstance);
}, e.duration);
} else if (e.buffType === 'heal_over_time') {
isHealOverTimeActive = true;
healOverTimeEndTime = now + e.duration;
lastHealTickTime = now;
LK.setTimeout(function () {
hideHelperBoss(helperInstance);
}, e.duration);
}
})(event);
}
nextSpecialEventIdx++;
} else {
break;
}
}
}
if (isHealOverTimeActive) {
if (now >= lastHealTickTime + healTickInterval) {
playerCurrentHP = Math.min(playerMaxHP, playerCurrentHP + healAmountPerTick);
updatePlayerHpDisplay();
lastHealTickTime = now;
}
if (now >= healOverTimeEndTime) {
isHealOverTimeActive = false;
}
}
if (currentScreenState === 'miniGameActive' && !isMiniGameOver) {
miniGameTimeActive += 16;
if (miniGameTimeActive >= MINI_GAME_SPEED_INCREASE_INTERVAL) {
currentMiniGameObjectSpeed += MINI_GAME_SPEED_INCREMENT;
miniGameTimeActive = 0;
}
if (miniGamePlayer && miniGamePlayer.asset && typeof miniGamePlayer.asset.update === 'function') {
miniGamePlayer.asset.update();
}
for (var i = 0; i < miniGameObstacles.length; i++) {
var obs = miniGameObstacles[i];
if (obs && obs.asset && typeof obs.asset.update === 'function') {
obs.asset.update();
}
}
spawnMiniGameObstacle();
moveMiniGameObstacles();
checkMiniGameCollisions();
updateMiniGameScoreDisplay();
} else if (currentScreenState === 'miniGameActive' && isMiniGameOver) {
if (miniGameScreenElements.find(function (el) {
return el.isGameOverText;
}) === undefined) {
var gameOverText = new Text2("GAME OVER", {
size: 100,
fill: 0xFF0000,
align: 'center'
});
gameOverText.anchor.set(0.5, 0.5);
gameOverText.x = miniGameViewport.x + miniGameViewport.width / 2;
gameOverText.y = miniGameViewport.y + miniGameViewport.height / 2;
gameOverText.isGameOverText = true;
game.addChild(gameOverText);
miniGameScreenElements.push(gameOverText);
}
} else if (currentScreenState === 'gameplay' || currentScreenState === 'endlessLoopActive') {
if (isMidCutsceneActive) {
return;
}
if (currentScreenState === 'endlessLoopActive') {
if (endlessTimerTxt && endlessStartTime > 0) {
var elapsedTime = now - endlessStartTime;
endlessTimerTxt.setText("Time: " + formatTime(elapsedTime));
}
if (noteStreamStarted === false && now >= gameStartTime + 10000) {
noteStreamStarted = true;
lastNoteGenerationTime = now;
}
if (noteStreamStarted && (currentActiveRhythmMap.length - nextNoteIdx < 40 || now - lastNoteGenerationTime > 6000)) {
lastNoteGenerationTime = now;
var generatedChunk = generateProceduralRhythmMap(8.0, currentEndlessDifficulty, 120);
var absoluteNotes = generatedChunk.map.map(function (note) {
note.time += endlessTimelineOffsetMs;
return note;
});
if (absoluteNotes.length > 0) {
var lastTime = 0;
for (var i = 0; i < absoluteNotes.length; i++) {
if (absoluteNotes[i].time > lastTime) {
lastTime = absoluteNotes[i].time;
}
}
endlessTimelineOffsetMs = lastTime;
}
currentActiveRhythmMap = currentActiveRhythmMap.concat(absoluteNotes);
}
if (!gameOverFlag && activeMusicTrack && activeMusicTrack.playing && now >= currentSongEndTime) {
advanceEndlessMusicPhase();
}
if (currentEndlessDifficulty < MAX_ENDLESS_DIFFICULTY) {
currentEndlessDifficulty += ENDLESS_DIFFICULTY_INCREASE_RATE * (16 / 1000);
}
}
if (!isTutorialMode) {
if (isShieldActive) {
if (playerShieldAnimation) {
playerShieldAnimation.visible = true;
playerShieldAnimation.update();
}
if (now > shieldEndTime) {
isShieldActive = false;
if (shieldTimerDisplayContainer) {
shieldTimerDisplayContainer.visible = false;
}
if (playerShieldAnimation) {
playerShieldAnimation.visible = false;
}
} else {
if (shieldTimerDisplayContainer && shieldTimerDisplayContainer.visible) {
var remainingSecondsShield = (shieldEndTime - now) / 1000;
if (shieldTimerTextDisplay) {
shieldTimerTextDisplay.setText(remainingSecondsShield.toFixed(1) + "s");
}
}
}
} else {
if (shieldTimerDisplayContainer && shieldTimerDisplayContainer.visible) {
shieldTimerDisplayContainer.visible = false;
}
if (playerShieldAnimation && playerShieldAnimation.visible) {
playerShieldAnimation.visible = false;
}
}
if (isPrecisionBuffActive) {
if (now > precisionBuffEndTime) {
isPrecisionBuffActive = false;
hitWindowPerfect = originalHitWindowPerfect;
hitWindowGood = originalHitWindowGood;
if (precisionBuffTimerDisplayContainer) {
precisionBuffTimerDisplayContainer.visible = false;
}
if (staticHitFrame) {
tween(staticHitFrame, {
height: STATIC_HIT_FRAME_HEIGHT
}, {
duration: 250,
easing: tween.easeInQuad
});
}
} else {
if (precisionBuffTimerDisplayContainer && precisionBuffTimerDisplayContainer.visible) {
var remainingSecondsBuff = (precisionBuffEndTime - now) / 1000;
if (precisionBuffTimerTextDisplay) {
precisionBuffTimerTextDisplay.setText(remainingSecondsBuff.toFixed(1) + "s");
}
}
}
} else {
if (precisionBuffTimerDisplayContainer && precisionBuffTimerDisplayContainer.visible) {
precisionBuffTimerDisplayContainer.visible = false;
}
}
}
var baseSparksPerSecond = 5;
var bonusSparksPer5Combo = 2;
var totalSparksPerSecond = baseSparksPerSecond + Math.floor(combo / 5) * bonusSparksPer5Combo;
ambientSpawnEnergy += totalSparksPerSecond / 60.0;
while (ambientSpawnEnergy >= 1) {
if (ambientParticles.length >= MAX_AMBIENT_PARTICLES - 1) {
break;
}
var spawnColumn = Math.floor(Math.random() * NUM_COLUMNS);
createAmbientParticle(spawnColumn, 'up');
createAmbientParticle(spawnColumn, 'down');
ambientSpawnEnergy -= 1;
}
spawnNotes();
for (var i_update_notes = 0; i_update_notes < notes.length; i_update_notes++) {
if (notes[i_update_notes] && notes[i_update_notes].update) {
notes[i_update_notes].update();
}
}
removeOldNotes();
if (isTutorialMode) {
var TUTORIAL_APPROX_DURATION_MS = 95000;
var noNotesLeftOnScreen = notes.length === 0;
var allNotesProcessed = nextNoteIdx >= (currentActiveRhythmMap ? currentActiveRhythmMap.length : 0);
if (allNotesProcessed && noNotesLeftOnScreen && now - gameStartTime > TUTORIAL_APPROX_DURATION_MS) {
exitTutorialGameplay();
return;
}
} else {
checkGameEnd();
}
} else {
if (notes.length > 0) {
for (var i_notes_clear = notes.length - 1; i_notes_clear >= 0; i_notes_clear--) {
var n_clear = notes[i_notes_clear];
if (n_clear && n_clear.parent) {
n_clear.destroy();
}
}
notes = [];
}
if (staticHitFrame && staticHitFrame.visible) {
staticHitFrame.visible = false;
}
if (staticPerfectLine && staticPerfectLine.visible) {
staticPerfectLine.visible = false;
}
}
updateAmbientParticles();
};
// Load the specific song for testing
showStartScreen(); ===================================================================
--- original.js
+++ change.js
@@ -248,16 +248,8 @@
});
}
}
self.alpha = 0;
- if (typeof DEBUG_SHOW_HITBOXES !== 'undefined' && DEBUG_SHOW_HITBOXES) {
- self.debugHitboxVisual = self.attachAsset('debugHitboxAsset', {
- anchorX: 0.5,
- anchorY: 0.5,
- alpha: 0.35,
- visible: false
- });
- }
self.showHitFeedback = function (result, feedbackTextOverride) {
var feedbackCircle = LK.getAsset('hitFeedback', {
anchorX: 0.5,
anchorY: 0.5,
@@ -393,11 +385,8 @@
}
if (self.brightnessOverlay) {
self.brightnessOverlay.alpha = 0;
}
- if (typeof DEBUG_SHOW_HITBOXES !== 'undefined' && DEBUG_SHOW_HITBOXES && self.debugHitboxVisual) {
- self.debugHitboxVisual.visible = false;
- }
return;
}
if (self.alpha === 0 && now >= self.visualSpawnTime) {
self.alpha = 1;
@@ -439,16 +428,8 @@
} else {
self.y = newYHold;
}
self.x = self.centerX;
- if (typeof DEBUG_SHOW_HITBOXES !== 'undefined' && DEBUG_SHOW_HITBOXES && self.debugHitboxVisual && self.alpha > 0) {
- var hitboxHeight = 250;
- self.debugHitboxVisual.visible = true;
- self.debugHitboxVisual.width = 250;
- self.debugHitboxVisual.height = hitboxHeight;
- self.debugHitboxVisual.x = 0;
- self.debugHitboxVisual.y = self.yOffset - hitboxHeight / 2;
- }
return;
} else if (self.isHoldNote && self.brightnessOverlay) {
self.brightnessOverlay.alpha = 0;
}
@@ -478,28 +459,8 @@
}
}
}
}
- if (typeof DEBUG_SHOW_HITBOXES !== 'undefined' && DEBUG_SHOW_HITBOXES && self.debugHitboxVisual) {
- if (self.alpha > 0 && !self.judged) {
- var hitboxWidth, hitboxHeight;
- var spatialBuffMultiplier = typeof isPrecisionBuffActive !== 'undefined' && isPrecisionBuffActive ? 1.5 : 1.0;
- if (self.noteAsset) {
- hitboxWidth = self.noteAsset.width * self.scale.x;
- hitboxHeight = self.noteAsset.height * self.scale.y;
- self.debugHitboxVisual.y = 0;
- } else {
- hitboxWidth = 0;
- hitboxHeight = 0;
- }
- self.debugHitboxVisual.width = hitboxWidth * spatialBuffMultiplier;
- self.debugHitboxVisual.height = hitboxHeight * spatialBuffMultiplier;
- self.debugHitboxVisual.x = 0;
- self.debugHitboxVisual.visible = true;
- } else {
- self.debugHitboxVisual.visible = false;
- }
- }
};
self.isInHitWindow = function () {
var now = Date.now();
var dt = Math.abs(now - self.targetHitTime);
@@ -688,14 +649,14 @@
/****
* Game Code
****/
-// np. fioletowy box
-// np. pomarańczowy/żółty box
-// Złoty segment ogona (wysokość bazowa)
-// Pomarańczowa główka
-// np. węższa środkowa
// Placeholder strzałki
+// np. węższa środkowa
+// Pomarańczowa główka
+// Złoty segment ogona (wysokość bazowa)
+// np. pomarańczowy/żółty box
+// np. fioletowy box
1;
function _typeof6(o) {
"@babel/helpers - typeof";
return _typeof6 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
@@ -734,9 +695,8 @@
var lastNoteGenerationTime = 0;
var currentScreenState = '';
var columnFlashOverlays = [null, null, null];
var mainMenuScreenElements = [];
-var DEBUG_SHOW_HITBOXES = false;
var isTutorialMode = false;
var HOLD_HITBOX_WIDTH = 250;
var HOLD_HITBOX_HEIGHT = 250;
var currentlyHeldNotes = {};
@@ -987,9 +947,9 @@
var isMiniGameOver = false;
var currentMiniGameMusicTrack = null;
var ambientParticles = [];
var ambientSpawnEnergy = 0;
-var MAX_AMBIENT_PARTICLES = 100;
+var MAX_AMBIENT_PARTICLES = 80;
var AMBIENT_PARTICLE_ASSETS = ['ambient_particle_col0', 'ambient_particle_col1', 'ambient_particle_col2'];
var startScreenElements = [];
var pressStartBlinkInterval = null;
var PLAYER_HP_BAR_X = 1020;
@@ -2026,10 +1986,9 @@
creditsGraphic.visible = false;
}
};
mainMenuContainer.addChild(rewindButtonMainMenu);
- var actualDefeatedCount = getNumberOfDefeatedBosses();
- var allStandardBossesDefeated = allBossData.length > 0 && actualDefeatedCount === allBossData.length;
+ var allStandardBossesDefeated = true;
var specialBossButtonAssetKey = allStandardBossesDefeated ? 'specialboss_unlocked' : 'specialboss_locked';
var specialBossButtonMainMenu = LK.getAsset(specialBossButtonAssetKey, {});
specialBossButtonMainMenu.width = 250;
var originalAssetWidthForRatioSB = 300;
@@ -2730,10 +2689,9 @@
showMainMenu();
};
game.addChild(rewindButton);
screenElements.push(rewindButton);
- var actualDefeatedCount = getNumberOfDefeatedBosses();
- var allStandardBossesDefeated = allBossData.length > 0 && actualDefeatedCount === allBossData.length;
+ var allStandardBossesDefeated = true;
var specialBossButtonAssetKey = allStandardBossesDefeated ? 'specialboss_unlocked' : 'specialboss_locked';
var specialBossButton = LK.getAsset(specialBossButtonAssetKey, {});
specialBossButton.width = 250;
var originalAssetWidthForRatioSB = 300;
@@ -5376,11 +5334,11 @@
type: 'swipe',
columnIndex: 2,
swipeDir: 'down'
}, {
- time: 45541,
+ time: 45641,
type: 'swipe',
- columnIndex: 0,
+ columnIndex: 1,
swipeDir: 'left'
}, {
time: 46694,
type: 'tap',
@@ -5472,9 +5430,9 @@
swipeDir: 'up'
}, {
time: 58454,
type: 'swipe',
- columnIndex: 2,
+ columnIndex: 1,
swipeDir: 'down'
}, {
time: 59018,
type: 'swipe',
@@ -6661,18 +6619,8 @@
type: 'swipe',
columnIndex: 1,
swipeDir: 'up'
}, {
- time: 149669,
- type: 'swipe',
- columnIndex: 0,
- swipeDir: 'down'
-}, {
- time: 149955,
- type: 'swipe',
- columnIndex: 1,
- swipeDir: 'up'
-}, {
time: 210000,
type: 'swipe',
columnIndex: 2,
swipeDir: 'up'
@@ -7048,33 +6996,29 @@
columnIndex: 0
}, {
time: 237718,
type: 'swipe',
- columnIndex: 0,
+ columnIndex: 1,
swipeDir: 'down'
}, {
time: 238076,
type: 'tap',
columnIndex: 0
}, {
time: 238433,
type: 'swipe',
- columnIndex: 0,
+ columnIndex: 1,
swipeDir: 'up'
}, {
time: 238782,
type: 'tap',
columnIndex: 0
}, {
time: 239102,
type: 'swipe',
- columnIndex: 0,
+ columnIndex: 1,
swipeDir: 'down'
}, {
- time: 239470,
- type: 'tap',
- columnIndex: 0
-}, {
time: 239807,
type: 'swipe',
columnIndex: 0,
swipeDir: 'up'
@@ -7650,13 +7594,12 @@
}];
var allSongData = {
"FinalBossTrack": {
musicAsset: "Finalbattle",
- bossAssetKey: 'finalBossAsset',
backgroundAssetKey: 'finalBossBgAsset',
config: {
playerMaxHP: 30,
- bossMaxHP: 750
+ bossMaxHP: 780
},
rawRhythmMap: finalBossRawRhythmMap_Clean
},
"NoizboyTrack": {
@@ -14721,9 +14664,8 @@
}
var individualSongStorageKey = 'wf_stats_' + songMapKey;
console.log("getSongStats: Attempting to read from storage key:", individualSongStorageKey);
var songStats = storage[individualSongStorageKey];
- // ZMIENIONA LINIA DEBUGOWANIA:
console.log("getSongStats: Raw data from storage for " + individualSongStorageKey + ":", songStats);
// Po prostu logujemy surowy obiekt songStats, bez JSON.parse(JSON.stringify(...))
if (songStats) {
var statsToReturn = {
@@ -15178,23 +15120,23 @@
slides: [{
asset: 'mid_cutscene_slide_3',
x: gameScreenWidth * 0.75,
y: gameScreenHeight * 0.25,
- startScale: 0.3,
- endScale: 0.4,
+ startScale: 0.4,
+ endScale: 0.7,
duration: 8000
}, {
asset: 'mid_cutscene_slide_4',
x: gameScreenWidth * 0.25,
y: gameScreenHeight * 0.75,
- startScale: 0.5,
- endScale: 0.6,
+ startScale: 0.4,
+ endScale: 0.7,
duration: 10000
}, {
asset: 'mid_cutscene_slide_5',
x: gameScreenWidth * 0.5,
y: gameScreenHeight * 0.5,
- startScale: 0.7,
+ startScale: 0.4,
endScale: 0.8,
duration: 8000
}]
}, {
@@ -15202,50 +15144,66 @@
asset: 'mid_cutscene_slide_6',
duration: 1500
}, {
type: 'multi_sequential_zoom',
- inter_delay: 2500,
- final_wait: 4000,
+ inter_delay: 2200,
+ final_wait: 7000,
slides: [{
asset: 'mid_cutscene_slide_7',
duration: 11000,
startScale: 0.4,
- endScale: 1.0
+ endScale: 1.0,
+ x: gameScreenWidth * 0.25,
+ y: gameScreenHeight * 0.20
}, {
asset: 'mid_cutscene_slide_8',
duration: 11000,
startScale: 0.4,
- endScale: 1.0
+ endScale: 1.0,
+ x: gameScreenWidth * 0.75,
+ y: gameScreenHeight * 0.20
}, {
asset: 'mid_cutscene_slide_9',
duration: 11000,
startScale: 0.4,
- endScale: 1.0
+ endScale: 1.0,
+ x: gameScreenWidth * 0.25,
+ y: gameScreenHeight * 0.40
}, {
asset: 'mid_cutscene_slide_10',
duration: 11000,
startScale: 0.4,
- endScale: 1.0
+ endScale: 1.0,
+ x: gameScreenWidth * 0.75,
+ y: gameScreenHeight * 0.40
}, {
asset: 'mid_cutscene_slide_11',
duration: 11000,
startScale: 0.4,
- endScale: 1.0
+ endScale: 1.0,
+ x: gameScreenWidth * 0.25,
+ y: gameScreenHeight * 0.60
}, {
asset: 'mid_cutscene_slide_12',
duration: 11000,
startScale: 0.4,
- endScale: 1.0
+ endScale: 1.0,
+ x: gameScreenWidth * 0.75,
+ y: gameScreenHeight * 0.60
}, {
asset: 'mid_cutscene_slide_13',
duration: 11000,
startScale: 0.4,
- endScale: 1.0
+ endScale: 1.0,
+ x: gameScreenWidth * 0.25,
+ y: gameScreenHeight * 0.80
}, {
asset: 'mid_cutscene_slide_14',
duration: 11000,
startScale: 0.4,
- endScale: 1.0
+ endScale: 1.0,
+ x: gameScreenWidth * 0.75,
+ y: gameScreenHeight * 0.80
}]
}, {
type: 'fullscreen',
asset: 'mid_cutscene_slide_15',
@@ -15365,14 +15323,8 @@
});
activeSlides.push(slide);
cutsceneElements.push(slide);
fadeInSlide(slide, function () {
- tween(slide, {
- alpha: 0
- }, {
- duration: slideData.duration,
- easing: tween.easeInQuad
- });
tween(slide.scale, {
x: slideData.endScale,
y: slideData.endScale
}, {
@@ -16228,10 +16180,10 @@
precisionBuffTimerDisplayContainer.visible = false;
}
}
}
- var baseSparksPerSecond = 2;
- var bonusSparksPer5Combo = 6;
+ var baseSparksPerSecond = 5;
+ var bonusSparksPer5Combo = 2;
var totalSparksPerSecond = baseSparksPerSecond + Math.floor(combo / 5) * bonusSparksPer5Combo;
ambientSpawnEnergy += totalSparksPerSecond / 60.0;
while (ambientSpawnEnergy >= 1) {
if (ambientParticles.length >= MAX_AMBIENT_PARTICLES - 1) {