URL: https://www.opennet.dev/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 117134
[ Назад ]

Исходное сообщение
"Опубликован код старых игр Infocom, включая  Zork"

Отправлено opennews , 16-Апр-19 22:18 
Проект Historical Source опубликовал (https://github.com/historicalsource?tab=repositories) исходные тексты игровых приложений, выпущенный компанией Infocom (https://en.wikipedia.org/wiki/Infocom), просуществовавшей с 1979 по 1989 год и специализировавшейся на создании текстовых квестов. Всего опубликованы исходные тексты 45 игр, включая  Zork Zero (https://github.com/historicalsource/zorkzero), Zork I (https://github.com/historicalsource/zork1), Zork II (https://github.com/historicalsource/zork2), Zork III (https://github.com/historicalsource/zork3), Arthur (https://github.com/historicalsource/arthur),  Sh&#... (https://github.com/historicalsource/shogun), Sherlock (https://github.com/historicalsource/sherlock), Witness (https://github.com/historicalsource/witness), Wishbringer (https://github.com/historicalsource/wishbringer), Trinity (https://github.com/historicalsource/trinity) и The Hitchhiker's Guide to the Galaxy (https://github.com/historicalsource/hitchhikersguide).


Опубликованный код отражает срез состояния системы разработки Infocom на момент закрытия данной компании. Код предназначен для изучения методов разработки старых игр, обсуждения и исследований в области истории компьютерной техники (лицензия на код не является открытой). Разработка игр велась на мэйнфрейме c ОС TOPS20 (https://en.wikipedia.org/wiki/TOPS-20), для сборки применялся компилятор ZILCH (https://en.wikipedia.org/wiki/Z-machine).


URL: https://news.ycombinator.com/item?id=19672436
Новость: https://www.opennet.dev/opennews/art.shtml?num=50525


Содержание

Сообщения в этом обсуждении
"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Аноним , 16-Апр-19 22:18 
Теперь скоро сообщество выпустит порты этих игр на GNU/Linux, Vulkan и Wayland - это лишь вопрос времени.

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Аноним , 16-Апр-19 22:21 
Вначале консоль, работающую поверх Vulkan и Wayland, придётся допилить. Игры то текстовые.

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Анонимкаааа , 17-Апр-19 08:27 
> Вначале консоль, работающую поверх Vulkan и Wayland, придётся допилить. Игры то текстовые.

alacritty


"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Аноня , 17-Апр-19 19:10 
Плюсики теперь норм выглядят.

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Аноним , 17-Апр-19 10:30 
На кой хр.н там этот Vulkan, игры-то текстовые. Оно и поверх Xorg нормально побежит.

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Аноним , 16-Апр-19 22:40 
Не выпустит. Портирование на современные платформы не является "исследованием в области истории компьютерной техники", а это единственное, что они разрешили делать с этим кодом.

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено НяшМяш , 16-Апр-19 23:21 
Почему это вдруг? Как раз портирование на какой-нибудь вулкан под холодильник - и есть исследование. А потом попытаться это продать - вот это уже запрещено.

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Холодильник , 16-Апр-19 23:45 
Портировали тыщу лет назад.

https://gitlab.com/DavidGriffith/frotz


"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Растишка , 17-Апр-19 16:03 
Уже и на Расте запилили. С голосовым управлением и поддержкой WASM прямо в браузере.

https://sterlingdemille.com/encrusted/


"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Аноним , 16-Апр-19 22:24 
Ура, товарищи!


p.s. новый дизайн - отстой.


"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Kuromi , 16-Апр-19 22:47 
Ну вот Zork (кажется весь) доступен на GOG, интересно, есть ли шансы получить нормальный обновленный билд под современные системы?

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Kuromi , 16-Апр-19 22:52 
Хмм, посмотрев поближе на то, что выложено в Гитхабе напрашивается вывод, что нет.

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Ordu , 17-Апр-19 00:37 
Да ладно, всё не так плохо. Там внутре lisp, только он вместо () иногда использует <>. Всё что надо, это написать к нему read, а затем научить современный лисп работать с теми сорцами.

Например:

<DEFINE20 PSEUDO ("TUPLE" V)
    <MAPF ,PLTABLE
          <FUNCTION (OBJ)
           <COND (<N==? <LENGTH .OBJ> 3>
              <ERROR BAD-THING .OBJ PSEUDO>)>
           <MAPRET <COND (<NTH .OBJ 2>
                  <VOC <SPNAME <NTH .OBJ 2>> NOUN>)>
               <COND (<NTH .OBJ 1>
                  <VOC <SPNAME <NTH .OBJ 1>> ADJ>)>
               <NTH .OBJ 3>>>
              .V>>

Тут сложно сказать, что к чему -- макрос это объявляется или функция? если функция, то к чему , перед PLTABLE? И что значат точки -- это такой способ вызывать symbol-value? Но так или иначе, мне кажется, что если пару дней поломать голову над этими сорцами, то можно понять что к чему, и ещё за пару дней написать подходящий lisp, который это сможет прожевать. Потом, правда, можно отлаживать это всё месяц, но это другой вопрос.

А если вместо того, чтобы ломать голову над сорцами найти мануал к тому lisp'у, на котором всё это написано, то можно отлаживать не месяц, а за пару недель справится. Или даже быстрее -- сложно сказать. Главное писать на lisp'е, не переизобретая lisp. Не важно на каком -- common lisp, scheme, racket, elisp -- главное на lisp'е. Потому что если не на lisp'е, то придётся начать с написания lisp'а. То есть, в любом случае придётся начать с написания lisp'а, но написать lisp на lisp'е -- это как два пальца об асфальт, а вот на C написать лисп -- это уже хороший такой студенческий проект для постижения дзена.


"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Stax , 17-Апр-19 04:01 
> на C написать лисп -- это уже хороший такой студенческий проект для постижения дзена.

Ну это вы загнули. Лисп тем и отличается от языков со сложной грамматикой и хитростями, что его базовый интерпретатор написать несложно всегда, и вам не нужен для этого лисп. На C не то чтобы сильно сложнее (чуток заморочек с токенизацией и управлением памятью, но ничего особенно сложного там нет).
В качестве доказательства гуглится, например, это: https://carld.github.io/2017/06/20/lisp-in-less-than-200-lin...
Да, ограничено, но тем не менее. А если взять язык выше уровнем, типа питона то на нем вообще халява.

Между прочим, "напишите реализацию лиспа (либо пролога)" на каком-нибудь языке (а можно просто каждого из них на другом) это вполне стандартное задание в рамках курса, где учат лисп (напр. матлогика в университете). И никакого "постижения дзена", обычное задание.

PS а для ответа на вопрос о том, что тут объявляется, можно смотреть спецификацию языка MDL: https://en.wikipedia.org/wiki/MDL_(programming_language)


"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Ordu , 17-Апр-19 04:34 
>> на C написать лисп -- это уже хороший такой студенческий проект для постижения дзена.
> Ну это вы загнули. Лисп тем и отличается от языков со сложной
> грамматикой и хитростями, что его базовый интерпретатор написать несложно всегда, и
> вам не нужен для этого лисп. На C не то чтобы
> сильно сложнее (чуток заморочек с токенизацией и управлением памятью, но ничего
> особенно сложного там нет).
> В качестве доказательства гуглится, например, это: https://carld.github.io/2017/06/20/lisp-in-less-than-200-lin...
> Да, ограничено, но тем не менее.

Ну это *очень* ограничено. Во-первых, в глаза бросается, оно без сборки мусора, то есть заполняет память пока не упадёт с ООМ. А сборка мусора -- это значит выкидываем libc'овый malloc, расчехляем mmap и пишем свой аллокатор. Во-вторых, там нет очень многих вещей, которые для лиспа -- норма. Скажем целочисленных значений, массивов, хештабличек, компиляции/оптимизации -- оно ж убъётся что либо делать в том формате, в котором есть, и например к любой локальной переменной добираться через поиск этой локальной переменной по имени списке. Это может и мелочи, но этих мелочей наберётся, и однобитного тега уже не хватит, придётся держать там один бит под сборщик мусора, пару бит под тег (на 64-битной платформе проще, там больше ненужных битов в указателе, можно хоть все встроенные типы закодировать тегом), и в этой паре одно из значений будет намёком на то, что объект содержит в себе ссылку на другой объект, который определяет тип этого объекта. Это может быть просто символ, скажем 'integer, или 'float, хотя под int, как правило, всё же выделяют специальное значение тега, и оставшиеся биты "указателя" используют как значение этого int'а, чтобы не выделять из кучи место под каждый int. Но тут встаёт вопрос о том, что хотелось бы в int'е иметь максимум битов свободными, и тут мы приходим к сложному кодированию для тега (мультибитному -- переменному числу бит на тег), чтобы int определялся бы одним битом, а остальные типы больше использовали бы. Аррргх... Это очень любопытно всё собрать воедино и заставить работать.

> А если взять язык выше уровнем, типа питона то на нем вообще халява.

Ну да, я согласен, я как-то забыл случайно про то, что помимо lisp'а бывают и другие языки со сборкой мусора и динамической типизацией, которые могут снять все основные замороки и свести таким образом написание lisp'а, по-сути, к написанию парсера.


"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Stax , 17-Апр-19 08:43 
> Ну это *очень* ограничено. Во-первых, в глаза бросается, оно без сборки мусора,
> то есть заполняет память пока не упадёт с ООМ. А сборка
> мусора -- это значит выкидываем libc'овый malloc, расчехляем mmap и пишем
> свой аллокатор. Во-вторых, там нет очень многих вещей, которые для лиспа
> -- норма. Скажем целочисленных значений, массивов, хештабличек, компиляции/оптимизации
> -- оно ж убъётся что либо делать в том формате, в
> котором есть, и например к любой локальной переменной добираться через поиск

Это так, но... если с практической точки зрения в этой задаче - сколько там памяти может захотеть программа 80 года, работавшая на 8-битных железках с 64 КБ памяти? Мусор можно не собирать, а хэштаблицы и оптимизации для кода, который мог выполняться на 1 МГц процессоре?


"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Ordu , 17-Апр-19 16:19 
> сколько там памяти может захотеть программа 80 года, работавшая на 8-битных железках с 64 КБ памяти?

Сложно сказать. Тут можно только приблизительно прикинуть. Допустим вызовы функций в среднем имеют один аргумент. Допустим что это приводит к выделению одного cons из двух указателей, то есть 4 байта. Это значит, что 256 выполненых вызовов функций отожрут 1Kb под мусор. Имея гигабайты памяти можно перетерпеть.

> Мусор можно не собирать, а хэштаблицы и оптимизации для кода, который мог выполняться на 1 МГц процессоре?

Именно поэтому я и говорю, что надо писать на lisp'е. Рассуждения вида "если оно не тормозит, значит можно сделать тормознее" и приводят к тому, что сегодня тормозит всё. Если писать на lisp'е, ты получшь хэштаблички, оптимизирующую компиляцию в native код, сборку мусора и все прочие плюшки бесплатно, просто потому, что ты пишешь lisp на lisp'е, то есть компилируешь один lisp в другой lisp. Отказываться от бесплатных плюшек и писать на C, просто потому что можно сделать тормознее?

С другой стороны, что любопытно, современный lisp (типа sbcl, например) отожрёт больше памяти чем весь этот zork без сборки мусора. Там речь пойдёт про десятки мегабайт потребляемой памяти. Я думаю, меньше не выйдет. И вот это реально делает кейс интересным. Провоцирующим когнитивный диссонанс.


"Опубликован код старых игр Infocom, включая  Zork"
Отправлено myhand , 17-Апр-19 10:59 
> в глаза бросается, оно без сборки мусора

Ну, для этого, в принципе, можно просто libgc взять.

> Скажем целочисленных значений

gmp

> массивов, хештабличек

Массивов не было в scheme ...  очень долго.  

> оно ж убъётся что либо делать в том формате, в котором есть, и например к любой локальной переменной добираться через поиск этой локальной переменной по имени списке.

В конце 80-х так и делали, посмотрите на какой-нибудь siod 1.x.  Тоже сейчас можно заменить, используя какую-нибудь готовую библиотеку.

Короче, действительно ничего сложного - в заявленный объем вполне могла влезть реализация scheme с define/set!, if, quote, lambda и даже макросами.


"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Ordu , 17-Апр-19 13:38 
> Массивов не было в scheme ...  очень долго.
> В конце 80-х так и делали, посмотрите на какой-нибудь siod 1.x.  
> Тоже сейчас можно заменить, используя какую-нибудь готовую библиотеку.

И мне будут рассказывать, что Electron -- это бездарное разбазаривание ресурсов...


"Опубликован код старых игр Infocom, включая  Zork"
Отправлено myhand , 17-Апр-19 14:02 
Это можно записывать как признание в том, что electron - студенческая поделка?

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Ordu , 17-Апр-19 16:26 
"Electron -- это студенческая поделка" -- это заявление, которое имеет очень косвенное отношение к тому, чтобы отразить реальное положение дел. Это заявление преследующее политическую цель, опорочить в глазах других социальное явление, которое кому-то там не по душе. Это заявление, чья цель -- навязать другим свои личные предпочтения. Предлагать мне согласиться с заявлением сделанным в политических целях -- совершенно бесполезно. С политическими заявлениями вам лучше в госдуму, туда в это сборище неудачников, вышвырнутых из уважаемых профессий за профнепригодность.

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено myhand , 17-Апр-19 17:24 
> Это заявление преследующее политическую цель

Это была шутка.

> это сборище неудачников, вышвырнутых из уважаемых профессий за профнепригодность.

Чтоб я так жил, как эти неудачники.


"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Ordu , 17-Апр-19 18:10 
>> Это заявление преследующее политическую цель
> Это была шутка.

Если это была шутка, это не значит, что это была не политика. Я бы сказал наоборот, что это скорее свидетельство в пользу политичности заявления, нежели против неё.

https://lesswrong.ru/w/%D0%A4%D0%B0%...

>> это сборище неудачников, вышвырнутых из уважаемых профессий за профнепригодность.
> Чтоб я так жил, как эти неудачники.

Неужели у тебя в жизни всё так плохо? Любимая работа, любимая женщина, план как захватить мир и работа над ним -- неужели у тебя нет всего этого? А если есть, то зачем тебе жизнь политика, сводящаяся к тому, чтобы лизать задницу нужным людям, избегать бесполезно ссориться с ненужными людьми, и демонстративно воевать с теми, с кем выгодно воевать? Зачем тебе нужна жизнь человека, который продал душу PR'у и теперь шагу ступить не может самостоятельно?


"Опубликован код старых игр Infocom, включая  Zork"
Отправлено myhand , 17-Апр-19 18:24 
> Неужели у тебя в жизни всё так плохо? Любимая работа, любимая женщина,
> план как захватить мир и работа над ним -- неужели у
> тебя нет всего этого?

У меня есть еще нелюбимая работа, чтобы обеспечивать весь этот сабж и не сдохнуть при этом с голоду.

Впрочем, хватит оффтопика.  Табличку сарказм я все-равно дома забыл.


"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Аноним , 18-Апр-19 01:21 
>А сборка мусора -- это значит выкидываем libc'овый malloc, расчехляем mmap и пишем свой аллокатор.

О как, а мужики-то и не знали, что делать GC-кучи на malloc оказывается нельзя


"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Ordu , 18-Апр-19 02:02 
>>А сборка мусора -- это значит выкидываем libc'овый malloc, расчехляем mmap и пишем свой аллокатор.
> О как, а мужики-то и не знали, что делать GC-кучи на malloc
> оказывается нельзя

Расскажи им обязательно, что glibc'овая куча даст им лишь ненужный оверхед. В качестве бесплатного бонуса mmap'а они могут получить возможность контролировать раскладку памяти и выдерживать во всех указателях часть битов константными, а это значит их можно использовать под что-то ещё.

И ещё скажи им, что харе пиво бухать в рекламе, вместо самообразования, тогда реже придётся сталкиваться с ситуаций "а мы не знали".


"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Урри , 17-Апр-19 08:20 
10 правило гринспена (есть на вики):

Любая достаточно сложная программа на Си или Фортране содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Common Lisp.

--


"Опубликован код старых игр Infocom, включая  Zork"
Отправлено CZ , 17-Апр-19 23:41 
В том числе и сам COMMON LISP.

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено VINRARUS , 16-Апр-19 23:09 
Ждьом появления в Steam со скидкой...

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено saahriktu , 16-Апр-19 23:59 
ftp://ftp.ifarchive.org/

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Аноним , 17-Апр-19 00:14 
> лицензия на код не является открытой

Ну народ…


"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Tifereth , 17-Апр-19 07:30 
На ifarchive.org и его зеркалах туча реализаций в т.ч. инфокомовских игр.

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Урри , 17-Апр-19 08:23 
Какая-то феноменальная жадность - код, которому от 40 до 50 лет и который, по сути, является давно протухшим никому не нужным говном мамонта, все равно прятать за проприетарной лицензией.

Я этого не могу понять никак.


"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Аноним , 17-Апр-19 10:14 
>The source code was contributed anonymously

можно предположить, что до копирайтодержателей достучаться - задача для частного лица невыполнимая. При этом один из них может оказаться "феноменально жадным" и аннулировать согласия, полученные от всех остальных.


"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Попугай Кеша , 17-Апр-19 10:18 
Студентам за зачет ) Быстро конвертируют на благословенный Rust/Go

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Аноним , 17-Апр-19 11:03 
Фу, Кеша, и ты туда же. Я о тебе лучше думал.

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Попугай Кеша , 17-Апр-19 17:20 
Дружище, это был сарказм ) Я не туда же! Ни в коем случае! ;)

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Адекват , 17-Апр-19 10:20 
а текстурки как всегда зажмут.

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Аноним , 17-Апр-19 11:13 
Какие там ваще текстурки, почитай новость внимательнее, г-н Неадекват.

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Аноним84701 , 17-Апр-19 11:54 
> а текстурки как всегда зажмут.

В смысле – буковки будут в виде голой сетки каркаса?


______     ______     ______     __  __        __
/\___  \   /\  __ \   /\  == \   /\ \/ /       /\ \
\/_/  /__  \ \ \/\ \  \ \  __<   \ \  _"-.     \ \ \
  /\_____\  \ \_____\  \ \_\ \_\  \ \_\ \_\     \ \_\
  \/_____/   \/_____/   \/_/ /_/   \/_/\/_/      \/_/

0_o

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Аноним , 17-Апр-19 10:26 
> компанией Infocom, просуществовавшей с 1979 по 1989 год

Return to Zork
Publisher: Infocom
Release: September 15, 1993

Поясните


"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Аноним , 17-Апр-19 10:29 
> Return to Zork

Хорошая была игра. У меня фирменный диск есть.


"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Ваня Бевзюк сетевик , 17-Апр-19 13:22 
вики пояснит

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Аноним , 19-Апр-19 16:18 
В 1986 году компания была скуплена, в 1989 расформирована, от неё осталась только торговая марка.

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Канделябры , 17-Апр-19 12:19 
В опенсорсе всегда есть во что поиграть!

"Опубликован код старых игр Infocom, включая  Zork"
Отправлено Аноним , 17-Апр-19 15:17 
Не во что, а с чем.