WIF - La Community Italiana di The Battle for Wesnoth

Wesnoth Italian Forum
La Community Italiana di The Battle for Wesnoth uno dei migliori giochi multiplayer online gratis open source, a turni di ambientazione fantasy. Iscriviti a wifper partecipare ai tornei online, allo sviluppo di nuove estensioni (campagne, mappe, ere, scenari, fazioni) e a tutte le iniziative di w.i.f. per questo meraviglioso gioco strategia . Giocare gratis on line non è mai stato più facile.

Se stai cercando giochi multiplayer online, giochi di strategia, giochi a turni, giochi open source, giochi gratuiti o giochi fantasy, vieni a giocare online in multiplayer con noi! Questo è il forum che cercavi.
14 Dicembre 2017, 09:05:06 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
 Notizia
VENITE A TROVARCI NELLA CHAT DI W.I.F.
- per organizzare partite ed incontri Ghigno  -
Ti aspettiamo!
Ricerca avanzata  
Pagine: [1] 2 3 ... 10
 1 
 inserita:: 11 Dicembre 2017, 00:19:10 
Aperta da Xalzar - Ultimo messaggio da Xalzar
Per chi è interessato, linko un sondaggio che si sta svolgendo nel forum ufficiale di Wesnoth riguardante la scelta di un nuovo nome per la controversa fazione del Califfato.
In 4 giorni circa si chiude la prima fase del sondaggio, quindi spicciatevi se ritenete che vi interessi!
La prossima fase prevede il voto tra i 4 nomi favoriti, ed infine si sceglierà tra i migliori 2.

https://forums.wesnoth.org/viewtopic.php?f=12&t=47643

 2 
 inserita:: 01 Dicembre 2017, 23:20:14 
Aperta da Argesilao - Ultimo messaggio da Argesilao
Ritengo interessante, anche per completezza di informazione, far notare come la forma scheletrica del Fire Dragon abbia seguito, nelle sue vicissitudini grafiche, un percorso analogo alla forma vivente; infatti fino alla versione 1.10 compresa lo Skeletal Fire Dragon aveva una forma diversa:

[ Allegato: Non sei abilitato a vedere gli allegati ]

corredata di altre sette immagini che lo ritraggono nelle sue abituali attività di altrui annichilimento; dalla versione 1.11 appare la forma attuale:

[ Allegato: Non sei abilitato a vedere gli allegati ]

anche questa priva di immagini di animazione. Ipotizzo che, una volta definitivamente adottata la forma attuale del Fire Dragon, si sia ritenuto assolutamente necessario che la versione scheletrita fosse 'compatibile' con la versione carnacea; mi domando, però, come mai tale somiglianza non era stata ritenuta necessaria nelle versioni precedenti. Che?!?

Credo altresì opportuno dichiarare, a questo punto, che malgrado obiezioni, critiche e borbottii vari, nutro una sconfinata ammirazione ed una abissale invidia nei confronti di coloro che hanno pensato e realizzato le passate, presenti e future animazioni di Wesnoth!
Sentimenti che, in ogni caso, non mi impediranno di continuare a obiettare, criticare e borbottare ancora  Ghigno

Argesilao il borbottatore selvaggio

 3 
 inserita:: 28 Novembre 2017, 22:33:57 
Aperta da Yomar - Ultimo messaggio da Argesilao
Nella Era of magic segnalata da Nicodema c'è una unità, i cyclops e relativi avanzamenti che hanno un attacco melee con una caratteristica speciale, implementata dallo stesso creatore dell'era:

Codice:
    [attack]
        name=fist
        description={STR_FIST}
        type=impact
        range=melee
        damage=6
        number=3
        icon="attacks/fist-human.png"
        [specials]
            {WEAPON_SPECIAL_EOMA_GROWINGFURY 0 3} # <------- (Eccola qui)
        [/specials]
    [/attack]

