Серёга Антонов
78 subscribers
29 photos
41 videos
60 links
Всем привет!

Меня зовут Серёга Антонов. Программирую игры и движки. Рассказываю об играх простым языком.

ВКонтакте https://vk.com/antonovcoder

YouTube https://www.youtube.com/@antonovcoder

Написать лично @bestsuperman
Download Telegram
Media is too big
VIEW IN TELEGRAM
Посмотрел недавно ролик GTA VI и нахлынула ностальгия. Захотелось поиграть в культовую GTA III, с той которая на мой взгляд и положила начало игр с открытым миром. Немного разобравшись, что как устанавливать, нашел несколько версий игры. В том числе с переводом. Оказалось, что у GTA III есть сообщество, которое пилит моды и даже озвучивает игру.

Оригинальная игра вышла в 2001 году для PS2 британской студией британской DMA Design (потом стала Rockstar North). Издана американской студией Rockstar Games. Потом в 2002 году вышла на PC и в 2003 на XBox. Команда разработчиков состояла примерно из 23 человек. В игре использовался движок RenderWare.

В последние годы стало модно делать ремастеры популярных старых игр. Так появился ремастер-сборник аж трех игр "Grand Theft Auto: The Trilogy - The Definitive Edition". В него вошли GTA III, Vice City и San Andreas. Ремастером занималась студия Grove Street Games. Выход сборника на всех популярных платформах состоялся в 2021 году. Для рендера взяли Unreal Engine 4, а физику сохранили. Так же улучшили все модели, а для улучшения текстур использовали нейронки.

В этом видео я не только играю в эту культовую игру, но и сравниваю ее с новой версией Definitive Edition.

00:00 - Вступление
00:37 - Заставка
01:23 - Меню
02:18 - Стартовая кат сцена
04:25 - Едем на тачке домой
05:40 - Приехали в дом
05:52 - Сравниваем гаражи
06:03 - Едем на первую миссию
06:24 - Приехали в клуб Луиджи
07:22 - Едем за Мисти
08:39 - Успешно выполнили миссию
08:57 - Сравниваем заход в гараж
09:10 - Сравниваем графоний
11:05 - Едем в загородный дом мафиози
11:56 - Сравниваем графоний там
12:54 - Немного про звук движка
13:16 - Физику оставили ту же самую
13:37 - Вид сверху как отсылка к старым играм
14:12 - Наводим суету
16:25 - Лайфхак как повысить жизни
17:26 - Немного про карту в меню
17:55 - Конец

ВКонтактеYouTube
4🔥3
Media is too big
VIEW IN TELEGRAM
Всем привет!

Я продолжаю копаться в Android и его клавиатуре. Сейчас я переделал алгоритм работы с ней. Ранее я уже рассказывал про это тут. Сейчас я устанавливаю состояние однократно в начале из нашего Rust кода в нативный слой на Java и C++. И дальше получаю изменения от обоих сторон и меняю текст и в нашем коде и в нативном слое.

Теперь алгоритм доработан и можно обкатать его вместе с сетевой синхронизацией. Об этом и поговорим в видео.

ВКонтакте
2👍2🔥1
Интересная статья на хабре вышла. Пока читал в голове была только одна мысль - "казаться, а не быть". Это только кажется, что нейронки программисты могуть быть младшими коллегами. А по факту, будешь как надзиратель жестко следить за этим "коллегой", что бы он не запорол тебе проект. Отвечать то тебе. И это еще мы говорим про однотипные стандартные задачки. Что то гениальное создать пока что может только человеческая особь.
1🔥1🤯1
Как много раз я видел разработчиков, которые переделывают проект с нуля. Да и сам я грешил этим по молодости, переделывал и большие и маленькие проекты. Это было и по своей воле и по воле геймдизайнеров и по воле глав компаний. Особенно тяжело видеть как переделывается крупный проект. Сначала на дофамине, тебе кажется, что в этот раз, наконец-то ты напишешь все правильно и по уму. Но очень быстро все превращается в пытку и мучения, и ты уже мечтаешь восстановить хотя бы то, что было. А еще твои коллеги находятся в подвешенном состоянии, ожидая новый переписанный красивый проект.

Почему так происходит? Да все просто на самом деле. Код любого проекта это запрограммированная логика. Она гарантирует нам определенное поведение программы. Логика эта по сути гигантский граф состояний и переходов между ними. Переходов(связей) может быть очень много, где то они явны и понятны, а где то неявны и скрыты. Собственно чем больше логики, тем больше граф и больше связей и соответственно больше сложность. И переписывая проект, ты никуда не уберешь эту сложность. Держать всю логику крупного проекта в голове, практически невозможно. Даже в средних и крупных проектах количество состояний и связей настолько велико, что комбинаторика и сложность улетает буквально в бесконечность. Отсюда и баги, они по сути необработанные переходы из одного состояния в другое (неопределенное). Они обычно закрываются уродскими костылями. Особенно хочу отметить асинхронное программирование, это отдельный ад.

