Beh, ho appena fatto uno skillone il cui tema è "Disperazione", ergo "Questo attacco farà una marea di danni se il tuo party è con le spalle al muro"
[(a.mhp/a.hp),3].min*a.atk*4*($game_party.dead_battle_members.size*2+1)- b.def * 2
La formula parte dal danno di un attacco normale, poi...
...la moltiplica per 3 se uno degli altri membri del party è KO, e per 5 se entrambi lo sono (nel mio progetto ci sono 3 membri in squadra al massimo)
...la moltiplica per un numero che è in proporzione ai danni subiti da chi la usa (fino a 3 se è sotto il 33% degli HP massimi)
Quindi abbiamo una skill che in condizioni ottimali (Tutti vivi e utilizzatore con tutti gli HP) fa solo i danni di un attacco normale. Ma in condizioni critiche (Utilizzatore sotto 1/3 dei suoi HP massimi ed entrambi i compagni a terra) infligge 15 volte i danni normali.
Ho dovuto aggiungere un metodo di tre righe a Game_Unit per far funzionare la formula:
def dead_battle_members
battle_members.select {|member| member.dead? }
end