nzeemin, в шапку темы "ПРО ИГРЫ" ко всем прежним проектам добавил прямую ссылку на этот JS_Сталкер.
Вид для печати
nzeemin, в шапку темы "ПРО ИГРЫ" ко всем прежним проектам добавил прямую ссылку на этот JS_Сталкер.
Выложил STALK HTML/JS версии 0.7 - https://nzeemin.github.io/stalk/stalk.html
- Поправлена опечатка F -> t в скрипте
- Сделал вверху переключатель Подсказки вкл./выкл
- Попытался решить проблему со стилями в iOS Safari, сделал только хуже - теперь совсем не грузится
FF52/XP, FF54/Server2008, 360Chrome 12/Win7
Цитата:
TypeError: termarr.join(...).replaceAll is not a function
TypeError: "x" is not a function
The JavaScript exception "is not a function" occurs when there was an attempt to call a value from a function, but the value is not actually a function.
Цитата:
function termUpdate() {
termctl.innerText = termarr.join('\r\n').replaceAll('\x7f','\u25ae');
Прошел одно подземелье целиком на телефоне. Неудобно, но вполне возможно, когда хорошо знаешь, к чему стремиться. В чем-то это даже хорошо, потому что располагает к тому, чтобы более обдуманно жать на кнопки.
Как рогалик игра очень простая. Тут настоящее западло только одно -- комариная плешь, но и из нее иногда можно выбраться. Попался призрак, но он глупый. Кажется ужас-ужас, но он множится только вправо, так что даже с призраком в рюкзаке спокойно можно ходить и новые вещи собирать. Звери впечатляют слабо и вообще системы многоходового махача с учетом параметров тут как таковой нет. Иногда кажется слишком легко.
Впечатление пожалуй как от игры на картонке с фишками и кубиками. Куча картинок, которые впечатляют, но к сути не имеют никакого отношения. Большинство ограничений не жесткие, а просто по уговору.
Выложил STALK HTML/JS версии 0.8 - https://nzeemin.github.io/stalk/stalk.html
- Литерал '\x7f' заменил на юникодный литерал '\u007f' - надеюсь, поможет в проблеме со старыми браузерами
- Изменил текст кнопки [Подсказки вкл.] -> [Подсказки +]
CodeMaster, проверьте на своих браузерах пожалуйста.
Думаю добавить ещё лёгкий эффект свечения, так чтобы несильно размывало:
https://pic.maxiol.com/thumbs2/16201...review5glo.png
nzeemin, я когда Зел.Гост. набивал, что бы заведомо избежать возможности (и забыть об этом)
слития описаний и сообщений в нижней части экрана, все сообщения писал так ('Текст сообщения ') - то есть всегда
последний символ пробел ) Кстати говоря, я там немного "хитрил", у меня же две строки под уровнем свободны
(или даже 3-и, не помню уже), так вот, я размещал сообщения в зависимости от типа - возгласы и вопросы на одной строке, описания предметов на другой... но это я так, просто вот так надпись нарисовалась в процессе игры...
https://i.ibb.co/hXy3Z0N/Print05-N-cr.png
Да уже по барабану до таких мелочей.
Тут все кто хотел уже "под себя" свою версию сделал.
В общем по веб-версии это уже всё, дальше если только баги ещё найдёте - поправлю.
Всем вам спасибо огромное за помощь!
включи фонарь! доспехи одень и оружие приготовь...
перемести батареи в рюкзаке на 1-ю позицию ... вперёд, всё там норм. с отображением...
- - - Добавлено - - -
сейчас описание игры от Олега гораздо забавнее читать ))
- - - Добавлено - - -Цитата:
STALK.SAV
Бродяга. Что делать - неизвестно. Требуется терминал совместимый с VT52.
замуровали чертяги, надо было "груду камней" / стенку подбирать )))
https://i.ibb.co/25m2F2x/Print05pusto-cr.png
попробуй с фонарём - будет виден всегда, без фонаря временами будет и должен исчезать...
персонаж (как и автор оригинала) ничего никому не должен, Никита делал код с оригинала -
поэтому не надо "несбыточных - должен!", игра максимально близка к оригинальной версии,
если у вас с этим проблемы - пишите свою версию, правьте исходник, Никита всё сделал для
энтузиастов.
это не про фонарь, уровни изначально могут по разному отображаться...
специальную версию браузера написать??? )))
Так! Моё предложение в силе ! Никиту надо беречь / поддержать (!) после таких "хотелок-комментов" )))
- - - Добавлено - - -
для меня это тру - потому что в оригинале было так, и соответственно я в неё и играл (много много раз), чем дальше от оригинала - тем меньше атмосферы, атмосферность в данном случае - ощущение, что ты сидишь за той самой ДВК и играешь в тот самый Сталкер, что очевидно...
Да, что вас заклинило на этот фонарь :). Говорю же - весь этаж освещен и персонаж исчезает.
Я не говорю, что должен автор, Никита и т.д. Почему вы передергиваете?
Я нашел ошибку, сообщил, а его дело исправлять или нет.
С вами общаюсь лишь потому, что вы не поймете суть проблемы и вводите в заблуждение.
Кстати, если всё ещё нужен быстрый генератор псевдослучайных чисел, то вот:
На diehard пока не гонял, но на глаз -- распределение хорошее.Код:;
; Generates a next 16-bit pseudorandom number
; generator period is 0xfffe0000 (4294836224)
;
; Inputs:
; None
; Outputs:
; r0 - next pseudorandom number
;
; Clobbers:
; None
;
; Author: Alexander "Sandro" Tishin
;
trandw: mov @#rseed1, r0
add r0, r0
bhi 1$
add #39., r0
1$: mov r0, @#rseed1
add @#rseed2, r0
mov r0, @#rseed2
rts r7
; Current PRNG state
rseed1: .word 0
rseed2: .word 0
Если кому то всё ещё интересно сыграть в оригинал прямо в браузере,
идём по ссылке > http://hobot.pdp-11.ru/EMULATORS/WUK...mbol.dsk&run=1
далее в меню выбираем игру STALK - В ПОИСКАХ "ЗОЛОТОГО ШАРА",
наслаждаемся оригинальной версией (одной из).
https://pic.maxiol.com/thumbs2/16206...1.wukstalk.png
ссылка на тему >
https://zx-pk.ru/threads/32383-ukncb...s-on-line.html
Спасибо!
:redface:
Думаю что браузеры под Windows XP тут идут боком - там эмулятор на WebAssembly.
Вот этот онлайн-эмулятор вероятно будет работать, он на чистом JavaScript:
http://chessforeva.neocities.org/UKNC/uknc.htm
@nzeemin, в продолжение этого запроса, наткнулся на дискетах в архиве на такую утилитку
может быть тебе будет интересно её пощупать / изучить - я не знаю...Код:LD7>RU MZ1:DISOBJ
*
DISOBJ V03 , BDM VERSION , sssr ,mwtu m-9
*
Format : DSK : RT-11
Size : 800 Kb
Volume ID: TGame
Owner : hobot
File Blocks Date Bytes
---------- ------ ----------- ----------
DISOBJ.SAV 29 09-Jan-1987 14'848
DECOBJ.SAV 44 31-Aug-2011 22'528
< UNUSED > 1513 774'656
---------- ------ ----------- ----------
2 Files, 73 Blocks
1513 Free blocks
пока кинул сюда > . <
Здесь вторая часть процедуры (отрисовка экрана) находится за ELSE, в начале кода ELSE стоит метка и на неё происходит переход из той части, которая исполняется в блоке THEN. Получается как-то так, и без ассемблерных вставок:
Процедура L03362
Код:{ Параметр: 'J' - обновить экран; '.' - вверх; '5' - вниз }
procedure L03362(A:char);
label 1;
begin
V33156:=CHR(1);
if A <> 'J' then begin {L03370}
if V11070^ = '%' then begin { Мы стоим на лестнице? }
for VAR16:=1 TO 4 do begin
V33122[VAR16]:=' ';
end;
if (A = '.') and (VAR4 <> 0) then begin {L03510}
VAR4:=VAR4-1; { Этаж вниз } {L03560}
IND[2]:=IND[2]-2; { Энергия минус 2 }
IND[1]:=IND[1]+1;
goto 1;
end else if VAR4 <> 8 then begin {L03610}
VAR4:=VAR4+1;
IND[1]:=IND[1]+3;
goto 1;
end;
begin
V11070:=@F[VAR4,VAR12,VAR14]; {L03644}
V33074:=@F2[VAR4,VAR12,VAR14]; {L03716}
V11072:=@F[VAR4,VAR6,VAR10]; {L04000}
V33076:=@F2[VAR4,VAR6,VAR10]; {L04052}
end;
end else begin { не на лестнице }
WRITELN(' Без лестницы?'); {L04140}
end;
end;
else begin
1:
WRITE(CHR(33B),CHR(110B),CHR(33B)); {L04172}
WRITE('J Подземелье ');
WRITE(DUNGEON); { Номер подземелья }
WRITE('
Рейтинг
Энергия
Оружие
Защита
В банке
Вредность
Рюкзак:');
for VAR16:=1 to 5 do begin { выводим значения индикаторов }
CURSORTO(VAR16,37);
WRITE(IND[VAR16]:3);
WRITE(' ');
end;
CURSORTO(7,37);
WRITE(VAR30:3); { Вредность }
CURSORTO(10,33);
for VAR16:=1 to 6 do begin { выводим содержимое рюкзака }
WRITE(RUKSAK[VAR16]:2);
end;
CURSORTO(0,0);
for VAR16:=1 to 16 do begin { выводим текущее поле }
for VAR20:=1 to 32 do begin
if F2[VAR4,VAR16,VAR20] & 100B <> 0 then begin
CURSORTO(VAR16,VAR20);
WRITE(F[VAR4,VAR16,VAR20]);
end;
end;
end;
CLEARMSG;
end;
end;
[свернуть]
Alex_K, спасибо. вы очень упорны.
Я поправил исходник - https://github.com/nzeemin/uknc-vari...CAL/STALK1.PAS
А после трансляции всё сошлось? Я просто получил такой код на своих примерах, а ваш не транслировал.
- - - Добавлено - - -
Не за что. Просто интересно посмотреть как OMSI Pascal транслирует в Макро. Довольно много интересного можно узнать. В OMSI Pascal версии 1.1 ($VER=59.) есть ошибка при выходе из цикла FOR по GOTO, в версии 1.2 ($VER=12.) они её исправили. Ну и много всякого другого.
Ещё переменная V33156 наверное типа boolean. Да и сравнения if VAR <> false можно заменить на if VAR.
Кроме различных версий STALK.SAV существует версия под именем PIKNIK.SAV. Данная версия отличается от STALK различными надписями, но и тем, что она оттранслирована OMSI Pascal 1.2 с использованием библиотеки PASFIS версии 1.2G. Полный дистрибутив этой версии Паскаля я нашёл у hobot-а в этом сообщении. Быстренько перегнал быстрым дизассемблером SavDisasm от nzeemin. Текст на ассемблере для компиляции я не делал, просто повставлял свои комментарии в файл disasm.txt. В итоге оказалось, что в Паскалевских исходниках PIKNIK мало отличается от STALK, различия почти только в выводимых надписях, ну и в одном месте вместо WRITELN используется WRITE.
Паскалевский текст я переформатировал, люблю когда end стоит на одной колонке с begin. Убрал лишние begin/end, но возможно не все. Склеил несколько идущих подряд WRITE/WRITELN в одну команду. Расставил после каждого оператора комментарии с их адресами в исполнимом модуле.
Нашёл в этом дистрибутиве в библиотеке SYSLIB.OBJ функцию RAN, её и использую. В строчках оставил управляющие символы переключения алфавита, хотя вероятно их вставили вручную позже, игра писалась под КОИ-7 Н2, но такого исполнимого модуля я не нашёл.
Сама игра скомпилирована с использованием библиотеки PASFIS.OBJ, для которой нужна аппаратная поддержка FIS, эмулятора FIS в ней нет, поэтому на ДВК с процессорами 1801ВМ1 и 1801ВМ3 игра неработоспособна. С эмулятором EM.SYS не проверял.
Так что качаем дистрибутив PascalD, распаковываем, туда же кладём PIKNI2.PAS из вложения. Запускаем эмулятор RT-11.
1. Транслируем игру Паскалем следующими командами:
.RU PASSIM
*PIKNI2,PIKNI2=PIKNI2
Результат:
ERRORS DETECTED: 0
FREE MEMORY: 8813 WORDS
2. Полученный файл на MACRO-11 надо прогнать через оптимизатор:
.RU PASIMP
*PIKNI1=PIKNI2
Результат:
IMPROVEMENT 484 WORDS 4.7%
3. Транслируем MACRO-11:
.MACRO/LIST:PIKNI1 PIKNI1
4. Собираем исполнимый модуль:
.LINK/MAP:PIKNI1 PIKNI1,PASFIS,SYSLIB
5. Сверяем с оригиналом:
.DIFF/BIN/OUT:PIKNIK PIKNI1.SAV PIKNIK.SAV
Результат:
?BINCOM-I-No differences found
Вот и всё. Ещё раз ОГРОМНОЕ СПАСИБО nzeemin за сделанные исходники STALK, без них мне пришлось бы очень тяжело.
Удалось разузнать немного о происхождении игры.
УЛПИ - Ульяновский политехнический институт, ныне УлГТУЦитата:
(С)УЛЬЯНОВСК УЛПИ "ГОЛОГРАФИЯ"
"Голография" - лаборатория в этом институте.
Благодаря товарищу, который работает в данном институте, мне удалось узнать контакт бывшего работника этой лаборатории. К сожалению из меня парламентёр неважный, да и про игру я знаю довольно мало... Так что предлагаю выбрать на форуме человека, который позвонит этому бывшему работнику и узнает подробнее. Все мы находимся в равных условиях, лично никто из заинтересованных в Ульяновске вроде бы не присутствует, из контактов имеется только телефон.
Телефон я дам только одному человеку, чтобы особо не доставали бедного пенсионера. :)
Мне на почту на Boosty пришло письмо -- один из моих подписчиков нашёл автора игры.
Игру написал Сергей Вершинин.
Сергей передал следующий текст и разрешил опубликовать его здесь на форуме, публикую его без изменений:
Цитата:
Вот уж не думал, что кто-то сейчас помнит про "Vagabondo". Посмотрел странички про игру - есть признаки, показывающие, что это в самом деле она. Правда, у меня она точно не называлась Сталкер или Зона. На ДВК в оригинале её файл назывался просто VV - чтобы не набирать длинное название. А в program name стояло название на Эсперанто (Vagabondo = бродяга - по названию прототипа).При идею создания: я прочитал в журнале Scientific American о программе, которая играла в игру Rogue. Сама по себе Rogue была эпохальной игрой, но у нас её не было (до того я про неё даже не слышал). Тем более - на ДВК. В статье про саму игру говорилось мало, но мне очень захотелось в неё поиграть.
Игр у нас в то время был буквально десяток. Единственная игра, которую можно назвать приключенческой, была текстовой, с фиксированным сценарием. Она прямо так и называлась - Adventure. Тоже классика.
Вот я и начал писать игру сам. Заодно изучая Паскаль, ибо от института у меня сформировалось крайне смутное представление об этом языке - без какой-либо практики. Поскольку про оригинал мало что было известно, я просто наполнял игру тем, что мне нравилось.
Наверное, больше всего привлекла идея случайного мира - который не задан автором, а генерируется в начале игры. У меня он развёртывался из одного числа, которое получалось из числа, вводимого игроком, генератора случайных чисел и момента нажатия клавиши Ввод. Хмм, перечитал написанное - прямо-таки "вначале было слово", и слово было шестнадцать бит.
Вообще-то, я не особо задумывался над конкретными деталями, и многое явно можно было сделать лучше, но тогда даже сравнивать было не с чем. Делал для себя, не рассчитывая, что это ещё кого-то заинтересует. В оригинале игрок спускается в подземелье за сокровищами, но я решил добавить туда элементы "Пикника на обочине". Поэтому там и золотой шар, и ведьмин студень, и прочее. Отдельные комнаты, соединённые коридорами, я заменил на уровни одинакового размера, разделённые стенами - так ресурсы использовались эффективнее, а мир стал как-то более насыщенным. Содержание тоже появлялось естественно. Персонажу надо есть - значит, нужна еда. Мир волшебный - значит, нужны волшебные предметы. Символов в коде больше, чем можно нагрузить смыслом - значит, сделаем фоновые предметы, типа надписи "Здесь-то мы его и съели".
Был вариант, в котором после нахождения золотого шара и выхода на поверхность можно было пойти в подземелье заново. В этом случае всех предметов там было в два раза больше. Потом в три, и так далее. Ещё можно было при компиляции отключить проверку границ массивов, тогда исполняемый файл получался заметно меньше, но можно было залететь в страшное место, откуда не было выхода. Оно называлось "Array bounds error". Например, "зверь" сшибал всё на своём пути, и, если бежать от него вдоль стены, то он делал в стене дырки. Через такую дырку можно было пройти на соседний уровень не по лестнице, а прямо через стены, и какое-то время игра даже продолжала работать. А дальше уже был выход из области данных в область кода - "предметы" там были навалены кучей, но взаимодействие с ними портило уже сам код игры, и она быстро вылетала.
Позже, когда я аспирантом вёл занятия в университете, разговорились с лаборантами, и их настолько заинтересовала игра, что они были готовы набрать её вручную для УКНЦ. Кажется, проблема была в том, что на ДВК был 8-дюймовый дисковод, а на УКНЦ - 5-дюймовый, но факт в том, что они набрали всё целиком по распечатке. Причём, почему-то запустить её нам так и не удалось. На этом вроде бы, всё и закончилось.
Когда я начал работать в институте повышения квалификации работников образования, я с удивлением обнаружил, что моё "творение" разошлось по школам в пачке популярных игр.
Если эта информация кому-нибудь интересна - буду рад. Мне было приятно вспомнить.
С уважением, Сергей Вершинин
Автор из Ульяновска, работал в той самой лаборатории "Голография"?