Сообщения без ответов | Активные темы Текущее время: 23 апр 2024, 16:13



Ответить на тему  [ Сообщений: 37 ]  На страницу Пред.  1, 2
 [NES] Создание игры 
Автор Сообщение
Сообщение 14 апр 2008, 09:45
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
По крайней мере пяти человекам здесь будет интересно посмотреть на хоумбрю демки или игры для NES. А это уже пати! Так что творите, а ваше творение само найдет почитателей.


Сообщение 14 апр 2008, 14:26
Профиль WWW
Аватара пользователя

Зарегистрирован:
06 апр 2008, 13:46
Сообщения: 119
CaH4e3 писал(а):
GrandThiefTendo от Brian Provinciano. Недавно пронеслась весть, что он опять взялся за работу.
Где же можно скачать это чудо, поглядеть что за оно? Гугл не знает что такое GrandThiefTendo вообще.


Сообщение 14 апр 2008, 14:47
Профиль
Аватара пользователя

Зарегистрирован:
22 июл 2007, 02:10
Сообщения: 313
Откуда: ниоткуда
Всё-таки вспомнили про GTE:
http://grandtheftendo.com/
Там щас ничего нет.

_________________
Мысль - это интеллектуальный эксцесс данного индивидуума.


Сообщение 14 апр 2008, 15:58
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
25 июл 2007, 05:09
Сообщения: 211
Откуда: 39
Вот тут качественные скрины из игры GTANES (эксклюзив) - http://tim007.com/Stati/GTANES/Grand_Theftendo.htm

А Дюну на NES чел делать задумал... Он вообще загнул, ведь, ресурсов у NES на подобную стратегию не хватит. - http://dune2nes.narod.ru

_________________
http://romhacking.net.ru - всё про ромхакинг


Сообщение 14 апр 2008, 19:04
Профиль WWW
Аватара пользователя

Зарегистрирован:
06 апр 2008, 13:46
Сообщения: 119
Пишут что эта GTANES писалась на NESHLA — что-то типа ассемблера с синтаксисом высокоуровневого языка. Идея интересная, мне понравилось :)
http://neshla.sourceforge.net/

Код:


    // array elements defined with arithmatic operations
    byte oamaddrs[] = {$00*4, $08*4, $10*4, $18*4}

    // code with an arithmatic sizeof keyword
    clc
    adc #sizeof(SPR_OBJ)

    // use of the lo and hi keywords on an immediate integer passed as a macro param
    inline jsrind_imd(pproc)
    {
      lda #lo(pproc)
      ora #hi(pproc)
      if(not zero) {
        assign_16i(_jsrind_temp, pproc)
        jsrind_f()
      }
    }

    // use of the lo and hi keywords on a pointer variable passed as a macro param
    inline jsrind(pproc)
    {
      lda pproc + 0
      ora pproc + 1
      if(not zero) {
        assign_16_16(_jsrind_temp, pproc)
        jsrind_f()
      }
    }




Сообщение 12 сен 2008, 17:54
Профиль

Зарегистрирован:
01 авг 2007, 10:17
Сообщения: 68
Наконец руки дошли и до асма)))юСделал шарик, мечущийся по горизонтальной линии. Море радости)))


Сообщение 12 сен 2008, 21:17
Профиль

Зарегистрирован:
01 авг 2007, 10:17
Сообщения: 68
Вах! теперь он еще и с джоя управляется )
А теперь вопрос к людям знающим: стоит ли на управление убивать столько строк, сколько убил я?


Вложения:
Комментарий к файлу: src
The Ball.rar [975 байт]
Скачиваний: 476
Сообщение 16 окт 2008, 11:44
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Привожу алгоритм чтения кнопок джойпада из игры бомбермен :) Хотя какой там алгоритм... Просто читаются все кнопки и для удобства пакуются в 1 байт, чтобы было проще проверять операцией AND.

Переменные.

Код:
PAD1_TEST           EQU $10     ; Используются для повторной проверки джойстика
PAD2_TEST           EQU $11
JOYPAD1             EQU $12     ; Значения кнопок для Joypad 1 (см. маску PAD_*)
JOYPAD2             EQU $13     ; Значения кнопок для Joypad 2 (см. маску PAD_*)

JOYPAD_PORT1        EQU $4016   ; Порты контроллеров
JOYPAD_PORT2        EQU $4017


Маска кнопок для проверки

Код:
PAD_A               EQU %10000000
PAD_B               EQU %01000000
PAD_SELECT          EQU %00100000
PAD_START           EQU %00010000
PAD_UP              EQU %00001000
PAD_DOWN            EQU %00000100
PAD_LEFT            EQU %00000010
PAD_RIGHT           EQU %00000001


