Alone первый раз сходил в туалет. И после этого пришло озорение. Я так же сайт начал писать, после запора.
Alone первый раз сходил в туалет. И после этого пришло озорение. Я так же сайт начал писать, после запора.
Во всем виноват я
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Рассказываю.
В 1996 году я делал воксели, они страшно тормозили, и памяти под 3D карту не было.
В 1997 стал делать столбцами, но по воксельному алгоритму. Делал долго, первые варианты были без текстуры, потом никак не мог настроить перспективную коррекцию. Плевался от GENS, но ничего другого у меня не было. Не сразу ещё допёр до группировки столбцов в стены (наш препод по компьютерной графике, например, вообще не рассматривал такой вариант).
В 1998 допёр до интерполяции результатов сканирования - тоже нетривиально: например, в Stellar Contour нет интерполяции.
В 1999 перешёл с атрибутов на чанки, до этого наивно надеялся на мультиколор.
В 2000 наконец придумал, как быстро выводить спрайты без кучи копий, правда, при этом они закрывают стены. Многие вольфы на ZX вообще не дошли до этого этапа.
Потом уже допёр, что сканирование можно делать двойными шагами, что при движении можно картинку ухудшить, перебирал всякие быстрые варианты вывода чанков. Последний вообще был в 2003 году, когда Cyberjack и JtN написали статью в Adventurer.
В 2004 году сделал первую 3D игру.
В 2005 начал вторую - уже квест. Но не хватило 128К памяти. Поэтому я перешёл на АТМ Turbo и стал писать другие игры. Пробовал, между прочим, переделать Wolf 2004 под АТМ экран, но результат выглядел ужасно. Текстуры надо было рисовать сразу под много цветов, а не 8 стандартных. Тем более что многие текстуры там вообще не цветные. Пробовал делать мипмэпинг (на 512К), но интересного результата не получилось.
Когда уже всё забросил, допёр, как быстро отрисовывать столбцы (процедура под каждый масштаб), но при этом нельзя дрыгать головой. А мне почему-то казалось, что без дрыгания головой играть неинтересно (в Wolf 2004 это дрыгание давало иллюзию лучшей детализации). Поэтому делать не стал. Только потом поиграл в оригинальный Wolfenstein 3D и понял, что дрыгание не нужно. Нужно много FPS. А их взять неоткуда. Хотя потом посчитал разблюдовку, сколько куда уходит времени в Wolf 2004, можно ускорить раза в полтора. Но всё равно мало.
Думал, как делать без текстур, стал анализировать вариант с заливкой по EOR-fill - на C-64 этот метод популярен, а на спеке его юзал только RST7, да и тот никому не говорил. И тут просёк, что так можно и с текстурами, если в чистом ч/б. Правда, таких текстур у меня не было, а те, которые в Doom beta и в Citadel, мне не нравились. Увидел Wolf на TI-83 и вдохновился. Всё это было уже в 2009 году.
В пиксельном разрешении сразу встали проблемы с точностью математики. Воксельные алгоритмы пришлось отбросить сразу. Взял классический алгоритм с умножениями-делениями. Причём нельзя сканировать сначала горизонтальные стены, потом вертикальные - получаются глюки на стыках стен. Надо сканировать и те, и другие, а это значит 8 веток по каждому из 8 основных-побочных направлений. Я эти ветки сделал макросами с параметрическими метками, чтобы не писать 8 раз одно и то же. Почему-то ни один ассемблер, кроме ALASM, не умеет параметрические метки.
Сначала я сделал все вычисления в 16 битах (чтобы хоть как-то работало, хоть и медленно), потом отбрасывал биты, переводил в логарифм и т.д., пока наконец не смог сделать полноэкранный вольф в 8-битной математике.
Потом перебирал разные способы интерполяции. Самая быстрая оказалась, как ни странно, рекурсивная. Хотя я потом думал над нерекурсивной, которая по идее будет ещё чуть быстрее, но ей надо больше памяти.
Там ещё надо было нарисовать все эти текстуры, чтобы ещё минимизировать число цветопереходов на каждом столбце, ибо чем больше, тем тормознее. А максимум 17 цветопереходов на столбец. Это ограничение очень чувствуется, когда пытаешься нарисовать надписи!
Первая версия движка (от декабря 2010 года) была в польской деме Critical Error. Вместе с картинкой, музыкой и записью кнопок она впритык заняла всю память. То есть в принципе игру сделать было нельзя, разве что тупой лабиринт типа Wolfdemo 1/2/3/3.5. И вообще, FPS был всё ещё слишком низкий для шутера, даже в окошке 24x16 знакомест (размер настраивается в исходнике). Сама картинка разваливалась в процессе рисования. Даже сделал настройку для double-buffering'а на 128К.
Стал пробовать низкое разрешение - смотрелось фигово. Потом додумался до заливки пола и потолка атрибутами. Для этого сначала пришлось собрать статистику, по которой 90% стен ниже 8 знакомест.
Потом спрайты. Чтобы их выводить поверх стен, надо сначала сделать EOR-fill не на экран, а в память. А потом перебрасывать на экран. Это лишний тормоз. Поэтому я сделал на каждом столбце флажок, что этот столбец уже залит по EOR-fill и на нём можно рисовать спрайты. При выводе на экран такие столбцы не заливаются, а просто перебрасываются. Сами спрайты выводятся по пиксельным столбикам, а не по знакоместным. То есть надо учесть флажок залитости в нужном знакоместном столбике и, если надо, залить его - с учётом того, что низкие столбцы надо ещё почистить (там кака под атрибутами), ещё с учётом того, что спрайты в lores, а фон в hires. А ещё надо учесть масштаб отрисованных стен на каждом столбике. В Wolf 2004 тупо смотрелось - спрайт ближе, чем стена на середине этого спрайта, при той графике глюки было незаметны, а в пиксельной графике ещё как заметно!
И вообще, где хранить сами спрайты? Памяти нету. Поэтому я сократил таблицу умножения, стало не 128 масштабов, а 64. Долго подбирал, какие масштабы брать, какие не брать - искал максимальный, минимальный, с каким шагом брать мелкие масштабы, с каким крупные. Там в бейсиках можно видеть формулу пересчёта из новых масштабов в старые - она получена регрессией, потом ещё на глазок подгонялась.
Потом вот сделал низкое разрешение только на близких стенах и монстрах, теперь хотя бы компромисс между качеством и скоростью.
Последний раз редактировалось alone; 20.07.2012 в 19:27.
Алона, ты самый умный мальчик на форуме. Будет лишний час, сделай пожалуйста 9 новых эффектов для сатисвактион мегадемо. Музыку неварт даст, графику подрисуем.
Алона даст?
alone, история конечно занимательная.
Но разве она не могла уместиться скажем в 2-3 года более активной целенапрвленной работы?
Я не могу сидеть 2-3 года подряд над одним проектом. А если бы мне дали железный срок, то я, скорее всего, торопился бы и реализовал бы какой-нибудь тормозной алгоритм.
---------- Post added at 18:38 ---------- Previous post was at 18:33 ----------
У меня было много проектов:
??.12.92 Animator (basic)
??.??.94 tune (basic)
??.??.95 Space game (basic)
??.??.95 Test game (basic)
13.04.96 Font 2.06
12.12.96 Sapper'96
??.??.97 "boot" 48k demo
??.??.97 16 game (логическая игра)
??.??.97 чанковый редактор
??.??.97 EDIT* (текстовый редактор)
??.??.98 Побег из дома game (текстовый квест)
??.??.98 MC2 (мультиколорный редактор)
??.??.98 Loyd game (логическая игра)
??.??.98 Lode Runner game
??.08.98 ACEdit + Raduga
??.??.98 HARD: 256x304
??.??.98 Color Lines game (логическая игра)
??.??.98 microboot 256 bytes boot
26.11.98 Wolf demo #1, 25.11.00 Wolf demo #2, 16.04.01 Wolf demo#3, 10.06.02 Wolf demo#3.5 game
28.11.98 ZX-Guide #1
06.01.99 Alasmomania viewer
??.??.99 HARD: AY frequency switcher
25.08.99 HARD: 384x304
16.09.99 Sample Mixer 1.5
19.10.99 HARD: DMA Sound Blaster
??.10.99 Lister80 384x304 + Sound Blaster music, 24.01.00 Lister80PC 384x304 MS-DOS
11.11.99 Rubik48 game
13.12.99 ZX-Guide #2
31.03.00 8col -1
01.04.00 ZX-Guide #2.5 trash
07.05.00 HARD: Simplified Gigascreen
12.08.00 ANSI 0.1
31.10.00 128 bytes intros
11.12.00 ZX-Guide #3
08.06.01 PT 3.4m (crack 3.4f by Nick/GDC & Mm<m/Sage), 05.02.03 PT 3.60a (открытые команды), 07.03.06 PT 3.697 (TurboSound)
24.02.01 Gluk 5.4R (crack 5.3k by Mr.Gluk), 13.04.05 Gluk 6.0 (новый интерфейс)
19.06.01 AlCoNews #1
24.08.01 Worms game demo
17.10.01 PT Util 1.0
08.11.01 Chip Tracker 1.0, 25.08.02 Chip Tracker compiler/player
20.11.01 Sinclair Club #5 intro
??.??.01 Everybody Must Die game demo
25.11.01 ZX-Guide #4
12.12.01 ACEdit>html converter
12.01.02 Fullscreen multicolor Mandelbrot zoom demo
11.02.02 Body #32 intro
97-01.04.02 Impetris game
??.??.02 HARD: Simplified Hardware Multicolor
??.??.02 Allods game demo
16.07.02 Body #3c intro
07.08.02 STS 5.3lite
14.08.02 200#A, 01.02.03 200#Б, 19.04.03 200#В, 16.09.04 200#Г, 25.06.05 200#Д
14.08.02 ZX-Guide #4.5
30.08.02 RIP #15
24.10.02 Con18 bmp>mcx converter
??.10.02 Hrip1.05m+SFXhrip2 (crack 1.05)
19.11.02 UnRar 0.31 (fix UnRar 0.23 by AIG), 31.04.03 UnRar 0.43lite
23.11.02 Inferno #3 (+Jerri)
??.??.02 VideConv ZX Spectrum video converter
19.02.03 Body #40 intro
10.03.03 DBS 0.4 (fix DBS 0.3 by Mike/4d)
13.03.03 JPEG 0.2 (fix JPEG 0.1 by >>RRA>>)
15.03.03 Born Dead #G (+Sage group)
13.04.03 HARD: AY LAN
13.04.03 MIGAME4 game for LAN
28.04.03 Mars 512b intro
21.06.03 ZXRar + Lamergy #R
24.06.03 Dimon 128K video demo
18.07.03 mRIP
??.07.03 Inferno #4 (+Jerri+Shaitan)
21.08.03 mkace (crack ALASM & its loader), 02.03.04 ALASM 4.45 (fix 4.44bf by Capry)
??.??.03 RarView
25.10.03 RZXSFX
26.11.03 pkunzip 1.41 (fix 1.33 by RLDG & BW)
21.03.04 Hexagonal Filler game
21.04.04 fom&bush (книга)
09.05.04 CacheVox 1.0
13.05.04 Inferno Guide #5 beta
20.08.04 Wolfenstein 2004 game (+Shiru+много композиторов)
03.12.04 Info Guide #6
25.01.05 HDDoctor 0.1
15.03.05 Perfect Commander 2.0 (fix 1.x by James Advent + Reanimator)
27.06.05 Info Guide #7
25.10.05 HARD: 16col
30.10.05 Beaver 16C demo
25.12.05 102color viewer
25.12.05 Pang 16C game (+Shiru)
25.12.05 Info Guide #8
08.01.06 Time Gal 16C game (+Shiru)
29.03.06 "История католичества" (книга)
29.07.06 Ball Quest game, 15.03.07 Ball Quest MSX (+Shiru)
24.08.06 Info Guide #9
01.01.07 Канализация/Sewerage game (+Shiru)
??.??.07 Snake 121 bytes game
16.05.07 Info Guide #10
05.09.07 JTN29 gift
24.03.07 TurboSound FM Compiler
22.04.07 MCX viewer
??.??.07 SpeccyWiki (+NMI+ZXDN)
??.??.07-??.??.08 доработки Unreal Speccy
25.06.08 NedoDemo (+Shiru)
??.12.08 Орфовики (+enhydra+infovarius+deevrod)
11.01.09 Киса (комикс)
27.08.09 The Link demo (+Shiru+Dimidrol)
29.04.09 Кошкин дом (комикс)
23.06.09 Beep Tracker
17.07.09 BeepShow mini-demo
??.??.09 Во всём есть система (демотиватор)
??.??.09 Погладь кота (демотиватор)
??.12.09 Доктор Хаус (комикс)
17.02.10 О комиксах (мультфильм)
07.05.10 В сети (мультфильм) (+Shiru+n1k-o)
18.09.10 Жизнь (комикс)
17.03.11 Critical Error demo (+HPRG)
20.07.11 The Board demo (+Shiru+Time Keeper)
29.09.11 Школа классической анимации киностудии РГРТУ-Фильм (мультфильм)
14.11.11 4ugun (анимация мячика)
18.11.11 РГРТУ-Фильм (анимация логотипа Насти Чикарёвой и Жени Шапошникова)
??.01.12 Кто придумал (комикс)
??.01.12 EVO SDCC (+Shiru)
29.02.12 Экономьте трафик! (мультфильм) (+Вика Сарычева+Саша Шелухина+Даша Сергеева+Оля Шаталова)
??.03.12 Dizzzruptor demo (+HPRG)
07.06.12 Лисица и Мышонок (мультфильм) (+Оля Шаталова)
07.06.12 KOT border intro
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)