Просмотр полной версии : Разработка ZXOOM
Andrew771
24.01.2011, 11:04
Привет всем!
Сейчас разрабатываю игру в стиле Doom, уже почти сделан движок, см.приложенный файл. В нём можно погулять пока по небольшому лабиринту, клавиши q,a,o,p. Графика спрайтовая (не векторная), т.е. в памяти хранятся уже готовые отрисованные спрайты в стиле 3D, которые выводятся в нужное время в нужном месте движком. Сейчас имеются только кубы, которые, собственно, и видны в демке.
Так вот, хочу найти человека, который нарисует красиво спрайты. И, желательно, выдаст результат в нужном формате, хотя это и я могу, только долго. Все спрайты могут быть цветными, но слишком многоцветностью увлекаться не стоит.
Необходимы следующие:
1. Элементы карты (кроме кубов):
- колонна
- фонтан
- прозрачная ограда
- стена с надписью
- что-то еще, на ваше усмотрение...
Должны быть круглые или симметричные с четырех сторон, если смотреть сверху - это требование обязательно, т.к. память не резиновая. Размеры в знакоместах: 20х20, 16х16, 12х12, 8х8, 4х4, 2х2.
2. Враги с огнестрельным оружием (одного типа). Размеры в знакоместах: 20х20, 16х16, 12х12, 8х8, 4х4, 2х2. По две фазы движения: виды спереди, сзади, левым боком, правым боком.
3. Огнестрельное оружие игрока (одного типа). Две фазы: в спокойном состоянии, при выстреле. Максимальные размеры: 6х6.
4. Я не придумал еще, каким будет пол и потолок. Но должны быть однообразными и однотонными, т.к. время на вывод и память ограничены.
Памяти под все спрайты есть 8кб.
Формат спрайта (пример):
; заголовок спрайта - текстовая метка
SPR1
; количество знакомест
DEFB 3
; вертик.координата, гориз.координата, атрибуты знакоместа
DEFB 0,0,65
DEFB 0,1,65
DEFB 1,1,48
; байт маски, байт изображения - 8 раз для одного знакоместа
DEFB 0,255, 0,255, 0,255, 0,255, 15,248, 15,248, 31,224, 31,224
DEFB 0,255, 0,255, 0,255, 0,255, 15,248, 15,248, 31,224, 31,224
DEFB 0,255, 0,255, 0,255, 0,255, 15,248, 15,248, 31,224, 31,224
Такое вот предложение :v2_dizzy_vodka4:
Посмотрел, попробовал.
Что сказать, выбранная перспектива выглядит неестественно, может оттого что бы было кратно знакоместу. Стены боковые непонятно сбоку от тебя поворот или это стена так смотрится.
Заметно тормзит управление при поворотах. И это только голые стены. Если сюда добавить пяток врагов, да по маске, да прозрачную ограду и т.п. то вообще слайд шоу получится. А пока даже так недостаточно быстро. В эмуле поставил 140 тысяч тактов, как в 2-кратной безвайтовой турбе, тогда забегало гораздо плавнее. И еще неприятно при повороте мешьтешит перерисовка экрана - во фрейм не вмещается и на экране мусор мелькает. Это еще врагов нету, потом будет хуже. На реале не знаю как посмотреть - файл в tap, охренеть, может еще магнитофон на свалке поискать. Незачет.
Заявление о том что под спрайты 8 кбайт улыбнуло. Если при заявленных размерах спрайтов цитирую: Размеры в знакоместах: 20х20, 16х16, 12х12, 8х8, 4х4, 2х2 то простое перемножение для цветного (с атрибутами) дает 7956 байт - это для одной фазы, скажем в фас! А еще нужно вид с левого боку, вид с правого боку, они должны шевелиться как-нибудь, ну хоть самый мизер - две фазы на анимацию, а при движении нужно что б ногами шевелили... Думаю тут много килобайт понадобится. А еще стены с надписями, решетки прозрачные ( не вполне понимаю как на спектруме прозрачные сделать), оружие игрока, патроны, ну не знаю аптечки актуальны или нет и т.д. Не уверен что в 128 килобайт все это уместится.
Я бы посоветовал пересмотреть концепцию от начала и до конца. Потому что из того что есть ничего путного не выйдет. Вывод экрана делать быстрее, имхо размер игровой области экрана нужно уменьшить.
Думаю врядли найдется желающий порисовать графику для игры, которая никогда не будет доделана. Вообще соблазнить себе в проект художника довольно трудно. Мало заявить что вот мол "делаю, клянусть что доведу до конца, клянусь что это будет круто!"
Художника можно заполучить либо:
1) исходя из личной дружбы/симпатии/общих итересов
2) зажечь его идеей своего проекта, ну тут нужно так убедительно расписать все прелести, чтобы у него слюнка потекла, что бы он тебя штурмовал "когда мы уже начнем?"
3) если он тебе должен денег (ну или просто чувствует себя обязанным)
4) если ему что-то надо и ты это можешь ему предложить (как вариант -деньги)
5) эсетическая ловушка: рисуешь сам криво и убого. Все это видят, кого-то это покоробит и он захочет сделать получше. Плюсом этого варианта является то что уже понятно что именно и под каким ракурсом нужно нарисовать, потому что из описаний никогда не ясно что хочет заказчик - фашистов с автоматами, киборгов с бластерами, зверокроликов огнедышащих или кошек кавайных, невозможно ведь нарисовать то чего не представляешь. Тут еще очень важный момент - доброволец предложит сделать что-нибудь одно и маленькое - например только одну стену. НЕ ВСПУГНИ! Нужно поблагодарить, принять, похвалить (фидбэк необходим), заверить что если вдруг вдохновение будет и дальше, то будем рады. НО НЕ НАПИРАТЬ! Не клянчить! Если есть претензии, то не высказыавть больше одной за раз. Ну то есть хочешь что бы перерисовал голову и пистолет в другую руку - проси что нибудь одно. Ну а после того как он успешно сделает несколько вещей и сам уверится в том что у него получится - тогда дожимай.
Ну вот собственно, набредил тут, может завтра одумаюсь и сотру все это.
Andrew771
25.01.2011, 11:49
Спасибо, замечания дельные.
Стены сделал кратно знакоместу, чтобы можно было цветные объекты делать. Теперь вот из-за нехватки памяти под спрайты всё же оставлю один цвет (точнее, два) для стен и препятствий. Тогда можно и перспективу исправить. Хотя враги останутся цветными, их можно подогнать под знакоместа. Благодаря отказу от цветных стен карта 150х100 в памяти уменьшится в 2 раза, с 15 до 7.5кб (полбайта на одну клетку). Правда, это урежет и разнообразие возможных препятствий, но нехватка памяти всё равно не даст их много сделать. Если уж совсем не будет места, уменьшу саму карту до 100х100 (5 кб).
В программе предусмотрен вывод спрайтов из повторяющихся блоков, так что, на этом можно тоже существенно сэкономить память. Сейчас оптимизирую по блокам стены, чтобы занимали меньше места.
В общем, под спрайты увеличиваю место до 15 кб.
Скорость, на мой взгляд, приемлемая. Разрабатываю в эмуле под 3.5МГц. Конечно, как на писюке скорости не будет. А дискретность перемещений - издержка технологии, благодаря которой игра идет на целом экране (2 строки внизу только оставил пока пустыми, хотя и их можно заполнить при перерисовке перспективы). Это не векторная графика, поэтому плавности добиться невозможно. Зато можно выводить на весь экран за приемлемое время. А уменьшать до трети экрана, как в других подобных играх, не хочу. Должна же быть своя изюминка - возможно, первый 3D-шутер на целый экран на Спеке! :)
Скорость вывода на экран от количества врагов не упадет, т.к. и так все спрайты ближайших клеток выводятся сейчас, причем уже по маске. Просто, ближние закрывают дальние. Заморачиваться на высчитывании, кого выводить, а кого нет, не стал, т.к. объекты могут быть разных форм и видов. И смотреть, кто кого загораживает, и кого можно не выводить - сложно и займет еще память.
Формат файла с игрой могу любой сделать, который сохраняет эмулятор. Я пишу по традиции под чистый Спек 48к, фетиш такой. :)
Концепция игры пока такая:
- оружие игрока одного типа;
- патроны не ограничены и их не прорисовываем;
- при выстреле, чтобы понять, что это выстрел, мерцает всё вокруг;
- враг убивается после 3х выстрелов (хотя это возможно и подрегулирую);
- враги одного типа. Их AI простой: если игрок близко, то выбежать навстречу и стрелять. Если игрок убегает, то бежать за ним;
- враги движутся медленнее игрока в 2 раза. Стреляют по скорости одинаково с игроком;
- здоровье игрока можно пополнять аптечками на карте;
- мини-карта отсутствует
- цель игры - не убить всех, а найти выход из лабиринта!
В общем, трехмерный Lode Runner. :)
Название придумаю позже. Не Doom точно.
Клятв я не произносил, пока есть желание и время - пишу. Тем более, много уже сделано, так что останавливаться на полпути вряд ли захочется. Еще пока поковыряюсь в движке несколько дней-недель, если никто не откликнется, то найду в инете подходящие картинки и перерисую сам. :)
Управление надо стандартней сделать - WSAD и мышка :)
Andrew771
25.01.2011, 11:58
Клавиши управления можно будет переназначать. Мышку нафик при такой дискретности :)
Andrew771, а вы слышали, что существуют спектрумы с объемом озу более 48кб?
Andrew771
25.01.2011, 15:50
>Andrew771, а вы слышали, что существуют спектрумы с объемом озу более 48кб?
>Я пишу по традиции под чистый Спек 48к, фетиш такой. :)
Я пишу по традиции под чистый Спек 48к, фетиш такой. :)
То есть в вашей игре поддержки кемпстон-джойстика, ни мышки не будет?
А также она будет в виде tap с подгружаемыми уровнями?
И памяти под графику будет с гулькин х...вост?
В таком случае у вас получится жалкое подобие этого (http://www.worldofspectrum.org/infoseekid.cgi?id=0016957), имхо.
Andrew771
25.01.2011, 17:35
Кемпстон-джойстик уже поддерживается. Можно и им управлять сейчас (одновременно с клавиатурой). На своем железном спеке я так и делал. Сейчас на эмуле сам не могу проверить.
Уровень будет пока один огромный.
Памяти не меньше 15 кб под спрайты - мало?
3D Monster Maze:
- Игра была написана на языке BASIC.
- В игре для изображения лабиринта использовалось всего 22 псевдографических символа. Разрешение игры было 25х24 квадратных символа (с использованием разных символов для изображения одного «пиксела» эффективное разрешение удваивалось).
А теперь сравни с моей разработкой.
Кстати, пока не нашел саму игру 3D Monster Maze, у кого есть файлик, киньте плиз..
- цель игры - не убить всех, а найти выход из лабиринта!
В общем, трехмерный Lode Runner.
Название придумаю позже. Не Doom точно.
Вольфенштайн 3д?
Кстати, вот он, образец трехмерной графики на спектруме:
http://www.worldofspectrum.org/infoseekid.cgi?id=0017189
фашистов с автоматами, киборгов с бластерами, зверокроликов огнедышащих или кошек кавайных
Кавайных огнедышащих кошек с бластерными автоматами:v2_dizzy_mutant::v2_dizzy_arm y: Такого еще нигде не было:v2_thumb:
Вообще, мне кажется, что прикольно смотрелось бы что-то в духе геометрического примитивизма, но с серым градиентом, как в Дарксайде, например.
Кстати, пока не нашел саму игру 3D Monster Maze, у кого есть файлик, киньте плиз..
Вы не искали даже. http://www.worldofspectrum.org/infoseekid.cgi?id=0014612
Если бы вы искали, то на WOSе по запросу 3d monster maze" вы сразу бы получили искомое.
Andrew771
26.01.2011, 09:41
Спасибо за ссылку. Для Бейсика игра очень даже хорошая! Сам когда-то подобное пробовал писать.
К сожалению, нет промежуточных изображений при повороте, поэтому иногда сбивает с толку и дизориентирует. В моей игре есть.
Спрайты будут разнообразные, а не только голые стены.
Лабиринт будет намного больше, выход долго придется искать. Лабиринт не будет состоять из большого количества сообщающихся ветвей, чтобы не было множества альтернативных путей. Можно будет долго блуждать по неправильной ветви. В Monster Maze я нашел выход за 2 минуты. :)
---------- Post added at 09:41 ---------- Previous post was at 09:28 ----------
Вольфенштайн 3д?
Кстати, вот он, образец трехмерной графики на спектруме:
http://www.worldofspectrum.org/infos...cgi?id=0017189
Да, видел и играл. Хорошо сделана. И не только ее, еще какую-то давно, про древнеегипетские пирамиды что-то. Обе игры на треть экрана. Хочется на весь экран. :)
NovaStorm
26.01.2011, 12:13
>про древнеегипетские пирамиды что-то
Total Eclipse вероятно.
>Концепция игры пока такая:
С этого и нужно начинать и писать диздок. Мне например совсем не понятна игровая механика, да и остальное больше напоминает те же "корованы".
Andrew771
26.01.2011, 13:28
Total Eclipse вероятно.
Точно, она! Пасибо.
>Концепция игры пока такая:
С этого и нужно начинать и писать диздок. Мне например совсем не понятна игровая механика, да и остальное больше напоминает те же "корованы".
Что еще не понятно по игре?
древнеегипетские пирамиды что-то. Обе игры на треть экрана
Про пирамиды - Total Eclipse. Не на треть экрана, а больше, чем на половину. Она написана на движке Freescape. На нем же - Darkside, Driller, Terminator, Castle Master 1 и 2. Но даже при таком размере скорость рендера оставляет желать. Если сделать больше - пошаговая стратегия получится... Причем, насколько я понимаю, это не обойдешь - я где-то читал, что основное время тратится не на построение трехмерной графики, а на затирание уже нарисованной.
Что еще не понятно по игре?
элементы игровой механики (критичные для прохождения особенности геймплея), сеттинг (эльфы в лесу, домики деревянные..)
да и остальное больше напоминает те же "корованы".
Я джва года хочу такую игру ;)
NovaStorm
26.01.2011, 16:32
Что еще не понятно по игре?
Ну хотя бы с жанром определись, шутер ли это, или же всё-таки что-то с логикой, как упомянутый Lode Runner.
Хрен бы с ним, с полным диздоком, но представить себе сам процесс игры нужно. Надо понять, где игрок окажется, как это окружение будет ему преподносится, как и чем он будет с ним взаимодействовать и что от этого получать. И что вообще может сподвигнуть его играть? =)
Кстати неплохо прочистить представление об игре может создание мокапа "скриншота"-другого с изображением различных игровых ситуаций(коридоров маловато, да).
Привет всем!
Сейчас разрабатываю игру в стиле Doom, уже почти сделан движок, см.приложенный файл. В нём можно погулять пока по небольшому лабиринту, клавиши q,a,o,p. Графика спрайтовая (не векторная), т.е. в памяти хранятся уже готовые отрисованные спрайты в стиле 3D, которые выводятся в нужное время в нужном месте движком. Сейчас имеются только кубы, которые, собственно, и видны в демке.
Так вот, хочу найти человека, который нарисует красиво спрайты. И, желательно, выдаст результат в нужном формате, хотя это и я могу, только долго. Все спрайты могут быть цветными, но слишком многоцветностью увлекаться не стоит.
Может объединим наши усилия?
Управление: курсор плюс 0
Andrew771
26.01.2011, 20:25
Может объединим наши усилия?
Ого! Классная намётка твоей игры! Давай, конечно, объединимся.
Кажется, тот же принцип вывода - спрайтовый на 8 сторон?
---------- Post added at 20:25 ---------- Previous post was at 19:30 ----------
Нашел твой механизм построения движка: http://zx.pk.ru/showpost.php?p=35537&postcount=35
У меня всё-таки по-другому. Я сделал еще проще, не надо ничего рассчитывать по формулам, необходимые для вывода клетки уже заданы для каждой из восьми сторон (точнее, смещения до них от текущего положения игрока). Для каждой клетки - свой спрайт (точнее, группа спрайтов, в зависимости от значения в клетке). Естественно, стороны 0,90,180,270 градусов и стороны 45,135,225,315 градусов имеют одинаковые спрайты. На экран спрайты для клеток выводятся начиная с дальних клеток и заканчивая ближними - так строится полное изображение. Благодаря отсутствию математических расчетов удалось выводить игру на весь экран за приемлемое время.
Andrew771
27.01.2011, 16:51
>15кб хочу под карту
А что так много? Судя по "(150х100)" это будет битмап? Можно ведь сделать дерево со списком кусков комнат и объектов, должно получится меньше и наверное быстрее, ведь дерево для отсечения нужно будет так или иначе.
Сообщение от Andrew771: А про дерево со списком можешь рассказать подробнее на примере? Идея интересная, но пока не врублюсь, как...
Я имел в виду http://en.wikipedia.org/wiki/Quadtree , но сейчас мне уже кажется, что такое пожалуй будет слишком круто.
Идея по уменьшению карты в том, чтобы хранить разряжённый массив "комнат", для каждой из которых прописывалась бы видимость из них объектов и других комнат(+геометрия карты, из какой комнаты в какую можно попадать).
Это будет практически http://en.wikipedia.org/wiki/Portal_rendering
Уже уменьшил место под карту в 2 раза до 7.5кб (по полбайта на клетку).
А с деревом понял наконец, только это ж надо иметь список для каждой комнаты, коих будет раз в 8-10 меньше, чем самих стен. А список-то из не менее 8 стен... Я не буду делать огромных комнат, а сам лабиринт будет насыщенным (компактным), больших комнат или больших непроходимых областей не будет. Так что, ничего не выиграешь. Quadtree не сэкономит места в моем случае.
Портальный рендерер - поинтереснее, может пригодиться для отсечения невидимых спрайтов-клеток, чтобы их не выводить. Нашел в сети книгу А.В.Боресков "Графика трехмерной компьютерной игры на основе OpenGL", там очень хорошо всё описано, рекомендую всем. Думаю сейчас, как применить портальный рендерер, только не из заранее заданного дерева или списка граней (у меня его нет, как я написал выше), а рассчитывать на ходу для текущего положения. Возможно, позволит убыстрить вывод на экран за счет невывода закрываемых дальних клеток-спрайтов.
---------- Post added at 16:51 ---------- Previous post was at 16:23 ----------
Про пирамиды - Total Eclipse. Не на треть экрана, а больше, чем на половину. Она написана на движке Freescape. На нем же - Darkside, Driller, Terminator, Castle Master 1 и 2. Но даже при таком размере скорость рендера оставляет желать. Если сделать больше - пошаговая стратегия получится... Причем, насколько я понимаю, это не обойдешь - я где-то читал, что основное время тратится не на построение трехмерной графики, а на затирание уже нарисованной.
Наверно, на определение невидимых граней. Затереть-то просто и быстро :)
...Она написана на движке Freescape. На нем же - Darkside, Driller, Terminator, Castle Master 1 и 2...
Terminator?! На видел на движке freescape, кинь ссылочку, плиз
Ого! Классная намётка твоей игры! Давай, конечно, объединимся.
Кажется, тот же принцип вывода - спрайтовый на 8 сторон?
---------- Post added at 20:25 ---------- Previous post was at 19:30 ----------
Нашел твой механизм построения движка: http://zx.pk.ru/showpost.php?p=35537&postcount=35
У меня всё-таки по-другому. Я сделал еще проще, не надо ничего рассчитывать по формулам, необходимые для вывода клетки уже заданы для каждой из восьми сторон (точнее, смещения до них от текущего положения игрока). Для каждой клетки - свой спрайт (точнее, группа спрайтов, в зависимости от значения в клетке). Естественно, стороны 0,90,180,270 градусов и стороны 45,135,225,315 градусов имеют одинаковые спрайты. На экран спрайты для клеток выводятся начиная с дальних клеток и заканчивая ближними - так строится полное изображение. Благодаря отсутствию математических расчетов удалось выводить игру на весь экран за приемлемое время.
У меня тоже в игре выводятся чисто спрайты. Они рисуются не в самой игре, а заранее создаются по формулам с помощью нехитрой проги на Бэйсике. Простейшие расчеты подсказывают мне, что чтобы сделать нормальную игруху с поворотами на 45 градусов и 7-плановым изображением потребуется 1Мб памяти. Если же брать только 90 градусов и 5-плановое изображение, то теоретически можно влезть и в 128Кб. Во-вторых, ты собираешься делать аркаду или стратегию? Аркада, по-моему, на таком движке получится не очень, к тому же уже есть Цитадель и Wolfenstein 2004. Хотя они смотрятся и неплохо, играть скучно. А вот стратегия, вроде Return to Home-4, будет очень даже ничего.
Andrew771
31.01.2011, 10:59
Всё же я делаю аркаду. Цель игры - найти выход из огромного запутанного лабиринта. А убивать всех не обязательно, если только мешают пройти. Даже когда уничтожишь всех на своем пути, еще нужно поломать голову, чтобы найти выход. Еще раз повторю - это будет Lode Runner, только трехмерный и без кладов. Хочется именно создать запутанный большой лабиринт, тем более есть опыт по их рисованию на клетчатой бумаге - у нас такая развлекуха в школе была, кто нарисует запутаннее. :)
Всякой предыстории и фантастического сюжета не будет - терпеть не могу, да и место не позволяет. В других играх я всегда пропускаю эту заставочную муть, если можно. С фантастикой я завязал в 16 лет, интерес полностью пропал.
Заставка естественно будет, будет показываться на небольшом участке лабиринта симуляция прохождения.
А вот с размером спрайтов не понял у тебя - откуда такие безумные цифры? Я в 7 кб вместил все голые стены, еще освободил сейчас 7.5 кб, сжав карту в новый формат (полбайта на клетку). Теперь есть 15 кб - должно хватить под всё остальное. Повторяющиеся элементы в спрайтах хранятся только один раз, т.е. многие спрайты состоят из повторяющихся блоков.
Сейчас думаю над "портальным рендерингом", точнее, над адаптированием его для Спекки, чтобы убыстрить вывод на экран (не выводить перекрываемые спрайты, как сейчас). Пока моя идея состоит в том, чтобы выводить спрайты начиная с ближних (сейчас у меня наоборот), и для каждого знакоместа отслеживать флаг - было заполнено или нет. Если заполнено, то на это знакоместо не выводить следующие попадаемые спрайты. Не всё конечно просто, т.к. на граничные по спрайту знакоместа всё же нужно выводить и перекрываемый по маске спрайт. Это я уже продумал, как не сложно учесть.
NovaStorm
31.01.2011, 12:13
Пока моя идея состоит в том, чтобы выводить спрайты начиная с ближних (сейчас у меня наоборот), и для каждого знакоместа отслеживать флаг - было заполнено или нет. Если заполнено, то на это знакоместо не выводить следующие попадаемые спрайты.
Z-buffer получается =)
Структур данных я конечно не знаю, но
Это я уже продумал, как не сложно учесть.
по флагу наличия активной маски на знакоместе? Проверка на такое может съесть преимущество в выводе =\
Andrew771
31.01.2011, 12:33
по флагу наличия активной маски на знакоместе? Проверка на такое может съесть преимущество в выводе =\
Для каждого знакоместа в описании спрайта заранее ставить флаг - будет занято знакоместо на экране или нет. Для граничных знакомест спрайта ставить "не занято".
Хотя, у меня пока есть сомнения, дадут ли все эти методики большой выигрыш в скорости. Всё-таки, проверки этого z-буфера тоже время займут. К тому же 768 байт под него жалко.
Можно ужать в 96 байт (1 бит на каждое знакоместо), но тогда долго будет искаться нужный бит.
Можно использовать под буфер байты атрибутов экрана (виртуального), бит под ненужный flash. Но тогда перед выводом виртуального экрана на реальный необходимо будет все эти биты сбрасывать, что тоже займет время.
NovaStorm
31.01.2011, 14:52
Можно ужать в 96 байт (1 бит на каждое знакоместо), но тогда долго будет искаться нужный бит.
Не обязательно долго, зависит от способа задания координат, если из координат выгрызти смещение и нужные три бита, то их можно будет подставить вперёд по коду прямо в BIT b,(IX+d), где координаты могут пойти в IXL и d.
Andrew771
31.01.2011, 16:08
Спасибо за IX+d. :) Я его игнорировал часто, а здесь как раз уместен. Попробую написать на этих идеях в ближайшие дни. Посмотрим, что получится.
Расскажи поподробнее о распределении памяти. Можешь ли ты сейчас сделать демо, где вместо голых стен какая-нибудь текстура (например стена из кирпичей)? Сколько разных текстур вообще планируешь?
Про особенности своего движка расскажу позже (щас под рукой нет материалов).
Andrew771
01.02.2011, 10:28
Память сейчас так распределена:
24576-31488 - виртуальный экран
31500-39000 - карта лабиринта
39000-41000 - программа
41000-51200 - данные и спрайты
Память меньше адреса 24576 будет использована для заставки. Программа и спрайты, естественно, увеличатся.
Клетка карты может содержать максимум 16 значений. Сейчас задействованы 2 - пусто и сплошная стена. Планируется:
0 - пустота
1 - сплошная стена
2 - стена с окнами
3 - колонна
4 - бассейн (эффект воды 1)
5 - бассейн (эффект воды 2)
6 - труп
7 - враг стоит
8 - враг стреляет
9 - враг (фаза 1) вперед
A - враг (фаза 2) вперед
B - враг (фаза 1) влево
C - враг (фаза 2) влево
D - враг (фаза 1) вправо
E - враг (фаза 2) вправо
F - резерв
Задницей враг не будет поворачиваться, т.к. бегство не предусмотрено. :)
Т.е., элементами лабиринта будут: сплошная стена, стена с окнами, круглая колонна, круглый бассейн с движущейся водой. Для сплошных стен уже спрайты есть и заняли своё место в памяти. Для стен с окнами будут использованы многие блоки из сплошных стен, а окна - это просто дыры, так что памяти почти не займут. Колонны и бассейны будут круглыми, так что их нужно всего по 5 спрайтов разного размера, при поворотах их внешний вид не меняется. Вода в бассейне - отдельными спрайтами, причем у дальних бассейнов скорее всего не будет. Труп - 5 спрайтов. Враг в разных положениях - 8*5=40 спрайтов.
Т.к. я теперь решил использовать z-буфер для вывода на экран, то все маски отменяются - это в 1.7 раза сократит размер спрайтов.
Размеры спрайтов, предположительно, 2х2, 4х4, 8х8, 12х12, 16х16. От 20х20 останутся только отдельные куски. И то, это по максимуму. А ведь колонны тонкие, а бассейны низкие, так что уже не все знакоместа из перечисленных хранятся в памяти. Еще могут быть повторяющиеся блоки - сокращаем. Т.е., один тип спрайтов займет около 1кб.
Теперь приблизительно оценим размер (сплошные стены не учитываем уже):
стены с окнами - около 0;
колонны - 1 кб;
бассейны - 1 кб;
трупы - 1 кб;
враги - 8 кб.
Всего около 11 кб. Так что, всё уместится.
NovaStorm
01.02.2011, 11:02
А зачем состояния врагов хранить в карте? Там имхо этому не место.
>Т.к. я теперь решил использовать z-буфер для вывода на экран, то все маски отменяются
Как Z-буфер поможет избавится от маски? Мне кажется в лучшем случае можно сделать бит наличия маски на знакоместе или его строке.
null_device
01.02.2011, 11:22
Клетка карты может содержать максимум 16 значений.
А как, насчет точек входа\выхода, я понимаю, стартовую позицию, можно не отображать, но как "визуально" играющий поймет, что через n ходов он подойдет к выходу?!
---------- Post added at 15:22 ---------- Previous post was at 15:20 ----------
А зачем состояния врагов хранить в карте? Там имхо этому не место.
Логичнее только отметить наличие врага на карте, т.к. он "непроходим" и является своего рода "ходячим препятствием".
NovaStorm
01.02.2011, 12:41
>отметить наличие врага на карте
Я бы вообще приделал координаты врага к нему самому, а карту не трогал.
null_device
01.02.2011, 12:51
приделал координаты врага к нему самому, а карту не трогал
И "проверять" координаты всех "врагов", каждый "ход" на предмет - можно\нельзя пройти "клетку" (враги-то "непроходимы"), а если их десяток-другой?!
К тому же я и не говорил, что координаты и остальные "параметры" юнитов надо хранить на "карте".. просто по карте будет "видна проходимость" той или иной клетки, как для игрока, так и для "врагов".
Andrew771
01.02.2011, 14:30
А зачем состояния врагов хранить в карте? Там имхо этому не место.
1. Удобнее выводить всю сцену одной единой процедурой.
2. Не нужно проводить на каждом ходу проверки проходимости, стрельбы и вывода для всех врагов (а их, как было сказано, несколько десятков).
3. Ничего не выгадаешь в памяти, убрав врагов с карты. В два бита на клетку не уложишься, а в 3 - неудобно рассчитывать адрес и биты.
Вот к примеру несколько спрайтов вентилятора (вместе с масками). Всего спрайтов более 30. Объем около 12кб (маска хранится в запакованном виде). На хорошую игру таких наборчиков спрайтов надо будет около 30. Поэтому такие нескромные требования по памяти.
Andrew771
01.02.2011, 21:48
Еще я не ответил на пару вопросов.
Можешь ли ты сейчас сделать демо, где вместо голых стен какая-нибудь текстура (например стена из кирпичей)?
Могу, в нынешнем движке учтено. Только это уже будет отдельное значение клетки на карте и свои спрайты.
Как Z-буфер поможет избавится от маски? Мне кажется в лучшем случае можно сделать бит наличия маски на знакоместе или его строке.
Маски актуальны только для пограничных знакомест спрайта, их на экране не много. Хранить все маски или хотя бы флаги и маски в спрайте для этих знакомест поэтому теперь считаю расточительным. Лучше их высчитывать на лету для этих знакомест! Идеи, как это делать, вот тут: http://www.zxpress.ru/article.php?id=8041
---------- Post added at 21:48 ---------- Previous post was at 21:46 ----------
Вот к примеру несколько спрайтов вентилятора (вместе с масками). Всего спрайтов более 30. Объем около 12кб (маска хранится в запакованном виде). На хорошую игру таких наборчиков спрайтов надо будет около 30. Поэтому такие нескромные требования по памяти.
Да, если столько текстур, то 48к точно не хватит.
Andrew771
03.02.2011, 17:24
Как Z-буфер поможет избавится от маски? Мне кажется в лучшем случае можно сделать бит наличия маски на знакоместе или его строке.
Маски актуальны только для пограничных знакомест спрайта, их на экране не много. Хранить все маски или хотя бы флаги и маски в спрайте для этих знакомест поэтому теперь считаю расточительным. Лучше их высчитывать на лету для этих знакомест! Идеи, как это делать, вот тут: http://www.zxpress.ru/article.php?id=8041
Написал и отладил алгоритм вывода знакомест с проверкой незанятых знакомест. Сейчас спрайты переделываю под новый формат.
Теперь точно убедился, что маски нужно получать только автоматически. Т.к. мне нужно подсовывать дальний спрайт под ближний спрайт на граничных знакоместах. А как я найду маску для ближнего спрайта, если он уже давно выведен и никакой информации о нем на экране не храню?
В вышеприведенной статье про автомаски есть алгоритм их получения для знакоместа. Но хорошо бы как-то придумать для одного байта, возможно ли это?
Andrew771
07.02.2011, 13:28
Запал по написанию чё-то пропадает + мало свободного времени пока. Можь, опубликовать исходники и забить? Тем более, я смотрю, тут во Флейме все в основном :)
ты это,забудь эту идею:)флейм это лишь прикрытие для темных дел.все заняты своими проектами под спек и около него.:)
Andrew771
07.02.2011, 17:44
Да, хандру прочь! :)
Товарищ Jukov, может текстурами полноэкранными займешься? У тебя в демке красивые стены, можно скрестить проекты. :)
Ограничений по подгонке к знакоместам теперь никаких нет. Предполагаемую сетку перспективы прилагаю в файле. Глубина просмотра пусть будет 6. Стены пусть будут одного цвета. Формат спрайта сейчас таков:
SPRXXX ; имя спрайта
DEFB 4 ; количество занимаемых знакомест
DEFB 0,0,1 ; вертик.координата, гориз.координата, атрибуты знакоместа
DEFB 128,128,160,160,168,168,170,170 ; байты изображения знакоместа
DEFB 1,0,1
DEFB 170,170,170,170,170,170,170,170
DEFB 2,0,1
DEFB 170,170,170,170,170,170,170,170
DEFB 3,0,1
DEFB 170,170,168,168,160,160,128,128
Масок в описании спрайта нет, будут рассчитываться на лету. Причину этого указал ранее.
White_Hunter
08.02.2011, 19:37
есть пожелание... сделайте из нее RPG никто не играет в думы и вольфы на спеке...
это красиво да, но не играбельно... накрайняк можно сделать "аркадную вставку" битвы в экшен режиме :)
P.S. ....графика и сюжет и т.п. :)
обратите внимание на игруху твиньен прародителя диаблы1
http://www.mobygames.com/game/dos/fates-of-twinion/screenshots
Black_Cat
08.02.2011, 20:27
сделайте из нее RPG никто не играет в думы и вольфы на спеке...не слушай, делай 3D, здесь есть перспектива, а в 2D - ничего нового, одни повторения
White_Hunter
08.02.2011, 20:37
а что я сказал про 2д ?? :)
можно сделать пошаговую 3д...
Black_Cat
08.02.2011, 21:04
можно сделать пошаговую 3д... и зачем для этого нужен компьютер? В пошаговках компьютер вааще не нужен - бросай кости, да двигай фишки :) каменный век.. :)
Andrew771
08.02.2011, 22:21
Не волнуйтесь, ребята! Игра уже пошустрее работает - это я только оптимизировал имеющиеся процедуры вывода. Еще, что NovaStorm подсказал, сейчас доделываю, будет еще быстрее шевелиться. Так что, пошаговости тут никак не будет.
Всё-таки будет 3D-бегалка-стрелялка.
Andrew771
09.02.2011, 12:06
Всё, закончил оптимизацию и ввёл своеобразный z-буфер в программу. Посмотрите, теперь какая стала скорость, по сравнению с предыдущей версией (см.файл).
Black_Cat
09.02.2011, 14:08
Andrew771, а что и насколько можно было-бы сделать лучше/красивее/быстрее если бы тактовая была хотя-бы 7MHz, а ОЗУ 256kb?
Andrew771
09.02.2011, 14:55
Andrew771, а что и насколько можно было-бы сделать лучше/красивее/быстрее если бы тактовая была хотя-бы 7MHz, а ОЗУ 256kb?
Можно было бы тогда увеличить количество промежуточных положений, как я писал раньше, поворот на 22,5 градусов, а не на 45. Увеличить количество типов препятствий, количество типов врагов.
Глубину просмотра в принципе и сейчас можно увеличить, на скорость не скажется. Тогда дискретность перемещения не так будет в глаза бросаться. У Jukovской игры плавнее движение, хотя может кажется за счет трети экрана.
Вот графику красивую я не осилю, так что порисую, как умею. Взялся бы кто, быстрее бы дело пошло. А я бы писал пока дальше код на имеющихся кубах-болванках. :)
Black_Cat
09.02.2011, 15:47
Можно было бы тогда увеличить количество промежуточных положений, как я писал раньше, поворот на 22,5 градусов, а не на 45
Глубину просмотра в принципе и сейчас можно увеличить, на скорость не скажется. Тогда дискретность перемещения не так будет в глаза бросатьсявот! это очень важно! Для 3D ходилок самое важное - плавность перемещения, иначе это не игра, а мучение будет. Щас не хватает плавности перемещения где-то в 4 раза, и дискретности поворота в два раза. При этом если перемещение замедлится - это нормально, а вот для поворота замедление уже критично и нежелательно. И ещё один важный элемент - параллельный сдвиг вправо-лево - это надо обязательно. Вот при таких параметрах от ходилки уже получаешь кайф даже без сюжета, а чисто от удобства управления.
И прикидывай уже щас чтоб игра получилась легко масштабируемой, до возможностей 128/256k и турбо.. Для 3D - 48k это конечно спортивно как и хороший демомейкинг, но бесперспективно ввиду бесполезности
Andrew771
09.02.2011, 16:15
Щас не хватает плавности перемещения где-то в 4 раза, и дискретности поворота в два раза.
Перспективу перерисую, углубив на 2 уровня. В 4 раза уж не буду. :)
И ещё один важный элемент - параллельный сдвиг вправо-лево - это надо обязательно. Вот при таких параметрах от ходилки уже получаешь кайф даже без сюжета, а чисто от удобства управления.
Да, хорошая идея. Реализовать легко. Только с джойстиком как быть, нажимать доп.клавишу одновременно на клавиатуре?
И прикидывай уже щас чтоб игра получилась легко масштабируемой, до возможностей 128/256k и турбо.. Для 3D - 48k это конечно спортивно как и хороший демомейкинг, но бесперспективно ввиду бесполезности
Процедуры делаю все универсальными, так что изменение и наращивание в будущем карты и спрайтов пройдет почти без изменения кода. Правда, вряд ли я этим займусь после реализации на 48к. Хочется потом еще сделать RTS на 48к, типа игры Z. А исходники нынешней выложу, может кто захочет продолжить. :)
Black_Cat
09.02.2011, 16:33
Только с джойстиком как быть, нажимать доп.клавишу одновременно на клавиатуре?а кто в ходилки с джойстиком играет? :)
---------- Post added at 16:33 ---------- Previous post was at 16:20 ----------
Правда, вряд ли я этим займусь после реализации на 48к.а после и не надо :) , ты щас сразу делай две версии - 48 и 256 :) в параллель-то оно проще будет. 48 - для буржуев, 256 - для нас :)
NovaStorm
10.02.2011, 13:00
Стало ощутимо быстрее, но визуально ориентироваться трудно =)
Ну и про .ТАПок уже говорили, для выкладывания промежуточных версий уж лучше снапшот дать.
Да, хандру прочь! :)
Товарищ Jukov, может текстурами полноэкранными займешься? У тебя в демке красивые стены, можно скрестить проекты. :)
Ограничений по подгонке к знакоместам теперь никаких нет. Предполагаемую сетку перспективы прилагаю в файле. Глубина просмотра пусть будет 6. Стены пусть будут одного цвета. Формат спрайта сейчас таков:
SPRXXX ; имя спрайта
DEFB 4 ; количество занимаемых знакомест
DEFB 0,0,1 ; вертик.координата, гориз.координата, атрибуты знакоместа
DEFB 128,128,160,160,168,168,170,170 ; байты изображения знакоместа
DEFB 1,0,1
DEFB 170,170,170,170,170,170,170,170
DEFB 2,0,1
DEFB 170,170,170,170,170,170,170,170
DEFB 3,0,1
DEFB 170,170,168,168,160,160,128,128
Масок в описании спрайта нет, будут рассчитываться на лету. Причину этого указал ранее.
Готов помочь. Тока я не слова не понял из того, что ты написал выше. Расскажи поподробнее идею и что конкретно нужно сделать и на картинках покажи.
Andrew771
11.02.2011, 10:50
Готов помочь. Тока я не слова не понял из того, что ты написал выше. Расскажи поподробнее идею и что конкретно нужно сделать и на картинках покажи.
Да, хорошо, сейчас расскажу. Только сначала выкладываю очередную версию, по просьбам трудящихся, в формате SNA (см.файл). :) Вставил по-быстрому колонны, не до конца доделал, дальних колонн нет. Всё это, чтобы посмотреть и выявить недостатки. Во-первых, проступили кое-где "краевые" эффекты, о которых я писал выше - это где граничные клетки спрайтов накладываются друг на друга, там нужно высчитывать автомаску. Во-вторых, из-за слишком маленькой и быстро убывающей перспективы ближние колонны получились маленькими. Игроку кажется, что их можно пройти, а на самом деле нет. В общем, ближние колонны нужно рисовать толще, и ближние поля карты на экране перспективы должны быть огромными.
Jukov, я думаю, нужно сделать вот что. Сначала нарисовать сетку перспективы с глубиной 7 полей для полного экрана. Будет две сетки: для положения 0 градусов и для положения 45 градусов. А потом в получившиеся кубы сетки вписывать и создавать спрайты - стены, колонны, бассейны, враги в различных положениях, трупы.
Пример смотри в файлах perspectiva1 и perspectiva2 (рисовал по-быстрому, для примера) - в первом файле чистая сетка перспективы, во втором файле вписанный в один из кубов спрайт колонны. Так нужно создать спрайты для каждого куба сетки.
Если в спрайтах возможно делать повторяющиеся элементы-знакоместа, то это очень хорошо. Тогда в памяти они будут занимать меньше места.
Главное, сначала нарисовать каждый спрайт, а уж в нужный формат я сам могу сконвертировать.
Terminator?! На видел на движке freescape, кинь ссылочку, плиз
Сорри, терминатор от Беседки память запортил... А игра называется не терминатор, а Cyborg: Intrusion 00
http://www.worldofspectrum.org/infoseek.cgi?regexp=^Cyborg%3a+Intrussion+00+%3E+3 D$&pub=^Concrete+Digital+Designs$&loadpics=1
Andrew771
15.02.2011, 12:07
Очередная версия. Сделал:
- формирование автомаски на граничных клетках спрайтов;
- управление - теперь клавиши w,a,s,d;
- скольжение влево-вправо - клавиши o,p;
- огонь - клавиша Space, пока только мерцание экрана - имитация выстрела.
Краевые эффекты кое-где видны, но это уже виноваты мои спрайты в блоках. После перерисовки эффектов не будет.
Жду ваших замечаний и ответ Jukovа :)
Глянь в том ли направлении двигаюсь. Для начала один ближний вид
Andrew771
18.02.2011, 17:48
Глянь в том ли направлении двигаюсь. Для начала один ближний вид
Да, отлично! Всё правильно делаешь.
А сетку перспективы не стоит ли сначала переделать? А то мне кажется, что поля (кубы) слева и справа искаженные.
--
Я уже пишу алгоритмы перемещения и стрельбы врагов.
Да, отлично! Всё правильно делаешь.
А сетку перспективы не стоит ли сначала переделать? А то мне кажется, что поля (кубы) слева и справа искаженные.
--
Я уже пишу алгоритмы перемещения и стрельбы врагов.
А что такое сетка перспективы?
Вообще-то по уму должно быть так: рисуешь один фронтальный вид, а остальные спрайты по формулам создаются программно. И никаких проблем с искажениями. А то в ручную никакого времени их рисовать не хватит.
Andrew771
18.02.2011, 20:39
Сетка - это каркас из линий на экране, которые я тебе давал.
А вот твой подход еще лучше - автомасштабирование спрайтов. Делай тогда так, как тебе удобнее! Только как ты определишь, в какое место на экране выводить спрайт?
Сетка - это каркас из линий на экране, которые я тебе давал.
А вот твой подход еще лучше - автомасштабирование спрайтов. Делай тогда так, как тебе удобнее! Только как ты определишь, в какое место на экране выводить спрайт?
А на основе чего сейчас (на тех выложенных скринах) построена сетка перспективы? Можешь выложить спрайты имеющихся щас в проге сплошных стен (желательно один скрин - один спрайт)? Мне так будет проще отмасштабировать под них свою стену.
Andrew771
20.02.2011, 14:16
Сетка построена на глаз, произвольно. Брал точку в центре экрана с координатами 128,96 и вел от нее лучи к краям экрана "на глаз". В принципе, ее нужно поточнее нарисовать, т.к. искажены кубы слева, мне кажется. Попробую перерисовать сетку перспективы поточнее.
А текущие размеры спрайтов смысла нет брать, т.к. они были сделаны для экрана 32х20 знакомест. Мы же будем делать на весь экран 32х24.
Сетка построена на глаз, произвольно. Брал точку в центре экрана с координатами 128,96 и вел от нее лучи к краям экрана "на глаз". В принципе, ее нужно поточнее нарисовать, т.к. искажены кубы слева, мне кажется. Попробую перерисовать сетку перспективы поточнее.
А текущие размеры спрайтов смысла нет брать, т.к. они были сделаны для экрана 32х20 знакомест. Мы же будем делать на весь экран 32х24.
Весь экран - это конечно шикарно, но надо ведь будет куда-то выводить сведения о жизнях, оружии, карту лабиринта около игрока и т.д.
Jukov, а это накладывать сверху, проц позволяет, чего там экономить :)
Andrew771
20.02.2011, 21:41
Весь экран - это конечно шикарно, но надо ведь будет куда-то выводить сведения о жизнях, оружии, карту лабиринта около игрока и т.д.
Жизнь - одна, выводить не нужно. Оружие одного типа - выводить не нужно. Карты не будет - иначе смысл игры потеряется - найти выход. Выводиться будет только здоровье - пару знакомест поверх. В общем, оригинальный Doom - нам не указ. :)
Jukov, а это накладывать сверху, проц позволяет, чего там экономить
jemmini, почему такой пессимизм? Смотри последнюю версию, нормальная скорость передвижения. С Novastorm думали и сделали.
Без карты, с поворотами по 45 градусов, с однообразными текстурами (ибо если стены на весь экран, то в 128кб много не влезет), да ещё и в 3D... В общем будет очень легко запутатся.
Придётся рисовать карту на бумажке, а это прошлый век.
Andrew771
21.02.2011, 09:45
Ну млин, не понимаю, зачем еще и карта тут? Чтобы за 5 минут всё прошли? Смысл и цель игры - найти выход, а не искать и убивать врагов. Это не квест! У вас цель - быстрее пройти что ли? Время не будет учитываться, не волнуйтесь. Весь интерес в том, чтобы найти выход в запутанном лабиринте. Разнообразие комнат и коридоров гарантирую, даже с однообразными текстурами. Тем более, будут еще колонны и бассейны.
Представьте, что вы в реале попали в лабиринт где-нибудь в Египте или Греции. Кто вам даст сразу карту? :)
Никогда не понимал, зачем существуют книжки типа "Тайны прохождения" и т.п. - смысл играть, если кто-то уже всё прошел и всё расписал, что делать. Просто тупо механически безошибочно повторить?
Вот разозлюсь, и сделаю лабиринт самогенерирующимся. :)
P.S. Перспективу сейчас нарисую, в AutoCAD удобно, потом сконверчу в графику.
NovaStorm
21.02.2011, 11:05
Вот разозлюсь, и сделаю лабиринт самогенерирующимся.
Если имелась в виду генерация карты при запуске уровня - это здорово, даже если генерация будет из готовых кусков. А то можно и динамическое изменение карты делать в зависимости от перемещения =)
Ну млин, не понимаю, зачем еще и карта тут? Чтобы за 5 минут всё прошли?
подожди, я кажется начинаю понимать, почему ты так против карты.
я ж не имею в виду что карта должна быть открыта сразу вся.
надо как в Doom, чтоб по мере прохождения открывалась карта.
Вот разозлюсь, и сделаю лабиринт самогенерирующимся. :)
давно пора, кстати. сразу подымет интерес к игре.
Lethargeek
21.02.2011, 11:55
Еще немного - и получится нормальный рогалик ;)
Andrew771
21.02.2011, 12:14
Да, вы оба меня убедили делать самогенерирующийся лабиринт. Я и сам изначально так хотел, только во второй версии. Теперь лучше сделаем в первой! Алгоритм Дейкстры есть, но я хочу только с одним правильным маршрутом, надо подумать, как сделать. Возможно, и из готовых кусков.
Динамическое изменение карты лучше не делать - сложновато и не реалистично. :)
Карту открывать по мере прохождения - думал над этим. Придется еще один бит заводить для каждой клетки (видима/не видима) - не хорошо. Я, кстати, изменил размеры лабиринта, увеличил даже немного, теперь 128х128 (8192 байт) вместо 150х100 (7500 байт) - так легче высчитывать адреса клеток. Второй параметр может быть и не 128, так что будем регулировать, если не хватит места под спрайты. 2048 байт под биты видимости отдавать жалко. Нужно что-то придумать еще.
---------- Post added at 12:14 ---------- Previous post was at 12:08 ----------
Алгоритм Дейкстры для готовых кусков лабиринта - только что стукнуло в голову :)
NovaStorm
21.02.2011, 13:01
>Нужно что-то придумать еще.
Придумать конечно можно, но при таких объёмах данных код обращения к элементу массива будет настолько большим, что перекроет выигрыш.
ЗЫ: Хотяяя =) Может можно не хранить карту, а генерировать её в реалтайме?
Andrew771, а дейкстра чем поможет то? алгоритм дейкстры используется для поиска минимального пути в графе.
генерить лабиринт, а потом проверять на прохождаемость? медленно будет.
лучше делать так (пишу по памяти, так что где-то могут быть неточности; лучше найти в интернете подобный алгоритм):
1) есть поле размера W*H, W и H - чётные
2) рисуем границу
3) выбираем вход и выход - для этого убираем 2 граничных стенки (координаты либо [int(rand() * (w-1)) + 1, 0] либо [0, int(rand() * (р-1)) + 1] либо [..., h-1] либо [w-1, ...])
4) выбираем какую стенку надо добавить - горизонтальную либо вертикальную. например, горизонтальную. тогда y=int(rand() * (h-1) + 1) , size = int(rand() * ((w-2)/2) + 1) * 2
5) for x = 1 to w-2 step 2
6) if не_пусто(x, y) then next i (если дошли до конца, а всё занято, то надо выбрать другой y)
7) рисовать стенку от x,y до x+size,y. если в процессе рисования наткнулись на стенку, то надо стереть кубик до стенки. типа так (# - стенка которая уже есть, + - которую рисуем):
....#....
++++#....
....#....
превращается в:
....#....
+++.#.+++
....#....
8) goto 4
если держать список строк и столбцов, где ещё можно поставить стенку, то тогда в шаге 6 не надо будет выбирать новую случайную координату. вместо этого в шаге 4 y выбирается из списка (а значит там заведомо есть пустые места).
в результате получается всегда проходимый лабиринт, возможно с залами.
генерируется очень быстро.
из недостатков - более одного варианта прохождения.
Andrew771
21.02.2011, 14:48
алгоритм дейкстры используется для поиска минимального пути в графе
Тьфу, я перепутал фамилии. Я имел в виду алгоритмы Прима и Краскала. Вот туть, из книжки по Delphi: http://www.piter-press.ru/attachment.php?barcode=978594723853&at=exc&n=0 :) По моему, какой-то из них ты и описал. Читал когда-то про них теоретически. Только надо посмотреть теперь, они дают один вариант прохождения или нет...
Нужен именно один. Иначе игру пройти будет легко.
---------- Post added at 14:48 ---------- Previous post was at 14:44 ----------
Сейчас пока я занят рисованием перспективы, чтобы Jukov без дела не сидел. :) Тоже нетривиальная задача, искажения пока получаются на боковых кубах, слишком растянуты. Читаю теорию тут: http://shkola-izo.livejournal.com/#asset-shkola_izo-7623
Andrew771
21.02.2011, 17:32
Нарисовал сетку перспективы, в соответствии со всеми правилами построения (см. приложенный файл). Теперь еще нужно вторую сетку с видом под углом 45 градусов.
Jukov, тебе в каком формате бросить и что нужно написать? Координаты всех пересечений, размеры и т.п. - что конкретно? Я в AutoCAD точно могу измерить.
Сообщи размеры в пикселях всех фронтальных спрайтов (которые представляют из себя простые прямоугольники)
Andrew771
22.02.2011, 11:22
Прямоугольники вот:
длина-высота
150x112
66x50
38x29
27x20
21x15
17x13
14x11
плюс-минус 1 пиксель допускается.
Боковые трапеции нужны?
Andrew771
22.02.2011, 15:13
Хотяяя =) Может можно не хранить карту, а генерировать её в реалтайме?
Как я понимаю, мы говорим про мини-карту? Сама-то карта хранится уже.
Кстати, если генерить саму карту по ходу, то нужно хранить в точности то, где уже прошел игрок. Иначе при возвращении он не узнает, где был. :) В общем, всё равно приходится хранить основную карту.
Мини-карту, чтоб не хранить каждый ее бит в 2048 байтах, можно высчитывать на лету. Для этого, например, можно:
1. Запомнить все клетки, где был игрок. Точнее, даже не клетки, а, для экономии памяти, перемещения игрока от начальной позиции. По 2 бита на перемещение - 4 значения: вперед, назад, влево, вправо. Ессно, при возвращении в клетку, где уже был, создавать новое подмножество перемещений с запоминанием этой клетки. А еще - для большей экономии памяти - соседние посещенные клетки тоже сокращать. А уж по этим перемещениям высчитывать все окружающие клетки и их выводить на мини-карту. Теоретически, даже если игрок посетит все клетки лабиринта, всё равно получится меньше 2048 байт. Недостатки - слишком сложно для реализации и быстродействие будет хромать. Хотя, если мини-карту выводить только "по требованию", то пару-тройку секунд игрок может подождать. :)
2. Можно разбить лабиринт на условные квадраты, к примеру, 4х4 клетки. Тогда, если игрок посетил хотя бы одну клетку из квадрата, то весь квадрат виден на мини-карте. В памяти это займет, если по биту на квадрат, всего каких-то 128 байт! Недостаток есть небольшой - иногда будет видно частично то, что недоступно через стенку. :)
Боковые трапеции нужны?
Попозже. Надо пока подумать как их вообще сделать
Andrew771
22.02.2011, 15:54
Попозже. Надо пока подумать как их вообще сделать
Ну если не рисовать вручную, то нужно писать программу, можно на Бейсике. А можно и на PC, в чем умеешь.
Прямоугольники тупо масштабировать.
А трапеции - это повернутые прямоугольники. Т.е., чтобы получить трапецию, нужно исходный прямоугольник повернуть на угол вокруг оси Y в пространстве и отрисовать в проекционном виде. Угол задавать вручную. Формулы нужно найти для проекции :)
---------- Post added at 15:54 ---------- Previous post was at 15:37 ----------
В этой книге есть формулы, глава 11: http://vtrdos.ru/book/MASHGRAF.ZIP
фронтальные спрайты
150x112
66x50
38x29
27x20
21x15
17x13
14x11
NovaStorm
23.02.2011, 17:42
Как я понимаю, мы говорим про мини-карту?
Неа. Про большую "просто" карту.
Сама-то карта хранится уже.
Ну вот и сэкономить на ней памяти.
Кстати, если генерить саму карту по ходу, то нужно хранить в точности то, где уже прошел игрок. Иначе при возвращении он не узнает, где был. :)
Почему не узнает? Комнаты генерить как функцию от их координат на карте и начального seed'а для разных уровней. Трупы должны конечно исчезать, да, и с минимапой трудно, а уж как генерить проходимый лабиринт я вообще не предполагаю. Но память сэкономит =)
Andrew771
24.02.2011, 10:34
фронтальные спрайты
ЗдОрово! Спасибо!
Может, при прорисовке трапеций всё же привязываться к сторонам прямоугольников, а не к углу поворота? Так будет точнее. Тут уже даже на 1 пиксель ошибаться нельзя, иначе не будет плавной боковой стены из нескольких трапеций.
Мне кажется, легче их нарисовать вручную, в PC-шном редакторе - там операции масштабирования можно применять.
---------- Post added at 10:34 ---------- Previous post was at 10:26 ----------
Комнаты генерить как функцию от их координат на карте и начального seed'а для разных уровней. Трупы должны конечно исчезать, да, и с минимапой трудно, а уж как генерить проходимый лабиринт я вообще не предполагаю. Но память сэкономит =)
А коридоры, а комнаты с колоннами и бассейнами? Тогда нужно создать несколько их разновидностей - шаблонов. А в самой карте хранить расположение этих шаблонов. Генерить лабиринт не из клеток, как описано в книге, а из этих шаблонов. Т.е. за одну клетку брать один шаблон.
Но это так, теория. Сейчас лучше уже ничего не менять, по крайней мере, в первой версии. 8кб - не такие уж большие затраты памяти. Иначе разработка затянется еще на пару месяцев. Мне кажется, лучше выпускать минимально работоспособные версии, а в последующих уже наращивать. :)
Сообщи размеры трапеций, буду фотожопить
Andrew771
24.02.2011, 20:39
Трапеции (равнобедренные):
основание длинное - основание короткое - высота
192 - 112 - 53
112 - 50 - 41
50 - 29 - 14
29 - 20 - 6
20 - 15 - 3
15 - 13 - 2
13 - 11 - 2
64 - 50 - 28
50 - 29 - 42
29 - 20 - 17
20 - 15 - 9
15 - 13 - 6
13 - 11 - 4
38 - 29 - 33
29 - 20 - 28
20 - 15 - 15
15 - 13 - 10
13 - 11 - 7
27 - 20 - 34
20 - 15 - 26
15 - 13 - 13
13 - 11 - 9
Каждой трапеции по 2 экземпляра - "смотрящая" влево и вправо (зеркальное отражение).
Andrew771
25.02.2011, 17:31
На сегодня написал и отладил передвижения врагов в области 15х15 клеток вокруг игрока - отлаживал в текстовом виде. Работает нормально. Теперь стрельбу буду писать. Ну и вторую сетку перспективы рисовать.
--
Про генерацию и хранение лабиринта еще напридумал теорию. :)
Если создать паттерны (шаблоны) 8х8 клеток, то весь лабиринт 128х128 будет состоять из 16х16 кодов паттернов. Это в памяти займет 256 байт. Если создать 32 различных паттерна и получать их зеркальное отражение программно, то будет 64 различных паттерна (в среднем повторяться будут всего 4 раза на всю карту). Если одна клетка занимает в паттерне 2 бита (пусто, стена, колонна, бассейн), то все паттерны будут занимать 32х8х8/4=512 байт. И еще нужен будет буфер, в котором будут храниться и меняться все окружающие клетки игрока 3х3 паттерна (полбайта на клетку, как сейчас), т.е. 3х3х8х8/2=288 байт. Ну и плюс код, обслуживающий всё это.
Итого получаем: 256+512+288=1056 байт. Вместе с кодом - примерно 1.5 кб.
А сейчас 8 кб. Так что, около 6 кб можно освободить, если жизнь заставит :)
Теперь применяем алгоритм Прима или Краскала не к отдельным клеткам, а к паттернам. Ессно, их так хитро сделать, чтобы с 4х сторон могли (или не могли) соединяться ходами друг с другом. Лабиринт паттернов 16х16 сгенерится быстро, как семечки :)
Andrew771
02.03.2011, 17:37
Стрельба врагов готова!
Black_Cat
02.03.2011, 17:43
маладэц! :) но не забывай об улучшеной версии (углублённая в 2 раза перспетива и углы поворота для 7MHz, 256kb) :)
Andrew771
02.03.2011, 17:52
Спасиба! Надеюсь, Jukov рисует потихоньку. :)
Пока про улучшенную версию речи нет. Да и хочется после окончания на 48к приступить к игре "Цивилизация" - тоже давняя задумка. Исходники с подробными комментариями нынешней игры выложу в открытый доступ, так что можно продолжить, кто захочет.
Давайте лучше думать над названием игры! А то Doom как-то не подходит. :)
Давайте лучше думать над названием игры! А то Doom как-то не подходит
Zoom ?
Black_Cat
02.03.2011, 20:03
Zoom ? тоды уж ZXoom (ЗетИксум) - коротко, стильно и хлёстко! :)
---------- Post added at 19:10 ---------- Previous post was at 18:05 ----------
Andrew771, и ещё некоторые предложения для создания Doom'овсой атмосферы:
1) возможно сделать освещение местами помаргивающим, типо как в неисправной лампе дневного света?
2) как понимаю игра будет чёрно-белая.. Это можно несколько разнообразить:
- сделать некоторые помещения вааще без освещения.. но добавить возможность найти прибор ночного видения, при активации которого изображение становится видимым, но в чёрно-зелёном цвете
- когда жизнь на исходе, изображение становится чёрно-красным
- когда употребляешь аптечку с наркотиками, включается режим берсерка - чёрно-синий, при этом оружие заменяется на кастет или голые руки.. если это конечно возможно..
- когда берёшь неубиваемость - влючается повышенная яркость
- когда берёшь невидимость - цвета тона и фона меняются местами
Все вариации цветов могут быть задействованы одновременно, кроме красного+синий, т.к. аптечка добавляет жизни и красный исчезает, и на время действия наркотиков делает неуязвимым и сильным
---------- Post added at 19:47 ---------- Previous post was at 19:10 ----------
Да, ещё по поводу текстур для колонн - канэшна классичесие греческие колонны где-то и прокатят, но хотелось бы чёт более техногенного.. типо труб с поперечными рядами заклёпок и поперечными фланцевыми стыками на болтах
---------- Post added at 20:03 ---------- Previous post was at 19:47 ----------
В потолочных текстурах хорошо бы были лампочки - просто стилизованные диски, или прямоугольники.
Врзможны потолки по текстуре как подвесные а-ля армстронг, т.е. квадратиками с квадратными светильниками
Фактура боковых стенок коридоров:
- в промзоне - горизонтальные, периодические линии, а-ля сэндвич-панели
- в офисных коридорах где-то в метре от пола защитная полоса
По атрибутике:
- канэшна квадратные контейнеры - по сути те же закоулки коридоров
- бочки - по сути те же колонны
По врагам:
- автоматические пулемёты на треногах или на одной трубе от пола или от потолка
По транспортным средствам:
- мотодрезина в туннеле метро
- лифт
По сюжету - не Doom, а Half-Life
По перемещениям:
- параллельный перенос
- приседание
- подпрыгивание
- ускорение (бег)
Давайте лучше думать над названием игры
буква в букву: КОЛИДОРЫ :)
Black_Cat
02.03.2011, 20:13
буква в букву: КОЛИДОРЫ да уж, тыб ещё КАЛИДОРЫ написал :)
БК-0010,
когда употребляешь аптечку с наркотиками
Дааааааааа:)
Black_Cat
03.03.2011, 12:45
Totem, ты что в Doom не играл? :)
БК-0010,
играл конечно
политкоректней "стимулятор"
ладне флуд это все
Andrew771
03.03.2011, 14:04
Zoom ?
тоды уж ZXoom (ЗетИксум) - коротко, стильно и хлёстко!
Круто! Мне нравится! :)
Andrew771, и ещё некоторые предложения для создания Doom'овсой атмосферы:
1) возможно сделать освещение местами помаргивающим, типо как в неисправной лампе дневного света?
2) как понимаю игра будет чёрно-белая.. Это можно несколько разнообразить:
- сделать некоторые помещения вааще без освещения.. но добавить возможность найти прибор ночного видения, при активации которого изображение становится видимым, но в чёрно-зелёном цвете
- когда жизнь на исходе, изображение становится чёрно-красным
- когда употребляешь аптечку с наркотиками, включается режим берсерка - чёрно-синий, при этом оружие заменяется на кастет или голые руки.. если это конечно возможно..
- когда берёшь неубиваемость - влючается повышенная яркость
- когда берёшь невидимость - цвета тона и фона меняются местами
Все вариации цветов могут быть задействованы одновременно, кроме красного+синий, т.к. аптечка добавляет жизни и красный исчезает, и на время действия наркотиков делает неуязвимым и сильным
Неубиваемость и невидимость можно сделать. А вот помаргивания и изменения цветов наверно нет, т.к. помаргивание используется для стрельбы - всё окрашивается в красный цвет, см. последнее демо.
Прибор ночного видения - может тогда уж полурастворившееся изображение? А то зеленое ничего не дает качественно нового.
Да, ещё по поводу текстур для колонн - канэшна классичесие греческие колонны где-то и прокатят, но хотелось бы чёт более техногенного.. типо труб с поперечными рядами заклёпок и поперечными фланцевыми стыками на болтах
Да, с кирпичными стенами греческие колонны не катят. Jukov, подумай над этим и прояви творчество. :)
В потолочных текстурах хорошо бы были лампочки - просто стилизованные диски, или прямоугольники.
Врзможны потолки по текстуре как подвесные а-ля армстронг, т.е. квадратиками с квадратными светильниками
Думаем над этим.
Фактура боковых стенок коридоров:
- в промзоне - горизонтальные, периодические линии, а-ля сэндвич-панели
- в офисных коридорах где-то в метре от пола защитная полоса
По атрибутике:
- канэшна квадратные контейнеры - по сути те же закоулки коридоров
- бочки - по сути те же колонны
Это сделать на 48к невозможно, т.к. полбайта на клетку карты, все значения забиты. И под спрайты место ограничено.
По врагам:
- автоматические пулемёты на треногах или на одной трубе от пола или от потолка
Я думаю, как в CounterStrike омоновцы. Выдрать спрайты несложно из моделей для CS. Враги только одного типа.
По транспортным средствам:
- мотодрезина в туннеле метро
- лифт
Такого не будет, ходим только своими ногами.
По перемещениям:
- параллельный перенос
уже есть, клавиши o,p.
- приседание
- подпрыгивание
незачем. Да и спрайтов не напасёшься.
- ускорение (бег)
итак максимум из Спекки выжимаем по скорости. А замедление не нужно.
В принципе, многие пожелания можно сделать для версии 256к. :)
КОЛИДОРЫ
Ах-ха-ха :) Это неофициальное название игры будет, типа как "рогалик" для Rogue. :)
Andrew771
03.03.2011, 17:41
Нате вам рогалик - это то, что осталось от игры (см. файл). :v2_dizzy_roll: Шютка. Это отладочная версия.
Вы управляете буквой P (клавиши w,s,o,p), за вами гоняются и стреляют другие буквы латинского алфавита, изображающие врагов (экран малясь мерцает при стрельбе). А некоторые буквы даже изображают препятствия. Вы ответить огнем не можете пока. :)
Буквы такие:
B - труп
C - аптечка
D - бассейн
E - колонна
F - сплошная стена
G - враг стоит
H - враг (фаза 1) вперед
I - враг (фаза 1) назад
J - враг (фаза 1) влево
K - враг (фаза 1) вправо
L - враг стреляет
M - враг (фаза 2) вперед
N - враг (фаза 2) назад
O - враг (фаза 2) влево
P - враг (фаза 2) вправо
Оцените интеллект дурачков :)
буква в букву: КОЛИДОРЫ :)
xxx
Black_Cat
04.03.2011, 17:30
А вот помаргивания и изменения цветов наверно нет, т.к. помаргивание используется для стрельбы - всё окрашивается в красный цвет, см. последнее демо.это не хорошо, давай попробуем придумать что-то лучше.
Как щас осуществляется прицеливание в стрельбе? Просто в центр экрана? И какое используется оружие и видны ли трассы от снарядов?
---------- Post added at 17:25 ---------- Previous post was at 17:22 ----------
Прибор ночного видения - может тогда уж полурастворившееся изображение? А то зеленое ничего не дает качественно нового.оно и не должно давать ничего нового, а просто индицировать работу прибора ночного видения, а вся фишка в том, чтоб найти этот прибор, без которого не пройти тёмный участок, т.к. враги в темноте хорошо видят.
---------- Post added at 17:30 ---------- Previous post was at 17:25 ----------
может тогда уж полурастворившееся изображение?имхо зачем усложнять там где не надо, лучче там где надо усложнить - типо добавить новыхвозможностей из перечисленных :)
Andrew771
04.03.2011, 17:40
Как щас осуществляется прицеливание в стрельбе? Просто в центр экрана? И какое используется оружие и видны ли трассы от снарядов?
Сейчас просто - если точно впереди враг и мы стреляем, то однозначно попадаем. Если враг левее или правее, то не попадаем. Трассы от снарядов не видны, только мерцание всего экрана. См. предпоследнюю здесь выложенную версию.
Про прицеливание хорошую идею подал, подумаю.
оно и не должно давать ничего нового, а просто индицировать работу прибора ночного видения, а вся фишка в том, чтоб найти этот прибор, без которого не пройти тёмный участок, т.к. враги в темноте хорошо видят.
Хорошая фишка, тоже подумаю, как сделать.
имхо зачем усложнять там где не надо, лучче там где надо усложнить - типо добавить новыхвозможностей из перечисленных
Ну просто это вроде несложно сделать, зато красиво будет.
А остальные возможности требуют больше памяти и скорости повыше.
Я сегодня написал стрельбу игрока (строго вперед), попадание и убийство врагов, подбор аптечек и учет здоровья.
Jukov, напиши, как у тебя дела. Картинка твоя последняя суперская :)
Black_Cat
04.03.2011, 18:18
Я думаю, как в CounterStrike омоновцы. Выдрать спрайты несложно из моделей для CS. Враги только одного типа.имхо луцче импы, стреляющие огненными зарядами, или летающие в воздухе какодемоны из Doom. А вааще конечно это определяется сценарием, он есть?
---------- Post added at 17:58 ---------- Previous post was at 17:45 ----------
По транспортным средствам:
- мотодрезина в туннеле метро
- лифт
Такого не будет, ходим только своими ногами.почему, реализация же вроде осуществима в рамках имеющихся возможностей? Лифт - это просто закрывающаяся комната - вошёл на одном этаже, вышел на другом. Дрезина - это неподвижная текстура пола при движущихся текстурах стен коридора. Едет автоматом от и до, по сути тот же лифт, токо с движущимися стенами и потолком. Для упрощения можно сделать выход не на открытую платформу, а через дверь.
---------- Post added at 18:03 ---------- Previous post was at 17:58 ----------
- ускорение (бег)
итак максимум из Спекки выжимаем по скорости. А замедление не нужно.дык ускорение у тя уже было сделано в первой версии с малой разрядностью глубины перспетивы. Нельзя это переключать при беге?
---------- Post added at 18:18 ---------- Previous post was at 18:03 ----------
Если оружие видно в виде спрайта с рукой внизу экрана, то есть ахринительная идея оружия, на два поряда луцче чем щас, и при этом ещё и быстрее в обработке, т.к. не требует изменения всех атрибутов экрана, а только нескольких :)
Jukov,
Миниатюры
левша и из вольфа опять:)
Black_Cat
04.03.2011, 19:37
левша и из вольфа опятьв DOOM'е тоже левша
Black_Cat
05.03.2011, 02:25
Значит, иллюстрирую более лучшую идею оружия. Узнаёте? :) Да, BFG-9000 :) , большая ё........ пушка :) .
Объясняю почему - у нас токо одно оружие, поэтому единственный способ его хоть как-то разнообразить - это придумать ему разные режимы стрельбы. Дык вот, у BFG будет три режима:
- лучевой режим (типо лазер) - действует мгновенно на любых расстояниях (со соростью света), не требует внешних энергетичесих элементов, не требует upgrade BFG, самозаряжается энергией вакуума, стрелять можно непрерывно импульсами, но мощность слабая.
- режим плазмоидов (энергетических сгустов) - не требует внешних энергетичесих элементов, НО!! требует upgrade BFG, состоящем в установке дополнительных аумуляторов энергии, самозаряжается энергией вакуума, стрельба прерывная, отдельными сгустками энергии - плазмоидами, которые летят относительно медленно, при падении мощности аккумуляторов ниже определённого предела - переходит в лучевой режим, мощность большая, дальность не ограничена, но плазмоид летит долго и враг может увернуться. Стрельба может идти очередями или единичными выстрелами. Враги стреляют только плазмоидами и только одиночными выстрелами.
- режим мегаплазмоида - сходен с действием оригинального BFG-9000 - ТРЕБУЕТ!!! внешних энергетичесих элементов, которые ещё надо найти, требует upgrade BFG, состоящем в установке дополнительных аумуляторов энергии, НЕ!! самозаряжается энергией вакуума, стрельба одиночная, отдельными сгустками энергии - мегаплазмоидами, которые летят относительно медленно и не далеко, и там взрываются, либо взрываются при встрече с более близким препятствием (если это реализуемо), при падении мощности аккумуляторов ниже определённого предела - переходит в лучевой режим, мощность самая большая, предназначен только для близкого боя против кучи врагов. При взрыве мегаплазмоида все биологические объекты, у которых собственная частота энергии вакуума не синхронизирована с частотой плазмоида - взрываются. Сам BFG, когда генерит мегаплазмоид, синхронизирует частоту его поля с человеком-носителем, поэтому для стреляющего это оружие безопасно.
На картинке - спековский экран и стреляющий BFG в лучевом режиме. Стрельба имитируется только атрибутами, установкой всегда в одни и те же знакоместа экрана одинаковых цветов бумаги и чернил: R,r=1, B,b=1, G,g=0, Br=1. Получаем ярко фиолетовый цвет. Такая стрельба меньше грузит процессор, т.к. изменяются атрибуты не всего экрана. В лучевом режиме стельба как короткая вспышка всех закрашенных знакомест. В режимах плазмоидов - вылетает квадрат, уменьшающийся по мере удаления.
BFG выбран не от балды, т.к. нам надо имитировать сужение трассы от снаряда в перспективе, а в распоряжении у нас токо атрибуты, т.е. знакоместа. И чтоб имитировать сужение трассы знакоместами, надо изначально очень широкую трассу, т.е. само оружие тоже должно быть очень широким, а BFG как раз очень широкий.
Насамделе BFG называется конечно не так, а "АЭВ" - аккумулятор энергии вакуума. И это изначально вовсе не оружие, а лабораторное оборудование - часть прототипа установки по отбору энергии вакуума.. :) Но это уже детали сценария.. :)
Black_Cat
05.03.2011, 03:41
Переход на такое оружие позволяет отказаться от принятого щас способа стрельбы и индикации попадания в героя, и реализовать ранее предложенный метод индикации критического уровня жизни и помаргивания неисправных ламп.
При этом предлагается попадание в героя индицировать коротой красной вспышкой бордюра, а взятие аптечки и разных предметов - комбинациями цветов бордюра кроме красного.
Andrew771
05.03.2011, 10:22
почему, реализация же вроде осуществима в рамках имеющихся возможностей? Лифт - это просто закрывающаяся комната - вошёл на одном этаже, вышел на другом. Дрезина - это неподвижная текстура пола при движущихся текстурах стен коридора. Едет автоматом от и до, по сути тот же лифт, токо с движущимися стенами и потолком. Для упрощения можно сделать выход не на открытую платформу, а через дверь.
Этажей в игре нет, лабиринт 128х128, по полбайта на клетку, т.е. весь занимает 8192 байт.
Значения полубайта клетки:
0 - пустота
1 - труп
2 - аптечка
3 - бассейн
4 - колонна
5 - сплошная стена
6 - враг стоит
7 - враг (фаза 1) вперед
8 - враг (фаза 1) назад
9 - враг (фаза 1) влево
A - враг (фаза 1) вправо
B - враг стреляет
C - враг (фаза 2) вперед
D - враг (фаза 2) назад
E - враг (фаза 2) влево
F - враг (фаза 2) вправо
Все значения заняты. Бассейн пришлось сделать одним значением, фазы воды будут переключатся по отдельному флагу, который будет меняться при каждом ходе. Все фазы врагов хранятся на карте. Иначе пришлось бы каждый раз на каждом ходе проверять координаты каждого - сильно упало бы быстродействие. Даже цель игры, куда должен дойти игрок, не хранится теперь на карте, будет проверяться и выводиться программно. Аптечку можно сделать не аптечкой, а группой приборов (аптечка, прибор ночного видения, разные виды оружия и т.д.) - конкретный тип придется проверять программно по координатам. Но слишком много типов и много приборов нельзя, иначе упадет быстродействие.
Больше я не вижу, что еще можно впихнуть в значение клетки.
Не забывайте еще, что для каждой фишки нужна куча спрайтов от маленького до большого под двумя углами.
Дверь - это целых две фазы (откр./закр.). Как впихнуть на карту? Как типы прибора? :)
На лифте ехать некуда - лабиринт одноэтажный.
Дрезина - что принципиально дает? И опять же, как ее закодируешь на карте?
имхо луцче импы, стреляющие огненными зарядами, или летающие в воздухе какодемоны из Doom. А вааще конечно это определяется сценарием, он есть?
Сценария нет и не будет - это не RPG. Как в Lode Runner. Для меня он больше является ориентиром, чем Doom. От Doom только трехмерный вид и частично стрельба. Я бы всё-таки хотел человеков-врагов. Не хочется фантастики. :) Единственно, нужно подумать, что будет целью игры, куда придет игрок, и как будет выглядеть. Предлагайте.
дык ускорение у тя уже было сделано в первой версии с малой разрядностью глубины перспетивы. Нельзя это переключать при беге?
Был тормозной вывод на экран спрайтов на Капульцевических процедурах (это из книги "Как написать игру на ассемблере"). Благодаря нашим с Novastorm идеям, я переписал полностью алгоритм - заметно ускорилось. А теперь ты хочешь сделать искусственное замедление? ИМХО, очень заторможенно и некрасиво (хотя в 1997 г., когда я написал первую версию, мне так не казалось). :)
иллюстрирую более лучшую идею оружия
Идея с разными видами и быстродействием оружия понравилась. Подумаю теперь над этим, чтобы разнообразить игру.
NovaStorm
05.03.2011, 11:41
>Сценария нет и не будет - это не RPG
Тут даже не сценарий, а хотя бы вселенную представить, будущее/прошлое, техника/магия. Ну и мотивацию персонажа, с чего он сюда попал, и зачем блуждает.
Лифты, каталки - они же фактически телепорты по уровню. Так например в Дюке3д было сделано. В результате при фактически плоской карте, есть иллюзия третьего измерения.
Andrew771
05.03.2011, 12:10
Тут даже не сценарий, а хотя бы вселенную представить, будущее/прошлое, техника/магия. Ну и мотивацию персонажа, с чего он сюда попал, и зачем блуждает.
Мотивацию придумаю. :)
Лифты, каталки - они же фактически телепорты по уровню. Так например в Дюке3д было сделано. В результате при фактически плоской карте, есть иллюзия третьего измерения.
Это уже интересней. Только теперь как бы не упростить прохождение. Значит, при генерации лабиринта нужно это учитывать, пока не знаю, как.
Black_Cat
05.03.2011, 12:16
Тут даже не сценарий, а хотя бы вселенную представить, будущее/прошлое, техника/магия. Ну и мотивацию персонажа, с чего он сюда попал, и зачем блуждает.
Не хочется фантастики
вааще у мну практицки это всё уже есть :) , если нада - могу изложить.. но это всё-таки фантастика, при том с добротным сюжетом :) ..иначе - невозможно
Andrew771
05.03.2011, 12:28
вааще у мну практицки это всё уже есть , если нада - могу изложить.. но это всё-таки фантастика ..иначе - невозможно
Давай.
А Jukov-то захочет это всё рисовать? А? :)
Black_Cat
05.03.2011, 14:23
Аптечку можно сделать не аптечкой, а группой приборов (аптечка, прибор ночного видения, разные виды оружия и т.д.) - конкретный тип придется проверять программно по координатам. Но слишком много типов и много приборов нельзя, иначе упадет быстродействие.А вааще, есть предложение некоторые предметы складывать в рюкзак, а потом листать содержимое рюкзака спец клавишами, как это в стрелялках-ходилках обычно делается. Каждому предмету в рюкзаке поставить в соответствие цвет бордюра, который будет меняться при переборе содержимого.
Типы приборов:
1) аптечка белая (в рюкзак не берётся)
2) аптечка чёрная (с наркотой, в рюкзак не берётся)
3) доп. акумулятор для BFG (в рюкзак не берётся)
4) энергетичесий заряд (в рюкзак не берётся)
5) прибор ночного видения (берётся в рюкзак, предмет №1)
6) неубиваемость, или точнее - защита (armor) (в рюкзак не берётся)
7) невидимость - одноразовый спецприбор, является upgrade BFG. Активируется подключением BFG к стационарному компьютеру, на ходу включить его не возможно (поэтому в рюкзак не берётся)
8) ключи (берутся в рюкзак, предмет №2,3,4)
---------- Post added at 14:23 ---------- Previous post was at 12:49 ----------
Соответствие цвета бордюра (кратковременный цвет может на короткое время заменять любой цвет бордюра):
чёрный - фоновый цвет
красный (кратковременный) - попадание выстрела в героя
фиолетовый (кратковременный) - подбор предмета в рюкзак
синий (кратковременный) - подбор аптечки
зелёный (кратковременный) - подбор неубиваемости
Постоянный цвет (вызывается при листании содержимого рюкзака, исчезает после выбора предмета):
фиолетовый (постоянный) - выбор предмета №1 в рюкзаке
голубой (постоянный) - выбор предмета №2 в рюкзаке
жёлтый (постоянный) - выбор предмета №3 в рюкзаке
белый (постоянный) - выбор предмета №4 в рюкзаке
NovaStorm
05.03.2011, 14:31
>выбор предмета №1 в рюкзаке
>(постоянный)
УБИВАТ! Не надо постоянно цвет бордюра менять. Если уж делать настолько фичастую игру, то статусбар на 2-4 знакоместа снизу будет вполне в тему, что и рендеринг ускорит.
А с кучей подбираемых бонусов не справится текущее хранение карты.
С её текущим форматом кстати, сколько клеток карты рендерится в видимый экран?
Black_Cat
05.03.2011, 14:44
Ещё есть идея про статус бар, не знаю осуществимая или нет, индицировать жизнь, защиту и энергию пушки на дисплее BFG, т.к. другого места на экране быть не может
---------- Post added at 14:42 ---------- Previous post was at 14:36 ----------
>выбор предмета №1 в рюкзаке
>(постоянный)
УБИВАТ! Не надо постоянно цвет бордюра менять. Если уж делать настолько фичастую игру, то статусбар на 2-4 знакоместа снизу будет вполне в тему, что и рендеринг ускорит.зачем статус бар, если бордюр индицирует токо кратковременные действия, при том в случае рюкзака - никак к карте не привязанные и вааще на ресурсы игры никак не влияющие, в т.ч. на рендеринг.
---------- Post added at 14:44 ---------- Previous post was at 14:42 ----------
А с кучей подбираемых бонусов не справится текущее хранение карты.
Аптечку можно сделать не аптечкой, а группой приборов (аптечка, прибор ночного видения, разные виды оружия и т.д.) - конкретный тип придется проверять программно по координатам. Но слишком много типов и много приборов нельзя, иначе упадет быстродействие.
8 предметов
NovaStorm
05.03.2011, 14:58
>на дисплее BFG
Ну твоя БФГа большая, в 10х4 знакомест можно много чего вывести, даже в цвете.
Andrew771
05.03.2011, 15:03
С её текущим форматом кстати, сколько клеток карты рендерится в видимый экран?
35.
Рюкзак с бонусами не хочется делать. Хотя его можно было сделать на отдельном экране, вызываемом по клавише. Отвлекает от основной игры. Да и смысл менять оружие, если враги на всей карте одинаковые и одинаково стреляют. Прорисовывать полёт снарядов не получится - формат карты не позволяет и скорость, пока он долетит до дальней клетки, 7 ходов пройдет. Можно только разовый выстрел прорисовывать, это сделаем.
Прибор ночного видения и невидимость можно сделать.
Бордюр пусть черным будет всегда. Иначе разноцветный - некрасиво. А мигание тоже не надо - с выстрелом можно перепутать. Подбор приборов или аптечки можно выводить отдельным спрайтиком-знакоместом поверх изображения в правом верхнем углу (вместе со здоровьем). Подбор любого прибора или аптечки отменяет действие предыдущего.
Black_Cat
05.03.2011, 15:04
мигание бордюра нужно как заменитель звука. Я конечно не в курсе как дела обстоят со звуками, но вывод в спикер сам по себе очень ресурсоёмок, и у мну есть опасения, что Z80 не осилит ещё и звуки выводить
Andrew771
05.03.2011, 15:06
Кратковременные щелчки разной высоты нормально - нам большего и не надо.
Black_Cat
05.03.2011, 15:18
Рюкзак с бонусами не хочется делать. Хотя его можно было сделать на отдельном экране, вызываемом по клавише.сложно - много тактов занимает смена экрана, а бордюр меняется мгновенно
---------- Post added at 15:15 ---------- Previous post was at 15:10 ----------
Прорисовывать полёт снарядов не получится - формат карты не позволяет и скорость, пока он долетит до дальней клетки, 7 ходов пройдет. Можно только разовый выстрел прорисовывать, это сделаемтоды полёт можно имитировать, т.е. по сути это будет разовый выстрел, который не зависит от дальности до предмета, но выглядеть будет как поступательное движение удаляющейся плазмы. К карте это абсолютно не привязано и всегда будет выполняться единообразно, а движение имитируется положением и размером засвеченных знакомест.
---------- Post added at 15:18 ---------- Previous post was at 15:15 ----------
Бордюр пусть черным будет всегда. Иначе разноцветный - некрасиво. А мигание тоже не надо - с выстрелом можно перепутать.с попаданием перепутать нельзя - оно красное. Бордюр и будет всегда чёрным, цветным он становится либо кратковременно, либо на время листания рюкзака
Andrew771
05.03.2011, 15:19
Рюкзак нафик. Бонусов не будет. Подбор прибора/аптечки/оружия отменяет действие предыдущего.
Black_Cat
05.03.2011, 15:21
Подбор приборов или аптечки можно выводить отдельным спрайтиком-знакоместом поверх изображения в правом верхнем углу (вместе со здоровьем). Подбор любого прибора или аптечки отменяет действие предыдущего. а наложение доп. спрайтов разве не затормозит игру, не лучше ли на BFG выводить+бордюр? Всё-таки BFG - это единственный спрайт, который кладётся поверх всего, и имхо больше не надо. А бордюр - это как второй экран у DS
---------- Post added at 15:21 ---------- Previous post was at 15:20 ----------
отменяет действие предыдущего. это как?
Andrew771
05.03.2011, 15:30
а наложение доп. спрайтов разве не затормозит игру, не лучше ли на BFG выводить+бордюр?
одно знакоместо очень быстро.
отменяет действие предыдущего.
это как?
Подобрал оружие - оно становится, предыдущее исчезает. Подобрал прибор ночного видения - прибор невидимости, если был, исчезает. Выбрать из подобранных ничего не можешь. Аптечки только на здоровье влияют.
---------- Post added at 15:30 ---------- Previous post was at 15:28 ----------
Либо пусть приборы действуют ограниченное время. Правда, не представляю, если окажешься в полной темноте без прибора ночной видимости, что делать :)
NovaStorm
05.03.2011, 15:31
>>сколько клеток карты рендерится в видимый экран?
>35.
7 в ширину, 5 в глубину?
Andrew771
05.03.2011, 15:33
А если подобрал невидимость, то не может же она действовать до конца игры :)
---------- Post added at 15:33 ---------- Previous post was at 15:32 ----------
>>сколько клеток карты рендерится в видимый экран?
>35.
7 в ширину, 5 в глубину?
Нет, не прямоугольная область. Только те, которые видны на сетке перспективы, в программе перечислено их относительное смещение от текущей позиции.
NovaStorm
05.03.2011, 15:35
А сколько всего врагов и вкусняшек планируется раскидать на карте?
Andrew771
05.03.2011, 15:39
А сколько всего врагов и вкусняшек планируется раскидать на карте?
Количество и плотность размещения врагов задам после тестирования готового движка с врагами в трехмерном виде. Ближе к цели игры их количество будет увеличиваться.
Вкусняшек очень мало надо. Области темноты вообще 2-3, не больше. Невидимость тоже 2-3 наверно. Аптечек - штук 5. Хотя аптечки возможно зависят от тестирования движка.
Black_Cat
05.03.2011, 16:23
Подобрал оружие - оно становится, предыдущее исчезаеторужие токо одно - BFG, и оно не исчезает и не меняется, но его можно переключать в два доп режима стрельбы (наверно индицировать режим лучше на самом BFG):
- плазмоидами (нужен токо апгрейт)
- мегаплазмоидом (нужен апгрейт+энергетические элементы)
Подобрал прибор ночного видения - прибор невидимости, если был, исчезаетприбор невидимости - это апгрейт к BFG, но одноразового действия, при том задействовать его можно токо подключив BFG к стационарному компу с программой активации, при этом ничего не исчезает, токо экран становится инверсным.
Выбрать из подобранных ничего не можешь.прибор ночного видения нужен параллельно с BFG, и не может его заменять. К тому же прибор ночного видения нужен в разных местах и в разное время. А делать мульён таких предметов, разбросанных по карте - токо тормозить рендеринг. Достаточно одного, при том после того как его берёшь - он с карты исчезает и больше не тормозит рендеринг. Вся прелесть рюкзака - именно в этом - нет предмета на карте - нет тормозов рендеринга! То же относится и ко всем подобранным предметам, которые исчезают с карты.
Для Спектрума рюкзак очень полезен, т.к. упрощает рендеринг!
---------- Post added at 16:10 ---------- Previous post was at 15:52 ----------
А если подобрал невидимость, то не может же она действовать до конца игры
Невидимость тоже 2-3 навернонет, конечно, потому и одноразовый прибор - действует короткое время, и такой прибор на уровень должен быть токо один - не более.
Области темноты вообще 2-3, не большеглавное чтоб они создавали развилку и неясно было куда двигаться - по светлой области, или по одной из тёмных. Т.е. чтоб темнота не была подсказкой - "выход здесь!"
---------- Post added at 16:23 ---------- Previous post was at 16:10 ----------
Что касаемо бордюра - то это в стиле Спектрума! В спектруме всё должно быть функционально, и должны быть задействованы все его имеющиеся ресурсы - иначе это не Спектрум будет :)
Andrew771
05.03.2011, 16:57
Меня всю жизнь раздражал этот бордюр. И раздражает до сих пор. Нафик, пусть будет траурно-черным всю игру. :)
Логика с приборами должна быть единой, так проще делать и быстрее прога работать будет. Т.е., либо работает по времени, аккумуляторы для подзарядки искать на карте. Либо постоянно после нахождения, правда с невидимостью до конца игры смешно будет. :) И как бы игра не превратилась в поиск предметов, а не поиск выхода.
---------- Post added at 16:57 ---------- Previous post was at 16:42 ----------
делать мульён таких предметов, разбросанных по карте - токо тормозить рендеринг
От этого скорость рендеринга не зависит.
Black_Cat
05.03.2011, 18:05
И как бы игра не превратилась в поиск предметов, а не поиск выхода. одно с другим должно быть взаимосвязано - нельзя найти выход, не пройдя через темноту, нельзя найти выход, не пройдя через финальную комнату с кучей врагов - надо невидимость и энергоячейки для режима мегаплазмоида!
Меня всю жизнь раздражал этот бордюр. И раздражает до сих пор. Нафик, пусть будет траурно-черным всю игру.это не экономно, а Спектрум - это экономия на всём! :)
Т.е., либо работает по времени, аккумуляторы для подзарядки искать на карте.а если кто случайно возьмёт раньше чем надо? Если нет возможности смены режима стрельбы, то энергоячейки потратятся там где не надо..
Есть три типа параметров:
а) расходуемые по времени:
- невидимость (инверсный экран, под конец начинает мигать)
- наркота (сине-белый экран, под конец начинает мигать на чёрно-белый, нужна на начальном этапе игры, когда нет ещё никакого оружия кроме рук)
б) расходуемые по мере использования:
- жизнь (индикация на BFG, при окончании - красно-чёрный экран)
- защита (индикация на BFG)
- энергоячейки (индикация на BFG)
в) нерасходуемые:
- BFG
- прибор ночного видения (при использовании - зелёно-чёрный экран)
- upgrade BFG (индикация на BFG режима стрельбы)
---------- Post added at 17:38 ---------- Previous post was at 17:20 ----------
От этого скорость рендеринга не зависитполюбому - бордюр и рюкзак упрощают обсчёт
---------- Post added at 18:05 ---------- Previous post was at 17:38 ----------
А кстати, вопрос - пока оружие не найдено, рукой можно будет драться?
Jukov, напиши, как у тебя дела.
Пока получается не очень. Виновные будут наказаны
Где можно глянуть текущий вариант игры,
Andrew771
09.03.2011, 11:15
Пока получается не очень. Виновные будут наказаны
Может, если не получается вручную нарисовать, всё-таки тогда написать программу на Бейсике или другом языке, можно на PC, которая автоматически получает нужные проекции-спрайты? Задаешь ей только одну фронтальную стену (она уже нарисована тобой), а программа должна поворачивать и масштабировать как надо и сохранять в текстовый файл байты спрайта. Задаешь одну стену в виде координат всех ее пикселей. Затем ее поворачиваешь программно на 90 градусов вдоль оси z. Затем строишь перспективные проекции.
Формулы для перспективной проекции одной точки:
x'=0.5*ширина_экрана+N*x/z
y'=0.5*высота_экрана+N*y/z
ширина_экрана=256
высота_экрана=192
N - глубина по оси z до горизонта, экспериментально придется подобрать.
Подробно можно в книгах по графике посмотреть.
Где можно глянуть текущий вариант игры
Текущий - это 46-й отладочный, графика отключена. Ходишь и стреляешь по двумерному лабиринту из букв (управляешь буквой P), враги тоже есть. Клавиши: w,a,s,d - вперед,назад,повороты, o,p - скольжение, space - выстрел.
B - труп
C - аптечка
D - бассейн
E - колонна
F - стена
G-P - враги в различных фазах.
На экране также отображается два числа. Первое - здоровье, второе - сторона поворота игрока.
Если интересна графика, см. версию 38. Графика не менялась еще.
Andrew771
09.03.2011, 11:25
А кстати, вопрос - пока оружие не найдено, рукой можно будет драться?
Оружие изначально дано. Смены оружия в первой версии делать не буду. Вот приборы какие-то сделаю для разнообразия. Кстати, твоя идея отображать имеющиеся приборы и здоровье на BFG - классная. Тогда не нужны отдельные знакоместа под них.
Black_Cat
09.03.2011, 11:59
идея отображать имеющиеся приборы и здоровье на BFG - классная. Тогда не нужны отдельные знакоместа под них. :) у мну все идеи токо классные, других не держим :)
---------- Post added at 11:47 ---------- Previous post was at 11:35 ----------
Оружие изначально данотоды хорошо бы к игре видеоролик прикрутить в начале и в конце. В начале с краткой предисторией до момента получения в руки BFG, а в конце - с послесловием, и как герой покидает подземный лабораторный комплекс перед взрывом ядерного реактора.
---------- Post added at 11:59 ---------- Previous post was at 11:47 ----------
Andrew771, да, и ещё вопрос по финализации уровня и выходе из него. По сценарию (который ещё не написан) хотелось бы в финале иметь кнопку для выдвижения графитовых стержней из активной зоны реактора, а потом ещё самую финальную кнопку в лифте - типо сел и поехал - на этом игра заканчивается и идёт финальный видеоролик
Если интересна графика, см. версию 38. Графика не менялась еще.
Ощущение что опрос клавы не на прерываниях. Заторможен. Кстати ответь на письмо в личке?
Andrew771
09.03.2011, 12:47
Ощущение что опрос клавы не на прерываниях. Заторможен. Кстати ответь на письмо в личке?
Ответил на твой e-mail.
Опрос клавы не на прерываниях. Он должен быть на каждом ходу, а не 50 раз в секунду - графика всё равно не успеет вывестись.
NovaStorm
09.03.2011, 21:12
>Опрос клавы не на прерываниях.
ИМХО зря. Надо делать забитие статуса кнопок в массив при прерывании, а потом уже на очередном ходе использовать эти значения.
Andrew771
10.03.2011, 22:10
Может, если не получается вручную нарисовать, всё-таки тогда написать программу на Бейсике или другом языке, можно на PC, которая автоматически получает нужные проекции-спрайты? Задаешь ей только одну фронтальную стену (она уже нарисована тобой), а программа должна поворачивать и масштабировать как надо и сохранять в текстовый файл байты спрайта
В общем, я принялся писать такую программу на Delphi, пока только каркас куба удается крутить по-всяческому. Без графики в игре больше пока нечего писать. :)
Black_Cat
10.03.2011, 22:38
Без графики в игре больше пока нечего писать. :) можно писать сценарий :)
Andrew771
11.03.2011, 16:28
можно писать сценарий
Ага, шрифтом 5х8 :)
Написал программу для PC - автоматическое построение перспективы на экран ZX Spectrum (смотрим файл). Она строит всю сцену, основываясь на одной грани передней стены.
В файле original.txt задаем все точки грани в формате:
p x_точки y_точки z_точки
p, латинская буква - тэг точки.
z_точки для грани не имеет смысла, равно 0. А вот для объемной фигуры - самое то.
Сейчас в файле задан фрагмент стены Jukovа.
В самой программе можно играться различными коэффициентами и смотреть, что натворили. Корректность ввода числовых значений - на совести вводящего.
Теперь надо мне дописать к ней выкорчёвыватель спрайтов в нужном формате.
---
20:48 - Исправил коэффициенты в программе, перекачайте, кто скачал уже.
Black_Cat
13.03.2011, 21:31
Ага, шрифтом 5х8Для подогрева интереса к игре, и т.к. процесс затягивается, буду давать сцылки на сценарий к игре "ZXoom", по мере его появления. Здесь можно глянуть начало: http://zx.clan.su/forum/14-83-1#522
Andrew771
13.03.2011, 21:50
За сценарий - респект!
А процесс не затягивается, наоборот активно идет. По выходным стоит только, т.к. дома невозможно нормально работать. :)
Jukov, со стенами, нарисованными тобой, я теперь попробую сам разобраться с помощью своей новой проги. А ты попробуй нарисовать колонну-трубу (по совету БК-0010) и круглый бассейн, впишись в размеры 176х176 пикселей. Остальные размеры я буду автоматически получать.
Black_Cat
14.03.2011, 00:20
Тут даже не сценарий, а хотя бы вселенную представить, будущее/прошлое, техника/магия. Ну и мотивацию персонажа, с чего он сюда попал, и зачем блуждает.Всё ответы будут здесь: http://zx.clan.su/forum/14-83-1#522 Игровая вселенная - прошлое, мотивация, откуда BFG, и откуда взялись враги (Импы), и миссия в игре, и что ожидает героя при успешном завершении миссии. Короче - всё! :) . ..не знаю токо как отнесётся автор.. Фантастика ему как понимаю не очень по душе :)
Andrew771, в сценарии, враги - Импы из Doom'а. Правда модифицированные Импы, т.к. сюжет всёж ХалфЛайфовский.. :)
Andrew771
14.03.2011, 11:32
Сделай человекоподобных товарищей врагами, ну и соответственно сценарий отредактируй под них - тогда будет супер. :)
Тем временем я написал построение перспективы для угла 45 градусов (см. файл). Теперь приступаю к выкорчёвывателю спрайтов.
Black_Cat
14.03.2011, 12:34
Сделай человекоподобных товарищей врагами, ну и соответственно сценарий отредактируй под них - тогда будет супер.Ну вааще-то Импы – гуманоидного вида, т.е. человекообразные. Но их мир в корне отличается от человеческого. Основное отличие в том, что вся ихняя живность умеет обращаться с энергией вакуума, поэтому ихняя цивилизация развивалась абсолютно другим путём по сравнению с человеческой, а значит и органы, получившие развитие в процессе эволюции не могли повторять человеческие. У Импов не машинная цивилизация, как у людей, у них бионическая цивилизация, т.к. им не надо было изобретать тепловые машины для получения и использования энергии – они умели её получать и использовать с рождения. Именно по этому у них нет привычных человеку инструментов, например оружия. Они сами – оружие, способное генерировать плазмоиды. Это краеугольный камень всего! Импы не могут вести себя как люди, и использовать человеческое оружие, или одежду, они принципиально другие.
Проекция в фотожопе смотрится неплохо, но при конвертации превращается в ужас (главным образом из-за потери оттенков серого). Нужен какой-то другой подход
Andrew771
14.03.2011, 21:39
Завтра я закончу конвертер напрямую в спрайты, без промежуточных графических операций. Нормально уже получается конвертить.
Andrew771
15.03.2011, 12:19
Закончил. Прогу назвал 3D-View, выложил тут: http://zx.pk.ru/showthread.php?t=15341
Теперь будем вставлять новую графику в игру :)
Кстати , а чего не восполльзовались графикой из Страны драконов?
Andrew771
17.03.2011, 21:07
что это за игра?
Может тогда кирпичные стены взять из Prince Of Persia? Я когда-то пробовал рисовать, см. демо-файл :)
Black_Cat
17.03.2011, 21:17
Кстати , а чего не восполльзовались графикой из Страны драконов?
newart, а у тебя нет чего-то техногенного и современного?
Может тогда кирпичные стены взять из Prince Of Persia?
Принц персия 2D вид сбоку. А страна драконов точ в точ что вы делаете. Есть полный пак графики, с интерьерами, монстрами и т.п. В демке игры была использована мала часть. Графика посредственная но ГОТОВАЯ.
ewart, а у тебя нет чего-то техногенного и современного?
Спрайты? Могу дать 230 trd по 90 картинок на каждом. Ройтесь на здоровье. :)
Современное что то было, но помоему мелковатое да и вид сбоку, для аркад.
Black_Cat
17.03.2011, 22:11
А страна драконов точ в точ что вы делаетеDoom/HalfLife?
Doom/HalfLife?
Движок / внешний вид. А заставку в тему я уже кинул Andrew771.
Andrew771
17.03.2011, 22:15
Принц персия 2D вид сбоку
Дык я в своей новой проге 3D-View быстро конверчу в 3D.
А страна драконов точ в точ что вы делаете. Есть полный пак графики, с интерьерами, монстрами и т.п. В демке игры была использована мала часть. Графика посредственная но ГОТОВАЯ.
Где можно увидеть/скачать и можно ли использовать? А то авторы обидятся. :)
http://vtrdos.ru/demo_ver/DRAGONSD.ZIP вот демка игры
Andrew771
17.03.2011, 22:33
Красиво сделана!
Хитро кстати сделана, залов нету, только коридоры, и повороты на 90 градусов, поэтому большая экономия памяти. Зато красивые двери и украшения! Суперская была бы игра!
Поучусь у них кирпичи рисовать. И еще понравилось, как заретушевана даль. У меня пока просто пустота там. :)
Красиво сделана!
Хитро кстати сделана, залов нету, только коридоры, и повороты на 90 градусов, поэтому большая экономия памяти. Зато красивые двери и украшения! Суперская была бы игра!
Поучусь у них кирпичи рисовать. И еще понравилось, как заретушевана даль. У меня пока просто пустота там
Была еще похожая игра Last Hero на двух дисках. Только не помню можно ли там было ходить. А еще была Return to home 4. Так там вообще дейвие на улице происходило.
Andrew771
18.03.2011, 22:45
Last Hero
Сейчас загрузил, походил немного, далеко не получилось. А тут еще хитрее - поворот на угол тоже 90 градусов, но при этом происходит скроллинг изображения вправо или влево, поэтому поворот кажется плавным. :)
---
В своей 3D-View сейчас повозился, покрутил стены. Выяснилось, что спрайты всех стен займут 45 кб, если их полностью хранить. Но т.к. у меня симметрия на каждой четверти экрана, то написал в игре процедуры для автополучения из четвертинки стены всей стены. Т.е., около 10 кб теперь занимают в памяти. Места еще на другое достаточно. На скорость вывода вроде не сильно должно повлиять, т.к. я просматриваю и не вывожу перекрываемые части спрайтов.
---------- Post added at 22:45 ---------- Previous post was at 22:10 ----------
Return To Home - на треть экрана и повороты на 90 градусов. Хотя графика красивая. Непонятно, почему кроме Jukova и меня в 90х никто не догадался хотя бы 45 градусов сделать. :)
Догадались, наработок с фейк-дум движком было ОЧЕНЬ много.
У нас в питере ребята делали игру про Чужих, потом в их zx жизни появился я, высказал всё что об этом думаю и игру больше никто не видел. :)
Black_Cat
19.03.2011, 08:20
потом в их zx жизни появился я, высказал всё что об этом думаю и игру больше никто не видел. ясно, newart - враг народа :)
Парни, что сделали Return to Home писали в ридми, что разработали более продвинутый движок вроде как даже с промежуточными фазами поворота и "качениями" между локациями. Но так это была эпоха заката zx, прожект так и остался прожектом
Andrew771
19.03.2011, 15:57
Ах да, я имел в виду спрайтовую графику. С векторной-то игры уже были с поворотами.
Andrew771
21.03.2011, 11:56
Попробовал новые стены вставить в проект (см.файл), взял из инета фотку реальной кирпичной стены и переконвертил. Красиво получается, только со стыками нужно поработать. :)
посмотрите часть из недавно вышедшей демки - 48к
Black_Cat
21.03.2011, 13:45
Andrew771, а нельзя будет как-то разнообразить текстуры, хотя-бы простым их отключением? Так, для офисного/лабораторного комплекса более подошли бы голые белые стены с чёрными контурами. Кстати, стены и будут такими синюшными? Всё-таки цвет хотелось бы применять для других целей..
Попробовал новые стены вставить в проект (см.файл), взял из инета фотку реальной кирпичной стены и переконвертил. Красиво получается, только со стыками нужно поработать.
Текстуру нужно инвертировать.
Andrew771
21.03.2011, 17:00
Andrew771, а нельзя будет как-то разнообразить текстуры, хотя-бы простым их отключением? Так, для офисного/лабораторного комплекса более подошли бы голые белые стены с чёрными контурами. Кстати, стены и будут такими синюшными? Всё-таки цвет хотелось бы применять для других целей..
Стены хочу такие синие, т.е. игра происходит в полумраке. А то красный - под выстрел, фиолетовый - не катит, голубой - так себе, желтый - фу, белый - на ч/б монитор похоже. :)
Стены можно какой-то одной текстуры, но на них вешать всякие фенечки изредка можно. Всё упирается в память и формат карты.
посмотрите часть из недавно вышедшей демки - 48к
вот что-то типа этого будет. Кирпичная кладка может быть такая. Я сейчас пробую различные текстуры в 3D.
Текстуру нужно инвертировать.
Это тоже пробую. В новой версии 3D-View сделал и эту опцию.
Black_Cat
21.03.2011, 17:36
Стены можно какой-то одной текстурыЯ не понял, а отключать вааще текстуру низзя? Т.е. она пускай будет например начиная с тёмного коридора, а до того её нет, что равнозначно голым белым стенам. Т.е. заходишь в тёмный коридор, одеваешь очки и вместе с ними влючается фактура, а проход, откуда ты токо что пришёл становится просто тёмным, как до этого был коридор, куда ты зашёл. А по выходе с другой стороны тёмного коридора фактура остаётся, допустим до следующего тёмного коридора, после выхода из которого опять будут белые офисные стены. Так, имея токо одну фактуру, мы получаем ещё одну бесплатно.
Теперь на счёт самой фактуры - насамделе кирпичные стены - беспонтово, да и бестолково, т.к. непонятно с какого перепою вдруг взялись неотштукатуренные стены.. Поэтому предлагаю заменить кирпичи на сложный рельеф бионического типа как в "Чужих". Сразу появится смысловая связь - типо, в некоторых местах вместе с Импами проникла и их живность, и начала разрастаться на стенах.
Ну как?
---------- Post added at 17:36 ---------- Previous post was at 17:28 ----------
Стены хочу такие синиеНЕ, давай всё будет чёрно-белым, а в тёмных комнатах - чёрно-зелёным при взгяде через очки. Можешь сделать больше тёмных коридоров, но цвет на всякую фигню не расходуй - весь цвет уже расписан на фичи :)
Andrew771
21.03.2011, 17:43
не понял, а отключать вааще текстуру низзя?
Нет, т.к. это уже куча готовых спрайтов. Это НЕ векторная графика, где всё на лету считается и текстура накладывается на голые каркасы (на Спеке этот "лёт" сильно тормозит). А спрайты - уже готовые для всех видов и положений, поэтому не нужно их считать на каждом ходу в программе. Под большое количество спрайтов места нет. Я и так сократил их по зеркальности и симметричности - будет на лету строиться весь спрайт по четвертинке. К тому же, типы стен менять не позволяет формат карты.
Black_Cat
21.03.2011, 17:48
типы стен менять не позволяет формат карты.а нам карта и не нужна. Ты же можешь временно поставить заглушки на кусок кода, который выводит фактуру - вот её и не будет, хотя насамделе она есть, и никуда не делась. А убирать заглушки по факту одевания или снятия очков, т.е. без без всяких дополнительных отметок на карте. И всё получается замечательно :)
Andrew771
21.03.2011, 17:58
Не будет фактуры - не будет ничего. Голые стены не выводятся - их спрайтов просто нет. Другое дело, можно сделать фильтры, которые могут только разрежать изображение или менять цвет. Вот как раз они и будут включатья, когда игрок использует какой-нить прибор. Но разные типы стен одновременно - невозможны.
Black_Cat
21.03.2011, 18:09
Правда при включении очков надо контролировать тёмность комнаты, чтоб в светлой комнате текстуры не менялись, а то получится прикольный баг :)
---------- Post added at 18:03 ---------- Previous post was at 18:02 ----------
Голые стены не выводятся - их спрайтов просто нет
А в деме были..
---------- Post added at 18:06 ---------- Previous post was at 18:03 ----------
разные типы стен одновременно - невозможны.А тёмный коридор, или удалённая стена, у тебя вроде отображаются просто темнотой. Это разве не ещё одна фактура?
---------- Post added at 18:09 ---------- Previous post was at 18:06 ----------
Andrew771, думай, как отключать фактуры, чтоб было как в первой деме!
Andrew771
22.03.2011, 09:56
В деме были по-быстрому вручную нарисованные кубы (аж в 1996 году), т.к. я работал над движком, и нужно было на чем-то экспериментировать. Их место теперь займут нормальные спрайты. Я не начинаю писать игру с графики, иначе можно надолго зависнуть, и в итоге всё равно часто приходится менять графику под движок.
Отключить или проредить изображение можно, если наложить на весь экран байт-маску по AND.
---------- Post added at 09:56 ---------- Previous post was at 09:53 ----------
А тёмный коридор, или удалённая стена, у тебя вроде отображаются просто темнотой. Это разве не ещё одна фактура?
Нет. Это недостаток уровней в глубину.
Black_Cat
22.03.2011, 10:22
Отключить или проредить изображение можно, если наложить на весь экран байт-маску по AND.На счёт прорежения не знаю, это надо смотреть, а вот выключение фактуры - надо применить обязательно!
Andrew771
24.03.2011, 22:07
Пока вот что получается: см. файл.
Поглючивает немного вывод, завтра буду разбираться с автомасками и отзеркаливанием.
Враги уже тоже обсчитываются, но не выводятся, т.к. их спрайтов еще нет. Но стрелять уже можно. :)
Управление: w,a,s,d,o,p,space.
Andrew771
25.03.2011, 12:59
Потому что с векторной графикой тормоза будут сильные - просчитать каждую точку пространства. Или ты имел в виду raycasting знакоместа? :)
он имел в виду http://nocanvas.blogspot.com/2010/02/wolf-3d.html#more
alone, расскажешь как смог так быстро да ещё и в 48k скейлить текстуры по вертикали?
Части стен, которые находятся между плоскостью экрана и точкой наблюдателя не прорисованы - нужно доработать 3D-View, чтобы строил точку на экране исходя из её экранных координат.
Andrew771
25.03.2011, 15:46
alone, расскажешь как смог так быстро да ещё и в 48k скейлить текстуры по вертикали?
Не понял! Это же Javascript для PC. Где 48к?
Алгоритм там описан. Нужно просчитывать по каждому лучу от наблюдателя, 256х192=49152 точки как минимум. Если уменьшить количество лучей, то качество картинки упадет заметно.
Части стен, которые находятся между плоскостью экрана и точкой наблюдателя не прорисованы - нужно доработать 3D-View, чтобы строил точку на экране исходя из её экранных координат.
Надеюсь, последнюю версию юзаешь?
Рисуются только грани, а не весь объем параллелепипедов. Всё прорисовывается. Регулируешь удаление смещением по Z. Сделай его отрицательным. Если стена очень близко и ее размер больше, чем в исходном bmp, то могут возникать дыры в стене.
Текущая версия игры - см.файл. Сделал автомаски и зеркальные байты по заранее просчитанным таблицам. Стало опять быстрее шевелиться. Некоторые глюки с прорисовкой исправил, еще кое-где ляпы при выводе есть.
Не понял! Это же Javascript для PC. Где 48к?
http://pouet.net/prod.php?which=56765
смотреть вторую часть.
http://www.youtube.com/watch?v=nCwZQ-ZnXlc - начинается на 1:50
Алгоритм там описан. Нужно просчитывать по каждому лучу от наблюдателя, 256х192=49152 точки как минимум. Если уменьшить количество лучей, то качество картинки упадет заметно.
путаешь рейтрейсинг с рейкастингом.
в самом идеальном случае для спека надо 256 лучей. но можно и меньше.
в думе от дигитал реалити было 32 луча, и ничо так смотрелось :) (на самом деле там вообще не рейкастинг, но суть в том что можно и по знакоместам отрисовывать, будет нормально выглядеть)
в предыдущем вульф движке от alone было толи 128 толи 64 (на глаз особо не видно, так как плохо были сконверчены текстуры) (но там вроде как тоже не совсем рейкастинг).
Andrew771
25.03.2011, 16:23
Для jerri и просто кому интересно: выкладываю часть исходника, связанную с выводом спрайтов (см.файл). Может что подскажете/улучшите.
он имел в виду http://nocanvas.blogspot.com/2010/02/wolf-3d.html#more
alone, расскажешь как смог так быстро да ещё и в 48k скейлить текстуры по вертикали?
Обычный EOR-fill. Как в Eye Ache 2.
Andrew771
25.03.2011, 16:42
смотреть вторую часть.
круто!
путаешь рейтрейсинг с рейкастингом.
спасибо за наводку, поизучаю.
Я имею ввиду вот это (версия игры 62): рваные линии кирпичиков
Andrew771
25.03.2011, 17:49
рваные линии кирпичиков
Если стена очень близко и ее размер больше, чем в исходном bmp, то могут возникать дыры в стене.
Так что, надо исходный bmp-шник побольше размером сделать.
Для jerri и просто кому интересно: выкладываю часть исходника, связанную с выводом спрайтов (см.файл). Может что подскажете/улучшите.
Чем компилишь?
подозреваю компилятор понимает директиву DUP EDUP
чисто косметические сокращения :)
Так что, надо исходный bmp-шник побольше размером сделать.
Это не рационально. У меня для формирования всех текстур использовалась одна исходная картинка размером 80x64 пикселей. Части стены находящиеся за и перед плоскость экрана строились по разным алгоритмам. И никаких разрывов.
Andrew771
25.03.2011, 21:17
чисто косметические сокращения
Спасибо. Компилятор EMuZWin 2.7 оказывается понимает, а я думал нет. Как-то набрал dup, не сработало. Либо старая версия была, либо сам ошибся. :)
Я вот подумал, может есть еще ресурс для убыстрения, если использовать под буфер битов статуса знакомест (занято/свободно/краевое) не байты атрибутов вирт.экрана, а отдельный буфер. На вирт.экране адреса долго высчитывать, а потом еще нужно затирать перед выводом на основной экран. А структуру буфера можно сделать под себя с удобным и быстрым расчетом адресов. И его можно просто зачищать без всяких проверок перед следующим ходом. А вирт.экран на реальный тупо копировать тоже без сбросов битов. По-моему несколько страниц назад мы уже про это говорили с Novastorm.
Это не рационально. У меня для формирования всех текстур использовалась одна исходная картинка размером 80x64 пикселей. Части стены находящиеся за и перед плоскость экрана строились по разным алгоритмам. И никаких разрывов.
Дык это просчитывает моя программа на PC, которая формирует спрайты в текстовом виде. Тут скорость не важна, а главное качество. Чем больше размер картинки и пикселей на ней, тем точнее картинка, т.к. программа учитывает каждую точку при построении перспективы. А если я засуну картинку 80х64, то ближняя стена со стороной 200х160 будет, как сито. :)
Программа лежит тут: http://zx.pk.ru/showthread.php?t=15341
Andrew771
25.03.2011, 23:30
Вот про буфер, уже было:
Сообщение от Andrew771
Можно ужать в 96 байт (1 бит на каждое знакоместо), но тогда долго будет искаться нужный бит.
Не обязательно долго, зависит от способа задания координат, если из координат выгрызти смещение и нужные три бита, то их можно будет подставить вперёд по коду прямо в BIT b,(IX+d), где координаты могут пойти в IXL и d.
Посчитал, получилось с расчетом BIT b,(IX+d) по тактам примерно столько же, сколько и сейчас при расчете атрибутов. Так что, шило на мыло менять не буду.
В программе еще оптимизировал только что:
1. Убрал проверку на пустой спрайт - такие задавать не буду. Для отладки было.
2. Заменил последовательность при копировании вирт.экрана на реальный:
res 7,(hl)
res 6,(hl)
ldi
на
ld a,(hl)
and %00111111
ld (de),a
inc hl
inc de
Так быстрее почти в 1,5 раза.
Andrew771
26.03.2011, 17:09
ld a,(hl)
and %00111111
ld (de),a
inc hl
inc de
А вот так еще быстрее:
ld c,%00111111
...
ld a,(hl)
and c
ld (de),a
inc hl
inc de
---
У меня вопрос: нужно ли делать движение вперед-назад при 45 градусах? Сейчас есть. Просто иногда ориентация теряется, т.к. наполовину сквозь стены идешь. :)
А если я засуну картинку 80х64, то ближняя стена со стороной 200х160 будет, как сито. :)
[/url]
Размер 80x64 - это только для примера, а не для конкретно твоей игры.
Так вот, чтобы сита не было, при построении изображения надо брать последовательно координату каждой точки на экране плюс расстояние до изображаемой стенки в пространстве и рассчитывать что ей соответствует на исходной картинке.
Как можно видеть исходная картинка у меня меньше, чем 3D. Тем не менее никакого сита нет, хотя для всех текстур использовалась лишь одна единственная исходная стенка 80x64. Рисовать каждый раз новую увеличенную картинку для очередного вида - мартышкин труд
Black_Cat
26.03.2011, 17:59
нужно ли делать движение вперед-назад при 45 градусах? Сейчас есть. Просто иногда ориентация теряется, т.к. наполовину сквозь стены идешь.
пусть будет
Andrew771
27.03.2011, 21:37
Рисовать каждый раз новую увеличенную картинку для очередного вида - мартышкин труд
Ну если это делает программа, а не вручную, то нормально.
чтобы сита не было, при построении изображения надо брать последовательно координату каждой точки на экране плюс расстояние до изображаемой стенки в пространстве и рассчитывать что ей соответствует на исходной картинке.
Отличная идея! Попробую в прогу 3D-View приделать. :)
---------- Post added at 21:37 ---------- Previous post was at 21:37 ----------
пусть будет
понял, оставляю.
Andrew771
29.03.2011, 17:07
Люди, всё-таки возвращаюсь к своему первому сообщению. Кто сможет нарисовать или найти картинки в любом формате на PC любого размера (обязательно черно-белые, без градаций серого):
- оружие игрока
- круглая колонна (или вертикальная труба)
- враг стоит, лицом
- враг стреляет, лицом
- враг бежит, фаза 1, лицом
- враг бежит, фаза 2, лицом
- враг бежит, фаза 1, левым боком
- враг бежит, фаза 2, левым боком
- труп
Врагов представляю всё же людьми, с калашами или пистолетами. Оружие игрока тоже такое. Ориентир - как в Counter Strike. Фантастики не будет. Места в памяти под завязку.
Был бы благодарен, написание игры быстрее пошло бы. А также ваше имя вписано навеки. :)
Места в памяти под завязку.
для 48 кб будет ?
Andrew771
29.03.2011, 17:38
для 48 кб будет ?
да
Andrew771, в какой срок нужно уложиться с этим ?
- оружие игрока
- круглая колонна (или вертикальная труба)
- враг стоит, лицом
- враг стреляет, лицом
- враг бежит, фаза 1, лицом
- враг бежит, фаза 2, лицом
- враг бежит, фаза 1, левым боком
- враг бежит, фаза 2, левым боком
- труп
(мог бы за один вечер,но учёба напрягает)
вот на скорую руку набросал.
какого размера персы должны быть?
---------- Post added at 13:26 ---------- Previous post was at 13:09 ----------
Вот колонна:
Andrew771
30.03.2011, 14:56
Спасибо за колонну. А труп нужен с видом сбоку. Можно в виде невнятной груды, т.к. я не буду переворачивать ноги для каждого вида.
мог бы за один вечер,но учёба напрягает
ну никто не торопит.
какого размера персы должны быть?
Размеры желательно около 200х192. Остальные я смасштабирую.
Спасибо за колонну. А труп нужен с видом сбоку. Можно в виде невнятной груды, т.к. я не буду переворачивать ноги для каждого вида
Дык разработчиков дума,зеротолеранса,вульфен штейна,блудшота и подобных игр не смущало то,что трупы поворачиваются ногами в перёд к игроку.(в дюке есть трупы с видом с боку и в перёд бошкой)
---------- Post added at 14:04 ---------- Previous post was at 14:01 ----------
Сколько будет видов врагов?
З.Ы. надеюсь это будет tape игра, а не дисковая.(хочу на реале опробовать)
Andrew771
30.03.2011, 15:12
Дык разработчиков дума,зеротолеранса,вульфен штейна,блудшота и подобных игр не смущало то,что трупы поворачиваются ногами в перёд к игроку.(в дюке есть трупы с видом с боку и в перёд бошкой)
Во, вот такого и надо. :)
Сколько будет видов врагов?
один. На большее нет места.
надеюсь это будет tape игра, а не дисковая.(хочу на реале опробовать)
Да, именно для ZX48. У меня в реале тоже был только 48-й, поэтому под него всё пишу (сейчас в эмуляторе). Да и интереса больше уложиться в 48к :)
Думаю на выстрел прийдётся два кадра делать (ну или дополнительный спрайт на "вспышку")
Вот враг целится:
Хотя можно на месте дула менять атрибут цвета (наиболее экономный вариант)
Andrew771
30.03.2011, 15:37
а прицеливание врага можно точно в тебя? :)
Две фазы только движком предусмотрены: враг стоит и враг стреляет. Хотя, можно доп.код прилепить как заплатку, чтобы вспышка была анимированная, не меняя спрайта врага на экране.
Andrew771
30.03.2011, 15:40
Дамский сверчок
ОК. При выстреле его чуть шевельнуть надо (т.е. чуть другой спрайт).
а прицеливание врага можно точно в тебя?
так что ли?
(т.е. чуть другой спрайт). а разве нельзя этот же спрайт вниз на одно\два знакоместа опустить?
две фазы идущего трупера:
Andrew771
30.03.2011, 16:35
так что ли?
отлично!
а разве нельзя этот же спрайт вниз на одно\два знакоместа опустить?
можно. Попробую сделать. Красиво ли будет, нужно проверять.
---------- Post added at 16:35 ---------- Previous post was at 16:33 ----------
две фазы идущего трупера:
супер! А сделай еще правой ногой вперед.
можно. Попробую сделать. Красиво ли будет, нужно проверять.
для эффекта выстрела можно выдать в 254 порт рандомное число (с инкрементом задержки),бордюр экрана+динамик добавят большего впечатления,чем перерисованый спрайт оружия.
---------- Post added at 15:39 ---------- Previous post was at 15:38 ----------
супер! А сделай еще правой ногой вперед.
а движок предусматривает 3 фазы (и уместится ли это всё в озу)?
---------- Post added at 15:41 ---------- Previous post was at 15:39 ----------
не знаю,успею или нет сегодня.
скоро контора закроется.
Andrew771
30.03.2011, 16:44
движок предусматривает 3 фазы (и уместится ли это всё в озу)?
неа, только две фазы движения. Просто чтобы враг не тащился одной ногой. Как, не знаю..
---------- Post added at 16:43 ---------- Previous post was at 16:42 ----------
ну можно типа три фазы - если фазу "стоит" тоже использовать как промежуточную для движения.
---------- Post added at 16:44 ---------- Previous post was at 16:43 ----------
для эффекта выстрела можно выдать в 254 порт рандомное число (с инкрементом задержки),бордюр экрана+динамик добавят большего впечатления,чем перерисованый спрайт оружия.
Динамик обязательно будет. Бордюр подумаю. А сам выстрел можно поверх наложить спрайтом.
Andrew771
30.03.2011, 17:14
А колонну можешь сделать потолще и разрешение bmp-файла побольше? А то сейчас вставил, хиловатая какая-то. :)
---------- Post added at 17:14 ---------- Previous post was at 17:13 ----------
крабиком ползёт
а еще левым боком такие же фазы движения нужны будут. Правый бок автоматически программа строит. Стрельба и стояние левым боком не нужно.
чуток изменил первый стэп
а еще левым боком такие же фазы движения нужны будут.
___________
на двух кадрах особо не разыграешься.(это я и пыталься движение боком воссоздать)
---------- Post added at 16:21 ---------- Previous post was at 16:20 ----------
А колонну можешь сделать потолще и разрешение bmp-файла побольше? А то сейчас вставил, хиловатая какая-то.
Это по-новой перерисовывать прийдётся, я рисую прямо в пэинте с однобитными атрибутами рисунка.
Andrew771
30.03.2011, 17:26
это я и пыталься движение боком воссоздать
ааа, млин, не сразу понял. Я думал, он будет лицом в профиль. Вот теперь думаю, можь правда, пусть пятится боком, а в профиль не надо вообще?
---------- Post added at 17:26 ---------- Previous post was at 17:24 ----------
Это по-новой перерисовывать прийдётся, я рисую прямо в пэинте с однобитными атрибутами рисунка.
угу. А то простое масштабирование в Пэинте искажает всё - уже попробовал.
Советую поиграть в Quake IV, что б понять, чем я вдохновлён.
Andrew771
30.03.2011, 17:29
оветую поиграть в Quake VI, что б понять, чем я вдохновлён.
ок.
угу. А то простое масштабирование в Пэинте искажает всё - уже попробовал.
Можно кратное масштабирование сделать, но это пиксели будут квадратнее относительно всего окружающего в игре.(нужен фильтр, в моём пеинте такого нет (v5.2))
а вот Paint.net творит чудеса.
---------- Post added at 16:35 ---------- Previous post was at 16:30 ----------
советую поиграть в Quake VI, что б понять, чем я вдохновлён.
точнее IV
Andrew771
30.03.2011, 17:36
а вот Paint.net творит чудеса.
дома поищу или в сети. Скину тебе :)
бестолку, у меня нет админских прав для установки
Andrew771
30.03.2011, 21:50
бестолку, у меня нет админских прав для установки
а дома?
Andrew771
31.03.2011, 12:08
Сообщение от Andrew771
А колонну можешь сделать потолще и разрешение bmp-файла побольше? А то сейчас вставил, хиловатая какая-то.
Это по-новой перерисовывать прийдётся, я рисую прямо в пэинте с однобитными атрибутами рисунка.
Если будешь делать колонну, то делай симметричную право-лево и верх-низ. Тогда в памяти достаточно хранить только четвертинку, остальное движок строит.
а дома?
там я бываю два\три дня в полтора месяца.
Если будешь делать колонну, то делай симметричную право-лево и верх-низ. Тогда в памяти достаточно хранить только четвертинку, остальное движок строит.
ок...
Сейчас некогда читать 23 страницы данной темы и поэтому о подробностях сего двига я не знаю,
но заметно,что верхняя и нижняя части экрана зеркально вырисовываются (как на сеге мд2 в toy story).
Но вопрос возник: это рендер или же заранее всё прорисовано в озу ?
Если рендер, можно ли разнообразить текстуры и угол поворота сделать не 45',а 30' хотя бы (для красоты, но как бы это не повредило ГЕЙмплею)?
---------- Post added at 13:55 ---------- Previous post was at 13:33 ----------
аааа,всё.
Я вчехлил по тому примеру с масштабированием.
Таки оно всё заранее прорисовано.
может сделать хотя бы три вида спрайтов стен,если уместится?
Andrew771
31.03.2011, 15:22
это рендер или же заранее всё прорисовано в озу ?
Заранее всё прорисовано. В памяти хранятся четвертинки или половинки спрайтов. Движок в реальном времени достраивает симметрию/зеркалку/копии. Масштабирования в программе нет, это очень долго будет рисоваться. Поэтому для разных удалений от игрока хранятся разные части спрайтов. Все необходимые спрайты под разными углами и удалениями из одного исходного bmp-файла получаю в своей программе 3D-View, вот тут она лежит: http://zx.pk.ru/showthread.php?t=15341
Каждая клетка лабиринта кодируется 16 значениями, занимает полбайта. Весь лабиринт 128х128 (8192 байта). Значения такие:
0 - пустота
1 - труп
2 - аптечка
3 - бассейн
4 - колонна
5 - сплошная стена
6 - враг стоит
7 - враг (фаза 1) вперед
8 - враг (фаза 1) назад
9 - враг (фаза 1) влево
A - враг (фаза 1) вправо
B - враг стреляет
C - враг (фаза 2) вперед
D - враг (фаза 2) назад
E - враг (фаза 2) влево
F - враг (фаза 2) вправо
Т.е., стена только одного вида. Другие никак не впихнешь. Если только ликвидировать колонны или бассейны. Бассейны кстати решил сделать просто - это всего лишь срезанные сверху до половины стены. Т.е., это уже больше похоже на барьеры, чем на бассейны. Изначально хотел делать бассейны с движущейся водой (2 фазы). Места в памяти уже впритык.
Врагов храню на карте, т.к.:
1. Единая процедура вывода сцены для всех элементов;
2. Иначе пришлось бы хранить отдельно и проверять все координаты врагов на каждом ходу, что сожрало бы память и быстродействие.
четверть колонны и симметричное построение её из этой четверти.
бассейн,имхо,не очень удачная затея.
Andrew771
31.03.2011, 15:44
бассейн,имхо,не очень удачная затея.
тогда может его выкинуть вообще и заменить чем-нить интересным?
---------- Post added at 15:44 ---------- Previous post was at 15:41 ----------
четверть колонны и симметричное построение её из этой четверти.
красота! Только кажется изогнутой, т.к. слишком изогнутые средние поперечные линии, чуть спрями
а места в памяти хватит на ещё пару спрайтов?
можно было бы бассейн заменить на миниган.(но тут уже стОит задуматься над уроном)
и в место кирпичей предлагаю сделать соты.
Andrew771
31.03.2011, 15:53
Вот как выглядит с бассейнами/барьерами: см.файл.
Управление: w,a,s,d - передвижение, o,p - скольжение влево-вправо, space - выстрел.
Andrew771
31.03.2011, 15:58
а места в памяти хватит на ещё пару спрайтов?
можно было бы бассейн заменить на миниган.(но тут уже стОит задуматься над уроном)
и в место кирпичей предлагаю сделать соты.
Стены уже в памяти. Есть еще свободных примерно 10 кб. Если совсем прижмет, то буду уменьшать лабиринт до 128х96 (высвобожу 2к) и его алгоритм хранения (высвобожу 6к).
Миниган можно, тока тогда чтоб в одну сторону глядел всегда. :)
Соты вместо кирпичей - хорошо.
четверть колонны.
Коэффициент перспективы уменьшен:
Вот как выглядит с бассейнами/барьерами: см.файл.
Ожидал худшего зрелища,а напрасно.
Картинка разнообразнее из-за разности уровней стен,жаль только,что уровень ровно на половину отличается.
Andrew771
31.03.2011, 16:15
жаль только,что уровень ровно на половину отличается.
Ну или тогда придется вводить новые спрайты.
четверть колонны.
хорошо! Вставлю ее.
труп рахитно получается.
Хочу,как в battle frenzy (труп игрока) намалякать
Andrew771
31.03.2011, 17:09
Вот это действительно супер! Лучше чем в Doom на PC!
Andrew771
31.03.2011, 17:15
соты делать?
да, давай. Края только у стены должны быть прямые, иначе стены друг с другом некрасиво состыкуются.
рульно было б если каждый уровень подгружать с tap-образа (новые "тектуры" и карта уровня), только с турбозагрузкой.(mp3 плеер в отличии от кассеты корректно выдаёт сигнал,что позволяет ускорить процесс загрузки)
Andrew771
31.03.2011, 17:20
рульно было б если каждый уровень подгружать с tap-образа (новые "тектуры" и карта уровня), только с турбозагрузкой.(mp3 плеер в отличии от кассеты корректно выдаёт сигнал,что позволяет ускорить процесс загрузки)
Карты уровней планирую генерировать автоматически случайные, чтобы и самому интересно было играть, и не знал заранее, как проходить. А вот про подгрузку текстур можно будет подумать.
А вот про подгрузку текстур можно будет подумать.
в таком случае и персов разных можно подгружать с разным уровнем hp
Andrew771, все-таки игра остается несколько тормознутой :(
есть несколько идей как ускорить пару моментов
под 128 будешь делать версию?
там со скоростью проще сделать
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot