Смертельный нейровирус Эйфория (NES версия)
Смертельный нейровирус Эйфория (NES версия)
Программист порта: Guyver X.B.M. (http://guyverperevod.byethost7.com)
Программа предназначена для запуска на NES (Dendy). распространяется в виде ROM файла.
Запустить можно на настоящей приставке,клоне, или эмуляторе.
Rom предназначен для запуска на эмуляторах, поддерживающих маппер MMC1 (т.е. на любых).
Тестировался на FCEUX 2.2.3; VirtuaNES version 0.93.
Эту версию запрограммировал Guyver X.B.M. У него есть свой сайт http://guyverperevod.byethost7.com Игра сделана на упрощённом движке для создания игр жанра IF на NES (Dendy).
Эту версию игры отличает красочное оформление. Многие игровые экраны снабжены небольшими рисунками, добавляющими атмосферы. Также, здесь более мощно сделаны некоторые анимации.
В целом порт вышел красочным и стильным.
Это рассказ выполненный в форме компьютерного приложения.
Что-то в духе интерактивной литературы. Рассказ короткий.
Сюжет в стиле киберпанка.
Инъекция неона.
Теперь я могу видеть алмазное небо. Звездочки перед глазами.
Тягучая едкая неоновая жижа поступает в кровь прямо в мозг.
Ангелы и небеса, состояние редкой эйфории. И небо. Небо неона.
Его иначе не увидеть. Неоновая связь.
А ее звали Дедли. Она была рядом. Это электрическая схема,
которая подключалась к моему мозгу, и брала из него питание для своей нейросети.
Микросхема — электроника. Мой мозг — биология. Неон — электрохимия.
Веб-страничка порта: http://www.dimalink.tv-games.ru/deadlyneuroefnesversion
Скриншоты:
ЕЩЕ БОЛЬШЕ СКРИНШОТОВ ПОД СПОЙЛЕРОМ!
- 16 октября 2019, 19:12
- 08
Не знаю, это DimaLink сказал что писать на ассемблере - героизм, я возразил. Насчёт C хотелось бы ответить "а что там знать-то", но как-то я теперь уже задумался. За участие - спасибо.
Понять бы ещё эти штуки в Ассемблере. Похоже я никогда его не осилю,
в Ассемблере какая-то совершенно иная логика, чем в других языках. :<
А в С большая часть кода сразу понятна, даже не изучая его...
Логика там одна и так же. Просто все действия разбиваются на очень маленькие блоки. Например, у тебя есть переменная result, и тебе нужно в ней вычислить сумму двух других переменных base_damage + bonus_damage. Для этого тебе нужно дать такие инструкции:
Загрузить base_damage
Сложить с bonus_damage
Записать результат в result
В процессоре ничего не происходит волшебным образом. Чего не знают высокоуровневые программисты, так это того, что вычисления происходят в регистрах. Это хитромудрое слово просто означает "ячейка памяти". Чтобы сложить два числа, достаточно одного регистра. Пусть мы пишем программу под процессоры архитектуры Intel x86 и это будет регистр AX (выбирается из списка регистров процессора под который пишется программа). Этого хватит чтобы сложить 16-битное число с другим 16-битным. Если результат превысит 16 бит, то 17-й бит будет в другом регистре, во флаге переноса. Если нужно складывать числа большей разрядности, надо выбирать другой регистр. Но в текущем выборе:
mov ax, base_damage
add ax, bonus_damage
mov result, ax
Сложно? Само по себе нет, но так на каждое вычисление. А если надо работать со строками (символами), команд становится намного больше. И работать будет только на процессоре заданной архитектуры. Написано под NES - будет работать только на NES (ну точнее на всех сопоставимых процессорах, но сам по себе процессор не существует, а на другом наборе железок программа не заработает просто так). Это вот хорошо что у нас сейчас есть эмуляторы. Но писать приложения под Windows (Linux, Mac, другие десктопы) в 2019 году на ассемблере - сомнительная затея, которую трудно будет поддерживать в работоспособном состоянии.
А зачем загрузить? Это инициализация переменной или нужно помимо инициализации ещё вот это действие делать?
Плюс тут есть вообще функции?
Или хотя бы операторы типа goto, gosub? (они могут быть аналогами функций)
Есть ли тут простейшие if и for?
Надо бы как-нибудь погуглить это всё, хотя вряд ли я смогу даже простой "Hello World" для NES на ассемблере написать)
Чтобы вычислить? Ну как в калькуляторе нужно сначала вбить первое число, иначе с чем работать? Надо его в ячейку записать, это я и обозначил как "загрузить".
Нет, в переменной к этому моменту уже есть нужное нам число. Мы загружаем это число ИЗ переменной в регистр - потому что только в регистре могут происходить вычисления. Переменная это просто что-то где-то в оперативной памяти, тогда как регистр - физически существующая (в реальном мире, а не в магическом мире программирования) в процессоре (да, в той квадратной штуке вставленной в материнскую плату твоего компьютера) ячейка куда попадает нужное количество электронов, чтобы представлять собой нужное число.
Есть, без них никуда.
Хорошие новости - есть. Плохие новости - без goto в ассемблере невозможно сделать цикл for, да и никакой другой цикл тоже. Потому что цикл в нём делается так:
Вместо 10 можно загрузить любую переменную.
В си-подобном коде это было бы:
Нет и нет. Про for я уже показал выше, а всё что ты пишешь в if например так:
Должно вычисляться в ассемблере поштучно и по порядку:
А если у тебя больше проверок в условии, будь добр считай их все по очереди пока не просчитаешь до конца всё. Есть автоматизированные способы это делать: https://ru.wikipedia.org/wiki/Обратная_польская_запись#Пример_вычисления_выражений
Мораль: оно тебе надо? :yak:
Важный факт: "Hello World" это программа, которую никто и никогда не пишет с нуля. Все Хэллоу Ворлды копируются с уже существующих предыдущих, поэтому задача состоит в копировании, а не в придумывании всех заклинаний, обрамляющих то что программисту на самом деле нужно от компьютера. Я имею в виду, если программа должна выводить одну строку, то она и должна состоять из одной строки. А на практике на том же C# тебе нужно писать:
Да, в современных IDE это всё сразу в шаблоне пустого проекта, но сколько мусора приходится видеть на экране, и сколько раз вычислять нужное среди ненужного?
https://excelwithbusiness.com/blog/say-hello-world-in-28-different-programming-languages/ - вот кстати подборка хэллоуворлдов на разных языках. Однако, где короче всего пишется хэллоуворлд, там совсем не факт что удобно делать игру, да и вообще компьютерную программу. Вот вариант для ассемблера собственно:
Я это к чему - чтобы освоить язык и/или платформу, нужно просто работать по уже существующим примерам. Ты себя просто недооцениваешь, другое дело что мотивация работать с ассемблером будет неминуемо падать, учитывая сколько времени требуется на написание программы на нём. И в целом рекомендации на нём делать игры я дать не имею оснований.
Образовательно! :) Сохраню себе куда-нибудь! Спасибо)
Одно время мне было интересно делать ассемблерные вставки в паскалевский код... Эх, времена