Novoandrey / telepunk2028

2 stars 0 forks source link

[CL] Описать улучшения для прототипа кликера (технические задачи) #29

Open Novoandrey opened 1 month ago

Novoandrey commented 1 month ago

Нужно расписать, какие первые шаги для улучшения прототипа кликера нужно сделать в виде задач в движке для программиста.

Felegz commented 4 weeks ago

Надеюсь тут можно редактировать комментарии. Вроде можно.

Felegz commented 4 weeks ago

У нас существет прототип на Javascript: https://basic-clicker-game.glitch.me/

Эти механики нужно будет повторить.

(Косте: выписать реализованные механики)

GAME FEEL: Добавить визуальный эффект того, что кнопка стала активной (например, по кнопке пробегает блик). Кнопка должна быть очень соблазнительной. (Спросить у Олега)

Было бы охуенно сделать смену цифр как в механическом счетчике. (mechanical counter) Пример 1: https://codepen.io/jkantner/pen/ZEQYKON Пример 2: https://github.com/bitttttten/mechanical-counter Пример 3: https://codepen.io/jpoyard/pen/BwjRrb

Вибрации.

Жизнь партиклов сделать длиннее Чем больше click power, тем больше партиклов (когда слишком много, то больше их размер) Партиклы каждый клик одного или двух цветов, чтобы многократное кликанье давало больше цветов и выглядело прикольнее.

Возможно партиклам нужна гравитация, чтобы они подбрасывались вверх и опускались по гравитации, прежде чем потухнуть.

МЕХАНИКИ: Нам нужно вести аналитику, Трекать переменные, невидимые игроку. Количество кликов по кнопке. Максимальное количество кликов. Сколько человек времени провел в одну сессию. Сколько ретеншен игроков. Количество купленных улучшений.

Не все кнопки отображаются в меню сразу. Кнопки добавляются постепенно. Со временем появляются новые кнопки. Появляется кнопка UNLOCK с ценой. Нажимаешь ее, появляется новая функция. Разблокируешь акции и распродажи курсоров.

Какие есть кнопки: Купить курсоры Купить курсоры по акции (2-5 курсоров с рандомной скидкой от 50% до 10%. Обновляется каждый раз, когда игрок купил просто курсоры или курсоры по акции) Улучшить Click Power Улучшить Click Power по акции (работает аналогично курсорам по ации, меняется когда игрок купил Click Power) Случайный бонус (улучшается от 5% до 100%) Вероятность случайного бонуса (улучшается от 1% и до 50%)

Формула для улучшения

Покупать курсоры оптом дешевле (появляется выбор, купить 1 сейчас или накопить чтобы купить 3 оптом со скидкой)

САМАЯ ГЛАВНАЯ КНОПКА “Click me” — Поле, где просто можно зажать экран пальцем и водить им туда сюда. Должны появляться визуальные эффекты, партиклы. Какие именно — нужно будет обсудить, что лучше подходит. Референсы на возможный визуал этого поля — в Миро: https://miro.com/app/board/uXjVKEhVKSw=/?moveToWidget=3458764596560265211&cot=14 Возможно эффект огня. Падают пузыри, которые можно (но не обязательно лопать и сжигать). Можно просто водить пальцем туда-сюда.

У самой кнопки может быть прогрессия (как в Cubes) Прогресс-бар кнопки то быстро проходится, то медленно, но каждые N (40) секунд должно что-то происходить. (40-second rule). Something that pulls attention.

КРИСТАЛЛ Вторая игровая валюта — временно назовем ее “Кристалл”, но это будет что-то другое. Возможно есть лимит на максимальное количество Кристаллов. Можно продать кристаллы, получить монеты.

КРИТИЧЕСКИЕ КЛИКИ Механика дополнительных монет при клике. Обычно игрок нажимает и получает +N монет. Иногда есть шанс большего бонуса (N*X). Бонус как и клик отображается всплывающим числом, но жирным шрифтом большой оранжевой всплывающим числом. Она взлетает выше и отображается дольше (чтобы помнили приятное).

