Разработка

Проект закрыт 22.01.2008 по желанию автора.
Аватара пользователя
Aerton
Сообщения: 503
Зарегистрирован: 11 авг 2007, 02:58
Откуда: Новосибирск
Контактная информация:

Сообщение Aerton » 11 сен 2007, 03:21

Максим Кич писал(а):А вот со стенами и внутренними источниками (см. выше) уже сложнее. Чисто теоретически, освещённые стены не должны располагаться между игроком и источником света
Стена может загораживать свет от фонаря на улице и не должна быть видна, но в то же время, игрок с факелом может подойти поближе и тогда свет будет падать на неё с обоих сторон.

В Ангбанде примерно такой алгоритм: если комната освещена, то у всех её клеток, а так же у стенок стоит флажок CAVE_GLOW. Чтобы стенка была подсвечена когда игрок на неё смотрит, ближайшая из её соседних клеток, не являющихся стенкой имела флажком CAVE_GLOW.

ADB

Сообщение ADB » 11 сен 2007, 09:09

Максим Кич писал(а):В случае с открытым пространством всё, на самом деле, гораздо проще: двери и окна считаются источниками света, если игрок находится внутри.
Я хотел сделать, чтобы в зданиях свет распределялся равномерно, и стены становились бы подсвечиваемыми. Выходим на улицу, ночь - стены "гаснут". Смешно, как это сделать?
Я придумал пока так. Как предложил Maelstrom, указывать освещенные области на карте. Но вот таким образом. Указывать именно внутренние, не амбиентные области (не освещенные солнцем, а искусственно). Если мы, т.о. находимся на клетке "улица", то все стены и области будут освещаться в соответствии с правилом "солнечного освещения". Если мы встанем на клетку "внутренний интерьер", то стены и все что вокруг будут подсвечиваться ровным светом.
Aerton писал(а):В Ангбанде примерно такой алгоритм: если комната освещена, то у всех её клеток, а так же у стенок стоит флажок CAVE_GLOW.
А каким образом определяется, освещена ли комната? И почему именно эта?
Максим Кич писал(а):А вот со стенами и внутренними источниками (см. выше) уже сложнее.
Я планировал это следующим вопросом. Хорошо, что ты уже осветил эту тему. :wink:
Вопрос действительно становится ребром. Делать двухслойные стены (по два тайла рядом), не панацея. Делить их пополам, тоже ничего приятного, потом где у какого тайла будет середина.
У меня еще больше геморроя! Вертикальные стены в Templer'е имеют толщину не всегда во весь тайл, поэтому внизу видна подложка (земля). В случае освещения такого тайла (узкой стены), будет подсвечиваться как пол в доме, так и земля снаружи!!! :shock:
Максим Кич писал(а):Чисто теоретически, освещённые стены не должны располагаться между игроком и источником света (что банально высчитывается по разности координат), но эту идею ещё следует серьёзно дорабатывать напильником.
Стоит. Вот $ - стенки, оказавшиеся между игроком и источником света (они останутся темными)
0 - а эти не находятся на пересечении и будут подсвечены!

Аватара пользователя
Aerton
Сообщения: 503
Зарегистрирован: 11 авг 2007, 02:58
Откуда: Новосибирск
Контактная информация:

Сообщение Aerton » 11 сен 2007, 09:49

ADB писал(а):А каким образом определяется, освещена ли комната? И почему именно эта?
Комнаты либо сразу генерируются освещёнными, либо становятся такими после исопльзования некоторых заклинаний или артефактов. Комната это или нет - неважно, можно этим же заклинанием осветить участок корридора и всё будет работать нормально.

На самом деле не важно, кто и когда выставил у клеток этот флажок, он может быть установлен и факелом в руке стражника.

В приведённом примере всё должно работать правильно (o - клетки, освещённые светом из *) Левая стенка будет подсвечена, т.к. соседние клетки от неё, ближайшие к игроку подсвечена, а стенка посередине останется тёмной, т.к. ближайшие к игроку соседние клетки - тёмные.

ADB

Сообщение ADB » 11 сен 2007, 10:45

