Jump to content

AD-Blocker detected, please disable your ad-blocker when surfing in makerando.com - There is no invasive Ad.

 

  • Chatbox

    You don't have permission to chat.
    Load More
NN81

RPGMAKER VX ACE miniTutorial sulla Gestione Collisione eventi

Recommended Posts

Queste righe di comando rappresentano un po' il "fulcro" del battle system ad eventi sul quale ho cominciato a lavorare da circa due mesi (tre mesi e mezzo fa presi in mano il tool per la prima volta in vita mia e da allora mi misi sotto per imparare ad eventare), ho pensato di condividerle per mettere a disposizione di chi fosse interessato o per chi volesse trovarvi una qualche forma di ispirazione, suggerimento per approciare il problema delle collisioni fra giocatore ed nemici su mappa...

questo è lo screen (ho dovuto fare un copia incolla veloce, quindi scusate se non viene perfetto..) di seguito darò una concisa spiegazione dei contenuti:

 

nbbriu.png

 

Ok, prima cosa, parlo soprattutto a chi potrebbe essere come me due mesi fa, guardando queste righe trovarsi spiazzato e confuso, tranquilli, è normalissimo! è solo questione di farci l'abitudine pian piano e poi il codice lo vedrete sotto un altra prospettiva molto più semplice dell'apparenza.

Si comincia impostando 4 variabili che contengono rispettivamente le coordinate XY dell'eroe su schermo (NON su mappa, ora vi spiego perchè...) e poi le coordinate XY sempre su schermo di un altro evento (nemico o quel che sia, di cui volete gestire la collisione).

Impostate le variabili si fa fare una semplice differenza tra le x e le y del nemico e quelle del nostro eroe in modo da "risalire" alla distanza in pixel fra gli stessi.

QUI occorre fare una doverosa puntualizzazione sul tipo di coordinate, quelle su mappa si riferiscono ai tiles del grid, quindi ad esempio il primo tile in alto a sinistra avrà coordinate 0,0 (in quanto partono da zero) il secondo tile a destra del primo ma sulla stessa X avrà coordinate 1,0 , quello immediatamente sotto avrà coordinate  1,1 e così via..

tali coordinate essendo riferite ai tiles hanno solo numeri interi, il "problema" dell'utilizzare le coordinate su mappa per la gestione delle collisioni è dovuto al fatto che il Tool calcola il variare di tali coordinate in "anticipo", ad esempio un evento in movimento che passa da un tile ad un altro, per il tool cambia coordinate nel momento stesso in cui fa per dirigersi nella casella accanto (immaginate una sorta di trigger contatto evento..) questo porta a far si che se noi utilizziamo tali coordinate per la gestione di una collisione, potremo avere la collisione quando ancora un evento sembra a un tile di distanza da noi (quindi molto brutto e strano da vedersi), per ovviare a questo problema usiamo le coordinate su schermo, perchè queste sono invece basate sui pixel contati partendo da un ipotetico centro del tile (a noi poco interessa perchè basando il ragionamento sulla distanza in tiles, ovunque siano eroe e nemici, la matematica non essendo un opinione, avremo sempre una differenza CERTA e sicura su cui improntare le nostre condizioni nel codice...). Un altra cosa ancora, se per caso decidete di usare un qualche script per il pixel movement, avere le coordinate su schermo vi faciliterà enormenmetnte la vita, e non solo, vi permetterà di poter "dosare" addirittura i pixel per fare una certa cosa in modo certosino, ad esempio se sono accanto e quindi a distanza di 32pixel (nè uno di più nè uno di meno) potrete usare un arma come un pugnale, se siete a distanza superiore a 32(non uguale altrimenti usa il pugnale) e inferiore a 50 potete usare la spada, se siete a una distanza superiore a50 (non uguale altrimenti usa la spada) e inferiore a 200 usa la magia eccetera eccetera...

OK, ora che abbiamo compreso perchè le coordinate su schermo han da essere preferite a quelle su mappa proseguiamo a disaminare la logica del discorso, il cui funzionamento in parte ho appena riassunto ^^