Игрок может улучшить отдельно как ВЕРОЯТНОСТЬ КРИТА так и ВЕЛИЧИНУ КРИТА.

ВЫПАДАЮЩИЕ БОНУСЫ. Есть падающие сверху бонусы (как подарочные коробки на парашютах). Ты кликаешь на такой бонус, появляется окошко выбора.

Окошко выбора с тремя вариантами. Под окошком полоска-таймер обратного отсчета (как с диалогах Batman Telltale) Бонус А Бонус Б Случайный другой бонус (не А и не Б)

Игрок может выбирать случайные бонусы, которые немного улучшают разные параметры. Можно подбирать один и тот же апргрейд несколько раз, и эффект будет стакаться еще и еще. Например:

Под вопросом:

Некоторые показатели могут перемножаться.

Рандомные бонусы зависят не только от случайности 10%+, но и от количества кликов и потраченного времени. Чем больше количество+клики, тем больше вероятность. После получения бонуса сбрасывается до стандартного значения и накапливается обратно.

РАЗНЫЕ ВЛАДКИ:

РАЗНЫЕ ВСРАТЫЕ ЭКСПЕРИМЕНТАЛЬНЫЕ МЕХАНИКИ, КОТОРЫЕ ВОЗМОЖНО ДЕЛАТЬ НЕ СТОИТ НИКОМУ И НИКОГДА. Красная кнопка Do Not Press. Наррративная кнопка чисто для диалоговых сообщений, каких-то приколов. С кулдауном и прогресс баром. Вводить секретные коды Задание "Добавь себе наш стикер" Задание добавь себе в имя специальный эмодзи, ходи так три дня. Злая кнопка становится больше *На кнопке можно написать текст, который меняется каждый клик, и который нужно читать, как в приложении для скорочтения. (Всратая идея. Как вставить в кликер Моби дика или Великого Гетсби) Эффект матрицы, падающие буквы (на фон или как спецэффект) (Мини-игра Угадай, сколько ты сделал кликов)

Novoandrey commented 4 weeks ago
  1. Касательно партиклов и эффектов, лучше всего искать какие на ютубе есть туториалы как сделать именно в годоте и референсы кидать напрямую на них.
  2. Нужно отдельное описание геймплея без упоминания элементов интерфейса.
  3. Механика с апгрейдами а-ля Vampire Survivors выглядит интересно, надо расписывать и делать мне кажется.
  4. Не очень понимаю, зачем нам нужны рандомные скидки и кристаллическая валюта. Особенно вторая кажется уместной только если нужно как-то поиронизировать, но мб надо получше расписать и станет понятнее.
Felegz commented 4 weeks ago

Формула для подсчета цены i "курсоров" (аналогичная формула работает для "click power"). Умножаем базовую цену (baseCursorCost) на шаг увеличения цены (costIncrement) в степени равной тому, какое это по счету улучшение.

Я делаю шаг увеличения цены очень маленьким: const baseCursorCost = 10; const costIncrement = 1.1;

function calculateCursorCost(amount = 1) {
  let totalCost = 0;
  for (let i = 0; i < amount; i++) {
    totalCost += Math.floor(baseCursorCost * Math.pow(costIncrement, cursors + i));
  }
  return totalCost;
}
Felegz commented 4 weeks ago

Нужен моноширинный шрифт для отображения количества "монет" Нужна система для того, чтобы красиво отображать количество монет:

Felegz commented 4 weeks ago

Возможные временные бонусы-улучшалки, которые выпадают из "подарков":

+1-5 курсоров +1-5 click power

Felegz commented 3 weeks ago

Large Number Notation

  1. Short:
  2. Engineering: 260,25e186
  3. Scientific: 2,60e188

Engineering vs. Scientific Notation

Scientific Notation: This is a way of writing very large or very small numbers in a more manageable form. The format is a × 10^n, where a is a number between 1 and 10, and n is an integer. For example, the number 123456789987654321 in scientific notation would be written as 1.23456789987654321 × 10^17. Here, 1.23456789987654321 is the significant part, and 17 is the exponent showing how many places the decimal point has moved.

