This commit is contained in:
Renan LE CARO 2025-04-07 14:22:59 +02:00
parent e78021ff83
commit 156c060b96
4 changed files with 51 additions and 39 deletions

32
dist/index.html vendored

File diff suppressed because one or more lines are too long

View file

@ -521,7 +521,7 @@
{
"name": "icon:picky_eater",
"size": 8,
"bricks": "rtrtrtrttrtrtrtrrtrtrtrt____________________t_____________WWWW",
"bricks": "_rrr_______ry_____ryy_____r_y______yyy______________y_____WWWW__",
"svg": null
},
{
@ -594,7 +594,7 @@
{
"name": "A",
"size": 7,
"bricks": "___t_____ttt___t___t__t___t_tttttttt_____tt_____t",
"bricks": "__ttt___ttttt_ttt_ttttt___ttttttttttt___tttt___tt",
"svg": null
},
{

View file

@ -13,8 +13,7 @@ const rawLevelsList = _rawLevelsList as RawLevel[];
export const appVersion = _appVersion as string;
export const icons = {} as { [k: string]: string };
export const allLevels = rawLevelsList
export const allLevelsAndIcons = rawLevelsList
.map((level, i) => {
const bricks = level.bricks
.split("")
@ -32,12 +31,15 @@ export const allLevels = rawLevelsList
svg: getLevelBackground(level),
};
})
.filter((l) => !l.name.startsWith("icon:"))
.map((l, li) => ({
...l,
sortKey: ((Math.random() + 3) / 3.5) * l.bricksCount,
})) as Level[];
export const allLevels =
allLevelsAndIcons.filter((l) => !l.name.startsWith("icon:"))
export const upgrades = rawUpgrades.map((u) => ({
...u,
icon: icons["icon:" + u.id],

View file

@ -1,5 +1,5 @@
import { GameState, RunParams } from "./types";
import { allLevels, upgrades } from "./loadGameData";
import {GameState, PerkId, RunParams} from "./types";
import {allLevels, allLevelsAndIcons, upgrades} from "./loadGameData";
import {
defaultSounds,
getHighScore,
@ -15,15 +15,17 @@ import { getHistory } from "./gameOver";
import { getTotalScore } from "./settings";
import { isStartingPerk } from "./startingPerks";
export function getRunLevels(params: RunParams) {
export function getRunLevels(params: RunParams, randomGift:PerkId|undefined) {
const history = getHistory();
const unlocked = allLevels.filter(
(l, li) => !reasonLevelIsLocked(li, history, false),
);
const firstLevel = params?.level
? unlocked.filter((l) => l.name === params?.level)
: [];
const firstLevel = (params?.level && unlocked.filter((l) => l.name === params?.level))
|| (
randomGift && allLevelsAndIcons.filter(l=>l.name=='icon:'+randomGift)
) || [];
const restInRandomOrder = unlocked
.filter((l) => l.name !== params?.level)
@ -36,10 +38,24 @@ export function getRunLevels(params: RunParams) {
}
export function newGameState(params: RunParams): GameState {
const runLevels = getRunLevels(params);
const highScore= getHighScore()
const perks = { ...makeEmptyPerksMap(upgrades), ...(params?.perks || {}) };
let randomGift:PerkId|undefined =undefined
if (!sumOfValues(perks)) {
const giftable = upgrades.filter((u) => highScore >= u.threshold && !u.requires && isStartingPerk(u));
randomGift =
(isOptionOn("easy") && "slow_down") ||
giftable[Math.floor(Math.random() * giftable.length)].id;
perks[randomGift] = 1;
}
const runLevels = getRunLevels(params,randomGift);
console.log(randomGift, params,runLevels)
const gameState: GameState = {
runLevels,
level: runLevels[0],
@ -69,7 +85,7 @@ export function newGameState(params: RunParams): GameState {
lastScoreIncrease: -1000,
lastExplosion: -1000,
lastBrickBroken: 0,
highScore: getHighScore(),
highScore,
balls: [],
ballsColor: "#FFFFFF",
bricks: [],
@ -117,18 +133,8 @@ export function newGameState(params: RunParams): GameState {
};
resetBalls(gameState);
if (!sumOfValues(gameState.perks)) {
const giftable = getPossibleUpgrades(gameState).filter((u) =>
isStartingPerk(u),
);
const randomGift =
(isOptionOn("easy") && "slow_down") ||
giftable[Math.floor(Math.random() * giftable.length)].id;
perks[randomGift] = 1;
dontOfferTooSoon(gameState, randomGift);
}
for (let perk of upgrades) {
if (gameState.perks[perk.id]) {
if (perks[perk.id]) {
dontOfferTooSoon(gameState, perk.id);
}
}