"Олды тут!" или вспоминаем ещё 12 игр на Dendy Junior
Приветствую. Это называйте как хотите. Дерьмовый и никому ненужный пост, продолжение вот этого пост о Денди Джуниор, или очередной волна "олды тут?". Мне безразлично, задача состоит в ином.
Цель этого поста - ностальгия, и наверное снова вспомнить как было классно в далёкие 2000-е. Никто уже и никогда не вернётся в 2007. Но зато вот такими постами, есть возможность погрузиться в воспоминания о прекрасном детстве.
В прошлый раз я допустил ошибки. Ну перестарался, грубо говоря. В этот раз постараюсь их не допустить. Итак, кому интересно и желает снова вспомнить игры Dendy Junior, приглашаю в этот пост, где поговорим о 12 различных картриджах моего детства.
Итак, начинаем!
*12 картриджей с играми на Dendy Junior"
Прежде чем начать, я могу часами говорить о Dendy. Уже писал и повторяться не буду, но скажу так: после 2014 у меня появилась PS 1, и я был в восторге. Но самый главный след, или скажем так, приятные воспоминания неизменно оставил Dendy Junior. Ведь Денди это когда:
-Сынок, поиграй ещё 2 часа, потом дай телевизору отдохнуть. Кинескопу хана будет, если не послушаешь
-Слушай, дай мне картридж поиграть. Я тебе верну через день. Честно, честно!
-Хватит глава садить, отодвинься от экрана телевизора! - сказала мама
Ну ладно, хватит вспоминать, перейдём к делу.
Tiny Toon Adventures
Tiny Toon Adventures (с англ. — «Приключения мультяшек») — видеоигра в жанре платформерной аркады, разработанная и изданная компанией Konami в 1991 году для игровой приставки NES. Это первая видеоигра по мотивам мультипликационного сериала Приключения мультяшек.
2. Earthworm Jim
Earthworm Jim (с англ. — «Червяк Джим»; сокр. EWJ) — видеоигра в жанре платформер, разработанная студией Shiny Entertainment и изданная компанией Virgin Interactive. Главным героем игры является антропоморфный земляной червь по имени Джим, одетый в роботизированный суперкостюм и сражающийся со злом. Игра была выпущена для приставки Mega Drive/Genesis в 1994 году и впоследствии была портирована на SNES, Game Gear, Game Boy и ПК. После выпуска журналисты положительно оценили игру за детальную анимацию, продуманный игровой процесс и эксцентричный абсурдный юмор.
3. Duck Tales
Игра Disney's DuckTales представляет собой 2D скролинговый платформер, схожий с серией игр "Megaman" яркой графикой и геймплеем.
4. Felix the Cat
Felix The Cat — видеоигра, выпущенная в 1992 году для платформы NES, а в 1993 — для Game Boy. Игра разработана японской компанией Shimada Kikaku и издана компанией Hudson Soft по мотивам мультфильмов с участием Кота Феликса. Версия игры для Game Boy практически идентична версии для NES, но содержит меньшее количество уровней.
В 28 марта, 2024 года компания Konami переиздала двух версии игры на нынешней игровых поколений PS4, PS5 и Nintendo Switch.
5. Ninja Gaiden
6. Bomberman
Bomberman — серия компьютерных игр и медиафранчайз, созданная компанией Hudson Soft. Первая игра серии Bomberman выпущена в 1983 году для домашних компьютеров и игровой консоли NES. В Европе игра распространялась под названием Eric and the Floaters. Игра стала началом одноименной серии. Игры серии разрабатывались и издавались как самой Hudson Soft, так и рядом других компаний и выходили на большинстве существующих игровых систем.
7. Tom & Jerry
Игра Tom & Jerry — приключения мышонка Джерри, которому предстоит спасти своего племянника Таффи из лап кота Тома, который посадил его в клетку на чердаке. Джерри должен пройти весь дом от подвала до чердака и спасти малыша Таффи.
8. The Lion King
The Lion King (рус. Король Лев) — видеоигра, основанная на одноимённом мультфильме студии Диснея. Сюжет игры повторяет сюжет мультфильма: сначала приходится управлять молодым львёнком, который сражается с жуками и дикобразами, затем он растёт, враги становятся всё опаснее.
9. Double Dragon
Double Dragon (яп. 双截龍(ダブルドラゴン) Сосэцурю — Дабуру Дорагон) — компьютерная игра в жанре Beat ’em up, разработанная Technos Japan в 1987 году и изданная на территории Северной Америки и Европы компанией Taito Corporation. Позднее была портирована на множество игровых систем.
Технически игра была преемником более раннего продукта Technos — Nekketsu Kouha Kunio kun, но предоставляла игроку некоторые нововведения (режим совместной игры для двух игроков, возможность использования оружия противника и др.)
10. Blades of Steel
Blades of Steel, позже выпущенная в Японии как Konamic Ice Hockey (яп. コナミック アイスホッケー Konamikku Aisu Hokkē) — хоккейная видеоигра, выпущенная компанией Konami для североамериканских аркадных автоматов в 1987 году, и портированная на Family Computer Disk System и Nintendo Entertainment System в 1988 году. Все команды вымышленные, но основаны на реальных канадских и американских городах. Игра известна своим быстрым темпом игровых действий и режимом хоккейных драк. Имеется режим на 1-го и 2-х игроков. При игре против компьютера есть три уровня сложности на выбор: Junior, College и Pro (Pro — самый сложный, Junior — самый простой). Каждая команда состоит из трех нападающих, двух защитников и вратаря.
11. TopGun: The Second Mission
Top Gun: The Second Mission (в японской версии Top Gun: Dual Fighters) — видеоигра в жанре авиасимулятор, выпущенная в 1989 году в Японии. Игра основана на фильме 1986 года[1], разработана и выпущена компанией Konami. В последующем в 1990/1991 годах игра издавалась в Северной Америке и Европе[⇨]. Top Gun: The Second Mission является второй игрой в серии игр Top Gun компании Konami.
В Top Gun: The Second Mission игрок берёт на себя роль искусного пилота Пита Митчелла по кличке «Мэверик», являющегося курсантом американского училища, известного как Top Gun[англ.]. В игровой кампании перед Мэвриком ставятся задачи уничтожения стратегических целей, во время полёта к каждой из которых приходится сталкиваться с разнообразными противниками.
12. Jackal
Jackal (яп. 特殊部隊ジャッカル токусю бутаи дзяккару, буквально «Специальное подразделение Шакал») (Top Gunner в США) — видеоигра в жанре боевика, разработанная компанией Konami в 1986 году. Изначально была выпущена в виде аркадного игрового автомата на основе аппаратуры для игры Double Dribble. Впоследствии была портирована на ряд домашних игровых систем, включая игровую консоль Nintendo Entertainment System. Версия игры для Famicom Disk System была выпущена под названием Final Command: Akai Yōsai (яп. ファイナルコマンド 赤い要塞 фаинару командо акаи ё:саи, буквально «Последний приказ: Красная крепость»). 29 июля 2009 года Konami издала Final Command Red Fortress в Японии как мобильное приложение для телефонов c FOMA серии 703i и 900i. Услуга предоставлялась при подключении к сети Konami Net DX. Саундтрек официально доступен с 2014 года на второй части сборника Konami Famicom Chronicle от лейбла Egg Music Records.
*Общий итог*
Ну, надеюсь немного ностальгии появилось. Можете также писать свой список, как и в предыдущий раз. Ну это был последний выпуск, скажем так, на волне постов о ностальгии.
Хотя ПК-боярам, я приготовил ещё один пост ностальгии.
Спасибо за внимание!
В бонус оставляю это
Ура
Сможете найти на картинке цифру среди букв?
Справились? Тогда попробуйте пройти нашу новую игру на внимательность. Приз — награда в профиль на Пикабу: https://pikabu.ru/link/-oD8sjtmAi
Glen Fox — FF7_MSDOS.EXE
Хамелеон (англ. Chameleon): Чешский Сэм Фишер
Сегодня поговорим о многими забытом стелс-экшене Хамелеон (ориг. англ. назв. Chameleon) 2005 года
Игра создана группой разработчиков вышедших из под крыла Illusion Softworks, не знаю причины по которым они решили отправится в свободное плавание
Судьба проекта Chameleon довольно терниста и печальна. Разработка завершилась в 2003 году, а своего покупателя игра увидела только спустя 2 года в 2005. С издателем Gathering of Developers судьба не сложилась, а других на примете не оказалось так и пылилась игра, пока в 2005 создатели называют себя Silver Wish Games и выпускают игру из под крыла издателя Cenega Czech.
Малый бюджет студии стал причиной небольшого тиража копий игры, которые издавались только в нескольких странах: России, Польши и Чехии. На западные площадки она так и не пробилась, даже нет английской озвучки (фаны сделали англификатор для этой игры, конечно же неофициальный). Радует что благодаря 1С мы можем наслаждаться этим шедевром.
Jewel-издание от 1С у кого-то, наверное, до сих пор пылится на полке
Польское издание (нашел на их аналоге "Авито", можете взять себе за 80 злотых)
Чешское издание
Сюжет
Стоял мирный осенний день, жаркий, как всегда в это время года в
Латинской Америке. Мальчик мало что понимал из того, что происходило вокруг – он знал только, что эта страна называется Никарагуа, а его отец большой начальник в посольстве и постоянно занят. Они заехали в посольство буквально на минуту, чтобы забрать кое-какие вещи и отправиться на уик-энд за город.
Может быть, на этот раз ему удастся провести с отцом больше получаса… поиграть в бейсбол, снова почувствовать себя одной семьей…
Но два выстрела унесли жизни отца и матери…
Дядя Сэм взял его под крыло. Он получил прекрасное образование и сразу после университета поступил на службу в ЦРУ. Но так и не смог забыть лицо снайпера и торжествующее выражение на нем, когда его отец и мать рухнули на землю. Это лицо часто снилось ему в кошмарах. Он всегда стремился выяснить, кто убил его родителей, кто заказал убийство и зачем.
В архивах ЦРУ он нашел множество материалов. Часть из них с полной определенностью указывала на то, что расследованием убийства никто всерьез не занимался.
Споры с начальством и стремление раскопать информацию о старом безнадежном деле не способствовали его популярности среди коллег. Его считали чудаком. А однажды он переступил
грань… и терпение дяди Сэма лопнуло.
Он свободен – впервые в жизни.
Он никому ничего не должен.
Пришло время раз и навсегда расквитаться с прошлым.
Он может раствориться в толпе.
Он знает, как добывать оружие, снаряжение и информацию.
Он может выполнить свою миссию, не выдав себя.
Он – Хамелеон.
Но он больше не работает на дядю Сэма.
Он работает на свою семью.
Вступление. Руководство пользователя "Хамелеон"
После такого вступления сложно еще что-то добавить. Как Вы уже поняли действие игры происходит в конце 1980-х годов, мы примеряем на себя роль бывшего агента ЦРУ, последние 15 лет живёт надеждой отомстить за смерть своих близких.
Копания в архивах, поиск какой либо информации о гибели родных, вызывает неодобрение начальства и главного героя выпирают со службы.
Единственный друг и бывший коллега Майк Вайс-наш куратор на протяжении всей игры.
Он главный поставщик информации для расследования, без него не проходит ни один брифинг в начале миссий, где мы согласовываем по телефону план действий на ближайшее будущее, кроме случаев когда мы оказываемся в западне, такая перебивка уровня никак не комментируется, вернее ведутся обсуждения внутри головы ГГ.
Как и в фильме "Довод" у протагониста нет имени, видимо что бы мы получше прониклись его переживаниями, примеряли на себя шкуру экс-агента ЦРУ.
Поиск различных зацепок, улик и людей причастных к убийству семьи протагониста открывают перед ним обширную географию путешествий. Что бы найти, ликвидировать, допросить подозреваемых или добыть нужные сведения мы будем вынуждены колесить по всему миру. США, Ирландия, Молдавия, Куба- и это не полный перечень страны в которых нам предстоит побывать.
Игровой процесс и механики
Те кто хоть раз играл в Mafia: The City of Lost Heaven, будут себя здесь чувствовать как рыба в воде. В игре используется всё тот же движок LS3D engine на котором также крутиться Hidden & Dangerous 2 от тех же Illusion Softworks.
Анимации движений персонажа возвращают нас в Лост Хэвен, из новаторства местный Томми Анджело научился лазать на пузе.
Да, можно заползти в самые закрома
Гангстерская походка
Бег трусцой в Бар Сальери
Вспоминаем "Посещение богачей"
О, те самые перекаты
Вспомнил ферму с бутлегерами, и да тут забавное стечение обстоятельств
Да интерфейс тут изменился, слева здоровье в процентах и положение героя(стоя, сидя, лежа), посередине шкала видимости - аскетично в духе Hitman или Splinter Cell, справа отображается выбранное оружие или инструмент(отмычка, ночное виденье, микрофон, зонд для подглядывания под дверь и т.д.).
Сэм Фишер?
Хотите знать о чем говорят соседи? У нашего протагониста всегда на готове-микрофон. Стоит отметить, что больше, кроме как в этом эпизоде, он нигде не используется.
Если в Hitman можно было заглянуть в замочную скважину, то здесь в 1980-х годах у нас есть специальный зонд
Поговорим об игровом процессе перед нами типичный стелс-экшн в духе Сэма Фишера и 47-го. Рабочие будни Хамелеона ( имени протагониста нам так и не назовут) представляют собой типичные стелсовые похождение. Постоянное пребывание в тени, выслеживание жертвы, обезвреживание мешающих продвижению мобов.
Можно подкрасться по классике сзади, и усыпить крепкой хваткой супостата, либо радикально воспользоваться шокером.
Камеры в помещение не проблема, отключил и делай темные дела
Переодеться как в Hitman не выйдет если это не задумано по сюжету.
Маскировка точь в точь как в Mafia когда мы переодевались матросом, экран темнеет и мы поменяли шкурку.
Автомобили присутствуют как декорации, в них нельзя сесть и тем более куда-то отправиться, только в одной из миссий нам дадут проехать пару километров.
Добавили лазание по тросу для проникновения в охраняемые зоны, видно влияние Splinter Cell
Каждый эпизод в целом больше камерное, закрытое представление, да иногда создается иллюзия открытого мира, пока вы не упретесь в невидимую стену
Вначале каждого эпизода (так именуются миссии), мы можем выбрать оружие по душе.
В процессе путешествия по локациям есть возможность заменить оружие на выпавшее из поверженного врага. Набор огнестрела носимого с собой скуден в угоду реализма, только тяжелое ( винтовка, автомат и т.д.) и легкое (пистолет с глушителем и т.д.), тяжелое оружие мы можем лицезреть на спине героя.
Так же можно временно отключать камеры, взбираться на небольшие препятствия(ящики, балки, камни и т.д.). Неясно, только почему ГГ не может нормально подтянутся на руках за условный невысокий выступ, но это уже условности стэлс-боевика. Если же на пути дверь это не беда, взламывать двери мы умеем.
Теперь поговорим о стрельбе. Все огрехи стрельбы из Mafia перекочевали и сюда. Для прицельной стрельбы необходимо сначала прицелиться, а только потом осуществлять выстрел. Вот только если в той же Mafia это делалось правой клавишей мыши, здесь водрузили этим делом левую. Выбрали оружие, как бы взвели на изготовку до перекрестья левой кнопкой мыши, и можете поливать дождём из пуль неписей. С близкого расстояния проблем в осуществлении выстрелов никаких не испытываешь - сделал "хэдшот" и побежал дальше, а вот с дальнего уже вопросы, непонятен разлет пуль. Вроде целился в голову, а улетело выше, либо попал, но в шею. Другое дело снайперская винтовка - с ней проблем нет. Автоматическое оружие ведет себя как автомат Томпсона из всем известной нам любимой игры.
На левой кнопке мыши вообще держится буквально вся игра - это некая универсальная клавиша "Действие", в зависимости от предмета её функционал видоизменяется. Взяли оружие - стреляете, шокером - обезвреживаете врагов, на пути дверь - под меню открыть/взломать. В целом это в некотором роде удобно, только тяжело в усвоении. Например, я вроде бы и привык к управлению, но в середине игры у меня были запинки, когда после стрельбы я палил по аптечке, хорошенько не наведясь на неё, чтобы загорелся соответствующий ореол действия. Как видим, песочница весьма разнообразна и в духе канонов стелс-жанра.
Графика
Скажу кратко, что-то хорошо, что-то не очень. Для 2003 года выглядит сносно. Непонятна, правда, работа движка или подбор текстур, в некоторых местах всё выглядит шикарно, а в других бросается в глаза какие-то артефакты и острые полигоны. Во время игры меня смущало, что не всегда понятно, как в мультике с койотом и нарисованным проходом в горе, двери открываются или это текстура. По поводу моделек персонажей, ну тут бесспорно движок немного устаревший, фигурки даже не моргают, просто кивают головами, иногда открывают рот.
Звук
Будем судить об локализованной версии от 1С. Да, локализация хороша. Узнаются знакомые и любимые всем голоса. Я сразу узнал Капитана Прайса в одном из персонажей, и даже как-то настроение улучшилось. Правда, иногда сказывается неопытность некоторых актеров. Вот тут они важно и деловито отыгрывали свои роли, а уже в другом месте актриса как-то по-детски верещит. Это, конечно же, моё субъективное мнение. Музыкальное сопровождение больше нейтральное, что-то выделить не могу. Да, в разгар боя или потенциальной опасности с помощью высокопарных нот создают гнетущую атмосферу неизбежного, но спустя пару секунд мелодия затухает, и мы успокаиваемся, продолжив свой путь.
Баги
За время прохождения был встречен всего лишь один баг. К сожалению, заснять я его не успел, и повторить тоже. После распрыжки на вокзальной тележке герой просто провалился в текстуры. Ну, ещё можно отнести к багам стрельбу через некоторые предметы, правда, это уже проблемы самого движка и неправильные хитбоксы.
Личное мнение
Что я могу сказать, пройдя эту игру? Если вы поклонник Hitman, Splinter Cell и им подобных стелс-игр, смело можете опробовать данный экземпляр. Не скажу, что эта игра бриллиант в дорогой оправе, но "проходняком" назвать её язык у меня не повернется. Довольно разнообразные миссии, крепкий сюжет в духе боевичков 90-х, под конец игры даже проникаешься теплым чувством к протагонисту. По скольку я не шибко фанат, например, Splinter Cell, где стелс выведен в абсолют. Некоторые миссии меня раздражали, в частности, тюрьма в Колумбии, где вообще неясно, как осуществить задуманное. Как итог, остались только положительные эмоции, особенно после финала, ну и плюс множества переплетений и отсылок на Mafia: The City of Lost Heaven.
Приколы
Весёлая часть поста (бонус для тех кто дочитал до конца)
Не знаю зачем, разрабы этой игры знатно порофлили создав несколько занятных моментов.
Некоторые видео не рекомендуется смотреть если завтракаете/обедаете/ужинаете
Наш герой так радуется аптечке
Классика перекочевавшая из Mafia
Проблемы с отражением
Оммажи на Mafia не редкость в этой игре
Фидель добавляет Кубе колоритности
Чайник так засвистел, что я аж отскочил
После этого я уже хотел всё бросить и сразу написать что игра 12 логвиновых из 10.
Возможно, приколов больше, мог просто пройти мимо и банально не заметить, если у Вас есть информация по ним пишите в коммы. Игрушка особо не котировалась на западную аудиторию, поэтому её мало кто ковырял и исследовал.
Жду Ваши отзывы в комментариях!
У кого какие истории связаны с этой игрой?
Когда впервые с ней познакомились?
Ответ на пост «Когда почти год не был на Пикабу»
Вы не были год, а я не был ночь. Такое впечатление, что с каждым днём всё хуже и хуже. Огромное спасибо всем причастным, которые за последние полтора-два года сделали все, чтобы самый адекватный сайт рунета, настоящую кладезь контента, превратить в помойку с бесконечным аниме, камвхорами, которым собирают всем Пикабу на пабрикушки и отдых на курортах, сиськами и котиками, и, конечно же, скриншотами постов с юмором уровня "дноклассников". Обитель не женатых дрочил, кому от 18 и за 60?! Или зона авторского контента?! Как вам лента современного Пикабу, нравится?! Это то, каким он сейчас стал. Кайф. Теперь можно каждый день обмазываться этим гуано. Я не говорю, что вышеобозначенные темы не имеют право на существование, конечно же имеют. Но это не должно так работать, да и не работало оно так раньше. Нужен баланс, и отображение мнения общественности в виде отрицательного рейтинга. А вы, уважаемая администрация, одно выкрутили на максимум, а другое помножили на ноль.
Реставрируем старые фильмы (РФ, зарубежная классика), Колоризация ч/б фильмов
Блокпост 1998
Сейчас много возможностей заниматься реставрированием старых фильмов с помощью нейросетей, по этому тоже решили поделать)) Результаты загружаем на телеграмм канал.
По крайней мере с мылом в кадре можно расправится и убрать царапины с пленки
Тестируем на 2-х фильмах Рогожкина - "Блокпост"(1998) и "Особенности национальной охоты в зимний период" (2000)/
Не идеально, но на большом экране смотрится намного лучше.
Тут сравнение с 1080 записи Первого канала (лучшее качество в сети, но есть баннер канала) и нашей обработки dvd
Первый канал (он намного лучше dvd качества, но с баннером)
Наш вариант (не идеально, но в процессе)
Также приложил фрагмент колоризации классики - 12 разгневанных мужчин (1956). Пока тестируем и возможно придется убирать многие огрехи вручную.
Недавно выложил цветную версию Ночь живых мертвецов (1968) - улучшенный официальный покрас классики.
Если интересно посмотреть, обсудить и тд приходите на канал. Еще занимаемся проф озвучкой (озвучили 22 фильма) с привлечением известных актеров дубляжа вроде Иващенко, Еремина, Репетура, Концевича, Зайцева, Севенкова, Жаркова, Вирозуба, Левина и многих других . Канал -
Если вы профи в своем деле — покажите!
Такую задачу поставил Little.Bit пикабушникам. И на его призыв откликнулись PILOTMISHA, MorGott и Lei Radna. Поэтому теперь вы знаете, как сделать игру, скрафтить косплей, написать историю и посадить самолет. А если еще не знаете, то смотрите и учитесь.
Сам написал, сам поиграл: как работали трёхмерные игры на кнопочных телефонах нулевых? Пишем 3D-шутер с нуля
Думаю, большинство моих читателей успела застать эру кнопочных телефонов с поддержкой Java-приложений. Помните ли вы, как мониторили разделы с загрузками на WAP-сайтах и ждали выхода новых игр, которые подойдут под ваш телефон и разрешение экрана? А какой восторг вызывали свежие 3D-игры, где графика с каждым релизом становилась всё лучше и была вполне на уровне PlayStation 1? V-Rally, Galaxy On Fire, Asphalt Urban GT, Deep3D, Sony Ericsson Tennis, Left 2 Die, Counter Terrorism 3D — думаю, хотя бы один из этих тайтлов вам знаком. Но задумывались ли вы, как работали эти игры «под капотом»? Каким образом разработчикам удавалось адаптировать полноценные 3D-шутеры и гонки под железо, где не было 3D-ускорителей (видеокарт), сопроцессора для чисел с плавающей точкой (FPU), а одноядерный процессор, работающий на частоте 100-200МГц, помимо игры обрабатывал ещё и звук, ввод, а также радиомодуль? Сегодня мы узнаем: как разрабатывали игры под J2ME, какие графические API существовали и на каких телефонах поддерживались, почему игры на Sony Ericsson шли лучше, чем на Nokia, а на «закуску» сами с нуля напишем 3D-бродилку в практической части! Интересно? Тогда добро пожаловать под кат!
❯ Предыстория
Обычно принято считать, что полноценные 3D-игры на кнопочных телефонах начали выходить примерно в 2004-2005 году, как раз с выходом графического API M3G. Однако, история мобильного трёхмерного гейминга тянется несколько дальше и уходит корнями в самое начало двухтысячных годов — как раз, когда телефоны только-только начинали обрастать мультимедийным функционалом.
Мы с вами привыкли, что существовали Java-игры для простых кнопочных телефонов и BREW-игры для телефонов Qualcomm. Но на рубеже нулевых сразу несколько перспективных компаний боролось за право стать разработчиком основной мобильной платформы и вытеснить J2ME. Одной из самых известных была Mophun, которая представляла из себя кроссплатформенную виртуальную машину, исполняющую байткод в собственном формате. И уже в ~2002-2003 году, Mophun представили 3D API для разработки очень симпатичных мобильных игр, которые и работали шустро.
Кстати, опробовать Mophun-библиотеку вы можете и сами: в РФ из Mophun-девайсов был как минимум Sony Ericsson T610, которые сейчас можно купить чуть ли не по «сотке» на вторичке.
Помимо Mophun, на французских телефонах производства Alcatel и Sagem была установлена платформа In-Fusio, тоже основанная на J2ME (а может и какой-то собственный сабсет API), однако со своим специфическим набором API, ориентированном на разработку игр. Мы с EXL даже в прошивке OT535 копались, прямо в HEX-редакторе, чтобы найти информацию о встроенной 2.5D-игре-бродилке:
Как можно заметить, спрос на 3D-игры появился практически в тот момент, когда в мобильные девайсы начали ставить достаточно мощные по тем годам процессоры: ~60-100МГц. Разработчики реально верили, что телефоны можно превратить не только в мультимедийное устройство, но и портативную хэндхэлд-консоль с графикой уровня не хуже GBA!
В сегодняшнем материале я хотел бы сосредоточиться именно на трехмерных Java-играх. Очевидно, что вручную рисовать 3D-графику без использования внешнего нативного API, написанного, например, на C, было бы проблематичным — девайс просто не вывез бы оверхеда Java-машины (хотя есть и исключение — некоторые 2.5D игры используют собственный портальный рендерер по типу того, что был в Duke Nukem 3D).
В процессе существования J2ME любая компания могла внести предложение по необязательному расширению мобильной платформы: это называется JCP (Java Community Process), а спецификации в ней — JSR. Таким образом, появилось множество разных расширений: AWT, GLES, M3G, PIM, Bluetooth API и примерно к 2005 году, M3G появился на большинстве кнопочных телефонов. Но мы ведь не одним M3G ограничены! Давайте глянем, какие ещё GAPI существовали на мобилках.
❯ Какие были 3D GAPI?
Под J2ME телефоны существовало сразу три стандартизированных графических API для отрисовки трёхмерной графики, которые были описаны в виде JSR. Вероятно, были ещё какие-то особенные API для телефонов из Азии (где традиционно телефоны акцентировались на играх с крутой 3D-графикой), однако они не поддерживались на обычных устройствах и информации о них очень мало.
Рассмотрим основные GAPI, которые использовались на большинстве телефонов:
M3G JSR184: Mobile 3D Graphics — самый популярный графический API, который поддерживался на большинстве Java-телефонов. Известен своей открытостью, функционалом и довольно неплохой производительностью. Строго говоря, M3G — это не только Immediate API для отрисовки треугольников в духе OpenGL или D3D как мы привыкли, но и уже готовый граф сцены (а-ля Unity), формат моделей, система материалов, обработки столкновений, освещения и т. д. Был достаточно хорошо оптимизирован и имел низкий порог вхождения, благодаря чему стал стандартом на мобилках.
Mascot Capsule: графический движок, разработанный японской компанией Hi Corp. Использовался в основном на телефонах для азиатского рынка и выдавал очень хороший на момент выхода уровень графики. Во многих аспектах лучше, чем M3G, однако порог вхождения в него несколько выше. Несколько напоминает D3D/OpenGL. Поддерживался на Sony Ericsson и на Motorola.
OpenGL ES JSR239: поддерживался только на некоторых моделях и вышел достаточно поздно (в контексте Java-телефонов), из-за чего популярности на простых телефонах не получил, зато активно использовался в смартфонах (стоит взглянуть на игры для iPhone 2G для сравнения). Является самым «тяжелым» и функциональным графическим API из перечисленных. Что интересно: изначально Google полностью перенесли JSR239 на Android, дабы поспособствовать портированию игр с Java-телефонов на смартфоны с зеленым роботом. По первой это, скорее всего, даже помогало.
Большинство читателей застали игры, использующие именно платформу M3G, которая, помимо отрисовки 3D-графики, предоставляла ещё много самых разных фишек: например, уже упомянутый граф сцены с собственным форматом файлов. Поскольку плагины для импорта и экспорта в 3d max были доступны каждому, а сам M3G плохо располагает к тому, чтобы использовать собственные форматы файлов, вскоре на некоторые игры начали повально появляться моды. Пожалуй, одним из рекордсменов по числу модов является игра Left 2 Die, которую как только не переделывали: и под Half-Life, и под Quake, и под обычную Left 4 Dead закос делали… чего только не было
Другой игрой, на которую часто делали моды — это Comcraft, написанная студентом в начале 2010-х годов. Там, в основном, моды имели чисто характер ретекстура а-ля «новые типы блоков». Всё это было возможно благодаря наличию на Java-телефонах различных Zip-архиваторов, благодаря чему молодые моддеры могли перепаковывать ресурсы игр как им угодно.
Ну и третья легендарная игра, которую расковыряли через пару лет после выхода — это, конечно-же, Galaxy on Fire 2. Изначально, она была рассчитана для запуска на мощных устройствах уровня Symbian-смартфонов и телефонов Sony Ericsson. Однако умельцы урезали звуки, музыку и игра запускалась даже на s40!
А вот с глобальными модами, меняющими геймплей игры, не задалось. Несмотря на то, что программы на Java легко декомпилируются, большинство разработчиков обфусцировали код при публикации игры. По каким-то причинам никто не хотел копаться и деобфусцировать чужой код (хотя это явно гораздо проще, чем копаться в нативном коде в IDA Pro) и хотя бы попытаться сделать некоторое подобие «SDK для модов». Увы :(
❯ Секреты производительности
Характеристики типичного кнопочного телефона тех лет были не особо впечатляющими:
Процессор: 104-200МГц, ARM926EJ-S ядро, иногда с поддержкой нативного выполнения Java-байткода. Без сопроцессора для чисел с плавающей точкой (FPU), без какого-либо видеоускорителя (за некоторыми исключениями) — вся нагрузка ложилась на процессор и иногда вспомогательный DSP.
ОЗУ: 8-16Мб SDRAM-памяти. Java-приложениям не доставалась вся память, а лишь её небольшой кусок, называемый кучей (Heap). Обычно размер Heap был от 800Кб до 2Мб. Умельцы даже патчили Java-машины некоторых телефонах, дабы выделить программам больше памяти. От размера кучи зависела работа тяжелый игр и программ: когда heap заканчивался, приложение падало в OutOfMemoryException.
Память: 10Мб-8Гб Flash-памяти.
Дисплей: CSTN, TN или AMOLED (редко) матрица с разрешением от 128x128, до 480x320 (возможно бывало и выше).
Очевидно, что на устройстве с такими характеристиками классические техники отрисовки 3D-графики не будут работать из-за малого количества памяти. Поэтому в ход шли некоторые интересные хаки, знакомые нам со времен PlayStation 1 и даже более старых консолей!
Начнём с сортировки примитивов. Представим, что у нас есть машинка и домик позади неё. Если мы отрисуем сначала машинку, а затем домик — то домик окажется перед машинкой, что полностью сломает эффект погружения и какую либо проекцию:
Пример такого эффекта можно найти в большинстве игр для PlayStation 1 — вот тут, например, лапки обезьяны видны поверх камня, чего быть не должно.
В современных приложениях, для сортировки геометрии по удаленности от наблюдателя используется screen-space техника Z-buffering, которая позволяет «дешево» отсекать невидимую глазу часть геометрии. Принцип её прост: по размерам окна приложения создаётся буфер, где каждый пиксель содержит информацию не о цветности, а о дальности фрагмента в этой конкретной точке. По итогу, во время отрисовки машинки, в Z-буфер будет записана глубина (дальность) конкретного фрагмента (участка геометрии), а когда будет нарисована домик, то видеочип сравнит значение глубины фрагмента машинки с машинкой и если значение глубины, хранящееся в буфере окажется меньше (или больше — зависит от реализации) прошлого значения — тогда часть машинки будет нарисована там, где нужно. Думаю, такое объяснение более чем понятное :)
Однако, Z-буфер требует драгоценную память (минимум ширина экрана * высота экрана * 2 — число байт в half float — т. е. 153 килобайта для экрана 240х320 как минимум) и наличие FPU для достаточной точности буфера глубины. Если же попробовать использовать обычные числа для этого, то вскоре мы столкнемся с проблемами точности, из-за чего будем видеть depth-fighting и от техники будет больше проблем, чем пользы.
В телефонах используется точно такая же техника, как и в PS1: сортировка отдельных полигонов. На PS1 с этим помогал отдельный векторный сопроцессор, который управлял трансформацией геометрии, освещением и мог эффективно сортировать треугольники, не нагружая основной процессор. А вот на телефонах этим занят основной процессор, вместе с растеризацией, обработкой игровой логики, звука и радиомодуля. Поэтому для корректной сортировки, вся отрисовка в GAPI на телефонах делится на «батчи», где программист отсылает набор нужных ему команд (отрисовать такую-то модельку с такой-то текстурой и такой-то трансформацией), а API затем уже трансформирует и сортирует вершины наиболее эффективным способом.
Второй интересный момент — это система координат. Как я уже говорил ранее, аппаратной поддержки float-чисел в телефонах зачастую не было. Однако j2me-машина и компилятор C (в те годы для прошивок чаще использовали ADS, чем GCC) предоставляли программную реализацию float-чисел, которая была ощутимо медленнее аппаратного FPU. Поэтому даже такие операции, как вычисление синуса и косинуса могли стать относительно тяжелыми для телефона, чего уж говорить о перемножении матриц.
Для обхода этого ограничения использовалось две техники: fixed-point числа, где число с дробной частью представлено в виде обычного целого чисел, с которым умеет работать процессор (M3G) и обычные целые числа, которые представляют нормализованные числа 0.0… 1.0 (Mascot Capsule). Оба способа имеют ограниченную точность и в некоторых моментах могут давать артефакты, но здесь всё сильно зависит от самой игры. Например, из-за низкой точности при движении персонажа мир может «трясти».
И третий момент — это текстурирование и освещение. Сама концепция идентична той, которая используется в большинстве современных игр, однако из неё исключается важный этап: перспективно-корректное наложение текстур. Если говорить простыми словами, то при линейном наложении текстуры на геометрию «как есть», если подойти к модельке домика слишком близко — мы увидим искажения текстуры на его поверхности. Другой пример — шахматная доска, которая при приближении будет не идеально ровной, а если подойти совсем близко — то мы получим серьезные артефакты, которые полностью исказят визуальное представление. Для перспективной коррекции нужен тоже нужен FPU: это не бесплатная операция, поэтому от неё обычно отказываются (исключение — M3G), потому игры под J2ME иногда выглядят весьма странно:
Один из «универсальных» советов: желательно на этапе проектирования уровня и геймплея не ставить слишком близко друг к другу разные объекты и не давать камере игрока «смотреть» слишком близко на большие объекты.
В процессе подготовки статьи, я декомпилировал и изучил несколько 2.5D-игр из нулевых а-ля Wolfenstein 3D. Многие из них для лучшей производительности использовали пакет Nokia UI с DirectGraphics, который предоставлял некоторые плюшки для 2D-игр и возможность блиттинга произвольных изображений напрямую в экранный буфер. Там разработчики на что только не шли: и классический рейкастинг, и портальный рендерер — и всё это работало довольно шустро :)
Но вы ведь сюда не учебник по «матану» и не OpenGL Red Book пришли читать, верно? Поэтому давайте напишем свою 3D-бродилку под Java-телефоны с нуля! Да, это не совсем игра, но даст явное представление о том, как писали игры в те годы.
❯ Пишем свою «игру» с нуля
А напишем мы не просто что-то совсем примитивное, а основу для 3D-шутера от первого лица! Да, вот так сразу :) Конечно, не уровень Crysis, графика из 90-х, но для кнопочных девайсов вполне неплохо. Более того, эту игрушку я написал за полтора дня: основной рендерер за полдня и ещё какую-то базовую часть геймплея за день.
В качестве графического API я решил использовать Mascot Capsule. Материала о нём в сети относительно мало и для многих вообще остается загадкой, как он работает «под капотом». Про M3G писал немного aNNiMON, да и некоторая информация в сети есть, а про JSR239 особо из-за плохой поддержки на реальных девайсах. Тут важно понимать, что M3G и Mascot Capsule — это не DX11 и не Vulkan, порог вхождения у них достаточно низкий и понять их довольно легко, если иметь базовые представления о том, как работает 3D-графика. Поэтому создаём проект, мидлет (приложение в терминологии J2ME) и погнали!
Рендерер
Начинаем, конечно же, с инициализации контекста.
В J2ME принято наследоваться от GameCanvas и реализовывать игровой цикл именно в нём. Для начала работы с MascotCapsule и M3G достаточно лишь создать объект Graphics3D (в случае M3G — получить ссылку на синглтон), а также выделить необходимые ресурсы — в нашем случае, это матрицы, которые здесь называются AffineTrans.
Самый примитивный игровой цикл будет выглядеть так. Сначала мы заливаем экран цветом для предотвращения эффекта Hall of mirrors и биндим объект Graphics к Mascot Capsule, затем рисуем сцену и освобождаем контекст, а потом вызываем flushGraphics для вывода изображения на экран:
Результат: синий экран.
Давайте что-нибудь нарисуем. Mascot Capsule может использовать как собственный формат моделей mbac и формат анимаций с ActionTable, так и произвольную геометрию. Юзать готовые форматы слишком просто, да и накатывать 3ds Max с плагинами не очень хочется, поэтому мы будем генерировать геометрию сами. Начнем с отрисовки треугольника и трансформации геометрии.
Effect3D — это материал в терминологии Mascot Capsule. Данный объект позволяет задавать визуальные параметры для геометрии: освещение и источник света, Toon-shading для придания эффекта мультяшности, настройки альфа-блендинга и некоторых других эффектов.
Далее идёт трансформация геометрии: процесс преобразования треугольников из локальной системы координат в мировую, экранную и затем уже Clip-space.
Где affineMatrix — основная матрица, хранящая в себе результат перемножения viewProj матриц, а affineRotationY и affineTranslate — матрицы трансформации сначала для камеры, а затем уже для преобразования модели в мировые координаты. При этом проекция — тоже часть AffineTrans. Вот такая вот путаница.
В FOV (512) задается значение в радианах, где 0 — это 0, 4096 — это 3.14 * 2 (360 градусов). Это же касается и углов в поворотах.
Обратите внимание — матрицы имеют размерность 3x3, а не 4x4, как это принято в «больших» системах. translate здесь нет — только lookAt.
Идём дальше — к фактической отрисовке треугольников. Геометрия может иметь текстурные координаты, цвета и нормали. Формат вершины можно задавать динамически — необязательно передавать сразу все аттрибуты вершин. Из-за особенностей Mascot Capsule, геометрия не будет отрисована, если не переданы текстурные координаты или цвет.
UV-координаты указываются в абсолютных координатах текстуры. т. е. не 0..255, как на 3dfx Voodoo, например, а 0… ширина текстуры и 0… высота текстуры. Учитывая, что класс текстуры не позволяет даже её размер узнать… решение так себе.
Результат:
Добавляем второй треугольник, дабы нарисовать квад:
На этом, половина рендерера написана. Я не шучу :)
Теперь генерируем геометрию для кубика. Для наглядности я написал простенький класс для генерации геометрии на лету. Отдельный формат для моделей нам пока не нужен, поэтому я «запеку» геометрию в отдельный массив вершин.
Результат:
Текстурированные кубики рисовать умеем, камера у нас тоже есть: уже можно реализовать бродилку :)
Уровни
Уровни делать мы будем… прямо в IDE. Каким образом? Уровень будет храниться классическим для подобных игр способом: сетка x на x, где каждое число указывает ID-текстуры (и в оставшихся битах можно разместить какие-нибудь атрибуты), где 0 — блок отсутствует. Все блоки предполагаются твердыми.
З.Ы На Пикабу нет тега с кодом, поэтому пришлось вставлять код в виде скринов. А поскольку на кол-во медиа-элементов в посте есть ограничение в 25 блоков, пришлось остальной код кастрировать :(
Отрисовка подобного уровня в самом простом случае очень простая: мы просто проходимся по всей сетке и рисуем каждый куб, если ему назначена текстура. Однако, это не очень эффективный метод: в случае больших уровней с множеством перекрытых комнат, на GAPI ложится лишняя работа по сортировке геометрии, а также страдает филлрейт. Лучше всего разделить такие уровни на комнаты и рисовать только видимые участки уровня.
Результат:
Теперь нам необходимо реализовать возможность ходьбы по уровню. Для этого мы будем поворачивать камеру по координате Y при нажатии кнопок вправо и влево, а для движения вперед и назад вычислять forward-вектор, указывающий на направление персонажа относительно угла поворота, который представляет из себя синус и косинус угла поворота персонажа в радианах.
Напомню, что углы хранятся в виде 4096 = 360гр. = 3.14 * 2.
Теперь наш персонаж умеет ходить!
Однако без пола и потолка игра выглядит не особо привлекательно. Самое время их добавить! Настоящий вертикальный потолок реализовать будет затруднительно из-за отсутствия коррекции текстур — пол будет постоянно «плыть», что не очень красиво. Поэтому мы воспользуется дедовскими методами и закрасим нижнюю часть экрана серым, а потолок сделаем фоновой картинкой! Таким образом, каким бы большим не был уровень, в центре экрана всегда будет какая-то стенка, из-за чего мы не сломаем нашу перспективную проекцию!
Смешивать Graphics и Graphics3D одновременно нельзя — сильно падает производительность. А вот использовать Graphics для отрисовки интерфейса поверх Graphics3D после отрисовки кадра — можно! Суть хака простая: рисуем с ортографической (параллельной) матрицей половинку экрана с текстурой неба, а вторую половинку — просто серый квад. Всё очень легко и просто!
Рисуем оружие поверх экрана и получаем некое подобие 3D-шутера.
Game.current.renderer.getGraphics().drawImage(weapon, Game.current.renderer.getWidth() - weapon.getWidth() + (int)viewBobFactor, Game.current.renderer.getHeight() - weapon.getHeight(), Graphics.LEFT | Graphics.TOP);
Результат:
Обратите внимание на все артефакты, о которых я рассказывал в разделе оптимизации игр. И текстуры плывут, и мир дребезжит — всё это результаты оптимизаций со стороны разработчиков GAPI. Зато работает шустро!
Обработка столкновений
В любом шутере нужна обработка столкновений. Даже в космическом скроллшутере :)
Тут я чуток наговнокодил, поскольку нет необходимости проверять столкновение игрока с вообще всеми кубами на сцене: достаточно сделать выборку из ближайших восьми блоков, но для наглядности оставил так.
Принцип прост: обычная проверка AABB, весь резолвинг — это откидывание игрока обратно, если после последнего движения он «врезался в стену».
Можно считать, что основа игры уже готова.
❯ Что у нас получилось?
Давайте посмотрим. Запускаем бродилку в эмуляторе:
Но как насчет реального девайса? Для тестов у меня есть SE W200i, W610i и J10i2!
Все поддерживают Mascot Capsule, так что с тестами проблем не будет. Ниже тест на W200i, на остальных девайсах в моем первом комменте - Пикабу не даёт загрузить слишком много картинок/видео в один пост :(
❯ Заключение
Вот как-то так в нулевых и писали 3D-игры для кнопочных телефонов. Да, мы практически не затронули тему 3D-игр на Symbian-смартфонах (ранее я писал статью о разработке игры под WinMobile), но обсудили множество тонкостей и написали собственный Proof of Concept бродилки для подобных Java-мобилок. Исходным кодом бродилки я делюсь, кто угодно может использовать его как основу для своей игры или что-то типа такого. По крайней мере, видел пару лет назад несколько Java-игр, которые кто-то всё ещё делает.
Пишите свой опыт с Java-играми в комментариях :)
P. S.: Друзья! Время от времени я пишу пост о поиске различных китайских девайсов (подделок, реплик, закосов на айфоны, самсунги, сони, HTC и т. п.) для будущих статей. Однако очень часто читатели пишут «где ж ты был месяц назад, мешок таких выбросил!», поэтому я решил в заключение каждой статьи вставлять объявление о поиске девайсов для контента. Есть желание что-то выкинуть или отправить в чермет? Даже нерабочую «невключайку» или полурабочую? А может, у этих девайсов есть шанс на более интересное существование! Смотрите в соответствующем посте, что я делаю с китайскими подделками на айфоны, самсунги, макбуки и айпады!
Понравился материал? У меня есть канал в Телеге, куда я публикую бэкстейдж со статей, всякие мысли и советы касательно ремонта и программирования под различные девайсы, а также вовремя публикую ссылки на свои новые статьи. 1-2 поста в день, никакого мусора!
Материал подготовлен при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, дабы не пропускать новые статьи каждую неделю!