function toExponential(num) {
    let exponent = Math.floor(Math.log10(Math.abs(num)));
    let significand = num / Math.pow(10, exponent);
    return `${significand}e${exponent >= 0 ? '+' : ''}${exponent}`;
}

let number = 123456789987654321;
let scientific = toExponential(number);
console.log(scientific); // Output: 1.2345678998765432e+17

Engineering Notation: Similar to scientific notation, but here, the exponent n is always a multiple of 3 (like 3, 6, 9, etc.). This makes it easier to relate to metric units (like kilo, mega, giga, etc.). So, 123456789987654321 in engineering notation would be 123.456789987654321 × 10^15. The significant part 123.456789987654321 is between 1 and 1000, and the exponent 15 is a multiple of 3.

function toEngineering(num) {
    let exponent = Math.floor(Math.log10(num) / 3) * 3;
    let significand = num / Math.pow(10, exponent);
    return `${significand}e+${exponent}`;
}

let number = 123456789987654321;
let engineering = toEngineering(number);
console.log(engineering); // Output: 123.45678998765432e+15

AA Notation in Clicker Games. Source: https://www.codewars.com/kata/64e4cdd7f2bfcd142a880011

The AA notation is a system used in clicker and idle games to represent extremely large numbers in a compact form. After reaching a trillion (1T), the notation continues with pairs of letters starting from "aa" for quadrillions, "ab" for quintillions, and so on. The letters increment through the alphabet, and when "az" is reached, the next step is "ba", and this pattern continues up to "zz".

Example Table: 1,000 → 1K (Thousand) 1,000,000 → 1M (Million) 1,000,000,000 → 1B (Billion) 1,000,000,000,000 → 1T (Trillion) 1,000,000,000,000,000 → 1aa (Quadrillion) 10¹⁸ → 1ab (Quintillion) 10²¹ → 1ac (Sextillion) 10²⁴ → 1ad (Octillion)

Here's a simple JavaScript function to convert a number into this AA notation:

function toAANotation(num) {
    const units = ['K', 'M', 'B', 'T'];
    const letters = 'abcdefghijklmnopqrstuvwxyz';

    if (num < 1000) return num.toString();

    let exp = Math.floor(Math.log10(num) / 3);
    let suffix = '';

    if (exp <= 3) {
        suffix = units[exp - 1];
    } else {
        let index = exp - 4;
        let firstLetter = letters[Math.floor(index / 26)];
        let secondLetter = letters[index % 26];
        suffix = firstLetter + secondLetter;
    }

    let significand = num / Math.pow(10, exp * 3);

    return `${significand.toFixed(2)}${suffix}`;
}

// Example usage:
console.log(toAANotation(123456789987654321)); // Output: 123.46aa
console.log(toAANotation(1230000000000000000000)); // Output: 1.23ab

Explanation: Determine the Exponent:

Math.log10(num) / 3 gives the number of groups of three zeros in the number. Math.floor() rounds it down to find the appropriate suffix. Assign the Suffix:

If the exponent is 1-3, use the predefined units (K, M, B, T). If the exponent is 4 or higher, calculate the letter pair: The first letter comes from dividing the index by 26. The second letter comes from the remainder of that division. Format the Output:

The number is divided by 10^(exp * 3) to get the significant part. The result is formatted with the correct suffix.

Felegz commented 3 weeks ago

Я подвез математику, но пока даже непонятно, доберемся ли мы до таких больших чисел.

iLukanin commented 2 weeks ago

Масштаб цифр очень быстро перестает пониматься, поэтому надо уже буквально с трех нулей начинать сокращать. Это нужно для удобства сравнения цифр, чтобы можно было соотносить имеющиеся деньги и цены.

Но отдельно надо показывать цифру с реальным количество нулей, чтобы оставалось чувство накопления. Или придумать какую-то альтернативу. Иначе если будет меняться только буковка, не будет чувства "ого нихуя себе какими цифрами я оперирую."