Сам код:

Код:
; Прочитать кнопки контроллеров.
; Причем читаются два раза, и если два чтения не совпадают, то оно не засчитывается.
; Поместить результат в переменные JOYPAD1 и JOYPAD2 как битовую маску.
PAD_READ
    JSR     PAD_STROBE
    LDA     JOYPAD1
    STA     PAD1_TEST
    LDA     JOYPAD2
    STA     PAD2_TEST
    JSR     PAD_STROBE
    LDA     JOYPAD1
    CMP     PAD1_TEST
    BNE     PAD_DRE
    LDA     JOYPAD2
    CMP     PAD2_TEST
    BNE     PAD_DRE
    RTS
PAD_DRE                         ; Ошибка чтения (или ложное срабатывание, точно не понятно зачем читать по два раза)
    LDA     #0
    STA     JOYPAD1
    STA     JOYPAD2
    RTS

; Вспомогательная процедура для PAD_READ.
; Делаем 8 последовательных чтений, получаем 8 байт о состоянии кнопок.
; Чтобы было проще проверять пакуем эту информацию в 1 байт.
PAD_STROBE
    LDA     #1
    STA     JOYPAD_PORT1
    LDA     #0
    STA     JOYPAD_PORT1
    TAX
    LDY     #8
JOY1
    TXA
    ASL
    TAX
    LDA     JOYPAD_PORT1
    JSR     IS_PRESSED
    BNE     JOY1
    STX     JOYPAD1
    LDX     #0
    LDY     #8
JOY2
    TXA
    ASL
    TAX
    LDA     JOYPAD_PORT2
    JSR     IS_PRESSED
    BNE     JOY2
    STX     JOYPAD2
    RTS
IS_PRESSED
    AND     #3
    BEQ     NOT_PRESSED
    INX
NOT_PRESSED
    DEY
    RTS



-------------------------------------------------------------------

Ну и собственно как всё это применять.
- Вызываем PAD_READ в обработчике NMI для обновления состояния кнопок.
- Проверка на нажатие кнопки делается парой команд, в любом месте программы:

Код:
; Проверка нажатий на кнопки.
    LDA     JOYPAD1
    AND     #PAD_SELECT
    BNE     SELECT_PRESSED      ; SELECT
    LDA     JOYPAD1
    AND     #PAD_UP
    BNE     UP_PRESSED          ; UP


Для удобства можно создать отдельный ASM-модуль со всеми низкоуровневыми процедурами, типа чтения кнопок, обновления спрайтов и пр. Большинство создателей игр для NES так и делали. В начале рома находятся все сервисные процедуры, а дальше идет чисто игровая логика.

Обьем программы получился даже больше :) Но зато экономия памяти целых 4 байта :P


Сообщение 20 окт 2008, 19:15
Профиль
Аватара пользователя

Зарегистрирован:
20 окт 2008, 18:41
Сообщения: 1
Откуда: Украины
Дайте мне что то для G-Basic-а, обучалку... :rtfm:
Я незнаю как с етим ромом работать)))

Набираю цифры запрограммирую их, а дальше что?
А что обозначает ета функция CALL ? - Допустим я набераю в строку "CALL 43269 OR 520" - и у меня получается парад цветов, нажимая на ENTER.


Сообщение 21 окт 2008, 10:45
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Ал хватит стебаться


Сообщение 13 фев 2009, 04:05
Профиль
Аватара пользователя

Зарегистрирован:
18 июн 2008, 10:19
Сообщения: 162
VEG писал(а):
В общем отложим идею с Си для NES на потом в черный ящик.


Очень сомнительно, что нормальные NES игры действительно писали на голом ассемблере.

Мне известен проект под названием Sphinx C--
Лично сам его щупал и писал на нём программы мультимедийного характера (с открыванием просторов 32-битности).
Исключительно под ДОС.

Компилятор позволяет писать на Си программу, вплоть до 1 байта (выход "retn")!!!
Очень гибкое распределение данных, стека, кода.
Ничего лишнего!!!

При этом сохраняется "чисто-сишная шаблонность" - вызов функций, работа с переменными итп.
Очень удобно.
Позволяет действительно создавать крохотные программы!

При этом можно свободно мешать Cи и Ассемблер типа такого:

Код:
if(AX==0) jmp Metka


Где AX - регистр i80x86 процессроа, jmp - безусловный переход.

В общем мне понравилось ;)

