Jak zarządzać różną prędkością akcji w grach RogueLike?

14

Jak zarządzać różną prędkością akcji w grach RogueLike?

Mam na myśli to, że gry turowe mogą mieć aktorów działających z różną „prędkością”, w zależności od akcji i innych cech. Następnie aktorzy wykonują więcej akcji / obrotów niż inni, jeśli mają większą prędkość, czy nie.

Jak ustalić, kiedy aktor powinien być w stanie działać (włączanie harmonogramu?)?

Wygląda na to, że istnieją różne sposoby, aby to zrobić? Czy potrafisz wyjaśnić niektóre algorytmy?

Klaim
źródło
7
Mam wrażenie, że jeśli szczegółowo opisałeś pożądane funkcje, algorytm stanie się oczywisty.
Tetrad
Jak powiedział Tetrad, a co rozumiesz przez „szybkość działań”? Roguelike są zazwyczaj turowe, więc nie widzę, jak to może się do nich zastosować.
Laurent Couvidou
2
Nawet w grach opartych na kolei niektóre istoty będą się poruszać szybciej lub wolniej niż inne, mając więcej lub mniej obrotów w porównaniu do innych. Naprawiłem pytanie.
Klaim
3
@Patrick Hughes Nethack, jeden z najstarszych i najpopularniejszych roguelike, ma bardzo ważny atrybut prędkości. nethackwiki.com/wiki/Speed
Harry Stern
1
@HarryStern Przez cały ten czas grałem kiepsko? To może wyjaśniać kilka rzeczy ... =)
Patrick Hughes

Odpowiedzi:

12

W mojej grze roguelike Tyrant korzystałem z systemu punktów akcji i ocen prędkości.

Gruntownie:

  • Większość akcji kosztowała AP 100
  • Większość stworzeń ma prędkość 100

Następnie pętla gry przebiegałaby w następujący sposób.

  • Bohater podejmuje akcję.
  • Upływający czas jest liczony jako hero action AP cost * 100 / hero speed
  • Wszystkie stworzenia otrzymują AP równe creature speed * elapsed time / 100
  • Stworzenia podejmują działania i odejmują AP, dopóki ich AP nie osiągną <= 0
  • Powtarzać

Ten system działał ogólnie bardzo dobrze, na przykład fajne funkcje:

  • Jeśli masz bardzo szybkiego bohatera (być może z powodu premii do prędkości magicznej), możesz wykonać kilka ruchów, zanim pojedyncze stworzenie może się poruszyć (jego AP byłby ujemny przez kilka tur, ponieważ upływ czasu byłby krótki)
  • Możesz sprawić, że niektóre działania będą mniej lub bardziej kosztowne, zmieniając koszt AP
  • Możesz opóźnić stworzenia, odejmując AP lub dać im nagłe jednorazowe wzmocnienie poprzez dodanie AP
mikera
źródło
Próbuję owinąć głowę wokół tego. Jeśli masz 1 gracza i 4 graczy. Czy to nie powoduje, że czas upływu stosu ostatniego gracza jest coraz większy. Pozwalając mu wykonać może 4 akcje, a drugi raz około 8 z rzędu?
Dr.Denis McCracleJizz
4

Punkty akcji. Daj każdej jednostce „prędkość”, aby szybsi aktorzy zdobyli więcej punktów w każdej turze. Spraw, aby każda akcja zajęła określoną liczbę punktów i odejmij tę liczbę od punktów gracza w tej turze, gdy wykonuje akcję. Jeśli akcja wymaga więcej punktów niż pozostawił gracz, oznacz ją jako „częściowo ukończoną” i pozwól mu zakończyć ją w następnej turze.

Wackidev
źródło
2

Czy masz na myśli, że akcje wykonują wiele tur (tj. Spanie przez 50 tur prosto)?

Chciałbym zachować obiekt player.currentAction. currentAction może zawierać liczbę tur, których wymagałaby akcja, jaka jest rozdzielczość akcji oraz listę stanów, które anulują akcję (w niebezpieczeństwie, zaatakowanie, za gorąco itp.). Każdej turze, zanim sprawdziliśmy, czy gracz nie jest w stanie wejść, sprawdzaliśmy, czy gracz jest w trakcie akcji, a następnie robiliśmy coś w rodzaju ...

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;
}
Jakiś facet
źródło
2

Możesz iść z punktami akcji, ale bez tur jako takich, ale tiki, które są znacznie mniejsze. Załóżmy, że każdy aktor ma szybkość akumulacji punktu akcji (np. 2 AP na tik). Rozpoczyna akcję wartą, powiedzmy, 10 AP. Gra przesuwa się o 5 tyknięć do przodu (ponieważ tyle kosztuje aktor, aby zapłacić cenę AP akcji).

Gdy jest kilku aktorów. Gra postępuje tyknięcie po tyknięciu, aż ktoś zapłaci cenę AP w momencie, w którym ta akcja zostanie wykonana.

Podejście jest podobne do @ mikera, tylko że nie ma negatywnych AP.

zzandy
źródło
Jest to znacznie bardziej bałagan, ponieważ musisz przechowywać „zamierzone” działanie stworzenia. Niektóre działania zależą od stanu, który może się zmienić, zanim tłum zgromadzi wystarczającą liczbę punktów.
Warwick Allison
Może nie jest idealny, ale odzwierciedla prawdziwe życie, kiedy decydujesz się uderzyć, najpierw machasz, a następnie uderzasz - więc jest to działanie przygotowujące decyzję, na co pozwala ten system. Pozwala to również wybrać akcję blokową w oparciu o rzeczywistą sytuację.
zzandy
Wolę iść w innym kierunku: mob wybiera akcję kosztującą n-tyknięcia, a następnie nie może wybrać nowej akcji, dopóki n-tyk nie upłynie. Może być zaimplementowany jako pojedyncza wartość, która jest zmniejszana przy każdym tiku.
kitsu.eb
-1

Czas wysokiej rozdzielczości

Jeśli uderzenie zajmie 400 obrotów, a kopnięcie zajmie 1000 obrotów, mogę uderzyć cię co najmniej dwa razy, zanim mnie kopniesz, i mogę uderzyć cię 5 razy, zanim mnie kopniesz dwa razy.

Sprawiając, że wszystko się zmienia, masz dużą kontrolę nad tym, jak długo to trwa.

Willy Goat
źródło