Algorytm obliczania obrażeń w Fallout Tactics.
Słowem wstępu
Algorytm w FT jest podobny do tego w FO2 ale został poprawiony i działa lepiej.
Amunicja została podzielona na typy, które są zaprogramowane w engine gry i nie da się tego modyfikować.
Można zmieniać tylko parametry pancerzy i siłę broni.
Przykładowe rodzaje amunicji w FT:
JHP 60%/-20%
AP -25%/50%
Ball -11%/-20%
Average 0%/0%
FMJ 0%/15%
Dum dum 0%/50%
Resztę można znaleźć w edytorze do FT.
Pierwszy parametr modyfikuje obrażenia broni, drugi zdolność przebijania pancerza.
Moja mała uwaga:
Podczas testowania algorytmu zauważyłem, że amunicja JHP nadal jest dosyć silna i jest silniejsza dla pancerzy, które mają drugi współczynnik odporności mniejszy od 55%.
Dopiero powyżej tej wartości amunicja przeciwpancerna (AP) staje się lepsza od JHP.
W Fallout Tactics spora większość pancerzy posiada drugi współczynnik o wartości mniejszej niż 55%.
Zaledwie jedna bądź dwie sztuki najmocniejszych pancerzy posiada ten drugi współczynnik o wartości powyżej lub równej 55%.
Tak więc przydatność amunicji AP w Fallout Tactics jest nadal mała ale i tak jest lepiej niż w FO2.
Przyjęte oznaczenia w algorytmie:
Amunicja:
mod1 - modyfikator obrażeń
mod2 - modyfikator przebijania
Pancerze:
DT - współczynnik przebicia pancerza
DR - współczynnik wytrzymałości pancerza
Broń:
min_dmg - minimalny damage broni
max_dmg - maksymalny damage broni
w_dmg - damage broni wylosowany pomiędzy min a max wartościami
Funkcje algorytmu:
losuj(min,max) - funkcja losuje wartość bazową obrażeń broni z zakresu min - max damage.
damage_wynik - funkcja obliczająca ostateczną wartość obrażeń po uwzględnieniu wszystkich wspólczynników broni, amunicji i pancerza przeciwnika.
Kolejne etapy obliczania damage w FT:
1. Losujemy damage broni:
w_dmg:=losuj(min_dmg,max_dmg)
2. Obliczamy zmodyfikowane wartości obrażeń broni oraz współczynników pancerza:
dmg_mod:=trunc[w_dmg*(1+mod1)]
DT_mod:=trunc[DT*(1-mod2)]
DR_mod:=DR*(1-mod2)
3. Obliczamy wynik - wielkość obrażeń zadanych przeciwnikowi:
damage_wynik:=trunc[(dmg_mod-DT_mod)*(1-DR_mod)]
Przykład 1 (słaby pancerz):
Przykładowy pancerz przeciwnika:
DT:=2
DR:=25%
Parametry przykładowej broni:
min_dmg:=20
max_dmg:=40
Modyfikatory amunicji JHP:
mod_1:=+60%
mod_2:=-20%
Wyliczenia:
dmg_w:=losuj(20,40)=31 {przykładowo taka liczba została wylosowana z tego zakresu)
dmg_mod:=trunc[31*(1+0.60)]=49
DT_mod:=trunc[2*(1-(-0.20))]=2
DR_mod:=0.25*(1-(-0.20))=0.30
Wynik:
damage_wynik:=trunc[(49-2)*(1-0.30)]=32
Otrzymujemy wynik zadane_obrażenia = 32
Modyfikatory amunicji AP:
mod_1:=-25%
mod_2:=+50%
Wyliczenia:
dmg_w:=losuj(20,40)=31 {przykładowo taka liczba została wylosowana z tego zakresu)
dmg_mod:=trunc[31*(1+(-0.25)]=23
DT_mod:=trunc[2*(1-0.50)]=1
DR_mod:=0.25*(1-0.50)=0.125
Wynik:
damage_wynik:=trunc[(23-1)*(1-0.125)]=19
Otrzymujemy wynik zadane_obrażenia = 19
Wnioski:
Widzimy, że przy zastosowaniu słabszego pancerza amunicja JHP jest mocniejsza od AP.
Przykład 2 (mocny pancerz):
Przykładowy pancerz przeciwnika:
DT:=18
DR:=60%
Parametry przykładowej broni:
min_dmg:=20
max_dmg:=40
Modyfikatory amunicji JHP:
mod_1:=+60%
mod_2:=-20%
Wyliczenia:
dmg_w:=losuj(20,40)=31 {przykładowo taka liczba została wylosowana z tego zakresu)
dmg_mod:=trunc[31*(1+0.60)]=49
DT_mod:=trunc[18*(1-(-0.20))]=21
DR_mod:=0.60*(1-(-0.20))=0.72
Wynik:
damage_wynik:=trunc[(49-21)*(1-0.72)]=7
Otrzymujemy wynik zadane_obrażenia = 7
Modyfikatory amunicji AP:
mod_1:=-25%
mod_2:=+50%
Wyliczenia:
dmg_w:=losuj(20,40)=31 {przykładowo taka liczba została wylosowana z tego zakresu)
dmg_mod:=trunc[31*(1+(-0.25)]=23
DT_mod:=trunc[18*(1-0.50)]=9
DR_mod:=0.60*(1-0.50)=0.30
Wynik:
damage_wynik:=trunc[(23-9)*(1-0.30)]=9
Otrzymujemy wynik zadane_obrażenia = 9
Wnioski:
Przy zastosowaniu najmocniejszego pancerza amunicja AP jest mocniejsza od JHP, ale rozrywająca jest nadal dosyć skuteczna i przebija pancerz tylko trochę słabiej niż AP.
Moim zdaniem algorytm jest w miarę dobry, jednak w celu usprawnienia systemu możnaby było zmienić parametry pancerzy dla uzyskania lepszych efektów.
|