Jump to content
Rpg²S Forum

TheVillAngel

Utenti
  • Posts

    327
  • Joined

  • Last visited

Posts posted by TheVillAngel

  1. Ci sono ci sono, solo che al momento non so quanto tempo io riesca a dedicarci, quindi è probabile che io ci possa mettere più dei 3 giorni previsti, mi metto all'opera comunque!

  2. Frenate un secondo... se non ricordo male su rpgmaker funzionava il tutto anche se era dentro lo stesso processo parallelo! ^ ^

    Mmh quando fai muovi immagine c'è qualche opzione che dice tipo attendi la fine del movimento oppure aspetta tot secondi o qualcosa del genere? Cosa sono quei 120? ^ ^

    Io uso Xp e l'opzione di cui parli dovrebbe essere per i movimenti dell'eroe o degli eventi, non delle picture. Non so se per VX sia diverso.

  3. Ti potrei dire 2-3 giorni, ma dipenderà da come starò messo quando finiscono loro e dalla complessità dell'unione delle mappe, se son terreni molto diversi, anche se me la cavicchio con le transizioni, mi preoccupa solo il 15x15, una transizione convincente avrebbe bisogno di un po' di spazio, ma penso di poter ovviare creando una mappa più grande e poi tagliando solo la parte che mi serve

  4. Per comodità lascio qui il tileset all in one delle rtp di XP (esterni soltanto, suppongo che si faccia una mappa esterna)

     

    http://img202.imageshack.us/img202/4224/rpgmakerxpmegatilesetby.png

     

  5. Sembra fighissimo, ma non si dovrebbe scegliere almeno un tema?

    E poi, farlo 15x15 non potrebbe creare qualche problema dato che le dimensioni minime della mappa sno 20x15, mi sbaglio?

  6. Certo che siete incontentabili, prima vi lamentate per le classi classiche e poi gridate allo scandalo per il mago con lo scudo XD. Chi vieta a un mago di tenersi in forma fisicamente? A me piace l'idea di classi poco rigide e con più varianti di gameplay, un mago che possa scegliere se allenare di più il corpo o lo spirito o comunque mantenerli equilibrati mi alletta
  7. Esatto, stavo per proporlo io... Però ricordo di aver usato un altro modo una volta... BOH! Ero un genio XD e ora non lo sono più D: ricordati di mettergli che il totale non può però essere inferiore a 1, se no sai, fortuna = 0... Eh si, ce l' ho col valore minimo... ù.ù vabbè dai, alla fine fai il cazzo che ti pare, però vedi che già ti è venuto in mente qualcosa? Ci sono tanti metodi per aggirare la "stupidità" del tool, bisogna solo ingegnarsi un pochino :3 Meglio che non esca il "divided by 0" però, li si sarebbero cazzi! XD

    Mi hai scambiato per il topic starter :D. Sono così anonimo??? No dai, potevo sembrarlo in effetti, mi piace infilarmi in queste discussioni teoriche.

    Ritornando IT pure sto metodo ha i suoi limiti, per valori bassi di fortuna si rischia che esca sempre 1

  8. Si ma è luuuungo... Invece ora ho pensato ad un altro modo, si potrebbe creare un ciclo che sottragga alla variabile fortuna 1 da una a N volte, dove N è il valore massimo in assoluto che la variabile fortuna può assumere. Per valori di fortuna inferiori ad N si mette una condizione di fine ciclo per cui se fortuna (ridotta) minore di 1, poni fortuna uguale a 1, rompi ciclo. Ovviamente ci sarà una variabile contatore che aumenterà di 1 ad ogni sottrazione in modo che quando la variabile contatore sarà uguale al valore uscito dall'estrazione 1-N si rompa il ciclo. Non so se sono stato chiaro.
  9. Ti do' un prototipo di formula versatile che ho in mente da tempo, poi potrai metterci le opportune modifiche. Serve avere una stat che abbia l' utilità di "fortuna", o casualità:

     

    (Attacco + Danno arma + numero a caso tra 1 e valore max della stat "fortuna") - difesa del nemico; con la condizionale di danno minimo inflitto di 1 punto (in modo che un nemico supercorazzato -che non abbia una resistenza o immunità specifica- non subisca sempre 0 punti di danno, ma almeno 1, a me personalmente da molto fastidio, si si).

    Volevo utilizzare anch'io una cosa del genere, non ricordo per cosa, ma mi pare che, perlomeno in xp, non ci sia la possibilità di estrarre un valore tra un numero e il valore di una variabile, sbaglio?
  10. Io solitamente utilizzo le percentuali, cioè un tot di punti in una stat aumentano il danno delle abilità, che hanno comunque un danno base, di x%, mentre la difesa diminuisce il danno subito sempre in percentuale, questo per evitare che, affrontando scontri magari di livello troppo basso si arrivi a valori di danno nulli o negativi.
  11. Commento anch'io.

    La storia mi sembra molto originale e ben pensata e mi ispira molto, anche se fondamentalmente c'entra poco mi ricorda molto hunter x hunter.

    L'importanza che do alla grafica è davvero marginale, penso che basti un mapping ben curato per dare il piacere di giocarci, anche perché io in primis sono negatissimo in campo grafico.

    Lato gameplay c'è poco da commentare e, a quanto ho capito, hai le idee poco chiare per quanto riguarda questo punto, mi permetto quindi di darti qualche suggerimento che mi è venuto nel frattempo. Naturalmente sono suggerimenti, che sei libera di accettare oppure no, son gusti ovviamente. Data la natura del gioco e la meta da raggiungere mi concentrerei molto su puzzle da risolvere lungo il percorso.

    Un'idea un po' più strutturata invece mi é venuta per quanto riguarda il bs:

    Il gioco fa perno sui sogni dei personaggi e sulle abilità che da essi derivano ai personaggi, per questo pensavo, perché non strutturare il bs proprio sull'attinenza ai sogni delle azioni dei pg in battaglia? Io farei un bs a turni su mappa, ogni pg ha a disposizione un determinato numero di abilità, alcune attinenti al suo sogno, altre meno. In base a quelle che decide di usare avrá una barra che andrà da bonus a malus, più si avvicinerá a bonus più abilità legate al sogno sbloccherà, più si avvicinerá a malus meno abilità del sogno avrà da usare fino al caso limite del blocco per qualche turno. Poi non inserirei un albero delle abilità, ma lascerei invece la possibilità di utilizzare tutte le abilità giá dall'inizio con, ovviamente, lo spostamento sulla barra più lento a livelli bassi e con uno sviluppo strutturato in questo modo:

    Ogni livello puoi scegliere se assegnare un punto alle abilità legate al sogno o alle altre, nel primo caso aumenterà lo spostamento sulla barra ogni volta che ne userai una, nel secondo caso invece diminuirà lo spostamento verso il malus nel caso di uso di un'abilità non legata al sogno.

    Ovviamente per funzionare un sistema del genere ha bisogno di battaglia strutturate in modo da essere affrontate in modi diversi, ad esempio lo speziale cura e buffa, ma, quale speziale, è, ad esempio, anche bravo con i veleni, abilità che però si allontanano dal suo sogmo, nel caso quindi di un nemico con una forza d'attacco elevata, si può decidere di adottare una strategia di resistenza, con lo speziale che cura e gli altri che attaccano, oppure di controllo e danno, con il nemico che viene bloccato e buttato giù con il veleno. La seconda strategia sarà magari più redditizia a breve termine perché si subiranno meno danni dal nemico bloccato, ma a lungo andare si rischia di perdere un pg per qualche turno. La seconda sarà invece difficoltosa all'inizio, con le piccole cure a disposizione, mentre efficace a lungo termine, con le cure forti sbloccate. Insomma avrai varietà di gameplay.

    Ora so che non sei brava nella programmazione, ma non è un bs difficilissimo da programmare, quindi potrei anche aiutarti, con 2 premesse però: la prima è che non ho molto tempo a disposizione e quindi non so in quanto tempo sarei in grado di farlo, la seconda è che ho a disposizione solo l'xp e che quindi lo svilupperei su quello e tu dovresti riportarlo sul tuo progetto.

    Se vuoi parlarne contattami per mp. Seguirò comunque il progetto che mi piace molto.

  12. Potresti aprirlo in parlando del making (od avevi già fatto una cosa del genere? Mi par ci fosse! ^ ^) chiedendo specificatamente quali eventi chiedere e linkando i tuoi tutorial come esempio! ^ ^

    Io no, se l'ha fatto qualcun altro me lo son perso, ci vado a dare un'occhiata, nel caso lo apro io. Prima però posto il prossimo tutorial di cui sono orgogliosissimo, perchè mi ha fatto penare, anche se sarà lunghetto da scrivere :(

  13. Lunghetto! Per ora non posso provare, ma sicuramente interessante ed utile, soprattutto per la distanza action tra due pg :D :D

    ^ ^

     

    Di questi tutorial c'è bisogno! ^ ^

     

    E' più lunga la spiegazione che tutto il procedimento in realtà, alla fine son tre eventini, mi sono concentrato molto sulo spiegare la logica perchè alla fine è quella che aiuta i maker a crescere e a capire le potenzialità del tool.

    Comunque sono cose belle e stimolanti da fare, mi piacerebbe che ci fosse un topic dove si possano porre delle questioni da tradurre in eventi che esulino dalle quelle classiche riproposte troppo spesso, perchè alla fine i miei tutorial vengono fuori dalle mie esigenze, con le esigenze di tutti può venire fuori tanta roba utile se si collabora.

     

     

    Interessante e banale, ma molto utile per chi non se la cava con gli eventi.

    Ricordo di averlo fatto in C++ su console. Feci un banale programmino, che facevano inserire all'utente le coordinate x,y del primo punto, e le coordinate x,y del secondo. Alla fine ho costruito un triangolo rettangolo sfruttando la distanza tra i due punti come l'ipotenusa di tale triangolo. Alla fine conoscendo l'altezza e la base, la quale si ricavava con una sottrazione delle due coordinate x e y, applicavo il teorema di pitagora. Sfizioso come cosa xD

    Concordo, molte volte cose che possono sembrare difficili possono essere risolte in modo banale, e il bello della programmazione (anche se con rpg maker) sta proprio lì.

  14. 1. Introduzione


    Per: RPG Maker XP/VX/Ace


    Autore: TheVillAngel


    Descrizione: Salve a tutti ragazzi, I'm back, questioni lavorative e universitarie mi hanno tenuto quasi un anno lontano dal making e dal mio progetto, ma questo non mi ha impedito, nei momenti morti, di utilizzare rpg maker per elaborare delle piccole aggiunte che serviranno al prosieguo del mio lavoro e spero possano aiutare anche voi.

    Il primo dei due tutorial che vi andrò a proporre tratta, come da titolo, l'implementazione dell'algoritmo per il calcolo della radice quadrata in rpg maker e un esempio del suo utilizzo, ossia il calcolo della distanza tra due punti, che nell'economia di rpg maker è utile per definire cosa succede quando due eventi, oppure l'eroe ed un evento, sono ad una certa distanza l'uno dall'altro, un esempio banale può essere la definizione del range di aggro di un npc ostile.

    Per questioni legate all'utilizzo di numeri decimali, purtroppo, questo metodo è utilizzabile solo dall'XP in su, poichè attraverso una piccola modifica via script, che per l'XP troverete QUI, sarà possibile utilizzare i decimali soltanto su questi tools, o almeno credo, se qualcuno è in grado di smentirmi ne sarei felice.

    Il prossimo tutorial invece tratterà un metodo di Pathfinding sempre ad eventi, di cui in un certo senso questo sarà propedeutico, ma non necessariamente, in quanto con altri metodi sarà possibile utilizzarlo comunque e, cosa più importante, su tutti i tools, il che è un'ottima cosa a mio avviso, data l'assenza di script su 2k e 2k3.

    Detto questo, possiamo iniziare.

     

    2. Tutorial

     

    2.1 Teoria

     

    Partiamo con un po' di teoria, utile a capire la logica che c'è dietro le operazioni che faremo, ma non necessaria, quindi, se volete, saltate al punto 2.2

     

    Tra i diversi algoritmi esistenti per il calcolo della radice quadrata, il migliore e più facilmente applicabile al nostro Rpg Maker, nonchè quello usato anche da qualsiasi calcolatrice, è senza dubbio il Metodo di Erone, poichè è l'unico che, solo attraverso le 4 operazioni principali, (le uniche che il tool ci mette a disposizione) ci permette di estrarre la radice quadrata di un numero.

    Il metodo di Erone parte dal presupposto che, dato un numero X e costruendo un rettangolo di con lati che misurino L1=X e L2=1, si possa arrivare, con approssimazioni successive, ad un quadrato di lato √X

     

    Per fare ciò dovremo dunque calcolarci prima la media aritmetica dei due lati, per ottenere il primo lato del secondo rettangolo che si avicinerà al quadrato, in questo modo:

    L1' = (L1+L2)/2

    Per ottenere, invece, il secondo lato, dovremo dividere il lato originario L1 (che corrisponde ovviamente all'area del rettangolo, poichè L1 x L2= L1 x 1 = L1) per il nuovo lato L1', quindi avremo che

    L2' = L1/L1'

    questa operazione andrebbe ripetuta finchè L1n non sia uguale a L2n, ossia finchè i lati del quadrato siano uguali e corrispondano, quindi, alla radice quadrata del primo lato che era anche area del rettangolo, ma, per un'approssimazione già ottimale, basterà ripetere l'operazione circa 9 volte.

    Confusi?

     

    Facciamo un esempio numerico: troviamo la √4

    ora sappiamo che L1 = 4 e L2 =1, quindi facciamo:

    L1' = (4 + 1) / 2 = 5/2 = 2,5

    L2'= 4/2,5 = 1,6

    continuiamo

    L1'' = (2,5 + 1,6) / 2 = 4,1/2 = 2,05

    L2'' = 4/2,05 = 1,95

    ancora

    L1''' = (2,05 + 1,95) / 2 = 2

    L2''' = 4/2 = 2

    abbiamo trovato la radice quadrata di 4, cioè 2, allora perchè andare avanti, e soprattutto, cosa succede se andiamo avanti?

    Per numeri più grandi, le 3 approssimazioni non sono sufficenti, ma continuare ad approssimare non avrà alcun effetto sulla radice già trovata, vediamo perchè:

    L1'''' = (2 + 2) /2 = 2

    L2'''' = 4/2 = 2

    questa operazione dovrà essere quindi svolta 9 volte.

     

    2.2 Implementazione

     

    Passiamo all'implementazione via codice

     

    avremo bisogno di un solo piccolo evento e di alcune variabili:

    poniamo la variabile L2 = 1

    la variabile L1 invece assumerà il valore del numero del quale vogliamo trovare la radice (chiamiamolo X)

    L1 = X

    creiamo poi la variabile contatore, inizializzandola uguale a 0. Questa ci servirà a sapere quante volte è stata fatta l'operazione di approssimazione e quindi quando il ciclo dovrà fermarsi.

    contatore = 0

    Ciclo

    Aggiungiamo 1 alla variabile 'contatore'

    contatore + 1

    Poniamo la variabile L1' uguale alla variabile X, poichè X ci serve integro, utilizzeremo L1' per le operazioni

    L1' = X

    Sommiamo L1 ad L2 e dividiamo per 2 per ottenere il primo lato

    L1+L2

    L1/2

    Dividiamo L1' per L1 per ottenere il secondo lato

    L1'/L1

    Poniamo L2 uguale a L1' per memorizzare il secondo lato

    L2 = L1'

    Ora diciamo al programma che se l'operazione è stata fatta 9 volte, può rompere il ciclo.

    If contatore = 8

    rompi ciclo

    fine

     

    2.3 Evento

     

    ricapitolando, l'evento sarà

    var L2 = 1

    var L1 = X

    var contatore = 0

    loop

    var contatore + 1

    var L1' = X

    var L1+ var L2

    var L1 / 2

    var L1'/ var L1

    var L2 = var L1'

    If var contatore = 8

    break loop

    end

     

    2.4 Distanza tra due punti

     

    Ora che abbiamo la nostra funzione per il calcolo della radice quadrata, l'implementazione della formula della distanza tra 2 punti sarà un giochetto da ragazzi, supponiamo di voler calcolare tale distanza tra il nostro eroe e l'evento 1

     

    avremo bisogno di :

     

    2.4.1 Evento su mappa

    un evento su mappa in processo parallelo che rilevi le coordinate dell'eroe e dell'evento, quindi

     

    var x = hero x

    var y = hero y

    var EV x = Ev001 x

    var EV y = Ev002 y

     

    2.4.2 Evento Comune

    un evento comune in processo parallelo in cui impostare la nostra formula, che sappiamo essere √[(x2-x1)^2 + (y2-y1)^2]

     

    dove

    x2 = var x

    x1 = var EV x

    y2 = var y

    y1 = var EV y

     

    Ora, dato che, come sempre, i valori ci servono integri e non modificati dalle varie operazioni, eguaglieremo due nuove variabili (var distX e var distY) a var x e var y

    var distX = var x

    var distY = var y

    successivamente faremo x2 - x1

    var distX - var EV x

    al quadrato

    var distX * var distX

    e y2 - y1

    var distY - var EV y

    al quadrato

    var distY * var distY

    ed ora l'addizione

    var distX + var distY.

    A questo punto ci basterà richiamare la funzione radice quadrata e sostituire a 'var L1 = X', 'var L1= var dist X'

    common event: radice quadrata

     

    2.4.3 Ricapitolando

    gli eventi saranno quindi

     

    Evento su mappa, processo parallelo

    var x = hero x

    var y = hero y

    var EV x = Ev001 x

    var EV y = Ev002 y

     

    Evento comune in processo parallelo

    var distX = var x

    var distY = var y

    var distX - var EV x

    var distX * var distX

    var distY - var EV y

    var distY * var distY

    var distX + var distY.

    common event: radice quadrata

     

    Evento radice quadrata modificato in questo modo

    var L2 = 1

    var L1 = var dist X

    var contatore = 0

    loop

    var contatore + 1

    var L1' = var dist X

    var L1+ var L2

    var L1 / 2

    var L1'/ var L1

    var L2 = var L1'

    If var contatore = 8

    break loop

    end

     

    ora nella variabile L1 avrete la vostra distanza tra i due eventi, con cui potrete fare quello che volete, ad esempio far si che se la distanza è minore di 5 tile, e quindi di 5, l'evento si avvicini all'eroe o viceversa, che si senta un determinato suono, ecc.

     

    Bene, questa è la fine, sempre disponibile per qualsiasi domanda e a presto col nuovo tutorial.

×
×
  • Create New...