Русский
Русский
English
Статистика
Реклама

Dreamcast

Maple BUS в ореховой скорлупе или Периферия SEGA Dreamcast, как сделать

01.02.2021 10:05:55 | Автор: admin

И сразу к делу!

Протокол Maple BUS симметричный, то есть имея одну хорошую реализацию например HOST'а эту же реализацию можно использовать и как DEVICE. Проще, - можно читать джойстик, а можно им прикинуться.

Описание протокола (аппаратная часть).

Интерфейс Maple BUS двух-проводный. SDCKA/SDCKB, каждая из линий на определенных этапах выполняет роль как "передающая данные" и так и "защелкивающая данные".

Общение по шине Maple BUS осуществляется пакетами. Каждый пакет данных состоит из заголовочного паттерна, данных, контрольной суммы и завершающего паттерна. Максимальная длина пакета данных 1024 байта.

Всего паттернов 5 видов:

START - указывает на начало передачи данных (4-ре клока SDCKB в то время пока SDCKA в низком уровне).

Пакет всегда должен заканчиваться паттерном END (2-ва клока SDCKA пока SDCKB в низком уровне):

Occupancy паттерн - указывает на старт режима прослушивания шины (8-мь клоков SDCKB пока SDCKA в низком уровне). Переход линии HI->LO SDCKA после получения этого паттерна указывает на начало режима, LO->HI указывает на завершение. Этот режим используется для взаимодействия со световым пистолетом (Light GUN - Func. FT7):

RESET - аппаратный перезапуск устройства (14-ть клоков SDCKB пока SDCKA в низком уровне, только для DEVICE).

Теперь рассмотрим как по шине передаются данные.

Биты данных передаются фазами. В четной фазе линия данных - SDCKB, а клок - SDCKA, в нечетной наоборот (этот фрагмент тоже назовем паттерном :) ).

Величина таймаута на ответ от устройства после запроса хоста 1мс:

Помним, что например к джойстику можно подключать VMU, вибропак, микрофон...

Устройства подключаемые непосредственно к Maple BUS называются Device, а устройства подключаемые к Device называются Expansion Device, общение между Device и Expansion Device осуществляется средствами протокола LM-Bus. Expansion устройств можно подключить до 5-ти, хотя я не видел ни одного устройства в котором это было реализовано, а в чипах (например 315-6211-AB) "выведено наружу" только под 2-ва (хотя в программной части протокола под идентификацию EXP-DEV выделено пять бит, но тут честно говоря нужно уточнить, VMU например содержит память и LCD дисплей, это уже два Exp. устройства).

LM-BUS это что то типа суррогата Maple BUS, то есть шина на которую DEVICE напрямую переключает шину Maple BUS согласно тому какой Exp. DEVICE выбран HOST'ом.

LM-BUS тема отдельного разговора, отвлекаться не буду, перейдем к программной реализации протокола.

Программная часть протокола.

Как я уже писал выше данные передаются пакетами, рассмотрим пакет поближе:

  • COMMAND - команда, может принимать значения от 0x01 до 0xFE (см. возможные значения в коде ниже "maplebus.h").

maplebus commands
//HOST#defineDeviceRequest0x01#defineAllStatusRequest0x02#defineDeviceReset0x03#defineDeviceKill0x04#defineGetCondition0x09#defineGetMediaInfo0x0A#defineBlockRead0x0B#defineBlockWrite0x0C#defineGetLastError0x0D#defineSetCondition0x0E#defineFT4Control0x0F#defineARControl0x10#defineTransmitAgain0xFC//Device#defineDeviceStatus0x05#defineDeviceAllStatus0x06#defineDeviceReply0x07#defineDataTransfer0x08#defineARError0xF9#defineLCDError0xFA#defineFileError0xFB#defineTransmitAgain0xFC#defineCommandUnknown0xFD#defineFunctionTypeUnknown0xFE
  • DEST. AP - адрес назначения пакета (для какого устройства пакет).

  • ORIG. AP - от кого пакет.

Для AP справедлива следующая таблица:

PO[1:0] - Номер порта (A - 00, B - 01, C - 10, D - 11).

D/E - (1 - Device, 0 - Expansion Device или PORT).

LM[4:0] - (1 - Exp. DEVICE подключено, 0 - Слот Exp. пуст).

  • DATA SIZE - размер данных в пакете в 32-х битных чанках.

  • DATA - Состав пакета.

  • CRC - побайтный XOR всех данных включая COMMAND, AP, DATA SIZE, DATA.

"Общение" между HOST и DEVICE начинается с запроса DeviceRequest, в нем хост указывает какой порт он опрашивает, устройство, первый раз после включения или сброса "увидев" номер порта присваивает его себе (A/B/C/D).

Отвечать на данный запрос любое устройство обязано статусом (DeviceStatus answer):

Device ID - содержит функциональные возможности периферии (Device ID содержит блок FT, состав включенных битов в этом блоке определяет функции которые поддерживает устройство и FD - параметры поддерживаемых функций).

Device Functions
/*Device functions*/#define CONTROLLER    MAKE_DWORD(0x00000001)      //FT0 : Controller Function#define STORAGE            MAKE_DWORD(0x00000002)      //FT1 : Storage Function#define LCD                    MAKE_DWORD(0x00000004)      //FT2 : B/W LCD Function#define TIMER                MAKE_DWORD(0x00000008)      //FT3 : Timer Function#define AUDIO_INPUT    MAKE_DWORD(0x00000010)      //FT4 : Audio input device Function#define AR_GUN            MAKE_DWORD(0x00000020)      //FT5 : AR-Gun Function#define KEYBOARD        MAKE_DWORD(0x00000040)      //FT6 : Keyboard#define GUN                    MAKE_DWORD((unsigned int)0x00000080)        //FT7 : Light-Gun Function#define VIBRATION        MAKE_DWORD((unsigned int)0x00000100)        //FT8 : Vibration Function#define MOUSE                MAKE_DWORD((unsigned int)0x00000200)        //FT9 : Pointing Function#define EXMEDIA            MAKE_DWORD((unsigned int)0x00000400)        //FT10 : Exchange Media Function#define CAMERA            MAKE_DWORD((unsigned int)0x00000800)        //FT11 : Camera Device Functio

Destination code - указывает на целевой регион использования устройства.

Product name - название устройства (например {'D','r','e','a','m','c','a','s','t',' ','C','o','n','t','r','o','l','l','e','r', ' ',' ',' ',' ',' ',' ',' ',' ',' ',' '} - 30 байт).

License - кому принадлежит лицензия ( {'P','r','o','d','u','c','e','d',' ','B','y',' ','o','r',' ','U','n','d','e','r',' ','L','i','c','e','n','s','e',' ','F','r','o','m',' ','S','E','G','A',' ','E','N','T','E','R','P','R','I','S','E','S',',','L','T','D','.',' ',' ',' ',' ',' ',} -60 байт ).

Min./Max. current - соотв. минимальное и максимальное потребление устройства (1мА = 10 единиц, 43мА => 0x1AE).

Далее в пакете может идти "свободный статус устройства" (на изображении не указано, так как этот кусочек не обязателен), для джойстика он выглядит так: 40 байт "Version 1.000,1998/05/11,315-6125-AB Analog Module: The 4th Edition. 05/08".

То, какие команды применимы к устройству нам показывает блок Device ID.

К FT0, CONTROLLER, применима команда GetCondition - получить состояние кнопок/триггеров и аналоговых стиков геймпада. То в каких битах расположены какие значения указано всё в том же блоке Device ID. В частном случае, для геймпада Device ID будет выглядеть так:

В ответ на запрос GetCondition, джойстик обязан отправить отчет о состоянии кнопок, выглядит он следующим образом:

Ra/La/Da/Ua - Право/Лево/Вниз/Вверх (цифровой "крестик").

Start/A/B/X/Y - соотв кнопки.

A1, A2 - аналоговые курки

A3 и A4 - положение "стика".

Вот собственно и всё что нужно знать для реализации контроллера.

Реализация (аппаратная часть)

В общем то можно взять линии SDCKA и SDCKB и прикрутить на прерывания микроконтроллера и чисто программно реализовать, однако если МК медленный, то успевать не будет, и это не самое главное, во первых "плотность данных" для разных устройств разная и если например джойстик работать будет на одной программной реализации, то не факт что будет работать вибропак или карта памяти, во вторых в программной реализации определение ошибок внутри фрейма как и скажем команда "аппаратный сброс" не реализуемы, поэтому правильнее будет сделать аппаратный кусочек приемника, а отправлять и микроконтроллером можно.

Возьмем CPLD попроще (EPM3032) и реализуем xMAPLE:

SDCKA/SDCKB - вход линий Maple BUS.

GCLK - внешний CLK 16-48MHz.

INHTxD - сигнал блокировки работы приемника, 1 - игнорировать события на шине, 0 - нормальное функционирование.

RxD - идет прием пакета.

nSTRCV- начат прием пакета (Rising Edge).

nDLatch - Негативный импульс для "защелки данных" (сигнализирует о том что на линии данных Q[7..0] присутствует следующий полученный байт).

Q[7..0] - шина данных.

EOP - получен паттерн END (конец приема пакета).

FERR - обнаружена ошибка при приеме пакета.

nRST - подключается напрямую к микроконтроллеру - если получен RESET паттерн, - 0.

И общий вид:

Пишем это на верилог'е (3 файлика, надеюсь догадаетесь как это соединять):

