User Tag List

Результаты опроса: Нужно ли делать движок?

Голосовавшие
10. Вы ещё не участвовали в этом опросе
  • Нужно

    6 60.00%
  • Не нужно

    0 0%
  • Всё равно

    1 10.00%
  • Не знаю, но интересно

    3 30.00%
Страница 3 из 3 ПерваяПервая 123
Показано с 21 по 22 из 22

Тема: Как насчёт движка для Dungeon Crawl игр?

  1. #21

    Регистрация
    20.01.2010
    Адрес
    г. Зеленоград
    Сообщений
    600
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    123 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    В оригинале Принц персидский работал на 64к машинке.
    и не жужжал.
    А какая именно машинка имеется в виду? Коммодор, например? Ну да, работал. С постоянными подгрузками. БКшный грузится сразу весь, и больше диск не мучает, как я понимаю.

    Цитата Сообщение от jerri Посмотреть сообщение
    присмотрись к движку Wolf48
    там есть что почерпнуть.
    От Alone Coder'а? Да, я в курсе, благо он основные решения разъяснил. Но у нас принципиальная разница в устройстве текстуры: у меня битовая карта, у него -- список столбцов одноцветных пикселей. Но я имею в виду, само собой.

    - - - Добавлено - - -

    Подумалось: поскольку я вольный копейщик, и свободное время у меня находится -- когда как, то выложу я исходники ключевых мест, чтобы интересующимся не приходилось возиться с дизассемблером, и гадать что зачем:

    Код:
    ;
    ; trampoline for the dummy texture (r0 -- offset)
    ;
    tramp1:	add #dummy0 + 10, r0
    	clr -(sp)
    	mov -(r0), -(sp)
    	mov -(r0), -(sp)
    	mov -(r0), -(sp)
    	mov -(r0), -(sp)
    	br texc1
    	
    ;
    ; trampoline for the half of dummy texture (r0 -- offset)
    ;
    tramp2:	add #dummy0 + 10, r0
    	clr -(sp)
    	mov -(r0), -(sp)
    	mov -(r0), -(sp)
    	br texc1
    ;
    ;
    ; draw the pixel column
    ; texture is 64 pixels high (8 bytes)
    ;
    ; r0 - scratch
    ; r1 - destination pointer (byte)
    ; r2 - destination column bit mask
    ; r3 - colors (low/high byte), pre-masked
    ; r4 - texture coordinate V delta
    ; r5 - (texture coordinate V fraction accumulator)
    ;
    ; stack -- texture terminated by #0;
    ; TODO run with aligned stack and terminate by tstb sp/beq exit
    ;
    texc1:	clr r5
    10$:	mov (sp)+, r0
    	beq 19$ ; exit
    	sec
    11$:	ror r0
    	beq 10$ ; next word
    	bcc 12$ ; if bit is 1 -- swap colors (TODO -- paired drawing rountine)
    	swab r3
    12$:	bicb r2, @r1
    	bisb r3, @r1
    	add #100, r1
    	bmi 18$ ; if reached the bottom of the screen -- exit
    	add r4, r5
    	bcc 12$
    	clc
    	br 11$
    18$:	tst (sp)+ ; unload stack until end of texture is found
    	bne 18$
    19$:	ret
    Это текстурирование. Текстура кладётся на стек, и завершается нулевым словом. Используются все регистры. Для константы 100 (64.) регистра не хватило, увы. Основной фокус -- отсутствие счётчика битов. Вместо этого в сдвиговый регистр (r0) при первом сдвиге заталкивается единичный бит. И если он ушёл, то всё -- надо читать следующее слово (beq 10$).
    Сам алгоритм масштабирований классический -- digital difference, то есть дробные приращения текстурной координаты.

    - - - Добавлено - - -

    Расчёт масштабирования. Ну тут классический алгоритм деления для младших моделей PDP, ничего такого:

    Код:
    ;
    ; Calculate scale of 64-pixel texture to fit it into given pixel count
    ;
    ; r0 - pixel count
    ;
    ; returns:
    ; r0 - delta fraction
    ;
    ; TODO: 16-bit precision
    calctexscale:
    	mov r1, -(sp)
    	mov r2, -(sp)
    	mov r3, -(sp)
    	mov #100000, r1 ; 64. * 256. * 2
    	clr r2
    	mov #16.,r3
    1$:	asl r1
    	rol r2
    	cmp r0, r2
    	bhi 2$
    	sub r0, r2
    	inc r1
    2$:	sob r3, 1$
    	mov r1, r0
    	asr r0
    	rol r3
    	swab r0 ; multiply fraction by 256 / 2
    	ror r3
    	rorb r0
    	bis #177, r0
    	mov (sp)+, r3
    	mov (sp)+, r2
    	mov (sp)+, r1
    	ret
    Вот это нужно положить в r4 для текстурника.

    - - - Добавлено - - -

    Ах да, чуть не забыл: тут у меня 1 бит в текстуре означает инверсию цвета. Т.е. текстура хранится, как последовательность инверсий. Я планирую переделать в нормальный вид, а то так неудобно.

    Извините за спам сообщениями

  2. #22

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sandro Посмотреть сообщение
    А какая именно машинка имеется в виду? Коммодор, например? Ну да, работал. С постоянными подгрузками. БКшный грузится сразу весь, и больше диск не мучает, как я понимаю.
    Apple II исходники доступны.
    С уважением,
    Jerri / Red Triangle.

Страница 3 из 3 ПерваяПервая 123

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. хей-хоу! как насчет бит-ем-апа
    от SaNchez в разделе Игры
    Ответов: 106
    Последнее: 26.12.2016, 01:25
  2. не просветит ли кто насчет сети для zx-pc ?
    от Tonich в разделе Разный софт
    Ответов: 40
    Последнее: 29.05.2011, 22:38
  3. Как насчет чемпионата?
    от Rayen в разделе Игры
    Ответов: 6
    Последнее: 04.05.2011, 20:02
  4. вопрос насчёт проги для спека
    от scooter_aka_ORB2007 в разделе Софт
    Ответов: 6
    Последнее: 15.06.2008, 13:37
  5. Как насчёт Thanatos... 2!
    от GNTB в разделе Игры
    Ответов: 10
    Последнее: 09.05.2008, 07:10

Ваши права

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