Jak opracować formuły uszkodzeń RPG?


117

Tworzę klasyczną grę RPG 2d (podobną do finalnej fantasy) i zastanawiałem się, czy ktoś ma jakieś porady na temat robienia formuł uszkodzeń / linków do zasobów / przykładów? Wyjaśnię moją obecną konfigurację. Mam nadzieję, że nie przesadzam z tym pytaniem i przepraszam, jeśli moje pytania są zbyt duże / szerokie

Statystyki Moich postaci składają się z następujących elementów:

enum Stat
{
    HP = 0,
    MP = 1,
    SP = 2,
    Strength = 3,
    Vitality = 4,
    Magic = 5,
    Spirit = 6,
    Skill = 7,
    Speed = 8, //Speed/Agility are the same thing
    Agility = 8,
    Evasion = 9,
    MgEvasion = 10,
    Accuracy = 11,
    Luck = 12,
};

Witalność jest w zasadzie obroną przed atakami fizycznymi, a duch jest obroną przed atakami magicznymi.

Wszystkie statystyki mają ustalone maksima (9999 dla HP, 999 dla MP / SP i 255 dla pozostałych). Dzięki umiejętnościom można zwiększyć maksima (99999 dla HP, 9999 dla HP / SP, 999 dla reszty) z typowymi wartościami (na poziomie 100) przed / po umiejętności + wyposażenie + itd. Będą wynosić 8000/20,000 dla HP, 800 / 2000 dla SP / MP, 180/350 dla innych statystyk

Późniejsza ilość HP wroga w grze będzie zazwyczaj mniejsza niż w milionach (super boss ma maksymalnie ~ 12 milionów).

Zastanawiałem się, jak ludzie właściwie opracowują odpowiednie formuły obrażeń, które skalują się prawidłowo? Na przykład na podstawie tych danych użycie formuł obrażeń dla Final Fantasy X jako podstawy wyglądało bardzo obiecująco. Pełne odniesienie tutaj http://www.gamefaqs.com/ps2/197344-final-fantasy-x/faqs/31381, ale jako szybki przykład: Str = 127, użyto polecenia „Atak”, wróg Def = 34.

1. Physical Damage Calculation:
Step 1 ------------------------------------- [{(Stat^3 ÷ 32) + 32} x DmCon ÷16]
Step 2 ---------------------------------------- [{(127^3 ÷ 32) + 32} x 16 ÷ 16]
Step 3 -------------------------------------- [{(2048383 ÷ 32) + 32} x 16 ÷ 16]
Step 4 --------------------------------------------------- [{(64011) + 32} x 1]
Step 5 -------------------------------------------------------- [{(64043 x 1)}]
Step 6 ---------------------------------------------------- Base Damage = 64043
Step 7 ----------------------------------------- [{(Def - 280.4)^2} ÷ 110] + 16
Step 8 ------------------------------------------ [{(34 - 280.4)^2} ÷ 110] + 16
Step 9 ------------------------------------------------- [(-246)^2) ÷ 110] + 16
Step 10 ---------------------------------------------------- [60516 ÷ 110] + 16
Step 11 ------------------------------------------------------------ [550] + 16
Step 12 ---------------------------------------------------------- DefNum = 566
Step 13 ---------------------------------------------- [BaseDmg * DefNum ÷ 730]
Step 14 --------------------------------------------------- [64043 * 566 ÷ 730]
Step 15 ------------------------------------------------------ [36248338 ÷ 730]
Step 16 ------------------------------------------------- Base Damage 2 = 49655
Step 17 ------------ Base Damage 2 * {730 - (Def * 51 - Def^2 ÷ 11) ÷ 10} ÷ 730
Step 18 ---------------------- 49655 * {730 - (34 * 51 - 34^2 ÷ 11) ÷ 10} ÷ 730
Step 19 ------------------------- 49655 * {730 - (1734 - 1156 ÷ 11) ÷ 10} ÷ 730
Step 20 ------------------------------- 49655 * {730 - (1734 - 105) ÷ 10} ÷ 730
Step 21 ------------------------------------- 49655 * {730 - (1629) ÷ 10} ÷ 730
Step 22 --------------------------------------------- 49655 * {730 - 162} ÷ 730
Step 23 ----------------------------------------------------- 49655 * 568 ÷ 730
Step 24 -------------------------------------------------- Final Damage = 38635

Po prostu zmodyfikowałem dzielniki, tak aby zawierały ocenę ataku broni i ocenę pancerza zbroi.

Obrażenia magiczne oblicza się w następujący sposób: Mag = 255, używana jest Ultima, wrogi MDef = 1

Step 1 ----------------------------------- [DmCon * ([Stat^2 ÷ 6] + DmCon) ÷ 4]
Step 2 ------------------------------------------ [70 * ([255^2 ÷ 6] + 70) ÷ 4]
Step 3 ------------------------------------------ [70 * ([65025 ÷ 6] + 70) ÷ 4]
Step 4 ------------------------------------------------ [70 * (10837 + 70) ÷ 4]
Step 5 ----------------------------------------------------- [70 * (10907) ÷ 4]
Step 6 ------------------------------------ Base Damage = 190872 [cut to 99999]
Step 7 ---------------------------------------- [{(MDef - 280.4)^2} ÷ 110] + 16
Step 8 ------------------------------------------- [{(1 - 280.4)^2} ÷ 110] + 16
Step 9 ---------------------------------------------- [{(-279.4)^2} ÷ 110] + 16
Step 10 -------------------------------------------------- [(78064) ÷ 110] + 16
Step 11 ------------------------------------------------------------ [709] + 16
Step 12 --------------------------------------------------------- MDefNum = 725
Step 13 --------------------------------------------- [BaseDmg * MDefNum ÷ 730]
Step 14 --------------------------------------------------- [99999 * 725 ÷ 730]
Step 15 ------------------------------------------------- Base Damage 2 = 99314
Step 16 ---------- Base Damage 2 * {730 - (MDef * 51 - MDef^2 ÷ 11) ÷ 10} ÷ 730
Step 17 ------------------------ 99314 * {730 - (1 * 51 - 1^2 ÷ 11) ÷ 10} ÷ 730
Step 18 ------------------------------ 99314 * {730 - (51 - 1 ÷ 11) ÷ 10} ÷ 730
Step 19 --------------------------------------- 99314 * {730 - (49) ÷ 10} ÷ 730
Step 20 ----------------------------------------------------- 99314 * 725 ÷ 730
Step 21 -------------------------------------------------- Final Damage = 98633

Problem polega na tym, że formuły całkowicie się rozpadają, gdy statystyki zaczynają przekraczać 255. W szczególności wartości obrony powyżej 300 zaczynają generować naprawdę dziwne zachowanie. Statystyki Wysoka Siła + Obrona prowadzą na przykład do ogromnych wartości ujemnych. Chociaż mogę być w stanie zmodyfikować formuły, aby działały poprawnie w moim przypadku użycia, prawdopodobnie łatwiej byłoby po prostu użyć zupełnie nowej formuły. Jak ludzie faktycznie opracowują formuły uszkodzeń? Zastanawiałem się nad otwarciem programu Excel i próbowałem w ten sposób zbudować formułę (na przykład mapowanie statystyk ataku vs. statystyki obrony), ale zastanawiałem się, czy istnieje łatwiejszy sposób? Chociaż nie mogę tutaj przedstawić pełnej mechaniki gry, czy ktoś mógłby zasugerować dobre miejsce do rozpoczęcia tworzenia formuły obrażeń?

Dzięki


1
Myślę, że postąpiłeś właściwie, ustalając, jakie statystyki, HP itp. Chcesz. Jest to część doświadczenia gracza i matematyka powinna pasować do „tych” wartości. Przy tak wielu statystykach gracz powinien intuicyjnie wiedzieć, jakie statystyki wpłyną na jego magiczne, fizyczne ataki itp. Pierwsze duże pytanie dotyczy tego, jakie statystyki odpowiadają atakowi i jakie statystyki bronią się przed tymi statystykami (np. PhDef broni się tylko przed PhAtk).
Jonathan Connell

Ogromną rzeczą jest równowaga, prawdopodobnie dobrym pomysłem byłoby stworzenie interaktywnego programu (powiedzmy w C # lub czegoś szybkiego), w którym możesz zmieniać statystyki i sprawdzać, jakie wyniki uzyskasz. Jeśli możesz zmienić formuły w czasie wykonywania, to też pomogłoby :)
Jonathan Connell,

4
Rozważ użycie do tego Excela. Wydaje się, że dobrze pasuje do zadania i nie musiałbyś pisać linii kodu.
Alex Schearer

2
Najważniejsze pytanie brzmi: która formuła zapewnia graczom najwięcej radości ? (przeszukał stronę pod kątem „zabawy” i nie wspomniał o niej: P) Jeśli statystyki lub obrażenia rosną zbyt szybko, gracze stają się nieczuleni, jeśli rośnie powoli, nudzą się. Gracze muszą czuć się szczęśliwi, kiedy zdobywają poziom, więc muszą czuć, że wkładają w to pracę, a także że będzie to miało zauważalny wpływ na ich wydajność w grze. (to moje 2 pensy)
Annan

3
„(Def - 280,4) ^ 2”, co? Cóż, spodziewałbym się, że wszystko stanie się dziwne nie dla Def> 255 lub Def> 300, ale właściwie dokładnie dla Def> 280,4;) Następnie wyższa def będzie efektywnie oznaczać niższy def w tym punkcie formuły, zachowując się jak oczekiwane w innych punktach. BTW, możesz po prostu wykreślić te rzeczy za pomocą Wolfram Alpha. Napraw wystarczającą liczbę zmiennych, aby zachować tylko dwie, a otrzymasz ładny wykres powierzchni.
Christian

Odpowiedzi:


140

Tworzenie takich formuł wymaga znajomości elementarnych funkcji matematycznych - rzeczy, których nauczyłeś się w klasie algebry i rachunku różniczkowego.

Kiedy już je opanujesz, po prostu zadaj sobie pytanie (zamień „wartość” na „obrażenia”, „zdrowie”, „prędkość” lub cokolwiek innego) :

Następnie po prostu popraw go (dodaj / pomnóż, zmień wartość bazową itp.), Aż poczujesz się dobrze. Kalkulator graficzny pomoże ci zobaczyć, jak zmiany parametrów wpłyną na funkcję.


Nawiasem mówiąc, problemy, które napotykasz, są spowodowane przepełnieniem liczb całkowitych .