Che funziona più o meno secondo gli stessi principi che avevo abbozzato nel mio precedente post; nei particolari aumenta di 3 il valore dei danni inflitti ogni volta che un colpo va a segno (presumo che sia l'effetto combo ipotizzato da Yomar) e modifica in modo molto più semplice ed interessante del mio il valore dei danni inflitti; altrettanto interessante l'uso del filter_second_attack per i contrattacchi del difensore; insomma credo che il codice sviluppato dai creatori di Era of Magic sia l'ideale come punto di partenza per eventuali effetti di affaticamento e combo anche di uso generalizzato e non solo limitato ai possessori di attacchi speciali.

Codice:
#textdomain wesnoth-Era_of_Magic
#define WEAPON_SPECIAL_EOMA_GROWINGFURY ARRAY ADD
# wmlindent: start ignoring
# wmlxgettext: [attack]
# wmlxgettext: [specials]

# wmlindent: stop ignoring
    [damage]
        id=eoma_growingfury{ARRAY}{ADD}
        name= _ "growing fury" + " +{ADD}"
        description=_"When this attack is used, this units damage increases after each successful hit."+" (+"+"{ADD}"+")"
    [/damage]
[/specials]
# wmlindent: start ignoring
[/attack]
# wmlindent: stop ignoring

[event]
name=attack
id=eoma_growingfury{ARRAY}{ADD}_event1
first_time_only=no
[filter_attack]
special=eoma_growingfury{ARRAY}{ADD}
[/filter_attack]

[store_unit]
[filter]
x,y=$x1,$y1
[/filter]
variable=dmgmemo
[/store_unit]
[/event]

    [event]
        name=attacker_hits
        first_time_only=no
id=eoma_growingfury{ARRAY}{ADD}_event2
[filter_attack]
special=eoma_growingfury{ARRAY}{ADD}
[/filter_attack]

{VARIABLE_OP unit.attack[{ARRAY}].damage add {ADD}}
        [unstore_unit]
            variable=unit
        [/unstore_unit]

    [/event]

[event]
        name=attack end
id=eoma_growingfury{ARRAY}{ADD}_event3
first_time_only=no
[filter_attack]
special=eoma_growingfury{ARRAY}{ADD}
[/filter_attack]

[set_variable]
            name=unit.attack[{ARRAY}].damage
value=$dmgmemo.attack[{ARRAY}].damage
        [/set_variable]
        [unstore_unit]
            variable=unit
        [/unstore_unit]
{CLEAR_VARIABLE dmgmemo}
    [/event]

[event]
name=attack
id=eoma_growingfury{ARRAY}{ADD}_event4
first_time_only=no
[filter_second_attack]
special=eoma_growingfury{ARRAY}{ADD}
[/filter_second_attack]

[store_unit]
[filter]
x,y=$x2,$y2
[/filter]
variable=dmgmemo2
[/store_unit]
[/event]

    [event]
        name=defender_hits
        first_time_only=no
id=eoma_growingfury{ARRAY}{ADD}_event5
[filter_second_attack]
special=eoma_growingfury{ARRAY}{ADD}
[/filter_second_attack]

{VARIABLE_OP second_unit.attack[{ARRAY}].damage add {ADD}}
        [unstore_unit]
            variable=second_unit
        [/unstore_unit]
    [/event]

[event]
        name=attack end
id=eoma_growingfury{ARRAY}{ADD}_event6
first_time_only=no
[filter_second_attack]
special=eoma_growingfury{ARRAY}{ADD}
[/filter_second_attack]

[set_variable]
            name=second_unit.attack[{ARRAY}].damage
value=$dmgmemo2.attack[{ARRAY}].damage
        [/set_variable]
        [unstore_unit]
            variable=second_unit
        [/unstore_unit]
{CLEAR_VARIABLE dmgmemo2}
    [/event]
[+attack]
# wmlindent: start ignoring

[+specials]
# wmlxgettext: [/specials]
# wmlxgettext: [/attack]
# wmlindent: stop ignoring
#enddef

Argesilao l'ammiratore (nel senso che è colui che ammira)

 4 
 inserita:: 28 Novembre 2017, 10:06:08 
Aperta da Yomar - Ultimo messaggio da Nobun
Ti consiglierei di rivedere la tua idea o quanto meno di esporci meglio cosa hai esattamente intenzione di fare.
Il fatto è che l'effetto che vorresti programmare, se è da implementarsi come inteso da Argesilao (ovvero diminuire il valore di attacco ad ogni colpo sferrato dall'unità), rischia di sbilanciare il gioco ancora di più e di rendere il fattore random del gioco (che alcuni ritengono essere troppo determinante in alcuni casi) troppo preponderante rispetto al fattore strategico.

Faccio un esempio pratico:

Poni caso che due unità che si attaccano, a pari condizioni di probabilità di colpire, colpiscano l'avversario lo stesso numero di volte. In questa ipotesi (mettiamo 2 colpi su 4 andati a segno per entrambi) il risultato del match cambierà a seconda di QUANDO ogni unità avrà colpito... sicché se la unità 1 colpirà la prima e seconda volta (andando a vuoto il colpo 3 e 4) mentre l'unità 2 colpirà la terza e quarta volta (andando a vuoto il colpo 1 e 2), praticamente succederà che per un mero fattore random ulteriore introdotto dalla meccanica, l'unità 1 infliggerà un ammontare di danni notevolmente superiore (potrebbe arrivare quasi anche al doppio) rispetto a quello inflitto dall'unità 2, pur trattandosi della stessa unità, con le stesse caratteristiche e probabilità di colpire, con lo stesso numero di colpi inflitti.

Ciò rischia di far pendere la bilancia più sul fattore fortuna che sul fattore strategico.

 5 
 inserita:: 26 Novembre 2017, 14:36:36 
Aperta da Yomar - Ultimo messaggio da Nicodema
prova a guardare il codice del ciclope della era of magic.
I suoi danni raddoppiano dopo ogni colpo andato a segno.

 Fico

 6 
 inserita:: 24 Novembre 2017, 22:25:51 
Aperta da Yomar - Ultimo messaggio da Argesilao
Ho provato a mettere giù un poco di codice per creare la situazione di affaticamento che porti ad una progressiva riduzione dei danni inflitti dai colpi successivamente portati nel corso di un attacco.
Ho tenuto conto del fatto che anche il difensore si deve affaticare.
Il risultato è stato il seguente:

Codice:
[event]
name=attack
first_time_only=no

# *** al momento dell'inizio dell'attacco di unit (attaccante) contro second unit (difensore) salvo in stored_attacker e stored_defender le loro caratteristiche iniziali

[store_unit]
[filter]
id=$unit.id
[/filter]
variable=stored_attacker
[/store_unit]
[store_unit]
[filter]
id=$second_unit.id
[/filter]
variable=stored_defender
[/store_unit]
[/event]

# *** Sia che l'attaccante metta a segno il colpo sia che lo manchi viene decrementato il valore dei danni che potrebbe infliggere con il prossimo colpo

[event]
name=attacker hits
first_time_only=no

[object]
silent=yes
[effect]
[filter]
id=$stored_attacker.id
[/filter]
apply_to=attack
increase_damage=-1
[/effect]
[/object]
[/event]

[event]
name=attacker misses
first_time_only=no
[object]
silent=yes
[effect]
[filter]
id=$stored_attacker.id
[/filter]
apply_to=attack
increase_damage=-1
[/effect]
[/object]
[/event]

# Supponendo che anche il difensore possa affaticarsi devo prevedere le stesse situazioni previste per l'attaccante
# Per fortuna anche per questi casi il WML mi mette a disposizione due event ad hoc analoghi ai due precedentemente usati
# solo che non funzionano ???

[event]
name=defender hits
first_time_only=no
[object]
silent=yes
[effect]
[filter]
id=$stored_defender.id
[/filter]
apply_to=attack
increase_damage=-1
[/effect]
[/object]
[/event]

[event]
name=defender misses
first_time_only=no
[object]
silent=yes
[effect]
[filter]
id=$stored_defender.id
[/filter]
apply_to=attack
increase_damage=-1
[/effect]
[/object]
[/event]

# *** alla fine della sequenza degli attacchi/contrattacchi devo ripristinare sia per l'attaccante che per il difensore l'originaria capacità di infliggere danni

[event]
name=attack_end
first_time_only=no
[if]

# *** quindi verifico che l'attacante sia ancora vivo

[have_unit]
id=$stored_attacker.id
[/have_unit]
[then]

#  *** memorizzo le sue caratteristiche a fine attacco

[store_unit]
[filter]
id=$unit.id
[/filter]
variable=stored_attacker_after_attack
[/store_unit]

# *** modifico la variabile in cui avevo salvato la sua condizione prima dell'attacco sostituendo il valore originario di HP con quello alla fine dell'attacco

{VARIABLE stored_attacker.hitpoints $stored_attacker_after_attack.hitpoints}

# *** elimino la vecchia unità con i damage modificati durante l'attacco

[kill]
id=$unit.id
animate=no
[/kill]

# *** e la sostituisco con quella originale modificata con gli HP risultanti dall'attacco/contrattacco

[unstore_unit]
variable=stored_attacker
animate=no
[/unstore_unit]
[/then]
[/if]

# ripeto la stessa procedura per il difensore

[if]
[have_unit]
id=$stored_defender.id
[/have_unit]
[then]
[store_unit]
[filter]
id=$second_unit.id
[/filter]
variable=stored_defender_after_attack
[/store_unit]
{VARIABLE stored_defender.hitpoints $stored_defender_after_attack.hitpoints}
[kill]
id=$second_unit.id
animate=no
[/kill]
[unstore_unit]
variable=stored_defender
animate=no
[/unstore_unit]
[/then]
[/if]

# *** cancello per pulizia tutte le variabili utilizzate

{CLEAR_VARIABLE stored_attacker,stored_defender,stored_attacker_after_attack,stored_defender_after_attack}
[/event]