SMAPLE.v
module SMAPLE(input GCLK,//MCU Generated 16MHz clock inputinput INHTxD,//Inhibit Input Data (User Can disable XMAPLE Detect Signals While MCU Transmit DATA)input SDCKAi,//Data/Clock A Lineinput SDCKBi,//Data/Clock B Lineoutput RxD,//Receive on progress (While receive is 1)output [7:0]Q// Output data bus (MCU can read valid data on this //port in time 200uS after data latch Negative Pulse received),output nSTRCV,//Receive start, negative pulse - Outputoutput OCPYi,//Occupancy packet received - Outputoutput nRST,//Reset packet received - Outputoutput FERR,//Frame error - Outputoutput EOPi,//End Of Packed received - Outputoutput nDLatch//New Data latched on BUS (Negative Pulse));/*Control Register*/reg rRxD = 0;assign RxD = rRxD;reg rFERR = 0;assign FERR = rFERR;wire nWE;assign nDLatch = (EOPi & nWE);wire iFERR;/* Align Data Packet */reg rENA = 1'b0;reg rENB = 1'b0;always @(posedge GCLK or negedge nRST) beginif(!nRST) beginrENA <= 1'b0;rENB <= 1'b0;end else beginrENA <= SDCKAi;rENB <= SDCKBi;endendalways @(posedge GCLK or negedge nRST) beginif(!nRST) beginrFERR <= 0;rRxD <= 0;end else beginif(!EOPi)// && !INHTxD) rRxD <=0 ;else beginif(!iFERR) rFERR <= 1;if(!nSTRCV) beginrFERR <= 0;rRxD <= ~INHTxD;endendendendline_monitor line_monitor(.GCLK(GCLK),//Global Clock - Input.SDCKA(SDCKAi|INHTxD),//CLOCK/DATA Line A disabled by data transmit - Input.SDCKB(SDCKBi|INHTxD),//CLOCK/DATA Line B disabled by data transmit - Input.RxDr(RxD),//Data Receive in progress - Input.RxD(nSTRCV),//Receive start, negative pulse - Output.OCPY(OCPYi),//Occupancy packet received - Output.RESET(nRST),//Reset packet received - Output.FERR(iFERR),//Frame error - Output.EOP(EOPi),//End Of Packed received - Output.ENA(rENA),//CLOCK For Line B.ENB(rENB)//CLOCK For Line A );/*Receive Maple Frame*/maple_receive maple_receive(.SDCKA(SDCKAi),//CLOCK/DATA Line A disabled by data transmit - Input.SDCKB(SDCKBi),//CLOCK/DATA Line B disabled by data transmit - Input.ENA(rENA),//CLOCK For Line B.ENB(rENB),//CLOCK For Line A .RCV(RxD),//Receive in progress, 1 - receive - Input.Dout(Q[7:0]), //Received data byte - Output.nWE(nWE),//Write Latch - Output.RxDi(nSTRCV),//Receive start, negative pulse - Input.INHTxD(INHTxD)//Inhibit Input Data (User Can disable XMAPLE Detect Signals While MCU Transmit DATA));endmodule
line_monitor.v
module line_monitor(input GCLK,input SDCKA,input SDCKB,input  RxDr,//Data Receive in progress - Inputoutput RxD,output OCPY,output RESET,output FERR,output EOP,input ENA,input ENB);reg [3:0] countA = 0;reg [2:0] countB = 0;reg [3:0] pcount = 0;reg rEOP = 1'b1;assign EOP = rEOP;assign RxD = (pcount == 4'h4) ? 1'b0 : 1'b1;assign OCPY = (pcount == 4'h8) ? 1'b0 : 1'b1;assign RESET = (pcount == 4'hE)? 1'b0 : 1'b1; //Output reset signal does not need to check for FERRassign FERR = (!((RxD & OCPY & RESET) && pcount[3:1])) | (!RxDr & !rEOP);//assign EOP = (eopcount == 3'h2) ? 1'b0 : 1'b1;always @(posedge SDCKA) pcount <= countA;always @(posedge SDCKB) rEOP <= !(countB == 3'h2);//Patterns//PATTERN Counter Managingalways @(posedge ENA or negedge ENB) beginif (ENA) begincountA <= 0;endelse begincountA <= countA + 4'h1;endend //EOP Counter Managingalways @(posedge ENB or negedge ENA) beginif (ENB) begin countB <= 0;endelse begin countB <= countB + 3'h1;endend //synopsys translate_off//synopsys translate_onendmodule
maple_receive.v
module maple_receive(input SDCKA,//CLOCK/DATA Line Ainput SDCKB,//CLOCK/DATA Line Binput ENA,//CLOCKinput ENB,//CLOCKinput RCV,//Receive in progress, 1 - validoutput [7:0]Dout, //received data outputoutput nWE,input RxDi,input INHTxD//Inhibit Input Data (User Can disable XMAPLE Detect Signals While MCU Transmit DATA));reg [3:0] dataA = 4'h0;reg [3:0] dataB = 4'h0;reg [1:0]countB = 2'b00;reg rLastBitCounted = 1'b1;//B LINE//Dout[1] = SDCKA Means Major version 1.//Dout[0] = SDCKB Means Minor version .0//And version result = 1.0assign Dout[1] = !INHTxD ? dataB[0] : SDCKA;assign Dout[3] = dataB[1];assign Dout[5] = dataB[2];assign Dout[7] = dataB[3];//A LINEassign Dout[0] = !INHTxD ? dataA[0] : SDCKB;assign Dout[2] = dataA[1];assign Dout[4] = dataA[2];assign Dout[6] = dataA[3];assign nWE = (dtaLock);always @(negedge ENA)begindataB[3:1] <= dataB[2:0];dataB[0] <= SDCKB;if(RCV) begincountB <= countB + 2'b1;end else begincountB <= 2'b11;endendalways @(negedge ENB)begindataA[3:1] <= dataA[2:0];dataA[0] <= SDCKA;rLastBitCounted <= !countB[0] | !countB[1];endwire dtaLock = rLastBitCounted;endmodule

Чтобы не "развлекаться с проводочками" накидал Eval Board.

Общий вид по блокам:

Полная схема модуля.

Gerber фалы.

Внешний вид:

И посадочное место под Eval...

Gerber файлы.

И соединяем всё это вместе:

Реализация устройства.

Железки есть, схемы есть, переходим к реализации.

Для начала заделаем небольшой код чтобы чтобы геймпад Dreamcast прикидывался геймпадом XBOX360 (поскольку я заботливо "выкусил хэндшейк" с XBOX360, данная реализация на приставке работать не будет только на ПК).

И, опять таки чтобы не на проводках, делаем плату коннектора для джойстика из двух половинок:

Верхняя часть (GERBER), нижняя часть (GERBER).

Разумеется чтобы получить хороший контакт с разъемом геймпада, нужно припаять "усы".

Для этой цели можно к примеру разобрать разъем SD вот как-то так:

Прикинем как должен работать алгоритм... не буду останавливаться на том как работает USB HID, опишу общую схему опроса устройств на шине MAPLE.

И собственно архив с исходниками.

Компилируем определив константы:

  • USE_STDPERIPH_DRIVER - использовать стандартную библиотеку периферии от ST.

  • STM32F10X_MD - чип Medium Density.

  • MAPLE_HOST - библиотека MAPLE работает в режиме HOST.

  • USB_HID - собрать целевое HID устройство.

Прошиваем, подключаемся:

и видим вот такую картину (не забываем что необходимо поставить Microsoft Xbox 360 Accessories, а ещё помним что геймпад у нас работает в режиме XInput... кому лень разбираться, можно скачать уже откомпилированную прошивку):

А теперь развернем xMAPLE в обратную сторону и...

Подключим мышь от ПК к DREAMCAST.

Мышь, - FT9 : Pointing Function.

Что нам нужно, DeviceID и состав команды GetCondition, чтоб собирать пакет с данными.

Mouse DeviceID:

Стандартная мышь Dreamcast содержит 3 кнопки: A,B,W, дельты смещения по осям X/Y: AC1,AC2 (ball) и смещение "колеса": AC3 (wheel).

AC1,AC2,AC3 - десяти-битные величины плюс флаг переполнения.

Вот так выглядит пакет данных:

AOV2, AOV1, AOV0 - флаги переполнения для AC3, AC2, AC1 соответственно.

Для удобства накидаем схемку адаптера PS/2 для нашей борды:

...разводим, получаем gerber'ы...

И с завода нам приезжает вот это:

Ну и чтобы совсем удобно, накидаем вот такую схему, если брать провод от оригинального пада, то просто подключаемся к разъему и УРА.

"Рисуем" gerber'ы и получаем вот такой переходник:

Собираем весь этот "огород" вместе:

Компилируем прошивку (ниже архив с исходниками) не забывая объявить константы препроцессора:

  • USE_STDPERIPH_DRIVER - использовать стандартную библиотеку периферии от ST.

  • STM32F10X_MD - чип Medium Density.

  • MAPLE_DEVICE - библиотека MAPLE работает в режиме DEVICE.

  • EN_MOUSE - собрать целевое HID устройство.

  • MOUSE_CALLBACK - обработать функцию чтения мыши в процессе ожидания запроса от HOST.

  • EXTI9_5_CALLBACK - передавать в код пользователя системные прерывания EXTI5-EXTI9 библиотеки MAPLE_BUS.

(исходники, скомпилированный HEX).

К слову, если вместо EN_MOUSE в данных исходниках определить константу EN_CONTROLLER, то мы получим довольно забавную штуку, переходник превращающий PS/2 мышь в контроллер DREAMCAST, собственно специально сделал, потому как мышью в меню DREAMCAST управлять нельзя. Поэтому чтобы наглядно увидеть работоспособность исходников и оборудования в целом не запуская скажем "HALF LIFE для проверки" можно прошить откомпилированный код с константой EN_CONTROLLER и управлять внутри меню мышкой PS/2.

Прошиваем, подключаемся к DREAMCAST и оно работает!!!

Вот собственно и всё что хотел поведать. Однако я не рассказал о (надеюсь ещё расскажу :) ):

  • Как работать с VibroPAK.

  • Как реализовать Memory Unit (хотя на борде расширения PS/2 SPI EEPROM память можно установить и работать с ней).

  • И у меня остались комплекты печатных плат и трём желающим "попробовать свои силы" могу отправить комплекты печатных плат за стоимость почты.

Удачного дня! Отличного настроения и взаимопонимания!!!

Подробнее..

Перевод История Crazy Taxi интервью с создателем серии Кенджи Канно

17.11.2020 18:17:45 | Автор: admin

image


Спустя 15 лет после того, как в аркадных залах заиграла группа The Offspring, издание Retro Gamer пригласило Кенджи Канно поболтать о создании популярного гоночного франчайза Crazy Taxi (интервью было взято в 2014 году).




Уважаемый читатель, позвольте ввести вас в курс дела. Сегодня мы добрались до работы на такси: очень быстро и с ветерком. Благодаря сумасшедшему водителю поездка отняла у нас всего половину обычного времени. Его навыки включали умение со скрежетом просачиваться между машинами и неспособность видеть красный свет. Сильный акцент делал большую часть его болтовни непонятной, но, если честно, нас больше волновало желание не разбиться в поездке. А что мы выкрикивали!.. Таких выражений вы не услышите и в переводах Гоблина. Любой нормальный человек, прокатившийся с этим таксистом, запомнил бы номерной знак и сообщил о лихаче в полицию. Однако редакция Retro Gamer не относит себя к нормальным людям вместо этого мы просто подумали: Это было чертовски похоже на Crazy Taxi.


image


Для законопослушных граждан опасное вождение просто фантазия, но для Кенджи Канно простаивание в пробках стало источником вдохновения. Я немного увлекаюсь автомобилями, и однажды ездил себе в удовольствие, но застрял в пробке, рассказывает нам Канно. При этом встречная полоса была совершенно свободна! И когда я это увидел, то подумал, что есть сотни других людей, мечтающих об одном: выехать бы на встречку и добраться до места с ветерком! Это желание отбросить все правила дорожного движения стало основой игрового процесса в Crazy Taxi. Однако это был далеко не единственный из источников вдохновения Канно. В то время выходило много гоночных симуляторов. И, честно говоря, я от них устал, говорит Канно. Есть куча фильмов с автомобильными погонями. Вот я и подумал: что, если сделать игру, похожую на них, чтобы люди получали от процесса ещё больше наслаждения?


Учитывая, что гоночные симуляторы доминируют в аркадных залах, эти слова звучат просто удивительно. Погони в фильмах также вдохновили разработчиков серии Driver, которая вместе с Crazy Taxi основала поджанр гоночных игр в открытом мире. Однако Driver создана под впечатлением от классических картин про погони семидесятых годов, тогда как Crazy Taxi присущи более современные мотивы. Дизайн Канно опирался на калифорнийскую панк-рок-сцену. Хотя это и похоже на гонки, я стремился создать игру-экшен, а в них важны ритм и темп, объясняет он. Я уже подобрал музыку, которую хотел включить в свое детище. Проект создавался под неё чтобы геймплей был в одном с ней ритме.


image


Калифорнийский дух не ограничился саундтреком от групп The Offspring и Bad Religion. Стремление Канно к красочной и холмистой местности привело к созданию города, основанного на Сан-Франциско. Хотя это не было детальным воссозданием города, в игре легко узнать его основные достопримечательности. Я хотел больше реализма, вспоминает Канно. Чтобы это ощущение присутствовало, я решил, что в игре будут популярные места для досуга и развлечений. В Crazy Taxi пассажиры просят игрока отвезти их в такие места, как Tower Records, KFC и Pizza Hut, а также на стадион, к полицейскому участку или торговому центру.


Всё это привело к тому, что после выхода в 1999 году Crazy Taxi стала хитом в аркадных залах. Игроки были очарованы потрясающими визуальными эффектами, трюками и демонстрационной заставкой, которая предвещала, что их ждёт весёлое развлечение. Ещё в игре есть захватывающая игровая механика: опасное вождение не просто поощряется, а вознаграждается, поскольку игрок получает бонусы за уклонения от столкновений, заносы и прыжки. Хотя пункт назначения пассажира неизвестен до тех пор, пока вы его не подберёте, цветной значок над головой вашего потенциального клиента предупреждает о расстоянии и сложности путешествия. И это важно, поскольку быстрая поездка добавляет игроку дополнительное время на таймере.


image


Добившись успеха в аркадных залах, Sega поспешила выпустить игру на Dreamcast. И хотя аркадные автоматы были построены на базе Sega NAOMI (по сути, аналога Dreamcast), при портировании возникли сложности из-за размера города. В аркадной версии открытый мир не был проблемой, потому что у NAOMI были загрузки с картриджа и вдвое больше оперативной памяти, чем у консоли. Чтобы преодолеть ограничения Dreamcast, команде Канно пришлось запрограммировать метод потоковой передачи данных о городе с диска прямо во время игры. И эти усилия стоили того, поскольку версия для приставки оказалась практически неотличимой от аркадной.


Crazy Taxi для Dreamcast не только считается идеальным портом, но и включает в себя много дополнений. Наиболее заметным их них стал режим Original Mode, который позволяет игрокам наслаждаться новым городом с извилистыми улицами и трамвайными путями. Также имелся Crazy Box Mode набор мини-игр, в которых такси сбивает кегли в боулинге или лопает воздушные шары. Канно поручил команде самостоятельно обдумать концепцию мини-игр в свободное время, чтобы затем собраться в офисе и отобрать лучшие идеи. Мы рассмотрели различные элементы игры, за выполнение которых игрок мог получить оценку. Например, дрифт, вспоминает Канно, подчеркивая роль Crazy Box Mode в обучении геймеров продвинутым техникам. Это режим, в который ты просто играешь и получаешь удовольствие. Но его можно использовать и в качестве практики.


image


Версия Crazy Taxi для Dreamcast, выпущенная в начале 2000 года, была тепло принята игровыми изданиями, отметившими отличное качества порта. Удивительно, но Канно не был в курсе этих хвалебных отзывов. На самом деле я даже не знал, что к игре так отнеслись, ответил он. Я думаю, что основная причина успеха заключалась в следующем: мы предлагали игрокам то, чего не могли предложить другие проекты того времени. Геймеры с восторгом приняли игру, раскупив более 1 миллиона копий.


Однако финансовые проблемы Sega привели к тому, что всего через год компания ушла с консольного рынка, перестав выпускать игры эксклюзивно для своей провальной консоли. Acclaim лицензировала Craxy Taxi и разработала версии для PlayStation 2 и GameCube. А Sega в это время заключила контракт со студией Strangelite на разработку версии для ПК. Ни один из портов не обрёл такой любви критиков, как Dreamcast-версия, однако версия для PlayStation 2 в конечном итоге превзошла продажи оригинала, хоть и не намного. Закончив работу над портом для Dreamcast, команда Канно из студии Hitmaker переключилась на создание продолжения.


image


Основная формула вождения без правил, чтобы доставить клиентов к месту назначения, не изменилась, но в Crazy Taxi 2 были представлены четыре новых героя и две новые карты. Эти локации, основанные на Нью-Йорке, представляют собой плотную городскую среду с небоскрёбами, тогда как местность стала менее холмистой. Новый дизайн был частью плана команды, чтобы предоставить игроку новые ощущения от вождения. Первая часть являлась линейной игрой, основанной на движении по полосам, и вы могли избежать столкновения, просто увернувшись влево или вправо. Так что в некоторым смысле это была почти двухмерная игра, объясняет Канно. В Crazy Taxi 2 мы хотели больше трёхмерного дизайна, и Crazy Hop это результат того, чего мы пытались достичь.


Безумный прыжок (Crazy Hop) это новая способность, представленная в Crazy Taxi 2, которая позволяет такси прыгать. Хотя в локациях Around Apple и Small Apple не так много холмов, разработчики восполнили это эстакадами и трамплинами на крышах, что позволило игрокам с быстрой реакцией сократить маршрут. Более того, новые мини-игры в режиме Crazy Pyramid Mode также используют новую механику. Еще в игре появились группы пассажиров. Теперь в ваше такси могут сесть до четырёх человек, каждый из которых направляется в разный пункт назначения. Ограничение по времени при этом довольно жёсткое, но опытные игроки могут заработать сумасшедшие деньги помимо платы за проезд, вы получаете множитель чаевых за каждого пассажира.


image


Crazy Taxi 2, вышедшая в середине 2001 года, тоже получила хорошие отзывы, но не достигла такого же уровня оценок, как её предшественница. Критики отметили безумный экшен, как в оригинальной игре, и ещё больше треков группы The Offspring, но посчитали, что игра практически идентична оригиналу визуально и совсем незначительно отличается по части геймплея. По факту, самое серьёзное изменение в игровом процессе стало самым спорным. Некоторым игрокам это не понравилось, другие прониклись новой механикой, то есть реакция получилась неоднозначной, объясняет Канно, рассуждая о механике безумного прыжка. Для многих острые ощущения при уклонении от столкновений пропали с появлением возможности перепрыгивать через эти преграды. Несмотря на неоднозначный приём, безумный прыжок остался и в третьей части серии.


Crazy Taxi 3 стала одним из первых эксклюзивов Sega для консоли от Microsoft Xbox. Выбор платформы был довольно странным, ведь Xbox являлась первой приставкой этой корпорации. Более того, Crazy Taxi уже успешно продавалась на PlayStation 2. Канно рассказал нам, что на такое решение повлиял энтузиазм со стороны американской компании: Мы разговаривали с Microsoft о серии Crazy Taxi, и им действительно нравился этот проект!


image


Ранние планы Crazy Taxi 3 были ещё более амбициозными, чем Crazy Taxi 2. В интервью с Хисао Огучи, который работал продюсером первых двух игр, упоминалось, что команда экспериментировала с мультиплеером, но в конечном итоге от него отказалась. Также планировалась смена дня и ночи, чтобы маршруты пассажиров менялись в течение суток. Команда даже решила изучить местность вживую, съездив в ранее добавленные в игру города такие, как Нью-Йорк. Я не хотел ехать, рассказывает Канно о поездке. Однако наш дизайнер там побывал, и очень здорово, что у него был жёсткий график. Ровно за неделю до терракта 9/11 он находился в одном из этих зданий. Немного жутковато, правда?


К сожалению, большинство задумок так и не попало в игру. Вы и сами знаете, что в процессе разработки приходится отбрасывать желание воплотить все идеи в угоду срокам, которые вам отвели для выполнения этих задач, отвечает Канно, когда его спрашивают о выброшенных наработках. У нас было ограниченное количество времени, это правда: некоторые вещи мы хотели сделать, но просто не успевали. В итоге такой цейтнот сделали Crazy Taxi 3 самой слабой из трилогии с точки зрения игрового дизайна.


Финальная версия игры стала своего рода сборником прошлых частей серии, хоть и со значительными дополнениями. В игре есть локация West Coast из первой части с некоторыми новыми областями, предназначенными для безумного прыжка. Присутствует и Small Apple из сиквела, но в ночном сеттинге. Единственной новой картой Crazy Taxi 3 стала Glitter Oasis тематический район Лас-Вегаса в ночное время, в котором игрок может насладиться яркими огнями города и окраинами Большого каньона. В игру были добавлены четыре новых героя и восемь из прошлых частей. А в режиме Crazy X Mode появились новые мини-игры.


image


Crazy Taxi 3 вышла в середине 2002 года и получила сдержанные оценки от критиков. Им по-прежнему нравилась основная механика игры, но все издания были едины во мнении, что здесь недостаточно нового контента. Также отмечали плохое техническое исполнение: были проблемы с расстоянием прорисовки и тормозами, особенно на локации Glitter Oasis. ПК-версия вышла в 2004 году за неё вновь отвечала студия Strangelite, и она оказалась лишь немного лучше. Но зато Crazy Taxi 3 удалось вернуть в аркадные залы. Sega выпустила автомат в 2003 году: он был построен на плате Chihiro, которая начинкой походила на Xbox. Канно не усмотрел в этом ничего необычного: Это казалось правильным решением: эй, если мы вернём игру в аркады, наши потребители будут счастливы.


В 2003 году THQ приобрела права и выпустила версию Crazy Taxi для консоли Game Boy Advance. Crazy Taxi: Catch A Ride, разработанная студией Graphic State Games, оказалась неудобной для портативной системы. Как и другие попытки создания трёхмерных гоночных игр на этой консоли, проект ужасно выглядел, страдал от низкой частоты кадров и быстро расходовал заряд батареи. Позже, в том же году, серия попала в новости из-за судебного процесса о нарушении авторских прав Sega подала в суд на Electronic Arts, Fox Interactive и Radical Entertainment. Причиной стала игра 2001 году The Simpsons: Road Rage, которая была очень похожа на Crazy Taxi. Иск был урегулирован во внесудебном порядке за сумму, которая не разглашалась.


image


В последующие годы франчайз Crazy Taxi стал для Sega способом заработать на ностальгии. Crazy Taxi: Fare Wars 2007 года был сборником первых двух игр для PSP. Несмотря на то, что из игры вырезали большую часть музыки и сетей фастфуда, она выделялась многопользовательским режимом. Оригинальные части Crazy Taxi позже выходили на Xbox 360, PlayStation 3 и PC, но с тем же отсутствием контента. Зато в этих версиях есть возможность слушать собственную музыку, так что вернуть оригинальный саундтрек не будет проблемой. В версиях для iOS и Android имеется оригинальный саундтрек, но нет сетей фастфуда.


Последней игрой в серии (на момент интервью) стала Crazy Taxi: City Rush бесплатная мобильная игра, которая сочетает в себе дух серии с форматом раннера. Хоть Crazy Taxi и казуальная игра, но в ней есть шарм и притягательность, которые делают её захватывающей, говорит Канно о решении развить серию в этом новом направлении. Поскольку мобильные устройства так широко распространены, мы подумали, что они станут идеальной платформой для проекта. Преобразование было выполнено Hardlight британской студией Sega, которая специализируется на играх для мобильных платформ. Это решение Канно объясняет большой популярностью серии на Западе.


image


Хотя мобильная игра и относится к жанру раннеров, в ней есть некоторые характерные для Crazy Taxi механики. Например, игроки по-прежнему получают бонус Crazy Through за уклонение от другого транспорта. Но аутентичность механики игры не является целью для Канно, который больше стремится сохранить дух серии. По его словам: Дело не в автомобилях, технических деталях или механике, а в том, похоже ли это на Crazy Taxi?. City Rush также привносит новые элементы игрового процесса, такие, как апгрейд такси.


Современный подход совпадает со взглядами Канно на игры, поскольку он ориентирован на будущее. Это стало наиболее очевидно, когда мы спросили его, какими достижениями он гордится. Честно говоря, во всей оригинальной трилогии нет ничего, чем я горжусь, таков его ответ. Вы, вероятно, берёте интервью у многих людей, и для меня похвально, что вы сыграли в нашу игру и она вам настолько понравилась. Однако для меня, как создателя, важнее всего то, что будет с проектом дальше.


image


Итак, Crazy Taxi оставила значимый след в игровой истории. И спустя два десятка лет франчайз привлекает внимание геймеров. Даже Канно испытал последствия популярности игры на собственном опыте: Однажды я отправился в отпуск, в Лас-Вегас, и мне повезло сесть к таксисту, который ехал на головокружительной скорости, чтобы доставить меня к месту назначения. А потом, когда я выходил из машины, он выдал: Я сумасшедшее такси! Но он даже не знал, кто я такой! Это был просто безумный таксист!


Мы надеемся, что Канно вознаградил его бонусом за скорость, а если хотите больше историй про разные игры, то почитайте другие материалы в профиле.




Статью взял из 130 номера журнала Retro Gamer.

Подробнее..

В Castlevania Resurrection для Sega Dreamcast, которую отменили 20 лет назад, можно поиграть прямо сейчас

29.04.2021 18:18:03 | Автор: admin

В 1999 году на E3 была представлена шикарная игра Castlevania: Resurrection для Sega Dreamcast. Это была еще не полноценная игра, но вполне играбельный прототип с рядом ограничений. К сожалению, в марте 2000 года игру отменили, и с тех пор о ней почти ничего не было слышно.

До сегодняшнего дня, ведь игра была восстановлена и загружена в интернет, где в нее можно поиграть! Все благодаря цифровому археологу и ценителю игр Комби Лорану (Comby Laurent). Он, кстати, занимается не только Castlevania, ценитель ретроигр опубликовал у себя на сайте целый список так и не вышедших тайтлов для Dreamcast. Давайте посмотрим, что из себя представляет воскресшая из мертвых игра из начала 2000-х.


Но перед тем, как начать интересная история некто создал лот на eBay, обещая выслать диск с этой игрой. Демонстрация и диска, и игры на видео выше. Цена лота сразу же увеличилась до $20 000, после чего администрация eBay закрыла его.


Некоторые участники аукциона, кстати, собирались приобрести игру для того, чтобы выложить ее в сеть, сделав достоянием нашей общей истории. Но потом Комби Лоран сделал это и без прототипа. Он опубликовал полноценный билд и сделал его доступным для всех.

Подробности об игре


Она была седьмым по счету тайтлом с названием Castlevania и третьей по счету 3D игрой. Двумя предыдущими были не очень удачные попытки для Nintendo 64. В игре два протагониста Соня Бельмонт, главный герой игры Castlevania Legends 1997 года, и Виктор Бельмонт, ее потомок. После отмены выхода игры он появился через много лет в Castlevania: Lords of Shadow 2 в 2014 году.

Прототип давал возможность поиграть лишь за Соню. Она могла бегать и прыгать со знакомым всем кнутом в качестве оружия. Игрокам было предложено и другое оружие, включая топоры, ножи и святая вода в пузырьках. Враги огнедышащие черепа, трехголовая гигантская гидра, летающие призраки и босс Медуза.


На момент демонстрации в 1999 году игра была готова всего на 25%, так что не стоит удивляться глюкам и разного рода проблемам. Управление не особенно удобное, но привыкнуть к нему можно. Интересный момент игру отменили в тот же день, когда Sony представила свою PS2, суперхит среди видеоконсолей всех времен и народов.

Отмена была вызвана рядом причин, включая сложные отношения между материнской компанией и Konami of America. У некоторых топ-менеджеров в Konami были собственные планы, в которые игра не входила. Как бы там ни было, сейчас у нас есть возможность вернуться на 20 лет назад, оценив игру, которая должна была выйти в самом начале нового тысячелетия.

В дополнение к исходным файлам GD-ROM, Лоран также предоставил образ диска CDI, который можно записать на совместимый CD-R и воспроизвести на оригинальном оборудовании Dreamcast (сжатую версию также можно запускать на многочисленных эмуляторах Dreamcast).

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru