Вход

Просмотр полной версии : Loxley



goodboy
21.02.2022, 18:00
игра про РобинГуда сделанная на бейсике
"This game is free but the developer accepts your support by letting you pay what you think is fair for the game"
https://worldxxisoft.itch.io/loxley

https://img.itch.zone/aW1hZ2UvMTQwMzA3My84MTk2OTk3LmpwZw==/347x500/9c9yV7.jpghttps://img.itch.zone/aW1hZ2UvMTQwMzA3My84MTk3MDAxLmpwZw==/347x500/XlfSHK.jpg

jerri
21.02.2022, 20:34
Как это работает? там бейсика блин почти нет.

goodboy
21.02.2022, 21:27
(vars) - (prog) с тобой не согласны.
текст программы ~22Kb, исполняемого кода в RAM нету

jerri
21.02.2022, 21:41
(vars) - (prog) с тобой не согласны.
текст программы ~22Kb, исполняемого кода в RAM нету

Чем смотрел?
мне какаято смотрелка вот такое кажет

0 REM LOXLEY© 2022 ARIEL RUIZ
2 BORDER K: CLS : LET F=CODE "A": GO TO .
4 GO TO .: POKE .,CODE "A"+F: IF F<K OR F>L+L THEN GO TO CODE ""
8 PRINT "VAL K/";C$;"[K/ RETURN [";: POKE .,L: POKE .,CODE "A"+F: IF F=L+L THEN PRINT "STR$ PLOT LET [R]<VAL MOVE LLIST LIN RND LLIST RND+ LET LLIST "
10 IF INKEY$<>"" THEN GO TO CODE ""
11 PRINT "[K/";B$;"[K/";A$;"[K/";: GO TO .: PRINT "[K/";C$;"[K/";B$;"[K/";: GO TO .: PRINT "[K/";D$;"[K/";C$;"[K/";: GO TO .: PRINT "[K/";E$;"[K/";D$;"[K/";: GO TO .: PRINT "[K/";F$;"[K/";E$;"[K/";: GO TO .: PRINT "[K/";G$;"[K/";F$;"[K/";: GO TO .: PRINT "[D]?[Q]";
100 PRINT "[C][[C]PP COPY  FORMAT FORMAT COPY [C]ASN ASN COPY [C]USR [C]RNDUSR ABS CIRCLE [C]B STEP [C]RNDUSR ABS CIRCLE [C] PAPER RNDUSR [C]W BORDER RNDUSR [C][K] NEXT RNDUSR [C]u TO RNDUSR [C]VAL CIRCLE RNDUSR [C] CAT DATA RNDUSR [C]";: PRINT "USR [C]RNDUSR ABS CIRCLE [C][E] AND [C]RNDUSR ABS CIRCLE [C][K] TO [C]RNDUSR ABS CIRCLE [C]W OPEN #[C]RNDUSR ABS CIRCLE [C]y CIRCLE [C]RNDUSR ABS CIRCLE [C][C]ABS BRIGHT [C]RNDUSR ABS CIRCLE [C][C]<= LPRINT [C]RNDUSR ABS CIRCLE [C][C] LIST NEW [C]RNDUSR ABS CIRCLE [C]";"USR [C]RNDUSR ABS CIRCLE [C][E] AND [C]RNDUSR ABS CIRCLE [C][K] TO [C]RNDUSR ABS CIRCLE [C]W OPEN #[C]RNDUSR ABS CIRCLE [C]y CIRCLE [C]RNDUSR ABS CIRCLE [C][C]ABS BRIGHT [C]RNDUSR ABS CIRCLE [C][C]<= LPRINT [C]RNDUSR ABS CIRCLE [C][C] LIST NEW [C]RNDUSR ABS CIRCLE [C]";"USR [C]RNDUSR ABS CIRCLE [C][E] AND [C]RNDUSR ABS CIRCLE [C][K] TO [C]RNDUSR ABS CIRCLE [C]W OPEN #[C]RNDUSR ABS CIRCLE [C]y CIRCLE [C]RNDUSR ABS CIRCLE [C][C]ABS BRIGHT [C]RNDUSR ABS CIRCLE [C][C]<= LPRINT [C]RNDUSR ABS CIRCLE [C][C] LIST NEW [C]RNDUSR ABS CIRCLE [C]";: PRINT "f[C]RNDUSR ABS CIRCLE [C]4s[C]RNDUSR ABS CIRCLE [C]W[C]RNDUSR ABS CIRCLE [C]ATTR GO SUB [C]RNDUSR ABS CIRCLE [C]NOT [C]RNDUSR ABS CIRCLE [C]? ERASE [C]RNDUSR ABS CIRCLE [C] MOVE LLIST [C]RNDUSR ABS CIRCLE [C]+ LET [C]RNDUSR ABS CIRCLE [C] LET [C]RNDUSR ABS CIRCLE [C]RND@[C]";: LET F=CODE "I": GO TO .: LET F=CODE "J": LET J=K: GO TO .: LET J=R: PRINT "[B] COPY IN C[D][";
140 FOR Y=K TO .: PRINT "[C]";: IF INKEY$="" THEN NEXT Y: GO TO CODE "d"
142 IF INKEY$=" " THEN PRINT "[D]?[Q]";: GO TO CODE ""
150 POKE .,K: POKE .,CODE "<": PRINT "[D]0[Q][A]";: CLS
151 LOAD "LOXLEY": GO TO CODE "[H]"
9900 PRINT "";: IF INKEY$<>"" THEN GO TO .
9905 POKE .,INT CODE INKEY$: PRINT "[K/";: IF NOT PEEK LK THEN GO TO .
9906 LET F=PEEK LK-CODE "1": RETURN
9911 PRINT "[K/";: FOR Y=K TO .: IF INKEY$<>"" THEN PRINT "[K/";: LET Y=.
9915 PRINT "[K/[C]";: NEXT Y: RETURN
9930 LET N=K: LET J=L+L
9940 PRINT "";: POKE .,J: POKE .,F: PRINT "[6/[K/";
9941 PRINT #CODE "";A$;: PRINT "[K/";: RETURN