Używaj typów zmiennych, które są wystarczająco duże, aby pomieścić liczby, z którymi pracujesz. Rozmiary różnią się w zależności od platformy w C ++, ale przy użyciu 32-bitowego kompilatora Visual Studio unsigned intjest on 32-bitowy, a unsigned __int64 (specyficzny dla MS) - 64-bitowy. Rozważ również użycie double.

Ponadto spróbuj zreorganizować swoje operacje, aby nie napotkać tak dużych liczb w pierwszej kolejności (na przykład, a nie MDef * MDef / 110zrobić (int)((float)MDef / 110 * MDef)) .


3
Jeśli napotykasz przepełnienia liczb całkowitych, konwersja na liczbę zmiennoprzecinkową - która niezawodnie obsługuje 24 bity części całkowitej - będzie miała inny zestaw problemów z dokładnością.

@Joe: Cofnąłem twoją edycję; Zdecydowałem się __int64na to, uint64_tponieważ stdint.hnie jest dostępny w Visual Studio 2008 i niższych wersjach, i nie chciałem mylić biednego chłopca bardziej niż on.
BlueRaja - Danny Pflughoeft

1
@BlueRaja: Nie widzę żadnych dowodów, że pytający używa Visual Studio i jest obecny w każdym innym standardowym zestawie narzędzi (w tym Visual Studio 2010).

Myślę, że pominąłeś też jeden ważny wariant: jeśli chcesz, aby obrażenia miały górną granicę, do której możesz się zbliżyć, ale nigdy nie do końca dosięgnie, możesz użyć funkcji sigmoidalnej.
Martin Sojka

1
user127817: Wszystko, co jest naprawdę ważne, to wzrost funkcji. Co do reszty, po prostu przetestuj, aż poczuje się zrównoważony. Jeśli uważasz, że postać jest zbyt potężna, zmniejsz jej obrażenia. Jeśli uważasz, że zabicie konkretnego bossa lub wroga trwa zbyt długo, obniż jego zdrowie lub zbroję. I tak dalej.
BlueRaja - Danny Pflughoeft

31

Statystyki Moich postaci składają się z następujących elementów:

Jest twój prawdziwy problem: zdefiniowałeś swoje statystyki, zanim zdefiniowałeś, co te statystyki naprawdę oznaczają . Stawiasz wózek przed koniem.

Zobacz, jak działa D&D (blat). „Siła” sama w sobie nic nie znaczy; to tylko coś znaczy, ponieważ istnieje reguła, która mówi: „Dodaj premię do siły do ​​ataku w zwarciu”. Ta zasada jest częścią zasad walki D & D. Bez zasad walki „Siła” jest na ogół bez znaczenia.

Pierwsze pytanie, które musisz sobie zadać, brzmi: ile chcę różnicowania między postaciami? Ponownie spójrz na D&D. Tam mają 6 podstawowych statystyk. Te statystyki określają różne wymiary gry dla postaci. Postać o wysokiej Zręczności będzie miała inne opcje niż postać o niskiej Zręczności.

Ale powodem tej różnicy są wszystkie zasady. Wysoka Zręczność oznacza bonusy do ataków dystansowych; możesz częściej trafiać atakami dystansowymi. Tak więc pomiędzy siłą a zręcznością masz dwa wymiary gry: dystansowy kontra walka wręcz.

Inteligencja i Mądrość również tworzą coś w rodzaju powiązania, ale one bardziej współdziałają z określonymi klasami. Int sprawia, że ​​Czarodzieje i inni magiczni magowie są lepsi (lub możliwe w niektórych zestawach reguł), Mądrość jest niezbędna dla Kleryków i innych boskich magów. Ponieważ boskie i tajemne zaklęcia mają różne listy zaklęć, te dwie statystyki dotyczą różnych wymiarów gry.

Musisz zdefiniować podstawowe zasady dotyczące statystyk, zanim będziesz mógł zdefiniować funkcje progresji wzrostu i tym podobne. Nie potrzebujesz szczegółów; nie musisz mówić, że „każdy punkt siły jest dodawany do losowego rzutu, aby ustalić, czy trafi atak w zwarciu”. Potrzebne są meta reguły, takie jak „zręczność czyni atakujących dystansowych lepszymi”. Możesz później dokładnie dowiedzieć się, w jaki sposób je poprawia.

Istnieją różne sposoby rozwijania postaci. Powszechną staroświecką sztuczką Final Fantasy było po prostu użycie poziomu postaci w obliczeniach obrażeń. Może to być po prostu pomnożenie poziomu przez odpowiednią statystykę, lub może to oznaczać zastosowanie funkcji do poziomu postaci. Powiedzmy, postęp kwadratowy, aby szybkość obrażeń postaci wzrastała z każdym poziomem.

Jakkolwiek chcesz, aby twoje funkcje walki działały, muszą one uwzględniać postęp. Twoje funkcje wymagają haków do postępu.

D&D ma zabawny sposób progresji. Jest oparty na klasach; za każdym razem, gdy wchodzisz na wyższy poziom, dostajesz nowe funkcje klasowe i płaski bonus do twojego trafienia, w zależności od klasy postaci. Jednak niektóre funkcje klasowe same się poprawiły. Zaklęcia w D&D miałyby wbudowany postęp. Zaklęcie może zadać 1k4 obrażeń na 2 poziomy rzucającego zaklęcie powyżej pierwszego. Tak więc każdy inny poziom czarodzieja czyni to zaklęcie lepszym.

