Open Novoandrey opened 1 month 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). Бонус как и клик отображается всплывающим числом, но жирным шрифтом большой оранжевой всплывающим числом. Она взлетает выше и отображается дольше (чтобы помнили приятное).
Игрок может улучшить отдельно как ВЕРОЯТНОСТЬ КРИТА так и ВЕЛИЧИНУ КРИТА.
Вероятность крита: Стартовый бонус к вероятности крита: 0%. Каждое улучшение дает +1% к монетам. (Полученные монеты домножаются на 1.1 с округлением в большую сторону.)
Можно улучшить за 500 монет. (баланс еще нужно будет тестировать на прототипе, пока допустим так)
Каждое последующее улучшение i рассчитывается по формуле: Math.floor(baseCost * Math.pow(costIncrement, i)).
baseCost = 500. costIncrement = 1.3
Величина крита: Стартовый бонус к величине крита 0%. Каждое улучшение дает +1% к вероятности крита. При каждом клике проверяется, получит игрок бонус или нет. Можно улучшить за 500 монет. baseCost = 500. costIncrement = 1.3
ВЫПАДАЮЩИЕ БОНУСЫ. Есть падающие сверху бонусы (как подарочные коробки на парашютах). Ты кликаешь на такой бонус, появляется окошко выбора.
Окошко выбора с тремя вариантами. Под окошком полоска-таймер обратного отсчета (как с диалогах Batman Telltale) Бонус А Бонус Б Случайный другой бонус (не А и не Б)
Игрок может выбирать случайные бонусы, которые немного улучшают разные параметры. Можно подбирать один и тот же апргрейд несколько раз, и эффект будет стакаться еще и еще. Например:
Под вопросом:
Некоторые показатели могут перемножаться.
Рандомные бонусы зависят не только от случайности 10%+, но и от количества кликов и потраченного времени. Чем больше количество+клики, тем больше вероятность. После получения бонуса сбрасывается до стандартного значения и накапливается обратно.
РАЗНЫЕ ВЛАДКИ:
РАЗНЫЕ ВСРАТЫЕ ЭКСПЕРИМЕНТАЛЬНЫЕ МЕХАНИКИ, КОТОРЫЕ ВОЗМОЖНО ДЕЛАТЬ НЕ СТОИТ НИКОМУ И НИКОГДА. Красная кнопка Do Not Press. Наррративная кнопка чисто для диалоговых сообщений, каких-то приколов. С кулдауном и прогресс баром. Вводить секретные коды Задание "Добавь себе наш стикер" Задание добавь себе в имя специальный эмодзи, ходи так три дня. Злая кнопка становится больше *На кнопке можно написать текст, который меняется каждый клик, и который нужно читать, как в приложении для скорочтения. (Всратая идея. Как вставить в кликер Моби дика или Великого Гетсби) Эффект матрицы, падающие буквы (на фон или как спецэффект) (Мини-игра Угадай, сколько ты сделал кликов)
Формула для подсчета цены 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;
}
Нужен моноширинный шрифт для отображения количества "монет" Нужна система для того, чтобы красиво отображать количество монет:
Возможные временные бонусы-улучшалки, которые выпадают из "подарков":
+1-5 курсоров +1-5 click power
Large Number Notation
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.
Я подвез математику, но пока даже непонятно, доберемся ли мы до таких больших чисел.
Масштаб цифр очень быстро перестает пониматься, поэтому надо уже буквально с трех нулей начинать сокращать. Это нужно для удобства сравнения цифр, чтобы можно было соотносить имеющиеся деньги и цены.
Но отдельно надо показывать цифру с реальным количество нулей, чтобы оставалось чувство накопления. Или придумать какую-то альтернативу. Иначе если будет меняться только буковка, не будет чувства "ого нихуя себе какими цифрами я оперирую."
Нужно расписать, какие первые шаги для улучшения прототипа кликера нужно сделать в виде задач в движке для программиста.