Новости Тангарии (многопользовательский рогалик)

Продолжаю допиливать в Тангарии (мультиплеерном рогалике) всякие крутые штуки. У нас много обнов: в игре появился «постоянный» (не пропадающий после смерти) RPG-прогресс — за достижения уровней и победу над боссами вы получаете Очки аккаунта, которые дают приятные бонусы — возможность постройки домов бОльшего размера, дополнительное место на складе и проч.

Свежие патчноуты подъехали как раз сегодня (на англ).

Также вводятся новые классы. Недавно доделал друида, вот стрим с его демонстрацией:
https://www.youtube.com/watch?v=6D-HvqoeT6k

Запись опубликована в рубрике Блог разработчика. Добавьте в закладки постоянную ссылку.

30 комментариев на «Новости Тангарии (многопользовательский рогалик)»

  1. Witcher говорит:

    Узнал про твой переезд в Израиль. Круто. Поздравляю и желаю успехов! Имея израильское гражданство походу теперь для вас открыты двери для переезда в англоязычные страны — Канада, США, Великобритания, Австралия (пробейте этот вопрос), может быть там вам будет проще адаптироваться чем в самом Израиле. По поводу программирования — как и писал раньше, советую пройти экспресс курсы по ООП и методично, не распыляясь, идти в сторону Java/Kotlin/Android.

    • tangar говорит:

      Спасибо! Нам тут нравится; как в Голландии, только теплее 😉 Насчет кодинга — пока хочу по плану: допилить на Си, потом курс cs50 допройти, а там уже java

      • Witcher говорит:

        Рад за вас! Ты говорил что не нравятся CMS, а хочется писать на стороне сервера, в таком случае почитай про микросервисы, их можно писать и на C/С++, и на Java. Это надо джуниором пытаться устроиться в англоязычную контору, или сначала хотя бы стажёром — там и научат.
        Ещё вам давали совет, на первых порах попытаться найти кибуцы — это такие популярные сельскохозяйственные организации в Израиле (лучше конечно выбирайте в районах где знают русский/английский), там скорее всего можно и жильё дешевле найти, и устроиться на хорошо оплачиваемую работу — будете помогать по хозяйству, а ваше образование (почвоведение) очень даже может пригодиться.

  2. Witcher говорит:

    Нашёл твой блог на сайте скобки, словарный запас это конечно замечательно, но грамматику английского всё же надо подтянуть обязательно (и мне тоже, кстати)! 😀 Так вот, про питон вы там написали в основном правильно, как мне кажется. Лезть туда нет смысла, если вы в школе не преуспевали в математике, а в Data Science и ML (machine learning) будет МНОГО зубодробительной математики. Если есть желание пощупать TensorFlow и нейросети — его можно использовать в том числе из под C++. Да, пайтон пригоден для быстрого прототипирования, но его якобы «лёгкость» на самом деле иллюзорна, точно такой же быстроты кодинга можно добиться на C++ если найти хорошие удобные библиотеки/классы, но при этом скорость работы программ будет в разы быстрее. Короче, рекомендую пропустить курс пайтона, и сразу перейти к изучению Java/Kotlin и Android Studio. После Си с классами — их освоить достаточно просто. На хабре несколько дней назад пробегала статья «Почему вам следует полностью переходить на Kotlin» (ссылку можешь загуглить) — в сжатом виде синтаксис, всё довольно несложно, и там больше учить придётся вещи касающиеся непосредственной разработки под андроид. Современный Javascript/Typescript — обычно учат когда надо работать на дядю, бэкендером под Node.js, вечная сумасшедшая свистопляска с React/Angular/Vue — если очень хочется этого «счастья», тогда велкам. 😀 Хотя базовый Javascript/HTML/CSS3/Responsive Web Design чисто для создания сайтов — знать надо обязательно.

    • tangar говорит:

      мы идем по cs50, там пайтон на очереди, так что пропускать не будем) надо просто к нему относиться как с инструменту скриптинга

  3. Witcher говорит:

    Существует правило разбора, которое называется «право-лево»

    Всё предельно просто. Имеем:
    () — функция, возвращающая…
    [] — массив из…
    * — указатель на…
    Процесс разбора итеративный:
    1. Первым делом находим имя, от которого и будем плясать. Пляски начинаются со слов «Имя есть…»
    2. Следующий шаг — шаг вправо. Что там у нас справа? Если (), то говорим, что «Имя есть функция, возвращающая…». (если промеж скобок что-то есть, то «Имя есть функция, принимающая то, что между скобок, и возвращающая…») Если там [], то «Имя есть массив из…» И таким вот образом мы идём вправо до тех пор, пока не дойдём до конца объявления или правой ) скобки. Тут тормозим…
    3. …и начинаем танцевать влево. Что у нас слева? Если это что-то не из приведённой выше таблицы (то есть не (), [], *), то просто добавляем к уже имеющейся расшифровке. Если же там что-то из этих трёх символов, то добавляем то, что написано в таблице. И так танцуем до тех пор, пока не дотанцуем до конца (точнее — начала объявления) или левой ( скобки. Если дошли до начала, то всё готово. А если дошли до (, то по уже означенной итеративности переходим к шагу 2 — пляски вправо продолжаем.

    Пример:

    int (*(*(*fptr)())[3])();
    ^^^^
    1. Hаходим имя и записываем «fptr есть…»

    2. Шаг вправо, но там ), потому идём влево

    int (*(*(*fun)())[3])();
    ^
    и получаем «fptr есть указатель на…»

    3. Продолжаем ехать влево, но тут (. Идём вправо

    int (*(*(*fun)())[3])();
    ^^
    получаем «fptr есть указатель на функцию, возвращающую…» Снова ), опять влево.

    4. Получаем

    int (*(*(*fun)())[3])();
    ^
    «fptr есть указатель на функцию, возвращающую указатель на…» Слева опять (, идём вправо.

    5. Получаем

    int (*(*(*fun)())[3])();
    ^^^
    «fptr есть указатель на функцию, возвращающую указатель на массив из трёх…» И снова справа ), отправляемся влево

    6. Получаем

    int (*(*(*fun)())[3])();
    ^
    «fptr есть указатель на функцию, возвращающую указатель на массив из трёх указателей на…» Снова разворот вправо по причине (

    7. Получаем

    int (*(*(*fun)())[3])();
    ^^
    «fptr есть указатель на функцию, возвращающую указатель на массив из трёх указателей на функции, возвращающие…» Тут конец описания, поехали влево и получили окончательную расшифровку этой каракули 8.

    int (*(*(*fun)())[3])();
    ^^^
    «fptr есть указатель на функцию, возвращающую указатель на массив из трёх указателей на функции, возвращающие int»

    Всё!

  4. Witcher говорит:

    Для переносимости типов можно использовать pstdint.h (portable stdint.h), там общепринятые названия типов со строго заданным размером: int8_t, int16_t, int32_t, int64_t. Я их вообще сокращаю до одной буквы i32 u32 i64 u64. Кстати, для программирования под Винду надёжнее родной Microsoft Visual C++ (Express, Community) и Platform SDK/Windows SDK, а с Embarcadero возможны непредсказуемые косяки и неполная совместимость.

    • tangar говорит:

      угу, я в последнем видосе это показывал. плз пиши лучше комменты, связанные с ИТ на сайте skobki.com 🙂 там они больше в тему

  5. Witcher говорит:

    Видео на канале Айтишник у тебя душевные, ламповые, вдохновляющие! Твой отчим был прав, когда советовал тебе идти по пути программирования и IT. Никакой ты не «гуманитарий» на самом деле, с логикой у тебя всё в порядке, это называется разностороннее развитие. По поводу пайтона хотел добавить ещё. Согласен с тобой полностью, синтаксис языка неудобный по сравнению с си-подобными языками. Но это полбеды, он ещё и плохо совместим между версиями — там всё время вставляют, выкидывают, переписывают фичи, чехарда и свистопляска постоянная, обратная совместимость хреновая, и так далее. Вот бывает берёшь скрипт .py, и ему надо обязательно найти точную версию, подверсию, чтоб хоть что-то завелось без ошибок, не всегда конечно, но у меня такие случаи бывали нередко! Я бы конечно забил на изучение этого уродливого недоязыка, но коммьюнити вынуждает, и сейчас объясню почему. Конечно, есть хрустальная мечта свести всё к подмножеству Си/Си++, но, на практике так не во всём получается, к сожалению, хоть и много где можно пролезть. Я долго игнорировал тему нейросетей, изучив её в 2000-х с нуля — перцептроны, алгоритмы backpropagation писал сам, экспериментировал, и из-за слабых вычислительных мощностей того времени стал довольно скептически относиться к возможности успешной эволюции в данном направлении, пока не появились алгоритмы игры в Go, а окончательно добило Dall-E, когда модели нейросети рисуют невероятно подходящие по смыслу и качественные картины из заданного набора слов. По сути был изобретён, без преувеличения, Бог Хаоса на минималках, только таким странным неоптимальным способом. Это безусловно очень страшная технология, которая по моему скромному мнению, вероятно — причастна к синтезу РНК коронавируса (версия конечно спорная, но многие учёные активно используют нейросети, которые теоретически могли бы помочь именно в таком деле). И в ближайшем будущем, скорее всего мы будем иметь дело со страшнейшими катастрофами, вызванными технологической сингулярностью, на базе нейросетевых разумных агентов. Конечно, большинство о последствиях не думает пока не грянет гром и не клюнет жареный петух. Будущее покажет, смогут ли люди обуздать, ограничить и обезопасить жуткие технологии апокалипсиса. И вот представь себе вся эта «кухня» делается на пайтоне, понимаешь? То есть, чтобы кодить и минимально понимать нейросетевые «колдунства» и пользоваться достижениями из опен-сорса — придётся осваивать, госпади спаси, питонячье уродство. Конечно, хотелось бы чтобы народ делал на Си/Си++, но стандартная библиотека Си — недоразвитая, она остановилась в развитии где-то в 90-х, а стандартная библиотека шаблонов Си++ — натурально отпугивает людей своим громоздким синтаксисом, оверинжинирингом, обилием избыточных фич и неудачным выбором длинных наименований базовых сущностей. Почему я и говорю, чтобы успешно пользоваться подмножеством Си/Си++ придётся или много самому изобретать, или ковыряться на гитхабе в поиске подходящих для себя альтернатив (по ключевому слову «Awesome C++» можно накопать много гениального). Вот так и получается, что хочется ограничиться одним языком, а окружение вынуждает учить все эти пайтоны, котлины, свифты, привязанные либо к конкретной области знаний, либо к конкретной платформе.

    • tangar говорит:

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

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

  6. Witcher говорит:

    На счёт первой цивилизации — это любимая игра Виктора Кислого (если не знаешь, это белорусский мультимиллионер, основатель Wargaming, игра World Of Tanks), он играет в неё в перерывах между работой 😀 А действительно, там всё схематично, юниты хорошо выделены, похожи на шахматные фигуры, в то время как в последующих графонистых цивилизациях они сливаются с фоном, геймплей в Civ1 упрощённый, как раз то что надо для казуальной игрушки.
    По поводу быстрого запуска и как пропустить заставку — ты там вряд ли пропатчишь дисасмом, потому что во время интро создаётся карта игры, поэтому просто нажми любую клавишу и увеличь количество Cycles (скорость) в dosbox во время заставки — тогда оно сгенерируется быстрее.

    • tangar говорит:

      ну пропатчить можно все что угодно)

      • Witcher говорит:

        Если не веришь, то вот цитата из официального мануала по первой цивилизации:

        «If you select Start New Game, EARTH, or Custom World, the computer will create a new world. During this time the Evolution sequence will be displayed (In the beginning…). If you press a key during the Evolution sequence, the sequence will be terminated AS SOON AS THE NEW WORLD HAS BEEN COMPLETED. This may take some time, especially on slower computers.»

  7. Witcher говорит:

    Тангар похоже суровым кодером заделался. 😀 Похвально! Под Винду рекомендую библиотеку Win32++, для этого надо прокачать скиллов до уровня Си с классами (C++98/C++03), это во многих случаях вполне юзабельное и полезное дополнение к чистому Си. А под Андроид — Котлин без вариантов, сейчас как раз сам его учу. Кстати, многое из того что ты делаешь на Си — никуда не пропадёт, и там тоже вполне может пригодиться, используя Android NDK.

    • tangar говорит:

      ага) плюс сейчас ковыряю дизасм. вдогонку сокеты, СДЛ и прочий инструментарий

      • Witcher говорит:

        Ознакомление с x86-асмом не помешает тем кто не застал времена программирования под DOS, но сильно увлекаться асмом нет смысла, скажу тебе откровенно, код на ассемблере тяжело читать. По сокетам, если надумаешь делать сервер под линукс — смотри в сторону epoll, статьи найдёшь на хабре. Если решил делать легковесные игры с нуля, то канвас от СДЛ самое то, а чтобы по-быстрому замутить игру и попытаться продать под десктоп (а это сейчас сделать к сожалению не просто, т.к. рынок переполнен низкосортной индюшатиной), то многие рекомендуют Godot Engine — он открытый, кроссплатформенный и бесплатный.
        Если ты действительно полностью изучил Си, то настоятельно рекомендую довести уровень знаний хотя бы до уровня Си с классами. Классы — всё же намного круче чем обычные сишные структуры, это и автоматически вызывающиеся деструкторы объектов, конструкторы, перегрузка операторов, можно менять поведение в зависимости от типов, ссылки, виртуальные функции, полиморфизм, инкапсуляция, наследование, всё это — обыкновенная магия ООП, которая позволяет значительно упростить разработку и уменьшить объём кода на порядок, базовый Си++ (си с классами) использует большинство разработчиков игр, прикладного ПО, там где идёт рост сложности. Управлять сложностью — удобнее с помощью классов. Также после освоения ООП, будет быстрее вход в программирование под смартфоны на Джаву, Котлин и Свифт.

        • tangar говорит:

          Спасибо за годный коммент 🙂 Да, классы надо изучать. Но для этого нужна задача, пока такой нет. Попробую что-нибудь придумать

          • Witcher говорит:

            Я спецом сравнивал реализацию на процедурном си и потом переписывал на си с классами. Там выигрыш у меня получался где-то в 20 раз. Т.е. 20 страниц кода превращались в одну, код становился лаконичнее, проще, и понятен буквально сразу без лишних комментариев. Классы это очень полезная штука, и доучить там тебе осталось совсем немного. Ну конечно ещё всё зависит и от творческого подхода, и изобретательности, ведь можно и на модернистских плюсах так наговнокодить бессмысленные слои новомодных «паттернов проектирования» с шаблонными нагромождениями, что уж лучше порою бывает действительно остаться на чистом си. 😀

      • Witcher говорит:

        Посмотрел твоё видео по Cygwin. По поводу «легковесности» ещё можно поспорить, у меня CentOS в виртуалбоксе работает в несколько раз шустрее, чем даже самая лайтовая графическая оболочка от Cygwin. К тому же, тебе все равно придётся использовать Valgrind чтобы ловить утечки памяти, а под Cygwin ты его не заведёшь без танцев с бубном, да и с другими инструментами и совместимостью тоже потом будет веселье. У меня виртуалбокс компилирует всё прямо из расшареной виндовой папки и потом запускает сервер для тестирования — очень удобно.

        • tangar говорит:

          виртуалбокс тяжеловат.. у меня сейчас ведро ржавое с 4Гб оперативки)

          • Witcher говорит:

            Ты не поверишь, но у меня тоже на этой машине всего лишь 4 гига :), бери линукс менее прожорливый, но совместимый с либами на проде, я, например, для CentOS6.5 зарезервировал 700 мегабайт в виртуалбоксе, Acceleration: VT-x/AMD-V, PAE/NX, полёт нормальный, даже файрфокс хорошо работает, правда надо обновить сертификаты, подключил ещё локальный репозиторий с DVD образов, root autologin, настроил ALT+TAB switching, пофиксил по мелочам, сегодня ещё поддержку HTTPS добавил для тестирования некоторых вещей, немаловажно и то, что сервер работающий на Linux может быть доступен и из под Windows через Port Forwarding. А Cygwin он больше для портирования софта под винду, там особо не развернёшься.

            • Witcher говорит:

              700 мегабайт ОЗУ, разумеется, на HDD нужно резервировать около 6 гигабайт.

      • Witcher говорит:

        Я заметил, что ты себе заказал книгу по Verilog/схемотехнике, для железячников. Специально скачал, полистал. Это ж вроде для тех, кто осваивает основы FPGA (программируемые пользователем вентильные матрицы), оно слабо коррелирует с геймдевом. Для хардкорного геймдева полезнее повторить тригонометрию, линейную алгебру, векторы, школьный курс физики (механика). На форуме gamedev dot ru — найдёшь единомышленников, там обычно собираются затейники, любящие изобретать с нуля 😀 Могут посоветовать в какую сторону копать для твоего конкретного случая.

        • tangar говорит:

          она мне нужна для асм, которым я правлю свой сервер в Аллодах 2. ну и в целом, чтобы разобраться как оно все внутри устроено. насчет тригонометрии и проч — меня мало интересует фронтенд и клиенты вообще. меня интересует программирование на сервере, геймплей. а как оно выглядит — это уже второстепенный вопрос. так что графическая сторона кодинга (и соотв. математика) мне мало пока что нужна

          • Witcher говорит:

            Асм — платформозависимый язык, например ARM ассемблер, который сейчас в смартфонах, на Маке и даже на некоторых серверах, достаточно сильно отличается от x86. Си — избавляет от зависимости от конкретной платформы. Конечно, были попытки сделать ещё более низкоуровневый кроссплатформенный ассемблер, он назывался Си—, но его развитие не поддержали. А все эти секции экзешников, что ты показываешь в гайде для новичков, это скорее для общего развития, в прикладных задачах оно редко используется, хотя когда-то я тоже ковырял заголовки экзешников, когда изучал устройства вирусов и взламывал софт. В типовых бизнес-задачах оно практически не нужно, но знать безусловно будет полезно.
            Вот что сейчас реально интересно копать, так это WASM (WebAssembly) — особенно завораживает возможность обойти завязку на emscripten и делать ультракомпактные проги на си/си++ без стандартной библиотеки прямо на веб страницах. WASM уже почти везде работает в браузерах. За этой технологией — будущее.

            • tangar говорит:

              скоро выйдет видос про асм. WASM — дело хорошее, но это не язык, а технология. писать можно на си и оно транслируется в васм

              • Witcher говорит:

                Совершенно верно. Можно использовать Clang/LLVM для перевода Си программ в бинарный формат WASM (—target=wasm32 -nostdlib -emit-llvm), т.е. emscripten и всякие тяжеловесные дополнения брать вовсе не обязательно(!) Это немного нестандартный подход, зато даёт возможность генерировать очень компактные решения. Сам язык WASM, кстати, тоже существует, это низкоуровневый язык, похожий на ассемблер, с двоичным форматом, он также имеет читабельный текстовый формат, который позволяет писать, просматривать и отлаживать код вручную. Но задачу средней сложности на си/си++ можно решить на порядки быстрее чем на асме, если говорить про наше время, сказывается сокращение востребованности, поэтому асм как язык — удел создателей компиляторов, драйверов, специалистов по безопасности, встраиваемых систем (embedded), хакеров, энтузиастов, ну и оптимизаторов алгоритмов — про SIMD-расширения различных архитектур слышал? MMX, SSE, AVX, тоже интересная тема, только вместо того чтобы бессмысленно колупаться на асме, для программистов Си сделали специальные удобные обёртки — интринсики (compiler intrinsics), а современные оптимизирующие компиляторы вообще способны автоматически генерировать подобные инструкции в коде — достаточно указать нужные параметры при компиляции.
                Скажу тебе ещё одну интересную вещь. Есть два направления, которые следовало бы объединить. Это 1) низкоуровневость и 2) психологическое удобство восприятия кода. Вот ты думаешь почему многие в таком диком восторге от того же C++ Builder, да потому что старая добрая фирма Borland — это были гении в области RAD (Rapid Application Development). Вспомни знаменитый школьный Turbo Pascal, в котором всё удобно было уже тогда под DOS начиная от документации и заканчивая шикарным окружением, а Borland Delphi — это была вершина мастерства в области сверхбыстрой разработки программного обеспечения, многие идеи потом были позаимствованы разработчиками платформы .NET, но это уже была совсем другая история. Embarcadero что-то там пытается сейчас реанимировать, может кстати и получится, потому что спустя годы задуренные бизнес-заказчики вдруг поняли, что шоблы говнокодеров намеренно генерируют избыточную сложность и изображают бурную деятельность на пустом месте, чтобы набить себе цену, и значительно озаботились тем, что им оказывается нужны подходы вроде Low Code и средства быстрой разработки, чтобы экономить бюджет, то есть начали изобретать заново то, что в 90-х и 2000-х было ими же самими похерено.
                Я тебе скажу и PHP — во многом гениален, если говорить про RAD (сверхбыструю разработку), особенно версии 3, 4, 5, когда ещё Цукерберг лично на нём ваял, оттуда можно многое позаимствовать для RAD подхода. А Си с классами (только без синтаксического шума в виде шаблонного сумасшествия от александреску и без STL), про которые я тебе выше упоминал, это именно тот путь скрещивания с одной стороны низкоуровневости, а с другой стороны психологического удобства восприятия кода, с целью сверхбыстрой разработки и достижения требуемого результата. Т.е. базовые средства языка Си++ при грамотном проектировании действительно позволяют добиться такого же удобства и скорости кодинга как и на Delphi и на PHP. Почему в этом направлении так мало работали за прошлые 2 десятилетия, и кроме уродливых библиотек от комитетчиков-стандартизаторов ничего придумать не осилили, для меня конечно это большая загадка, но как говорится лучше дойти до понимания вопроса позже, чем никогда.

                • tangar говорит:

                  большое спасибо, прочитал с интересом. у меня не такие глубокие познания (пока). асм использую, чтобы в Аллодах2 фичи реализовывать) в целом, оч доволен, что изучил основы асма, это мастхэв, чтобы понимать как вообще работают программы

Добавить комментарий

🇬🇧 Attention! Comments with URLs are not allowed.
🇷🇺 Комментарии со ссылками удаляются автоматически.