feat: Initial commit Plants vs Zombies Web Edition v2.4
- 5 Biomes: Day, Night, Pool, Fog, Roof (25 Campaign levels) - Minigames: Wall-nut Bowling, I Zombie, Roguelike, Boss Rush & Dr. Zomboss - Systems: Zen Garden, Workshop Crafting, Almanac, Tree of Wisdom, Achievements - Backend: REST API + SQLite Accounts & Save Synchronization - Infrastructure: Nginx HTTPS & Docker deployment
This commit is contained in:
@@ -0,0 +1,232 @@
|
||||
// Suburban Almanac System: Full Encyclopedia of Plants & Zombies
|
||||
window.AlmanacSystem = class AlmanacSystem {
|
||||
constructor() {
|
||||
this.selectedCategory = 'plants'; // 'plants' or 'zombies'
|
||||
this.selectedId = 'peashooter';
|
||||
|
||||
this.plants = [
|
||||
{
|
||||
id: 'peashooter',
|
||||
name: 'Горохострел',
|
||||
icon: '🌱',
|
||||
cost: 100,
|
||||
cooldown: 'Быстрая (7.5с)',
|
||||
damage: '20 (Нормальный)',
|
||||
toughness: '300 (Обычная)',
|
||||
desc: 'Базовая стрелковая единица газона. Стреляет одиночными горошинами по наступающим зомби.',
|
||||
lore: '«Как можно быть таким популярным и при этом оставаться простым парнем? Спросите у Горохострела. Он скажет: "Просто делай меткие выстрелы!"»'
|
||||
},
|
||||
{
|
||||
id: 'sunflower',
|
||||
name: 'Подсолнух',
|
||||
icon: '🌻',
|
||||
cost: 50,
|
||||
cooldown: 'Быстрая (7.5с)',
|
||||
damage: 'Нет',
|
||||
toughness: '300 (Обычная)',
|
||||
desc: 'Ключевой источник солнца. Производит 25 единиц солнца каждые 12 секунд.',
|
||||
lore: '«Подсолнух терпеть не может хмурую погоду. Она обожает солнце, позитивную музыку и свежий утренний полив.»'
|
||||
},
|
||||
{
|
||||
id: 'cherrybomb',
|
||||
name: 'Вишневая бомба',
|
||||
icon: '🍒',
|
||||
cost: 150,
|
||||
cooldown: 'Очень долгая (30с)',
|
||||
damage: '1800 (Колоссальный)',
|
||||
toughness: '300',
|
||||
desc: 'Взрывает всех зомби в радиусе 3х3 клетки почти мгновенно.',
|
||||
lore: '«"Мы взорвемся!", — кричит одна вишня. "Нет, МЫ взорвемся!", — спорит вторая. В итоге взрываются обе.»'
|
||||
},
|
||||
{
|
||||
id: 'wallnut',
|
||||
name: 'Стеноорех',
|
||||
icon: '🌰',
|
||||
cost: 50,
|
||||
cooldown: 'Долгая (20с)',
|
||||
damage: 'Нет',
|
||||
toughness: '4000 (Высокая)',
|
||||
desc: 'Надежная преграда. Задерживает зомби на длительное время своей прочной скорлупой.',
|
||||
lore: '«Люди спрашивают Стеноореха: "Каково это — когда тебя все время кусают?". Орех улыбается: "Я просто держу удар и верю в команду".»'
|
||||
},
|
||||
{
|
||||
id: 'potatomine',
|
||||
name: 'Картофельная мина',
|
||||
icon: '🥔',
|
||||
cost: 25,
|
||||
cooldown: 'Долгая (20с)',
|
||||
damage: '1800 (Колоссальный)',
|
||||
toughness: '300',
|
||||
desc: 'Взрывается при контакте с зомби, но требует 14 секунд на взведение под землей.',
|
||||
lore: '«SPUDOW! — любимое слово Картофельной мины. Она не любит долгих разговоров, предпочитая громкий финальный аргумент.»'
|
||||
},
|
||||
{
|
||||
id: 'snowpea',
|
||||
name: 'Ледяной горох',
|
||||
icon: '❄️',
|
||||
cost: 175,
|
||||
cooldown: 'Быстрая (7.5с)',
|
||||
damage: '20 + Замедление 50%',
|
||||
toughness: '300',
|
||||
desc: 'Стреляет морозными горошинами, которые наносят урон и замедляют скорость ходьбы и кусания зомби.',
|
||||
lore: '«Ледяной горох сохраняет хладнокровие в любой ситуации. Его кумиры — эскимо и северный полюс.»'
|
||||
},
|
||||
{
|
||||
id: 'chomper',
|
||||
name: 'Зубастик',
|
||||
icon: '🌺',
|
||||
cost: 150,
|
||||
cooldown: 'Быстрая (7.5с)',
|
||||
damage: 'Мгновенное съедение',
|
||||
toughness: '300',
|
||||
desc: 'Проглатывает обычного зомби целиком, после чего пережевывает его в течение 30 секунд.',
|
||||
lore: '«Зубастик побеждал на чемпионате по скоростному поеданию хот-догов. Теперь он перешел на диету из зомби.»'
|
||||
},
|
||||
{
|
||||
id: 'repeater',
|
||||
name: 'Повторитель',
|
||||
icon: '🌿',
|
||||
cost: 200,
|
||||
cooldown: 'Быстрая (7.5с)',
|
||||
damage: '2x 20 (Двойной)',
|
||||
toughness: '300',
|
||||
desc: 'Выпускает по 2 горошины за каждый залп. Удваивает огневую мощь линии.',
|
||||
lore: '«Повторитель упорно тренировался в тире, чтобы стрелять дуплетом без промаха. И у него это получилось.»'
|
||||
},
|
||||
{
|
||||
id: 'jalapeno',
|
||||
name: 'Халапеньо',
|
||||
icon: '🌶️',
|
||||
cost: 125,
|
||||
cooldown: 'Очень долгая (30с)',
|
||||
damage: '1800 (По всей полосе)',
|
||||
toughness: '300',
|
||||
desc: 'Уничтожает всех зомби на всей горизонтальной линии и растапливает лед.',
|
||||
lore: '«Темперамент Халапеньо взрывоопасен. Достаточно одной искры, чтобы зажечь всю линию газона.»'
|
||||
},
|
||||
{
|
||||
id: 'sunshroom',
|
||||
name: 'Солнцегриб',
|
||||
icon: '🍄',
|
||||
cost: 25,
|
||||
cooldown: 'Быстрая (7.5с)',
|
||||
damage: 'Нет',
|
||||
toughness: '300',
|
||||
desc: 'Ночное растение. Сначала дает маленькие солнца (15 ☀️), затем вырастает и дает по 25 ☀️.',
|
||||
lore: '«Солнцегриб не любит яркий день, но обожает расти при свете луны.»'
|
||||
},
|
||||
{
|
||||
id: 'fumeshroom',
|
||||
name: 'Дымогриб',
|
||||
icon: '💨',
|
||||
cost: 75,
|
||||
cooldown: 'Быстрая (7.5с)',
|
||||
damage: '20 (Сквозной урон)',
|
||||
toughness: '300',
|
||||
desc: 'Выстреливает волну спор на 4 клетки вперед, пробивая газеты и экраны зомби.',
|
||||
lore: '«"Мои споры пахнут победой!", — заявляет Дымогриб. Зомби с этим категорически не согласны.»'
|
||||
},
|
||||
{
|
||||
id: 'lilypad',
|
||||
name: 'Кувшинка',
|
||||
icon: '🪷',
|
||||
cost: 25,
|
||||
cooldown: 'Быстрая (7.5с)',
|
||||
damage: 'Нет',
|
||||
toughness: '300',
|
||||
desc: 'Плавающая платформа для бассейна. Позволяет сажать наземные растения на водные дорожки.',
|
||||
lore: '«Кувшинка держит на плаву всю команду в водных уровнях. Без нее ни один горохострел не поплывет.»'
|
||||
},
|
||||
{
|
||||
id: 'gravebuster',
|
||||
name: 'Могилоед',
|
||||
icon: '🪵',
|
||||
cost: 75,
|
||||
cooldown: 'Быстрая (7.5с)',
|
||||
damage: 'Уничтожает надгробие',
|
||||
toughness: '300',
|
||||
desc: 'Сажается на могильные камни в ночных уровнях и медленно разрушает их, оставляя монету.',
|
||||
lore: '«Несмотря на грозный вид, Могилоед очень нежный и любит, когда ему чешут кору за ушком.»'
|
||||
}
|
||||
];
|
||||
|
||||
this.zombies = [
|
||||
{
|
||||
id: 'z_normal',
|
||||
name: 'Обычный зомби',
|
||||
icon: '🧟',
|
||||
speed: 'Базовая (0.25)',
|
||||
toughness: '200 (Обычная)',
|
||||
desc: 'Рядовой пехотинец армии зомби. Медленно ковыляет вперед в поисках свежих мозгов.',
|
||||
lore: '«Этот зомби любит мозги. Ничего необычного, просто типичный потребитель пригородной недвижимости.»'
|
||||
},
|
||||
{
|
||||
id: 'z_flag',
|
||||
name: 'Зомби с флагом',
|
||||
icon: '🚩',
|
||||
speed: 'Быстрая (0.35)',
|
||||
toughness: '200',
|
||||
desc: 'Ведет за собой огромную волну нечисти. Появление флага означает максимальный натиск.',
|
||||
lore: '«Флаг зомби символизирует его преданность делу поедания газонов. Ни шагу назад!»'
|
||||
},
|
||||
{
|
||||
id: 'z_cone',
|
||||
name: 'Зомби с конусом',
|
||||
icon: '⚠️',
|
||||
speed: 'Базовая (0.25)',
|
||||
toughness: '560 (200 + 360 конус)',
|
||||
desc: 'Дорожный конус на голове удваивает запас его стойкости перед стрелковыми растениями.',
|
||||
lore: '«Конус на голове защищает от дождя, падающих яблок и горошин. Настоящая вершина пригородной инженерии.»'
|
||||
},
|
||||
{
|
||||
id: 'z_bucket',
|
||||
name: 'Зомби с ведром',
|
||||
icon: '🪣',
|
||||
speed: 'Базовая (0.25)',
|
||||
toughness: '1300 (200 + 1100 ведро)',
|
||||
desc: 'Железное ведро делает его исключительно живучим танком. Пробивать его нужно сообща.',
|
||||
lore: '«Ведро на голове принадлежало безумному маляру. Теперь оно служит идеальным шлемом.»'
|
||||
},
|
||||
{
|
||||
id: 'z_pole',
|
||||
name: 'Зомби с шестом',
|
||||
icon: '🏃',
|
||||
speed: 'Высокая бег (0.55)',
|
||||
toughness: '340',
|
||||
desc: 'Быстро бежит с шестом и перепрыгивает через первое встреченное растение.',
|
||||
lore: '«Бывший школьный чемпион по прыжкам с шестом. Сохранил форму и прыгучесть даже после зомби-апокалипсиса.»'
|
||||
},
|
||||
{
|
||||
id: 'z_newspaper',
|
||||
name: 'Зомби с газетой',
|
||||
icon: '📰',
|
||||
speed: '0.25 ➔ 0.65 в ярости',
|
||||
toughness: '350 (200 + 150 газета)',
|
||||
desc: 'Газета дает временный щит. Когда газета разрушается — впадает в безумную ярость и несется вперед.',
|
||||
lore: '«Он почти закончил разгадывать утренний судоку. Вы испортили его газету — теперь берегитесь!»'
|
||||
},
|
||||
{
|
||||
id: 'z_football',
|
||||
name: 'Зомби-футболист',
|
||||
icon: '🏈',
|
||||
speed: 'Очень высокая (0.48)',
|
||||
toughness: '1600 (Тяжелая броня)',
|
||||
desc: 'Тяжелый американский футболист. Быстро преодолевает дистанцию и выдерживает колоссальный урон.',
|
||||
lore: '«Играет в высшей зомби-лиге. Тренер говорил ему: "Всегда пробивай оборону до конца!". Он помнит этот наказ.»'
|
||||
},
|
||||
{
|
||||
id: 'z_yeti',
|
||||
name: 'Секретный Зомби-Йети',
|
||||
icon: '❄️🧟',
|
||||
speed: 'Переменная (0.35)',
|
||||
toughness: '1350 (Очень высокая)',
|
||||
desc: 'Легендарное редкое существо. При получении половины урона разворачивается и пытается убежать! Сбрасывает 4 алмаза (800 монет).',
|
||||
lore: '«О нем слагают мифы в снежных горах. Мало кто видел Йети лично, и еще меньше тех, кто успел отобрать у него алмазы до того, как он скрылся.»'
|
||||
}
|
||||
];
|
||||
}
|
||||
|
||||
getItem(id) {
|
||||
return this.plants.find(p => p.id === id) || this.zombies.find(z => z.id === id);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user