Pull to refresh

Comments 16

«Коридоры» широковаты, на мой взгляд. Хотя, это лучше, чем ADOM.
Предлагаете соединить комнаты узкими лазами вентиляции?
Нет, просто на диаграмме «комната» от «не комнаты» отличается весьма слабо. Визуально если вы возьмете, скажем, diablo 2 (хотя там лабиринты делались явно иначе), но там «коридор» — это место, где с монстром разминуться точно не удастся. Он шире двери раза в три, от силы.
Мне кажется, использование физического движка для такой задачи, мне кажется чем-то из разряда «Вещи становятся удивительно похожими на гвозди, если из инструментов у вас только молоток»
На самом деле автор переборщил, я как раз пытаюсь переписать код этой статьи на js (уже неделю туплю с триангуляцией делоне, но не суть).

Так вот, отлично расталкиваю комнаты вот таким кодом:
Заголовок спойлера
while(!separated) {
  let separated = true;
  this.preRooms.forEach((room1) => {
    let velocity = new geom.Point();
    let center1 = room1.createRectangle().createCenter();
    this.preRooms.forEach((room2) => {
      if (room1 === room2) return;

      if (!geom.Rectangle.intersect(room1.createRectangle(), room2.createRectangle())) return;

      let center2 = room2.createRectangle().createCenter();

      let diff = center1.clone().sub(center2);

      let diffLength2 = diff.length2();

      if (diffLength2 > 0) {
        diff.nor();
        velocity.add(diff);
      }
    });

    if (velocity.length2() > 0) {
      separated = false;

      velocity.nor().mult(4);

      room1._position.add(velocity);
      room1.setxy(room1._position);
    }
  });
}

зачем вообще вводить лишние этапы, вроде «расталкивания», если всё прекрасно можно сгенерить без них?
Ктстати + в тему.
Сам писал не раз алгоритмы для ADnD и никогда не прибегал к вопросу о рассталкивании комнат. Даже никогда не шел подобным путем…

P.S. Не думал, что Хабру интересны подобные алгоритмы. Надо что ли своих статей написать по ним :)
Не поделитесь алгоритмом?
Когда речь заходит о генерации я вспоминаю Daggerfall и его подземелья в которых можно блуждать часами в поисках скрытых дверей.
Моё мнение, что всегда лучше заботливо нарисовать всё руками, чем мучать игрока однообразным контентом.
У нарисованного руками есть один большой минус — почти нулевая реиграбельность.
Тут все зависит от самой игры. Если игра завязана чисто на геймплей (например Isaac) и не обладает мощным сюжетом, то процедурная генерация в самый раз. Рассказывать историю же лучше на продуманных локациях. В этом случае реиграбельность возникает именно за счет хорошего сюжета.
Естественно от типа игры это сильно зависит. Но какой бы офигенный и многовариантный сюжет ни был очень мало игроков захотят 3+ раз бегать по одним и тем же локациям и сражаться с одними и теми же противниками. Потому если есть цель на долго подсадить игрока на свое творение, то без рандомной генерации контента не обойтись.
очень мало игроков захотят 3+ раз бегать по одним и тем же локациям и сражаться с одними и теми же противниками

Вот и я этим дотерам так же говорю, а они глазами хлопают
Думаю, товарищ выше имел в виду singleplayer. В multiplayer противники как раз очень разные
А как же бессмертные Fallout 1/2?
Окружение одинаковое, но характеристики персонажей разные. В таких играх это ключевой момент. Включить в список можно Арканум.
Sign up to leave a comment.

Articles