Как управлять разной скоростью действий в играх RogueLike?

14

Как управлять разной скоростью действий в играх RogueLike?

Я имею в виду, что в пошаговых играх актеры могут действовать с разной «скоростью», в зависимости от действия и некоторых других характеристик. Тогда актеры эффективно выполняют больше действий / ходов, чем другие, если они имеют большую скорость или нет.

Как определить, когда актер должен уметь действовать (составить расписание?)?

Похоже, есть разные способы сделать это? Можете ли вы объяснить некоторые с помощью алгоритмов?

Klaim
источник
7
У меня такое ощущение, что если вы подробно описали те функции, которые вам нужны, алгоритм станет очевидным.
Тетрад
Как сказал Тетрад, плюс что вы подразумеваете под «скоростью действий»? Roguelikes, как правило, пошаговые, поэтому я не понимаю, как это может относиться к ним.
Лоран Кувиду
2
Даже в пошаговых играх некоторые объекты будут двигаться быстрее или медленнее, чем другие, имея больше или меньше ходов по сравнению с другими. Я исправил вопрос.
Klaim
3
@Patrick Hughes Nethack, один из старейших и самых популярных roguelikes, имеет очень важный атрибут скорости. nethackwiki.com/wiki/Speed
Гарри Стерн
1
@HarryStern Я плохо играл все это время? Это может объяснить несколько вещей ... =)
Патрик Хьюз

Ответы:

12

В моей игре в жанре roguelike Tyrant я использовал систему очков действий и рейтингов скорости.

В принципе:

  • У большинства действий был AP стоимость 100
  • Большинство существ имеют скорость 100

Тогда игровой цикл будет выглядеть следующим образом.

  • Герой принимает меры.
  • Истекшее время рассчитывается как hero action AP cost * 100 / hero speed
  • Все существа получают данные AP, равные creature speed * elapsed time / 100
  • Существа действуют и вычитают AP, пока их AP не будут <= 0
  • Повторение

Эта система в целом работала очень хорошо, например, приятные функции:

  • Если у вас очень быстрый герой (возможно, из-за бонуса магической скорости), вы можете сделать несколько ходов, прежде чем отдельное существо сможет двигаться (его AP будут отрицательными в течение нескольких ходов, потому что истекшее время будет небольшим)
  • Вы можете сделать некоторые действия более или менее дорогими, изменяя стоимость AP
  • Вы можете задержать существ, вычитая AP, или придавая им внезапный одноразовый импульс, добавляя AP.
mikera
источник
Пытаюсь обернуть мою голову вокруг этого. Если у вас есть 1 игрок и 4 игрока. Разве это не делает время последнего стека игроков все больше и больше? Позволить ему предпринять, возможно, 4 действия и второй раз около 8 подряд?
Dr.Denis McCracleJizz
4

Очки действий. Дайте каждой сущности «скорость», чтобы более быстрые актеры получали больше очков за ход. Заставьте каждое действие взять определенное количество очков для завершения и вычтите это число из очков игрока за тот ход, когда он предпринимает действие. Если действие требует больше очков, чем оставил игрок, пометьте его как «частично выполненное» и дайте ему закончить его в следующем ходу.

Wackidev
источник
2

Вы имеете в виду, что действия совершают несколько ходов (то есть, спать по 50 ходов подряд)?

То, что я хотел бы сделать, это сохранить объект player.currentAction. currentAction может содержать количество поворотов, которое потребуется действию, каково его разрешение, а также список состояний, которые отменяют действие (в опасности, при атаке, слишком жарко и т. д.). Каждый ход, прежде чем проверять вход игрока, мы проверяли, находился ли игрок в данный момент в середине действия, а затем выполняли что-то вроде ...

if(!player.currentAction.interrupted())
{
 if(player.currentAction.complete() == true)
   {
    player.currentAction.doAction(); //Some actions, like casting a spell, would have something happen here. Others, like sleeping, may or may not, depending on how you coded it.
    player.currentAction = null;
   }
else player.currentAction.decreaseTimer(); //Decrease our timer by one.
}
else 
{
 player.currentAction.interrupt(); //Let the player know he's been interrupted. Bungle the spell, cancel sleep, etc.
 player.currentAction = null;
}
Какой-то парень
источник
2

Вы можете идти с точками действия, но без ходов как таковых, но с тиками, которые намного меньше. Предположим, что у каждого актера есть скорость накопления очков действия (например, 2 AP за тик). Начинается действие стоимостью, скажем, 10 AP. Игра продвигается на 5 тиков вперед (потому что именно столько нужно, чтобы актер заплатил цену AP действия).

Когда есть несколько актеров. Игра продвигается тик за тиком, пока кто-нибудь не заплатит цену AP, в которой и выполняется это действие.

Подход похож на @ mikera's, только нет отрицательных точек доступа.

zzandy
источник
Это намного сложнее, так как вам нужно хранить «предполагаемое» действие существа. Некоторые действия зависят от состояния, которое может измениться до того, как моб наберет достаточно очков.
Уорик Эллисон
Может быть, он не идеален, но он отражает реальную жизнь, когда вы решаете ударить, сначала качаете, а затем наносите удар - так что это действие по подготовке решения, что и позволяет эта система. Также это позволяет выбрать действие блока в зависимости от реальной ситуации.
zzandy
Я предпочитаю идти в другом направлении: моб выбирает действие со стоимостью n-тиков, а затем не может выбрать новое действие, пока не истечет n-тиков. Это может быть реализовано как одно значение, которое уменьшается на каждом тике.
kitsu.eb
-1

Время высокого разрешения

Если удар занимает 400 ходов, и удар 1000 ходов, я могу ударить вас как минимум дважды, прежде чем вы меня ударите, и я могу ударить вас 5 раз к тому времени, как вы ударите меня дважды.

Делая вещи, делая много поворотов, у вас есть большой контроль над тем, сколько времени это займет.

Вилли Козел
источник