cominciamo infatti con le nostre condizioni che vanno divise in due principali scaglioni, quello che succede quando giocatore e nemico sono sulla stessa ascissa (cioè hanno la stessa X, cioè Xnemico-Xgiocatore è pari a 0, cioè in pratica il giocatore e il nemico stanno uno sopra e l'altro sotto o viceversa comunque sulla stessa colonna..) a quel punto calcoliamo la distanza che hanno, se la distanza rientra in un certo range facciamo attivare determinati switch che ci abiliteranno a fare determinate cose, altrimenti mettiamo tali switch in OFF (importante non dimenticarsi mai di fare questo, diversamente uno switch rimarrebbe su ON anche se voi vi allontanate per esempio dalle condizioni di distanza di collisione)

si ripete quindi lo stesso discorso per quello che succede quando il nemico e giocatore sono sulla stessa ordinata (cioè hanno la stessa Y, cioè Xnemico-Xgiocatore è pari a 0, cioè in pratica giocatore e nemico stanno uno a destra dell'altro e/o viceversa comunque sulla stessa riga...) a quel punto di nuovo impostiamo le nostre condizioni, se sono sulla stessa riga cioè Y=0 dobbiamo solo impostare quando la distanza sulla X è "tot" e a quel punto attivare le switch (o fare qualunque cosa vogliamo) oppure metterla su OFF.

 

Se siete alle prime armi e volete cimentarvi in un qualcosa del genere vi suggerisco di cominciare con qualcosa di più semplice (quello che vedete che ho fatto io calcola ben 3 switches.. una distanza di 3 tiles per l'attacco magico, una di "63pixel" per l'attacco fisico dell'eroe (DIMENTICAVO, SE METTETE 32 LA CONDIZIONE AVVIENE QUANDO SONO EFFETTIVI I 32, il che si verifica esclusivamente QUANDO IL GIOCATORE NEMICO STANNO ESATTAMENTE UNO AFFIANCO ALL'ALTRO, PER AVERE UN MARGINE DI MOVIMENTO CONSIGLIO DI USARE QUESTO VALORE "LIMITE" di 63, se infatti mettete 64 passate automaticamente ad un tile in più (e quindi succede che avrete una "collisione" ad un tile intiero di distanza!!! ma con 63 parte la collisione dal momento in cui fate per varcare il tile, quindi è praticamente un piccolo anticipo sulla mossa ;)) ed un ultima di 32 SECCO per l'attacco del nemico..

Naturalmente ognuno è libero di variare modificare in base alle proprie esigenze! quello che ho eventato io qui sopra non ha la pretesa di fare da imperativo per nessuno e in nessun caso, ma solo un modo come un altro di sbrogliare la faccenda "collisioni"..

Notare anche che io ho messo la subcondition giocatore rivolto su, giù, destra e sinistra, in modo che lo switch che mi abilita l'attacco dell'eroe sia vincolato al fatto che l'eroe sia girato/rivolto esclusivamente verso l'evento/nemico in questione e non altrove (altrimenti potreste avere le condizioni favorevoli alla collisione anche standogli attaccato ma di spalle e non sarebbe verosimile danneggiare un nemico che ti sta dietro, menando un fendente davanti ^_^)

Share this post


Link to post
Share on other sites
Il 30/1/2017 at 11:44, NN81 dice:

 

[...]

 

 

Oh, Mastro degli Eventi,

a lei che serpeggia con grazia tra righe di comandi, domando se ancor vi è in lei il disìo di voler acuire il suo vademecum, giacché i suoi insegnamenti collidono col mio studio e bramosa d'apprendere è la mia incolta persona.

Share this post


Link to post
Share on other sites
18 ore fa, .-lFCDl-. dice:

 

Oh, Mastro degli Eventi,

a lei che serpeggia con grazia tra righe di comandi, domando se ancor vi è in lei il disìo di voler acuire il suo vademecum, giacché i suoi insegnamenti collidono col mio studio e bramosa d'apprendere è la mia incolta persona.

 

mi spiace essere io a darti la brutta notizia, ma dubito che lo rivedrai più, in questi lidi ::rotfl::

 

Share this post


Link to post
Share on other sites

 

Il 30/1/2017 at 11:44, NN81 dice:

 

...

 

 

AGGIORNAMENTO (scrivo così perché non so se quando invierò il messaggio, questo si unirà all'ultimo inviato)

 

Anche se non so se tornerai sul forum, ti ringrazio TANTISSIMO per aver fatto questa piccola guida. Ci ho messo un po' per capire quello che hai fatto, ma alla fine hai risolto buona parte dei miei problemi. Grazie a te ho scoperto anche altre chicche che ho testato e funzionano meglio di quanto immaginassi. Devo solo impostare meglio le cose.

Gli eventi comuni sono una rogna all'inizio, ma una volta capiti sono anche divertenti da usare. Grazie mille e arrivederci :D

Share this post


Link to post
Share on other sites

Ragazzi, HALP.

 

So che purtroppo NN81 difficilmente si farà vivo di nuovo qui sul forum, ma confido in voi.

Ho un problema che non riesco a risolvere. Ho eseguito quello che NN81 ha spiegato, ottenendo un risultato soddisfacente per il tipo di soluzione che volevo. Però c'è un problema abbastanza strano quando provo a realizzare una sorta di combat system molto semplice. Vi spiego il problema.

 



2Zih3y9.jpg

 

Questo è quello che ho scritto per ottenere una cosa semplice. Praticamente se il giocatore si trova davanti all'evento, si deve sentire un suono. Questo funziona... però male.

 

 

kOSqfCS.png Y = Blu     X = Rosso

 

Se il giocatore si trova sopra o sotto l'evento, si sente il suono. Fin qui tutto ok. Ma se per esempio il giocatore si trova a destra e a sinistra, non si sente nulla. Tuttavia, se si sposta verso il basso si sente il suono. Questo perché, non riesco a capire per quale assurdo motivo, le coordinate di X si trovano esattamente sulla griglia, mentre quelle di Y si trovano al centro, tra una riga e l'altra. 

 

Ora, prima che ne esco pazzo, qualcuno riesce ad aiutarmi e a capire quel quale motivo si comporta in questo modo? Sto impazzendo :wacko:

 

P.S.: non ho messo un valore esatto di Y ed X perché volevo provare una cosa, prima... Ma ho dimenticato di modificare. In ogni caso, il problema si verifica ugualmente.

Share this post


Link to post
Share on other sites

Son le stesse che ci stanno pure sull'ace XDDD

Comunque vengono usate per saltare da una parte all'altra del codice che scrivi, in modo da non avere ripetizioni(nel caso in cui devi ripetere porzioni di codice uguale) che lo porterebbero ad allungarsi.

 

Edit:

Ho fatto un tutorial passo per passo, in cui spiego che ho fatto... Ma inspiegabilmente sul VXAce non funziona!

L'ho mandato pure a @Ghost Rider per vedere se a lui funziona.

La cosa strana è che sul 2k3 funziona alla perfezione.

Ti lascio comunque il link con entrambi i progetti poi vediamo che mi risponde ghostino in merito al non funzionamento della versione per l'ace.  

Edit:

Link aggiornato alla versione funzionante:

http://www.mediafire.com/file/157a2ggb75pmvbq/Test+NSOE+2k3-VXACE.rar

Edited by kaine
aggiornato link per download (see edit history)

Share this post


Link to post
Share on other sites

Grazie mille. L'unico problema è che poi dovrò "tradurre" tutto su mv, visto che sto lavorando su quello, ma è il male minore xD Ace non lo sto usando perché per certi versi mv mi piace di più. Ma questo problema è davvero inspiegabile... Perché ace e mv non funzionano come dovrebbero? I misteri...

Share this post


Link to post
Share on other sites

eventisticamente parlando, VXA e MV sono pressochè identici, cambia solo il linguaggio di scripting quindi non dovresti avere grossi problemi con la "traduzione".

 

Dunque ho testato i progetti di Kaine e anche a me quello su VXA non funge. Il motivo temo sia imputabile al modo in cui i diversi tool priorizzano la risoluzione degli eventi, in oltre voglio portare alla vostra attenzione una cosa banale...

 

visto che interagite con l'evento in questione premendo il tasto azione vicino ad esso... a che serve fare un sistema di collisione?

Il semplice fatto che siete vicino a lui e premete azione per risolvere l'evento, implica che siete adiacenti ad esso ::rotfl::

per sfruttare al meglio questo tutorial sarebbe ideale che un evento comune o parallelo, in lontananza, gestisca il sistema prendendo le coordinate dei diversi eventi su mappa, che poi sarebbe il sistema che usavo io nella vecchia beta di resurrection quando era ancora sul 2003 (sull'ace ho usato un BS prefabbrcato a script, sticaxxi, non mi accosto proprio a smadonnare sugli eventi con un tool così limitato XDDDD), e che dovrebbe funzionare comunque anche sugli altri tool (sull' XP almeno funzionava).

Share this post


Link to post
Share on other sites

E si io l'ho ideato con l'idea di farlo funzionare in parallelo, ma comunque continuo a non spiegarmi il perché non funzioni su vx ace, nonostante si usino le stesse funzioni base del tool.

Per me è solo un motivo in più per restare ancorato al 2k3. 

Squadra che vince non si cambia! XDDDDD

Edit:

E poi c'è chi dice che l'ace è più semplice e bla bla bla ma cavolo manco gli eventi base girano ma che cazz... Questo boccone amaro non mi va proprio giù, mi ricorda la volta che usavo i cicli annidati e non funzionava il codice che avevo scritto, tutto il giorno a fare prove su prove in contatto con ghost.

Poi salta fuori a CULO cercando su google, che ci stava un bug che non permetteva il corretto funzionamento dei cicli.

Quindi ciò che avevo scritto sin dall'inizio era giusto e mi stavo dannando per nulla[poi ho risolto con una patch del buon cherry].

Edited by kaine (see edit history)

Share this post


Link to post
Share on other sites
1 ora fa, Ghost Rider dice:

eventisticamente parlando, VXA e MV sono pressochè identici, cambia solo il linguaggio di scripting quindi non dovresti avere grossi problemi con la "traduzione".

 

Dunque ho testato i progetti di Kaine e anche a me quello su VXA non funge. Il motivo temo sia imputabile al modo in cui i diversi tool priorizzano la risoluzione degli eventi, in oltre voglio portare alla vostra attenzione una cosa banale...

 

visto che interagite con l'evento in questione premendo il tasto azione vicino ad esso... a che serve fare un sistema di collisione?

Il semplice fatto che siete vicino a lui e premete azione per risolvere l'evento, implica che siete adiacenti ad esso ::rotfl::

per sfruttare al meglio questo tutorial sarebbe ideale che un evento comune o parallelo, in lontananza, gestisca il sistema prendendo le coordinate dei diversi eventi su mappa, che poi sarebbe il sistema che usavo io nella vecchia beta di resurrection quando era ancora sul 2003 (sull'ace ho usato un BS prefabbrcato a script, sticaxxi, non mi accosto proprio a smadonnare sugli eventi con un tool così limitato XDDDD), e che dovrebbe funzionare comunque anche sugli altri tool (sull' XP almeno funzionava).

 

Ma l'evento è in parallelo. Quello che ho scritto in spoiler è riportato in un evento che parte in parallelo (la fiamma rossa). Effettivamente ho dimenticato di specificarlo... <_<' Come ho detto, a me funziona, ma male. Le coordinate per l'asse X vengono calcolate in maniera differente rispetto a quelle dell'asse Y e non capisco perché. Proprio la posizione sembra essere errata. Almeno parlo di MV, non so se questo identico problema avviene con ace.

 

50 minuti fa, kaine dice:

E si io l'ho ideato con l'idea di farlo funzionare in parallelo, ma comunque continuo a non spiegarmi il perché non funzioni su vx ace, nonostante si usino le stesse funzioni base del tool.

Per me è solo un motivo in più per restare ancorato al 2k3. 

Squadra che vince non si cambia! XDDDDD

Edit:

E poi c'è chi dice che l'ace è più semplice e bla bla bla ma cavolo manco gli eventi base girano ma che cazz... Questo boccone amaro non mi va proprio giù, mi ricorda la volta che usavo i cicli annidati e non funzionava il codice che avevo scritto, tutto il giorno a fare prove su prove in contatto con ghost.

Poi salta fuori a CULO cercando su google, che ci stava un bug che non permetteva il corretto funzionamento dei cicli.

Quindi ciò che avevo scritto sin dall'inizio era giusto e mi stavo dannando per nulla[poi ho risolto con una patch del buon cherry].

 

Come hai trovato quel bug su internet? Potresti linkare la pagina del bug segnalato, così posso verificare se avviene lo stesso con MV? Perché non capisco cosa intendi per "non funziona su ace", nel senso che non capisco se non funziona per niente o in parte come nel mio caso su MV 

Edited by .-lFCDl-. (see edit history)

Share this post


Link to post
Share on other sites

Il bug di cui parlavo era per il 2k3(mi sa che ho postato pure la patch qui sul forum non appena la trovai) non per l'ace.

La demo che ho fatto su vx ace(Ho dato per scontato che stessi realizzando il tuo progetto su ace perché questo topic tratta proprio l'ace XD), quando mi avvicino all'evento e premo invio per avviarlo e quindi sentire l'effetto sonoro non fa praticamente "nulla" o meglio lo fa ma non esegue l'effetto sonoro, idem se metto l'evento in parallelo, per far si che l'effetto sonoro suoni in automatico, quando l'eroe sta a sinistra, destra, sopra o sotto l'evento senza dover stare a premere invio.

 

Share this post


Link to post
Share on other sites

Scusate il doppio post ma ho trovato il bug XDDDD

Dio benedica il tasto f9 che mi ha fatto notare cosa non andava, non so perché ma l'ace conta i tile per l'asse y dell'evento dal basso verso l'alto, mentre per l'asse y l'eroe dall'alto verso il basso.

Quindi anche se stavano l'uno di fianco all'altro mi trovavo due valori differenti in questo caso (Y evento=7) e (Y Eroe=5)

Screen esplicativo:

CjX7zAM.png

Edit:

Ho fatto altri test ed effettivamente è buggato l'asse Y per gli eventi a quanto pare, delle volte mi da le coordinate giuste, ma se sposto l'evento in un altra parte della mappa è probabile che l'asse Y non sia quello giusto.

Edit2:

 

RISOLTOOOOOO!!!!!

Dato che la lettura dell'asse y in tile è buggata, ho provato con le coordinate in pixel ed in quel modo son riuscito a farlo funzionare

http://www.mediafire.com/file/157a2ggb75pmvbq/Test+NSOE+2k3-VXACE.rar

Dimenticavo su MV invece di 32 e 64(capirai quando apri l'evento del vecchietto) devi usare 48 e 96

Edited by kaine (see edit history)

Share this post


Link to post
Share on other sites

Risolto anche io. Praticamente, siccome il mio problema era un po' diverso, ho usato il plugin "Console on boot" per MV ed ho visualizzato il valore della variabile "eventY - PlayerY". Nelle condizioni, invece di mettere Y = 0 ho messo Y = 6 come da screen, ed ora funge magnificamente. Grazie a tutti per aver risolto questo problema e per non avermi fatto arrivare alla follia. 

 

86vPOXr.png

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Tentauren_
      Tentauren

      presenta

      La storia del manichino che per sbaglio conobbe la vita v. 3.0


      1. Introduzione
      Forse qualcuno di voi si ricorderà delle varie iterazioni di questo progetto, che da un decennio emerge e riaffonda nelle pieghe delle mie fantasie pre-sonno. Il manichino è stato tante cose: una sfida, con una demo non giocabile nel 2011 fatta con RPGMaker 2003 in un solo pomeriggio (potete trovare il topic qui, ma il link di download è sicuramente rotto); un omaggio a Planescape in un periodo di ossessione fortissima, con la stessa storia, ma ambientata a Sigil, brevissima demo giocabile e grafica rippata dai capolavori dell'Infinity Engine (qui; per qualche giorno è stato un romanzo fantasy (se siete interessati posto la bozza del primo capitolo, è decisamente sporco ma ne vado particolarmente fiero), poi è ricaduto nell'oblio appesantito da una lore molto più espansa e un mucchio di idee lasciate a metà. Da un mesetto è ritornato a tormentarmi, in una veste tutta nuova. Probabilmente la colpa è da imputare a Jimmy and the Pulsating Mass, un gioco fatto con l'engine basico di MV e nonostante questo venduto a prezzo profumato su Steam, una perla che punta sull'atmosfera e sulla narrazione più che su feature mirabolanti e vale (quasi) la spesa. 

      2. Storia *
      La storia, ad oggi, è più o meno la stessa di sempre, ma in un universo più ampio.
      La Scala è un multiverso privo di limiti conosciuti, che si espande verso l'alto e verso il basso in infiniti Gradini di infinita diversità. Le teorie sulla sua origine, la sua natura e le sue motivazioni sono, come è tipico di ogni cosmologia, tante, disparate e in violento conflitto: c'è chi afferma che i Gradini siano disposti secondo un ordine di merito, e chi li considera le vertebre della schiena di un dio-mostro cosmico. Nessuna è più vera delle altre, ma qualcosa su cui tutti -o quasi- concordano è che la forma di energia più potente della Scala è la Vita: essa si espande e si srotola in ogni immensità e in ogni anfratto, mette radici e vince anche dove le sarebbe impossibile. Non c'è un angolo della Scala che non sia sotto il dominio della Vita, che muta se stessa per esprimersi nei più disparati fenomeni: da qualche parte, non troppo distante da dove ci troviamo, un Gradino appena nato vede macchine terraformanti spegnersi definitivamente, per lasciare spazio al futuro; nella direzione opposta quello che su quel Gradino verrebbe definito un uomo accende per la prima volta la sua piccola creatura di intelligenza artificiale. La Vita continua, inesorabile, a trovare nuove forme. 

      Su un Gradino intermedio, di non troppa importanza, Azith Presbe, stregone proprietario del Magiemporio Presbe nella città di Urth, ha appena ricevuto una consegna speciale: una rarissima Pozione della Vita. Ma Yoke, il maldestro commesso, nel portarla al sicuro nei magazzini del negozio, la rompe addosso a un manichino da esposizione. Per sfuggire alle grinfie del vendicativo stregone, i due dovranno attraversare gli intricati cunicoli dei magazzini nella speranza di trovare un'altra uscita o, quantomeno, di prepararsi all'inevitabile scontro. È una storia piccola ambientata in piccoli spazi rispetto all'immensità della Scala, ma il magazzino di uno stregone archetipico può contenere i frammenti dei mondi più distanti, come una planimetria dell'intero cosmo. Quello che Yoke e il Manichino incontreranno cambierà per sempre le loro vite e, forse, quelle di molti altri.


      3. Personaggi
       
      MEMBRI DEL PARTY 
       
      Principali:

      Manichino


      Ehi capo, non mi manca qualche frame?
      Oh sì, te ne mancano una marea.

      Ex manichino per armature da esposizione, polveroso e abbandonato al primo piano dei sotterranei del Magiemporio Presbe. Dopo essere stato imbrattato dalla Pozione della Vita si ritrova, confuso e un po' infastidito, con una coscienza; ma non ha alcuna intenzione di lasciarsela togliere: seguirà Yoke per gli intricati cunicoli dei magazzini, per sfuggire alle grinfie di Azith.
      E' scanzonato e ribelle, un Pinocchio senza naso. 
      Il manichino è di legno, di altezza e misure standard (esattamente per essere abbigliato con armature da esposizione). Ha vaghi tratti facciali, solo abbozzati. All'inizio del gioco è nudo (per questo è in magazzino) e, cosa molto importante, non ha le dita delle mani definite.

      Yoke 


       
       
       
      Mago scadente, poco ambizioso, svogliato. Lavora come commesso al Magiemporio Presbe semplicemente perché non ha più aspettative e, se le ha mai avute, le ha messe da parte da tempo. Come ciliegina sulla torta, l'ha fatta veramente grossa: ha rotto una fiala di importanza prioritaria e adesso la sua unica possibilità è scappare, sperando che la via per i magazzini sia più sicura di quella per l'ingresso principale. Ha una fidanzata ma le cose non vanno benissimo. E' appassionato di insetti, parla l'insettese comune (che nerd) e ne porta sempre tre con sè: Zig, una Mosca Angelica (Musca domestica, ma con ali d'angelo e l'abilità di sdoppiarsi virtualmente all'infinito), Zag, una Zanzara Behemoth (uguale a una zanzara normale ma leggermente più grossa, più o meno quanto un polpastrello) e... Roll, un insetto metafisico senza un aspetto preciso e dalle intenzioni incomprensibili.
      Yoke è alto e magrissimo, ha i capelli rossi e la pelle leggermente scura (ma non troppo). Indossa la Divisa da Commesso del Magiemporio Presbe: una tuta da mago standard (grigia), coi pantaloni rigonfi verso il basso (che lasciano le caviglie scoperte) e un colletto che arriva fino al naso, aperto a v nel centro e, davanti, un grembiule verde coi bordi delle tasche gialle. Indossa un cappello da mago dello stesso colore della tuta. Ha una cintura con la fondina per il Catalizzatore e tre confezioni di mangime per insetti: uno contiene feci di ratto, un altro sangue di mucca e il terzo è completamente vuoto.
       
      ???

      (concept e sprite non pervenuti, per il momento)

      Una donna vestita di stracci e priva di memoria che i nostri trovano in una cella dei magazzini. Visibilmente incinta. Di chi si tratti in realtà è difficile dirlo, ma quel che si sa è quel che si vede: Azith l'ha usata per bizzarri esperimenti ILLEGALI di magia. Qualsiasi cosa porti in grembo, non è umana ed è molto arrabbiata. Il "bambino" farà di tutto per difendere sua madre (o forse solo per difendere se stesso) con le sue capacità soprannaturali. Capacità del tipo tentacoli e manipolazione della realtà. Non che lei non sia terrificante di suo: freddo sarcasmo e atteggiamento tsundere, sempre pronta a prendere a schiaffi chi ne dice una di troppo e un rapporto stranamente casual rispetto alla sua condizione. Del resto, chi non sa chi è davvero, può scegliere di essere chiunque; perché mai essere una persona debole?
      In combattimento, il menù di ??? è una serie di ordini molto vaghi. Al comando selezionato, il feto selezionerà la reazione da una pool di mosse che aumenteranno all'aumentare di livello.
       
       
      Bang McCrock


       
      (sprite in lavorazione)

      Bang è un cartone animato, proveniente da un Gradino completamente bidimensionale. Azith l'ha evocato e imprigionato sulla pagina di un libro. Bang non rispetta le leggi della fisica ordinaria, a dire il vero non rispetta nessuna legge di realtà possibile e, se gli è possibile, nemmeno nessuna regola di buon senso: emette un suo personale campo che funziona secondo le sue regole, esattamente come The Mask o un qualsiasi abitante di Cartoonia e lo sfrutta per practical jokes anche a discapito della comune sicurezza. Un maestro della scena, incapace di vivere senza spettatori. In realtà, rimanere troppo tempo in uno spazio tridimensionale mette seriamente a rischio la sua incolumità, ma meglio questo che rimanere sepolto in un volume polveroso in attesa di essere utilizzato per gli scopi di uno stregone senza scrupoli.
      Bang non può parlare, ma può scrivere nell'aria.
      La sua bidimensionalità gli consente di infliggere stati alterati speciali e anche di sfruttare glitch del gioco
       
      Opzionali:
       
       
       

      Segreti:
       
           
          Antagonisti:
       
      Azith 
      "Io sono Azith Presbe, Stregone Anziano del Circolo dei Vedenti. Sono Azith Presbe, Colui che Parla coi Morti. Tessitore di Astri. Ponte-Tra-Le-Potenze. Drago Onorario. Mago Archetipico su duecento livelli. Sovrano di venti di essi. ". Insomma, Azith è uno a cui piace tanto parlare di sè. Non del tutto a torto: è effettivamente potente come dice di essere e, per via della sua ambizione, continua a diventarlo sempre di più. A Urth, sul suo piano di base, ha aperto una catena di negozi di magia, i Magiempori Presbe, i più richiesti del livello. Ha fatto un acquisto importante da un'entità importante, destinato a un'entità ancora più importante: l'unica fiala di Pozione della Vita, un oggetto di estrema rarità, probabilmente illegale se solo si sapesse della sua esistenza in giro. La sfortuna e qualche errore di calcolo l'hanno portato ad affidarlo al più inetto dei suoi dipendenti, Yoke. 
      Azith è esperto in un'ampia varietà di stili di magia, ma predilige tutto ciò che ha a che fare con gli occhi. Una delle sue tecniche-firma ha a che fare con l'espansione della vista attraverso la fuoriuscita dei bulbi oculari dalle orbite (su due antenne di vene), che gli consente tra le altre cose di vedere ciò che normalmente non è fatto per essere visto. 
      Azith è un uomo dall'altezza imponenete, ben nutrito ma non grasso. Ha capelli bianchi e, ovviamente, una barba lunga fino al petto, ma ben curata. 


      La Poltrona Rosa
       

      E' semplicemente una grossa poltrona con la tappezzeria rosa e le gambe di legno. Dai cuscini vengono fuori grosse zanne e una lingua eccessivamente lunga. Azith deve averla comprata su qualche livello inferiore o forse l'ha costruita lui stessa imprigionandoci uno spirito. La usa come segugio per i piani più alti del magazzino.
       
       
          4. Disegni/Fan Art
       
      Spoiler 
       
      Schizzi preparatori per il Manichino, di Daniele Giampaolo.
       


      Una prima versione di Yoke, molto bella ma troppo cool per rappresentare il personaggio.
       

       
      Una SECONDA versione di Yoke, che coglie il senso del personaggio ma è troppo poco "caratterizzata":
       


      "Un volto così bello che sembra scolpito da un artigiano"
       

       
      Adam nel suo periodo edgy da mercenario postapocalittico
      Here comes the daddy:
       

       
      Le vecchie, orribili versioni dello sprite del Manichino
       

       
      5. Caratteristiche Tecniche/Gameplay *
      Purtroppo non ho grandi capacità di programmazione, quindi il BS sarà standard (laterale se riesco a recuperare qualche script), ma cercherò di renderlo interessante attraverso qualche piccolo accorgimento. Il Manichino, per esempio, combatterà per la prima parte del gioco interamente a mani nude, fino a quando non si sarà sbloccata la possibilità di intagliarlo e modificarlo per fargli tenere in mano un'arma. Il sistema di summon avrà una particolarità dovuta alla lore: non essendoci, sulla Scala, un piano che sia "più materiale" degli altri
      Se dovessi immaginare un sistema di combattimento custom, se un giorno qualcuno con capacità di programmazione avanzata decidesse di darmi una mano, manterrebbe le stesse features ma con il sistema della 3.5 di Dungeons & Dragons (o una sua versione ridotta). Il mio ideale è il BS del Tempio del Male Elementale: so che è veramente troppo, ma sognare non è illegale.
      La grafica del gioco sarà interamente da 0. In origine, proprio per questo, pensavo di lavorare su 2000 o 2003. Poi però mi è capitato sotto mano il bellissimo CrownTrick e ho sognato un mondo in alta risoluzione. La mia pixel art è ancora di livello basso, quindi proprio per questo motivo ci metterò un po' di tempo in più, ma devo dire che i risultati mi rendono abbastanza fiero di me nonostante ci sia ancora molto da migliorare. 

      6. Screenshot * 
      N\A


      7. Demo/Link alla versione giocabile * 
      N\A


      8. Crediti Vari *
      Ringrazio Daniele Giampaolo per il character design dei personaggi principali (vedrete gli altri a breve). E qui colgo l'occasione per parlare del perché di questo topic: il mio gioco è un sogno e questo thread è una promessa. Ho approcciato in passato questo progetto nelle maniere più sbagliate, pretendendo tanto da me in poco tempo e finendo per pretendere dagli altri. Questa volta non avrò scadenze: non voglio fare in fretta, preferisco fare bene. Ho però una schedule, una demo di un paio di ore al massimo con due bossfight principali e una opzionale, che arrivi a un 10% della trama complessiva. Questo è quanto intendo fare per adesso, per testare le mie capacità e capire quanto in là posso spingermi. Qualsiasi aiuto, sia come partecipazione attiva al progetto (in qualsiasi ruolo: per quanto mi stia occupando io della grafica un altro paio di mani mi farebbero comodo) che come consiglio, critica, correzione, distruzione totale è più che ben accetto. Proprio per questo spero di mantenere attivo e in continuo aggiornamento questo topic e, soprattutto, spero che vi partecipiate in molti, anche solo come osservatori. 
    • By MrSte
      Autore: Apellonyx
       
      Versione: 1.10
       
      Informazioni: Questo Script aggiunge al gioco la Funzione di Sopravvivenza, tra cui: Fame, Vita, Acqua ecc..
       
      Screenshot:
       
       
      n/a
       
      Script: 
       
      =begin ====================================== Survival System v1.11 (formerly known as Needs System) Created by: Apellonyx Released: 2 April 2013 Last Update: 5 April 2013 ====================================== Terms of Use: You are free to use this system however you wish, in commercial and non- commercial games alike. If you edit the script extensively, it is not necessary to credit me (since you clearly only used my code as a framework), but I would appreciate credit if it is used in its current form, or if only minor changes were made to the script. ====================================== Support: While I am not wildly active, I usually log onto "rpgmakervxace.com" daily, so if you have any questions pertaining to the script, you can ask any questions there, in the topic in which this script was released. Just as a warning, though, I will not edit the script to make it compatible with any special menu systems, but I will try to fix bugs as they come up. If you find one, let me know, and I'll do my best to squash the thing. ====================================== Changelog: v1.0: 2 April 2013 - Original version. Included food, water, rest, and life. v1.01: 3 April 2013 - Added configurable maximum values for food, water, and rest, and made the maximum for life a configurable value. The failsafe mentioned in v1.0's Instructions is no longer needed. v1.02: 3 April 2013 - Added support for a fully configurable "reverse logic" stat, as suggested by esrann. v1.10: 5 April 2013 - Complete rewrite using global variables rather than game variables and switches. All stats are now optional, configurable, and can be hidden from the menu. v1.11: 17 May 2013 - Fixed a major bug involving the use of float values. Floats should work just fine now without causing the game to crash or the script to just die randomly. Also added background opacity config. ====================================== Requirements: There are no longer any requirements for this script. I'm working on a script that will allow the global variables to be changed through note calls, but it may be a minute for that. ====================================== Description: This sets up a needs system, which includes food, water, and rest, all of which affect the main need, life. The 1.02 update also added a reverse logic stat for toxin or radiation handling. All five stats, along with their update rates, are handled by global variables, and can be changed at any time with a simple script call. ====================================== Instructions: First, you're going to want to set up how you want the script to run. All of the options are in the first module of the script, named "Anyx." I don't recommend changing anything after that module unless you know what you are doing. Second, once you have all of your options set up, you can go about setting up the nourishment items. All you have to do is set it up in the database as you normally would, and then attach an effect that calls a common event. Inside the common event, use one of the following scripts call to change the appropriate variable. It's as simple as that. $survival_v[id] op value id = The stat you want to change. 1 is for life, 2 food, 3 water, 4 rest, and 5 toxin. Ids 6-10 are used to hold the stats' rates. 6 is for life, 7 food, 8 water, 9 rest, and 10 toxin (setting any of these rates to 0 will disable updates for its stat, effectively pausing the system for that stat individually without pausing it for the others) op = The operator used to formulate the new value. += is used to add, -= is for subtraction, *= is for multiplication, /= is for division, and %= is for modulus. There are others, and they all work, but I don't imagine you would use them for this script, so I won't explain them here. value = The value you would like to alter the variable by. For example, if you are adding 10 to a variable, this would be 10. $survival_s[id] = value id = The stat you wish to enable or disable. 1 is for life, 2 food, 3 water, 4 rest, 5 toxin. Ids 6-10 are used to hide the stat bars from the menu. value = true/false. Setting the value to true for ids 1-5 will enable the associated stat. Setting it to false will disable it completely. For ids 6-10, setting the value to true will hide that stat from the menu, but still allow it to update (this can be customized using the LIFEHIDEVAL, FOODHIDEVAL, WATERHIDEVAL, RESTHIDEVAL, and TOXINHIDEVAL options in the Anyx module below. When the hide option is true, that stat will be hidden from the menu until the stat is below the (STAT)HIDEVAL's value, or above the TOXINHIDEVAL's value for the toxin stat). If false, the stat will be visible in the menu at all times. You no longer need to manually set the initial values for each variable, as this can be done through the script, but you do need to turn on the survival switch manually, or the script won't do anything. ====================================== =end $imported = {} if $imported.nil? $imported['Apellonyx-Survival'] = true puts "Load: Survival System v1.10 by Apellonyx" module Anyx WINXPOS = 0 # X position of the survival window WINYPOS = 320 # Y position of the survival window WINWIDTH = 160 # Width of the survival window WINTEXT = 20 # Text size used in the survival window (looks best at 20) WINOPACITY = 255 # Opacity of the survival window SURVIVALSWITCH = 1 # Game switch ID for enabling and disabling the system ONINBATTLE = true # Whether the system will update during battle scenes DEATHATZERO = true # If true, will cause a gameover when the life stat # reaches 0 DEATHFULLTOXIN = true # If true, will cause a gameover when the toxin stat # reaches its maximum value LIFEVOCAB = "Life" # Vocab used for the life stat in the menu LIFEINIT = 100 # Initial value of the life stat in new games LIFERATE = 300 # Number of frames between life stat updates LIFEMAX = 100 # Maximum value for the life bar in the menu LIFEEXC = 100 # Maximum value for the life stat (can exceed LIFEMAX) LIFEENABLE = true # If true, the life stat will be enabled LIFEHIDE = true # If true, the life bar will be hidden from the menu LIFEHIDEVAL = 100 # If LIFEHIDE is true, the life bar will appear when it # falls below this value. FOODVOCAB = "Food" # Vocab used for the food stat in the menu FOODINIT = 100 # Initial value of the food stat in new games FOODRATE = 1200 # Number of frames between food stat updates FOODMAX = 100 # Maximum value for the food bar in the menu FOODEXC = 110 # Maximum value for the food stat (can exceed FOODMAX) FOODMOD = -1.0 # Value of the food stat's change each update; positive # values will increase the stat over time, negative # values decrease the stat over time, and 0 will cause # no update to occur over time. Accepts float values. FOODENABLE = true # If true, the food stat will be enabled FOODHIDE = true # If true, the food bar will be hidden from the menu FOODHIDEVAL = 100 # If FOODHIDE is true, the food bar will appear when it # falls below this value. WATERVOCAB = "Water" # Vocab used for the water stat in the menu WATERINIT = 100 # Initial value of the water stat in new games WATERRATE = 900 # Number of frames between water stat updates WATERMAX = 100 # Maximum value for the water bar in the menu WATEREXC = 110 # Maximum value for the water stat (can exceed WATERMAX) WATERMOD = -1.0 # Value of the water stat's change each update; positive # values will increase the stat over time, negative # values decrease the stat over time, and 0 will cause # no update to occur over time. Accepts float values. WATERENABLE = true # If true, the water stat will be enabled WATERHIDE = true # If true, the water bar will be hidden from the menu WATERHIDEVAL = 100 # If WATERHIDE is true, the water bar will appear when # it falls below this value. RESTVOCAB = "Rest" # Vocab used for the rest stat in the menu RESTINIT = 100 # Initial value of the rest stat in new games RESTRATE = 1500 # Number of frames between rest stat updates RESTMAX = 100 # Maximum value for the rest bar in the menu RESTEXC = 110 # Maximum value for the rest stat (can exceed RESTMAX) RESTMOD = -1.0 # Value of the rest stat's change each update; positive # values will increase the stat over time, negative # values decrease the stat over time, and 0 will cause # no update to occur over time. Accepts float values. RESTENABLE = true # If true, the rest stat will be enabled RESTHIDE = true # If true, the rest bar will be hidden from the menu RESTHIDEVAL = 100 # If RESTHIDE is true, the rest bar will appear when it # falls below this value. TOXINVOCAB = "Toxin" # Vocab used for the toxin stat in the menu TOXININIT = 0 # Initial value of the toxin stat in new games TOXINRATE = 100 # Number of frames between toxin stat updates TOXINMAX = 1000 # Maximum value for the toxin stat and toxin bar TOXINMOD = 0.1 # Value of the toxin stat's change each update; positive # values will increase the stat over time, negative # values decrease the stat over time, and 0 will cause # no update to occur over time. Accepts float values. TOXINENABLE = true # If true, the toxin stat will be enabled TOXINHIDE = true # If true, the toxin bar will be hidden from the menu TOXINHIDEVAL = 0 # If TOXINHIDE is true, the toxin bar will appear when it # rises above this value. LIFECOLORL = 17 # Color ID of the left side of the life bar LIFECOLORR = 6 # Color ID of the right side of the life bar FOODCOLORL = 3 # Color ID of the left side of the food bar FOODCOLORR = 24 # Color ID of the right side of the food bar WATERCOLORL = 16 # Color ID of the left side of the water bar WATERCOLORR = 4 # Color ID of the right side of the water bar RESTCOLORL = 31 # Color ID of the left side of the rest bar RESTCOLORR = 13 # Color ID of the right side of the rest bar TOXINCOLORL = 10 # Color ID of the left side of the toxin bar TOXINCOLORR = 2 # Color ID of the right side of the toxin bar EXCCOLOR = 11 # Color ID of text for stat values over 100% SATCOLOR = 24 # Color ID of text for stat values between 76 and 100% AVECOLOR = 17 # Color ID of text for stat values between 51 and 75% LOWCOLOR = 14 # Color ID of text for stat values between 26 and 50% DANCOLOR = 20 # Color ID of text for stat values between 1 and 25% DEPCOLOR = 18 # Color ID of text for stat values of 0% ################################################################################ ################################################################################ ### ### ### I don't recommend editing anything past this line unless you know what ### ### you are doing. If you do know what you're doing, however, go for it! ### ### ### ################################################################################ ################################################################################ def self.create_survival_commands $survival_v = Survival_Variables.new $survival_s = Survival_Switches.new $survival_v[1] = LIFEINIT $survival_v[6] = LIFERATE $survival_s[1] = LIFEENABLE $survival_s[6] = LIFEHIDE $survival_v[2] = FOODINIT $survival_v[7] = FOODRATE $survival_s[2] = FOODENABLE $survival_s[7] = FOODHIDE $survival_v[3] = WATERINIT $survival_v[8] = WATERRATE $survival_s[3] = WATERENABLE $survival_s[8] = WATERHIDE $survival_v[4] = RESTINIT $survival_v[9] = RESTRATE $survival_s[4] = RESTENABLE $survival_s[9] = RESTHIDE $survival_v[5] = TOXININIT $survival_v[10] = TOXINRATE $survival_s[5] = TOXINENABLE $survival_s[10] = TOXINHIDE end # def self.create_survival_commands class Survival_Variables def initialize @data = [] end # def initialize def [](variable_id) @data[variable_id] || 0 end # def [](variable_id) def []=(variable_id, value) @data[variable_id] = value on_change end # def []=(variable_id, value) def on_change $game_map.need_refresh = true end # def on_change end # class Survival_Variables class Survival_Switches def initialize @data = [] end # def initialize def [](switch_id) @data[switch_id] || false end # def [](switch_id) def []=(switch_id, value) @data[switch_id] = value on_change end # def []=(switch_id, value) def on_change $game_map.need_refresh = true end # def on_change end # class Survival_Switches def self.update if $game_switches[SURVIVALSWITCH] == true if $survival_s[1] == true if $survival_v[6] > 0 if Graphics.frame_count % $survival_v[6] == 0 Anyx.life_update end # if Graphics.frame_count % $survival_v[6] == 0 end # if $survival_v[6] > 0 end # if $survival_s[1] == true if $survival_s[2] == true if $survival_v[7] > 0 if Graphics.frame_count % $survival_v[7] == 0 if $survival_v[2] < FOODEXC $survival_v[2] += FOODMOD if $survival_v[2] > 0 end end # if Graphics.frame_count % $survival_v[7] == 0 end # if $survival_v[7] > 0 end # if $survival_s[1] == true if $survival_s[3] == true if $survival_v[8] > 0 if Graphics.frame_count % $survival_v[8] == 0 if $survival_v[3] < WATEREXC $survival_v[3] += WATERMOD if $survival_v[3] > 0 end end # if Graphics.frame_count % $survival_v[8] == 0 end # if $survival_v[8] > 0 end # if $survival_s[3] == true if $survival_s[4] == true if $survival_v[9] > 0 if Graphics.frame_count % $survival_v[9] == 0 if $survival_v[4] < RESTEXC $survival_v[4] += RESTMOD if $survival_v[4] > 0 end end # if Graphics.frame_count % $survival_v[9] == 0 end # if $survival_v[9] > 0 end # if $survival_s[4] == true if $survival_s[5] == true if $survival_v[10] > 0 if Graphics.frame_count % $survival_v[10] == 0 if $survival_v[5] < TOXINMAX $survival_v[5] += TOXINMOD if $survival_v[5] > 0 end end # if Graphics.frame_count % $survival_v[10] == 0 end # if $survival_v[10] > 0 end # if $survival_s[5] == true $survival_v[1] = 0 if $survival_v[1] < 0 $survival_v[2] = 0 if $survival_v[2] < 0 $survival_v[3] = 0 if $survival_v[3] < 0 $survival_v[4] = 0 if $survival_v[4] < 0 $survival_v[5] = 0 if $survival_v[5] < 0 $survival_v[1] = LIFEEXC if $survival_v[1] > LIFEEXC $survival_v[2] = FOODEXC if $survival_v[2] > FOODEXC $survival_v[3] = WATEREXC if $survival_v[3] > WATEREXC $survival_v[4] = RESTEXC if $survival_v[4] > RESTEXC $survival_v[5] = TOXINMAX if $survival_v[5] > TOXINMAX if $survival_v[1] <= 0 SceneManager.call(Scene_Gameover) if DEATHATZERO end # if $survival_v[1] <= 0 if $survival_v[5] >= TOXINMAX SceneManager.call(Scene_Gameover) if DEATHFULLTOXIN end # if $survival_v[5] >= TOXINMAX end # if $game_switches[SURVIVALSWITCH] == true end # def update def self.life_update if $survival_s[2] == true food_25 = FOODMAX / 4 food_26 = food_25 + 0.001 food_50 = food_25 * 2 food_51 = food_50 + 0.001 food_75 = food_25 * 3 food_76 = food_75 + 0.001 food_mod = -0.3 if 0 >= $survival_v[2] food_mod = -0.2 if (1..food_25) === $survival_v[2] food_mod = -0.1 if (food_26..food_50) === $survival_v[2] food_mod = 0.0 if (food_51..food_75) === $survival_v[2] food_mod = 0.1 if (food_76..FOODMAX) === $survival_v[2] food_mod = 0.2 if FOODMAX < $survival_v[2] else food_mod = 0 end # if $survival_s[2] == true if $survival_s[3] == true water_25 = WATERMAX / 4 water_26 = water_25 + 0.001 water_50 = water_25 * 2 water_51 = water_50 + 0.001 water_75 = water_25 * 3 water_76 = water_75 + 0.001 water_mod = -0.3 if 0 >= $survival_v[3] water_mod = -0.2 if (1..water_25) === $survival_v[3] water_mod = -0.1 if (water_26..water_50) === $survival_v[3] water_mod = 0.0 if (water_51..water_75) === $survival_v[3] water_mod = 0.1 if (water_76..WATERMAX) === $survival_v[3] water_mod = 0.2 if WATERMAX < $survival_v[3] else water_mod = 0 end # if $survival_s[4] == true if $survival_s[4] == true rest_25 = RESTMAX / 4 rest_26 = rest_25 + 0.001 rest_50 = rest_25 * 2 rest_51 = rest_50 + 0.001 rest_75 = rest_25 * 3 rest_76 = rest_75 + 0.001 rest_mod = -0.3 if 0 >= $survival_v[4] rest_mod = -0.2 if (1..rest_25) === $survival_v[4] rest_mod = -0.1 if (rest_26..rest_50) === $survival_v[4] rest_mod = 0.0 if (rest_51..rest_75) === $survival_v[4] rest_mod = 0.1 if (rest_76..RESTMAX) === $survival_v[4] rest_mod = 0.2 if RESTMAX < $survival_v[4] else rest_mod = 0 end # if $survival_s[4] == true if $survival_s[5] == true toxin_25 = TOXINMAX / 4 toxin_26 = toxin_25 + 0.001 toxin_50 = toxin_25 * 2 toxin_51 = toxin_50 + 0.001 toxin_75 = toxin_25 * 3 toxin_76 = toxin_75 + 0.001 toxin_99 = TOXINMAX - 0.001 toxin_mod = 0.1 if 0 >= $survival_v[5] toxin_mod = 0.0 if (1..toxin_25) === $survival_v[5] toxin_mod = -0.2 if (toxin_26..toxin_50) === $survival_v[5] toxin_mod = -0.4 if (toxin_51..toxin_75) === $survival_v[5] toxin_mod = -0.6 if (toxin_76..toxin_99) === $survival_v[5] toxin_mod = -0.8 if TOXINMAX <= $survival_v[5] else toxin_mod = 0.0 end # if $survival_s[5] == true life_mod = food_mod + water_mod + rest_mod + toxin_mod $survival_v[1] += life_mod.round.to_i end # def life_update() end # module Anyx class Scene_Title alias survival_new_game command_new_game def command_new_game Anyx.create_survival_commands survival_new_game end # def command_new_game end # class Scene_Title class Scene_Map < Scene_Base alias survival_map_update update def update Anyx.update survival_map_update end # def update end # class Scene_Base class Scene_Battle < Scene_Base alias survival_battle_update update def update if Anyx::ONINBATTLE == true Anyx.update survival_battle_update end # if Anyx::ONINBATTLE == true end # def update end # class Scene_Base class Scene_Menu < Scene_MenuBase alias survival_menu_start start def start create_survival_window survival_menu_start end # def start def create_survival_window barcount = 0 if $survival_s[1] == true barcount += 1 if $survival_s[6] == false || $survival_v[1] < Anyx::LIFEHIDEVAL end # if $survival_s[1] == true if $survival_s[2] == true barcount += 1 if $survival_s[7] == false || $survival_v[2] < Anyx::FOODHIDEVAL end # if $survival_s[2] == true if $survival_s[3] == true barcount += 1 if $survival_s[8] == false || $survival_v[3] < Anyx::WATERHIDEVAL end # if $survival_s[3] == true if $survival_s[4] == true barcount += 1 if $survival_s[9] == false || $survival_v[4] < Anyx::RESTHIDEVAL end # if $survival_s[4] == true if $survival_s[5] == true barcount += 1 if $survival_s[10] == false || $survival_v[5] > Anyx::TOXINHIDEVAL end # if $survival_s[5] == true @survival_window = Window_Survival.new @survival_window.contents.draw_text(0, 0, 500, 24, " Survival System") if barcount == 0 barcount -= 1 if barcount >= 1 survivalwinypos = Anyx::WINYPOS - (24 * barcount) @survival_window.x = Anyx::WINXPOS @survival_window.y = survivalwinypos @survival_window.opacity = Anyx::WINOPACITY end # def create_survival_window end # class Scene_Menu < Scene_MenuBase class Window_Survival < Window_Base def initialize winheight = 0 if $survival_s[1] == true winheight += 1 if $survival_s[6] == false || $survival_v[1] < Anyx::LIFEHIDEVAL end # if $survival_s[1] == true if $survival_s[2] == true winheight += 1 if $survival_s[7] == false || $survival_v[2] < Anyx::FOODHIDEVAL end # if $survival_s[2] == true if $survival_s[3] == true winheight += 1 if $survival_s[8] == false || $survival_v[3] < Anyx::WATERHIDEVAL end # if $survival_s[3] == true if $survival_s[4] == true winheight += 1 if $survival_s[9] == false || $survival_v[4] < Anyx::RESTHIDEVAL end # if $survival_s[4] == true if $survival_s[5] == true winheight += 1 if $survival_s[10] == false || $survival_v[5] > Anyx::TOXINHIDEVAL end # if $survival_s[5] == true if winheight == 0 winheight = 1 end # if winheight == 0 super(0, 0, Anyx::WINWIDTH, fitting_height(winheight)) self.opacity = Anyx::WINOPACITY refresh end # def initialize def exc_color text_color(Anyx::EXCCOLOR) end # def exc_color def sat_color text_color(Anyx::SATCOLOR) end # def sat_color def ave_color text_color(Anyx::AVECOLOR) end # def ave_color def low_color text_color(Anyx::LOWCOLOR) end # def low_color def dan_color text_color(Anyx::DANCOLOR) end # def dan_color def dep_color text_color(Anyx::DEPCOLOR) end # def dep_color def refresh contents.clear contents.font.size = Anyx::WINTEXT lineheight = 0 if $survival_s[1] == true if $survival_s[6] == false || $survival_v[1] < Anyx::LIFEHIDEVAL draw_life(0,0,lineheight) lineheight += 24 end # if $survival_s[6] == false || $survival_v[1] < Anyx::LIFEHIDEVAL end # if $survival_s[1] == true if $survival_s[2] == true if $survival_s[7] == false || $survival_v[2] < Anyx::FOODHIDEVAL draw_food(0,0,lineheight) lineheight += 24 end # if $survival_s[7] == false || $survival_v[2] < Anyx::FOODHIDEVAL end # if $survival_s[2] == true if $survival_s[3] == true if $survival_s[8] == false || $survival_v[3] < Anyx::WATERHIDEVAL draw_water(0,0,lineheight) lineheight += 24 end # if $survival_s[8] == false || $survival_v[3] < Anyx::WATERHIDEVAL end # if $survival_s[3] == true if $survival_s[4] == true if $survival_s[9] == false || $survival_v[4] < Anyx::RESTHIDEVAL draw_rest(0,0,lineheight) lineheight += 24 end # if $survival_s[9] == false || $survival_v[4] < Anyx::RESTHIDEVAL end # if $survival_s[4] == true if $survival_s[5] == true if $survival_s[10] == false || $survival_v[5] > Anyx::TOXINHIDEVAL draw_toxin(0,0,lineheight) lineheight += 24 end # if $survival_s[10] == false || $survival_v[5] > Anyx::TOXINHIDEVAL end # if $survival_s[5] == true end # def refresh def draw_life(actor, x, y, width = Anyx::WINWIDTH - 22) life_25 = Anyx::LIFEMAX / 4 life_26 = life_25 + 0.001 life_50 = life_25 * 2 life_51 = life_50 + 0.001 life_75 = life_25 * 3 life_76 = life_75 + 0.001 life_99 = Anyx::LIFEMAX - 0.001 life_color = dep_color if 1 > $survival_v[1] life_color = dan_color if (1..life_25) === $survival_v[1] life_color = low_color if (life_26..life_50) === $survival_v[1] life_color = ave_color if (life_51..life_75) === $survival_v[1] life_color = sat_color if (life_76..life_99) === $survival_v[1] life_color = exc_color if Anyx::LIFEMAX <= $survival_v[1] life_rate = $survival_v[1] / Anyx::LIFEMAX.to_f draw_gauge(x, y, width, life_rate, text_color(Anyx::LIFECOLORL), text_color(Anyx::LIFECOLORR)) change_color(system_color) draw_text(x, y, 100, line_height, Anyx::LIFEVOCAB) draw_current_and_max_values(x, y, width, $survival_v[1].round.to_i, Anyx::LIFEMAX, life_color, life_color) end # def draw_life(actor, x, y, width = Anyx::WINWIDTH - 22) def draw_food(actor, x, y, width = Anyx::WINWIDTH - 22) food_25 = Anyx::FOODMAX / 4 food_26 = food_25 + 0.001 food_50 = food_25 * 2 food_51 = food_50 + 0.001 food_75 = food_25 * 3 food_76 = food_75 + 0.001 food_99 = Anyx::FOODMAX - 0.001 food_color = dep_color if 1 > $survival_v[2] food_color = dan_color if (1..food_25) === $survival_v[2] food_color = low_color if (food_26..food_50) === $survival_v[2] food_color = ave_color if (food_51..food_75) === $survival_v[2] food_color = sat_color if (food_76..food_99) === $survival_v[2] food_color = exc_color if Anyx::FOODMAX <= $survival_v[2] food_rate = $survival_v[2] / Anyx::FOODMAX.to_f draw_gauge(x, y, width, food_rate, text_color(Anyx::FOODCOLORL), text_color(Anyx::FOODCOLORR)) change_color(system_color) draw_text(x, y, 100, line_height, Anyx::FOODVOCAB) draw_current_and_max_values(x, y, width, $survival_v[2].round.to_i, Anyx::FOODMAX, food_color, food_color) end # def draw_food(actor, x, y, width = Anyx::WINWIDTH - 22) def draw_water(actor, x, y, width = Anyx::WINWIDTH - 22) water_25 = Anyx::WATERMAX / 4 water_26 = water_25 + 0.001 water_50 = water_25 * 2 water_51 = water_50 + 0.001 water_75 = water_25 * 3 water_76 = water_75 + 0.001 water_99 = Anyx::WATERMAX - 0.001 water_color = dep_color if 1 > $survival_v[3] water_color = dan_color if (1..water_25) === $survival_v[3] water_color = low_color if (water_26..water_50) === $survival_v[3] water_color = ave_color if (water_51..water_75) === $survival_v[3] water_color = sat_color if (water_76..water_99) === $survival_v[3] water_color = exc_color if Anyx::WATERMAX <= $survival_v[3] water_rate = $survival_v[3] / Anyx::WATERMAX.to_f draw_gauge(x, y, width, water_rate, text_color(Anyx::WATERCOLORL), text_color(Anyx::WATERCOLORR)) change_color(system_color) draw_text(x, y, 100, line_height, Anyx::WATERVOCAB) draw_current_and_max_values(x, y, width, $survival_v[3].round.to_i, Anyx::WATERMAX, water_color, water_color) end # def draw_water(actor, x, y, width = Anyx::WINWIDTH - 22) def draw_rest(actor, x, y, width = Anyx::WINWIDTH - 22) rest_25 = Anyx::WATERMAX / 4 rest_26 = rest_25 + 0.001 rest_50 = rest_25 * 2 rest_51 = rest_50 + 0.001 rest_75 = rest_25 * 3 rest_76 = rest_75 + 0.001 rest_99 = Anyx::RESTMAX - 0.001 rest_color = dep_color if 1 > $survival_v[4] rest_color = dan_color if (1..rest_25) === $survival_v[4] rest_color = low_color if (rest_26..rest_50) === $survival_v[4] rest_color = ave_color if (rest_51..rest_75) === $survival_v[4] rest_color = sat_color if (rest_76..rest_99) === $survival_v[4] rest_color = exc_color if Anyx::RESTMAX <= $survival_v[4] rest_rate = $survival_v[4] / Anyx::RESTMAX.to_f draw_gauge(x, y, width, rest_rate, text_color(Anyx::RESTCOLORL), text_color(Anyx::RESTCOLORR)) change_color(system_color) draw_text(x, y, 100, line_height, Anyx::RESTVOCAB) draw_current_and_max_values(x, y, width, $survival_v[4].round.to_i, Anyx::RESTMAX, rest_color, rest_color) end # def draw_rest(actor, x, y, width = Anyx::WINWIDTH - 22) def draw_toxin(actor, x, y, width = Anyx::WINWIDTH - 22) toxin_25 = Anyx::TOXINMAX / 4 toxin_26 = toxin_25 + 0.001 toxin_50 = toxin_25 * 2 toxin_51 = toxin_50 + 0.001 toxin_75 = toxin_25 * 3 toxin_76 = toxin_75 + 0.001 toxin_99 = Anyx::TOXINMAX - 0.001 toxin_color = exc_color if 1 > $survival_v[5] toxin_color = sat_color if (1..toxin_25) === $survival_v[5] toxin_color = ave_color if (toxin_26..toxin_50) === $survival_v[5] toxin_color = low_color if (toxin_51..toxin_75) === $survival_v[5] toxin_color = dan_color if (toxin_76..toxin_99) === $survival_v[5] toxin_color = dep_color if Anyx::TOXINMAX <= $survival_v[5] toxin_rate = $survival_v[5] / Anyx::TOXINMAX.to_f draw_gauge(x, y, width, toxin_rate, text_color(Anyx::TOXINCOLORL), text_color(Anyx::TOXINCOLORR)) change_color(system_color) draw_text(x, y, 100, line_height, Anyx::TOXINVOCAB) draw_current_and_max_values(x, y, width, $survival_v[5].round.to_i, Anyx::TOXINMAX, toxin_color, toxin_color) end # def draw_toxin(actor, x, y, width = Anyx::WINWIDTH - 22) end # class module DataManager def self.make_save_contents contents = {} contents[:system] = $game_system contents[:timer] = $game_timer contents[:message] = $game_message contents[:switches] = $game_switches contents[:variables] = $game_variables contents[:self_switches] = $game_self_switches contents[:actors] = $game_actors contents[:party] = $game_party contents[:troop] = $game_troop contents[:map] = $game_map contents[:player] = $game_player contents[:anyx_ss] = $survival_s contents[:anyx_sv] = $survival_v contents end # self.make_save_contents def self.extract_save_contents(contents) $game_system = contents[:system] $game_timer = contents[:timer] $game_message = contents[:message] $game_switches = contents[:switches] $game_variables = contents[:variables] $game_self_switches = contents[:self_switches] $game_actors = contents[:actors] $game_party = contents[:party] $game_troop = contents[:troop] $game_map = contents[:map] $game_player = contents[:player] $survival_s = contents[:anyx_ss] $survival_v = contents[:anyx_sv] end # self.extract_save_contents(contents) end # module DataManager  
    • By Daisukegamer99
      ciao, avete presente quando in alcuni videogiochi durante un dialogo si sentono dei suoni ad ogni lettera apparsa? ecco avendo RPG maker VX Ace non so come fare, se qualcuno mi vuole aiutare ne sarei molto grato! ^^
×