D&D również intensywnie wykorzystywało progresję opartą na przedmiotach. Do 4. edycji postęp oparty na przedmiotach był głównie przeznaczony do walki z postaciami, ale nawet w starszych edycjach rzucający zaklęcia posiadali przedmioty, które dawały im wzmocnienia statystyk lub inne modyfikacje (lub spłaszczanie dawało im zaklęcia).

Przedmioty to kolejna rzecz, którą muszą wziąć pod uwagę funkcje bojowe. Czy przedmioty tylko wzmacniają jedną lub więcej statystyk, gdy są na wyposażeniu, czy też robią też inne rzeczy? D&D było nieco dziwne, pod tym względem statystyki rzadko się zmieniały; broń po prostu zadała obrażenia XdY, prawdopodobnie z premią opartą na jednej z twoich statystyk. I to było to. Więc jedynym sposobem na zadawanie większych obrażeń w bitwie było znalezienie lepszej broni. W wielu grach RPG gry wideo uwzględniają poziom oprócz broni.


6
Jest twój prawdziwy problem: zdefiniowałeś swoje statystyki, zanim zdefiniowałeś, co te statystyki naprawdę oznaczają. Stawiasz wózek przed koniem. ”. Zdecydowanie się nie zgadzam; liczby same w sobie są tylko sposobem na poinformowanie gracza o jego mocy itp. jest to część projektu gry. Jeśli pójdziesz na odwrót, możesz skończyć z bossem o mocy 147 KM ... kto tak naprawdę tego chce?
Jonathan Connell

8
Cóż, Sarevok (w Baldurs Gate) miał tylko 135 HP ...
Martin Sojka

12
@ 3nixios: Jakie znaczenie ma fakt, że szef ma 147 KM? Liczy się to, czy ostatni boss jest trudny, interesujący, a przede wszystkim satysfakcjonujący do pokonania. Boss z dużą ilością Hp nie jest interesujący; to strata czasu. Szef które mogą bałagan ze swojej partii, że wymaga specjalnych taktyk, które zmieniają się z chwili na chwilę, że wymaga to musisz wykorzystać każdą możliwość trzeba jego potencjał, który jest tym, co sprawia, że dla wielkiego bossa. Każdego dnia zabiorę interesującego bossa o mocy 147 KM na nudny blok Hp.
Nicol Bolas,

@Nicol Bolas Całkowicie się z tobą zgadzam, starałem się wesprzeć, dlaczego uważam, że punktem wyjścia muszą być statystyki. Statystyki, od których rozpoczyna się gracz, są podstawowymi wskazówkami i rozgrywką, w którą gracz gra podczas gry. Zgadzam się, że ogromne paski HP dla bossów nie są konieczne, daje to graczowi lepsze wskazanie najlepszego ustawienia przeciwko bossowi, jakie statystyki broni itp. Są bardziej skuteczne. Ilość oczywiście nie ma znaczenia w sposobie jej obliczania, ponieważ możesz po prostu podzielić lub pomnożyć swoje końcowe obliczenia przez stałą c i wykonać to.
Jonathan Connell

2
@ 3nixios: Ale to część mojego punktu widzenia. Zręczność w D&D istnieje, aby umożliwić rozróżnienie między postaciami specjalistami do walki w zwarciu i specjalistami od dystansu. Gdyby nie istniała koncepcja ataków w zwarciu i na dystans (a na przykład w wielu grach FF nie ma), to rozróżnienie nie musiałoby istnieć. Możesz uciec z 5 statystykami zamiast 6. Definiowanie zakresu Hp to jedno, ale definiowanie podstawowych statystyk, które masz, to drugie. Statystyki wymagają reguł, zanim będziesz w stanie je zrozumieć, i musisz wiedzieć, co zamierzasz zrobić, zanim powiesz, że posiadanie tej statystyki jest dobrym pomysłem.
Nicol Bolas,

22

Twoje formuły wydają się dość skomplikowane. Nie jestem pewien, jak radzą sobie z tym profesjonalni programiści RPG, ale zalecałbym skupienie się na prostocie. Spróbuj znaleźć najprostszą możliwą formułę, która nadal zawiera zakres statystyk, których chcesz użyć. Na przykład, czy możesz modyfikować statystyki przed obliczeniem obrażeń, a nie modyfikować obrażenia podczas obliczania? Kiedy będziesz mieć na uwadze formułę, spróbuję ją przedstawić na wykresie dla szerokiego zakresu możliwych wartości, aby zobaczyć, jak będzie się ona zachowywać w miarę zwiększania się poziomu graczy. Oczywiście im mniej masz zmiennych, tym bardziej będzie to możliwe.

Ponadto BlueRaja dostarczył ważne wyjaśnienie, dlaczego możesz zobaczyć nieoczekiwane wartości na wyższych poziomach statystyki. Ważne będzie używanie niepodpisanych typów i sprawdzanie przepełnień.


10
+1 za proste. Każdy może robić bardzo skomplikowane rzeczy, ale to nie jest dobra gra.
aaaaaaaaaaaa

8
@Randolf, chyba że korzystasz z Apple 2 lub czegoś takiego, jest bardzo wątpliwe, że usunięcie mnożnika lub dzielenia tutaj i będzie miało wpływ na wydajność w jakikolwiek wymierny sposób.
Tetrad

