Буду неспешно пилить io-мобу. Круглые герои, башни, скиллы, предметы, все вот это вот. Отчеты каждый день. Стек: js, phaser, colyseus, с бд пока не определился. Погнали!
>>701927 Да, бродкастит. Второй вопрос не очень понял. Легитимное состояние хранится на сервере, клиенты его читают и воздействуют на него своими сообщениями, которые, опять же, проявляются на легитимность на сервере.
>>701944 я не очень знаю, как работает колизей. вопрос был в том, ждешь ли ты ответ от сервера, прежде чем поменять локальное состояние, или меняешь сразу на основе инпута. если второе, у тебя возможны расхождения с состоянием на сервере. если первое - будут лаги
>>701955 Все иошки в которые я играл, просчитывают перемещение на сервере, на основе твоих инпутов. Да, лаги есть, но до 100мс вполне комфортно играть яскозал. Зато не будет гемора с читерами, лагерами и синхронизацией. В доке, лоле и других страгияобразных так же сделано, и всем ок.
>>702028 Хм, а ведь мобы в таком исполнении ещё нет? Причём игровую сессию можно не делать жёстко привязанной к игрокам. Если один игрок вышел, то на его место может зайти другой, со своим героем.
Коллизии и простенькая атака готовы. Завтра запилю хп, нанесение урона игрокам и что-нибудь еще.
>>702045 Да, думаю сделать бесконечный дэтматч, по крайней мере, на первых порах. А еще крипов не будет. Так что называть это мобой неправильно, наверное. Так, миниэкшнрпгшечка.
Решил вернуться к идее с героями-кругляшами. Сделать их можно няшно, плюс не придется париться с анимациями. йобу только за донатшучу
Идею с просчетом перемещений на сервере отмел, т.к. гемор и лаги. Будет достаточно просто проверять, не ходят ли игроки сквозь стены и не юзают ли спидхак.
Алсо, чекайте другую мою браузерку. https://nvzaa.github.io/dungeon-671/ надо сделать визуальное отнимание/прибавление хп, плюс чтобы окно гемовера не вылезало мгновенно после смерти, не дав понять, что произошло. на днях мб
>>702527 Круто, слуш, Артем, сурсы будешь выкладывать? Я сейчас тоже на колизее хренячу игру (ток пошаговую), интересно посмотреть как другие делают бекенд логику. Со временем пришел к тому, что 1 плеер у меня roomOwner и "главную" логику делает он (физика, AI, еще что-то), в моем случае это работает и при этом я разгрузил сервер частично. А ты пишешь 50/50, если будешь что-нибудь править, будет удобно в 2х местах одну и ту же логику делать?
>>702645 Сурсы - нет. Логика у меня только на сервере. К примеру, работа скиллов: 1. игрок прожал кнопку 2. отправил на сервер USE_SKILL { name: 'bombezhka-zhopy', angle: 87 } 3. сервер просчитал кто попадает под действие бомбежки, отнял им хп (то есть воздействовал на внутреннее состояние), что-то еще 4. сервер отправил всем (в т.ч. использовавшему скилл) PLAY_SKILL_ANIM { name: 'bombezhka-zhopy', angle: 87, playerId: '1488 } 5. каждый клиент проиграл у себя анимацию "на" указанном игроке
И так работает все. Кроме перемещения: оно сообщается серверу по факту совершения.
>>702670 >Логика у меня только на сервере Валидацию от нескольких вызовов одного скила будешь делать? Можешь показать хотя бы как основной gameState на колизее выглядит? map Player; map Units; map skills;?
Цены на домены .io - мое почтение, конечно. 6к у reg.ru, 4.2к у godaddy, 28$ у namecheap. Возьму какой-нибудь .online или .space, цена вопроса 200р +- Накинул один вариант названия игры/адреса сайта: funtasy.space Сервер уже присмотрел, цена вопроса 5-10$/мес, есть вероятность, что будет ок. В гермашке для начала возьму.
Вообще, маняцель разработки - коммерческий успех. Средство достижения банальное - реклама. Раскручивать попробую сайтами-каталогами браузерных игр, самые крупные это crazygames, iogames плюс миллиард более мелких. Также можно будет подключить двач, реддит, етц.
Дедлайн на выкат первой версии: 14-й день. Озвучиваю чтобы сохранять настрой и мотивацию. 3 класса, 12 скиллов, 10 предметов, работающие башни, чатик, лог убийств, большая карта.
Как будут происходить катки, общая механика игры - пока неизвестно, думою.
Этот анон >>702044 прав, конечно, нужно переделать. Старая карта 1600х1600 тайлов. Думаю, 3000х3000 будет ок.
Забавно, что в ОП-посте писал про "неспешно", но получается вполне в темпе.
>>702715 Я не использую typescript, если что. Так что state в виде произвольного объекта.
>Валидацию от нескольких вызовов одного скила будешь делать? При прожимании скилла задаю currentCooldown, и не разрешаю повторно прожимать, пока это значение > 0.
>>702685 да взять обычную концепцию стратегий из 00-х типо варкрафта 2 или вархаммера главное это адаптировать геймплей под быстрый In'n'out чтоб человек заходил, делал катку, и выходил с некоторым опытом, некоторым количество очков, которые бы он мог потратить на развитие и т.д. главное же в .io играх это именно быстрый безболезненный, понятный, не перегруженный лишней информацией, вход и выход а потом уже если ему понравилось пусть остаётся и совершенствуется дальше типо изи ту лёрн хард ту мастер, идеальная формула гиперкэжуал игр возьми как анон из треда ассеты от рпгмейкера и на их основе сделай стратежку, количество игроков в сессии, и размер карты можешь уже настраивать потом в ходе тестов главное в этой игре должна быть идея in'n'out человек должен быстро зайти совершить какой то минимальный набор действий, или даже не совершать его и сразу идти и месить противника
>>702720 первое что приходит на ум в данной концепции это: начало игры, у игрока есть базовый юнит "постройки" который идёт и кушает окружение, юнит типо матка, саранча, таракан, муравей, шарик круглый как агарию, только этот шарик кушает не игроков а окружение, леса, камень, чи ещё какую нить хуету поедая окружение он копит деньги, становясь немного больше и сильнее трятить деньги можно на его лёгкий апгрейд, или на покупку юнитов, которые "рождаются" из него, инкубируются в нём, пока юниты инкубируются, эта "матка" обездвижена или замедленна и уязвима ну а дальше уже дело техники, строим юнитов и отправляем их пиздить чужую матку потеряв матку игрок проигрывает это важно в концепции in'n'out, должна быть конечная цель победы, а не просто уничтожить все юниты и построики врага хотя это тоже можно сделать в качестве достижения победы, но не на ранних этапах цели победы: уничтожить матку накопить определённое количество "еды" не дать сопернику матки развиться, заставлять его держатся на определённом количестве "еды" определённое время ну и много чего уже на этой базе можно повыдумывать
>>702722 >из вархаммера из вархаммера я имел ввиду это захват точек в данной концепции это можно реализовать так, типо на карте есть точки добычи "еды" для матки, особенные захватываешь их, и "курьеры" типо из этой точки\магазина\склада\пещеры таскают еду для матки
>главное же в .io играх это именно быстрый безболезненный, понятный, не перегруженный лишней информацией, вход и выход
про вход я тоже давно понял, но оформление выхода пока только по таймеру придумал. Что меня безумно раздражало в агар.ио (и что в зобмб.ио намного лучше сделано имхо) - это как раз выход. В агар.ио (исходной версии, сейчас там батл рояли вроде тоже появились, но в текущей версии переусложнен вход) ты начинаешь и не знаешь, когда все это кончится. А если остановишься - тебе пиздец.
Также если вспоминать стратегии 90х и 00х, в старкрафте партия могла длиться достаточно долго, что тоже шло во вред фану. Мне нравится идея, что матку нужно кормить, если добавить исчерпаемость ресурсов, то появляется ограничение на катку (можно даже голодные игры делать, лол)
>из вархаммера я имел ввиду это захват точек в ваху не играл, но общую идею вроде бы понял
Спасибо за идею, попробую наваять что-то подобное, по результату отпишусь
>>702762 в агарио вся игра на рейтинг идёт и на накопление баллов типо там нет конечной цели, конечная цель стать топ1, самым жирным и заработать по больше баллов
>>702867 Мне кажется он не про перфоманс, а просто токсик. Кстати на каком хосте серв будешь покупать? А то у меня горький опыт был с русскими хостами постоянно бля отваливается, хотя пишут 99.9%
>>703017 Пока придумал и пилю такую механику: в один момент времени у каждой стороны деактивирована одна башня, какая именно - выбирается случайно каждые 1-2-3? минуты (офк выбирается самая дальняя на линии). Враги могут прийти и сломать ее. При выпиле всех башен хотя бы на одной линии (2-3?) трон становится уязвимым, можно его сломать и победить.
постить теперь буду по мере запила контента, а не каждый день
>>703071 >какая именно - выбирается случайно Только не это. Минимизируй рандом по возможности. Пусть будет лолоподобный критшанс, но вот это точно фана не принесет. И опять же: а что делают игроки, пока таверы активны? Ну тип вот я на миду сделал фб. И чем мне заняться дальше?
>>702060 > с перемещением на сервере Ты просто изобретаешь велосипед. Движение на сервере, на клиенте тоже движение + предсказание и лагокомпенсация + коррекция от сервера. Читни эту серию статей https://m.habr.com/ru/post/302394/
>>703112 А какой именно способ подойдет для игры ОПа? Хотя у него примитивная 2D йоба. Но какой вариант подойдет для большой чанковой ММО, хранить снимки состояний будет слишком дорого.. Есть еще что читнуть?
>>706230 Проблема любых не опытных гейм-девелоперов. Как только проходит вдохновение от 1 до 14 дней обычно, всё забрасывается, либо переключается на новую идею и так далее.
А фарм нейтральных юнитов будет? Что с сетью, просто вебсокеты делал и не парился? Матчи или закидывание игроков когда угодно как обычно в ио? Если первое, трафик будешь покупать, чтобы матча по 24 часа не ждать? Под зум разные спрайты рисовал или не?
>>706639 >фарм нейтральных юнитов будет? Нет. 5х5 на такой карте будет не пустынно. >Что с сетью, просто вебсокеты делал и не парился? colyseus >Матчи или закидывание игроков когда угодно как обычно в ио? Второе. Кидает в рандомную комнату, в которой есть место для тебя. Сломал башни -> сломал трон -> катка по новой. Позже запилю рейтинги, чтобы было на что дрочить. >Под зум разные спрайты рисовал или не? Не, зачем?
Из заметок: больше никогда не писать код без типизации.
>>706816 Из за типов, из за них родимых. Как то потратил на дебаг вечер, а оказалось что в какую то парашу передавался не объект нужного "типа", как написано в апи, а массив из одного элемента с этим объектом мимо
>>701894 (OP) Оп ты действительно молодец. Впервые за этот год удивил тред в /b/. Даже тред в /gd/ есть, кто же знал, что среди васянов такой гений появится. Стек отличный выбрал, желаю тебе удачи и успехов с игрой.
>>706921 >Поподробнее. Сам чет не замечал. Сначала я был в синей команде, союзники были синими, а враги красными. Потом я перешел в красную команду, сам отображался красным, союзники красным, враги синим. Спустя время союзники начали отображаться синим, враги красным.
>>706919 Что-то слишком много сарказма на один пост. ОП, конечно, молодец, что пытается сделать игру, но нахваливать его пока рано, слишком сырой прототип.
>>706924 Обычно если игру делают, это скопированная по образцу из готовых ассетов на Юнити. Чтобы на Фазере игру делать уже мозги нужны, а ОП пишет не только клиентский код, но и серверный что в два раза сложнее. Да игра сырая, но за 6 дней он достиг таких успехов, которых мало кто достигает из начинающих геймдев разработчиков. Как один анон пишет >>706233 , они пробуют не получается и бросают. Проще скопировать чужое, чем делать свое. Оп не просто так боится загружать свой код на гитхаб, ему будет обидно, если кто-то украдет его тяжелую работу и выдаст за свою, а бояться будет только действительно тот, кто старался и делал.
>>706929 Вообще-то в /gd/ много игр "не из готовых ассетов на Юнити". Где-то тут есть даже очень похожая веб-игра, где анон достиг чуть больших успехов (что было дальше не знаю). Кроме того, нахваливать за клиентский/серверный код пока рано, игра лагучая и багучая, почти неиграбельная, а ОП тратит уйму времени на дебаггинг, следовательно код он писал не слишком внимательно (навалить кучу говнокода любой сможет, если вложит в это достаточно времени, в этом нет какого-то великого достижения; а качество его кода мы можем оценить только по наблюдаемым багам, лагам и глюкам).
И потом, если он выложит на гитхаб под свободной лицензией, это будет не "украл", а "форкнул". Да, кто-нибудь может просто скопировать и запустить свой сервер, но кто-то может начать развивать и сделать игру ещё лучше - в этом вся суть опенсурса, ты можешь развивать чужой проект, когда даже автор забил на его развитие (или умер, или по любой другой причине больше не может работать над ним). Многие популярные в прошлом игры умерли навсегда лишь из-за того, что разработчик, владелец или издатель решили закрыть невыгодный проект, а исходные коды остались закрытыми. Многие бывшие игроки таких мёртвых проектов просят отдать им исходные коды, чтобы можно было продолжить то, что не смог изначальный разработчик. Разве было бы плохо, если бы проект продолжал жить и развиваться даже после смерти своих изначальных разработчиков?
>бояться будет только действительно тот, кто старался и делал Также будет бояться тот, кто не старался и навалил кучу говнокода, за которую его могут высмеять. А также тот, кто натырил готовых решений из туториалов и склеил в клубок лапши, за что тоже будут высмеивать. Так что "я старался и поэтому никому не дам" - не единственный возможный сценарий.
ОП, я нисколько не преуменьшаю того, что ты уже сделал, но нахваливать тут пока реально не за что. Тебе ещё долго работать над игрой, чтобы довести её до презентабельного состояния... А то тебя сейчас перехвалят и потом будет очень больно сталкиваться с жестокой реальностью, в которой нужно не только сырой прототип склеить)
>>706932 По-моему это как-то связано с обновлением игры, когда клиент теряет связь с сервером. Сделай уже принудительное обновление страницы после потери связи с сервером. Или хотя бы уведомление "сервер всё".
>>706936 Ты прав, листаю и действительно много хороших игр. Странно, что ты так строг к этой игре, всего ведь 6 дней делается. Насчет гитхаба, тут те кто уже хорошо игры делают им заходить туда вообще нет смысла. Плохие же разработчики форканут в лучшем случае, а в худшем будут наживаться на игре. Если бы разрабы открыли код старых игр было бы печально увидеть их новые версии с лутбоксами.
>>706951 >всего ведь 6 дней делается Ты что-то путаешь, шестой день был три недели назад: >>701894 (OP) >02/10/20 Птн 20:29:29 >>702670 >07/10/20 Срд 21:27:43 > День 6.
>>706951 >ты так строг к этой игре Похвалами делу не поможешь. Лучше указать на ошибки, которые можно исправить, чем безосновательно хвалить. Можно указать на что-то, что понравилось лично тебе - это будет иметь смысл, в отличие от "ты делаешь игру = ты молодец".
>те кто уже хорошо игры делают им заходить туда вообще нет смысла По-твоему в опенсурсе только плохие разработчики копаются? >Если бы разрабы открыли код старых игр было бы печально увидеть их новые версии с лутбоксами Существуют опенсурсные клоны старых игр. Существуют оригинальные исходники старых игр. Где же версии с лутбоксами? https://github.com/id-Software/DOOMhttps://github.com/id-Software/Quake и другие игры от id Software https://github.com/minetest/minetest - опенсурсный клон майнкрафта Мне лень перечислять все опенсурсные игры, но что-то я не вижу среди них "жертв лутбоксов". Да и правильно реализованные лутбоксы приятно видеть в игре, они не выкачивают из тебя деньги и только радуют)
>>701894 (OP) Сделай игру пободрее. Сейчас получается так: - бежать до чужой базы или хотя бы первой вражеской базы - долго; - ХП игрока слетает за 2-3 удара чужой башни/игрока; - самоотхил очень долгий, фонтан не лечит, карманных хилок нет; - деньги на шмотки копятся очень долго, даже в доте шмот раньше покупается, чем здесь; - из-за лагов пвп/пве сильно затруднено, даже тупо по башне попасть трудно; - для победы нужно вынести все башни, а это очень долго. Моё предложение такое: - или карту сжать, или увеличить скорость движения; - ХП должно быть побольше и самоотхил повыше, лечилки дешёвые добавь; - цены на шмот снизь, нужны несколько уровней шмота - от беспонтовой дешёвки до дорогой имбы; - нужен какой-нибудь прицел (кроме курсора мыши), возможно автострельба как в доте; - условие победы, да, я слышал, ты собираешься сменить на только одну линию, это норм. Ещё можно TDM на время/число убийств и CTF на время/флаги замутить для разнообразия.
>>706961 >лечилки дешёвые добавь Или лучше точки на карте, где спавнятся одноразовые лечилки. Потому что даже если можно прокачать регенерацию или сбегать на базу, всё равно должен быть способ не выходить из боя лишний раз. Сейчас лучшая тактика выноса башен - встать рядом и кликать на неё, пока не умрёшь, затем снова добежать до башни и снова кликать, это уныло.
Алсо я так и не понял, можно ли уклониться от атаки? Игрок может промахнуться, а башни вроде не промахиваются совсем. В Доте 2, насколько я помню, снаряды башен летят медленно и от них можно буквально убежать, а у тебя по-моему башни бьют мгновенно и со 100% точностью.
Да, на счёт динамичности - в такую игру никто не будет играть с долгим развитием как в доте (там катка минимум полчаса, а то и целый час), должно быть максимум минут 10. Следовательно геймплей нельзя растягивать долгой ходьбой, долгим регеном, долгим фармом монет и т.д.
Я знаю, существуют ММОРПГ с точно таким же стилем графики, в которые задротят не меньше, чем в крупные ММО, но у тебя вроде как прицел на быстрые бои, а не длительное развитие?
>>706983 Сейчас зашёл - работает. Скорее всего у него IP-адрес меняется (No-IP не сразу цепляет новый IP).
>>706971 >Это в фазере, надо просто задать время жизни таким частицам Хочешь сказать, эти частицы у него остаются в памяти даже когда исчезают? У него явно какая-то утечка в клиенте.
У меня есть другая теория: 1. Т.к. башни стреляют струёй огня, а не снарядом, у каждой башни есть своя струя, по умолчанию невидимая. 2. Когда башня стреляет в игрока, она поворачивает свою струю в направлении игрока и временно делает её видимой. 3. Когда игра завершается, комната сбрасывается, но струи огня башен по ошибке становятся видимыми, не скрываются. 4. Если подойти к вражеской башне, она снова выстрелит - её струя развернётся и скроется как положено. Т.е. проблема в шаге 3, на котором процесс сброса комнаты зачем-то делает видимыми эти струи огня. Вангую, это вообще не частицы, а анимированные спрайты, там всего несколько кадров.
Апдейт с фиксом известных багов, улучшением баланса, логином/регистрацией тру-анонимусы по-прежнему смогут оставаться анонимусами, рейтингом сегодня до конца суток. Нравится пилить, но иногда такая лень наступает, что только обещание на дваче мотивирует, лол.
>>707010 >7.jpg Зачем на листочке? Поди потом сам же будешь гадать, что за слово ты написал) Может от руки и быстрее, но мне больше нравится в Inkscape такие схемы набрасывать.
>>706995 >Хочешь сказать, эти частицы у него остаются в памяти даже когда исчезают? У него явно какая-то утечка в клиенте Клиент и написан на фазере, скорее всего он юзает группу для хранения всех эффектов или эффектов игрока, так вот там вручную надо очищать ее чтобы с экрана все лишнее убрать, вообще в js нет сборщика мусора и там надо ручками вычищать все говно, а учитывая как там массивы криво работает и т.п. То это становится болью
>>707035 >свой почерк всегда поймешь Я когда в школе учился, к последним классам вообще перестал понимать свои записи на уроках. Да даже записи своих идей по программированию с тех времён не могу расшифровать. Так что мне проще напечатать, чем возиться с ручкой и бумагой... На компе в любом случае удобнее, даже если схемы придётся мышкой строить. И показать другим людям проще, им-то придётся в твоём почерке разбираться, чтобы прочитать.
>>707036 >в js нет сборщика мусора и там надо ручками вычищать все говно Правда? Я думал, в JS-то он обязан быть. Тогда понятно, откуда у него утечки/нарастающие со временем тормоза)
Блин, такие проекты вдохновляют запилить что-то похожее, но JS и сеть для меня дремучий лес...
>>707083 >проблема не в типах, а в мутабельности! Ты видел хотя бы одну сложную игру на функциональном ЯП, в котором все переменные получают значение всего один раз в своей жизни, при создании? Как, по-твоему, должна будет выглядеть игра, если для каждого действия игрока нужно создавать новый объект Player, потому что ни одно из его полей невозможно перезаписать? А в функциональном майнкрафте пришлось бы заново генерировать новый мир для изменения любого отдельного блока (и нет, одним чанком дело не обойдётся, ведь кроме чанка нужно пересоздать хранилище чанков; разве что остальные чанки можно перетащить в новое хранилище, но всё равно геморрой).
И как иммутабельность поможет ОПу, если у него в коде, условно, нужно заменить >Tower.Flame.Visible = true на >Tower.Flame.Visible = false // или добавить эту строчку в метод Room.Reset(), в цикл обхода всех башен и тогда пламя не будет оставаться на экране, а для переписывания на чисто функциональную парадигму уйдут недели?
Хотя это спор ни о чём, нужно смотреть конкретный код и тогда будет понятно, что там и почему.
>>707086 >в идеале нужно это как-то отключить А в других HTML5-играх отключается? У меня вот проблема что иногда игра не перехватывает фокус клавиатуры и нажатие на backspace (набирая сообщение в чате) отправляет на предыдущую страницу (экран входа в игру)...
>если для каждого действия игрока нужно создавать новый объект Player Ты не очень понимаешь, о чем говоришь: изучи матчасть, пойми, как это реализовано и т.п.
>И как иммутабельность поможет ОПу Я вот на это ссылаюсь: >3. Когда игра завершается, комната сбрасывается >или добавить эту строчку в метод Room.Reset(), в цикл обхода всех башен Ты же понимаешь, что "комната сбрасывается, но не до конца" - это баг мутабельности? И что "обход всех башен и вызов ресет" - это артефакт мутабельности? При нормальном подходе ты просто выкидываешь старое состояние комнаты и все. Грубо говоря, вот есть у тебя переменная counter, тебе нужно его сбросить; ты пишешь: counter = 0, а не начинаешь как-то там менять биты в текущем значении, чтобы привести его в итоге к нулю, если фаза луны сегодня правильная. Вот и тут то же самое.
>>707100 >У меня вот проблема что иногда игра не перехватывает фокус клавиатуры Два чаю, тоже бывает. Если еще пользуешься вимиумом или подобным расширением - не дай бог забудешь добавить сайт в исключения. Еще иногда почему-то в файрфоксе "западает" клавиша, типа нажимаешь w - и персонаж идет вверх, пока не перезагрузишь страницу. Еще иногда появляется какая-нибудь левая прокрутка, если позумишь страницу. Вообще гейминг в браузере - изначально ущербная идея, конечно. Когда думают жопой о технологиях, а не о юзере.
>>707139 >При нормальном подходе ты просто выкидываешь старое состояние комнаты и все По-моему тут как раз проблема в том, что он возвращает состояние по умолчанию (все спрайты видимы). То есть сброс происходит, но это сброс к состоянию по умолчанию (0, false, null), а не к состоянию "как задумано геймдизайнером" (hide = true).
>ты пишешь: counter = 0, а не начинаешь как-то там менять биты в текущем значении, чтобы привести его в итоге к нулю Если у меня не переменная counter, а объект Room, то у него должен быть метод Create, в котором происходит инициализация. Инициализация будет включать создание вложенных объектов и вызов метода Reset, устанавливающего исходные значения полей. Если в будущем мне нужно вернуть Room в изначальное состояние, я могу просто вызвать Room.Reset. Room.Reset в свою очередь вызывает Tower.Reset всех вложенных Tower, которые были созданы вызовом Tower.Create в Room.Create. Как видишь, всё просто, ничего не нужно уничтожать и заново создавать, всё создаётся один раз и сколько угодно раз может быть возвращено в исходное состояние.
А чтобы можно было "Room = CleanRoom", нужно создать новый объект CleanRoom, а затем уничтожить Room и присвоить Room ссылку на CleanRoom, что эквивалентно созданию Room заново. Поскольку операции с Create/Destroy слишком дорогие, лучше сбросить состояние вызовом отдельного метода Reset, чем создавать объект заново.
Просто представь, что у тебя counter содержит не биты, а пачки пачек пачек пачек ... пачек битов, и ты не можешь просто так взять и присвоить миллион битов сразу, тебе нужно сначала собрать пачку битов, потом пачку пачек битов, потом пачку пачек пачек битов... и так далее, пока у тебя не получится новый counter, которым ты можешь заменить старый. Но это будет слишком долго по сравнению с тем, чтобы послать сигнал сброса вложенным объектам, не уничтожая и не создавая их заново.
Проблемы начнутся только если программист был пьян и создал новое поле, забыв присвоить ему значение в Reset, но уже где-то использует его. Чтобы такого не было, нужно каждому новому полю сразу присваивать начальное значение в Reset - но только если нам вообще нужно когда-либо возвращаться в это самое начальное значение (обычно смысла в полном сбросе нет).
>>707139 >Вообще гейминг в браузере - изначально ущербная идея, конечно. Когда думают жопой о технологиях, а не о юзере. Ущербная идея - рендерить 3D-графоний процессором на интерпретируемом языке в и без того тормозном браузере. А 2D-игры в браузере могут быть неплохими и даже удобными - ты можешь играть на любом ПК, планшете и смартфоне, просто открыв браузер. Единственный фатальный недостаток - зависимость от сервера, но онлайн игры так и так от этого зависят... Юзерам ведь реально удобнее зайти через браузер, чем что-то качать и устанавливать (хотя обычный пользователь не догадывается, что браузер качает игру в кэш, потом кэш ломается, игра качается вновь и т.д.).
>>707154 >По-моему тут как раз проблема в том, что он возвращает состояние по умолчанию (все спрайты видимы). >1. Т.к. башни стреляют струёй огня, а не снарядом, у каждой башни есть своя струя, по умолчанию невидимая.
>Если у меня не переменная counter, а объект Room Ты путаешь identity и value. Корректным было бы сравнение "если у меня не число типа Int, а объект типа Room".
>объект Room, то у него должен быть метод Create У объекта Room метод create? И что же комната создает? Это уже и с точки зрения ООП никуда не годится.
>Если в будущем мне нужно вернуть Room в изначальное состояние, я могу просто вызвать Room.Reset В котором тебе нужно не забыть вызвать reset для всех дочерних объектов. И для всех объектов, на которые у тебя могут быть ссылки. Точнее не для всех, а только для тех, которые надо сбросить. Еще могут быть кэши и пулы... И еще тебе нужно удостовериться, что никакие иные объекты не ссылаются на твой Room или его дочерние объекты, потому как ты их сбрасываешь, т.е. логически (с точки зрения игры) это уже другая комната. И еще тебе нужно не забыть внести соответствующие изменения по всю эту портянку при рефакторинге. Ну программисты же умные, не забудут, да?
>Как видишь, всё просто )) эх, вот бы мне вернуться лет на 15 назад, тогда тоже все было просто
>А чтобы можно было "Room = CleanRoom", нужно создать новый объект CleanRoom Зачем создавать новый объект, если данные иммутабельны?
>Поскольку операции с Create/Destroy слишком дорогие Кто сказал?
>лучше сбросить состояние вызовом отдельного метода Reset, чем создавать объект заново Чем лучше? Ты понимаешь, что сейчас всерьез пытаешься "оптимизировать" создание одной структуры раз в 15 минут (или сколько там матч идет), что как бы намекает на непонимание принципов и методов оптимизации?
>Но это будет слишком долго по сравнению с тем, чтобы послать сигнал сброса вложенным объектам, не уничтожая и не создавая их заново. Во-первых, это будет присваивание одного указателя - и все. Во-вторых, см. предыдущий абзац. В-третьих, еще раз тебя прошу: прочитай литературу по теме, прежде чем строить домыслы и пытаться на их основе вести дискуссию. Это непродуктивная трата времени.
>Чтобы такого не было, нужно каждому новому полю сразу присваивать начальное значение в Reset ...вот еще немного подумай в этом направлении и как раз придешь к иммутабельному дизайну, лол.
>>707154 >Ущербная идея - рендерить 3D-графоний процессором 3д графоний в браузере рендерится гпу. И 2д, собственно, тоже.
>ты можешь играть на любом ПК, планшете и смартфоне, просто открыв браузер Браузер, в котором игра рендерится через опенглное апи. Которое доступно и без браузера. На мой взгляд самый идеальный пример всего этого безумия - это веб-билд какой-нибудь стратегии про покрас на юнити, ну или аналогичного жанра игр, где все завязано на интерфейсе. Вот тогда получается просто идеально: у тебя браузер, в котором как бы хтмл5, и в нем один элемент, в котором рендерится игра, в которой свой уи-фреймворк.
>Юзерам ведь реально удобнее зайти через браузер, чем что-то качать и устанавливать На смартфонах, где у юзеров есть выбор, никто не пользуется клиентами через браузер (потому что это убого), все устанавливают приложение. Это не про удобство, а про безысходность, потому что "так исторически сложилось".
>>707153 Ты весь день один апдейт пилишь или некогда игрой заниматься? Если крупный апдейт пилишь - тестируешь на своей локальной версии, отдельной от публичной?
Вчитался в подсказки в игре. "Магическое исцеление" требует 200 маны и даёт 300 маны, в результате прирост 100, но использовать можно только если есть больше 200. Это нормально? Я не спец в РПГ и фентези, но обычно какое-то действие не может одновременно требовать ману и давать ману - оно либо тратит ману на какой-то процесс, либо синтезирует ману из какого-то материала/собирает её из окружающей среды. Мана же "магическая энергия", если бы можно было тратить ману на получение большего количества маны - получился бы вечный двигатель, как заряжать батарейку от самой этой батарейки.
...хотя, по лору маг может тратить ману на ритмичные сокращения ануса, в результате чего резко увеличивается пассивный сбор маны из окружающей среды и поэтому маны получается больше, чем было затрачено, да и с геймплейной точки зрения элемент интересный (нельзя получить ману, если только что заюзал всё что было)... Просто показалось странным, когда заметил.
>>707161 Во-первых, ты слишком придираешься к терминологии. Во-вторых, мы из разных миров; ты профессионал, а я любитель, и отрицание(любовь(я(), функциональный(язык()))). Я собирался возразить и привести аргументы, но зачем, если каждый останется при своём и будет по-своему прав. И вообще это тред проекта ОПа, а мы тут флудим о программировании...
>>707169 Куда третье очко статистики дел? Там вроде уничтоженные башни считались. Алсо кроме убийств и смертей обычно считают "помощь" - если "убйством" считается последний нанесённый удар, то "помощь" это нанесение урона игроку, который вскоре после этого умрёт от чужого удара. Если уж считать башни, то для них тоже нужен отдельный параметр "помощи в сносе башни". Не то, чтобы это было очень нужно, но многие геймеры, я думаю, любят дрочить на циферки и писькомерство... Кому-то может не нравиться чистое пвп, они могут пытаться побить рекорды по сносу башен, например.
>>707174 >фаст тп на базу и к любой живой союзной башне с небольшим кулдауном >прожал - стоишь n секунд без движения и получения урона - тпшишься В доте для этого вроде как специальные свитки телепортации юзались, покупаются дёшево на базе.
>>707175 >а лучше йоба-реген, когда постоял на месте, или йоба-хилки Можно просто прерывать реген после получения дамага. Большинство игр с регеном так и делают: пока получаешь дамаг, регениться не можешь, если скроешься от врагов за преградой или сбежишь - сможешь относительно быстро излечиться. Однако возвращение на базу всё равно нужно, там же магазин.
>>707179>>707182 Лол, чего вы хотите от прототипа, который всего дня два онлайн? Да и пик числа игроков онлайн пока не превысил вместимости одной комнаты, насколько я понимаю. Но соглашусь, ручное создание комнат с уникальным ID - хорошая фича, во разных подобных играх видел.
А конфа в дискорде есть, немного выше ОП постил >>706863
>>707164 >Вчитался в подсказки в игре. "Магическое исцеление" требует 200 маны и даёт 300 маны, в результате прирост 100, но использовать можно только если есть больше 200. Это нормально? Я не оп, но оно дает ману и ближайшим союзникам, то есть 1500 маны может дать. Но только раз в 15 секунд. Вполне нормально. Часто еще делают спеллы по типу "отдай 200 маны сейчас, получи 400 маны в течение 30 секунд". Это распространенная механика в том числе и в настолках.
>>707167 Так мой основной поинт в том, что ты сперва попробуй и разберись, а уже только после этого делай выводы о любви\нелюбви. Иначе получается (как это часто и бывает), что "не читал, но осуждаю". А по поводу частностей особо смысла дебатировать нет, угу, тем более в итт треде.
>>707197 Добавлю, что в случае мтг (даже без учета трешолд-эффекта) это далеко не просто +1 мана; смысл тут в том, что это инстант, поэтому ты можешь иметь 2 маны в манапуле, и твой соперник будет рассчитывать свой ход исходя из этого, а ты ВНЕЗАПНО можешь заиметь 3 маны вместо этого, и кастануть соответствующий спелл, который ты по мнению соперника скастовать не мог. То есть "истинная" механика тут немного другая, но основа та же, да.</offtop>
>>707169 >чекайте Ты хотя бы объявляй время сходки, чтобы тест был полноценным, типа >йо, сегодня в XX:X0 мск проводим тест %фича_нейм%, нужно NN анчоусов, иначе не получится Потому что просто заходить на пустой сервер, полчаса бегать в одиночестве и выходить, не дождавшись соперников - это бред, да и один на один тоже не очень. Если бы у тебя была ММОРПГ, где можно было бы занять себя ПвЕ, фармом, крафтом, квестами и т.д., если бы у тебя была песочница, где можно было бы строить всякую хрень в одиночестве, если бы у тебя были боты вместо недостающих живых игроков - тогда был бы смысл заходить на пустой/полупустой сервер. У тебя соревновательная игра 5 на 5 игроков, из ПвЕ контента только снос башен (унылый донельзя - стоишь на месте и кликаешь, ладно ещё абилки можно юзать с умом, чтобы быстрее башню разобрать, но этого мало) - мало того, что игроку нечем заняться в одиночестве, так и тестеру сложно протестировать геймплей игры, который будет в полноценных боях 5 на 5 (или хотя бы 3 на 3).
Вот, допустим, ты сейчас по просьбам ребаланснул атаку и цены, а как это повлияло на игру 5 на 5? Неизвестно. Если бы твоя игра была бы уже популярна, игроки бы сами находили друг друга и писали отзывы о текущем геймплее, а пока популярности нет - нужно объявлять время тестов. Ну и дни, когда ориентировочно собираешься проводить очередной тест. В остальном, даже держать сервер 24/7 смысла пока мало (уверен, 95+% времени на него никто не заходит, ибо не с кем).
Кстати, ботов делать будешь? Во многих io-играх, по-моему, есть боты, как минимум в портах на мобилки (некоторые даже маскируются под онлайн, хотя на деле играешь всегда только с ботами). Грустно будет игроку, который оказался 101 и не попал ни в одну из 10 уже заполненных комнат, а хотя бы 102 всё ещё не заходит.
Запилил тред в /b. Ближайшие пару часов будет народ. Попробую каждый вечер создавать. Интересно, модеры задушат? С другой стороны я пропагандирую другие разделы помимо раковника с двач-я-посрал и танцулько-тредами.
>>707259 Лаги возрастают с течением времени и до перезагрузки страницы. В какой-то момент от нажатия на клавишу навыка (1-4) до применения навыка проходит больше секунды. Сообщения в чат поступают через 2 секунды. В общем, с таким лагодромом играть нереально, при том что компьютер не перегружен (хотя может браузер только одно ядро нагружает?).
>>707262 У тебя Firefox? У меня Firefox (Nightly 84). ОП говорит, что на хроме лагов нет или их меньше, но у меня нет хрома.
Если это >>707132 >Очень странный там сборщик и у каждого брузера свой правда, то, возможно, проблема действительно со сборщиком мусора Firefox. Но мусор за собой всё-таки нужно убирать)
Только что обнаружил и убил процесс firefox, загруженный на 30% ЦП и 1 ГБ RAM, по всей видимости он завис и не мог завершиться самостоятельно. Могла ли это быть эта игра? У меня на каждую вкладку создаётся отдельный процесс (мне так удобнее), а когда сегодня вечером пытался поиграть со всеми на сервере - вкладка с игрой сильно тормозила, аж интерфейсные кнопки не сразу отвечали, не факт, что она закрылась корректно. Хотя ничего не могу гарантировать, я потом ещё кучу вкладок открывал и в фоне у меня пара десятков вкладок в т.ч. несколько с ютубом (заметил только после запуска другой игры - процессор загрузился на 100% и я полез искать, кто создаёт такую нагрузку).
В любом случае, рекомендую ОПу сфокусироваться на проблемах с лагами/утечкой ресурсов. Наверняка где-то забываешь корректно освободить какую-нибудь картинку, а в результате клиент перегружается этими картинками)
Лайфхак: лучше сначала нарисовать архитектуру проекта схематически, прежде чем переходить к кодингу/рефакторингу. Даже если не хочешь выкладывать код, такую схему проекта продемонстрировать не страшно) Нубам урок, а опытные смогут что-нибудь подсказать по этой схеме.
>>707295 Я не ОП. А зачем карту с сервера подгружать? Имхо, подгружать нужно только то, что динамически меняется. Если произойдёт существенное обновление контента игры, игрок должен будет нажать F5 (ctrl+F5) и таким образом скачать клиент заново.
>>707301 Можно было бы рендерить случайные карты на сервере и клиент бы подгружал просто, это же обычный массив с кодом тайла, да и так надежнее, но я так понимаю на сервере коллизии не проверяются? Я не стал долго рыться в коде ОПа если что, вот только не пойму, там сжато все или ОП пишет в функциональном стиле?
>>707302 >Можно было бы рендерить случайные карты на сервере и клиент бы подгружал Я так понимаю, цель ОПа - сделать статичную карту а-ля Дота2, только в формате io-игры. Плюс такой карты - игрок может задрачивать навыки, тогда как на рандомной карте рандом будет влиять на исход каждого боя. Кроме того разработка хорошего генератора карт - отдельная тема, ему до неё ещё далеко)
>только не пойму, там сжато все или ОП пишет в функциональном стиле? В чате он говорил что пропускает через какой-то обфускатор, т.е. то что ты видишь - не исходный код. Да и как он, по-твоему, может писать код вида "function n(t,e,i,n,r,s,o,a)"? Это же явно обфусцированный код.
А мне вот непонятно, зачем ему 13 отдельных js-файлов, каждый из которых подгружает одну png-картинку (см. пикрилы)... Он говорил, что это результат работы обфускатора, но как по мне, так нафиг этот обфускатор нужен, если он зафлуживает проект лишними мелкими файлами? Они занимают отдельное время на загрузку и интерпретацию, и место в кэше для хранения. Может выглядит как мелочь, но суммарно выходит много (будет заметно сильнее, если проект начнёт развиваться и пополняться контентом). Почему нельзя загружать картинки из одного скрипта?
>>707086 >в опере Все в 2008-й, включаем автономный режим. Ну ты сам все понимаешь по своему сарказму
>>707302 Карта всегда одинаковая, рандома в этом плане не будет. Да, коллизии сейчас не проверяются на сервере, любой какер, угоревший по сетевому коду, сможет ходить сквозь лес, но только тссссс! В будущем надо будет при помощи того же фазера (@geckos.io/phaser-on-nodejs) создавать экземпляр игры на сервере и проверять их.
Предметы хранятся в items.json, который общий для сервера и клиента. Зачем что-то подгружать, если он 2 кб и статичен?
>>707192 Сейчас озадачился мотивационной частью игры. По завершении катки будет появляться окно со статистикой всех игроков: - убийства + ассисты - общий нанесенный урон игрокам, башням и трону - сломанные башни + ассисты - командная работа (сколько отхилил союзникам, сколько баффов наложил)
За твое место в каждой из таблиц будут даваться очки (например, #1 - 10, #2 - 6, #3 - 3, далее 2, 1). Очки игроков команды-победителя будут умножены 2, например. За трипл-киллы, доминейшны и прочие эпичные мувы будут даваться какие-то медальки, на которые все женщины будут смотреть и течь. Будет месячныей рейтинг (+недельный?, дневной?). Топовые игруны клешнями будут получать соответствующие короны возле ника. При достижении какого-то количества очков можно будет выбрать скин покрасивше. Я бы рад добавить возможность ставить свои кастомные картинки, но как тогда понять, кто из чьей команды, какого класса?
>>707179 В главном меню будет список комнат с количеством игроков. Сможешь присоединиться к одной из или создать свою. И даже скопировать код комнаты чтобы кинуть корешу.
Лаги поправлю, ей-богу, руки не доходили еще.
itch.io даже траффик дает, на первой странице по некоторым тегам, где-то даже в топ 5, есть переходы с главной (?????). 50 просмотров, 21 запуск за 3 дня. Запилил превью покрасивше.
Также надо будет отслеживание траффика добавить, откуда люди приходят, просто записывать в базу их referrer.
Автобаланс сделаю. Когда разница в кол-ве игроков по командам критичная, выбираем в преобладающей команде игрока с меньшим кол-м киллов, пишем ему мол "через 10 секунд будешь переброшен", потом "через 5", потом перебрасываем.
>>707315 >>в опере >Все в 2008-й, включаем автономный режим Настоящая Опера давным-давно сдохла, остался только прикольный скин для хрома с пачкой ненужных фич из коробки, который по недоразумению всё ещё называют оперой. Однако тебе стоит позаботиться обо всех возможных браузерах, или по крайней мере ставить заглушку "играйте на современном браузере", чтобы пользователи не жаловались на баги. Но ты пока для хрома и фаерфокса оптимизируй всё, чтоб не начинало дико лагать, когда в комнате больше 2 человек.
>создавать экземпляр игры на сервере Звучит как костыльный велосипед с палками в колёсах.
>Все сжато webpack'ом. И картинки тоже, судя по коду? А нахрена ты png сжимаешь, шакал? Сжимать png дополнительно - только увеличивать время загрузки. Лучше будет оптимизировать его объём каким-нибудь графическим редактором (некоторые умеют удалять из png всё лишнее; ещё можно убрать лишние оттенки и сохранить в 256-цветовой палитре, если не нужен альфа-канал).
>Сейчас озадачился мотивационной частью игры. Чего там озадачиваться? Уровень игрока + монетки + премиумные баксы + персонажи и скины к ним + шмот (например, начальный шмот для входа в бой, или усилялки, или навыки) + лутбоксы со всем перечисленным. Таблицы рекордов и всё такое это хорошо, конечно, но 95% игроков будут ниже тысячи, а хвастаться перед друзьями "я сегодня с 15230 места перешёл на 14543" как-то беспонтово. При этом топ-10/топ-100 всегда удерживают самые хардкорные задроты и донатеры, если читеров нет... Таблицы - зло, короче. Лутбоксы - ангелочки в сравнении с таблицами. Таблицы могли быть приятным бонусом в 90-х, когда ты мог соревноваться только с друзьями, но с приходом интернета получение 15634-го места совсем не мотивирует (особенно когда на первом месте стоит X@k3P со счётом 999.999, а следом за ним едет паровозик из донатеров-"акул", и ещё пара тысяч задротов). А вот лутбоксы обязательно, лутбоксы это хорошо, люблю пускать лутбоксы по вене, открываешь лутбокс и кайфуешь, лутбоксы лучше секса, обязательно реализуй лутбоксы. Шучу. Нет, не шучу. Одной рукой пишу пост, другой открываю лутбокс.
>Я бы рад добавить возможность ставить свои кастомные картинки Ты быстро перестанешь радоваться, когда твой сервер завалят дикпиками, говном, ниграми и ЦП. Не забывай, где ты пиаришься) >как тогда понять, кто из чьей команды, какого класса? Команда - цветной контур. Класс - пиктограмма. Но чтобы всё уместить, придётся поработать над дизайном. Алсо хорошо бы зафиксировать масштаб, но разрешить сдвигать камеру вбок относительно персонажа, в доте так можно (но там ещё ограниченное поле видимости врага, можно видеть только то, что рядом с твоими напарниками/глазами на палке). А то уже несколько раз попадал в ситуацию, что меня видят, а я в это время приблизил камеру и разглядываю траву... А нуб даже не успеет узнать, что камеру можно отдалять, чтобы видеть больше врагов. Ну и миникарта пригодится (значки - пиктограммы классов, команда - цвет пиктограммы; пиктограмма должна быть однотонной, разумеется, если хочешь - могу примеры предложить).
>В главном меню будет список комнат с количеством игроков Не забудь реализовать команду /room, красноглазикам проще пичатать команды в чат, чем целиться мышой в гуевы кнопки.
>itch.io Ссылку-то дай, нам самим искать?
>Лаги поправлю, ей-богу, руки не доходили еще. >Также надо будет отслеживание траффика добавить Пока лаги не поправишь, я тебе и без отслеживания могу сказать, что трафик сквозь игру проходит all the way through. Шучу, исправление лагов не добавит контент для достаточного удержания игроков))
>выбираем в преобладающей команде игрока с меньшим кол-м киллов ТЕБЯ ЗАБРОСИЛО В КОМАНДУ НАГИБАТОРОВ @ ВРАЖЕСКАЯ КОМАНДА ОБОСРАЛАСЬ И ЛИВАЕТ @ >через 10 секунд будешь переброшен @ ТЫ ПЕРЕБРОШЕН РЕАКТИВНОЙ СТРУЁЙ
С таким "автобалансом" фармить очки на те же скины будет слишком трудно, ящитаю. Даже в крупных сессионных играх а-ля овердроч не перекидывают во вражескую команду, а подбрасывают новых игроков или оставляют как есть (в соревновательных матчах). Ты не представляешь, насколько это больно, оказаться в команде, против которой ты только что воевал и почти победил.
>>707417 Справедливости ради, потом я смог найти в диспетчере задач процесс вкладки с игрой (по pid) и он потреблял, кажется, около 7% ЦП и 150 МБ RAM, но это после захода в пустую комнату, где ты один, в то время как серьёзные лаги возникают через какое-то время после игры с несколькими людьми. А вкладка, которая загружала на 30% и требовала гигабайт памяти - возможно, была связана с ютубом, т.к. после её убийства у меня все вкладки с ютубом покорёжило.
Да и глупо пенять на стек технологий, если говнокодер наговнокодит на любом стеке, а профессионал сможет выжать максимум возможностей из любого говна, на котором придётся работать.
Нужно будет проверить нагрузку вкладки с игрой через диспетчер задач и about:performance во время крупного боя... или создать клонов отдельным окном с игрой... Но с сервером какие-то проблемы сейчас.
>>707502 >нужен срочно оптимизон >As of today, the compiler still has its limitations and we are patiently waiting for and prototyping future WebAssembly features Пытаешься убрать из своей игры лично тобой сделанные костыли @ Добавляешь в игру чужие костыли, на которые ты повлиять не можешь
Компилируемый код, конечно, быстрее интерпретируемого, но это не решает проблемы, а только маскирует их. Ну вот у него допустим полоски ХП долго рисуются. Сейчас он это заметил с 3+ игроками на сервере. Если он сейчас скомпилирует код, возможно, код станет чуть шустрее, но проблема не исчезнет, только будет проявляться с 6+ игроками на сервере. При этом он потратит время на переделывание кода под требования компилятора и отладку возможных проблем, вместо того, чтобы просто поменять способ отрисовки полосок здоровья (например, сделать сегменты вместо непрерывных полосок).
tl;dr: это не оптимизация, это костылизация.
Алсо по моим наблюдениям, WebAssembly последних версий Unity-плеера не может работать на последних версиях Firefox: происходит какая-то безудержная утечка памяти (десятки гигабайт) и игра крашится, не успев загрузиться, так что я сильно сомневаюсь, что перекатиться с JS на WA очень просто - там слишком много тонкостей, о которых ОП точно не знает.
>>707557 Я точно знаю что WA еще сликом сырой чтобы на нем игры пилить, даже простые примеры вылетают с ошибками в моем хроме и по наблюдениям жс работает быстрее чем WA на 30%
>>707976 -Эй, Джон смотри, ты когда-нибудь видел такой огромный древний храм? -Нет. Пошли, посмотрим, какие тайны он в себе хранит. -Я не думаю что это хорошая идея. -Не трусь, мы посмотрим и уйдем, все равно мы уже натаскали достаточно дров для лагеря. -Ты как хочешь, а я возвращаюсь в лагерь. -Ладно, иди, я тебя догоню. Чем ближе Джон подходил к храму, тем больше он жалел о том, что не послушал своего друга. Оказавшись около его входа, он без лишних мыслей вошел в храм… -Бен, беги! -Что ты натворил?! -Не когда рассказывать уносим ноги скорее!
Запилено: - Создание комнат, присоединение к существующим, лимит в 10 игроков - В одну комнату нельзя с одним и тем же IP - Подсвечивается ник в скорборде - Статистика битвы по завершении. За каждый тип активности даются алмазики. Не по занятому месту, как изначально планировал, а по показателю активности, умноженному на соотв. коэффицент. Из алмазиков формируется месячный рейтинг ниже - 1 место - драконовая корона, 2 - аметистовая, 3 - алмазная, 4-10 - золотые, 11-20 - серебряные, 21-30 - бронзовые - Короны показываются на главной странице, в чате, в логе убийств, в статистике битвы
Проблема с лагами решена одной строчкой. Она была, как и предполагал, в полоске хп.
При изменении хп игрока/башни/трона, я перерисовываю полоску методом .fillRect объекта типа Graphics. Казалось бы, если поверх старого квадратика нарисовать новый квадратик, который полностью перекрывает старый, то при рендере нам не нужно рисовать старый. Ан нет, предыдущие .fillRect наполнили commandBuffer графического объекта девятью тысячами команд на отрисовку квадратиков, и метод рендера проходится по ним.
hpGO.clear() для очистки буфера перед перерисовкой и все заебумба.
Офк, сейчас выглядит уныло. Просто у меня был челлендж - как можно быстрее сделать что-то и чтобы оно хоть как-то игралось. Доказать, что я не фантазирующий шизик-кирилл, который что-то годами пилит, но так и не запиливает.
Планы: - Path finding - Targeting system - Крипы - Разнообразие героев - Разнообразие предметов
Крипы будут ходить по жестким маршрутам, каждый по своей "рельсе", не следуя за врагами. Конечная цель - вражеский трон. Встретил вражеского героя, крипа или башню - атакует. Также можно добавить лесных мобов, эпичных драконов, которых будет смысл зачем-то убивать - ради баффа, денег, итемов, очка статистики, etc. Эти мобы будут тупо стоять на месте и атаковать ближайшего врага.
Коллизий не будет, так меньше гемора.
Добавлю звуки, музычку на фон, будет веселее.
Алсо, ищется хуйдожник для рисования анимаций скиллов, иконок героев/мобов и чего угодно, к чему лежит душа. Бесплатно, конечно же. @nvzaa, nv#9898
>>712394 Советую тебе бросить эту затею, получается какая-то лажа не понятная, для кого, и главное зачем. Не опыта ты из этого полезного не получишь, не анонам чего либо. Заведи пет проект на хабе и делай что нибудь полезное в портфолио. Мобу делать когда ничего не понимаешь, пустая трата времени
>>712457 Делай то, что считаешь нужным, это твой проект и тебе решать, что с ним делать. Однако этот >>712420 прав в том, что сейчас проект выглядит как >какая-то лажа не понятная, для кого, и главное зачем. Полезный опыт ты из этого проекта извлечёшь, уже извлёк (хотя бы про типизацию), но как игра... пока сомнительно.
>>712686 >что нового в индустрии несет этот проект Ты рофлишь? Как еще проект? Еслиб это был очередной китайский клон допустим на мобилки того же лола или доты, то ладно, ради быстро поднять кэша, анона понять можно. Но это, помимо того что находится в виде прототипа, так тут не механик, не арта, не чего-то уникального, ничего нет. И возникает закономерный вопрос, зачем, почему, для чего?
>>712702 То же самое говорили про агарио и слизерио. Времяубивалки, не привнесшие абсолютно ничего нового, однако в какой-то момент заполонили нишу тонной игроков и родили направление ио-игрушек на любой вкус.
>>713192 Начались мантры про - сперва сделай, потом критикуй?
Мне не надо поесть говна чтобы сказать что это говно. И я пишу, что выглядит твоя игра как говно, играется точно также. Прошло, сколько уже, месяц, два, с момента разработки? И что ты показываешь в итоге? Слепленное говно за пару дней на юнити/годоте/рпг макере или на любом уже готов движке.
Еслиб ты действительно хотел даже в мечтах что-то родить, пусть даже для фана в /b/ ты бы уже сделал кривое поделие, а то что ты показываешь это хуже разработки ленивого-чсвшного-червя пидора.
Не понимаю зачем ты выёбываешься и защищаешь свою парашу на которую потратил за всё время не больше пары часов разработки, из которых половину это ты смотрел видосики на ютубе как вывести картинку на экран.
>>713209 Зачем ты такой живешь? В смысле это не агрессивный выпад в твою сторону, но мне просто интересно, чем ты руководствуешься когда вбрасываешь не обоснованную критику, а просто "говно говна говну говном"? Ты же тратишь и свое время и возможно трепишь нервы опу
>>713288 Короче не буду писать очевидно что это ссанина. И останется ссаниной через пол года, год, помните это. Тех кто защищает этот кал прочтите этот пост через пару месяцев, и убедитесь что я был прав.
Сажа+скрыл. рака яичек ОПу, такого бездаря надо еще поискать на всей доске
>>713209 >Слепленное говно за пару дней Каждый раз проигрываю. Типичный пост человека, который в жизни ничего не разрабатывал и понятия не имеет, сколько времени может уходить не то, что на сам код, а на ПЛАНИРОВАНИЕ ебаного кода.
>>713218 Все просто. Есть массив с определениями 12 крипов, по 6 на каждую команду. Определение каждого крипа это waypoints, по которым он должен следовать, и описание базового скилла-атаки. С интервалом в n секунд каждый спаунится в waypoints[0].x, waypoints[0].y. Затем в цикле в функции onUpdate проходимся по каждому крипу: если в области его видимости есть враг, то бьем. Если нет, то немного продвигаемся дальше, к ближайшему недостигнутому вейпоинту.
Есть проблема: крипы могут накапливаться, стакаться в одной точке. В качестве временного решения буду давать им разный радиус атаки.
>>713305 Постоянно зажимать кнопки движения утомительно же. Пусть лучше будет по православному, ведь истерично кликать мышкой, дроча героя из стороны в сторону это неотъемлемая часть геймплея моб.
>>714374 Ты там на слух, что ли, звуковые эффекты нормализуешь? Пиздец у вас там в шиндусе NOSOFT, в линупсах с полдюжины команднострочных инструментов для того, чтобы у всех аудиофайлов в каталоге подогнать громкость под один уровень.
>>718205 Я иду по пути наименьшего копротивления, и ковыряние в протоколах вместо использования того, что дает ванильный колизеус, не входит в планы, увы.
Спок парни, оп занимается сменой работы и попутно вкатывается в юнити. Всегда считал его калом, но делать игры наполовину мышкой изкаропки, попутно кодя на немного похожем на приличный язык цэ решетке, не так уж плохо, оказывается. В ряду ассетодебилов пополнение.
Данный же проект люблю, продолжение запила не за горами. Перспективы туманны, геймплей под сомнением, онлайн не гарантирован, баланс в экселе не просчитан, графон спизжен, звуки не нормализованы, работает только в последнем хроме, но мы идем!
>>718470 А ведь тебе, как типичному кириллу сказали в начале что ты делаешь хуйню, и ты продолжал её 2 месяца, пока не понял что надо делать игру, а не маятся хуйнёй.
>>719976 Поц, проверь свой жабаскриптовый радар. Я как раз писал ОПу что он хуйнёй маится, или ты думаешь он еще не съебался со своего треда с обосраными трусами?
Начнем с матрицы, по которой будем искать. Наш тайловый редактор Tiled сохраняет карту в json, где каждый слой это массив вида [0, 0, 222, 333, 100, 0, 0, ...]. Мы заблаговременно все объекты с коллизиями кидали на отдельный слой. Нам как раз и нужен массив, в котором пустые места это 0, а не пустые - число больше нуля. Массив одномерный, а нам нужен двумерный - используем функцию chunk либы lodash, передав ей ширину мирка.
Клиент кликнул в точку на карте, выслал на сервер координаты этой точки X:Y. На сервере мы каждую целочисленно разделили на 32 (ширина клетки мирка), получили индексы конечных точек в нашей матрице. Передаем их в функцию поиска пути и получаем двумерный waypoints, т.е. точки следования. Путь можно сгладить функцией smoothenPath, чтобы персонаж не двигался прям по клеточкам.
На сервере, в функции onUpdate, потихоньку передвигаем персонажа к первому недостигнутому вейпоинту (см. Vector2.MoveTowards в том же юнити, чтобы понимать о чем речь). Достигли - удалили его.
Теперь если в качестве цели был выбран враг. В момент выбора мы так же нашли waypoints до этого врага. Так же записали их и двигаемся по ним. Один момент: в onUpdate нужно их пересчитывать в момент, когда враг меняет свою позицию. Сначала я думал, что это фейл - 20 раз в секунду пересчитывать пути 10 гипотетических героев. Ведь у нас в лучшем случае есть всего 50 мс на каждое обновление, и, скажем, 6 мс на каждый поиск нас уже не устроит. Методом теста выяснил, что на каждый поиск уходит ~1-2 мс. Но стоит ограничивать расстояние, на котором поиск срабатывает. Не разрешать выбирать слишком далекие точки для следования, ведь карта 100х100 клеток, и сервер загнется, если начнет считать перемещение из одного угла в другой, например. Возможно, в один момент я неиллюзорно пососу, когда одновременных битв станет больше одной-двух-трех не станет, ведь жс-пидоры снова соснули
О коллизиях, сквозь которые нельзя прострелить, написано выше. В момент, когда расстояние до врага меньше радиуса атаки героя, просто проверяем, что линия атаки не пересекается ни с одним полигоном коллизий. Если пересекется, то ничего не делаем и двигаемся дальше.
>>720465 Спасибо. > smoothenPath Позволяет срезать путь, а не идти через центры тайлов, верно?
> 20 раз в секунду пересчитывать пути 10 гипотетических героев. Часть путей можешь считать на клиенте. Как минимум пути героя к точке. Серверу только валидацию нужно будет делать.
Могу проконсультировать по геймплейной составляющей. Самая главная проблема твоего проекта - онлайн. Думай, как будешь эмулировать других игроков ботами. Нужны ли тебе команды и вся моба механика? Команды уменьшают вероятность сражения (сравни с десматчем). Моба механики ограничивают подключение (и отключение) новых игроков во время боя.
Исходи из требований: 1) Единственный игрок на сервере сможет играть. 2) Игрок может подключиться после старта боя. 3) Дисконнект любого количества игроков не портит опыт всем остальным. 4) Игроку с первой секунды понятно, что нужно делать.
Вот тебе концепт для сравнения: Игрок управляет маленькой машинкой. Катается, дрифтует, собирает бонусы. Машинка имеет "пулемет" и способности. Бой может быть дезматч, батлрояль, "догонялки". За бои зарабатываешь валюту. За валюту покупаешь/прокачиваешь машинки.
>>720615 >Позволяет срезать путь, а не идти через центры тайлов, верно? См. пик, наверное, ты это и имеешь в виду.
>Часть путей можешь считать на клиенте Годно, услышал тебя.
Я сейчас как раз пилю разделение на рейтинговые матчи и фановые. В первом режиме все жестко - если вписался в игру, то за лив будешь наказан. С учетом того, что катки будут по 5-10 минут, они должны набираться рано или поздно, при хоть каком-нибудь онлайне. Можно сделать 3х3 чтобы ускорить процесс. К запиливанию этого режима меня подтолкнуло наличие прокачки в игре. Ведь при классическом io-раскладе ты будешь заходить первоуровнемым лошком, а там уже васяны макс уровня с предметами. А так все будут стартовать в один момент и даже есть спортивная составляющая когда-нибудь проведу двач кап
Если все-таки хочется хаоса и шлюх, и ранкед катка еще не набралась, то добро пожаловать во второй режим. В любой момент зашел, в любой вышел. Можно и тут сделать какой-то цифродроч, какой-то отдельный рейтинг. Либо чтобы он влиял на основной, но слабо. Что-нибудь придумаю. Виджет с поиском ранкед катки будет висеть во время фановой катки.
>эмулировать других игроков ботами Проще застрелиться
>Единственный игрок на сервере сможет играть Технически да, но смысла колупать крипов и башни в одно рыло нет. От нейтралов отказался
>Игрок может подключиться после старта боя Фан режим
>Дисконнект любого количества игроков не портит опыт всем остальным В фан режиме не портит. Там и автобаланс есть, если что
>Игроку с первой секунды понятно, что нужно делать Если не сегодня подключил интернет, то разберется. Но какую-нибудь справку на видном месте все равно сделаю. Мб ты что-то другое имеешь в виду.
>>720629 >они должны набираться рано или поздно, при хоть каком-нибудь онлайне Зная, как ты будешь сегментировать игроков (регионы, режимы игры, "наказанные"), ты можешь посчитать, какой онлайн тебе нужен. Прикинуть длину средней игровой сессии. Посчитать необходимый дау. Посчитать необходимое количество активных юзеров. Подумать, где ты их возьмешь.
> Если не сегодня подключил интернет, то разберется. Но какую-нибудь справку на видном месте все равно сделаю. Мб ты что-то другое имеешь в виду. Я хочу сказать, что игрок будет попадать в твою игру случайно, жать "старт игры", бегать 10 секунд и закрывать вкладку навсегда. Возможно он бы поразбирался, если бы это была единственная игра на свете, но к сожалению свободного времени у людей гораздо меньше, чем хороших игр. Ты будешь конкурировать со стимом и апстором. Получается, что у тебя есть буквально 5-10 секунд, чтобы заинтересовать игрока. Сравни с http://slither.io/. Матч ищется мгновенно. Игра цепляет с первых секунд. И разбираться в ней не нужно.
- просмотр хп, маны, стат, скиллов, итемов других героев по клику - задержка на респаун в зависимости от уровня - произвольное перемещение камеры - фокус на своем персонаже на пробел
стремно заебывать доску своими однообразными высокохудожественными высерами с минимальными отличиями, но это мотивировало с самого начала, иначе никак, извините
А что там по сетевой части, как организована? Или ты просто отдал всё на откуп колизею и сам не в курсе, чё как? У меня так в 13-ом году моба на ноде накрылась, когда я посчитал, что не смогу держать более нескольких сотен игроков на одном сервере. Если каждому юзеру слать хотя бы десять апдейтов в секунду, да ещё делать проверки, сервер охуеет. И дело тут даже не в ноде, а в природе браузерных реалтаймовых игр. По-моему, без доступа к p2p их банально дорого содержать. Но я могу ошибаться.
>>721816 Щас впс с 2 ядрами пиздатыми всего 400р/мес стоит. В одном потоке сетевое взаимодействие пилишь, на втором обсчет игровой логики. Все, можешь держать онлайн в 2-3к запросто, считая для каждого по 10 раз в сек числа фиббоначи.
>>721872 >Щас впс с 2 ядрами пиздатыми всего 400р/мес стоит Не верю. Не окупится месяц работы двух мощных ядер, они электричества больше сожрут. Я когда гуглил, находил что-то похожее только от 100 баксов.