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 кило.

     В следующий раз я расскажу о пробле-
ме  нехватки  основной  памяти и путях ее
преодоления,  а также о работе процедур в
страницах памяти, используя другие проце-
дуры в других страницах и реализации вол-
нового  алгоритма  поиска  пути по статье
Славы Медноногова .

     А сейчас - пока.





Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Часть четвёртая - Приветы, мессаги...
Gamedev - о сборке игры Wolfenstein 2004. Часть 1.
Таланты - Темы для сочинений.

В этот день...   24 сентября