8
@Randolf Wielka bitwa w RPG może oznaczać coś w rodzaju 10 obliczeń obrażeń na sekundę, nowoczesny procesor może wykonać kilka miliardów operacji na sekundę. Możesz bezpiecznie założyć, że wpływ takiej „widocznej” matematyki na wydajność jest znikomy. Proste w tym przypadku jest dla tych, którzy projektują i dla tych, którzy grają w grę, a nie dla naszych komputerów.
aaaaaaaaaaaa

6
@Randolf Richardson: Wydaje mi się, że w tym przypadku może Ci się nie udać. W przypadku gry MMO bardzo ważny jest dobry szybki protokół beztłuszczowy, a ciężkie zadania, takie jak fizyka, muszą być zaprojektowane z myślą o wydajności. Ale obliczanie obrażeń jest podstawową rozgrywką, powinno być zaprojektowane z myślą o rozgrywce, jeśli stawiasz problemy z wydajnością w takim pytaniu, ryzykujesz utratą części gry. Mówiąc o wydajności, gdy ma to znaczenie, ryzykujesz wrażenie, że jest to ważny obszar do optymalizacji, tym samym odciągając uwagę od prawdziwych grzeszników wydajności.
aaaaaaaaaaaa

5
@Randolf: Nic nie sugeruję; Mówię , że optymalizacja czegoś, co nie jest wąskim gardłem, to strata czasu.
Nicol Bolas,

11

Późniejsza ilość HP wroga w grze będzie zazwyczaj mniejsza niż w milionach (super boss ma maksymalnie ~ 12 milionów).

Mam z tym problem. Powinieneś budować swoich bossów w oparciu o to, co twoim zdaniem powinni być w stanie poradzić sobie gracze. Budujesz graczy i formułujesz walki wokół tego, jak chcesz, aby Twoi bossowie byli.

Gdy zbudujesz mechanikę walki i role, możesz zdecydować, w jaki sposób chcesz zaprojektować swoich bossów, ponieważ powinna to być odpowiednia równowaga między obrażeniami, które gracze mogą zadawać / absorbować, a tym, co boss może zadawać / absorbować.


4
+1 do zdrowia wroga powinno zależeć od tego, co gracz może racjonalnie poradzić sobie w tym momencie, a nie na odwrót.
BlueRaja - Danny Pflughoeft

7

Te liczby, które zacytowałeś, prawdopodobnie pochodzą z drobiazgowej symulacji na przestrzeni tysięcy przebiegów.

Powinieneś więc napisać symulację, stworzyć postać na poziomie 20 i zobaczyć, jak sobie radzi przez około 200 bitew przeciwko typom wroga, z którym powinien walczyć w tym momencie. Zrób to ponownie dla postaci poziomu 30 (prawdopodobnie w następnej części świata).

Zajmie to trochę czasu, ale napisanie automatycznych symulacji z pewnością ułatwi to znacznie więcej niż zgadywanie i ręczne odtwarzanie.


5

Myślę, że popełniacie błąd, chcąc stworzyć formułę bez odpowiedniego projektu.

Najpierw zacznij od projektu, a następnie zacznij myśleć o reprezentowaniu projektu we wzorach. Im bardziej przejrzysty jest Twój projekt, tym łatwiej jest znaleźć proste i / lub precyzyjne formuły.

Spróbuj wdrożyć „typy” wrogów, np. „Opancerzony” => atak gracza, jeśli jest on fizyczny, zmniejsza się o 50%. Nie zmuszaj bitwy do abstrakcji, pomyśl o tym, co jest istotne, a co nie.

Jeśli według twojego projektu „pancerni wrogowie” są słabi przeciwko magii, ale silni przeciwko obrażeniom fizycznym, przedstaw to w kodzie. Pamiętaj jednak, że wykonałeś wiele testów, ponieważ wartości nie będą działać magicznie przy pierwszym pisaniu kodu. Spróbuj stworzyć projekt, umieść logikę w kodzie, zawsze sprawdzaj, czy jest to techniczna reprezentacja tego, co miałeś na myśli i czy nie zmienia to wartości, dopóki tak nie jest.


Już to obejmowałem - ocena pancerza zmniejsza fizyczne obrażenia od ataku, chyba że atak jest oznaczony jako przebijający pancerz lub wykorzystuje formułę obrażeń opartych na%
użytkownik127817

5

Chociaż mój projekt nie opuścił fazy arkusza kalkulacyjnego, doszedłem do jednego wniosku dotyczącego projektowania matematyki dla RPG:

Utrzymuj je tak prosto, jak to możliwe. W projekcie, nad którym pracuję, zastosowałem bardzo uproszczone formuły, które są adekwatne do systemu bezklasowego. To znaczy. Zaklęcie Ognistej Kuli ma obrażenia równe 30. Forum to:

BaseSpellDamage * Attribute (5 * 6)

Możemy również dodać takie modyfikatory:

Result = (BaseSpellDamage * Attribute) (5*6)
Result = Result + (Result * 50%) (30 = 30 + (30 * 50%))

Końcowym wynikiem byłoby 45 obrażeń. Odkryłem, że używanie mnożników procentowych jest bardzo łatwym i bardzo skalowalnym rozwiązaniem do pracy. Zamiast przychodzić z nieparzystymi liczbami o złożonej matematyce, aby dowiedzieć się, jaki wynik chcemy osiągnąć.

Teraz możemy obliczyć odporność na obrażenia, która po prostu obliczy obronę przed zadanym typem obrażeń. Istnieją dwa podejścia i szczerze mówiąc, nie zdecydowałem, które będą bardziej odpowiednie, ale oba są proste i opłacalne:

DamageResult = Resistance * Damage ( 50% * 45)

Tak więc wynikiem końcowym będzie 22 obrażenie (właśnie wyciąłem wynik częściowy).

Inna formuła:

DamageResult = Damage - Resistnace (45 - 22).

Tak więc wynikiem końcowym będzie 23. Jeśli zdarzy się, że opór jest większy niż otrzymane obrażenia, postać po prostu nie otrzymuje żadnych obrażeń. Oczywiście to od Ciebie zależy, czy w takiej sytuacji nie ma miejsca, chyba że chcesz.

Chociaż muszę przyznać, że skalowanie procentowe jest nieco łatwiejsze do zrównoważenia i skalowania. Ale to zależy również od twoich liczb podstawowych. Skalowanie procentowe będzie działać najlepiej, jeśli zaczniesz od 100 lub więcej. Jeśli operujesz na małych liczbach (wszystko poniżej 100, szczerze mówiąc), może to stać się dziwne, ponieważ zaczniesz uzyskiwać wyniki zmiennoprzecinkowe, które trudno będzie zrównoważyć i faktycznie zrobić z nimi coś interesującego.

Prawdopodobnie optymalnym rozwiązaniem w takim przypadku jest zastosowanie obu podejść, gdy uznają, że pasują. Lub jeśli jesteś fanem wielkich liczb, zacznij od 1000.

I na końcach. Nie do końca doszłam do tych wniosków. Spędziłem sporo czasu, czytając różne instrukcje RPG (Hero, DnD). Szczególnie pomocne było DnD, ponieważ działa na podobnych zasadach, ale zamiast atrybutów używa poziomów dla swoich formuł, mogą one być czasem bardziej złożone. Niż to, co tutaj przedstawiłem.

W przypadku obu przypadków najlepszą radą jest: staraj się, aby były one tak proste, jak to możliwe. Nie używaj żadnej zaawansowanej matematyki ani długich równań, ponieważ są one podatne na błędy, które są trudne do wykrycia, gdy masz do czynienia z 87234 innymi rzeczami jednocześnie.


3

Jak wspomnieli inni, formuła Final Fantasy X jest dość złożona. Ogólnie dla tej serii im późniejsza gra, tym bardziej skomplikowana formuła. Prawdopodobnie łatwiej jest całkowicie oprzeć formułę obrażeń na innej grze. Ogólnie jednak myślę, że warto omówić z bardzo ogólnego poziomu, jakie formuły obrażeń można znaleźć na świecie i jak stworzyć grę opartą na nich. Pierwszą rzeczą, którą musisz zdecydować, jest to, jakie obrażenia chcesz zadać pod koniec gry i jakie statystyki chcesz, aby gracz mógł mieć? Gdy to zrobisz, możesz wybrać system formuł, a następnie zoptymalizować formułę i wartości broni, aby odzwierciedlić te zakresy w czasie.

Oparte wyłącznie na statystykach

To dobry pomysł, jeśli chcesz, aby twoje postacie były elastyczne pod względem poziomów wrogów, z którymi mogą się zmierzyć. Taka formuła będzie zależeć tylko od statystyk gracza, jego wyposażenia i statystyk wrogów. Te formuły są zwykle dość proste. Na przykład Final Fantasy Legend II (patrz http://www.shenafu.com/ffl2/weapon.php) ma broń, która wyrządza szkody w oparciu o prostą formułę:

(Stat+StatBonus)*WeaponStrength - Defense*4

Taka formuła jest dobra, jeśli chcesz bardzo prostej metody szacowania obrażeń lub szybkiego punktu odskoczni do modyfikowania obrażeń w oparciu o inne czynniki, takie jak umiejętności i słabości żywiołów.

Aby pokazać, jak szeroki może być ten rodzaj formuły, rozważ formułę obrażeń dla gry Inflacja RPG, gry na Androida i iOS (patrz http://inflation-rpg.wikia.com/wiki/Calculations ). Formuła w dużej mierze zależy zarówno od statystyki, jak i od wyposażenia. Każdy element wyposażenia ma dwie statystyki - bonus do statystyki ATK i wartość mnożnika. Niektóre elementy wyposażenia mają niskie mnożniki, ale wysokie bonusy, inne mają niskie bonusy, ale wysokie mnożniki. Dla postaci posiadającej tylko 10 ATK, Topór Bojowy z premią 5000 ATK, ale niskim mnożnikiem 145% jest doskonałym wyborem. Całkowite obrażenia wynoszą (10+5000)*1.45 = 7264, ale Estoc, z premią 0 i mnożnikiem 300%, jest złym wyborem - obrażenia są (10+0)*3 = 30. W dalszej części gry postać z atakiem 5000 wolałaby zmieniać broń.

Na podstawie statystyk i poziomów:

Dobrym przykładem tego jest Final Fantasy V, VI i Final Fantasy XII (patrz na przykład http://www.gamefaqs.com/ps2/459841-final-fantasy-xii/faqs/45900 ). Wzór na miecze w FFXII jest następujący:

DMG = [ATK x RANDOM(1~1.125) - DEF] x [1 + STR x (Lv+STR)/256]

a wzór obrażeń dla pięciolinii jest następujący:

DMG = [ATK x RANDOM(1~1.125) - DEF] x [1 + STR x (Lv+MAG)/256]

Są bardzo podobne, ale zauważ, że formuła miecza zależy tylko od siły i poziomu, podczas gdy formuła kija zależy od siły, magii i poziomu. Zaletą tego rodzaju formuły jest to, że pozwala graczowi na dwa sposoby rozwoju - budowanie statystyk lub budowanie poziomów. Minusem jest to, że również karze postacie na dwa sposoby. Ostatecznie to pozwala graczowi wyrównać poziom, aby zwiększyć zadawane obrażenia (w przypadku FFXII oznacza to zwiększenie zadawanych obrażeń o ~ 4% na poziom około 50, gdy weźmiesz pod uwagę przyrost statystyk), aby pomóc dostosować poziom trudności do ich poziom komfortu.

Naprawiono uszkodzenia:

Formuły o ustalonych obrażeniach nie zależą od statystyk postaci ani od poziomu, zależą tylko od wewnętrznej formuły obrażeń samej broni. Wciąż mogą się różnić w zależności od zasięgu, ale zadają takie same obrażenia niezależnie od użytkownika (z wyjątkiem wszelkich innych efektów specjalnych lub cech postaci). Najlepiej nadają się do użycia, jeśli broń będzie zadawać stałe obrażenia, a zdolność do wyposażenia broni zależy od statystyk i / lub poziomu. Robi to na przykład Diablo 2, podobnie jak wielu roguelike, które dysponują bronią zależną od rzutu kością. Biorąc to pod uwagę, „ustalone obrażenia” nie oznaczają „nieprzypadkowego” - i w rzeczywistości zazwyczaj wyrządzane szkody mają pewien element losowości.

Jest to dobra metodologia, jeśli chcesz mieć broń łatwą do przenoszenia między postaciami lub dokładnie kontrolować zadawane obrażenia, które postaci w określonych punktach gry mogą zrobić, jeśli wiesz, do jakiego sprzętu mają dostęp (za pośrednictwem tablic zrzutu, skrzyń) i kraść stoły).

Innym miejscem, w którym się na to natkniesz, są określone rodzaje sprzętu lub przedmiotów w Final Fantasy. Na przykład 1000 igieł zawsze zadaje 1000 obrażeń. W Final Fantasy Legend II sztuki walki zadają obrażenia w oparciu o wzór:

Damage = WeaponStrength*(90-UsesLeft) - 4*Defense

Final Fantasy XII ma również nieco ustalone obrażenia dla dział, zadając obrażenia zgodnie ze wzorem:

DMG = [ATK x RANDOM(1~1.125)]^2

Chociaż obrażenia są dość losowe, różnią się jedynie o 26,5 procent w całym zakresie, więc masz pewność, że z czasem zadasz określony poziom obrażeń. Tego rodzaju ataki są przydatne dla postaci, które mają zarówno niskie statystyki, jak i niski poziom w grach, które zwykle odpowiadają za te czynniki w zadawaniu obrażeń. Ponadto ignorują obronę celu (chociaż formuła może być łatwo przerobiona, aby pasowała do obrony, jeśli chcesz).


2

ze względu na napotkany problem we wszystkich grach z końcowej serii fantasy limit statystyk wynosi 255. na poziomie 100 statystyki wyniosłyby 255.

mówisz o zwiększaniu statystyk za pomocą umiejętności i sprzętu. Pamiętam, że widziałem to w grach, ale sposób, w jaki to się dzieje, jest w formule. jest dodatkowy krok, który sprawdza modyfikatory umiejętności i wyposażenia i stosuje je po użyciu statystyk.

w twoim przypadku byłby to krok 21: zastosuj modyfikatory umiejętności krok 22: zastosuj modyfikatory wyposażenia krok 23: obrażenia końcowe.

jeśli jesteś zainteresowany google dla ostatecznych formuł fantasy, są tam. Mam kopie faktycznej mechaniki bitwy, w tym sztucznej inteligencji do ostatecznych fantasy 4, 6, 7 i 9. ludzie złamali je z oryginalnych gier, gdy tworzyli romy dla emulatorów. Nietrudno jest znaleźć, jeśli spojrzysz wystarczająco mocno.

największą rzeczą do tworzenia formuł są testy. skonfiguruj skrypt, aby poprowadzić bitwę po obu stronach i przeprowadzić kilkaset bitew. zmieniaj potwory i statystyki i sprawdzaj, czy to działa, czy jeśli poziom 40 zabije wszystko, jest całkiem możliwe, że boss nie jest w stanie zabić lola. wskazówką byłoby wyłączenie wszystkich animacji, ponieważ imponujące jest to, jak szybko AI mogą walczyć, gdy nikt nie patrzy.


2

Zastanawiałem się, jak ludzie właściwie opracowują odpowiednie formuły obrażeń, które skalują się prawidłowo?

Pierwsze 2 rzeczy to:

  • zdecyduj, co rozumiesz przez „poprawnie” - jaki jest twój pomysł na „prawidłowe uszkodzenie”?
  • zdecyduj, co rozumiesz przez „skalę” - jakie wartości się zmienią i jaki efekt mają mieć te zmiany?

Kiedy już to wiesz, masz wystarczająco dużo informacji, aby użyć formuł matematycznych, o których BlueRaja wspomniał w swojej odpowiedzi . Pamiętaj tylko, że nie ma czegoś takiego jak „odpowiednia” formuła obrażeń - tylko taka, która pasuje do twojego projektu dla rodzaju doświadczenia, jakiego oczekują twoi gracze.


To bardzo niepomocny komentarz. Podsumowuje się do „nie wiem” i dlatego jest stratą czasu każdego. Oznaczanie do usunięcia.
Krythic,

1

alternatywnie, jeśli szukasz bardzo prostej formuły, wykonaj następujące czynności:

(Pamiętaj, że to mój pomysł na formułę)

Po pierwsze, dla prostej formuły ataku potrzebujesz tylko kilku statystyk. Statystyka ataku gracza (może to być Siła lub Magia, w zależności od rodzaju ruchu).

Następnie utwórz zmienną o nazwie MovePower. Będzie to zależeć od ruchu, a lepsze ruchy miałyby lepszą siłę ruchu. W przypadku mojej formuły ogólne polecenia „Atak” mają Siłę Ruchu równą 5.

Następnie uczyń obronę statystyką opartą na procentach (i oczywiście uniemożliwi osiągnięcie 100% obrony przed obrażeniami)

Następnie, podczas fazy ataku, wystarczy pomnożyć statystykę ataku przez siłę ruchu i usunąć obrażenia na podstawie obrony przeciwników! prosty!

Możesz także zdecydować się na innych modyfikatorów, na przykład, jeśli ruch uderzy (Celność), jeśli ruch ma kolejny dodatkowy efekt (Bio, zadające truciznę) i zdecydujesz się na trafienie ((Dokładność ponownie), zwiększy obrażenia / obniży ocenę ruchy, które zmieniają statystyki, itp. Baw się dobrze!


Inną opcją, która unika zbroi jako problemu percentyla (pozwalając tym samym jej wyglądać tak samo), jest obliczenie obrażeń w stosunku do zbroi jako porównania, które staje się mnożnikiem. Coś jak Ln (atk / def) jako baza. Pozwala to skalować statystyki pancerza obronnego w miarę upływu czasu w ten sam sposób. Zastanów się, jak uzyskać podstawowy pożądany zasięg obrażeń, gdy statystyki obrażeń i pancerza są takie same, i stamtąd ekstrapoluj. To sprawia, że ​​ataki typu „unikanie zbroi” wymagają sztuczki, ale jest to część tego, do czego służy kreatywność.
Aviose,

1

Zasadniczo musisz dowiedzieć się dwóch rzeczy.

  1. Jak poprawnie wykonać obliczenia z dużymi liczbami.
  2. Jak chcesz i oczekujesz, że obrażenia od ataku będą się zachowywać wobec słabszych i silniejszych przeciwników.

1

Możesz użyć doublebiblioteki użytkownika lub dużej liczby. Wykonywanie obliczeń z dużymi liczbami (np. W grach typu klikanie / bezczynność często opiera się na bibliotekach z tak dużymi liczbami). W twoim przypadku liczby są stosunkowo małe, więc użycie 64-bitowej liczby zmiennoprzecinkowej zapewni wymaganą elastyczność.

2)

Jak chcesz, żeby gra się zachowywała? kilka przykładów:

  • Jednym z podejść jest ATKdecyzja, czy uderzysz, czy nie, i rzucisz kością o znanej wartości obrażeń w zależności od broni: na przykład długi miecz 1d8, miecz dwuręczny 1d10, sztylet 1d4. Nie będzie to skalować zadziwiająco dobrze, jeśli hp będzie rosło bez końca. Jeśli użyjesz ATKdo ustalenia, czy postacie trafią, czy chybią, możesz wykonać kolejny rzut po udanym trafieniu za pomocą ATK* 80%, aby ustalić krytykę.
  • Jeśli chcesz użyć formuły obrażeń, może ona być tak prosta, (ATK - DEF) +/- 20%jak ma to miejsce w World's End (gra strategiczna RPG). Oznacza to, że ataki na silnego przeciwnika DEFnie powodują żadnych obrażeń. Dla instace ATK = 10, ENEMY DEF = 12, (ATK - DEF) = -2a to oznacza również, że wysoki atak vs nieco niższym def, można zrobić małe obrażenia, co potencjalnie czyni bitwy już ze wzrostem HP. Na przykład ATK = 1010, ENEMY DEF = 1005obrażenia wynosiłyby 5. Obrażenia wzrosną również dramatycznie, jeśli ATKzostaną zwiększone o niewielki procent. Na przykład ATK = 1055zada o 900% więcej obrażeń, a ATKwartość wzrośnie tylko o 5% .
  • Aby tego uniknąć, można zrobić coś jak ATK / DEF * WEAPON_DAMAGEto będzie skala bardziej stopniowo, gdy ATKalbo DEFsą zwiększone i pozwalają słaby napastnik uszkodzić stwora z silna DEF.

tl; dr Musisz traktować swoje liczby odpowiedzialnie i dowiedzieć się, jak chcesz, aby gra zachowywała się w różnych sytuacjach. Kilka pytań do siebie:

  1. Ile ataków (tur) powinno zająć pokonanie tego bossa / stwora?
  2. Jak różne umiejętności, wzmocnienia, osłabienia wpływają na xbitwę? Czy powinno to być beznadziejne, czy wygrana powinna być y%mniej / bardziej prawdopodobna?
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.