Aerton писал(а):
ADB писал(а):А каким образом определяется, освещена ли комната? И почему именно эта?
В приведённом примере всё должно работать правильно (o - клетки, освещённые светом из *) Левая стенка будет подсвечена, т.к. соседние клетки от неё, ближайшие к игроку подсвечена, а стенка посередине останется тёмной, т.к. ближайшие к игроку соседние клетки - тёмные.
Тоесть, ты предлагаешь строить LOS от источкика, запоминая какие участки пола освещены. А потом смотреть ближайшие к ГГ клетки пола на освещенность. Хорошая мысль.
Единственное, я пока не понял, как определить эту ближайщую клетку к ГГ, по какому принципу? Какая из окружающих конкретный тайл стены, будет таковой?

Аватара пользователя
Aerton
Сообщения: 503
Зарегистрирован: 11 авг 2007, 02:58
Откуда: Новосибирск
Контактная информация:

Сообщение Aerton » 11 сен 2007, 12:40

ADB писал(а):Единственное, я пока не понял, как определить эту ближайщую клетку к ГГ, по какому принципу? Какая из окружающих конкретный тайл стены, будет таковой?
Так как Ангбанд просчитывает зону видимости игрока по октантам, то там просто делается "шаг назад".

В другом случае, всегда можно получить направление на игрока, посчитав разницу по x и y между игроком и текущей клеткой.

Аватара пользователя
Troll
Сообщения: 59
Зарегистрирован: 08 июл 2007, 12:55
Откуда: Одесса

Сообщение Troll » 11 сен 2007, 15:16

Почитал. Тема интересна на мой взгляд.
Чуть выскажусь.

По поводу ночного освещения на открытой местности. Я бы делал ночь не "совершенно тёмной", а ограничил бы дальность видимости 1/6-ой от нормальной, но не меньше 1. Мне кажется странным что ГГ подходя ночью вплотную к дому не может видеть стены перед ним... Кстати добавлю, что, скажем, в случае дождя эту дальность видимости можно установить 3/4 от нормальной, в случае снега - 1/2, если туман - то где-то 1/3. Это совершенно не обязательно, но по-моему в данном случае затраты на исправление кода минимальные, а бонусы очевидны.

Теперь по поводу освещённости стен. Написанное Aerton'ом вполне толковый способ (если предыдущая клетка по ЛОСу от игрока освещена - то и стена для игрока освещена). На первый взгляд. Потому что, поразмыслив, можно придумать, исключительную ситуацию, например

Код: Выделить всё


oooooo*oo



3......@.

Стена "3" освещена и игрок должен видеть её освещённой, но это не выщитывается предложенным способом. Короче, нужно думать подходит ли такой способ для конкретных карт.


У меня возник вопрос к ADB. Вот смотри, наступила ночь, игрок стоит в городе вне здания. Ходят ли при этои NPC? Если ходят, то источник света им жизненно необходим. Думаю, понятно почему.

Кстати,
Максим Кич и ADB,
в ваших поектах, клетки из зоны видимости отличаются от клеток вне зоны видимости подсветкой или чем-то ещё? То есть может ли игрок по взгляду на экран сказать какие клетки он сейчас видит, а какие - нет? Потому что иначе у меня ещё мильён вопросов возникает по реализации светло/темно.
You see the Troll. He wield giant club in right hand and huge rock in left hand. Troll looks satiaited and not agressive, he look at you with interest. It seems that Troll asks you: "What you do in trollish land?"

ADB

Сообщение ADB » 11 сен 2007, 21:21

Troll писал(а):Потому что, поразмыслив, можно придумать, исключительную ситуацию, например

Код: Выделить всё


oooooo*oo



3......@.

Стена "3" освещена и игрок должен видеть её освещённой, но это не выщитывается предложенным способом. Короче, нужно думать подходит ли такой способ для конкретных карт.
Да, именно это я и имел ввиду. Правда мой пример получился действительно не показательным. Здесь все видно намного лучше, спасибо. :wink:
И поверьте, таких вариантов исполнения карт будет уйма, игроки быстро заметят баги. Нужен достаточно математический и универсальный метод, возможно получится оттолкнуться от предложенного :?


