Работу, которую мы Вам сегодня представляем, и мы и наши постоянные читатели ждут уже несколько лет. Еще в 1991 году мы рассказали о том, что на Западе адвентюрные игры пишут с помощью инструментальных систем, таких как QUIL, GAC (Graphic Adventure Creator) и PAWS (Professional Adventure Writing System). Из этих систем GAC очень широко распространена на территории России, но до сих пор у нас не было информации о том, что кто-то научился с ней работать. Более того, многочисленные письма читателей с просьбами рассказать об этой системе нам приходилось оставлять без надлежащего ответа.
Этой статьи ждет Алексеев Виталий, ждет её Сергей Дрянных, её ждут десятки других наших читателей. Помощь пришла из г. Клайпеды от Сергея Власова. Мы понимаем, что это далеко не финал в деле освоения и применения GAC, многое еще не исследовано и не сделано, но лед тронулся и процесс пошел.
Мы не ставим точку на этом вопросе. Как Вы увидите из статьи, во-первых, не все вопросы выяснены до конца, а во-вторых, на повестку дня выходят и такие проблемы, как:
- адаптация программы под TR-DOS;
- адаптация программы под принтер;
- неполная адаптация на русский язык (перевод сообщений и т.п.);
- полная адаптация под русский язык (распознавание русскоязычных команд);
- стандартизация русскоязычных команд для адвентюрных игр и их сокращения;
- практические приемы по созданию адвентюрных игр.
Как видите, здесь еще необъятное поле для деятельности и каждый, кто любит "СПЕКТРУМ" не только ради возможности пострелять и побегать, может найти занятие себе по вкусу.
THE GRAPHIC ADVENTURE CREATOR
© С. Власов (NEMANSOFT), 1994. Программа выпущена фирмой Incentive Software и предназначена для тех, кто хочет написать свою игру
жанра ADVENTURE.
Прежде чем начать программирование, подготовьте сценарий, все обдумайте, нарисуйте карту, составьте словарь, определите, как и где будут применяться объекты, как программа будет давать сообщения в ответ на Ваши действия.
У Вас есть возможность создать 9999 локаций, задать 255 глаголов, 255 существительных, 255 наречий и их синонимов, подготовить 255 сообщений и 9999 рисунков и определить 255 объектов.
Конечно, нас такую гигантскую игру не рассчитывайте, у Вас просто не хватит памяти, но пару сотен локаций, словарь около четырехсот слов, несколько десятков объектов и картинок, более сотни сообщений Вы вполне осилите. В общем G.A.C. позволяет создавать адвентюрные игры высокого класса.
Main menu: (главное меню).
Begin Where? (где начать).
Adverbs (наречия).
Conditions (LOCAL) (локальные условия).
Graphics (графика).
High priority conditions (условия высшего приоритета).
Low priority conditions (условия низшего приоритета).
Verbs (глаголы).
Noun (существительные).
Messages (сообщения).
Objects (объекты).
P-printer menu (меню для принтера).
Room description (описание локаций).
Save adventure (сохранить DATAFILE).
T-load adventure (загрузить DATAFILE).
X-erase adventure (стереть игру из памяти).
ENTER - enter adventure (пробный запуск).
Select one of above please. (Выберите то, что Вам нужно.)
Verbs. Adverbs. Noun.
Первым делом необходимо записать словарь. Нажмите "V" и Вы окажетесь в меню * Edit Verbs *. Дальше все просто. Введите номер глагола, пробел и сам глагол. Если Вами предусмотрен синоним, то ему необходимо присвоить такой же номер. В конце-концов Ваш словарь будет выглядеть так:
1 NORTH
1 N
2 WEST
2 W
3 INVENTORY
3 I
и так далее. Нажав DELETE, Вы удалите слово, которое находится напротив курсора. Нажав EDIT, Вы можете вернуть последнее удаленное слово. ENTER позволит вынести слово для изменения. Курсорными клавишами "вверх" и "вниз" можно перемещать список вверх и вниз относительно курсора. Чтобы выйти из меню, нажмите BREAK/SPACE. Такой же порядок работы в меню "Adverbs" и "Noun".
Room description.
Теперь можно вводить карту и описания локаций. Первое, что Вы увидите - это вопрос "Which room number?."(номер комнаты?). Начинайте с той комнаты, откуда Ваш герой начнет путешествие. Введя номер комнаты, Вы увидите "Room #.is". Можете набирать описание этой локации. 0писание не должно быть более семи строк. Закончив, нажмите ENTER. Появится вопрос: "Connection are." (Cоединения.). Соединять комнаты нужно следующим образом: WEST 5 NORTHEAST 1 и так далее. Можно писать сокращенно W5 NE1. Поясняю: если Вы пойдете на запад (west), то попадете в локацию номер 5 (W5). Не забывайте между цифрами и буквами ставить пробел.
После этого появится вопрос: "Which picture goes in this room?." (Какая картинка будет в этой комнате?) Если Вы хотите сделать игру с графикой, то введите номер картинки, которая предназначена для этой комнаты. Если рисунка под таким номером еще нет, то программа вам так и скажет.
Objects.
Выбрав номер объекта (which objects number?.) на запрос "Object #. is ." введите название, например: "a key". Нажав ENTER, получите запрос "Start in room #.". Наберите номер локации, в которой по ходу игры, главный герой найдет этот объект. Если же у Вас предусмотрено, что объект будет лежать в каком-нибудь ящике или появится в результате магических действий, то нажмите "0". И последний вопрос "and a weight?" (вес?). Ваш герой будет наделен определенным количеством силы (которое Вы зададите сами), поэтому он сможет поднять не слишком много предметов. Но об этом чуть позже. Определите себе раз и навсегда меру, например: 100=1 кг. Значит, ключ будет весить около 10 единиц (100 гр.) и т.д. Соотношения в весе берите из реальной жизни.
Begin where?...
Номер локации, из которой Вы хотели бы начать свой путь (или пробный запуск), можно установить, выбрав
этот режим.
Save adventure.
Здесь Вы получите возможность сохранить на ленте созданный Вами Datafile ("D") или уже готовую к запуску игру Runable adventure ("R").
T-load adventure.
Выбрав этот режим, Вы можете загрузить ранее сохраненный Datafile. Готовую игру (Runable adventure загрузить сюда уже нельзя.
X-erase adventure.
Если Вы захотели стереть все, что Вы создали, из памяти, то Вам придется два раза нажать "Y".
ENTER.
Нажав ENTER, Вы совершите пробный запуск. Если Вы во время программирования допустили ошибку, то программа Вам об этом незамедлительно сообщит. Нажав BREAK/SPACE, Вы войдете в режим "Diagnostic", где сможете проанализировать состояние всех флагов.
Graphics.
Вы имеете возможность создавать рисунки, которые будут дополнять Ваше описание локации. Сразу скажу -выбор небогатый, но рисунки можно создавать очень даже... Взять хотя бы демонстрационную программу "RANSOM" (которая прилагается к фирменной касете от журнала "YOUR SINCLAIR"). В ней графика заслуживает всяческих похвал. Конечно, чтобы создать хороший рисунок, Вам придется попотеть.
В центре экрана находится курсор который перемещается клавишами 5,6,7 и 8. Если при этом удерживать "SYMBOL/SH", то курсор будет перепрыгивать через знакоместо .Используйте следующие клавиши: I - INK P- PAPER T- BORDER B - BRIGHT F - FILL
C - найти местонахождение курсора M - MERGE L - LINE G - GRID D- DOTS S - FILL (текстура) F - FILL V - FLASH
Z - отменяет последнюю выполненную операцию W - VIEW A - ?
E - рисовать окружности R - прямоугольники
Messages.
Сообщения, которые будут выдаваться на экран в ответ на Ваши действия. Например: "You can't", "The door is already open" и т.д. Надо сразу сказать, что в программе уже есть стандартные сообщения, которые будут появляться самостоятельно без Вашего участия (кроме 249, 250 и 255).
239 - "You are earring".
240 - "What now.".
241 - "You can't".
242 - "Pardon?".
243 - "Press a key for another game.".
244 - "Are you sure (Y/N)".
245 - "You've already got that".
246 - "You haven't got that".
247 - "You can't see that".
248 - "You are carring too much to pick that up".
249 - "Your score was".
250 - "And you took".
251 - "It is dark, you cannot see".
252 - "I can't find that anywhere".
253 - "You can also see".
254 - "Okay".
255 - "Turns".
Когда Вы загрузите программу, этих сообщений конечно же не будет, Вы должны их записать сами, но обязательно под этими номерами. Эти сообщения можете изменять, как захотите.
Conditions (LOCAL).
Здесь рассматриваются действия, которые могут происходить только в этой локации. Например, операции с дверьми, окнами и т.д.
High priority conditions.
Здесь рассматриваются действия до того, как играющий подал команду.
Low priority conditions.
Здесь рассматриваются действия после того, как играющий подал команду. Программа имеет 56 команд, при помощи которых может задаваться логика игры.
1. VERB - глагол.
2. NOUN - существительное.
3. ADVE - наречие.
4. HOLD - пауза; 50=1 сек.
5. END - обязательно ставится в конце любого условия.
6. IF - обязательно ставится в начале любого условия.
7. MESS - команда, выдающая сообщения.
8. SWAP - команда обменивает объекты.
9. AT - команда проверяет, какая локация? (где Вы?).
10. SET? - проверяет, включен ли маркер (флаг)?
11. RES? - проверяет, выключен ли маркер (флаг)?
12. SET - включает маркер.
13. RESE - выключает маркер.
14. QUIT - закончить игру по команде играющего.
15. LOOK - выдаст описание локации по команде играющего.
16. LOAD - загрузить отложенную игру по команде играющего.
17. SAVE - сохранить позицию игры по команде играющего.
18. EXIT - закончить игру без команды играющего.
19. TEXT - команда отключает появление картинок.
20. PICT - включает режим появления картинок.
21. OKAY - выдается сообщение "Okay".
22. DROP - выбрасывается предмет.
23. GET - взять объект.
24. CARR - проверяет, имеешь ли такой-то объект.
25. ТО - команда перемещает объекты.
26. LF - команда вставляет пустую строку.
27. AVAI - проверяет возможность какого-либо действия.
28. GOTO - перемещает героя в заданную комнату.
29. LIST - используется при команде INVENTORY.
30. WITH - используется при команде INVENTORY.
31. AND - логическое "и".
32. WAIT - ?
33. HERE - проверяет, в этой локации объект, или нет.
34. DESC - выдаст описание заданной комнаты.
35. OR - логическое "или".
36. PRIN - соответствует PRINT.
37. TURN - переменная, содержащая количество ходов.
38. STRE - задает количество силы.
39. DECR - уменьшить значение в CTR (например SCORE).
40. INCR - увеличить значение в CTR (например SCORE).
41. EQU - проверяет (сравнивает) чему равно CTR.
42. BRIN - после действия, объект окажется в Вашей локации.
43. FIND - после действия окажешься в локации с номером объекта.
44. WEIG - если в вашей локации есть объект (WEIG(N)) то.
45. OBJ - после операции загорится название объекта, номер которого (.) OBJ.
46. CTR - счетчик (в режиме DIAGNOSTIC).
47. CSET - установить счетчик.
48. NO1 - используется для распознавания существительных.
49. NO2 - ?
50. XOR - ?
51. IN - ?
52. ROOM - ?
53. CON(N) - ?
54. TAPE - ?
55. DISC - ?
56. WBNO - номер глагола.
57.
58.
Теперь я приведу примеры использования команд.
LOW PRIORITY:
1. IF (VERB (20)) MESS (249) PRIN (CTR (0)) MESS (250) PRIN (TURN) MESS (255) WAIT END
Эта строка по команде SCORE (номер 20 взят произвольно) напечатает очки и ходы.
2. IF (NO1=0 AND VERB (7)) MESS (19) WAIT END.
Если глагол TAKE (7) и название существительного не распознано, то выдать сообщение (N). Также можно поступить и с командами DROP, EXAMINE (NO1).
3. IF (NO1<5 VERB (7)) GET (NO1) OKAY END.
Если глагол TAKE (7) и номер существительного меньше пяти, тогда взять объект, номер которого такой же, выдать сообщение OKAY.
Тут есть одна особенность. Чтобы это условие работало, необходимо объекты размещать под такими же номерами, как и в меню NOUN. Например: NOUN OBSECT
1. KEY 1. Small key
2. BOTTLE 2. Green bottle
3. BOOK 3. Large book
4. IF (VERB (10)) MESS (239) LIST (WITH) WAIT END.
Выполняется команда INVENTORY.
5. IF (VERB (12)) PICT OKAY END (LOOK, LOAD, SAVE...).
6. IF (VERB (30) AND NOUN (3) AND CARR (3)) DROP (3) 3 TO 0 MESS (19) WAIT END
Если у вас было яблоко, и Вы подали команду EAT (30) APPLE (3), то выбросить объект 3. 3 Т0 0 означает, что объект 3 надо выбросить в локацию 0 (т.е. убрать вообще). Если вместо нуля поставить другой номер, то яблоко окажется в комнате с этим номером. Таким образом, яблоко можно и вернуть в игровое пространство.
7. IF (VERB (27) AND NOUN (13) AND AVAI (13)) 13 SWAP 14 CTR (0) + 20 CSET 0 MESS (10) SET (2) END
Если глагол LIGHT (27) и существительное LAMP (13) и этот объект (13) доступен, то тогда объект номер 13 (негорящая лампа) обменять на горящую лампу (14), к счетчику (0) прибавить 20 и установить счетчик номер 0, выдать сообщение (N) и включить флаг № 2, означающий, что лампа зажжена. Обратите внимание, что лампа может иметь два состояния: горящая и негорящая, в этом случае используется для проверки наличия объекта команда AVAI, а в случае с яблоком - CARR. Лампа уже не может проверяться командой NO1.
ИФК: По всей видимости, команда CARR (от слова CARRY) применяется для того, чтобы проверить, несет герой тот или иной предмет, т.е. как бы входит он или нет в его инвентарь. С другой стороны, команда AVAI (AVAILABLE) учитывает не только те объекты, которые имеет при себе герой, но и те, к которым он имеет доступ в данной локации, хотя в его инвентарь они и не входят (например дерево, автомобиль и т.п.). Это только гипотеза, требующая проверки, и мы на ней не настаиваем.
HIGH PRIORITY:
1. IF (RES? (6)) SET (6) TEXT STRE (111) 3 CSET 1 END
Если 6 флаг выключен (игра только началась), включить флаг 6, отключить появление картинок, количество силы установить 111, занести число 3 в счетчик № 1.
2. IF (RES ?(1) AND RES? (2)) DECR (1) END
Если выключен флаг № 1 (он сигнализирует о том, что в комнате нет света) и выключен флаг N2 (фонарь не включен), то уменьшить содержимое счетчика № 1 на единицу.
3. IF (1EQU?1 AND RES? (1) AND RES? (2)) MESS (20) END
Если счетчик № 1 равен 1, а в комнате по-прежнему нет света, и не горит фонарь, то надо выдать предупредительное сообщение номер 20.
4. IF (0 EQU?1) MESS (21) END
В п.1 мы установили в счетчик число 3. Далее Вы, например, пробыли в темной комнате 3 хода (счетчик обнуляется) и Вы погибаете от рук какого-нибудь монстра.
Манипуляциями со счетчиком можно сделать эффект реального времени. Например, у фонарика, во включенном состоянии, батареек хватит только на 100 ходов (сядут батарейки). Может чередовать день и ночь и т.д. и т.п.
5. IF (AT (1) AND CARR (4)) MESS (9) EXIT END
Если № комнаты = 1 и Вы имеете при себе объект № 4, тогда выдать сообщение N и выйти из игры (без вопроса Y/N).
LOCAL:
1. IF (VERB (3) AND SET? (5)) GOTO (6) WAIT END
Если глагол NORTH (3) и дверь открыта, тогда идти в комнату номер 6.
При создании карты, в ROOM DESCRIPTION, не надо указывать направление, в котором находится дверь. Надеюсь, что этого вполне достаточно, чтобы начать самостоятельный разбор этой программы. Добавлю, в заключение, что здесь необходимо еще очень и очень много экспериментировать, менять команды местами и смотреть, что из этого получается. К сожалению, все возможности программы пока установить не удалось и потому мы будем с нетерпением ожидать сообщений от других первопроходцев.