Как тогда быть?

Очевидно, что переписывать все с нуля нужно только в крайних случаях, например в устаревании или отключении технологий, как было например с flash (все переписывалось на js/ts/haxe). В остальных случаях лучше делать это постепенно, шаг за шагом, держа программу всегда работоспособной. Тут очень повезет если заранее была выбрана правильная архитектура и код разбит на модули. Если это не так, то первым шагом, можно постепенно менять архитектуру, разбивать на модули и упрощать интерфейсы. Да это больно, сложно и медленно, но возможно. Далее уже проще - постепенно переписывать модули не меняя интерфейс. И так шаг за шагом можно все привести в желаемый вид.

Удачного вам рефакторинга друзья! )
3💯2🔥1🤯1
С раннего детства меня всегда интересовали компьютерные игры. Примерно в 7 лет у меня появился первый компьютер ZX Spectrum. Это была такая толстая клавиатура-компьютер, которую просто подключаешь к ЭЛТ телевизору. А в качестве внешних накопителей использовались магнитные кассеты. Устройством для загрузки программ с кассет служил обычный магнитофон. Ох какие же эмоции были когда после пятиминутного пиуууухшхщщххсссхфххфиииииффххшшшш наконец то загрузилась с магнитофона любимая игра! А если не загрузилась эмоции были еще сильнее ))) Мы с друзьями могли играть бесконечно в эти игры выжигая телевизоры и глаза.

Однажды меня привлекли некие надписи на кнопках клавиатуры - break, goto, circle. Я понятия не имел, что это такое. Это были нечто иное как ключевые слова языка программирования Sinclair BASIC. Мой друг-сосед был постарше, который уже немного разбирался в этом, показал мне какие то базовые операции. И теперь меня интересовали не только игры - я рисовал круги и замысловатые фигуры с помощью этих команд. Я думаю, что это стало отправной точкой для меня как программиста. С тех пор играя в любую игру я задавался вопросами как она сделана. Я начал замечать разные подходы в графике и паттерны в геймплее. Я рисовал по точкам в тетрадке в клетку разных персонажей, уровни для игр и даже набрасывал какой то код. Чуть позже сосед проапгрейдил свой спектрум до 128к, а так же обзавелся дисководом. И показал мне редактор графики. Я мог залипать часами рисуя персонажей и их покадровые анимации. Особенно было интересно рисовать 3д персонажей попиксельно. Чуть позже у меня появилась Dendy и я залипал в нее. Я играл очень очень много формируя свою насмотренность. Потом у одноклассника появился PC и мы играли у него. Помню когда увидел впервые GTA2 я просто офигел! В общем везде где были компьютерные игры - Серёга в них играл.

Где то в 7-8 классе увидел у соседа книгу по компьютерной графике. Где были практически все основные алгоритмы, матрицы и т.д. Я прочитал ее от корки до корки несколько раз. Выписывал формулы и делал расчеты в тетрадках, а так же придумывал и выводил свои формулы. Тогда резко подрос интерес к математике и геометрии. Учеба (мучеба) меня никогда не интересовала. В школу я ходил исключительно ради друзей. Но вот математику, геометрию и физику очень любил. Помню были моменты когда я выводил гигантские формулы на пол тетрадки по расчету косинуса, которые выдавали значения с ужасным качеством ))). Но было очень интересно!

Мы жили не очень богато и первый PC появился у меня только на первом курсе универа. Поступил я тогда на инженера-механика, хотя всегда хотел на ПОВТ. Тогда я познакомился с такими играми как Max Payne и GTA3, навсегда ставшими моими любимыми играми. Могу играть в них часами даже сейчас. В последствие все новые игры не вызывают у меня интерес. В них как будто пропала душа. Есть красивая оболочка, но нет души. Я не вижу в них ничего нового и прорывного, ну кроме графики. Но не графика делает игру интересной, а геймплей. Если тебе не интересно играть, то супер-пупер реалистичная графика не поможет. Возможно моя насмотренность достигла какого то пика. Либо я стал больше программистом и меня интересует создание, а не потребление.

Так же меня интересовала мультипликация и компьютерная анимация. Много рисовал анимации в блокнотах и тетрадках (как тут). Было очень интересно, и так я познакомился с Macromedia Flash MX 6.0. Много анимировал всякого, и познакомился с ActionScript 2. Довольно много писал на нем, общался и изучал туториалы на flasher.ru. И нашел свою первую работу в качестве flash-developer в стартапе.

В общем игры привили мне интерес к программированию, и теперь я делаю игры! )
🔥53
Прикупил себе геймпады (XBox & Dual Sense). Теперь можно порубиться в любимые игры с комфортом. И по работе пригодится.