Функции:
Код:
void  Func(char a, short b, long c);


На асме не очень удобно типа:

Код:
push DWORD PTR c
push WORD PTR b
push WORD PTR a
call Func


А макрос дополнительно накручивать чё-т не хочется.

С регистровыми параметрами в функции на асме -ещё более уродилвее.


Думается, что у NES-девелоперов были подобные компиляторы ;)

P.S. Масштабный проект не пишется на ассемблере в силу трудоёмкости проекта. Покажите хоть одну нормальную игру типа BT&DD или Contra, сделанную одним человеком. Максимум - напишут движок погоняют пару спрайтов и всё =)


Сообщение 13 фев 2009, 05:34
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
22 июл 2007, 11:16
Сообщения: 787
Масштабность, она, конечно, имеется, но не там, где окно кода - 32 килобайта. ;) И почти все игры для денди писались одним-двумя программистами, максимум тремя. И если покопаться в коде некоторых игр, то видно сразу, что некотоыре кунштюки компилятору просто не под силу - использование одних и тех же кусков кода для разных частей программы - укороченные прыжки на RET опкоды соседних функций. Нет, там все писалось исключительно на ассемблере, максимум с макро-функциями. Опять же, тайминги и порой острая нехватка памяти заставляют извращаться с опкодами, выдавливать тайминги в критичных местах и экономить байтики. Этого даже современные компиляторы полноценно не умеют.

---- upd ----

Чтобы не быть голословным.
http://forums.lostlevels.org/viewtopic.php?t=1960

Это исходные коды игры 1991го года от Eurocom, "James Bond Jr". Несмотря на то, что это в общем-то уже 1991ый год, как видно, весь код целиком написан на асме, а для сборки всего этого месива используются самописные утилиты и конвертеры.

---- upd ----

Еще один заход.
http://average.truechiptilldeath.com/fi ... rogenv.rar
Директория разработки нелицензионной игры FreeFall. Там есть почти все.

_________________
1. Модератор всегда прав.
2. Если модератор не прав, см. п. 1.


Сообщение 17 сен 2011, 20:01
В игровом картридже используются два ROM'а: S-ROM и V-ROM. Допустим, у меня есть образы ПЗУ 32 и 8 кб, без всяких мапперов. Как эмулировать файлы образов? Если их какой-то программой нужно собрать в .nes файл, то какой?


Сообщение 19 сен 2011, 07:15
Профиль
Аватара пользователя

Зарегистрирован:
24 июл 2007, 06:54
Сообщения: 492
Откуда: Embedded
Маппер 0 же.

_________________
Tried so hard and got so far, but in the end, it doesn't even matter...


Сообщение 19 сен 2011, 11:10
Профиль WWW
Аватара пользователя

Зарегистрирован:
17 сен 2011, 20:05
Сообщения: 1
Откуда: Russia, Ural56
Спасибо за подсказку, HardWareMan. Я думал, что наличие маппера определяет наличие устройства переключения банков. :baby: Вон оно как бывает)
Предположительно, я имею картридж с мапером #0. Сливаю образ с микросхемы DS1 - 27C256, называю файл образа S-ROM.bin, сливаю образ с DS2 - 27C64, называю файл V-ROM.bin. С помощью какой программы я могу эмулировать и отлаживать эти образы?

_________________
Люди учат цифру..
Цифра учит людей..


Сообщение 19 сен 2011, 13:35
Профиль ICQ
Аватара пользователя

Зарегистрирован:
21 авг 2007, 14:55
Сообщения: 301
GManiac писал(а):
Всё-таки вспомнили про GTE:
http://grandtheftendo.com/
Там щас ничего нет.

Насколько мне известно, проект сейчас называется Retro City Rampage (http://www.retrocityrampage.com). Релиз намечен на первый квартал 2012 года. (Но это так, для справки)

_________________
Копи/паст в подписи.


Сообщение 21 сен 2011, 14:00
Профиль
Аватара пользователя

Зарегистрирован:
23 июл 2007, 19:37
Сообщения: 401
Откуда: Мытищи
Эльф добыл исходники Crystal Mines
http://nesdev.parodius.com/bbs/viewtopic.php?t=8057

у него много исходников и для NES, и для других систем: http://gilgalad.arc-nova.org/

_________________
Nestopia 1.37/1.40 Fixed


Показать сообщения за:  Поле сортировки  
Ответить на тему   [ Сообщений: 37 ]  На страницу Пред.  1, 2

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by STSoftware for PTF (mod by Zeru-j).
Русская поддержка phpBB