ALKO, есть полноценный движок от АлонКодера там нормальный рейкаст
посмотри его например
Вид для печати
ALKO, есть полноценный движок от АлонКодера там нормальный рейкаст
посмотри его например
В VDP-RAM хранятся не только спрайты, там хранятся и тайлы для плэйнов.
На два плэйна замостить тайлами точно хватит.
- - - Добавлено - - -
*полу-экранным.
http://pastenow.ru/Upload/Paste/HOYE.png
Вторая половина просто зеркалится.
Ровно как и в blood-shot. Но в bloodshot'e не рейкаст, а морфинг картинок.
А в этом ZXoom'e возможно же сделать поворот стен кратный 45-ти градусам ?
Я имею ввиду не при повороте камеры, а именно чтоб сама структура карты была примерно как Zero-Tolerance (sega md) или System Shock-1(dos) или terminator rampage (dos)
- - - Добавлено - - -
Жаль конечно, что Андрей007 забил на этот двиг, и ударился во всякие ребусы\кроссворды.
Потенциал огромный, если не для шутана, то для квеста какого-нибудь, адвентюры.
Да и спрайты в этом ZXoom'e рахитные, потому что рисовал я тогда ещё в стандартном MS-Paint'e на компе политеховской библиотеки (тогда ещё своего компа не было).
Ща бы сделать своего рода remastered. Сделать более интересные текстуры, подгрузку уровней с тапки.
Подробно алгоритм расписал тут: http://www.worldofspectrum.org/pub/s...fo/z/ZXOOM.txt
Вначале я пытался даже делать цветные стены, но получалась немного искаженная перспектива: http://zx-pk.ru/attachment.php?attac...5&d=1295856337
- - - Добавлено - - -
Да, можно. Все 8 направлений (0,45,90,135,180,225,270,315 градусов) имеют одинаковые свойства.
Пояснения к вышеизложенному алгоритму, см. приложенный файл. Наверно, так понятнее.Вложение 55551
ALKO, почисть личку, не отправляется тебе сообщение.
Неспокойно на душе, что пропадает такой крутой движок. (как и движок Вульфенштейна от alone coder'a)
давно хотел предложить состряпать на нём РПГ-данж.
Просто программерскую часть я не утяну.
Было бы круто возможности движка расширить под 128кб, чтоб разнообразить текстуры и вражин (может ещё увеличить кратность угла поворота).
- - - Добавлено - - -
Если у кого появится желание, имейте ввиду, что за арт я готов взяться (и подход будет посерьёзнее ZXoom'a)
ни у кого не появиться. всё непотребство сам себе на уме клепают на агд или чурерре. а на твоем движке нужно очень серьезно упираться, получаемая игра обязательно более высокого уровня быть должна, и мамкины игрописы такое не осилят. те же кто реально может, а их по пальцем одной руки можно сейчас пересчитать, во первых сами что то делают, во вторых скорее всего будут делать на основе своего творчества, так как это банально проще. увы, либо всё сам, либо никак.
необязательно с ним мудить
можно сделать все в лоб и без злобного матана
и все будет не так плохо
примерно таким алгоритмом
итого 59 тактов на шагКод:hl player_x
hl' player y
de ray_vector_x ;тупо таблицы синусов\косинусов
de' ray_vector_y
;сам сканер
add hl,de ;11
ld a,h ;4
exx ;4
add hl,de ;11
ld b.h ;4
ld c,a ;4
ld a,(bc) ;7
cp $xx ;7
jr nz,dist1 ;7\12
add hl,de ;11
ld a,h ;4
exx ;4
add hl,de ;11
ld b.a ;4
ld c,h ;4
ld a,(bc) ;7
cp $xx ;7
jr nz,dist2 ;7\12
...
...
...
jr nz,dist30 ;7\12
dist1
ld h,a ;тип объекта
ld a,l ;младший адрес координат столкновения по Y
ld l,$xx ;растояние от игрока до объекта
push hl
exx
ld h,a ;в l младший адрес координат столкновения по X
push hl
ret
dist2
ld h,a ;тип объекта
ld a,l ;младший адрес координат столкновения по x
ld l,$xx ;растояние от игрока до объекта
push hl
exx
ld l,h
ld h,a ;в l младший адрес координат столкновения по y
push hl
ret
... итд
нужно порядка 64(угол обзора лучей) * 25 (максимальная глубина сканирования при грубом шаге)
1600 циклов по 59
94400 такта на полное сканирование в пустом пространстве
в готовой комнате это число будет меньшим
+можно для каждого столбца экрана сделать свою развернутую процедуру
в которой будут заносится значения с уже скорректированными от закругления камеры расстояниями
далее из стека выдергиваем готовое расстояние
номер текстуры
грубые координаты столкновения
из которых можно попытаться вычислить координаты на текстуре
(скорей то что большее то и координата)
линейно интерполяцией можно добавить промежуточные столбцы
на основе начального угла запуска луча
можно попытаться определить координаты текстуры и по точнее
при столкновении
можно не сразу заносить расстояние
можно запустить луч в обратном направлении с меньшим шагом (поделить на 2 на 4 шаг и поменять знак)
и уточнить расстояние (сильно прям много ресурса это не сожрет 15к тактов и меньше)
3Ы
это имеет мало общего с тем безобразием что я недавно выложил
тут не должно быть такой низкой дискретности перемещения
и таких сильных искажений пространства
хотя с наложением текстур тут несколько плоховато