Troll писал(а):У меня возник вопрос к ADB. Вот смотри, наступила ночь, игрок стоит в городе вне здания. Ходят ли при этои NPC? Если ходят, то источник света им жизненно необходим. Думаю, понятно почему.
Вопрос хороший и я на него отвечу. 8)
Можно задать еще несколько вопросов мне, как разработчику:
1) В игре есть голод и мы вынуждены питаться. А куда это все девается? ГГ ведь не ходит в туалет! Не разумно. :(
2) В игре есть голод и мы вынуждены питаться. А почему я не вижу как остальные питаются, они же умрут с голодухи! Нечестно!
3) Для того, чтобы жить в этом мире, я обязан ходить в магазины, почему я не вижу, как ходят другие персонажи?
4) Почему я спасаю мир от всех напастей, почему никто другой не делает это?
На подобные вопросы я могу ответить. Мир все же, как это нехотелось бы признавать разработчику, виртуальный. Да, в новомодных игруленциях вы видете и 3D графику, и кольца, одетые на пальцы персонажей, и то, как они едят, ходят в магазины, разговаривают между собой...
Но все же, как бы не был наворочен движок игры, как бы небыли талантливы дизайнеры, мир компьютерных игр, прежде всего концентрируется на ГГ. Да, все внимание на ГГ. Вот такая вот искусственная "самовлюбленность" в своего героя. Поэтому все действия в игре рассматриваются лишь со стороны "нас самих". Хотя так интересно увидеть, как пацан, управляемый "мозгами компьютера", проходя мимо курицы весело пинает ее, как может быть это сделали мы сами (Fable).
Вопрос больше философский. :)
Troll писал(а):Кстати,
Максим Кич и ADB,
в ваших поектах, клетки из зоны видимости отличаются от клеток вне зоны видимости подсветкой или чем-то ещё? То есть может ли игрок по взгляду на экран сказать какие клетки он сейчас видит, а какие - нет? Потому что иначе у меня ещё мильён вопросов возникает по реализации светло/темно.
Да, видимо отличаются. Во всяком случае, можешь зайти ко мне на сайт (пока он еще существует) и посмотреть скриншоты. Невидимая область в Templer (которого скоро не станет), затеняется. В пещерах темно и вообще все вокруг черное, кроме освещенной области.
Максим, насколько я понимаю, поддерживает возможность задания отдельных источников света на карте. Они представляют собой точечные источники освещения. Эффектно и красиво смотрится :wink:
Я же отказался от такой технологии, поскольку мне лень заморачиваться с таким детальным дизайном карты. Не потянуть. :roll:
Кстати, у меня даже не предусматривается обработка источников света, в руках других персонажей. Пока нет такой необходимости. Только ГГ.

Ха! Чем они могут пользоваться, когда "ходят в темноте"?
1) у них инфразрение
2) они хорошо видят в темноте
3) они ходят на ощупь
4) они наизусть помнят дорогу домой
5) они пользуются теми же средствами, что и Вы, но наш герой этого просто не замечает и не дает такого представления нам. Ему это не интересно.
:lol:

Шутки шутками, а есть последнее, что опять же застопорило мою разработку. Это введенные "здания в разрезе прямо на основной карте". Мои тонкие вертикальные стены идут прахом! Тайл подложки под ними должен быть либо полом, либо травой, например. Иначе придется рисовать все варианты тайлов перехода "виды пола"/"виды поверхности". Причем в 2-х экземплярах, зеркально отраженных. Это не выход. Очень усложняется дизайн карт! К тому же, в боковых стенках могут быть окна и двери! Неужели придется переходить на стены во весь тайл, как это сделано во всех рогаликах?

Аватара пользователя
Aerton
Сообщения: 503
Зарегистрирован: 11 авг 2007, 02:58
Откуда: Новосибирск
Контактная информация:

Сообщение Aerton » 12 сен 2007, 02:33

Troll писал(а):поразмыслив, можно придумать, исключительную ситуацию, например

Код: Выделить всё


oooooo*oo



3......@.

Стена "3" освещена и игрок должен видеть её освещённой, но это не выщитывается предложенным способом. Короче, нужно думать подходит ли такой способ для конкретных карт.
Внимательнее посмотрев код, я нашёл в комментариях описание, судя из которого по идее надо проверять не одну, а три ближайших клетки. Игра проверяет только одну, т.к. этого работает в большинстве случаев, что вполне приемлимо в рамках данной игры.
* Note that the "CAVE_GLOW" flag means that a grid is permanently lit in
* some way. However, for the player to "see" the grid, as determined by
* the "CAVE_SEEN" flag, the player must not be blind, the grid must have
* the "CAVE_VIEW" flag set, and if the grid is a "wall" grid, and it is
* not lit by the player's torch, then it must touch a grid which does not
* have the "CAVE_WALL" flag set, but which does have both the "CAVE_GLOW"
* and "CAVE_VIEW" flags set. This last part about wall grids is induced
* by the semantics of "CAVE_GLOW" as applied to wall grids, and checking
* the technical requirements can be very expensive, especially since the
* grid may be touching some "illegal" grids. Luckily, it is more or less
* correct to restrict the "touching" grids from the eight "possible" grids
* to the (at most) three grids which are touching the grid, and which are
* closer to the player than the grid itself, which eliminates more than
* half of the work, including all of the potentially "illegal" grids, if
* at most one of the three grids is a "diagonal" grid. In addition, in
* almost every situation, it is possible to ignore the "CAVE_VIEW" flag
* on these three "touching" grids, for a variety of technical reasons.
* Finally, note that in most situations, it is only necessary to check
* a single "touching" grid, in fact, the grid which is strictly closest
* to the player of all the touching grids, and in fact, it is normally
* only necessary to check the "CAVE_GLOW" flag of that grid, again, for
* various technical reasons. However, one of the situations which does
* not work with this last reduction is the very common one in which the
* player approaches an illuminated room from a dark hallway, in which the
* two wall grids which form the "entrance" to the room would not be marked
* as "CAVE_SEEN", since of the three "touching" grids nearer to the player
* than each wall grid, only the farthest of these grids is itself marked
* "CAVE_GLOW".
Перевести?

Аватара пользователя
Максим Кич
Администратор
Сообщения: 1642
Зарегистрирован: 03 дек 2006, 20:17
Откуда: Витебск, Беларусь
Контактная информация:

Сообщение Максим Кич » 12 сен 2007, 10:51

Troll писал(а):Максим Кич и ADB,
в ваших поектах, клетки из зоны видимости отличаются от клеток вне зоны видимости подсветкой или чем-то ещё? То есть может ли игрок по взгляду на экран сказать какие клетки он сейчас видит, а какие - нет? Потому что иначе у меня ещё мильён вопросов возникает по реализации светло/темно.
У меня точечные источники света. НО. Из-за этого, пришлось прибегнуть к специфической реализации map memory: не отображаются клетки неосвещённые клетки в поле зрения. Вообще, возникало много проблем с понятием видимости.

У меня есть две категории для клетки: «в поле зрения» и «освещена». Вторая категория используется только для построения map memory. Проход по источникам света определяет цвет клеток (освещение у меня цветное), лось показывает, видимы ли они. Если клетки не видимы, но игрок их помнит, то они тускло отрисовываются в монохроме.
Dump the screen? [y/n]

Аватара пользователя
Troll
Сообщения: 59
Зарегистрирован: 08 июл 2007, 12:55
Откуда: Одесса

Сообщение Troll » 12 сен 2007, 14:56

ADB писал
Вопрос хороший и я на него отвечу.
Можно задать еще несколько вопросов мне, как разработчику:
1) В игре есть голод и мы вынуждены питаться. А куда это все девается? ГГ ведь не ходит в туалет! Не разумно.
2) В игре есть голод и мы вынуждены питаться. А почему я не вижу как остальные питаются, они же умрут с голодухи! Нечестно!
3) Для того, чтобы жить в этом мире, я обязан ходить в магазины, почему я не вижу, как ходят другие персонажи?
4) Почему я спасаю мир от всех напастей, почему никто другой не делает это?
итд...
Ну расписал, можно подумать это не ясно. Это не совсем то. Я имел в виду, что им "жизненно необходим" источник света именно с точки зрения игрового процесса. ГГ в темноте, при отсутствии факела у себя (ясно что такая ситуация вполне может возникнуть), может запросто их атаковать, если не они никак ему не видны - а это именно так и выходит при видимости 0. А я сомневаюсь, что это нужно делать в большинстве случаев. Или сафети мод какой-то вводить тогда.


Aerton писал
Внимательнее посмотрев код, я нашёл в комментариях описание, судя из которого по идее надо проверять не одну, а три ближайших клетки.
Даже три клетки не панацея

Код: Выделить всё


oooooo*oo 



3,....... 
,,.......
.........
.......@.

В данном случае та же стена "3" должна быть видима, и, насколько я понимаю, 3 клетки, которые следует проверять (ближайшие к герою) - это три клетки помеченные запятой. А все они тёмные... Доработать нужно способ.

Хотя, мне кажется, что может действительно делить стены на 4 части и каждую из них проверять на освещённость. Похоже, что так получится, только чуть ЛОС переправить


