Подготовка к публикации
Как тестировать игру на баги?
- Дайте другим поиграть в игру. Желательно вместе с вами, на случай, если они столкнутся с ошибкой и не смогут понять или объяснить её.
- Проверьте игру на разных платформах. В редакторе может не быть проблем, но работает ли она там, где её будут запускать? Будьте особенно внимательны с Linux и Android.
- Проверьте консоль на исключения. Если нашли исключение, найдите файл и строку, где сработало исключение. Если оно звучит по-марсиански, поищите решение в сети, и подумайте, почему именно в этой строке срабатывает исключение.
- Напишите в консоль. Попробуйте вывести логи (системные файлы) в предполагаемых местах ошибки. Введите разные переменные и сверьте полученные значения с ожидаемыми. При несовпадении — исправляйте.
- Проверьте логи. Системные записи вашего проекта дадут больше информации, чем консоль. Прочтите строки, где сработало исключение. Гуглите всё, что не знаете.
- Поспите. Всё починится с утра. Это просто плохой сон
Типичные ошибки
- NullReferenceException.
В чём дело: функция выполняется с несуществующей (null) переменной.Быстрое решение: проверьте, является ли переменная null. - SyntaxErrorException.В чём дело: ошибки в синтаксисе.Быстрое решение: в сообщении указано, какой символ выдал ошибку. Найдите и исправьте его.
- Розовый или чёрный экран.Возможная проблема: не обработался шейдер.Возможные причины: вы используете 3D-шейдеры в 2D-игре или шейдеры, которые не поддерживаются операционной системой. Убедитесь, что вы используете мобильные шейдеры для мобильных игр.
- Установите нужную частоту кадров. Для визуальной новеллы хватит 20 кадров в секунду, а вот для шутера нужны 60. Низкая частота кадров тратит меньше времени на отрисовку.
- Анимация / система частиц / выборочная обработка. Объекты, невидимые для камеры игрока, не обрабатываются. Персонажи анимируются, частицы обновляются, 3D-модели обрабатываются только в поле зрения игрока.
- Сжатие текстур и звуков. Для сжатия текстур используйте Crunch. Потоковая музыка и распаковка звуковых эффектов перегружают игру. Попробуйте снизить качество аудио. Сжатие может заметно снизить качество объектов.
- Не позволяйте Raycast касаться лишних объектов. Raycast похожи на маленькие лучи, выстреливающие из ваших пальцев или мыши, когда вы касаетесь экрана или кликаете. Найдите объекты, которые не должны реагировать на действия игрока и удалите их из вычислений Raycast.
- Используйте объектный пул. Частое создание и удаление большого количества объектов снижает производительность. Вместо этого, объедините их в список, очередь или другую структуру. Например, пули должны объединяться в один массив.
- Оптимизируйте шейдеры. Задайте материал для каждого визуализатора. Игре не придётся создавать новые материалы в начале игры, что сэкономит ресурсы. Пусть визуализатор включает только то, что функционально необходимо.
- Используйте AssetBundles (дословно «комплекты активов») вместо старой системы Resources в Unity. AssetBundles экспортирует ваши файлы из Unity и помещает в один файл, экономя оперативную память.
Инструменты (только для Unity)
Скрипты:Графика:
- A guide to optimizing Unity UI;
- Art Asset best practice guide.
Память:
- Reducing the file size of your build.
- Memory.
Оптимизация под платформы:
- Practical guide to optimization for mobiles;
- WebGL performance considerations;
- Memory Considerations when targeting WebGL;
- Olly’s seven stages of optimizations for mobile VR.
Марио и летающий шлем:
Это очень забавная картинка, на ней Марио пытается летать в шлеме. На шлеме есть крошечное крылышко, которое помогает Марио летать. На нем также есть солнцезащитный козырек и буква «М». Марио одет в костюм и держит широко вытянутую руку. Он выглядит взволнованным, когда летает в этом специальном шлеме.
Первый вопрос, который задаст ребенку, где взять такой шлем? Ну, этот шлем с крыльями — ценное владение Марио. Вы можете увидеть Марио в этом шлеме в телесериалах или комиксах. Эта картинка обязательно станет увлекательной раскраской. Это будет держать вашего ребенка занятым на несколько часов.
Unreal Engine
Средний продвинутый уровень / Бесплатный / Для всех типов видеоигр
Если вы хотите что-то серьёзное, чтобы получить лучший результат, то ваш выбор – Unreal Engine. Это сверхпопулярный движок среди разработчиков видеоигр, на котором создаются в том числе дорогие и успешные блокбастеры от именитых студий мира. Но прежде, чем бросаться изучать Unreal, подумайте, возможно, вашему первому проекту не нужен такой мощный инструмент.
Очевидно, что для достижения наилучшего результата потребуются обширные знания в области программирования. Однако в сети есть множество учебных пособий, которые помогут сразу начать работать. Необходимо лишь время. Много.
С чего начать?
- Если вы новичок, мы рекомендуем для начала задуматься над вышеперечисленными вариантами, но если вы полны решимости, то для вас нет ничего невозможного. Переходите в раздел документации и справочников Unreal Engine и начинайте мастерить.
- Чего можно достичь: просто взгляните на этот огромный список.
- Дополнительная информация на официальном сайте Unreal Engine.
Знаете какой-то отличный не включённый в список инструмент? Или вы профессионал и хотите что-то порекомендовать? Добро пожаловать в комментарии! С удовольствием выслушаем ваши предложения.
Тестовая последовательность прохождения
- Позволяет игрокам войти в комнату и увидеть графическое представление способности, которую они откроют.
- Ставит игрока в ситуацию с единственным выходом, в которой у него нет других вариантов, кроме получения предмета.
- Позволяет игрокам прикоснуться к предмету, чтобы получить новую способность.
- Ставит игрока в ситуацию, в которой ему приходится использовать способность, чтобы покинуть комнату.
- Позволяет игрокам покинуь эту комнату только после использования способности для попадания в следующую комнату.
Игрок падает в комнату, в которой не может допрыгнуть до выхода. Игрок подбирает предмет «Высокий прыжок». Он видит уступ, до которого допрыгнуть с новой способностью. Игрок вынужден использовать способность высокого прыжка, чтобы выбраться из комнаты.Начало — тестирование бега — тестирование высокого прыжка — тестирование превращения в кошку — тестирование обратной гравитации — конец
Встречайте Scratch
Экранные элементы
Когда вы запустите редактор, вы увидите окно ниже. Давайте разберем его элементы ( см. Полноразмерное изображение, если маленькое ниже неясно):
Использование блоков
Теперь, когда вы познакомились с редактором Scratch, давайте поговорим об одном из самых важных элементов инструмента — блоках кода. Вместо того, чтобы печатать реальный код, эти блоки позволяют вам определять поведение ваших элементов. Они похожи друг на друга, как LEGO. , чтобы было легче увидеть, как они влияют друг на друга.
- Движение — заставляет данный спрайт двигаться, шаг за шагом, к другому объекту или через прямые координаты.
- Взгляды — позволяет спрайту скрывать или показывать себя, переключать костюмы, изменять размер или перемещаться между слоями.
- Звук — воспроизведение звуков, изменение громкости или регулировка темпа.
- Ручка — Нарисуйте маркером и измените его цвет и форму.
- Данные — позволяет создавать свои собственные переменные. Это очень удобно для элементов, которые в Scratch не встроены.
- События — критерии для запуска других действий, например, когда вы нажимаете зеленый флаг или нажимаете пробел. Вам нужны эти блоки, чтобы все остальные ваши блоки действительно что-то делали!
- Control — циклы для повторения действия, выполнения оператора if-else или остановки чего-либо.
- Восприятие — Поместите эти блоки в другие для выполнения действий, когда спрайт касается другого элемента или пользователь удерживает нажатой клавишу.
- Операторы — математические элементы, которые позволяют выполнять арифметические или базовые логические операции над переменными.
- Больше блоков — Сделайте свои собственные блоки, если этого недостаточно!
Cash
Суть задачи — узнать, каким минимальным количеством монет можно дать человеку сдачи. Например, если для оплаты товара сумой 3,42 долл. кассиру дали 4,00 долл. При этом ему нужно дать 2×25, 1×5 и 3×1 центу (учитывая стандартные монеты США: 25, 10, 5, 1 цент). Общее количество монет — 6 шт.
В этом коде вначале нужно создать переменные для всех монет, которые наш кассир отдаст нашему клиенту. Затем создается переменная get_float. Это будет число с плавающей запятой.
Поэтому формат ввода — 0.37, или 0.42, но не 0,420.
Чтобы избежать проблем при работе с числом с плавающей запятой (из-за округления можно потерять пару центов), перед округлением нужно умножать ввод на 100, и затем преобразовывать в целое число.
При этом мы используем % (остаток деления на n). Подсчет монет мы производим в строке вывода printf, указывая формат вывода %d (целое десятичное число).
#include<stdio.h> #include<math.h> #include<cs50.h> int main() { int cents_owed; do { float dollars_owed = get_float("Change owed: "); cents_owed = round(dollars_owed * 100); } while (cents_owed <= 0); int quarters = cents_owed / 25; int dimes = (cents_owed % 25) / 10; int nickels = ((cents_owed % 25) % 10) / 5; int pennies = ((cents_owed % 25) % 10) % 5; printf("%d\n", quarters + dimes + nickels + pennies); }
Для краткости и элегантности кода, мы сразу объявляем монеты и проводим операции по вычислению их количества.
Вот как ведет себя программа:
Credit
Задача по проверке подлинности кредитной карты по ее номеру. Дело в том, что номера на картах ставятся не произвольно. Числовой ряд устанавливается по алгоритму Луна. Он заключается в следующем.
Алгоритм Луна
Умножаем каждое второе число карточки, начиная с предпоследней, на 2. Складываем разряды полученного числа.Например, карта 4003600000000014.
Так вот, если последний разряд равен 0 (или число кратно 10), значит карточка действительная.
Вот такой алгоритм проверки предлагается воплотить в коде. Кроме того, номера карточек разных платежных систем начинаются с определенного диапазона цифр. Так, Visa — с 4, MasterCard — с 51, 52, 53, 54 или 55. Другие платежные системы можно посмотреть .
Разные платежные системы используют разное количество разрядов: American Express — 15, MasterCard — 16, Visa — 13 или 16. Все эти данные нужно учитывать при написании кода.
Архивировано:
#include #include int main() { long long i = get_long_long("Number: "); int xadd = 0, x2 = 0, addsum = 0, x2prod = 0, sum = 0, digitstwo, multiple; bool valide; while (i > 0) { x2 = xadd; xadd = i % 10; if (addsum % 2 == 0) { sum += xadd; } else { multiple = 2 * xadd; x2prod += (multiple / 10) + (multiple % 10); } i /= 10; addsum++; } valide = (sum + x2prod) % 10 == 0; digitstwo = (xadd * 10) + x2; if (xadd == 4 && addsum >= 13 && addsum <= 16 && valide) { printf("VISA\n"); } else if (digitstwo >= 51 && digitstwo <= 55 && addsum == 16 && valide) { printf("MASTERCARD\n"); } else if ((digitstwo == 34 || digitstwo == 37) && addsum == 15 && valide) { printf("AMEX\n"); } else { printf("INVALID\n"); } }
Актуально:
-
#include <stdio.h>
-
#include <cs50.h>
-
int main()
-
{
-
long long i = get_long_long("Number: ");
-
int xadd = , x2 = , addsum = , x2prod = , sum = , digitstwo, multiple;
-
bool valide;
-
while (i > )
-
{
-
x2 = xadd;
-
xadd = i % 10;
-
if (addsum % 2 == )
-
{
-
sum += xadd;
-
}
-
else
-
{
-
multiple = 2 * xadd;
-
x2prod += (multiple 10) + (multiple % 10);
-
}
-
i /= 10;
-
addsum++;
-
}
-
valide = (sum + x2prod) % 10 == ;
-
digitstwo = (xadd * 10) + x2;
-
if (xadd == 4 && addsum >= 13 && addsum <= 16 && valide)
-
{
-
printf("VISA\n");
-
}
-
else if (digitstwo >= 51 && digitstwo <= 55 && addsum == 16 && valide)
-
{
-
printf("MASTERCARD\n");
-
}
-
else if ((digitstwo == 34 || digitstwo == 37) && addsum == 15 && valide)
-
{
-
printf("AMEX\n");
-
}
-
else
-
{
-
printf("INVALID\n");
-
}
-
}
Смотрите варианты реализации этих заданий на Python в шестой неделе курсов CS50.
Читайте больше по теме:
Сделайте свою собственную игру Mario! Основы нуля для детей и взрослых
Знаете ли вы, что любой может создать видеоигру без программирования создавать видеоигры без программирования создавать видеоигры без программирования ? Хотя есть несколько дружественных для новичков языков. , вам не нужно тратить полгода на изучение Java или C ++, чтобы создать игру. Вы можете выбрать один из множества инструментов для различных типов игр, но один отличный вариант для детей (и взрослых) — это бесплатная Scratch от MIT.
Scratch — это инструмент, который позволяет перетаскивать ресурсы для создания игр или анимации. Это легко понять, но учит строительным блокам программирования. в процессе. Давайте посмотрим, что вы можете создать в Scratch, а затем пройдитесь по шагам создания простой игры Mario.
Встречайте Scratch
Чтобы начать с нуля, перейдите на домашнюю страницу . Вы должны создать учетную запись прямо сейчас, чтобы вы могли сохранить свои творения. Нажмите кнопку « Присоединиться к нулю» в правом верхнем углу окна. Создайте имя пользователя и пароль, введите свою дату рождения и пол, после чего система запросит адрес электронной почты родителя. Введите свой собственный, если у вас есть, затем подтвердите свой адрес, чтобы вы могли комментировать другие проекты и поделиться своим.
Теперь вы можете сразу перейти. Нажмите « Создать» на верхней панели инструментов, чтобы запустить редактор царапин. Если вы предпочитаете, вы также можете скачать автономный редактор для работы без подключения к интернету.
Экранные элементы
Когда вы запустите редактор, вы увидите окно ниже. Давайте разберем его элементы ( см. Полноразмерное изображение, если маленькое ниже неясно):
Dreams («Грёзы»)
Скриншот: игра Dreams / Media Molecule
Платформы: PS4, PS VR, PS5
Навыки программирования: не требуются
Поддержка сторонних ассетов: отсутствует, но есть возможность создавать собственные с помощью внутриигровых инструментов
Графика: 3D
На сегодняшний день Dreams — один из самых масштабных конструкторов, где пользователь может не только создать игру любого жанра с нуля, но и моделировать объекты, рисовать, снимать машинимы и даже писать собственную музыку или делать ремиксы к уже существующим трекам.
Проекты в Dreams можно делать в команде, распределив роли и загрузив базовую пустую сцену в облако. Так каждый участник будет выполнять свою задачу, периодически обновляя сцену по мере добавления контента.
Чтобы понять размах возможностей редактора, достаточно взглянуть на работы других авторов, которых в рамках платформы называют мечтателями.
Трейлер Sword of Akaana: Final Demo — JRPG, разрабатываемой в Dreams
Глядя на проекты в Dreams — с открытыми мирами, разнообразными механиками и детально проработанным окружением, сложно представить, как можно реализовать нечто похожее, не написав ни одной строки кода. Но команда Media Molecule позаботилась о том, чтобы создание игр оказалось по силам даже юным пользователям без каких-либо профильных знаний.
Логика в Dreams построена на визуальном программировании: у каждого элемента сцены есть свои переключатели, которые можно настраивать и по необходимости связывать с другими элементами. В игре они выглядят как карточки, которые соединены друг с другом проводами.
Разбор построения логики в шутере от первого лица на примере стандартного шаблона
Мечтатели делают не только оригинальные игры, но и фан-проекты по мотивам известных тайтлов. Например, в подборку ниже вошли ремейки Fallout 4, Resident Evil, P.T. и Dead Space.
Подборка лучших игр, сделанных в Dreams, от ютуб-канала GamingBolt
Геймплей
Марио в World 1-1
Super Mario Bros. разделена на восемь миров, каждый из которых состоит из четырёх уровней. Марио (или Луиджи) должен пройти до конца уровня, перепрыгивая через ямы и уворачиваясь от врагов на пути. По пути Марио встречаются различные объекты такие как платформы (некоторые из которых могут падать если Марио встанет на них), ступени из блоков и пружины. Также по пути появляются трубы, некоторые из которых являются проходом в секретные комнаты с множеством монет.
Враги, такие как Гумбы, Купы Трупы, Жуки Баззи, Купы Паратрупы, Пули Биллы, Лакиту, Братцы Молотки и прыгающие Чип Чипы, могут быть поражены прыжком Марио. Купы Трупы и Жуки Баззи прячутся в свой панцирь, если на них прыгнуть, а Купы Паратрупы теряют свои крылья. Растений Пираний и Спайни нельзя одолеть прыжком, но можно уничтожить огненным цветком или же просто перепрыгивать через них. В игре также есть подводные уровни, в которых Марио может свободно плавать. Подводных врагов, Блуперов и Чип Чипов, можно победить только огненным цветком.
Если маленький Марио получит урон, упадёт в яму или же закончится время на таймере, игрок теряет одну жизнь и уровень начинается либо с самого начала, либо от одного из невидимых «чекпоинтов», через которые прошёл игрок. Когда у игрока заканчиваются жизни на титульном экране можно набрать комбинацию Start + A, которая позволяет игроку продолжить игру с начала мира, в котором у него закончились жизни. В режиме с двумя игроками эта комбинация возвращает игроков в начало мира, в котором проиграл второй игрок.
Марио под водой в World 2-2
Марио может получать усиления из ?-блоков или кирпичных блоков. Некоторые ?-блоки спрятаны и становятся видимыми только когда Марио ударит их снизу. С помощью магического гриба Марио становится Супер Марио. Супер Марио может разрушать кирпичные блоки, ударив по ним снизу. Если Супер Марио коснётся врага, то он вновь станет маленьким Марио. Огненный цветок превращает Марио в огненного Марио, который может выпускать огненные шары, уничтожающие противников. 1-Up гриб даёт Марио дополнительную жизнь, которую также можно получить, собрав сто монет. С помощью звезды Марио становится неуязвимым на короткий промежуток времени и может уничтожать врагов касанием.
В конце каждого уровня стоит замок с флагштоком. Когда Марио достигает флагштока, он спускает вражеский флаг и входит в замок, завершая уровень.
Марио и Боузер в конце World 8-4
Четвёртый уровень каждого мира проходит в замке, в которых основными препятствиями являются огненные стержни и Подобу. В конце замков с 1 по 7 миры Марио встречает Ложного Боузера, а в замке 8 мира — настоящего. Марио может победить Боузера либо используя топор, чтобы оборвать мост или же используя огненный цветок. После победы над Ложным Боузером Марио освобождает одного из грибных слуг, который говорит ему знаменитую фразу «Спасибо тебе, Марио! Но наша принцесса в другом замке!». В конце замка мира 8 Марио освобождает Принцессу Тоадстул и завершает игру. После этого становится доступен «новый квест». Второй квест является усложнённой версией нормальной игры, где Гумбы заменены Жуками Баззи, все наземные враги передвигаются быстрее и некоторые платформы уменьшены в размерах.
Логика игры
Чтобы в игру было интереснее играть дольше пяти минут, разработчики поставили такие требования:
- Это будет платформер — игра, где главному герою нужно бегать и прыгать по платформам, залезать наверх и скакать через препятствия.
- Герой сможет ловко двигаться и стрелять по врагам.
- Чтобы можно было играть компанией, делают мультиплеер на четырёх человек.
Так как у нас ограничения по памяти, всю игру пишут на Ассемблере — это язык, который работает напрямую с процессором. С одной стороны, код Ассемблера исполняется очень быстро; с другой — в нём работа идёт тупо с перекладыванием данных из одной ячейки процессора в другую. Это примерно как готовить суши, работая с индивидуальными рисинками.
Память распределили так:
- 8 килобайт на графику,
- 32 килобайта на сам код игры и хранение данных.
Примеры: Как отвечать на вопрос о слабых сторонах
1) Я склонен к постоянной самокритичности. Всякий раз, когда я заканчиваю проект, я не могу успокоиться, так как чувствую, что мог бы сделать больше, даже если моя работа получила положительную оценку. Это часто приводит к тому, что я переутомляюсь и чувствую себя истощенным. Только недавно я решил узнать причину таких симптомов и понял, что мне необходимо быть более уверенным в себе. Я проанализировал отзывы о моей работе и мои достижения за последний год и осознал, что я являюсь одним из самых продуктивных сотрудников. Это как раз и дало мне уверенность в своих силах.
2) Я чересчур замкнутый, что заставляет меня опасаться делиться своими идеями в командах или выступать на групповых встречах. Я всегда чувствую, что у меня есть хорошее предложение, но мне не всегда удобно с этим выступить. После того как моя команда не оправдала ожиданий в двух проектах подряд, я решил бороться со своей замкнутостью. Я начал смотреть уроки в YouTube, прочитал несколько книг по этой теме. Я все еще на стадии обучения, но это уже значительно лучше, чем год назад.
3) Я часто люблю делать работу сам без посторонней помощи. В прошлом это вызывало у меня ненужное давление и стресс. Один конкретный пример был в прошлом году, когда я отвечал за планирование ежегодного мероприятия в нашей компании. Я пытался сделать все сам, от самых важных решений, таких как место встречи, до самых крошечных вещей, таких как сервировка стола.
Я едва справился с этим заданием до конечного срока. Это научило меня делать шаг назад и проанализировать, когда мне понадобится помощь. После этого события я учусь просить помощи у людей, которые больше разбираются в каких-то деталях моего проекта. Это помогает мне оставаться спокойным и не тратить время на поиски решения. Я также обнаружил, что команда людей может дать лучший результат, чем один человек.
4) Я до сих пор плохо разбираюсь в электронике и цифровых новинках. Мне всегда сложно дается новая программа или приложение, которое начинает использовать моя компания. Я трачу много сил, времени и нервов, чтобы привыкнуть к таким вещам. Недавно я впервые получил сдержанный отзыв от начальника о моей продуктивности. Я сразу понял в чем причина и начал стараться быстрее освоить новое приложение. 10-15 минут обеденного времени и помощь знающих коллег позволили мне решить проблему в течение пару недель, и сейчас я вышел на прежний уровень своей эффективности.
5) Я всегда стараюсь избегать конфликтов как в личной, так и в профессиональной жизни. Это иногда заставляло меня идти на компромисс, жертвуя качеством моей работы, чтобы сохранить мир в команде. Это стало настоящей проблемой, когда я стал начальником отдела. Один из наиболее важных аспектов управления людьми – говорить им, что им нужно слышать, а не то, что они хотят слышать. Я осознал эту слабость и активно работал, чтобы конструктивно высказывать свое мнение для эффективной работы отдела.
6) Когда я работаю над проектом, я очень целеустремлен и усердно тружусь, чтобы его завершить. Однако, когда новые проекты назначаются моему отделу, я начинаю полностью погружаться в них и останавливаю работу над теми, которые выполнял. То, что в течение дня столько раз приходится прыгать между заданиями, мешает моей продуктивности и хорошо выполнять работу. Пару месяцев назад я начал использовать программу по управлению проектами, чтобы помочь себе управлять своими задачами и временем, что помогло мне лучше понять приоритеты. С тех пор я улучшил свою эффективность и производительность.
Чем лучше вы сможете сформулировать свои наиболее существенные слабости, приводя примеры и то, как вы пытаетесь их преодолеть, тем быстрее вы добьетесь успеха в поиске работы. Вы всегда должны показывать, что знаете свои слабости и работаете над ними, чтобы они вам не мешали в профессиональной жизни. Если вы пытаетесь найти свои слабости, попросите близкого друга или коллегу помочь вам или воспользуйтесь все тем же ежегодным отчетом производительности. Как только вы сможете четко определить свои слабые стороны, истории и примеры сразу же найдутся.
Заключение
Сейчас ваша главная цель найти свои сильные и слабые стороны, вспомнить примеры из прошлого и постоянно практиковаться над изложением. Репетиция – одно из самых важных действий перед собеседованием. Если вы не очень хорошо разбираетесь в своих примерах и историях, в таком случае вы покажетесь неискренним. При правильном подходе к практической части вы сможете придумать свой ответ, который поразит рекрутера, когда он спросит: «Каковы ваши сильные и слабые стороны?».
Персонажи
В игре есть два вида графики: статичный фон и движущиеся предметы — игроки, противники, боссы и выстрелы. Всё, что движется, называется спрайтами. Разработчики делят всю графическую память на две части — одну под спрайты, вторую под фон:
Каждая клеточка — это мини-квадратик 8 на 8 пикселей.
В каждом таком квадратике можно что-то нарисовать, но использовать при этом только три цвета.
Если объединить несколько квадратиков в один, получится метаспрайт. В нашем случае — персонаж.
Приставка может использовать одновременно только 4 вида палитры, поэтому у нас получается 4 цветных главных героя и нераскрашенный злодей.
Новое ограничение: на экране одновременно может быть только 8 спрайтов — на большее не хватает памяти. Поэтому для злодея места не остаётся. Можно пойти на хитрость и показывать их быстро-быстро по очереди, но тогда картинка будет мерцать и выглядеть хуже.
Разработчики радикально уменьшили размеры героев и злодея до одного спрайта. Теперь они выглядят более условно, зато помещаются на экран.
Меньше размер героя — больше свободного места для дизайна злодеев, боссов и спецэффектов. Сейчас в табличке собраны все варианты того, как может выглядеть персонаж в игре — и в прыжках, и на бегу.