GTA Vice City Definitive Edition (и другие windows игры) запускаю на macOS через whisky. Тут оба геймпада заработали без настройки.

А для старых консолей типа Sega и Dendy и многих других использую эмулятор ares. Раскладку джойстиков на геймпады настроил без проблем. Играем с сыном в Battletoads & Double Dragon с удовольствием! 😁

Тот кто говорит, что на macOS нет игр - просто не умеет их готовить. 😜
👍53
Включил windows после долгого перерыва. Сделал все работы. Выключаю и на тебе - обновление! 🤬🤣😆
3
Media is too big
VIEW IN TELEGRAM
Посмотрев несколько игр для маленьких (и не только) детей на Android я знатно приофигел от того как и с какой частотой там показывается реклама. Она появляется часто, внезапно и ее невозможно быстро закрыть - нужно просмотреть чуть ли не 3-4 экрана и только после этого появляется неудобная кнопка закрыть. Адская штука! Мало того в большинстве игр эту рекламу невозможно отключить никаким образом - просто отсутствует такая опция.

Дочка очень любить играть в игры, не смотря на ее возраст (2.5 года). Всегда приходит ко мне на работу (то есть за мой стол - так как работаю то я дома). И внимательно наблюдает что я делаю. Очень любит играть в супер марио, но так же и в игры на планшете. Собственно для нее я и пытался найти, что то вменяемое. В итоге я принял решение написать ее любимую игру с нуля. А раз у меня есть свой блог то логично сюда запостить весь процесс.

В качестве платформы я выбрал обычный веб браузер. На работе я использую Rust и определенные подходы. Стало интересно как проявят эти подходы в таком личном пет проекте на другом языке программирования. В качестве языка мы будем использовать TypeScript, это типизированный вариант JavaScript. Так же мы будем использовать технологию PWA, которая позволяет устанавливать веб приложение как нативное оффлайн приложение на Android и iOS. В общем будет интересно!

Как известно любая разработка начинается с установки ПО и настройки среды. По своему опыту могу сказать, что это нетривиальная и бывает довольно скучная задача. Так как у всех нас разные ОС, их версии и разный набор уже установленного ПО. Но без этой части никуда.

ВКонтактеYouTube

00:00 Вступление
01:19 Смотрим "игру"
01:57 Мнение об "игре"
03:04 Обзор технологий веб браузера
04:54 Механика нашей игры
05:58 План
07:09 Установка NodeJS
08:38 Установка VS Code
08:50 Создание репозитория на GitHub
09:52 Настраиваем проект в VS Code
11:35 Устанавливаем TypeScript в проекте
15:56 Добавляем скрипты для билда
17:39 Добавляем index.html
21:54 Запускаем index.html в браузере
23:46 Подключаем JavaScript в html
24:26 Заливаем на GitHub
25:41 Паблишим на GitHub Pages
27:27 Заключение

Код посмотреть тут

Открыть результат можно здесь

Оглавление
1. Настраиваем проект (мы тут)
2. Добавляем canvas
3. Масштабирование игры
4. Добавляем интерактивность
5🔥4
Зацените сетап! ) Ноут, игрушки и постоянно дети вокруг. Сегодня работаем на открытом воздухе. Уже лет 10 работаю только с ноута. Всегда выбираю мобильность. Но тем не менее это не отменяет стационарное место дома. Удобное кресло, стол и хороший монитор легко решает это. Пришел воткнул провод и вперед!
🔥83🤩2
Media is too big
VIEW IN TELEGRAM
Всем привет!

Продолжаем делать игру для детей. В предыдущем видео мы настраивали проект. В этом видео мы затронем bundling (объединение и сжатие JS в бандл). А так же добавим и настроим канвас (HTMLCanvas). Канвас на самом деле прикольная штука! По сути это картинка - набор пикселей. И с помощью простых команд можно легко рисовать разные 2d фигуры. В общем приятного просмотра!

ВКонтактеYouTube

00:00 Вступление
01:40 Настраиваем esbuild
08:35 Сжимаем JS бандл
09:38 Объясняю как дебажить
11:29 Знакомимся с HTMLCanvas
12:38 Добавляем canvas в наш html
12:25 Рассказываю про Development Tools
14:26 Убираем бордер вокруг canvas
15:12 Расширяем canvas во весь экран
22:56 Рисуем красный прямоугольник
25:57 Проблема при ресайзе
27:14 Добавляем рисование на каждый кадр
28:56 Добавляем простую анимацию
30:38 Нужно чистить экран
32:54 Столкновение с краем экрана
37:09 Заключение

Код посмотреть тут

Результат тут

Оглавление
1. Настраиваем проект
2. Добавляем canvas (мы тут)
3. Масштабирование игры
4. Добавляем интерактивность
👍2🔥2💯21
Media is too big
VIEW IN TELEGRAM
Всем привет!

