Zastanawiam się, jakie są szanse na „gwarantowane uderzenie” i „gwarantowane spóźnienie” (tj. Szanse, że kotek trafi smoka, a smok - kotka). Zapisz swój losowy wynik, a przed zastosowaniem różnic mocy zaznacz trafienie, jeśli mieści się w tych granicach. Zapobiegnie to problemowi szansy na trafienie w 100% ... chociaż istnieje jeszcze jedna opcja zapewniania szansy na trafienie, opisana poniżej.
D&D to „płaski” system, w którym prawdopodobieństwo rozkłada się równomiernie na możliwe wyniki rzutów. Inne systemy wykorzystują bardziej zakrzywiony rozkład, zwykle osiągany przez rzucanie wieloma kostkami i dodawanie ich. Łatwo jest stworzyć taką krzywą (przychodzi mi na myśl rand () + rand ()) / 2).
Inną możliwością jest „eksplodowanie kości”. W systemach takich jak Shadowrun i Savage Worlds, rzucenie maksymalnym możliwym wynikiem kości pozwala przerzucić tę kość i dodać nowy wynik. W swojej grze sprawdzasz, czy Twój losowy wynik przekracza określony próg, a jeśli tak, to rzucasz ponownie. Jeśli pozwolisz kościom eksplodować w nieskończoność, nawet najgorszy goblin ma szansę trafić boga i nie potrzebujesz wyraźnej mechaniki „gwarantowanego trafienia”.
Tak więc jednym możliwym podejściem z zakrzywionym rzutem, gwarantowaną szansą na brak i wybuchem kości byłoby coś takiego:
function getRoll():Number
{
var result:Number = (rand() + rand()) * 3; //Curved result from 0 to 6
if(result > 5.75) result += getRoll(); //Explode over a certain threshold, recursively
return result;
}
function attackHits():Boolean
{
var roll:Number = getRoll();
if(roll < 0.25) return false; //Guaranteed chance of miss
else return ((player.dex - enemy.dex) + (player.speed - enemy.speed) +
(player.luck - enemy.luck) + roll) >= 10; //Your original test.
}
Oczywiście jest to niesprawdzone i niezrównoważone; chciałbyś dopasować wszystkie te magiczne liczby, dopóki nie poczują się dobrze.
Jeśli chodzi o kopiowanie reguł dosłownie, istnieją z tym prawne i etyczne problemy. Wciąż czerpiesz inspirację z D&D i innych gier stołowych; właśnie w ten sposób wszystkie zostały zaprojektowane. Nie musisz też pokazywać graczowi dokładnie, jak działają reguły, i może się okazać, że użycie gładkiej krzywej zmiennoprzecinkowej kości daje lepsze wyczucie niż ograniczanie się do całkowitych ograniczeń kości fizycznych.
Zakładam, że jest to pytanie o równowagę gry, a nie o kodowanie, i istnieje wiele sposobów, aby sobie z tym poradzić. Z twojego istniejącego algorytmu podejrzewam, że komplikujesz go bardziej niż trzeba (trzy atrybuty ORAZ liczba losowa tworzą wyjątkowo błotnisty system z perspektywy gracza). Moim pierwszym instynktem jest uproszczenie!
Preferuj atrybuty, które wykonują wiele czynności, a nie wyniki, które są określane przez wiele atrybutów. DEX działa dobrze jako główny wyznacznik szansy na trafienie; dodanie wszystkiego innego służy jedynie utrudnieniu równowagi. Pomyśl o tym w ten sposób: oczekiwane obrażenia gracza przy każdym trafieniu to jego% trafienia pomnożony przez ich średnie obrażenia po trafieniu. Jak planujesz obliczyć „oczekiwany” lub „typowy”% trafienia przy tak wielu zmiennych?
Widzę inny problem, polegający na tym, że formuła nie skaluje się i prawdopodobnie tego właśnie doświadczasz. Zakładając, że DEX, LUCK i SPEED mają tendencję do zwiększania się w trakcie gry, różnice między graczem i potworem w tych statystykach również będą się zwiększać. Przykładowo, jeśli DEX gracza we wczesnej fazie gry mieści się w zakresie od 4 do 6, podobnie jak potwory, jest to modyfikator 10-20% do trafienia. Jeśli w późniejszych etapach gry zasięg wynosi od 10 do 20, oznacza to 100% modyfikator.
Jednym ze sposobów, aby to naprawić, jest utrzymanie stałych statystyk. Zasięg graczy i potworów jest taki sam w trakcie gry, a uzyskanie czegoś takiego jak +1 DEX to ogromna sprawa, niezwykle rzadka i traktowana jako taka (jeśli w ogóle istnieje). Wtedy twoja formuła będzie dobrze działać przez całą grę, a zobaczysz gracza z taką samą szansą na trafienie przez cały czas.
Innym sposobem jest zmiana tej zakodowanej „10” na skalowaną wraz z poziomem, więc może to „10 + poziom potwora” lub „10 + poziom lochu” lub coś takiego, co powoduje niewielki wzrost trudności w miarę postępu gry, chyba że gracz awansuje na wyższy poziom odpowiednio ich statystyki.
Trzeci sposób, jak powiedzieli inni, to ustawienie twardych limitów na najwyższy i najniższy dopuszczalny% trafień i po prostu powiedzenie „jeśli obliczona wartość jest mniejsza niż X, zamiast tego użyj X”.
Ze względu na kompletność zaznaczę, że nie ma absolutnego prawa, że MUSISZ uwzględniać przede wszystkim rzut na trafienie. Nieefektywne działanie w grze nie jest szczególnie zabawne i naprawdę nie wzbogaca doświadczenia, z wyjątkiem rzadkich przypadków. Alternatywą jest pozwolenie graczom ZAWSZE uderzać i po prostu zadzierać z zasięgiem obrażeń, aby czasami zadawali o wiele mniej obrażeń niż inni. Pamiętaj, że złożone systemy są bardziej zabawne dla projektanta niż dla gracza.
źródło
Możesz dodać trafienia krytyczne (zazwyczaj nie możesz przegapić, dodatkowe obrażenia) i krytyczne chybienia (płaska szansa na spudłowanie bez względu na wszystko, być może oszałamia gracza).
źródło
Wiele gier wykorzystuje pięcioprocentową zmianę trafienia niezależnie od wszystkich czynników oprócz normalnej formuły trafień.
źródło