(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 кило.
В следующий раз я расскажу о пробле-
ме нехватки основной памяти и путях ее
преодоления, а также о работе процедур в
страницах памяти, используя другие проце-
дуры в других страницах и реализации вол-
нового алгоритма поиска пути по статье
Славы Медноногова .
А сейчас - пока.