Продолжаем делать игру для детей. В предыдущем видео мы разбирались как добавить canvas и рисовать на нем. В этом видео мы затронем работу с матрицами трансформации. Они нам потребуются, что бы масштабировать всю игру под конкретный экран. В дальнейшем мы будем использовать матрицы для трансформации объектов. Вообще это прямо база геймдева, поэтому я решил не пройти мимо, а записать супер краткий курс на эту тему.

ВКонтактеYouTube

00:00 Рисуем прямоугольники
03:40 Смотрим результат
04:25 Подбираем размер прямоугольников
05:09 Располагаем их процедурно
06:52 Смещаем прямоугольники в центр
10:14 Рассказываю про проблему разных экранов
12:05 Краткий курс векторной математики
29:12 Трансфомируем канвас с помощью матрицы
31:21 Создаем виртуальный размер игры
37:26 Рисуем игровые объекты
46:04 Подводим итоги

Код посмотреть тут

Результат тут

Оглавление
1. Настраиваем проект
2. Добавляем canvas
3. Масштабирование игры (мы здесь)
4. Добавляем интерактивность
3🔥2
Всем привет!

Мало кто знает, но почти каждый год, начиная с 2021 года я учавствую в конкурсе js13k games. Позвал меня туда друг. В этом конкурсе нужно создать игру на заданную тему на JavaScript и размер игры со всеми ресурсами в zip архиве не должен превышать 13KB. Конкурс стартует сегодня 13 августа и продлится ровно месяц до 13 сентября.

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

Итак тему объявили и это - Black Cat! И первое, что пришло на ум - платформер Lion King в которую играл в детстве на Dendy. Обычно неделю я обмозговываю идею, и только потом неспеша приступаю. Ха-Ха! Вся жара начинается в последние дни ))).

Мои предыдущие игры в конкурсе:

2021 (тема - Space)
Space Arena - Упоролся в вектор и сжатие и графоний. Скорее на демку похоже и работает только на десктопе.

📄 Страница игры

🎮 Играть в последнюю версию


2022 (тема - Death)
Survivors - Выживач с зомбаками, кудаже без них. Тут решил я 3д top down shooter замутить. Разработал собственный формат скелетной анимации персонажей. Генерация текстур и много всего. Но так же на демку похоже. Делал под десктоп и мобилы. Но на моем андроиде не работает (((

📄 Страница игры

🎮 Играть в последнюю версию


2024 (тема - Боязнь числа 13)
Cube13 - Игра головоломка, надо выйти из комнаты. 13 комнат, 13 жизней, 130 секунд. Уровень кстати тоже 13х13 блоков. Делал в пиксель арте - очень понравилось! Сделал собственный формат данных. Ну и это получилась законченная игра.

📄 Страница игры

🎮 Играть в последнюю версию
7🔥6🤣2
Media is too big
VIEW IN TELEGRAM
Всем привет!

В этом видео добавляем интерактивность с помощью событий mouse и touches. Здесь мы затронем масштабирование координат мыши и тача. А так же логику попадания точки в прямоугольник. Ну и собственно логику таскания прямоугольника.

ВКонтактеYouTube

00:00 Добавляем виртуальный поинтер
01:17 Добавляем mouse ивенты
03:23 Рисуем поинтер для проверки
07:17 Делаем наведение на прямоугольники
10:42 Добавляем инициализацию уровня
21:11 Делаем таскание прямоугольника
27:47 Добавляем touch ивенты
29:09 Проверяем на Android
29:22 Заключение

Код посмотреть тут

Результат тут

Оглавление
1. Настраиваем проект
2. Добавляем canvas
3. Масштабирование игры
4. Добавляем интерактивность (мы здесь)
👍73
This media is not supported in your browser
VIEW IN TELEGRAM
Сделал вот кота для js13k )

Смотрю много рефов и пиксель арта всякого. Пока идея в сторону бродилки-головломки по дому и окрестностям.

Так же засетапил проект. Из технологий: npm, typescript, esbuild, canvas, sfxr, advzip. Пока что зип занимает 2252 байт из 13312 байт (16.92%).
👍8🔥54
На эти выходные еду на мероприятие года - Сборку №4. Организует его мой друг и коллега Антон Волков. Это место и время где собираются супер крутые мастера своего дела. Мы много общаемся, обмениваемся опытом, заводим новых друзей и играем в различные игры. Интересно, что приготовят для нас организаторы в этот раз. Я уже был на Сборке №2 и Сборке №3. Это было просто супер! Как будто на сутки ты попадаешь в другой мир. Всегда жду эту тусовку больше чем Новый Год.

P.S. На фотке готовлю сюрприз для друга. 😜 Вспомнил тут черчение, геометрию и что такое циркуль. 🤣🤣🤣
8👍5