Ho fatto dei test è la cosa funziona ... ma solo per l'attaccante  Pianto
Il difensore, malgrado abbia applicato lo stesso principio di funzionamento, non si affatica; farà uso di doping  Ghigno
potrei aggirare la cosa semplicemente modificando i damage del difensore negli event dell'attaccante, ma per un motivo puramente intellettuale mi piacerebbe sapere cosa c'è che non va; inoltre non posso escludere che il difensore possa portare un numero di colpi superiore a quello dell'attaccante, da qui la necessità di far funzionare anche gli event del difensore.
Ho inutilmente consumato un paio di diottrie nel tentativo di scovare l'inghippo, Se qualcuno lo scova me lo faccia sapere.

Altro inghippo: se il numero dei colpi portati in un attacco è superiore ai danni inflitti dal singoli colpo, il valore di questi ultimi può scendere a 0 o meno, motivo per cui una elfa shamana con solo mezza vita può ritrovarsi a battere un berserker palestrato in un combattimento corpo a corpo Scioccato

X Yomar -> Esattamente che cosa intendi con condizione combo?

 7 
 inserita:: 24 Novembre 2017, 20:27:29 
Aperta da Argesilao - Ultimo messaggio da Nobun
E se hai linux puoi pure farlo da linea di comando:

Codice:
find . | grep \\.cfg$ | sed -i "s/of The H/of H/g"

 Ghigno

---

Per chi fosse interessato alle spiegazioni:
find .  ---> trova tutti file ricorsivamente alla directory corrente
grep \\.cfg$ --> filtra i risultati in modo che figurino solo i file che terminano con estensione .cfg
sed -i "s/of The H/of H/g" --> sostituisce, all'interno dei file elencati (la lista dei files è stata ricavata dalle due istruzioni qui sopra illustrate), tutte le stringhe "of The H" contenute nel file con "of H" (quel /g finale indica che la sostituzione deve essere globale e non fermarsi alla prima istanza trovata)

 8 
 inserita:: 23 Novembre 2017, 22:51:22 
Aperta da Yomar - Ultimo messaggio da Argesilao
Così sui due piedi direi che la cosa è fattibile, anche se il primo metodo che mi viene in mente è piuttosto macchinoso da realizzare; nelle sue linee generali potrebbe funzionare in questo modo; più tardi proverò a mettere giù il codice completo.

Prima di tutto si crea un event attack in cui si memorizza l'unità attaccante in una variabile-contenitore che possiamo chiamare stored_unit

poi si creano un event attacker hits a un event attacker misses con filtro stored_unit.id
All'interno di questi event si modifica la caratteristica dei danni inflitti dall'unità che sta attaccando; così di primo acchito credo che il modo più semplice sia creare un tag [object] con filtro stored_unit.id e contenente un tag [effect] con apply_to=attack e increase_damage=-1

infine si crea un event attack end sempre con filtro stored_unit.id in cui si ripristina l'unità attaccante ai suoi valori di partenza, in pratica con il tag [unstore_unit] della variabile stored_unit e 'uccidendo' l'unità attaccante (sempre che non sia già morta durante l'attacco); naturalmente bisognerà attuare degli accorgimenti per assegnare alla unità gli hitpoints correnti e non quelli salvati in stored_unit. In effetti l'unico valore da ripristinare sarebbe quello del damage degli attacchi.

Questo a grandi linee, per scendere nei particolari ci vorrà un poco di tempo; non escludo che esistano metodi più semplici e veloci

   


 9 
 inserita:: 23 Novembre 2017, 20:57:20 
Aperta da Yomar - Ultimo messaggio da Yomar
Sarebbe possibile fare in modo che i danni inflitti durante un attacco incrementino (o diminuiscano) di un punto ad ogni colpo ?
Perchè vorrei creare le condizioni combo e affaticamento.

 10 
 inserita:: 21 Novembre 2017, 20:07:54 
Aperta da Argesilao - Ultimo messaggio da Argesilao
Citazione
Anche sottigliezze?  Che?!?
Nel caso provvedo a segnalare che il titolo andrebbe corretto in "Reconquest of Heaven", dato che "Paradiso" in inglese si usa di norma senza l'articolo, come fosse un nome proprio di luogo.
(curiosità che non centra col titolo: se si usa "Heavens" invece, il nostro corrispettivo di "Cieli", l'articolo viene usato)

Più sottili sono e meglio è  Occhiolino

Perdindirindina, e scusate l'espressione, mi toccherà cambiare i nomi delle directory e tutti i riferimenti  Pianto
beh, lo farò nelle prossime versioni. Fico
Per fortuna che notepad ha la funzione sostituisci in tutti i file  Ghigno

Argesilao l'apprendista

Pagine: [1] 2 3 ... 10