• avatar sq
  • 0
Люто!
  • avatar n1k-o
  • 3
  • avatar oisee
  • 2
(Он, кстати, упомянул о планах добавить ZX Spectrum.)
Ой, не так. Упомянул, что хочет «сделать что-нибудь» для ZX =)
  • avatar Weiv
  • 1
Можно скрин сделать с таблицей без рекорда, там результат тогда вверху будет. А мне эта игра нравится тем, что нужна только реакция, а точность почти не нужна. В играх, где нужна точность, у меня получается гораздо хуже.
  • avatar sq
  • 1
Мне скорее всего кажется, что никто пока не может попаст в таблицу рекордов :) Там вроде 13к надо набрать, я больше 8 пока не набирал ))
  • avatar Weiv
  • 1
Может, люди не спешат выкладывать таблицу рекордов, надеясь достигнуть результата получше, пока время есть)
  • avatar sq
  • 0
Ну что, пока ещё никто не выложил таблицу рекордов, любой рекорд может быть победным!
  • avatar Weiv
  • 2
Я не меняю палец, на синклер-джойстике безымянный молотит, почти не уставая.
  • avatar n1k-o
  • 0
кстати, да, именно смена пальца, постоянно нажимающего огонь, приводит к ошибкам — надо правильно выставить управление, чтобы смена пальца не ломала маневрирование)
  • avatar VBI
  • 0
блин руки болят столько стрелять :))
  • avatar Weiv
  • 0
Да, там эти участки, где приходится в центре экрана прятаться, самые сложные. Вчера на джойстике пробовал играть, похуже, конечно, но до орбитальной станции дошел)
  • avatar n1k-o
  • 1
круто, потратить почти 8 жизней в одном моменте, а потом с 1 всё разрулить)
  • avatar Weiv
  • 1
Спасибо!
есть почти близнец Lightforce — Star Farce (даже более продвинутый кмк)

а вот попытка портировать Xenon Megablast — Axons
  • avatar oisee
  • 0
На этот пост Стивена Хагга я наткнулся после того как начал читать его книгу: Making 8-bit Arcade Games in C, в ней был упомянут его блог и онлайн IDE для непосредственной разработки (игр) для всех этих z80-based машин.

Перевод публикуется с любезного разрешения автора.
(Он, кстати, упомянул о планах добавить ZX Spectrum.)
  • avatar aa-dav
  • 1
Сильно переработал код виртуальной машины и ассемблера — разделил собственно классы на Машину и Ассемблер и кроме того теперь виртуальная машина умеет выводить символы в консоль, а ассемблер поддерживает строки и множество данных в одном ключевом слове dw.
Программа теперь может выглядеть так:

PORT_CONSOLE    =         $FFFF   ; символ для порта ввода-вывода консоли
                sp        = $0050 ; настроим стек

                r0        = str1
                [ sp ]    =+2 pc  ; запоминаем в стеке pc для возврата
                pc        = print ; вместе с предыдущей инструкцией - CALL

                r0        = str2
                [ sp ]    =+2 pc
                pc        = print ; т.е. два раза вызвали процедуру print разных строк

exit            dw        0        ; STOP полный останов программы
        
                ; процедура print, на входе r0 - указатель на ASCIIZ-строку
print           r1        =? [ r0 ]    ; MOV с обновлением FLAGS (carry и zero)
                pc        = [ sp ] @z  ; если флаг нуля, то совершаем выход
                [ PORT_CONSOLE ] = r1  ; в порт консоли выводим очередной символ 
                r0        =+1 r0       ; увеличиваем указатель на строку
                pc = print             ; цикл на начало процедуры

                org $0050              ; начало данных для вывода
str1            dw "Hello, world!" 13 10 0
str2            dw "That's it." 13 10 0

и выводит она следующее (включая дамп памяти и регистров после выполнения):

Hello, world!
That's it.
R0:006C  R1:0000  R2:0000  R3:0000  R4:0000  SP:0050  PC:000C  FL:0001
0000:005E  0010:FFFF  0020:0000  0030:0000  0040:0000  0050:0048  0060:0054  0070:0000
0001:0050  0011:2000  0021:0000  0031:0000  0041:0000  0051:0065  0061:0068  0071:0000
0002:000E  0012:006E  0022:0000  0032:0000  0042:0000  0052:006C  0062:0061  0072:0000
0003:0050  0013:000D  0023:0000  0033:0000  0043:0000  0053:006C  0063:0074  0073:0000
0004:40D6  0014:0000  0024:0000  0034:0000  0044:0000  0054:006F  0064:0027  0074:0000
0005:006E  0015:0000  0025:0000  0035:0000  0045:0000  0055:002C  0065:0073  0075:0000
0006:000D  0016:0000  0026:0000  0036:0000  0046:0000  0056:0020  0066:0020  0076:0000
0007:000E  0017:0000  0027:0000  0037:0000  0047:0000  0057:0077  0067:0069  0077:0000
0008:0060  0018:0000  0028:0000  0038:0000  0048:0000  0058:006F  0068:0074  0078:0000
0009:40D6  0019:0000  0029:0000  0039:0000  0049:0000  0059:0072  0069:002E  0079:0000
000A:006E  001A:0000  002A:0000  003A:0000  004A:0000  005A:006C  006A:000D  007A:0000
000B:000D  001B:0000  002B:0000  003B:0000  004B:0000  005B:0064  006B:000A  007B:0000
000C:0000  001C:0000  002C:0000  003C:0000  004C:0000  005C:0021  006C:0000  007C:0000
000D:1018  001D:0000  002D:0000  003D:0000  004D:0000  005D:000D  006D:0000  007D:0000
000E:026D  001E:0000  002E:0000  003E:0000  004E:0000  005E:000A  006E:0000  007E:0000
000F:00F1  001F:0000  002F:0000  003F:0000  004F:000C  005F:0000  006F:0000  007F:0000

Единственный пока порт ввода-вывода замаплен на адрес $FFFF (и вообще все порты ввода-вывода будут замаплены на последние ячейки памяти) и при записи в себя выводит символ в консоль.
Ключевое слово dw теперь может принимать строки в кавычках и много данных в одной строке программмы — они даже не разделяются запятыми, а только пробельными символами, так парсер даже проще.
Заодно демонстрация того как CALL имитируется двумя инструкциями — сперва в стек пишется адрес возврата через инструкцию inc_by_two и уже потом совершается переход.
RET в программе условный.
  • avatar Weiv
  • 1
Убрал архив, загрузил удачный rzx отдельно: yadi.sk/d/uwY8XFeoWF6Dnw
  • avatar Weiv
  • 0
Вот мои 2 rzx, первый неудачный, второй с полным прохождением: yadi.sk/d/9pjONdzMMUDPCA. Может, кого-то вдохновит)
  • avatar sq
  • 0
Саня так давай, выкладывай скрин с таблицей рекордов-то!
  • avatar TmK
  • 2
ух ты, это же «летающее радио» (так мы корабль прозвали) — одна из первых игр в которую играли, всей семьей, практически вырывая джойстик)))