goodboy
21.02.2022, 21:59
это явно не полный текст игры.
мне что-бы вставить бессмертие пришлось вспоминать в каких переменных хранится номер исполняемой строки

jerri
21.02.2022, 22:00
так это не текст игры, а только загрузчик

Круто. А как там анимация сделана ты понял?

goodboy
21.02.2022, 22:03
в интро картинки печатаются перемещением буфера принтера на экран.
постоянно меняется недокументированная переменная (23681)
это старший байт адреса буфера принтера
и там похоже ещё и теневой экран задействован

jerri
21.02.2022, 23:04
в интро картинки печатаются перемещением буфера принтера на экран.
постоянно меняется недокументированная переменная (23681)
это старший байт адреса буфера принтера

определенно читерство

goodboy
21.02.2022, 23:11
однако под категорию "никаких подпрограмм на ассемблере, кроме включенных в сам ZX Spectrum ROM" игра попадает.
а так, да. портирование текста на другую платформу практически невозможно

vlad-kras
23.02.2022, 17:41
мне что-бы вставить бессмертие пришлось вспоминать в каких переменных хранится номер исполняемой строки

А как бессмертие получить?

goodboy
23.02.2022, 18:20
для версии 1.1 40120,198

Destr
03.03.2022, 07:19
там бейсика блин почти нет ....... смотрелка вот такое кажет

что-бы вставить бессмертие пришлось вспоминать
Вы что платили за неё?
Или как скачать-то?

jerri
03.03.2022, 09:54
Вы что платили за неё?
Или как скачать-то?

Заходишь по ссылке
кликаешь скачать
в открывшемся окне кликаешь - No thanks, just take me to the downloads

играешь.

Misha Pertsovsky
20.03.2022, 01:00
в интро картинки печатаются перемещением буфера принтера на экран.
постоянно меняется недокументированная переменная (23681)
это старший байт адреса буфера принтера
и там похоже ещё и теневой экран задействован

Подскажи, пожалуйста, если ты видел полный текст программы -- как там осуществляется переключение с 128 бейсика на 48й? В описании сказано, что PC находится в пределах ПЗУ, значит прерывания переведены в 48й режим, но я не смог найти место в ПЗУ, позволяющее это сделать вызовом из бейсика.. (((

Поясню для тех, кому интересно почему это важно. Дело в том, что 128й бейсик (помимо того, что он гораздо медленней 48го) использует для LPRINT другой тип принтера (Epson, а не ZX), место буфера принтера при этом используется в других целях (туда направлен вектор IM2) и если его затереть бейсик будет рандомно глючить. Нюанс в том, что хотя местоположение буфера принтера можно перенести, из-за ошибки в ПЗУ бейсик всё равно затирает участок, где он находился стандартно (его местоположение берется из константы в ПЗУ) -- и важно это только при переключении из режима 128, т.к. в 48м там ненужное ему место и что там происходит неважно.

Программой в кодах так переключиться легко. И вручную тоже (просто выполнив usr 0 до загрузки программы), но вот из чистого бейсика с использованием только ПП ПЗУ у меня не вышло.. ((( Заранее спасибо!!!!!!!!!!!!! :-)

goodboy
20.03.2022, 11:15
прерывания (во время игры) вообще запрещены.
второй загружаемый блок затирает адрес возврата (в 128ой бейсик) на стеке и прога работает уже только в 48ом.
и там много ещё всяких нестандартных решений.
например перенаправив каналы и потоки через PRINT можно выдавать звуки

Misha Pertsovsky
21.03.2022, 21:53
прерывания (во время игры) вообще запрещены.
второй загружаемый блок затирает адрес возврата (в 128ой бейсик) на стеке и прога работает уже только в 48ом.
и там много ещё всяких нестандартных решений.
например перенаправив каналы и потоки через PRINT можно выдавать звуки

Красиво, ничего не скажешь. Спасибо! (вот только вроде как прерывания должны быть разрешены -- обработка клавиатуры вроде ж на прерываниях работает?)

Dart Alver
21.03.2022, 22:15
(вот только вроде как прерывания должны быть разрешены -- обработка клавиатуры вроде ж на прерываниях работает?)
В режиме по умолчанию - да. Но вызывая процедуры обработки можно и при закрытых прерываниях работать. Хотя как там у Loxley сделано не в курсе.

Oleg N. Cher
21.03.2022, 22:18
А вот интересно как в Loxley реализован вывод графики с наложением по маске? Это выглядит подозрительно не по-бейсиковски. Вообще всё рисуется шустро. Ну фоны я ещё могу понять - зашиты в PRINT с подменённым знакогенератором вперемешку с кодами цветов. И то не уверен...

goodboy
21.03.2022, 22:36
как в Loxley реализован вывод графики с наложением по маске?
вызываются подходящие куски кода из ROM
типа and (hl) : ret / xor (hl) : ret
вся игра сплошное читерство, но условие (для бейсик программы) - нет выполняемого кода в RAM - соблюдено.

Вообще всё рисуется шустро. Ну фоны я ещё могу понять
почти всё делается через имитацию вывода на принтер, а буфер принтера помещается в `теневой` экран