Просмотр полной версии : Loxley
игра про РобинГуда сделанная на бейсике
"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
Как это работает? там бейсика блин почти нет.
(vars) - (prog) с тобой не согласны.
текст программы ~22Kb, исполняемого кода в RAM нету
(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
это явно не полный текст игры.
мне что-бы вставить бессмертие пришлось вспоминать в каких переменных хранится номер исполняемой строки
так это не текст игры, а только загрузчик
Круто. А как там анимация сделана ты понял?
в интро картинки печатаются перемещением буфера принтера на экран.
постоянно меняется недокументированная переменная (23681)
это старший байт адреса буфера принтера
и там похоже ещё и теневой экран задействован
в интро картинки печатаются перемещением буфера принтера на экран.
постоянно меняется недокументированная переменная (23681)
это старший байт адреса буфера принтера
определенно читерство
однако под категорию "никаких подпрограмм на ассемблере, кроме включенных в сам ZX Spectrum ROM" игра попадает.
а так, да. портирование текста на другую платформу практически невозможно
vlad-kras
23.02.2022, 17:41
мне что-бы вставить бессмертие пришлось вспоминать в каких переменных хранится номер исполняемой строки
А как бессмертие получить?
там бейсика блин почти нет ....... смотрелка вот такое кажет
что-бы вставить бессмертие пришлось вспоминать
Вы что платили за неё?
Или как скачать-то?
Вы что платили за неё?
Или как скачать-то?
Заходишь по ссылке
кликаешь скачать
в открывшемся окне кликаешь - 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 до загрузки программы), но вот из чистого бейсика с использованием только ПП ПЗУ у меня не вышло.. ((( Заранее спасибо!!!!!!!!!!!!! :-)
прерывания (во время игры) вообще запрещены.
второй загружаемый блок затирает адрес возврата (в 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 с подменённым знакогенератором вперемешку с кодами цветов. И то не уверен...
как в Loxley реализован вывод графики с наложением по маске?
вызываются подходящие куски кода из ROM
типа and (hl) : ret / xor (hl) : ret
вся игра сплошное читерство, но условие (для бейсик программы) - нет выполняемого кода в RAM - соблюдено.
Вообще всё рисуется шустро. Ну фоны я ещё могу понять
почти всё делается через имитацию вывода на принтер, а буфер принтера помещается в `теневой` экран
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot