это вы не понимаете, что проблемы нет )
отображение этажа не влияет на отображение персонажа, а режим фонаря вкл/выкл влияет.
Вид для печати
Кстати, если всё ещё нужен быстрый генератор псевдослучайных чисел, то вот:
На 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