Всем привет! Давайте немного рассмотрим игры, в которых можно заработать. Мы обсудим, как его создать и включить в него NFT. Эта статья будет посвящена исключительно механике блокчейна и не будет углубляться в разработку игр . Я постараюсь объяснить все простым языком с пояснениями всех основных частей. Итак, начнем!
Я занимаюсь разработкой блокчейнов с 2018 года, и за это время я видел много людей, играющих в игры «играй, чтобы заработать» (p2e), не имея ни малейшего представления о том, как это работает. Существует множество плохих проектов, и многие люди пытаются создать свою собственную p2e-игру, не понимая ни концепции «схемы Понци», ни технической реализации.
Идея этой статьи родилась в середине 2022 года во время моего офлайн-выступления на криптомероприятии. Затем содержание статьи неоднократно менялось в ходе моих выступлений на различных мероприятиях в разных странах. Кроме того, я попытался решить все эти проблемы сам, создав технологический стартап в этой сфере. Попутно я стал свидетелем большого интереса к этой теме и множества непониманий ее основ.
Интернет зародился как web1, где вы, как пользователь, были в основном потребителем информации (чтением). Позже он превратился в web2, где пользователи начали писать и в Интернет (социальные сети). Теперь мы смотрим на web3, где пользователи смогут по-настоящему владеть чем-то в Интернете, а также потреблять и создавать контент.
С момента создания простых компьютерных игр в 1960-х годах игры быстро развивались. Они начинались как отдельные игры, а теперь мы видим множество онлайн-игр, в которых игроки «владеют» некоторыми игровыми предметами или персонажами. Существуют также торговые площадки игровых предметов, некоторые из которых предлагают одноранговую (p2p) торговлю предметами. Однако в большинстве случаев эти предметы на самом деле не принадлежат игрокам; они принадлежат играм. Будущая эволюция передаст право собственности на предметы от игры к игроку, и в некоторых играх это уже происходит, но эта функция все еще имеет ограниченное распространение.
Бум криптоигр пришелся на 2021 год. По состоянию на 2024 год рынок по-прежнему принадлежит инди-студиям, а крупных вендоров там почти нет. Большинство игр по-прежнему используют блокчейны, совместимые с EVM, но существует тенденция перехода от общих блокчейнов к блокчейнам, специально созданным для игровых целей.
В 2023 году многие криптоигры закрылись, а игроки также оказались в депрессии из-за спада на крипторынке, что привело к потере времени и денег. Однако технология все еще существует, и я ожидаю, что все больше и больше разработчиков будут искать что-то новое для себя (web3), да и для игроков тоже. Я надеюсь, что моя статья поможет им понять основы того, как это работает с технической точки зрения.
В этой статье будут рассмотрены только блокчейны EVM, поскольку они по-прежнему остаются самыми популярными цепочками. Однако вы должны знать, что существует множество других типов цепей, которые решают некоторые проблемы, описанные ниже.
Блокчейн — это очень простая концепция: у нас есть блоки, содержащие некоторые транзакции. Новый блок зависит от предыдущего блока, поэтому невозможно заменить уже существующий блок.
Просто, не так ли? Но на самом деле у нас может возникнуть множество проблем, которые приводят нас к некоторым важным для нас характеристикам блокчейна:
Разные типы блокчейнов имеют разные подходы, но мы сосредоточимся на наиболее распространенном блокчейне типа EVM (Ethereum, Polygon, BNB Chain и т. д.).
Обычно блоки создаются через фиксированное время (12 секунд для Ethereum, 3 секунды для BNB Chain и т. д.). Для нас это первое фундаментальное свойство блокчейна.
В реальном мире блокчейн распределен по множеству узлов (серверов), которые связаны друг с другом через интернет-соединения. В некоторых редких случаях возможно иметь несколько блоков, основанных на одном и том же родителе, что приводит к образованию «разветвлений».
Блокчейн был разработан для подобных случаев и решит эту ситуацию. Но вы, как конечный пользователь с транзакцией в красном блоке (осиротевший блок), не очень довольны, так как ваша транзакция может стать недействительной. И именно здесь в игру вступает «завершенность». Окончательность — это момент, когда транзакция не может быть отменена. Для нас это второе фундаментальное свойство блокчейна.
Любая операция записи в блокчейн чего-то стоит вам или вашему пользователю. Блокчейны имеют свою собственную внутреннюю экономическую модель, а содержание и эксплуатация множества различных узлов для децентрализации требует много ресурсов. В большинстве случаев этот ресурс представляет собой комиссию за транзакцию, взимаемую конечным пользователем за их использование. Блокчейны имеют свой собственный лимит транзакций в секунду, а динамические комиссии за транзакции являются внутренним механизмом, позволяющим избежать DDoS-атак на блокчейн.
В большинстве случаев инициатор транзакции должен платить комиссию в национальной валюте, а не игровыми токенами или NFT.
Для нас комиссии за транзакции являются третьим фундаментальным свойством блокчейна.
Почему эти три показателя важны для нас? В первую очередь это связано с опытом конечного пользователя. Игроки хотят сосредоточиться на игровом процессе, а не на технических препятствиях. Ваша задача как разработчика игр — оптимизировать этот процесс, отдавая приоритет интуитивному дизайну UI/UX и простой адаптации.
Давайте представим себе простую шахматную игру, в которой каждый шахматный ход хранится в блокчейне. Игроки должны платить небольшую комиссию за транзакцию за каждый ход и ждать, пока блок не будет завершен (что может занять несколько минут между ходами игроков). Это выглядит не очень хорошо, не так ли? Будут ли пользователи обменивать пользовательский опыт на использование блокчейна? Большинство игроков предпочтут играть в игры так, как они это делают сейчас, вместо того, чтобы мучиться с использованием блокчейна.
Но есть надежда! Существует несколько решений, которые могут преодолеть разрыв между играми с блокчейном и традиционными играми.
Блокчейн имеет ограниченное количество функций в своей основе, и в большинстве случаев этого недостаточно. Блокчейны первого поколения (например, Биткойн) имеют ограниченные возможности настройки. Блокчейны второго поколения (Ethereum) предоставили возможность писать собственные программы (приложения) и размещать их в блокчейне в отдельном пространстве, называемом смарт-контрактами. Затем пользователь может взаимодействовать с этим смарт-контрактом, чтобы что-то сделать, а смарт-контракт может взаимодействовать с другими смарт-контрактами. Смарт-контракты выполняются в специальной среде, называемой виртуальной машиной Ethereum (EVM). На данный момент на рынке представлены разные виртуальные машины, но EVM по-прежнему остается самой популярной.
Простая аналогия – эволюция мобильных телефонов. Старые мобильные телефоны могли просто звонить и отправлять смс. Современные телефоны по-прежнему имеют возможность совершать звонки и отправлять смс, но вы можете установить дополнительное программное обеспечение, чтобы добавить новые функции.
Смарт-контракты открывают возможность создания собственной валюты (токена). Чтобы сделать эти токены совместимыми с любым программным обеспечением кошелька, существует несколько стандартов токенов. Наиболее популярные из них — ERC20, ERC721 и ERC1155.
Стандарты объясняют только внешний интерфейс смарт-контракта, но очень важно знать, что реализация может быть разной и содержать некоторые дополнительные функции.
Существует два типа токенов: взаимозаменяемые токены (FT) и невзаимозаменяемые токены (NFT). Токены FT подобны реальным деньгам: вы можете иметь несколько копий одного и того же токена. NFT уникальны, как картина, конкретный игровой предмет или персонаж.
Стандарт ERC20 описывает FT. Вот его интерфейс:
function name() public view returns (string) function symbol() public view returns (string) function decimals() public view returns (uint8) function totalSupply() public view returns (uint256) function balanceOf(address _owner) public view returns (uint256 balance) function transfer(address _to, uint256 _value) public returns (bool success) function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) function approve(address _spender, uint256 _value) public returns (bool success) function allowance(address _owner, address _spender) public view returns (uint256 remaining)
Важно понимать, что токены физически не покидают смарт-контракты. Смарт-контракт просто отслеживает токены пользователей. Когда вы передаете токен, он обновляет только сумму во внутренней записи, например в таблице. Вот почему в некоторых случаях вам необходимо добавить адрес смарт-контракта в программное обеспечение вашего кошелька.
Сам стандарт NFT такой же, но у нас есть дополнительные методы:
function ownerOf(address _owner) public view returns (uint256 balance) function tokenURI(uint256 _tokenId) external view returns (string )
Каждый токен NFT имеет уникальный идентификатор (ID) и всегда кому-то принадлежит. Это отражено в реализации хранилища токенов, которая обычно использует таблицу для записи как идентификатора токена, так и его текущего владельца.
Но где же изображение жетона, спросите вы? И здесь у нас есть идея «метаданных токена». В отличие от основного стандарта NFT, метаданные токена хранятся отдельно и используют разные спецификации. Фактически, некоторые NFT могут даже не иметь связанных с ними метаданных!
Метод смарт-контракта под названием tokenURI
может возвращать этот URI метаданных (местоположение). Существует несколько способов хранения метаданных токена — внутри цепочки и вне цепочки.
Внесетевое хранилище можно разделить на две основные категории:
Метаданные токена обычно форматируются как файл JSON, но теоретически они могут быть в любом формате. Вот пример типичной структуры метаданных
{ "description": "Token description", "external_url": "Some external link with more details", "image": "Link to image", "name": "Token name", "attributes": [ // array of attributes { "trait_type": "Attribute type", "value": "Attribute value" }, .... ] }
Важно понимать, что изменяемые метаданные (редактируемые данные) могут подорвать истинное владение Web3. Благодаря изменяемым метаданным вы, по сути, владеете идентификатором токена, а не содержимым, которое он представляет.
Представьте, что вы покупаете в игре «магический предмет с энергией 5» NFT. Если метаданные, содержащие эту информацию, хранятся на серверах разработчика игры (централизованное хранилище), разработчик игры может позже принять решение о перебалансировке игры и изменить энергию вашего предмета на 3. Хотя технически вы все еще будете владеть токеном, он будет представлять собой другой предмет. Этот сценарий подчеркивает потенциальные недостатки изменяемых централизованных метаданных.
Напротив, Web3 процветает благодаря неизменяемым метаданным (неизменяемым данным). Это гарантирует, что информация, связанная с вашим NFT, останется постоянной и поддающейся проверке.
Хороший документ, описывающий, как метаданные используются торговой площадкой https://docs.opensea.io/docs/metadata-standards .
Давайте изучим реальные метаданные из популярной P2E-игры: STEPN. Эта игра была популярна не так давно, и скорее всего вы слышали о людях, которые тратят много денег на кроссовки.
Мы знаем, что идентификатор токена — « 105026695079 », адрес смарт-контракта — « 0x69d60ad11feb699fe5feeeb16ac691df090bfd50 », и он построен на цепочке BNB . Но как нам получить доступ к метаданным?
Существует два основных подхода:
Давайте воспользуемся проводником BSCScan для изучения смарт-контракта. Перейдите на вкладку «Читать» (tokenURI
. Введите идентификатор токена и нажмите «Запросить». Проводник получит URI токена, который в данном случае имеет вид:
Присмотритесь к этим метаданным. Вы заметите, что STEPN владеет им и потенциально может его модифицировать. Кроме того, некоторые атрибуты, такие как Прочность и Уровень, кажутся изменяемыми со временем. Мы углубимся в эту концепцию при создании нашей собственной P2E-игры.
Теперь, когда мы рассмотрели некоторые ключевые концепции блокчейна, давайте вернемся к одной из них, которая всем знакома: авторизация. Без него вы не сможете выполнять действия в блокчейне. Итак, остается вопрос: как нам авторизоваться?
Блокчейн использует систему асимметричной криптографии, в которой существуют две пары ключей: закрытые ключи и открытые ключи. Вы можете сгенерировать открытый ключ из своего закрытого ключа, но не наоборот (это односторонняя математическая операция).
В блокчейнах EMV существует два основных типа учетных записей: внешняя учетная запись (EOA) и учетная запись смарт-контракта.
Внешние учетные записи контролируются закрытыми ключами. Закрытый ключ — это 32-байтовый фрагмент данных, часто представленный длинной строкой шестнадцатеричных символов (64 символа). Этот формат не совсем удобен для конечного пользователя и сложен для запоминания.
Чтобы решить проблему запоминаемости, была введена концепция под названием «мнемоническая фраза». Мнемоника — это список из 12, 24 или более распространенных слов, которые служат удобочитаемым представлением вашего закрытого ключа. Важно отметить, что это не сам закрытый ключ, а способ его безопасной генерации.
Вы можете бесплатно сгенерировать для себя неограниченное количество закрытых ключей.
В отличие от EOA, учетным записям смарт-контрактов не требуются закрытые ключи для взаимодействия, поскольку они уже находятся в блокчейне. Это открывает возможности для создания программируемых кошельков с расширенными функциями.
Конечные пользователи не взаимодействуют с блокчейном напрямую, используя приватные ключи. Вместо этого мы полагаемся на криптокошельки — программные приложения, которые безопасно хранят закрытые ключи и используют их для подписи транзакций от вашего имени.
Существует две основные модели кошельков: депозитный кошелек и некастодиальный кошелек.
Хранение означает, что кто-то хранит ваши личные ключи вместо вас. Несмотря на удобство, они создают центральную точку отказа, поскольку вы полагаетесь на методы обеспечения безопасности хранителя.
Для кошельков, не связанных с хранением, вы имеете полный контроль над своими личными ключами, поскольку несете ответственность за их безопасность. Предлагая большую безопасность и контроль, он также полностью возлагает ответственность за сохранность на пользователя.
В сфере блокчейна ваш закрытый ключ имеет первостепенное значение. Он предоставляет доступ к вашим криптовалютным активам. Потеря закрытого ключа означает потерю ваших средств, поскольку без него не существует встроенного механизма восстановления или передачи.
В отличие от традиционных учетных записей, учетные записи блокчейна не предлагают возможности входа в систему по электронной почте или через социальные сети. Хотя некоторые кошельки изучают передовые криптографические методы аутентификации, этот подход все еще находится на ранней стадии. Другие кошельки отдают приоритет пользовательскому опыту, предлагая кастодиальные решения, которые проще в использовании, но отходят от основных принципов Web3, которые подчеркивают контроль пользователей.
Существует несколько типов кошельков с блокчейном, причем наиболее популярными являются расширения для браузера и мобильные кошельки. Мобильные кошельки часто могут легко подключаться к браузерам для дополнительного удобства.
Типичный кошелек, не связанный с хранением, надежно хранит ваш закрытый ключ внутри, никогда не раскрывая его через API (поэтому нет риска его компрометации). Кошелек предлагает два внешних компонента: пользовательский интерфейс (UI) для взаимодействия с вашей криптовалютой и внешний API для интеграции разработчиков с функциями кошелька.
Теперь, когда мы изучили основы блокчейна, мы готовы сделать следующий шаг: разработать собственную игру! Не волнуйтесь, мы пока не будем погружаться в программирование. Вместо этого давайте воспользуемся нашими новыми знаниями, чтобы представить концепцию игры и разбить ее шаг за шагом, начиная с общего обзора.
Чтобы заложить прочную основу, давайте вдохновимся такой классической игрой, как Super Mario Bros., и добавим в нее захватывающие элементы P2E.
Важнейшим аспектом нашей игры Mario является создание устойчивой экономической модели. Это означает необходимость избегать «схем Понци», которые распространены во многих играх типа «играй ради заработка» (P2E). В устойчивой модели доходы пользователей будут сбалансированы с общим потоком доходов от игры. Такое внимание к долгосрочному здоровью имеет важное значение, потому что, в отличие от схем Понци, которые легко создать, но в конечном итоге неустойчивы, построение процветающей экономики P2E требует тщательного проектирования и планирования.
Как пользователи могут зарабатывать деньги в нашей игре? Допустим, любые собранные внутриигровые монеты (Mario Coin — MC) можно обменять на криптовалюту (FT).
Чтобы предотвратить «заработок денег из ничего», мы предложим игрокам различные способы потратить свои MC на значимые внутриигровые предметы и улучшения, такие как:
Наша игра про Марио может приносить доход помимо расходов пользователей несколькими способами:
Чтобы контролировать общее количество токенов и снизить давление на обменный курс, вы можете интегрировать дополнительные функции, такие как варианты ставок. Это стимулирует пользователей хранить токены, сокращая обращение и инфляцию.
Тщательное планирование экономики игры перед разработкой имеет решающее значение. Такие инструменты, как Google Sheets, могут помочь смоделировать различные сценарии, чтобы обеспечить сбалансированную и устойчивую систему.
Теперь, когда мы готовы двигаться вперед, следующим важным шагом является выбор блокчейна для размещения нашей игры Mario. Это решение имеет значительный вес, поскольку существует множество вариантов: виртуальная машина Ethereum (EVM) и блокчейны без EVM. Мы могли бы даже изучить возможность создания собственного блокчейна, адаптированного к потребностям нашей игры. Кроме того, заслуживает рассмотрения возможность одновременного использования нескольких блокчейнов.
Хотя последующая миграция между блокчейнами технически возможна, это сложный процесс.
Решения с одной цепочкой предлагают более простой подход по сравнению с реализациями с несколькими цепочками. Некоторые игры представляют варианты с несколькими цепочками, по существу, как независимые игры (с несвязанными значениями токенов), что в конечном итоге приводит к множеству экземпляров одной и той же игры. Настоящий опыт работы с несколькими цепочками требует обеспечения единообразных цен на токены во всех цепочках и возможности беспрепятственно связывать NFT из различных цепочек в игре.
Выбирая блокчейн, вы стремитесь минимизировать время и сборы «окончательности», обеспечивая при этом строгие меры безопасности. Кроме того, крайне важно, чтобы выбранная цепочка имела достаточную ликвидность.
Важно понимать, что прямое чтение смарт-контракта для данных не всегда эффективно, а реализация может занять много времени. Вместо этого рекомендуется использовать внешнее программное обеспечение и сервисы, предлагающие метаданные в подходящем формате.
Пользователи ожидают возможности беспрепятственно торговать токенами и NFT. Следовательно, блокчейн должен обеспечивать необходимую инфраструктуру для таких транзакций. В противном случае вам придется реализовать его самостоятельно.
Выбор правильного блокчейна имеет решающее значение для успешного запуска вашей игры Mario. Это включает в себя обеспечение того, чтобы выбранный блокчейн имел всю необходимую инфраструктуру, которую мы планируем использовать. Кроме того, надежная среда тестовой сети имеет решающее значение для тщательного тестирования функциональных возможностей наших игр на протяжении всего процесса разработки. Это позволяет нам выявить и устранить любые потенциальные проблемы на ранней стадии.
На этом этапе мы выбрали блокчейн и предложили пользователю войти в игру. Хотя для доступа к игре пользователям необходим кошелек, у большинства из них нет кошельков, и они желают играть, не изучая заранее новые сложности.
Если вы попросите пользователя создать кошелек в начале игры, у вас будет плохая конверсия. Вы можете предоставить множество инструкций о том, как лучше всего создать новый кошелек, но большинству пользователей все равно будет некомфортно.
Хорошим решением является разрешение пользователям входить в систему с использованием параметров web2 и запрашивать пользовательский кошелек только тогда, когда пользователь хочет напрямую взаимодействовать с блокчейном.
Вы можете выбрать самостоятельное управление кошельком пользователя в режиме хранения. Однако этот подход может быть не самым безопасным и оптимальным как для вас, так и для пользователя.
В качестве альтернативы на рынке доступны некастодиальные решения, такие как web3auth и Magicklink, которые позволяют управлять кошельками пользователей. Однако их поддержка блокчейна в настоящее время ограничена, и вам необходимо будет интегрировать эти сервисы в вашу платформу.
Простого наличия собственного токена игры недостаточно для того, чтобы пользователи могли совершать внутриигровые транзакции с использованием блокчейна. Это серьезное препятствие для адаптации пользователей, и многие игроки сталкиваются с этой проблемой.
Например, пользователь может иметь наш «Токен Марио» и захотеть передать его. Однако им не хватает базового токена блокчейна, который необходим для инициации передачи. Чтобы совершать транзакции в блокчейне, пользователям необходимо приобрести этот собственный токен.
Как пользователи получают собственный токен? Хотя существуют варианты внешних закупок, они могут стать барьером для новых игроков, незнакомых с web3.
В идеале разработчики игр должны решить эту проблему и упростить процесс для пользователей. Минимизируя эти препятствия, игроки могут сосредоточиться на получении удовольствия от игры.
Разработчики игр могут реализовать внутреннюю систему обмена или реализовать низкоуровневые прокси-контракты внутри службы кошелька. Однако эти решения сложны в реализации.
Многообещающая новая технология под названием «абстракция учетной записи» может, наконец, решить эту проблему. Однако пока еще рано делать окончательные выводы.
Более простое решение для разработчиков — пополнять кошельки пользователей небольшим количеством собственных токенов при регистрации нового кошелька.
Хотя пользователи могут владеть NFT, прямое чтение этих данных из блокчейнов оказывается неэффективным для большинства игр. Блокчейн работает как внешний сервис, и события внутри него могут повлиять на вашу игру. Очень важно быть в курсе этих событий.
К счастью, смарт-контракты могут генерировать события, что позволяет разработчикам отслеживать их и вызывать ответы в режиме реального времени. Представьте себе сценарий, в котором пользователь входит на уровень со скином NFT. Если скин будет передан другому игроку во время игры, игра должна отреагировать, предотвратив его одновременное использование.
Некоторые веб-проекты (Attarius, Moralis, Coвалентный, Alchemy и т. д.) предлагают API-интерфейсы NFT, которые упрощают этот процесс. Эти API решают такие задачи, как чтение и отслеживание метаданных, а также владение токенами. Это значительно сокращает время разработки, позволяя разработчикам сосредоточиться на основной игровой механике, а не на низкоуровневой интеграции блокчейна.
Однако возникает еще одна проблема, связанная с изменчивостью метаданных. Некоторые NFT имеют ограниченное применение, например скин, который можно использовать только 100 раз, прежде чем он будет «сожжен» (уничтожен). Отслеживание такого использования представляет собой критическую проблему.
Полагаясь исключительно на внутриигровое отслеживание, вы можете расширить возможности мошенников, нацеленных на внешние рынки. Эти торговые площадки зависят исключительно от данных URI токена и не имеют доступа к внутренней системе отслеживания игры.
Хранение на стороне сервера, как и подход, используемый STEPN, обеспечивает удобство, но вызывает проблемы с безопасностью из-за возможности манипулирования метаданными.
Хранение в цепочке обеспечивает неизменность за счет хранения метаданных в блокчейне. Однако для этого необходимо отслеживать каждое использование в цепочке, что влечет за собой комиссию за транзакцию.
Интеграция блокчейна нашей игры Mario близится к завершению. Теперь давайте рассмотрим, как NFT могут привлечь пользователей.
Некоторые игры собирают средства на разработку, продавая премиальные NFT на ранних стадиях. Такой подход обеспечивает финансирование и создает базу лояльных игроков, с нетерпением ожидающих выхода игры.
Можно использовать «вампирский маркетинг». Эта уникальная маркетинговая стратегия позволяет пользователям интегрировать NFT из других игр в вашу игру Mario. Представьте себе, что вы можете позволить игрокам использовать кроссовки STEPN в своей игре! Этот подход ориентирован на пользователей разных игр, но сопряжен с проблемами.
Стандарты NFT различаются, что затрудняет плавную интеграцию. Кроме того, в некоторых случаях отслеживание изменений метаданных может быть сложным. Несмотря на эти препятствия, межигровая интеграция NFT — это новый маркетинговый подход, недоступный в традиционных играх Web2.
«Вампирский маркетинг» может быть особенно эффективен при нацеливании на пользователей с недостаточно используемыми NFT. Разрешив им интегрировать эти NFT в вашу игру Mario, вы сможете активировать этих пользователей и потенциально превратить их в активных игроков.
Хотя техническая интеграция блокчейна завершена, наша игра Mario сталкивается с рядом проблем:
Юридическая часть технологии блокчейна остается сложной.
Привлечение пользователей, знакомых с блокчейном и его преимуществами, требует дополнительных ресурсов для обучения пользователей.
Многие игровые площадки имеют ограничения на игры на основе блокчейна, что ограничивает возможности публикации.
В отличие от традиционных внутриигровых предметов, NFT остаются в собственности пользователя даже после того, как игроки перестают играть в игру. Это создает новую проблему инфляции. Когда игроки покидают игру, они могут попытаться продать свои NFT со скидкой, чтобы компенсировать некоторую выгоду. Это может привести к постоянному притоку NFT со скидкой в игре, что приведет к снижению общей стоимости внутриигровых NFT-предметов. Чтобы бороться с этой инфляцией, нам необходимо постоянно разрабатывать новые функции и контент, которые будут стимулировать игроков сохранять свои NFT и продолжать играть в нашу игру Mario.
Вот общий обзор структуры нашей игры про Марио:
По каждой теме много информации, часами. Я постарался сжать эту информацию и указать только важные моменты. Надеюсь, это было полезно для вас