mirror of
https://github.com/csd4ni3l/loginween.git
synced 2025-11-05 04:58:09 +01:00
184 lines
5.6 KiB
JavaScript
184 lines
5.6 KiB
JavaScript
function game_info() {
|
|
const SETTINGS = {
|
|
"Graphics": {
|
|
"Anti-Aliasing": {"type": "bool", "default": "true"},
|
|
"Texture Filtering": {"type": "option", "options": ["Nearest", "Linear"], "default": "Linear"},
|
|
"FPS Limit": {"type": "slider", "min": 0, "max": 480, "default": 60},
|
|
},
|
|
"Sound": {
|
|
"Music": {"type": "bool", "default": "true"},
|
|
"Music Volume": {"type": "slider", "min": 0, "max": 100, "default": 50},
|
|
},
|
|
"Input": {
|
|
"Controller Enabled": {"type": "bool", "default": "true"}
|
|
},
|
|
"Spooky": {
|
|
"Jumpscares": {"type": "bool", "default": "true"}
|
|
}
|
|
};
|
|
|
|
return ["Pumpkin Roll", SETTINGS];
|
|
}
|
|
|
|
function spawn_enemy(enemy_type) {
|
|
let enemy_width;
|
|
let enemy_height;
|
|
let start_y;
|
|
if (enemy_type == "tombstone") {
|
|
scale_f = scale(0.05);
|
|
start_y = 720;
|
|
enemy_width = 140;
|
|
enemy_height = 120;
|
|
}
|
|
else {
|
|
scale_f = scale(0.5);
|
|
start_y = 600;
|
|
enemy_width = 148;
|
|
enemy_height = 147;
|
|
}
|
|
|
|
const enemy_sprite = add([
|
|
sprite(enemy_type),
|
|
pos(1280 - enemy_width, start_y - enemy_height),
|
|
scale_f,
|
|
area(),
|
|
"enemy"
|
|
]);
|
|
|
|
enemy_sprite.onUpdate(() => {
|
|
enemy_sprite.pos.x -= 1000 * dt();
|
|
|
|
if (enemy_sprite.pos.x <= -enemy_width) {
|
|
destroy(enemy_sprite);
|
|
}
|
|
})
|
|
return enemy_sprite;
|
|
}
|
|
|
|
function setup_game() {
|
|
loadSprite("pumpkin", "/static/graphics/pumpkin.png");
|
|
loadSprite("tombstone", "/static/graphics/tombstone.png");
|
|
loadSprite("bird", "/static/graphics/bird.png");
|
|
|
|
const GRAVITY = 2500;
|
|
const JUMP_VELOCITY = -1200;
|
|
const GROUND_Y = 670;
|
|
|
|
scene("play", () => {
|
|
let score = 0;
|
|
let high_score = Number(localStorage.getItem("pumpkin_roll_highscore"));
|
|
let game_over = false;
|
|
let enemies = [];
|
|
let last_enemy_spawn = performance.now();
|
|
|
|
const score_label = create_label(480, 10, `Score: ${score} High Score: ${high_score}`);
|
|
|
|
let pumpkin_sprite = add([
|
|
sprite("pumpkin"),
|
|
pos(50, 670),
|
|
anchor("center"),
|
|
rotate(0),
|
|
area(),
|
|
"pumpkin"
|
|
])
|
|
|
|
pumpkin_sprite.isJumping = false;
|
|
|
|
let jumpscare_interval_id;
|
|
if (localStorage.getItem("Pumpkin Roll Jumpscares") == "true") {
|
|
jumpscare_interval_id = setInterval(() => {
|
|
if (Math.random() < 0.035) {
|
|
jumpscare();
|
|
}
|
|
}, 1000);
|
|
}
|
|
|
|
create_button(5, 5, 150, 75, "Back", color(127, 127, 127), color(0, 0, 0, 0), () => {
|
|
if (localStorage.getItem("Pumpkin Roll Jumpscares") == "true") {
|
|
clearInterval(jumpscare_interval_id);
|
|
}
|
|
go("main_menu");
|
|
})
|
|
|
|
onCollide("pumpkin", "enemy", () => {
|
|
if (game_over) return;
|
|
game_over = true;
|
|
|
|
for (let enemy of enemies) {
|
|
destroy(enemy);
|
|
}
|
|
|
|
if (localStorage.getItem("Pumpkin Roll Jumpscares") == "true") {
|
|
jumpscare();
|
|
}
|
|
|
|
create_label(520, 320, `Game Over!\nScore: ${Math.floor(score)}\nHigh Score: ${high_score}`, 48);
|
|
|
|
if (localStorage.getItem("Pumpkin Roll Jumpscares") == "true") {
|
|
setTimeout(jumpscare, 500);
|
|
}
|
|
})
|
|
|
|
enemy_spawn_with_check = (count) => {
|
|
const enemy_type = Math.random() < 0.75 ? "tombstone" : "bird";
|
|
for (let i = 0; i < count; i++) {
|
|
if (game_over) {
|
|
return
|
|
}
|
|
|
|
setTimeout(() => {
|
|
enemies.push(spawn_enemy(enemy_type));
|
|
}, i * 150);
|
|
}
|
|
}
|
|
|
|
enemy_spawn_with_check(1);
|
|
|
|
pumpkin_sprite.onUpdate(() => {
|
|
if (game_over) return;
|
|
score += 60 * dt();
|
|
|
|
if (Math.floor(score) > high_score) {
|
|
high_score = Math.floor(score);
|
|
localStorage.setItem("pumpkin_roll_highscore", high_score);
|
|
}
|
|
|
|
score_label.text = `Score: ${Math.floor(score)} High Score: ${high_score}`;
|
|
|
|
if ((performance.now() - last_enemy_spawn) >= 1000) {
|
|
last_enemy_spawn = performance.now();
|
|
const random = Math.random();
|
|
if (random < 0.2) {
|
|
enemy_spawn_with_check(3);
|
|
}
|
|
else if (random < 0.5) {
|
|
enemy_spawn_with_check(2);
|
|
}
|
|
else {
|
|
enemy_spawn_with_check(1);
|
|
}
|
|
}
|
|
|
|
if ((isKeyDown("space") || (localStorage.getItem("Pumpkin Roll Controller Enabled") === "true" && isGamepadButtonDown("south"))) && !pumpkin_sprite.isJumping) {
|
|
pumpkin_sprite.vy = JUMP_VELOCITY;
|
|
pumpkin_sprite.isJumping = true;
|
|
}
|
|
|
|
if (pumpkin_sprite.isJumping) {
|
|
pumpkin_sprite.angle = (pumpkin_sprite.angle + dt() * 360) % 360;
|
|
}
|
|
else {
|
|
pumpkin_sprite.angle = (pumpkin_sprite.angle + dt() * 180) % 360;
|
|
return;
|
|
}
|
|
pumpkin_sprite.vy += GRAVITY * dt();
|
|
pumpkin_sprite.pos.y += pumpkin_sprite.vy * dt();
|
|
|
|
if (pumpkin_sprite.pos.y >= GROUND_Y) {
|
|
pumpkin_sprite.pos.y = GROUND_Y;
|
|
pumpkin_sprite.isJumping = false;
|
|
pumpkin_sprite.vy = 0;
|
|
}
|
|
});
|
|
})
|
|
} |