2 ADB и Максим Кич
Данке за объяснение. Вопросов не имею.
You see the Troll. He wield giant club in right hand and huge rock in left hand. Troll looks satiaited and not agressive, he look at you with interest. It seems that Troll asks you: "What you do in trollish land?"

ADB

Сообщение ADB » 12 сен 2007, 22:03

Troll писал(а):Ну расписал, можно подумать это не ясно. Это не совсем то. Я имел в виду, что им "жизненно необходим" источник света именно с точки зрения игрового процесса. ГГ в темноте, при отсутствии факела у себя (ясно что такая ситуация вполне может возникнуть), может запросто их атаковать, если не они никак ему не видны - а это именно так и выходит при видимости 0. А я сомневаюсь, что это нужно делать в большинстве случаев. Или сафети мод какой-то вводить тогда.
Прошу прощения, что не правильно понял твой вопрос.
У меня несколько по другому все обыгрывается. Во-первых, атаковать никого нельзя пока не зажмем "Ctrl+движение в сторону", во вторых, ночь играет больше "голливудский" манер исполнения. Дальность видимости остается той же, просто местность темнеет визуально :) Так что не серчай.

ADB

Сообщение ADB » 14 сен 2007, 13:07

Наконец, мне удалось сформировать полный набор школ магии для нового проекта и рассортировать по ним заклинания.
Получилось нехилое количество! 8)
В результате, я использовал модифицированную систему D&D + куча сторонних материалов + форум + творения автора и его фанов.
Маг будет иметь магический круг (ступень). Чем выше этот круг, тем больше силы заклы он сможет использовать. В зависимости от уровня знаний в той или иной школе, ГГ будут доступны для изучения соответствующие заклы. Если знания в какой-то школе слабые, то мощные заклы не будут доступны для изучения. Итого:
1) Магический круг (ступень мага) – необходим(а), чтобы использовать заклы.
2) Уровень познаний в каждой школе - необходим, чтобы изучать все более и более мощные заклы соответствующей школы.

Каждая школа имеет свою специфику. Например, школа "целебная магия" в основном направлена на лечение здоровья, снятие пагубных эффектов, порчи, но так же будет иметь набор и атакующих, специфичных только ей заклов.

Так же были проработаны все классы персонажей. Каждый класс имеет список возможных для изучения школ магии. Некоторые из них имеют индивидуальные школы, недоступные остальным.
Так, существует класс, способный проводить обряды, создавать руны (заряженные определенными заклинаниями магические предметы), варить зелья. Только этот класс может делать подобное. Используя эти предметы в бою, они получают значительное преимущество в скорости воспроизведения магии.
Здесь у меня существуют непонятки: давать ли возможность другим классам использовать их наработки, возможно введя некоторые штрафы. :?
Штрафами могут быть опять же время (используют дольше чем класс создателей этих рун), либо требования к некоторым характеристикам, каковые не требуются для класса "рунаделов".
Что тут еще? Ах, да!
Я решил отказаться от "процентной шкалы" знаний для школ магии.
Знания в каждой школе будут градуироваться ступеньками, такими же как и магическая ступень самого мага.
При получении новых уровней, ГГ будет получать очки знания, которые можно будет распределять по школам вручную, тем самым станут доступны для изучения все новые и новые более мощные заклы. Ступень самого мага повысится автоматически, при достижении определенного уровня.
Сами заклинания можно будет учить с учителями или узнавать из книг.

Аватара пользователя
Troll
Сообщения: 59
Зарегистрирован: 08 июл 2007, 12:55
Откуда: Одесса

Сообщение Troll » 14 сен 2007, 15:59

ADB пишет
Во-первых, атаковать никого нельзя пока не зажмем "Ctrl+движение в сторону"
А это удобно? Ладно, тебе виднее. К слову, у себя, когда я писать пытался, предполагал использовать комбинацию "Ctrl+движение в сторону" как "удар щитом".
You see the Troll. He wield giant club in right hand and huge rock in left hand. Troll looks satiaited and not agressive, he look at you with interest. It seems that Troll asks you: "What you do in trollish land?"

ADB

Сообщение ADB » 14 сен 2007, 16:41

Troll писал(а):ADB пишет
Во-первых, атаковать никого нельзя пока не зажмем "Ctrl+движение в сторону"
А это удобно? Ладно, тебе виднее. К слову, у себя, когда я писать пытался, предполагал использовать комбинацию "Ctrl+движение в сторону" как "удар щитом".
Думаю, вопрос можно решить опционально (on/off) :wink:

Ответить

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

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