Кстати, если всё ещё нужен быстрый генератор псевдослучайных чисел, то вот:
На 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
Oleg N. Cher (08.05.2021)
Если кому то всё ещё интересно сыграть в оригинал прямо в браузере,
идём по ссылке > http://hobot.pdp-11.ru/EMULATORS/WUK...mbol.dsk&run=1
далее в меню выбираем игру STALK - В ПОИСКАХ "ЗОЛОТОГО ШАРА",
наслаждаемся оригинальной версией (одной из).
ссылка на тему >
https://zx-pk.ru/threads/32383-ukncb...s-on-line.html
Спасибо!
Последний раз редактировалось hobot; 10.05.2021 в 04:14.
Думаю что браузеры под Windows XP тут идут боком - там эмулятор на WebAssembly.
Вот этот онлайн-эмулятор вероятно будет работать, он на чистом JavaScript:
http://chessforeva.neocities.org/UKNC/uknc.htm
hobot (10.05.2021)
@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
пока кинул сюда > . <
Последний раз редактировалось hobot; 15.05.2021 в 01:53.
Alex_K (15.05.2021)
Здесь вторая часть процедуры (отрисовка экрана) находится за 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;[свернуть]
Hunta (22.05.2021), nzeemin (22.05.2021), Oleg N. Cher (22.05.2021)
Alex_K, спасибо. вы очень упорны.
Я поправил исходник - https://github.com/nzeemin/uknc-vari...CAL/STALK1.PAS
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)