Adventurer
#10
30 сентября 1999 |
|
Обмен опытом - gamemaking: о создание игры на примере "Full Shit".
(C) DEMON/XPC/CPU GAME MAKING "Видеоигры - это способ выражения самых фантастических идей и образов. Многим просто необходима отдушина для воплощения своих безумных фантазий..." "Мы верим в свои иллюзии, порой убе- гая в них от ужасной реальности. Видеоиг- ры это такой же способ позволить людям хотя бы на время стать богами своих ма- леньких вселенных." Анре Ла Мот "Секреты программирования игр" Итак, эпиграф, ты, дорогой спекмен, уже прочитал, и если он тебе непонятен, то дальше уже можешь не читать. Так как речь здесь пойдет о создании игр, а не играния в ту или иную игру. Хочу сразу договориться о том, что мои мыслеизложения нужно понимать лишь как одну из точек зрения. Не так давно к нам в редакцию пришло письмо, в котором был такой вопрос: "По- чему в вашем журнале нет статей по созда- нию игр?" . Действительно - почему? В основном ведь пишут про уже созданые иг- ры, как их проходить, как ломать... и редко встречается материал про решение разных проблем при создании своей игры. Из своего небогатого опыта могу ска- зать, что проблем много... Первой из них является вопрос, какую игру я (мы) хочу делать, и что бы я хотел в ней увидеть, а чего нет. Хочется-то много, но не многое зависит от уровня подготовленности разработчиков и возмож- ностей машины. Уже вряд ли кто превзойдет Славу Медноногова в создании стратегий или SYSTEM 3 по красочности ее игры "MYTH" . В первую очередь определяем свои возможности и желания, после чего выраба- тываем компромисс между ними. Время... Извечная проблема с нехват- кой свободного времени. Если ты учишься, то тебя добивают всякого рода дипломы, курсовые и т. д. и т. п., да еще и погу- лять хочется. Если же работаешь, то после работы отпадает всяческое желание вообще чегото делать, хотя людям, по-настоящему увлеченным, это не помеха. Итак, планируем время для работы над проектом: вечером, по выходным или еще как... Не знаем с чего начать! Здесь могу сказать только для кодеров. В первую оче- редь нужно создать библеотеку основных программ то бишь: выводилки спрайтов, пе- чаталки текстов, опрашивалки клавы и мы- ши, лоадеры и записывалки, листалки памя- ти и т. д., т. е. то, что без сомнения будет нужно в нашей игре. На первом этапе мы уже должны были решить вопрос интерфейса с пользователем (занимает не менее 30% от общего времени создания программы) и теперь это будет одним из больных вопросов и для тебя. Здесь должен быть особый подход, т. к. надо придерживаться уже устоявшихся опре- делениий. Ну например, будет хорошим то- ном, если мы сделаем поддержку Kempston Mouse и переопределение управляющих кла- виш (хотя бы поддержку Sinclair и QAOP+Space ). И,конечно, неплохо добавить что-нибудь этакое, что мы и попыпались сделать в "FULL SHIT" . Правда до послед- него момента никто из нас не представлял, как все это будет работать и выгля- деть... После того, как мы сделаем (или вы- берем уже готовые во многих электроных изданиях) процедурки, начинаем думать об основном: главном модуле программы, кото- рый для каждой игры будет своим. Так как я делал квест, то для меня было главным вывод локации, предметов и героев на ней, и процесс управления героем. Например, для какого-нибудь BATTLE COMMAND это бу- дет работа с 3D обьектами и всяческие от- секалки лучей, проекционные выводилки... Рассмотрим все-таки на примере "FULL SHIT Demo-version" , что и как я делал. 1) Пока ANT и VANIAC (GFX-makers) рисовали графику, я клепал процедурки для игры (см. выше). После появления первого скрина, решил использовать оба экрана Спека , т. к. скрин без 4-х верхних строк занимал 5120 байт. 4 верхние строки были сделаны статичными не случайно, а для синхронизации луча. После навеса всех примочек на прерывания, до игрового экра- на осталось всего около 1000 тактов ( на Скорпе ). После я жалел о том, что стал использовать не буфер а два экрана, но было уже поздно... Быстро сделав прорисовку локации: 1. скрин по LDI, LDI, LDI... LDI 2. спрайты предметов сверху по мас- ке 3. спрайт главного героя 4. спрайты других предметов по мас- ке 2) Я сделал убогое управление героем по клавам R, L, D, U. Погоняв процедуру хождения (задается количество шагов и направление, а по таблице она сама выво- дит нужные спрайты хождения и делает сме- щение координат), решил заняться интер- фейсом пользователя. Забацал вывод стрелки почти без дер- гания бордера при ее движении (никаких декранченных спрайтов) и сделал опрос клавы и мыши, не имея возможности прове- рить энту самую мышь. Проблема появилась, когда необходимо было переключать видимый экран. Я ступил и переключал его не в прерываниях, а после HALT'а. Из-за чего возникали глюки порчи игрового экрана стрелкой и появления стрелки-призрака при движении оной. Поэтому совет: - если работаешь с двумя экранами, и у тебя что-то выводится на экран в преры- ваниях, то переключай экран в самом нача- ле прерываний, например: ;----------- INTERRUPT MODE 2 INT_2 PUSH AF,HL,DE,BC,IX,IY EXX EX AF,AF' PUSH AF,HL,BC,DE CALL SCR_SWP; переключаем экран(ниже) CALL SAV_PAG; сохраняем номер текущей ; страницы памяти CALL DET_SCR; определяем видимый экран CALL CR_UNDO; восстанавливаем если тот ; же, нет - если переключен CALL CR_SAVE; запоминаем CALL CR_PRINT; рисуем стрелку ............ CALL MUZAK CALL ON_UNDO; включаем CR_UNDO CALL UND_PAG; восстанавливаем страницу ; памяти POP DE,BC,HL,AF ............ EI RET ;------------- SCREEN SWAP SCR_SWP RET; выключатель (#C9 or 0) LD A,#C9 LD (SCR_SWP+1),A LD (CR_UNDO),A; вырубаем CR_UNDO ; включим при выходе SCR_STA LD A,0; статус 0-#4000, другое ; для #С000 OR A LD А,(NOW_PAG); текущая страница JR Z,SW_L1 SET 3,A JR SW_L2 RES 3,A SW_L1 LD (NOW_PAG),A RET ;---------- ON_UNDO XOR A (CR_UNDO),A RET ;---------- UNDO UNDER CURSOR CR_UNDO NOP ........ RET При такой раскладке, пока изображе- ние формируется на невидимом экране, стрелка летает на видимом, и когда придет время сделать невидимое видимым, то стрелка автоматом врубится на новый эк- ран, не восстанавливая дерьмо со старого экрана. A ща я хочу рассказать о непонимании между кодером и графмейкером. Когда я сказал, чтоб мне нарисовали спрайты пе- редвижения героя 10 на 4 (в знакоместах), мне принесли их аж на 14 килобайт, да еще разного размера. Неподумав, я их взял и начал бацать прогу движения... Как же я затрахался все это стыковать и хотя бы как-то систематизировать. Поэтому сразу определитесь, какого размера и сколько спрайтов вам будет нужно для передачи то- го или иного визуального действия. Да и еще тебе, батенька кодер, придется самому их резать и мешать с маской, т. к. такие действия нельзя никому доверять. А то по- том придется гадать, то ли твоя процедура глючит, то ли злобные графмейкеры тебе так нарезали, да еще и эскизы стерли. И лучше сразу завести себе большой блокнот, где записывать всю информацию и по спрай- там (размер, длина) и по их последова- тельности в блоке. И пользоваться лучше всего SPRITE MASTER 5. 11 для обработки и SPRITE LAND v1. 19 для нарезания и компа- новки. В дополнение могу сказать следую- щее: спрайты перемещения мне нарисовали только раза с восьмого, и занимали они всего 9 кило. В следующий раз я расскажу о пробле- ме нехватки основной памяти и путях ее преодоления, а также о работе процедур в страницах памяти, используя другие проце- дуры в других страницах и реализации вол- нового алгоритма поиска пути по статье Славы Медноногова . А сейчас - пока.
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября