Мечты детства о создании игры на ZX-Spectrum
Здравствуйте, жители Хабрасообщества.
Первый компьютер, Великий ZX-Spectrum у меня появился примерно в 1992 году. Конечно же сначала я на нем играл дни напролет, но потом увлекся Basic’ом и программированием. Писал для себя всякие программки и радовался до того момента пока не увидел у друга на его супер i386 2mb игры, вернее ИГРЫ — WarCraft I и UFO. И так мне захотелось чтобы что-то подобное яркое, красивое и захватывающее было на моем Старичке-Спектруме и году эдак в 96 я захотел сделать Игру для себя — WarCrafter 😉
Осторожно, небольшой трафик!
Начал создавать спрайты, подбирать размеры и соотношение размеров юнитов и зданий. Замок получился самый большой — 7х8 знакомест, посередине картинки — шахта, справа от нее таран замков, чуть выше — смотровые-защитные башни, дом крестьян, катапульта, баллиста, сверху — это ферма 🙂
Картинки по тексту кликабельны
Затем приступил к анимации — этапам строительства зданий, пристани и прочих строений. Всё строительство должно было быть анимированным:
Затем рисовал этапы строительства замка, прикидывал размеры зданий и подвижных объектов:
Пояснение к следующей картинке. Боевые юниты представлены либо пиктограммами, как в случае рыцаря и викинга, так и картинкой, в случае катапульты. Затем идут задания массивов игрового мира, по которому будет расставляться живность и здания. AI я бы сделать не сумел, поэтому игра подразумевала игру 2х человек, где цветом бордюра бы обозначался игрок который делает ход:
Затем я начал делать управление игрой, скроллинг карты, выбор юнитов, управление юнитами:
Такс… Дальше ТТХ юнитов, технические моменты передвижения юнитов, условные обозначения в массиве данных мира:
Ну и напоследок, после всех подготовительных этапов собственно сам код на Basic’e. В то время я еще увлекся шикарной вещью LaserBasic — это компилятор Бэйсика, компиленый код работал намного быстрее, но после загрузки LaserBasic ОЗУ оставалось катастрофически мало. Поэтому пришлось от него отказаться и писать на единственном доступном мне тогда языке — Великом и Ужасном BASIC’е.
Всё шло прекрасно, код писался быстро и бодро (я в те времена мог не отрываясь сидеть часами делать и переделывать), всё было замечательно, но…
48 Килобайт Спектрума не хватило на такой «глобальный» )) проект на Basic’е, было сделано около 20-30% кода и 90% картинок.
На всё было убито где-то 3 месяца.
UPD2:
myspeccy.com похоже лег от хабраэффекта, периодически сообщает мне что он Drupal и идите вы все лесом.
UPD3:
У меня был самопайный спектрум на плате ленинград с биосом 1990 года, по знаку «-» поддерживалась удвоенная загрузка с кассеты. По знаку «*» был доступен редактор памяти. Я по совету друга припаял тумблер к ножкам процессора для вызова немаскируемого прерывания NMI кажется, типа аналог свернуть игру, затем «*» зайти поглядеть содержимое игры в hex-редакторе. Правил таким образом деньги в SimCity.
Эту книгу я перечитывал сотни раз:
Как написать игру
Электронная версия второй книги опубликована в сети Александром Евдокимовым.
Как написать игру
Первая книга, седьмая в общей серии. Рассказывает о написании игр на Sinclair BASIC, Laser Basic, об использовании компиляторов Бейсика Tobos FP и MCoder II, пакетов процедур Supercode и New Supercode, а также генератора игр Games Designer. Описаны графический редактор Art Studio и музыкальный редактор Wham (версия для бипера).
Книга издавалась дважды. Тираж второго издания — 20000.
Как написать игру на ассемблере
Вторая книга из серии «Как написать игру для ZX Spectrum», девятая в общей серии. Посвящена основам программирования на ассемблере и его применения для написания игр. Ориентирована на использование ассемблера GENS из пакета Devpac. Хотя книга и является продолжением серии, она может рассматриваться как самостоятельное издание, так как содержит информацию об архитектуре компьютера — структуре экрана, памяти и расширенной памяти, бипере и музыкальном синтезаторе. В процессе изучения книги можно самостоятельно создать несколько компьютерных игр, используя стандартные спецэффекты, такие как бегущая строка, прорисовка заставки, размножающиеся окна и т.д. Также включает в себя краткое описание музыкального редактора Wham (для AY-3-8910) и некоторых специфических функциях ассемблера GENS. Тираж книги — 30000 экз.
Как написать игру
Электронная версия второй книги опубликована в сети Александром Евдокимовым.
Как написать игру
Первая книга, седьмая в общей серии. Рассказывает о написании игр на Sinclair BASIC, Laser Basic, об использовании компиляторов Бейсика Tobos FP и MCoder II, пакетов процедур Supercode и New Supercode, а также генератора игр Games Designer. Описаны графический редактор Art Studio и музыкальный редактор Wham (версия для бипера).
Книга издавалась дважды. Тираж второго издания — 20000.
Как написать игру на ассемблере
Вторая книга из серии «Как написать игру для ZX Spectrum», девятая в общей серии. Посвящена основам программирования на ассемблере и его применения для написания игр. Ориентирована на использование ассемблера GENS из пакета Devpac. Хотя книга и является продолжением серии, она может рассматриваться как самостоятельное издание, так как содержит информацию об архитектуре компьютера — структуре экрана, памяти и расширенной памяти, бипере и музыкальном синтезаторе. В процессе изучения книги можно самостоятельно создать несколько компьютерных игр, используя стандартные спецэффекты, такие как бегущая строка, прорисовка заставки, размножающиеся окна и т.д. Также включает в себя краткое описание музыкального редактора Wham (для AY-3-8910) и некоторых специфических функциях ассемблера GENS. Тираж книги — 30000 экз.
Книга как написать игру для zx spectrum
Приложение 2. Основные операторы, функции и команды Spectrum-Бейсика
ABS m Стр. 247. Абсолютное значение числа m.
печатается в радианах.
PRINT ACS 0.5 1. 04719761
AND Стр. 54, 57. Логический оператор.
LET x=7:IF x>5 AND x Ckay
печатается в радианах.
AT y,x Стр. 15. Оператор задает знакоместо для вывода данных в PRINT и
ATN р Функция арктангенс, результат печатается в радианах.
ATTR (у,х) Функция возвращает число от 0 до 255, соответствующее атрибутам знакоместа. Позиция знакоместа задается целочисленными величинами: (0. 23) и (0. 31).
10 FLASH 1:PAPER 3:1NK 7:BRIGHT 0 20 PRINT AT 10,12;» » 30 PRINT ATTR (10,12) 159
ВЕЕР t,h Стр. 30. Оператор генерирует звук длительностью t (в секундах) и высотой h (в полутонах). Число h = 0 соответствует ноте ДО первой октавы.
BIN S Стр. 46. Команда переводит двоичное число s в десятичное (нули в
левой части числа можно опускать).
PRINT BIN 10011010 154
border с Стр. 14. Оператор задает цвет поля вокруг рабочей области экрана и цвет фона служебного окна. Параметр с принимает целочисленные значения в пределах 0. 7.
BORDER 1:REM синий цвет бордюра
PRINT «RRR «; BRIGHT 1;»RRR»; BRIGHT 0;»RRR»
CAT Ключевое слово в Spectrum- Basic не задействовано.
CHR$ k Стр. 54. Функция возвращает символ по указанному, в аргументе
коду k. Код принимает значения 0. 255.
CIRCLE INK 1;100, 50,42
CLEAR n Стр. 60. Оператор уничтожает все переменные и очищает
занимаемую ими память. Выполняет RESTORE и CLS, устанавливает PLOT-позицию в нижнюю левую точку экрана. Изменяет системную переменную RAMTOP на n и задает новый GO SUB стек.
CLOSE #a Оператор используется при работе с потоками и каналами
CLS Стр. 15. Оператор очищает основной экран и окрашивает его в
текущий постоянный цвет фона.
CODE A$ Стр. 43. Функция возвращает код первого символа символьного
значения А$ в соответствии с таблицей символов ZX Spectrum [ ].
CONTINUE Команда продолжает выполнение программы с оператора, на котором она была прервана.
COPY Оператор распечатывает копию 22 строк экрана на принтере.
COS p Функция вычисляет косинус угла р, заданного в радианах.
DATA 56, 0,128,37, 11, 0,»Sokoban», 68
DEF FN Оператор определяет пользовательскую функцию (дополнительно
100 DEF FN L(x,y)=xt2+4.5*x-0.8*y+9. 6
300 PRINT FN 1(3.69,0.23)
DIM R (m) Стр. 21. Оператор задаст одномерный числовой массив на m элементов,
DIM R(m,n) Стр. 22. Оператор задает двухмерный числовой массив, рассчитанный на m строк по n чисел в каждой.
DIM R$ (m,n) Стр. 22. Оператор задает двухмерный символьный массив, рассчитанный на m слов по n символов в каждом.
DRAW x,y Стр. 23. Оператор строит на экране отрезок прямой линии или
[ ‘ r] дугу окружности. Относительное расстояние (в пикселях) от
начала отрезка до его конца измеряется величиной х по горизонтали и у по вертикали.
DRAW INK 5; 100, 20, 8
ERASE Ключевое слово в Spectrum- Basic не задействовано.
ЕХР х Экспоненциальная функция, возводит число е = 2.7182818 в
FLASH р Стр. S9. Оператор устанавливает режим мерцания при
PRINT FLASH 1;»ZX Spectrum»
FN Возвращает значение пользовательской функции, заданной
FOR n=a ТО b Стр. 19. Оператор цикла, позволяющий выполнять [STEP s] часть программы, заключенную между операторами FOR и NEXT, заданное число раз. Управляющая переменная n принимает значения от n = a до n = b с шагом s. Если шаг не задан, то по умолчанию он принимается равным 1.
format Ключевое слово в Spectrum- Basic не задействовано.
GO SUB n Стр. 33. Оператор передачи управления подпрограмме. Номер строки, с которой начинается подпрограмма, задается целочисленным значением n. Текст подпрограммы должен заканчиваться оператором RETURN, который возвращает управление оператору, следующему за GO SUB.
GO TO n Стр. 25. Оператор безусловного перехода на строку с номером n,
который должен иметь целочисленное значение.
IF. THEN.. Стр. 26. Оператор условного перехода, причем условие ставится за IF. Если это условие выполняется, то управление передается на оператор (операторы), стоящий за ключевым словом THEN. Если же оно не выполняется (ложно), то управление переходит к следующей строке программы.
IN m Стр. 109. Функция считывает число (байт) из порта. Адрес порта
задается целочисленным значением m (0. 65535), записываемым за ключевым словом.
INK с Стр. 15. Оператор устанавливает цвет тона, то есть цвет, в который
окрашиваются выводимые на экран символы, точки, линии. Код цвета с должен иметь одно из целочисленных значений (0. 9).
50 PRINT AT 10,12;INK 4;»Sinclair»
INKEY$ Стр. 26. Функция возвращает символ, соответствующий нажатой
клавише. Используется для обнаружения факта нажатия клавиши на клавиатуре.
100 IF INKEY$=»P» THEN GO TO 1000
120 IF INKEY$=»O» THEN GO TO 2000
INPUT a,b,t$ Стр. S3. Оператор ввода данных в программу: присваивает числовым или символьным переменным а, b, t$, расположенным за ключевым словом, соответственно, числовые или символьные значения, набираемые на клавиатуре.
20 INPUT INK 1;»name:»;k$
INT х Стр. 24. Функция преобразует числовое значение х до
ближайшего (меньшего) целого числа.
PRINT INT 23.59;» «;INT-3.84
INVERSE p Стр. 213. Оператор устанавливает режим инвертированного отображения графической и символьной информации. Число р
10 PAPER 7: INK 0:CLS 20 INVERSE 1: PRINT «Moon»
LEN а$ Стр. 27, 28. Функция возвращает длину (число символов)
символьного значения а$.
PRINT LEN «Compiler» 8
LET x=a Стр. 20. Оператор присваивает переменной х значение а.
30 LET y=3.1415926 40 LET b$=»Таре» 50 LET s(12.7)=128
LINE m Стр. 19. Ключевое слово ставится после оператора SAVE и
указывает, что программа после ее загрузки оператором LOAD будет сразу запущена со строки с номером m.
LIST m Оператор выводит на экран листинг бейсик-программы,
находящейся в памяти компьютера, начиная со строки m. Если номер не указан, выводится вся программа.
LLIST m Оператор распечатывает на принтере листинг бейсик-программы,
находящейся в памяти компьютера, начиная со строки m.
LN z Функция натурального логарифма положительного числа z.
PRINT LN 5.5 1. 704748
LOAD a$ Стр. 19. Оператор загрузки бейсик-программы в память
компьютера. Имя программы задается значением, а$. LOAD с «пустым» именем загружает первую встретившуюся на ленте программу.
LOAD a$ CODE Стр. 43. Оператор загрузки в память компьютера кодового блока
[п],[1] (последовательности байтов). Имя файла, в котором был сохранен
LOAD a$ DATA Оператор загружает с магнитной ленты в память компьютера
значением а$ Следом за DATA указывается имя массива г (буква
LOAD «Fighter» DATA r()
LOAD «Monitor» DATA s$()
LOAD a$ Оператор загружает с магнитной ленты блок кодов
LOAD «Zastawka» SCREEN$
MERGE a$ Стр. 146. Оператор подгружает бейсик-программу с магнитной ленты в память компьютера, не стирая уже находящейся там программы. Имя загружаемой программы задается значением а$. Оператор MERGE соединяет две программы,располагая их строки по порядку возрастания номеров.
move Ключевое слово в Spectrum-Basic не задействовано.
NEW Стр. 144. Оператор очищает область памяти, отведенную для
размещения и работы бейсик-программы.
NEXT n Стр. 19. Оператор цикла, позволяющий выполнять часть
программы, заключенной между FOR и NEXT, заданное число раз. Управляющая переменная n принимает значения от n = a до n = b с шагом h. Если он не задан, то по умолчанию принимается 1.
NOT Стр. 55. Логический оператор отрицания условия, стоящего за
OR Стр. 34. Оператор логического сложения условий. Комбинация
условий, объединенных операторами OR, истинна, если истинно хотя бы одно из них.
60 IF y=32 OR y=64 OR y=128 THEN PRINT «Left» Функция возвращает значение, стоящее перед ключевым словом, если се аргумент равен 0 или возвращает 1, если аргумент не равен 0.
OUT s,b Стр. 113. Оператор записывает в порт целочисленное значение b
(0. 255), адрес которого задается целочисленным значением s (0. 65535).
OVER s Стр. 33. Оператор устанавливает режим наложения изображений
20 PRINT AT 10,10;»1 2 3 » 30 PRINT AT 10,11;»a b c» 1Э2Ь3С
окрашивается экран. Число с принимает целочисленное значение в пределах от 0 до 9 и является кодом цвета.
10 BORDER 0: PAPER 0:INK 7
PAUSE t Стр. 17. Оператор приостанавливает работу программы на время,
задаваемое целочисленным значением t (0. 65535). Пауза равна t/50 сек. Оператор PAUSE 0 продолжит работу программы только после нажатия какой-либо клавиши.
PAUSE 200 (пауза на 4 сек.)
PEEK n Стр. 138. Функция считывает число в интервале от 0 до 255 (байт)
из ячейки памяти. Адрес ячейки задается целочисленным значением n (0. 65535).
60 РОКЕ 40000,209 70 PRINT PEEK 40000 209
PI Стр. 84. Функция возвращает значение числа «пи» (3.1415926).
PRINT PI 3. 1415926
300 PLOT INK 1;INVERSE 1;x,y
570 IF POINT (x,y)=1 THEN GO TO 240
POKE n, b Стр. 46. Оператор записывает в память целочисленное значение b (0. 255). Адрес ячейки памяти задается целочисленным значением n (0. 65535).
100 РОКЕ 23609,155 110 PRINT PEEK 23609 155
PRINT 500000000 5Е8
RANDOMIZE k Стр. 64. Оператор задает начало последовательности случайных чисел, генерируемой оператором RND. Целочисленное значение k (1. 65535) устанавливает фиксированное начало последовательности.
READ w Стр. 21. Оператор присваивает переменной w значения,
считываемые из списка данных, следующих за оператором DATA.
REM Стр. 18. Оператор отделяет текст комментариев от текста
программы. Следом за REM могут стоять любые символы.
100 GO SUB 5000: REM Подпрограмма заставки.
RESTORE n Стр. 121. Оператор указывает строку n DATA, с которой нужно считывать данные следующим по программе оператором READ. Если n не указано, либо n = 0, то оператор READ обращается к первому в программе оператору DATA.
RETURN Стр. 29. Оператор заканчивает подпрограмму (GO SUB) и передает
управление на оператор, следующий сразу за GO SUB.
RND Стр. 24. Функция возвращает псевдослучайное число в интервале
от 0 до 1, исключая саму 1. Изменить последовательность можно выполнением оператора RANDOMIZE.
FOR j=1 TO 5:PRINT RND:NEXT j
RUN [n] Стр. 18. Оператор запуска бейсик-программы. Для запуска с
определенной строки, должно быть задано целочисленное значение n.
SAVE a$ Стр. 19. Оператор записывает бейсик-программу на магнитную
[LINE n] ленту. Программе присваивается имя, задаваемое символьным
значением а$, которое должно содержать не более десяти символов и не может быть «пустым». Ключевое слово LINE указывает, что программа после ее загрузки оператором LOAD будет сразу запущена со строки с номером n.
SAVE a$ CODE Стр. 18. Оператор сохранения на магнитной ленте блока кодов n,1 (последовательности) байтов. Имя файла, в который записывается
блок, задается символьным значением а$. Имя должно состоять не более чем из десяти символов и не может быть «пустым». За ключевым словом CODE указывается адрес n размещения блока кодов в памяти компьютера и количество загружаемых байт l.
SAVE «Spruts» CODE 16384,6912
SAVE «Monitor» DATA r()
SAVE «Fighter» DATA s$()
SAVE a$ Оператор записывает на магнитную ленту экранное изображение.
задается символьным значением а$. Имя должно состоять не более чем из десяти символов и не может быть «пустым».
SCREEN$ Стр. 229. Функция возвращает символ, помешенный в указанном
(y ‘ x) знакоместе экрана. Позиция знакоместа задается двумя
210 LET a$=SCREEN$ (10,12)
SGN g Стр. 172. Функция определяет знак числового значения. Она
возвращает следующие значения:
SIN p Стр. 84. Функция вычисляет синус угла р, заданного в радианах.
SQR k Стр. 239. Функция вычисляет квадратный корень числа k.
STEP Стр. 19. Оператор используется для построения цикла FOR.
Устанавливает шаг приращения управляющей переменной.
10 FOR n=12 ТО 2 STEP-2 20 PRINT n;» «; 30 NEXT n 12 10 8 6 4 2
STOP Стр. 34. Оператор останавливает выполнение бейсик-программы.
После остановки программы ее выполнение может быть продолжено оператором CONTINUE.
STR$ w Стр. 131. Функция преобразует числовое значение w в
символьное. STR$ возвращает значение аргумента в виде символьной константы.
70 LET A=747920 80 A$=STR$ A 90 PRINT A$ 747920
TAB x Стр. 55. Оператор задаст позицию вывода на экран в текущей
строке. Целочисленное значение х (0..31) указывает номер колонки. Если х меньше текущей позиции вывода, символ помещается в заданную позицию, но строкой ниже. TAB используется только с PRINT и INPUT.
PRINT TAB 1;»*»;ТАВ 5;»*»;ТАВ 3;»|»;ТАВ 3;»_» * *
TAN p Функция вычисляет тангенс угла р; заданного в радианах.
PRINT TAN 1.3 3. 6021024
THEN Стр. 26. Ключевое слово, используется в операторе IF. THEN.
TO Стр. 19. Как оператор, используется для построения циклов FOR.
Как функция, выделяет подстроку (выполняет сечение) символьного значения. Начальная и конечная позиции сечения задаются двумя целыми числами, которые записываются через ключевое слово ТО в скобках.
PRINT «PIRAMIDA» (3 ТО 6) RAMI
USR n Стр. 144. Функция с целочисленным значением передает
управление подпрограмме в машинных кодах, расположенной по адресу n (0. 65535).
USR «a» Стр. 47. Функция с символьным значением возвращает адрес
первого из восьми байтов, задающих изображение символа, определяемого пользователем. Следом за USR указывается одна из 20 букв A,B,C. U.
VAL c$ Стр. 164. Функция возвращает символьное значение,
представляющее собой символьную запись числового значения, в числовую константу.
VAL$ «c$» Функция возвращает строку символов, представляющую собой
результат вычисления символьного выражения, записанного в
виде символьной константы.
10 LET a$=»ROBIN»:LET b$=»WOOD» 20 LET c$=»a$+»;» in the «;»+b$» 30 PRINT VAL$ c$ ROBIN in the WOOD
VERIFY a$ Стр. 146. Оператор проверяет правильность записи программы на магнитную ленту. Имя проверяемой программы задается символьным значением а$. Если программа, записанная на ленте, не совпадает с программой, находящейся в памяти компьютера, то выдается сообщение об ошибке: Таре loading error.
VERIFY» » VERIFY»Miny» VERIFY»Sokoban»DATA r() VERIFY»Space war»SCREEN$ VERIFY»Tanx»CODE VERIFY»Tanx»CODE 16384,6912
Создай свою собственную игру на ZX Spectrum. Часть 1
Одной из наиболее запоминающихся характеристик нашего любимого микро-хобби было то, что оно позволило многим сделать первые шаги в программировании и аппаратном обеспечении. Помимо всего прочего, и почти всегда в форме кратких мастер-классов мы могли «нарезать» куски кодовых строк для того, чтобы создавать наши собственные игры. Потом мы могли изменять их и даже обучаться в форме самообразования. Это было больше похоже на вечное обещание «Купи мне Спектрум, который поможет мне учиться».
Так вот, короче, мы всегда хотели иметь в Мире Спектрума технический отдел, и сегодня, благодаря Mojon Twins (“Близнецам Мохонам”), открывается новый раздел Семинара, в котором вы сможете научиться создавать ваши собственные игры для Спектрума. Лучше поздно, чем никогда. Это подходящий момент для того, чтобы избавиться от этой занозы, сидящей вот уже 20 или 30 лет, и, в конце концов, стать авторами вашего собственного спектрумского шедевра.
В этом повествовании, поделенном на главы, Mojon Twins расскажут нам в своем традиционном сюрреалистическом и очень юмористическом стиле о методе использования их программы Churrera v3.99b (Чуррера – продавщица «чуррос», сладкой выпечки из заварного теста). Вы увидите, насколько это просто, когда тебе все объясняют. И если у вас есть какие-нибудь сомнения, вы можете спрашивать все, что угодно посредством комментариев для того, чтобы преподаватель Мохоно, обезьяна или человек, либо ответил вам, либо продал вам подержанный мотоцикл, этого мы уже не знаем.
Итак, перед вами первая глава La Churrera v3.99b – Руководство пользователя – Copyleft 2013 The Mojon Twins.
Глава 1. Введение
Что это еще за забор?
Это говорю я. Что это еще за забор? Уффф… Столько нужно рассказать и столько мало места. Я мог бы болтать часами, говоря всякие глупости, однако постараюсь этого не делать. Мне сказали, что я должен выражать свои мысли коротко и ясно, и хотя мне это непросто, я попытаюсь быть таким.
Начнем с самого начала. В действительности продвинемся чуть-чуть дальше жаркого спора между креационистами и сторонниками теории эволюции. Отправимся в 2010 год… (Здесь звучит типичная музыка для того, чтобы поставить изображения из прошлого – та, что заставляет делать так: та-а-а, та-ра-ра-ра, та-ра-а-а…).
В начале года у нас в Мохонии была одна идея. В основном мы были по горло сыты тем, что, делая игры, копировали и вставляли. Потому что дело заключается не в том, чтобы копировать и вставлять, а в количестве тех вещей, которые всегда выполняются одинаково с изменением некоторых параметров. Посмотрим, думаешь ли ты, что мы – те, кто делает игры, – каждый раз при этом пишем одну и ту же рутину… Мы также устали от изнурительной ручной работы. Что, если перемещать вручную спрайты в формат splib2, что, если выстраивать вручную плитки для того, чтобы SevenuP прочитал их в правильном порядке, что, если пройти карту, что, если разместить врагов на листе в клетку… У нас была тысяча забот во время производства игр, которые получались скучными и тоскливыми. А кто хочет скучать, пока он делает то, что предположительно ему нравится? Мы – нет. И, полагаю, что и ты – тоже.
Я уже это знаю. То, что рисовать игры и делать все на милиметровой бумаге, – это привет из 80-х, и это действительно утомительно. Можно быть фриком, но мазохистом – никогда.
Поэтому случилось так, что нам стал нужен фреймворк, как его теперь называют, что позволил бы нам располагать кодовыми модулями, которые мы хотели бы использовать в простой форме, и который бы сносно выполнил нам всю тему преобразования и интеграции данных (рисунки, карты, расположение врагов и предметов…). Мы робко начинаем с написания утилит преобразования для того, чтобы потом, используя кусочки оттуда и отсюда, создавать движок, который послужил бы нам основанием.
У нас была куча идей для движка. Мы могли бы развивать его понемногу и затем получить окончательный вариант игры, но мы не действуем подобным образом. Поскольку с нами приключались приступы паранойи, мы получали игры всякий раз, когда отправляли что-то новое в движок. Таким образом, как только был готов «оперативный минимум», мы выпустили Lala the Magical («Волшебница Лала»), Cheril of the Bosque («Шерил из Леса»), Sir Ababol («Сэр Простофиля») и Viaje al Centro de la Napia («Путешествие к Центру Носа»).
Поскольку, оглядываясь назад, мы лепили игры как «чуррос» (но о каких «чуррос» речь, сеньора!), мы решили назвать систему «Ла Чуррера». И так все и началось…
Но тогда, что именно это такое, Churrera?
Пожалуй, вот так: Churrera – это фреймворк, который состоит из нескольких очень забавных вещей:
«Продаю подержанный мотоцикл»
У Чурреры было много версий на протяжении трех последних лет. От внутренней формы мы дошли до версии 4.7, однако наборчик получился непрезентабельным. Он был очень беспорядочный, и у него слишком было много хаков. Таким образом, когда нам пришло в голову сделать руководство пользователя, мы решили вернуться немного назад, в ту точку прошлого, когда эта тема была еще управляемой – к версии 3.1: Trabajo Basura («Грязная работа»), Zombie Calavera Prologue («Зомби Калавера. Пролог»). Но не думайте, что мы ограничимся тем, что дадим вам нашу «старую версию», и на этом хватит. Нет, ничего подобного.
В течение пары месяцев мы целиком и полностью посвятили себя тому, что взяли версию 3.1, исправили в ней все недоделки, поменяли половину компонентов для того, чтобы сделать их более быстрыми и компактными, а также добавили кучу характеристик. Таким образом, мы создали версию 3.99b, которую предоставляем в ваше распоряжение, и которая во многих отношениях более продвинутая, более быстрая и выполняет больше действий, чем версия 4.7. На самом деле у нас получилось так хорошо, что мы продолжаем разработку, начиная с этой версии 3.99b, включая усовершенствования «ветви 4» «Ramiro el Vampiro» («Рамиро-Вампир»), которые мы будем считать интересными.
Версия 3.99b настолько оптимизирована, что, если мы рекомпилируем старые игры с ней, то получим бинарники на 2 – 5 килобайтов меньшего размера, с более быстрыми движениями и намного более связные. И она находится в вашем распоряжении.
Кроме того, записанная на дискете, она придает необходимую консистенцию магнитному материалу для того, чтобы эта дискета, брошенная ниндзя, начисто срезала головы врагов.
Но что можно сделать с помощью этого?
Пожалуй, кучу разных вещей. И они уже пришли нам в голову. И хотя верно, что есть общие элементы и определенные ограничения, очень часто ты можешь вытащить из рукава новую паранойю, всего лишь комбинируя в различной форме элементы, которые имеешь в своем распоряжении. Хочешь примеры? Для этого самого мы запустили Mojon Twins Covertape #2. Если у тебя его еще нет, скачай. СЕЙЧАС.
Для Mojon Twins Covertape #2 мы наняли племя грязноногих индейцев родом из Джунглей Бадахоса. Каждому из них мы написали одну характеристику Чурреры на спине, а другую – на груди, и отправили их спускаться по холмам, образуя крокету (род котлеты). Когда они спускались вниз, мы сделали фотографию и отметили возникшие комбинации. С помощью этих комбинаций мы создали игру. Потом мы позвали Альберто, Одноглазую Обезьяну, который придумывает небылицы с тем, чтобы он подтвердил их, используя какой-нибудь убедительный аргумент. И это работает, серьезно.
Окинем взглядом то, что мы имеем в наличии:
И много-много другого, что сейчас я не помню, но по мере того, как мы будем продвигаться вперед, это обязательно придет мне на ум.
Трюк заключается в том, чтобы комбинировать эти вещи, призывая на помощь воображение, немного заимствуя от рисунков, и в итоге, быть немного креативным. Например, если мы включим слабую гравитацию, которая заставит главного героя падать очень медленно, предоставив ему возможность летать с очень маленьким ускорением, поставим синий фон и снабдим персонажа формой водолаза, то сможем сделать так, словно мы находимся под водой. Также можно попробовать какие-то крайности – как, например, включить характеристик вертикального ускорения и отрицательной гравитации с тем, чтобы фигурка резко улетала вверх и прикладывать усилия для того, чтобы опуститься вниз… Конечно, мы этого никогда не пробовали, и мне только что пришла в голову одна идея… Как только я поговорю с Альберто, и придумаю какой-нибудь аргумент, у нас будет новая игра.
Видите? Вот так это работает! Отправьте мне email, и я дам вам телефон Альберто.
Тогда с чего мы начнем?
С воображения. Меня не устраивает, что ты возьмешь какую-нибудь нашу игру, уже сделанную, и что-нибудь в ней поменяешь. Нет. Так ты далеко не уйдешь. Некоторые люди так не считают, но я говорю тебе – НЕТ. Изобрети что-нибудь, начни с нуля, и мы постепенно будем это строить, шаг за шагом.
Если у тебя не получается рисовать, найти друга, который бы умел это делать. Серьезно, такой человек всегда есть. Если ты его вдруг не найдешь, то ничего страшного – ты можешь использовать любой рисунок, который сделаем мы. В архивах исходного кода всех игр находятся все рисунки в формате png. Научиться вырезать и вставлять их с помощью графического редактора – это минимум того, чему ты должен научиться.
В любом случае, для того, чтобы начать, и будучи уверенным в том, что вы действительно не знаете, чего можно делать, а чего нельзя, я приглашаю вас к пошаговому созданию Dogmole Tuppowski. Почему именно этой игры? Потому что она использует много всего, включая скриптинг. Но я не хочу, чтобы ты уходил, забрав архив исходников Covertape #2, и ограничился тем, что стал бы следовать инструкции, просматривая эти архивы. Нет. Тебе предстоит начать с пустого движка, который мы предложим тебе ниже, и с каждой главой ты будешь получать различные средства и осуществлять необходимые действия, как если бы ты действительно создавал игру с нуля.
Давай же, поехали! Начинаем
Сначала надо придумать историю, которая указывала бы на геймплей. Мы не станем пока писать историю для игры (потому что на данный момент в ней не нуждаемся) – это придет чуть позже. Первым делом мы решим, что нужно делать.
Давайте создадим игру с Dogmole Tuppowski – персонажем, которого мы придумали давно, и который выглядит вот так.
В первую очередь условимся, что мы делаем игру в боковой перспективе, с платформами, на которые запрыгивает этот персонаж. Он не станет прыгать слишком высоко, пусть он сможет покрыть расстояние в четыре или пять плиток по горизонтали и в две – по вертикали. Это мы должны решить сейчас, потому что дальше нам следует нарисовать карту и убедиться в том, что игрок сможет добраться до тех мест, которые мы ему определили.
Мы сделаем, чтобы для завершения игры нужно будет выполнить две миссии. Этого мы добьемся посредством скриптинга – то, что мы оставим на окончание процесса. Эти миссии будут простыми и будут использовать автоматические характеристики «движка» для того, чтобы не нужно было писать слишком сложный скрипт:
Для того, чтобы обосновать это, объясним, что враги, которых следует уничтожить, являются колдунами или монахами или чем-то таким магическим, что удерживает закрытой ту часть сцены, куда нужно носить предметы. История пишется сама по себе!
Так как мы уже знаем, что должны будем создать игру с боковой перспективой, с прыжками (при этом можно будет наступать на определенный тип врагов и убивать их, и нести на себе только один предмет), нам потребуется скриптинг. Он нужен для того, чтобы нарисовать камень на входе в то место, куда будет нужно приносить предметы, если мы не убили врагов. Кроме того, перенос предметов по одному с тем, чтобы оставлять их в каком-то месте, также требует немного скриптинга.
Поскольку у нас есть яйцо, мы придумываем историю, которую ты уже знаешь, если прочитал в свое время описание Covertape #2:
Сеньорита Мимайд из Мискатоника, которая причесывалась при свете полной луны на своей крепостной башне, все это видела и, уверенная в том, что содержимое ящиков может представлять большую ценность для оккультистов и прочих странных личностей, решила собрать их. Поскольку ее грузовик был сломан и до следующего дня находился в ремонте, она отправила охранять ящики своих приспешников, а вместе с ними и двадцать Колдунов Религии Петете, которые своим колдовством закрыли двери Университета.
Следовательно, у Догмоле двойная миссия. Сначала он должен уничтожить двадцать Колдунов Религии Петете, и затем, открыв дверь Университета, найти и отнести по одному десять ящиков в вестибюль здания, где ему следует оставить их под вывеской «BOXES», нажимая «A».
Теперь мы можем приступить к дизайну нашей игры. В действительности все обычно получается так. В нашей игре мы обычно делаем ловушки и играем с форой; многие из наших игр появились, потому что мы добавили к Чуррере какую-нибудь новую опцию, и нужно было ее опробовать, как это произошло с Bootee, Balowwwn, Zombie Calavera или Cheril the Goddess. Креативный процесс не имеет «дна» и требует от тебя наличия некоторой изобретательности и воображения, чему, к сожалению, научить нельзя.
Да, я уже было забыл. Также мы сделали рисунок Meemaid. Вот она:
Лицом в грязь
Давайте уже начинать собирать все необходимое. Прежде всего, тебе потребуется пакет z88dk, представляющий собой компилятор C под Z80, и splib2 – графическая библиотека, которые мы используем. Поскольку мы не хотим, чтобы ты осложнил себе жизнь, устанавливая их (особенно потому, что splib2 – очень старая, и ее трудно скомпилировать, используя современный z88dk), мы подготовили для пользователей Windows этот архив, который нужно распаковать прямо в корень С, и который содержит в себе z88dk 1.10 и splib2. Если у тебя все получится, то должна будет появиться папка C:\z88dk10 с файлами внутри.
Пользователи Linux и других систем не должны иметь никаких проблем с установкой последней версии z88dk на своих системах: нужно скопировать файлы splib2.lib и splib2t.lib туда, где папка clibs и spritepack.h туда, где папка includes. Эти два файла я оставил для них здесь:
Также нам будет нужен текстовый редактор. Если ты программист, то у тебя уже есть такой редактор, с которым ты великолепно обращаешься. Если ты таковым не являешься, то, пожалуйста, не используй “Блокнот”! Скачай, к примеру, Crimson Editor. В действительности любой из редакторов лучше, чем Блокнот на Windows. Если у тебя стоит Linux, то ты будешь иметь в своем распоряжении, по крайней мере, около шестнадцати установленных текстовых редакторов; так что, пользователи Linux, тут преимущество на вашей стороне.
Для того, чтобы сделать карты игры, нам будет нужен редактор Mappy. Можешь скачать официальную версию, хотя лучше использовать мохонскую версию. Она была изменена с добавлением всех необходимых вещей и пары пользовательских характеристик, пришедшихся очень кстати, в чем мы еще убедимся.
Также нам будет нужен SevenuP для осуществления преобразования рисунков. Скачай его с официального сайта, отсюда:
Когда мы дойдем до звука, поговорим об утилитах Beepola и BeepFX. Ты можешь найти их и скачать сейчас, если хочешь, но мы не будем их использовать до самого конца.
Тебе также будет необходим хороший графический редактор для того, чтобы раскрашивать обезьянок и «рожки» на экране. Тебе подойдет любой, который сохраняет файлы в формате .png. Я повторяю тебе, что, если ты не умеешь рисовать, и у тебя нет такого друга, ты можешь «стащить» рисунки с Mojon Twins. Таким же образом тебе потребуется графический редактор для того, чтобы вырезать наши рисунки и вставлять их в твои. Тебе подойдет любой. Я использую суперстарую версию Photoshop, потому что я к ней привык. Многие пользуются Gimp. Их насчитывается целая куча, выбирай тот, что тебе больше по вкусу. Но чтобы он сохранял файлы в формате .png. Запомни. Если пьешь, то за руль не садись.
После установки всего этого нам будет нужна Чуррера. По следующему адресу находится полный архив версии 3.99b:
Для того, чтобы приступить к работе, распакуем архив Чурреры в корневую папку и персонализируем его для нашей игры, следуя этим шагам:
Должно получиться так:
Всякий раз, когда мы создаем новую игру, мы должны будем распаковать новую копию Churrera и таким же образом ее персонализировать.
Мы уже готовы к тому, чтобы начать… Но вы должны будете подождать следующей главы. (Не надо ждать, она уже готова! – прим. переводчика)
[ Перевод на русский язык – сайт viva-games.ru. При перепечатке любой части статьи ссылка на viva-games.ru обязательна. Оригинал статьи тут. ]
Понравилась публикация? Поделись с друзьями