Comments 72
Танчики! Детство моё сопливое)) Прям столько воспоминаний нахлынуло… Спасибо Вам.
+22
Это же колоссальное мастерство — уложиться в ограничения аппаратной части, и в то же время создать хорошую игру.
Флешеры игроделы как раз именно этим и занимаются…
Спасибо огромное за статью!
-41
Если вспомнить на какие ухищрения шли разработчики игр на ZX Spectrum, то флешеры просто как сыр в масле катаются.
А ведь ещё игры на электроника МК 62/61 были
А ведь ещё игры на электроника МК 62/61 были
+24
Помните стеб во времена дисков типа «1000 лучших игр» когда выходила какая-нибудь тяжелая игра говорили с сарказмом, что «теперь компактная игра — это игра, с трудом влезающая на компакт!» Тогда казалось, что игры под 600 -700 метров это дикость какая-то.
А сейчас выгоднее заниматься не оптимизациями, а кроссплатформенностью, чтоб и на PC и на приставках играть можно было, над пиаром, чтобы игра в первые дни разошлась как можно большим тиражом, т.к. очень быстро появляются пиратки. Время разработки становится гораздо важнее оптимизаций, т.к. пока конкурент усиленно вылизывает свою игру, можно уже 2-3 своих выпустить. Иногда выпускают такое, что не верится, что у разработчиков вообще был отдел тестирования.
А сейчас выгоднее заниматься не оптимизациями, а кроссплатформенностью, чтоб и на PC и на приставках играть можно было, над пиаром, чтобы игра в первые дни разошлась как можно большим тиражом, т.к. очень быстро появляются пиратки. Время разработки становится гораздо важнее оптимизаций, т.к. пока конкурент усиленно вылизывает свою игру, можно уже 2-3 своих выпустить. Иногда выпускают такое, что не верится, что у разработчиков вообще был отдел тестирования.
+6
Вы знаете. Я играл в Арканум. И несмотря на то, что она тормозила на мощных для того времени машинах, имела кучу багов и занимала два диска это была прекрасная игра.
+6
Полностью согласен. Отличная RPG была (ну и есть :)).
+2
То, что значительное количество плюсов позволяет смириться с минусами, не означает, что минусы — это хорошо.
Например, очень часто в TBS не заморачиваются с оптимизацией поиска пути, что приводит к тому, что ход занимает три секунды вместо трехсот миллисекунд. А эти секунды складываются в полчаса ожидания за партию из полутысячи ходов. Пример реальный, в той игре после того, как оптимизацию таки сделали, ходы компьютера стали практически моментальными, а до того на больших картах занимали секунд по 15.
Особенно «весело» когда подгрузки практически не завясят от железа — это явный признак косяка в архитектуре.
Например, очень часто в TBS не заморачиваются с оптимизацией поиска пути, что приводит к тому, что ход занимает три секунды вместо трехсот миллисекунд. А эти секунды складываются в полчаса ожидания за партию из полутысячи ходов. Пример реальный, в той игре после того, как оптимизацию таки сделали, ходы компьютера стали практически моментальными, а до того на больших картах занимали секунд по 15.
Особенно «весело» когда подгрузки практически не завясят от железа — это явный признак косяка в архитектуре.
+1
Я к тому, что ни микрооптимизации, ни ограниченное железо, ни мощнейший отдел тестирования не сделают бездушную игру душевной, а остутствие всего этого не заберёт душу у хорошей игры.
+1
Душа — это хорошо, но Квазимодо всё же не самый приятный объект.
0
Душа — хорошо, а крайности — плохо.
+2
Забить на оптимизацию ради души — и есть крайность :)
Я готов простить примитивную графику, но когда игра по десятку секунд грузит маленький спрайтовый уровень на мощном процессоре и сверхбыстром SSD — это, извините, никуда не годится. Когда на этом же железе в реальном времени и идеально гладко рендерится сложнейшая 3Д графика с уймой объектов, полигонов и источников света, а убогая плоская картинка дергается в конвульсиях — это рукожопие программиста.
Возможно, впрочем, это у меня профдеформация — уже который год в геймдеве, а когда приходится писать свои имплементации механизмов типа ArrayList (да, Java) ради выигрыша в скорости то как-то раздражают те, кто просто кладут на это.
Я готов простить примитивную графику, но когда игра по десятку секунд грузит маленький спрайтовый уровень на мощном процессоре и сверхбыстром SSD — это, извините, никуда не годится. Когда на этом же железе в реальном времени и идеально гладко рендерится сложнейшая 3Д графика с уймой объектов, полигонов и источников света, а убогая плоская картинка дергается в конвульсиях — это рукожопие программиста.
Возможно, впрочем, это у меня профдеформация — уже который год в геймдеве, а когда приходится писать свои имплементации механизмов типа ArrayList (да, Java) ради выигрыша в скорости то как-то раздражают те, кто просто кладут на это.
+2
Забить на оптимизацию ради души — и есть крайность
Опять вы в крайности. Где «забить на оптимизацию»? Почему если оно не работает на 1.76 МГц, то это уже «забили на оптимизацию»? Почему нельзя «оптимизировать в меру»? Выше я приводил в пример Арканум. Да, графа так себе. Да, на слабых машинах тормозит. Но играли с упоением. А если бы писали свои имлементации типа ArrayList ради выиграша в скорости, то мы бы могли вообще игры не увидеть.
когда игра по десятку секунд грузит маленький спрайтовый уровень на мощном процессоре и сверхбыстром SSD
и снова крайности. покажите пример игры, которая «по десятку секунд грузит маленький спрайтовый уровень на мощном процессоре и сверхбыстром SSD»? Хотя бы одной? Только не случай, когда человек вообще не разбирается в основах игростроения, а нормальный продукт, рассчитанный на людей.
0
Sonic 2 HD Remake
Грузится у меня по несколько минут. А разработчики в ридми так и говорят, мол «Ждите или апгрейдите комп»
Грузится у меня по несколько минут. А разработчики в ридми так и говорят, мол «Ждите или апгрейдите комп»
+1
и снова крайности. покажите пример игры, которая «по десятку секунд грузит маленький спрайтовый уровень на мощном процессоре и сверхбыстром SSD»? Хотя бы одной? Только не случай, когда человек вообще не разбирается в основах игростроения, а нормальный продукт, рассчитанный на людей.
Пожалуйста. Вот вам на выбор разные масштабы.
Eador — через 3 года после выхода автор таки немного занялся скоростью, после чего ход компьютера ускорился на 2 порядка, и почти исправлены дикие тормоза анимаци на более-менее мощных компьютерах. Раньше приходилось извращаться с замедлением процессора.
Mass Effect 2 — если заменить ролики во время загрузки уровней на заглушки то грузится всё практически моментально вместо десятков секунд.
Magic the Gathering 2012 — в момент перевода хода часто игра заметно подвисает на пустом месте, с явной зависимостью от мощности компьютера. Откровенный и бросающийся в глаза косяк.
Recettear — что там вообще можно грузить совершенно неясно, графика примитивная спрайтовая, уровни маленькие, но из-за ошибки где-то в архитектуре прогрузки дико долгие. Зато если поковыряться в конфиге и выставить жесткий лимит FPS то грузит моментально.
Опять вы в крайности. Где «забить на оптимизацию»? Почему если оно не работает на 1.76 МГц, то это уже «забили на оптимизацию»? Почему нельзя «оптимизировать в меру»?Оптимизация в меру — это когда на актуальном железе всё работает с вменяемой производительностью. А если имеются очевидные косяки с явным несоответствием производительности и результата — это рукожопие. И оно ну никак не связано с качеством сюжетной линии и проработанностью игровой механики.
0
Ок, согласен, такие игры есть.
Но моя мысль в том, что не оптимизации определяют наличие души в игре. И привёл в пример Арканум, которая подтормаживала на современном железе, но, при этом, была с душой.
Но моя мысль в том, что не оптимизации определяют наличие души в игре. И привёл в пример Арканум, которая подтормаживала на современном железе, но, при этом, была с душой.
0
А моя в том, что душа — не оправдание для рукожопия. Хотя и порой заставляет его терпеть.
0
Не оправдание. Но это не значит, что оптимизации==душа.
0
Сделал человек (люди) как мог. Как говорится, не нравится — не кушайте. Он может не кладёт на профайлер, а просто о нём не знает. Или видит, что узкое местор сортировка, но кроме пузырька ничему его не учили. Как может такой факт раздражать?
0
И к чему я вообще упомянул. Можно делать так — признать наличие необходимости и исправлять проблему. А можно как обычно — послать игроков в жопу и сказать «это релиз, мы уже продали игру и нам невыгодно заниматься дальнейшей поддержкой, покупайте следующую из серии».
0
Очень интересно. Много нового узнал для себя.
P.S. А про пасхалку даже не знал. К сожалению, по ссылке информации не так много. Вообще нашли этих влюбленных или нет? :)
P.S. А про пасхалку даже не знал. К сожалению, по ссылке информации не так много. Вообще нашли этих влюбленных или нет? :)
+5
Сразу два детства напомнило: детство, когда играл в них, и детство программистское, когда была задача написать их клон.
+5
UFO just landed and posted this here
Когда играли в «танчики» в детстве, то кто бы мог подумать, что когда нибудь буду изучать их внутреннее устройства с програмерской точки зрения.
+4
Спасибо, очень интересно было. А поставленная задача решена? Точный клон создан?
На мой взгляд, это сильно понижает порог вхождения в процесс разработки игр, что постепенно, но верно превращает его скорей в обыкновенный бизнес, чем в искусство.
Бог с ними с ограничениями. Придумать хорошую игру (без учёта ограничений) само по себе искусство. Втиснуть её в аппаратные ограничения — скорее инженерная задача.
На мой взгляд, это сильно понижает порог вхождения в процесс разработки игр, что постепенно, но верно превращает его скорей в обыкновенный бизнес, чем в искусство.
Бог с ними с ограничениями. Придумать хорошую игру (без учёта ограничений) само по себе искусство. Втиснуть её в аппаратные ограничения — скорее инженерная задача.
+2
А поставленная задача решена? Точный клон создан?К сожалению, из-за особенностей генерации случайных чисел эта задача оказалась мне непосильной. Целью было не просто написать клон, а ещё и получить точно такое же детерминированное поведение.
+1
Странно, вы же полностью описали алгоритм, дальше осталось только добавить «прокладку» в виде искусственного таймера, не привязанного к FPS. Можно даже оставить «длинные» секунды.
Я понимаю, что это проще сказать, чем написать, но вы с такой любовью описали все это, что захотелось чтоб хоть у этой истории был счастливый финал )
Я понимаю, что это проще сказать, чем написать, но вы с такой любовью описали все это, что захотелось чтоб хоть у этой истории был счастливый финал )
+1
Интересно. Я бы ещё добавил в качестве введения об устройстве видеопамяти устройств от Nintendo. Конкретно вот это описание я делал про Gameboy, в NES оно тоже близкое к этому:
Довольно интересная организация экрана. Как таковой сплошной экранной памяти (как в БК или хотя бы как в ZX Spectrum) вообще нету. Отдельно лежат тайлы 8x8 в количестве до 192 штук. На экран выводится проекция аж трёх планов, снизу вверх: фона, окна и объектов (т.е. спрайтов). И фон и окно — это матрицы 32x32 индексов тайлов. И для фона и для окна можно задать координаты от угла, с точностью до пиксела — тем самым, полноэкранный скроллинг не стоит буквально ничего, значение в регистр занести! Объекты (они же спрайты) — это те же тайлы, но для каждого спрайта задано положение с точностью до пиксела, и цвет 00 считается прозрачным. При этом можно создать до 40-ка спрайтов размером 8x8 либо 8x16 (размер одинаков для всех спрайтов). Каждому спрайту можно задать отражение по вертикали и/или горизонтали — тоже даром, один битик взвести. Но в одной строке может быть не более 10-ти спрайтов.
В общем, получается вещь довольно удобная для разного рода платформеров и скроллеров — загружаем кучу тайлов, набираем из них игровую сцену, сверху плюхаем подвижные спрайты. С другой стороны, работать с экраном как со сплошным полем — довольно тяжело.
Довольно интересная организация экрана. Как таковой сплошной экранной памяти (как в БК или хотя бы как в ZX Spectrum) вообще нету. Отдельно лежат тайлы 8x8 в количестве до 192 штук. На экран выводится проекция аж трёх планов, снизу вверх: фона, окна и объектов (т.е. спрайтов). И фон и окно — это матрицы 32x32 индексов тайлов. И для фона и для окна можно задать координаты от угла, с точностью до пиксела — тем самым, полноэкранный скроллинг не стоит буквально ничего, значение в регистр занести! Объекты (они же спрайты) — это те же тайлы, но для каждого спрайта задано положение с точностью до пиксела, и цвет 00 считается прозрачным. При этом можно создать до 40-ка спрайтов размером 8x8 либо 8x16 (размер одинаков для всех спрайтов). Каждому спрайту можно задать отражение по вертикали и/или горизонтали — тоже даром, один битик взвести. Но в одной строке может быть не более 10-ти спрайтов.
В общем, получается вещь довольно удобная для разного рода платформеров и скроллеров — загружаем кучу тайлов, набираем из них игровую сцену, сверху плюхаем подвижные спрайты. С другой стороны, работать с экраном как со сплошным полем — довольно тяжело.
+5
А NES от PC-Engine сильно отличается в этом плане кроме поддержки большего объемы цветов?
0
Вы имеете в виду организацию режимов графики на PC того времени? Да сильно. Судя по тому, что тут описано, получается, что на NES графика сильно походила на продвинутый текстовый режим.
0
Нет, я про это ru.wikipedia.org/wiki/PC_Engine. Процессоры то там одинаковые моторолловские, а цвет PC-Engine выдает как SNES, вот и хотелось узнать — внутри игры то отличаются и как сильно.
0
Да, восхищаюсь игроделами того времени. Полностью согласен с эпилогом
+5
из пиратских бонусов еще был Корабль позволяющий преодолевать воду)
0
Шикарно :) любимая игра для денди
0
Спасибо автору за пост! Еще бы такой разбор по Elite был. Всегда хотел узнать как на Z80-м делали почти 3D
+3
В заключение хочу сказать, что раньше создание игр было в некотором смысле всё же большим искусством, чем сейчас
Да сейсас программисты уже так не ограничены в своих возможностях и игру в большинстве случаев оценивают по работе дизайнеров, аниматоров и модельеров.
P.S. Пользуясь случае покажу свои варианты танчиков и марио в акаде на основе его примитивов:
www.youtube.com/watch?v=946fmxv5cC8
www.youtube.com/watch?v=p20zAhB3mjU
Да сейсас программисты уже так не ограничены в своих возможностях и игру в большинстве случаев оценивают по работе дизайнеров, аниматоров и модельеров.
P.S. Пользуясь случае покажу свои варианты танчиков и марио в акаде на основе его примитивов:
www.youtube.com/watch?v=946fmxv5cC8
www.youtube.com/watch?v=p20zAhB3mjU
+1
+2
Только у меня в голове заиграла фоновая музыка? :)
+6
У меня еще пронеслись все основные звуки игрового процесса, особенно звук взятия бонуса и звук двигателей :)
+3
А я покосился на приставку Денди, которую получил от Анонимного Деда Мороза… Там и эти танчики, и марио и контра и многое другое. Вот же она, рядом лежит )
+2
Эта маленькая коробочка под ёлкой нового 1994 года перевернула жизнь 6 летнего ребёнка (меня) на всегда. До сих пор сохранилась… надо бы её починить и сыну показать.
PS правда, на моей мотоциклист был другого цвета и я ни когда не мог понять, что значит слово «турбо» в турбо джойстиках.
PS правда, на моей мотоциклист был другого цвета и я ни когда не мог понять, что значит слово «турбо» в турбо джойстиках.
0
Что ж тут непонятного? Турбо — это круто!
0
У классического контроллера по одной кнопке A и B, у «турбо» — дополнительные «rapid fire» A и B, которые, будучи зажатыми, имитируют быстрые повторные нажатия на обычные A и B. Полезно в шутерах )
0
UFO just landed and posted this here
А есть ли современный римейк этой игры? Например новая графика, уровни, но старый геймплей.
+1
Tank-o-box например. Ещё есть тут.
0
Не совсем ответ на вопрос, но всё же:
Tank Force — сиквел, выпущенный Namco на аркадных автоматах в 1991 году. (Вот тут есть скрины.)
Согласно википедии, в 2009 году в Японии его ещё на Virtual Console (читай Nintendo Wii) выпустили.
Кстати, был, оказывается, и приквел — Tank Batallion.
Tank Force — сиквел, выпущенный Namco на аркадных автоматах в 1991 году. (Вот тут есть скрины.)
Согласно википедии, в 2009 году в Японии его ещё на Virtual Console (читай Nintendo Wii) выпустили.
Кстати, был, оказывается, и приквел — Tank Batallion.
0
Где можно взять дизассемблер, для копания в ром'ах?
0
Помню была у меня Sega :) Каждую неделю было такое: «Мам, дай денег на новый джойстик».
0
Эх, эти знания бы тогда, когда писал свои «улучшенные танчики» на паскале, но что-то шло не так, и ресурсов почему-то не хватало даже с ассемблерными вставками :) Спасибо за замечательную статью, побольше бы таких.
0
Вот автор пишет: Расчёт коллизий всегда был довольно ресурсоёмкой задачей, что может быть критично для такого процессора, как у NES.
Ресурсоёмкой? Ой да ну ладно. Тот же ZX-SPECTRUM (да, там 4 МГц процессор, но зато нет дендивского видеопроцессора со спрайтами который на порядок ускорял работу с графикой на экране) — сделал вот один маньяк там игру BlackRaven — RTS(!), поддержка мыши етц. А вы говорите коллизии для десятка танчиков посчитать дорогая операция. Фуффф
Ресурсоёмкой? Ой да ну ладно. Тот же ZX-SPECTRUM (да, там 4 МГц процессор, но зато нет дендивского видеопроцессора со спрайтами который на порядок ускорял работу с графикой на экране) — сделал вот один маньяк там игру BlackRaven — RTS(!), поддержка мыши етц. А вы говорите коллизии для десятка танчиков посчитать дорогая операция. Фуффф
0
Вы сравниваете разные вещи — в RTS работают несколько другие алгоритмы. Да и по видео на ютубе невооруженным глазом видно, что у Black Raven на рассчёты часто уходит более одного кадра. Для игры вроде Battle City это было бы абсолютно нежелательно.
Если вы пожелаете доказать обратное, руководствуясь более объективными доводами, с удовольствием почитаю ваше доказательство :)
Если вы пожелаете доказать обратное, руководствуясь более объективными доводами, с удовольствием почитаю ваше доказательство :)
0
Я не сравниваю, я говорю о том, что ресурсы даже такого хиленького процессора, как у NES, в рамках рассматриваемой игры — просто огромны и задача по типу (опять возвращаюсь к предыдущей формулировке) «найти коллизии между танками» не может быть сколько-нибудь дорогой в контексте задержек игрового процесса.
Собственно, суть предыдущего комментария и сводилась к тому что автор явно переоценил «дороговизну» данной операции для процессора
Собственно, суть предыдущего комментария и сводилась к тому что автор явно переоценил «дороговизну» данной операции для процессора
0
Откуда у вас такая уверенность в своих словах? Пока что она не сопровождается ни одним объективным доводом.
0
Прям чувствую как Вам хочется похоливарить, поэтому это мой последний комментарий — дальше пишите что хотите.
8bit CPU, 64Kb Ram — это одинаково и в NES и в ZX-Spectrum
Z80@4MHz успевал (не нравится Black Raven — посмотрите первую UFO — она тоже realtime была) заниматься расчетами и (очень важный фактор) отрисовывать всю графику (а экран на спектруме был не особо удобно с точки зрения «что нибудь на нём нарисовать» устроен).
В NES есть спрайтовый процессор, т.е. CPU отрисовкой графики не занимается, только расчёты. Конкретно в Battle city расчетов этих — около нуля, т.к. вычислительная мощность этой игрушки никакая. «Задача недорогая для процессора» — означает что он её овер9к раз успеет посчитать без задержек в игре.
Объективные доводы? Ну я не знаю. Вытащите кусок кода который занимается «обработкой коллизий», сделайте бесконечный цикл и посмотрите, сколько раз он их за время одного кадра успеет посчитать, прежде чем считать это «дорогой» задачей.
Спасибо за оказанное внимание :)
8bit CPU, 64Kb Ram — это одинаково и в NES и в ZX-Spectrum
Z80@4MHz успевал (не нравится Black Raven — посмотрите первую UFO — она тоже realtime была) заниматься расчетами и (очень важный фактор) отрисовывать всю графику (а экран на спектруме был не особо удобно с точки зрения «что нибудь на нём нарисовать» устроен).
В NES есть спрайтовый процессор, т.е. CPU отрисовкой графики не занимается, только расчёты. Конкретно в Battle city расчетов этих — около нуля, т.к. вычислительная мощность этой игрушки никакая. «Задача недорогая для процессора» — означает что он её овер9к раз успеет посчитать без задержек в игре.
Объективные доводы? Ну я не знаю. Вытащите кусок кода который занимается «обработкой коллизий», сделайте бесконечный цикл и посмотрите, сколько раз он их за время одного кадра успеет посчитать, прежде чем считать это «дорогой» задачей.
Спасибо за оказанное внимание :)
0
Мне хотелось лишь услышать что-нибудь более объективное, чем ваше личное мнение. Всё-таки перед написанием статьи я проводил кое-какие исследования, и если я где-то допустил ошибку — то будьте добры, укажите на неё. Иначе холивар затеваю не я :)
А вам советую просто взять ручку, бумагу и прикинуть «на глаз»: при частоте 1.76 МГц мы получаем простор примерно в 30 000 тактов в кадр. Допустим, на обработку коллизии одной пули надо 50 инструкций, максимум на экране может находиться 10 пуль (6 вражеских и 4 пули танков игроков). В среднем на инструкцию приходится 4 такта, т.е. получаем 200 тактов на обработку одной пули.
Пусть мы проверяем пули только на столкновение друг с другом. Чтобы попарно сравнить 10 пар, понадобится 45 сравнений. 45 * 200 = 9 000 тактов, и это не учитывая других проверок и излишней оптимистичности исходных данных. Могу где-нибудь ошибаться, но это не важно — даже при грубых подсчётах очевидна дороговизна данной операции.
А вам советую просто взять ручку, бумагу и прикинуть «на глаз»: при частоте 1.76 МГц мы получаем простор примерно в 30 000 тактов в кадр. Допустим, на обработку коллизии одной пули надо 50 инструкций, максимум на экране может находиться 10 пуль (6 вражеских и 4 пули танков игроков). В среднем на инструкцию приходится 4 такта, т.е. получаем 200 тактов на обработку одной пули.
Пусть мы проверяем пули только на столкновение друг с другом. Чтобы попарно сравнить 10 пар, понадобится 45 сравнений. 45 * 200 = 9 000 тактов, и это не учитывая других проверок и излишней оптимистичности исходных данных. Могу где-нибудь ошибаться, но это не важно — даже при грубых подсчётах очевидна дороговизна данной операции.
+2
Вот он какой… World of Tanks моего детства! =)
+1
страшно представить как реализовывались такие игры как battle toads. Вообще заметен огромный прогресс в играх сравнении 87 года и 93 (battle toads, kirby`s adventure) И музыка инетреснее стала, и оформление, прямо таки выжимание всех соков из железа.
0
Где можно качнуть полную коллекцию спрайтов?
0
Sign up to leave a comment.
Ностальгия: роемся у «Танчиков» под капотом