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.