Jump to content
Rpg²S Forum

lzol

Utenti
  • Posts

    74
  • Joined

  • Last visited

Everything posted by lzol

  1. Se hai giocato poco mi viene da dire che non hai prestato molta attenzione ai temi trattati e a come venivano trattati (e in questo si distingue, perché non ci sono giochi che trattano di temi che non siano cristalli del drago allo stesso modo in cui lo fa TWEWY). No, il succo non è quello, perché un conto è che un'armatura aumenti la difesa e basta, un'altra è che aumenti gli HP (perché non ci sono statistiche in TWEWY, la potenza dell'attacco è relativa solo alle armi che usi) in base ad un sistema di trends: va di moda? È forte, altrimenti perde efficacia e gli hp ne risentono. Su AC faccio un altro discorso, non di meccaniche e gameplay (che secondo me sono anche ben realizzati), ma di hype per un gioco che da svariati capitoli ripropone sempre la stessa formula; ma devo forzatamente escludere i primi due, il primo per i motivi che hai detto e il secondo perché molti aspetti negativi, tra cui la suddetta ripetitività, sono stati bene o male corretti e ne è risultato un ottimo capitolo. Poi è diventato come COD... Vero, ma forse fino a non molto tempo fa non c'era bisogno di allontanarsi "troppo" dal mainstream per trovare giochi diversi.
  2. È da un po' che ho questo tarlo in testa e, dopo un po', ho deciso di esternare alcune mie considerazioni sui giochi odierni. Un po' di tempo fa ho giocato (e rigiocato) The World Ends With You su nintendo ds e android, 'sto gioco ha completamente ribaltato tutte le mie idee riguardo il gaming, per lo più quello "impegnato"; spiego meglio: già a partire dalle meccaniche si vede che è diverso: l'equipaggiamento si riduce unicamente a vestiti di marche diverse, ciascuna marca ha un'efficacia maggiore/minore a seconda di quanto faccia "tendenza" (lottare equipaggiando vestiti di una determinata marca aumenta il "grado di tendenza");i dialoghi tra personaggi sono spettacolari; si analizza la società sotto diversi punti di vista ("Everyone has their own little internal world - a secret garden only they can enter. Each world follows its own internal logic - individuality. And the logic of one world means nothing in another. Understanding other people isn't hard...It's Impossible.");il titolo, letteralmente, sta a significare "il mondo finisce con te, dove tu decidi di farlo finire e solo permettendo agli altri di entrare nel tuo puoi trovare nuovi modi per essere te stesso". Andando più nel mainstream, Final Fantasy X, almeno per come l'ho interpretato io, mi sembra una grande presa per il culo alla chiesa e a tutte le religioni in generale: Yevon = Dio; Maestro Mika = Papa; tutti pregano Yevon perché è grande, onnipotente e misericordioso; i protagonisti si rendono conto che tutto il culto yevonita è una grande illusione, perché l'unico fine è una pace apparente (il Bonacciale), come riferito dallo stesso Mika (traducibile come: "non scenderà alcun dio a salvarvi il fondoschiena, se volete cambiare la realtà finitela di pregare e fatevi un giro nel mondo reale"); la sconfitta di Yevon sta simbolicamente a significare il crollo dell'illusione religiosa, accettare la realtà per com'è veramente, compresa la morte. Tutto 'sto panegirico per porre una domanda: "che fine hanno fatto i giochi così?" Quelli che, al pari di un buon libro, alla fine dell'esperienza ti lasciano qualcosa? Oggi i giochi sono tutti uguali, ma proprio tutti. Bloodborne, The Witcher, chi più ne ha più ne metta, gli rpg ormai hanno tutti lo stesso schema: medioevo, cavalieri, spade, magie e i cristalli del drago (Persona e Tales of Banalia, dio vi benedica). Non dico siano male, ma almeno tentare di uscire dal filone medievale costa così tanto? Altri non-rpg? Assassin's Creed, osannato da tutti, ma è sistematicamente lo stesso gioco con un'ambientazione diversa (che fine ha fatto Desmond?); non sto neanche a parlare della caterva di sparatutto copia-incolla che sta uscendo in questi anni. Lo so, sembra uno sfogo "ad mentula canis", ma volevo ascoltare qualche parere esterno su un mondo che, secondo me, sta declinando inesorabilmente ^^
  3. http://i68.tinypic.com/24eb30o.png presenta http://i63.tinypic.com/ohvgup.png 1. Descrizione Con una rinomina dell'ultimo minuto, ecco la prima demo di quello che doveva essere Bosko Chronicles e che da oggi prende il nome di Heresìa, dura all'incirca un'ora e spiega a grandi linee la trama e un accenno a quello che sarà il gameplay finale. Progetto iniziato ai tempi di XP e mai portato a termine per tutta una serie di vicissitudini. Per tutte le info del gioco rimando al link nella sezione progetti. La demo non è completa, o meglio, gli eventi della storyline lo sono, manca parte del "contorno", quindi quest secondarie e le cutscenes delle lezioni, ma essendo una parte che non prende molto tempo di gioco (ed essendo che sono meccaniche tediose da implementare) ho preferito mantenerne una versione "scheletrica" e dedicarmi di più agli eventi principali. Che dire, provate e fatemi sapere, in particolare alcuni punti: Lag: sul mio pc portatile il gioco va letteralmente in freeze per qualche secondo, solitamente dopo le battaglie, anche se non disdegna durante i dialoghi; devo sapere se è un problema del mio pc o del software (come ho visto in altri topic simili). Incongruenze di trama: alcuni dialoghi sono sommari, non dovrebbero esserci buchi ma non si sa mai, nel dubbio...;) Bug vari: passabilità, mapping, finestre e chi più ne ha più ne metta :D MEDIAFIRE http://www.freankexpo.net/signature/1084.png 2. Screenshot 3. Crediti Yanfly; Galv; Kaimen; Matti Paalanen e Clearside (Jamendo); Kas; Moghunter;
  4. lzol

    War of Chaos

    Finalmente un altro progetto su MV! Allooora: la trama mi sembra abbastanza classica, anche se hai spiegato un po' tutto a grandi linee e quindi non sono riuscito a capire granché (tipo mi piacerebbe sapere in che modo e che tipo di missioni vengono fatte per fermare la guerra). Stesso discorso sui personaggi; le frasi sono in sospeso perché hai in programma di finire di scriverle o perché spiegherai tutto nel gioco? Le features sono interessanti, visto che ci sono più Mount vuol dire che avranno caratteristiche diverse? Infine se la grafica dovesse essere la stessa del progetto XP sembra promettere molto bene :) Che dire, in bocca al lupo!
  5. Buonasera, come da titolo, sto modificando la windowskin di base di rpg maker mv, ho un paio di piccoli intoppi, finora ho fatto questo: http://i66.tinypic.com/2jb1rit.png Il problema ora è riempire la skin, poiché il bordo frastagliato che vedete in alto a destra è riuscito, ma il risultato è questo http://i64.tinypic.com/b4jmom.png Come posso riempire la parte trasparente della windowskin? Grazie. EDIT: Ho provato ad usare il Yanfly Engine Core e settare il campo 'Window Opacity' a 255 ma niente.
  6. Ciao a tutti, qualcuno sa come poter dare un tocco di personalizzazione al menu e alle window in generale? Sono prossimo a rilasciare una breve demo e mentre la realizzazione generale mi soddisfa abbastanza, la windowskin è l'unica cosa che non ho toccato e mi sembra piuttosto scialba e poco coerente. Grazie.
  7. lzol

    Bosko Chronicles

    Sì, è il tipo di personaggio molto selettivo nelle amicizie, un po' restìo allo "stare in gruppo", un po' fuori moda, un po' fuori tutto, anche a causa del carattere "difensivo" che si esprime attraverso il sarcasmo. In questo fine settimana farò gli ultimi test :D Ci tenevo a ringraziare anche gli altri per l'interesse (soprattutto Guardian che ogni anno viene a commentare lo stesso progetto su tool diversi che puntualmente non finisce mai :D); aggiornamenti a breve ;) EDIT: aggiunta la schermata del titolo tra gli screenshot e alcuni dettagli riguardo il gameplay.
  8. http://i68.tinypic.com/24eb30o.png presenta http://i63.tinypic.com/ohvgup.png Introduzione E dopo qualche anno ritorno qui, con l'ennesimo tentativo di portare avanti questo progetto, dopo le fallimentari esperienze con XP e VX. MV mi ha concesso una personalizzazione più intuitiva e poi c'è javascript che preferisco molto al ruby; ho molto apprezzato la facilità di implementazione dei plugin. La storia è stata concepita diversi anni fa, ma essendo ancora alle prime armi potete intuire che è stato un continuo cancella-e-riscrivi; il capriccio del basarsi su persone reali, conoscenti e amici ha fatto via via spazio ad una reinterpretazione più distaccata (anche se non nego di aver comunque preso ispirazione da alcuni personaggi "reali"); è la prima volta in cui credo di riuscire a pubblicare una demo giocabile in tempi brevi; ma ora veniamo al sodo (Inoltre vorrei chiedere gentilmente all'admin di cambiare il titolo del topic, se possibile, visto che ho cambiato il titolo del gioco). Trama Cinque anni prima degli eventi narrati, il nonno del nostro protagonista, Victor Wyte, scompare in circostanze misteriose, a detta di qualcuno a causa di alcuni terribili segreti riguardo le Forze Primordiali, ossia gli elementi che hanno dato inizio all'universo conosciuto: il Flusso Cremisi (Crimson Stream) controlla ilcontinuum spazio-temporale e le abilità intellettive di un individuo, il Flussoscuro (Black Stream) controlla tutti gli elementi esistenti e le abilità fisiche. Victor avrebbescoperto la struttura primordiale appena trentenne ma aveva anche sentenziato che nessun essere umano comune avrebbe mai potuto controllare un poterecosì grande. Nella (solitamente) tranquilla cittadina di Bosko, due sette segrete, di cui una fortemente in combutta con il governo, studiano le proprietà di queste Forze grazie ad alcuni appunti rinvenuti dopo la scomparsa di Victor; la chiave dei misteri relativi potrebbe celarsi nei due nipoti di quest'ultimo, che per qualche motivo (che verrà poi spiegato nel gioco) possiedono una struttura genetica compatibile. Personaggi (Ad ora...) Main: Protagonista del gioco (ma và? Main...), il nome potrebbe essere fisso o scelto dal giocatore, devo ancora decidere. Ragazzo di 16 anni, timido ed introverso e dal carattere tagliente e sarcastico; è iscritto al campus di Bosko assieme ai suoi amici e suo fratello minore ed è l'unico in tutto il campus ad indossare la misteriosa uniforme nera. Main può controllare il Crimson Stream, cosa che gli permette di massimizzare le proprie facoltà intellettive e, più in là, di manipolare lo spazio-tempo. Janky: Cugino di Main, è la sua perfetta antitesi: bello, ricco ed è conosciuto in tutto il campus; ha un carattere estremamente arrogante e altezzoso ma, a dispettodelle apparenze, è anche una persona molto astuta. Può controllare il Black Stream, che gli concede una forza sovrumana e la capacità di manipolare gli elementi. Blaze e Josef: Amici di Main, coppia inseparabile, accomunati anche dall'antipatia verso Janky. Blaze ha sempre la testa fra le nuvole e raramente presta attenzionea quello che gli si dice; Josef ha invece un carattere polemico e coglie ogni occasione per esprimere ciò che pensa e contraddire il punto di vista degli altri. Entrambihanno due dipendenze molto particolari: Blaze è un fumatore accanito, ma fa della sua dipendenza la sua arma migliore; Josef è un alcolista e, col passare degli anni, non accusa più alcun effetto dovuto agli alcolici. Mary: Amica di Main, Josef e Blaze; gentile e disponibile, ha un atteggiamento molto protettivo nei confronti di Main, in quanto crede che Janky lo condizioni negativamente e fa di tutto per far sì che il nostro protagonista decida per sé. Dani: Fratello minore di Main, provocatorio e arrogante ma molto spigliato e intelligente; anche lui, tanto per cambiare, ritiene Janky un poco di buono. Alex: Diminutivo di Alexandra; ragazza introversa e misteriosa, ancora non si sa quale sia il suo ruolo in questa faccenda. http://i67.tinypic.com/5wzcyr.pngDa sinistra a destra e dall'alto verso il basso:Blaze, Josef, Dani, Main, Padre John (parroco), Janky, Mary Gameplay Sarà possibile spostarsi in ogni zona di Bosko attraverso una "World Map", Bosko comprenderà un'area commerciale, dove sarà possibile acquistare oggetti, armi e vestiario; il centro abitato dove di notte sarà possibile attivare missioni di "furto", che permettono di entrare in possesso di oggetti molto utili; sobborgo, ospedale e fabbrica dove, oltreagli eventi di storyline sarà possibile accedere ad altre missioni secondarie; ovviamente ci sarà anche il campus. Le battaglie seguiranno il classico side-view e tra i nemici vi saranno i classici bulletti che cercheranno di svuotarvi il portafoglio, i secchioni che vi annoieranno con leloro prediche, i vari scagnozzi delle organizzazioni che vi daranno la caccia e anche "fauna locale" (topi, pantegane, ci siamo capiti...); più qualche altro soggettostereotipato. Qui c'è da ridere. Premessa: amo la serie Persona e devo ammettere che ho tratto molta ispirazione dal terzo capitolo; tra le caratteristiche legate al suddetto titolo abbiamo: * La possibilità di seguire le lezioni tenute nel campus che possono aumentare uno o più parametri; * La possibilità di prendere parte a progetti extrascolastici; * Il Social Rank (ribattezzato brutalmente Friend Rate) che stabilisce il "grado di amicizia" con un personaggio; permette di potenziare gli attacchi e di sbloccare abilità uniche o temporanee. Per aumentare il Friend Rate di un personaggio bisogna completare missioni secondarie/trascorrere del tempo con lui. La vita al campus, per ora, in sostanza funziona così: la giornata è divisa in tre momentiMattina: si possono seguire le lezioni oppure completare alcune missioni secondarie;Pomeriggio: riservato al Friend Rate, è possibile trascorrere del tempo (brevissime cutscene in fermo immagine, almeno per ora) con uno dei personaggi disponibili;Sera: è possibile reclutare tutti i personaggi a disposizione e livellarli (se avete giocato a Persona 3, consideratela come una specie di Dark Hour). Ogni volta che si segue una lezione, si svolge una missione secondaria, si aumenta il friend rate o ci si allena, si passa al momento successivo della giornata. Di sera possono essere disponibili ulteriori quest secondarie oppure basta mandare il pg a letto per passare al giorno successivo. Non c'è bisogno che vi dica che potete anche ignorare tutto e tutti e andare a letto per far trascorrere velocemente i momenti di giornata (è pressoché inutile, ma potreste voler accedere alle missioni "serali" e saltare lezioni, friend rate, ecc.). Tutto ciò non intaccherà le missioni principali che, proprio come le quest secondarie, saranno disponibili in determinati momenti della giornata e sarà possibile attivarle cliccando,parlando o recandosi in un certo luogo. Altre simpatiche aggiunte riguardano le abilità: * Josef può sfruttare la sua passione per l'alcol: lo status Ebbrezza altera determinati parametri e permette di utilizzare delle abilità esclusive. Ovviamente bisogna essere in possesso della "materia prima"; * Blaze fuma erba e il discorso per lo status Assuefazione è simile a quello di Ebbrezza; alterazione dei parametri, abilità esclusive e necessità degli oggetti giusti. * Altre abilità sono state concepite tramite le custom formulas: alcune sono utilizzabili solo se si verificano certe condizioni, altre infliggono danno utilizzando parametri differenti e altre possono ignorare la difesa dei nemici; tutto questo oltre alle classiche "Furto" ecc. Alcuni oggetti possono essere utilizzati solo da determinati membri: ogni personaggio utilizza un tipo differente di armi, Josef è invece specializzato nell'uso degli esplosivi; Infine anche gli oggetti curativi hanno diversi effetti a seconda del personaggio su cui sono utilizzati. Crediti Yanfly, che un petosecondo dopo l'uscita dell'mv ha rilasciato il Battle Core; Kaimen per alcune soundtracks, anche se non so se saranno definitive; Kas per l'Ultimate Overlay; Galv per il MessageSoundEffects; chiunque abbia scritto il plugin BattleWeatherEffect; questo topic. Screenshot ("Lo schermo ha sparato"(cit.)) Link alla demo giocabile MEDIAFIRE http://www.freankexpo.net/signature/1084.png
  9. Salve a tutti, come da titolo, mi chiedevo se fosse possibile fare una cosa del genere: all'inizio ci sono determinati mostri in cui ci si imbatte nella mappa; a seguito di un evento, se ne aggiungono altri (ES. all'inizio incontro solo ratti e pipistrelli, una volta sconfitti alcuni membri di una gang, i vari sicari mi cercano). È fattibile? Grazie in anticipo.
  10. Salve a tutti, giocando a The World Ends With You ho notato una meccanica interessante: il consumo di cibi permette all'utente di beneficiare di bonus una volta digeriti (si "digerisce" tramite battaglie), volevo implementare una versione più grezza di questa meccanica, ossia ogni qualvolta si consuma del cibo, si entra in uno status "digestione" che dimezza le statistiche e che termina entro un tot di passi; una volta terminato, a seconda del cibo consumato, si possono aumentare le statistiche oppure ripristinare gli hp. Ciò pone una problematica: diventa quasi "pericoloso" curarsi in battaglia, al punto che pensavo di eliminare la cura tramite oggetti in battaglia e lasciarla unicamente a chi possiede le varie abilità 'Cura' ecc. il mio dubbio è se questa caratteristica del gameplay può aggiungere profondità o rende solamente frustrante la cosa. Attendo suggerimenti.
  11. Niente, non va. EDIT: Ho provato la mia formula su VXAce e funziona normalmente. Sarà cambiato qualcosa nell'accesso al parametro 'id' in MV?
  12. Salve a tutti, sto provando ad implementare la meccanica dei "cibi preferiti", ho creato un oggetto con 'recupero HP' basato sulla formula: b.id == 4? 500 : 100Ma non va, risulta sempre falsa. Quale può essere il problema?
  13. Buco Nero è applicabile ad un nemico alla volta (tipo Kamui di Tobi, non so se ho reso l'idea...e in effetti mi ero espresso male prima), Buco Bianco colpisce tutti i nemici, tra cui, se ce n'è uno che è stato risucchiato (ovvero con lo status 'morte2') può (con scarsa probabilità) riportarlo in vita, tipo coda di fenice. In tutto ciò non posso usare lo status 'morte' di default perché significherebbe che un nemico sconfitto normalmente, senza l'ausilio di buco nero, potrebbe erroneamente essere riportato in vita.
  14. Questo però porrebbe un altro problema: una volta subito il danno da slittamento verrebbe applicato lo stato knockout e non più morte2. Cerco di spiegare più dettagliatamente il mio problema: voglio creare una skill "Buco Nero" che risucchia i nemici, che tecnicamente "muoiono" (stato 'morte2'); poi voglio creare una seconda skill "Buco Bianco" che fa l'esatto opposto: mentre il buco nero risucchia energia, buco bianco "sputa fuori" energia, tra cui (con una piccola probabilità) anche il mostro risucchiato. Perciò ho bisogno di un secondo stato morte, di modo che, se lo applico e tutti i nemici crepano, si vince, ma se si usa buco bianco c'è una possibilità di riportarlo fuori.
  15. Grazie per la soluzione, ma ho provato e il nemico rimane con 1 HP senza morire.
  16. Salve a tutti, come da titolo, volevo creare uno stato 'knockout' alternativo, questo perché ho un'abilità OHKO che però non ha effetto se l'avversario è affetto da un particolare power-up. Il fatto è che rpgmv assegna lo stato id:1 di default ed è anche l'unico utilizzabile a quanto sembra. L'alternativa è stata creare una skill che controlla se l'avversario è in possesso del suddetto power-up e, in caso negativo, one-shotta. Formula: b.state?(12) ? 0 : b.addState(1) Ovviamente non va. La 'state?' la usai su rpgvxace, qualcuno sa se è ancora disponibile? O è la sintassi che non va?
  17. Salve a tutti, mi servirebbero dei battlers moderni in front-view. In parole povere esseri umani ma più simili a persone comuni che cavalieri, spadaccini o cose così, non so se ho reso l'idea, grazie.
  18. Salve a tutti, mi servirebbe un battler il cui formato sia simile all'immagine che ora allego, qualcuno sa dove osso trovarne di simili? http://i59.tinypic.com/2z678fn.jpg
  19. D: E' possibile, tramite evento, fare in modo che la mappa "lampeggi"? Mi spiego, vorrei che in una mappa ci fosse una specie di "allarme" che, una volta attivato, fa lampeggiare lo schermo di rosso all'infinito (almeno fino a quando l'allarme non si disattiva). Il mio problema sta nel fatto che non riesco a mantenere l'evento all'infinito. Una volta che lo schermo si tinge di rosso rimane rosso. Grazie.
  20. Grazie mille. Mi dici il motivo di questa cosa?
  21. Allego uno screen dei settaggi del mio tileset, qualcuno mi spiega il motivo per cui il mio pg non si muove? Entra nella mappa ma si gira solamente, perché? Grazie in anticipo. http://i62.tinypic.com/2s6on54.png
  22. Idea decisamente macabra, attendo impaziente ulteriori sviluppi
  23. Salve a tutti, qualcuno di voi sa se ci sono degli RPG ambientati nei tempi moderni? Penso di averne avuto abbastanza di cavalieri, paladini, maghi neri, bahamut e ambientazioni medievali e anche di ambientazioni ultrafuturistiche. Non so se avete giocato ai vari Persona o The World Ends With You (per me, quest'ultimo il miglior gioco degli ultimi anni), ma, almeno sull'ambientazione, mi riferisco a questo tipo di rpg. Sentitevi liberi di segnalarmi anche giochi realizzati con rpgmaker nel forum o oltre, se ce ne sono, grazie.
  24. Premessa: ho cercato in più sezioni il problema che cercavo ma non ho trovato niente. Come forse sapete, rpg maker vx non può essere avviato con risoluzione minore di 1024x768. Ho un netbook acer aspire one con windows 7 e volevo cambiare la risoluzione attraverso il trucchetto con regedit -> display1downscale (qualcosa del genere...) ma non ho trovato la voce nel registro e ho problemi vari ad installare i driver. Volevo chiedere se c'è un modo per cambiare la risoluzione del pc senza il regedit oppure se c'è un modo, un trucco qualsiasi (tipo tramite file .bat) per poter avviare rpg maker vx anche con la risoluzione nativa del netbook. Grazie.
  25. Salve a tutti, come da titolo, sto usando lo script di Moghunter per creare delle skill con combinazioni di tasti, il problema è che, una volta implementata l'abilità, nel battle test non compare la sequenza di tasti. Mi spiego meglio: Per creare una skill con la chain basta inserire nelle note la stringa "<Chain Action = X>" Dove X è l'ID della combinazione di tasti specificata nello stesso script. Il problema è che se uso l'abilità nel battle test tale sequenza non appare, qualcuno mi sa dire perché? Allego lo script nel caso. Grazie in anticipo. #============================================================================== # +++ MOG - Active Chain Commands (v2.7) +++ #============================================================================== # By Moghunter # http://www.atelier-rgss.com/ #============================================================================== # Permite combinar (Linkar) ataques consecutivos através do uso de # sequência de botões. #============================================================================== # Arquivos necessários. Graphics/System/ # # Chain_Command.png # Chain_Battle_Layout.png # Chain_Battle_Meter.png # #============================================================================== # UTILIZAÇÃO #============================================================================== # No banco de dados use o sequinte comentário para linkar as ações. # # <Chain Action = X> # # X - ID da habilidade. #============================================================================== #============================================================================== # ● Histórico (Version History) #============================================================================== # v2.7 - Melhoria na compatibilidade de scripts. #============================================================================== $imported = {} if $imported.nil? $imported[:mog_active_chain] = true module MOG_CHAIN_ACTIONS #============================================================================= # CHAIN_ACTIONS = { SKILL_ID => [COMMAND] } # # SKILL_ID = ID da habilidade no banco de dados. # COMMANDS = Defina aqui a sequência de botões. # (Para fazer a sequência use os comandos abaixo) # # "Down" ,"Up" ,"Left" ,"Right" ,"Shift" ,"D" ,"S" ,"A" ,"Z" ,"X" ,"Q" ,"W" # # Exemplo de utilização # # CHAIN_SWITCH_COMMAND = { # 25=>["Down","D","S","Right"], # 59=>["Down","Up","Left","Right","Shift","D","S","A","Z","X","Q","W"], # 80=>["Shift","D"] # } #============================================================================== CHAIN_ACTIONS = { 29=>["Left","Up","Right","Down"], 52=>["Up","Down","Left","Right","Z"], 70=>["X","Right","Left","Z","Z"], 138=>["X"], 139=>["A","S"], 140=>["Z","D","X"], 141=>["Up","Down"], 142=>["Left","Right","Z"], 999=>["Left","Right","Left","Right","Left","Right","Q","Z","Up","A","S", "Down","D","Z","Right","Up","Up","Z","W","Left","Down","D","A","W"] } #Definição padrão do tempo limite para pressionar o botão. CHAIN_DEFAULT_INPUT_DURATION = 60 #60 = 1s #Definição do tempo limite para pressionar o botão. CHAIN_INPUT_DURATION = { 138=>60, 139=>40, 140=>30 #141=>160, #240=>2000 } #Som ao acertar. CHAIN_RIGHT_SE = "Chime1" #Som ao errar. CHAIN_WRONG_SE = "Buzzer1" #Definição do som ao ativar o sistema de chain. CHAIN_START_SE = "Open1" #Definição da posição do botão. CHAIN_SPRITE_POSITION = [0,-15] #Posição do layout do medidor. CHAIN_LAYOUT_POSITION = [1,-7] #Posição do medidor de tempo. CHAIN_METER_POSITION = [0,-6] #Posição do Ícone CHAIN_ICON_POSITION = [0,-32] #Definição da palavra Chain. CHAIN_COMMAND_WORD = "Chain Action!" #Definição das palavras de erro. CHAIN_MISSED_WORDS = ["Missed!", "Timeover"] #Definição da posição da palavra. CHAIN_COMMAND_WORD_POSITION = [0,0] #Definição do tamanho da fonte CHAIN_WORD_FONT_SIZE = 20 #Definição da cor da fonte CHAIN_WORD_FONT_COLOR = Color.new(255,255,255) #Prioridade do sprite. CHAIN_SPRITE_Z = 150 end #============================================================================== # ■ Game Temp #============================================================================== class Game_Temp attr_accessor :chain_actions attr_accessor :active_chain attr_accessor :chain_ot attr_accessor :chain_action_phase #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- alias mog_chain_actions_initialize initialize def initialize @chain_actions = [0,0,0,false] ; @active_chain = false @chain_action_phase = false mog_chain_actions_initialize end end #============================================================================== # ■ Scene_Battle #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● Use Item #-------------------------------------------------------------------------- alias mog_chain_actions_use_item use_item def use_item prepare_chain_command if can_use_chain_commands? mog_chain_actions_use_item execute_chain_actions if can_use_chain_commands? end #-------------------------------------------------------------------------- # ● Can Use Chain Commands #-------------------------------------------------------------------------- def can_use_chain_commands? return false if @subject == nil return false if !@subject.is_a?(Game_Actor) return false if @subject.restriction != 0 return true end #-------------------------------------------------------------------------- # ● Prepare Chain Commands #-------------------------------------------------------------------------- def prepare_chain_command @chain_skill_original = @subject.current_action.item rescue nil if $game_temp.chain_ot == nil and @subject.is_a?(Game_Actor) targets = @subject.current_action.make_targets.compact $game_temp.chain_ot = targets[0] end check_chain_targets end #-------------------------------------------------------------------------- # ● Check Chain Command Position #-------------------------------------------------------------------------- def check_chain_command_position scx = $game_temp.chain_ot.screen_x rescue nil return if scx == nil if $game_temp.chain_ot != nil and !$game_temp.chain_ot.dead? $game_temp.chain_actions = [$game_temp.chain_ot.screen_x,$game_temp.chain_ot.screen_y,true] end end #-------------------------------------------------------------------------- # ● Check Chain Targets #-------------------------------------------------------------------------- def check_chain_targets return if @subject == nil or $game_temp.chain_ot == nil if [1,7,9,10,11].include?(@subject.current_action.item.scope) @pre_target = $game_temp.chain_ot ; @pre_target_hp = $game_temp.chain_ot.hp else @pre_target = nil ; @pre_target_hp = nil end end #-------------------------------------------------------------------------- # ● Execute Chain Actions #-------------------------------------------------------------------------- def execute_chain_actions $game_temp.active_chain = false return if !can_execute_chain_actions_base? check_chain_command_position skill = @subject.current_action.item rescue nil skill = @chain_skill_original rescue nil action_id = skill.note =~ /<Chain Action = (\d+)>/i ? $1.to_i : nil rescue nil return if action_id == nil or action_id < 1 chain_command_sequence = MOG_CHAIN_ACTIONS::CHAIN_ACTIONS[action_id] $game_temp.chain_actions[2] = action_id if can_execute_chain_sequence?(chain_command_sequence,action_id) chain_act_before_action if @chain_command == nil chain_sq = Chain_Actions.new(chain_command_sequence,$game_temp.chain_actions) loop do $game_temp.chain_action_phase = true (chain_sq.update ; Input.update) unless @spriteset.animation? $game_temp.active_chain = true ; chain_sq.update_skill_name @spriteset.update ; Graphics.update break if chain_sq.phase == 9 end action_id = nil if !chain_sq.success or $game_temp.chain_ot.dead? chain_sq.dispose ; set_chain_skill(action_id) if action_id != nil end $game_temp.active_chain = false ; $game_temp.chain_ot = nil $game_temp.chain_action_phase = false end #-------------------------------------------------------------------------- # ● Chain Act Before Action #-------------------------------------------------------------------------- def chain_act_before_action @chain_command = true record_window_data if $imported[:mog_atb_system] if $imported[:mog_menu_cursor] @chain_curor_x = $game_temp.menu_cursor[2] $game_temp.menu_cursor[2] = -999 force_cursor_visible(false) end end #-------------------------------------------------------------------------- # ● Turn End #-------------------------------------------------------------------------- alias mog_chain_command_process_action_end process_action_end def process_action_end mog_chain_command_process_action_end chain_act_after_action end #-------------------------------------------------------------------------- # ● Chain Act After ACtion #-------------------------------------------------------------------------- def chain_act_after_action @chain_skill_original = nil $game_temp.chain_ot = nil return if @chain_command == nil restore_window_data if $imported[:mog_atb_system] $game_temp.menu_cursor[2] = @chain_curor_x if $imported[:mog_menu_cursor] @chain_command = nil end #-------------------------------------------------------------------------- # ● Set Chain Skill #-------------------------------------------------------------------------- def set_chain_skill(action_id) return if action_id == nil @subject.input.set_skill(action_id) $game_temp.chain_actions = [0,0,0,false] ; execute_action end #-------------------------------------------------------------------------- # ● Can Execute Chain Sequence? #-------------------------------------------------------------------------- def can_execute_chain_sequence?(chain_command_sequence = nil,action_id = nil) return false if chain_command_sequence == nil skill = $data_skills[action_id] rescue nil return false if skill == nil return false if $game_temp.chain_ot == nil or $game_temp.chain_ot.dead? if [9,10].include?(skill.scope) $game_party.battle_members.each do |i| return true if i.dead? end return false end return true end #-------------------------------------------------------------------------- # ● Can Execute Chain Actions Base #-------------------------------------------------------------------------- def can_execute_chain_actions_base? return false if @subject == nil or @subject.dead? return false if $game_temp.chain_ot == nil or $game_temp.chain_ot.dead? return false if @subject.is_a?(Game_Enemy) return false if @subject.current_action == nil @subject.states.each do |i| return false if i.restriction > 0 end return false if $game_party.members.empty? return false if $game_party.all_dead? return false if $game_troop.all_dead? if @pre_target != nil and $game_temp.chain_ot.hp == @pre_target_hp return false if $game_temp.chain_ot.result.missed return false if $game_temp.chain_ot.result.evaded end return true end end #============================================================================== # ■ Game Temp #============================================================================== class Game_Temp attr_accessor :cache_active_chain #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- alias mog_active_chain_initialize initialize def initialize mog_active_chain_initialize cache_act_chain end #-------------------------------------------------------------------------- # ● Cache Act Chain #-------------------------------------------------------------------------- def cache_act_chain @cache_active_chain = [] @cache_active_chain.push(Cache.system("IconSet")) @cache_active_chain.push(Cache.system("Chain_Battle_Layout")) @cache_active_chain.push(Cache.system("Chain_Battle_Meter")) @cache_active_chain.push(Cache.system("Chain_Battle_Command")) end end #============================================================================== # ■ Spriteset Battle #============================================================================== class Spriteset_Battle #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- alias mog_active_chain_commands_initialize initialize def initialize $game_temp.cache_act_chain ; $game_temp.active_chain = false $game_temp.chain_ot = nil mog_active_chain_commands_initialize end end #============================================================================== # ■ Chain Actions #============================================================================== class Chain_Actions include MOG_CHAIN_ACTIONS attr_accessor :phase attr_accessor :success #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(sequence,chain_temp) $game_temp.chain_actions[3] = true @chain_command = sequence @x = chain_temp[0] + CHAIN_SPRITE_POSITION[0] @y = chain_temp[1] + CHAIN_SPRITE_POSITION[1] @y = (Graphics.height - 36) if @y > (Graphics.height - 36) @y = 0 if @y < 0 @skill = $data_skills[chain_temp[2]] @skillname = @skill.name if CHAIN_INPUT_DURATION[chain_temp[2]] != nil @duration = [CHAIN_INPUT_DURATION[chain_temp[2]],CHAIN_INPUT_DURATION[chain_temp[2]]] else @duration = [CHAIN_DEFAULT_INPUT_DURATION, CHAIN_DEFAULT_INPUT_DURATION] end @phase = 0 ; @success = false ; @com = 0 ; @com_index = 0 @initial_wait = 1 ; @wrong_commnad = [false,0,0] Audio.se_play("Audio/SE/" + CHAIN_START_SE, 100, 100) rescue nil create_button_sprite ; create_skill_name ; create_icon ; create_meter end #-------------------------------------------------------------------------- # ● Create Icon #-------------------------------------------------------------------------- def create_icon @icon_image = $game_temp.cache_active_chain[0] @icon_sprite = Sprite.new ; @icon_sprite.bitmap = Bitmap.new(24,24) @icon_sprite.z = CHAIN_SPRITE_Z + 1 @org_x2 = @x - 12 + CHAIN_ICON_POSITION[0] - @center @icon_sprite.x = @org_x2 - 50 @icon_sprite.y = @y + CHAIN_ICON_POSITION[1] icon_rect = Rect.new(@skill.icon_index % 16 * 24, @skill.icon_index / 16 * 24, 24, 24) @icon_sprite.bitmap.blt(0,0, @icon_image, icon_rect) end #-------------------------------------------------------------------------- # ● Create Meter #-------------------------------------------------------------------------- def create_meter @meter_layout = Sprite.new @meter_layout.bitmap = $game_temp.cache_active_chain[1] @meter_layout.z = CHAIN_SPRITE_Z @meter_layout.x = @x - (@meter_layout.width / 2) + CHAIN_LAYOUT_POSITION[0] @meter_layout.y = @y + CHAIN_LAYOUT_POSITION[1] @meter_image = $game_temp.cache_active_chain[2] @meter_cw = @meter_image.width ; @meter_ch = @meter_image.height @meter = Sprite.new @meter.bitmap = Bitmap.new(@meter_image.width, @meter_image.height) @meter.z = CHAIN_SPRITE_Z + 1 @meter.x = @x - (@meter_image.width / 2) + CHAIN_METER_POSITION[0] @meter.y = @y + CHAIN_METER_POSITION[1] @meter.visible = false ; @meter_layout.visible = false ; update_meter end #-------------------------------------------------------------------------- # ● Update Meter #-------------------------------------------------------------------------- def update_meter return if @meter == nil @meter.bitmap.clear ; range = @meter_cw * @duration[0] / @duration[1] m_scr = Rect.new(0,0,range,@meter_ch ) @meter.bitmap.blt(0,0, @meter_image ,m_scr) end #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def create_skill_name @skill_name = Sprite.new ; @skill_name.bitmap = Bitmap.new(200,32) @skill_name.bitmap.font.size = CHAIN_WORD_FONT_SIZE @skill_name.bitmap.font.color = CHAIN_WORD_FONT_COLOR @skill_name.z = CHAIN_SPRITE_Z @skill_name.y = @y - 32 + CHAIN_COMMAND_WORD_POSITION[1] refresh_skill_name end #-------------------------------------------------------------------------- # ● Refresh Skill Name #-------------------------------------------------------------------------- def refresh_skill_name cm = @skillname.to_s.split(//).size @center = ((200 / @skill_name.bitmap.font.size) * cm / 2) + 5 @org_x = @x - (@button_cw / 2) - 85 + CHAIN_COMMAND_WORD_POSITION[0] @skill_name.x = @org_x - 50 @skill_name.bitmap.draw_text(0,0,200,32,@skillname.to_s,1) end #-------------------------------------------------------------------------- # ● Create Button Sprite #-------------------------------------------------------------------------- def create_button_sprite @button_image = $game_temp.cache_active_chain[3] @button_cw = @button_image.width / 13 ; @button_ch = @button_image.height @button_sprite = Sprite.new @button_sprite.bitmap = Bitmap.new(@button_cw,@button_ch) @button_sprite.z = CHAIN_SPRITE_Z + 1 @button_sprite.ox = @button_cw / 2 ; @button_sprite.oy = @button_ch / 2 @button_sprite.x = @x + @button_sprite.ox - (@button_cw / 2) @button_sprite.y = @y + @button_sprite.oy end #-------------------------------------------------------------------------- # ● Refresh Button Command #-------------------------------------------------------------------------- def refresh_button_command return if @button_sprite == nil @duration[0] = @duration[1] command_list_check(@chain_command[@com_index]) @button_sprite.bitmap.clear button_scr = Rect.new(@com * @button_cw , 0,@button_cw,@button_ch) @button_sprite.bitmap.blt(0,0,@button_image,button_scr) @button_sprite.zoom_x = 2 ; @button_sprite.zoom_y = 2 @button_sprite.opacity = 255 end #-------------------------------------------------------------------------- # ● Dispose #-------------------------------------------------------------------------- def dispose dispose_button ; dispose_meter ; dispose_name ; dispose_icon_sprite $game_temp.chain_actions[3] = false ; $game_temp.active_chain = false end #-------------------------------------------------------------------------- # ● Dispose Icon Sprite #-------------------------------------------------------------------------- def dispose_icon_sprite return if @icon_sprite == nil @icon_sprite.bitmap.dispose ; @icon_sprite.dispose ; @icon_sprite = nil end #-------------------------------------------------------------------------- # ● Dispose Name #-------------------------------------------------------------------------- def dispose_name return if @skill_name == nil @skill_name.bitmap.dispose ; @skill_name.dispose ; @skill_name = nil end #-------------------------------------------------------------------------- # ● Dispose Button #-------------------------------------------------------------------------- def dispose_button return if @button_sprite == nil @button_sprite.bitmap.dispose ; @button_sprite.dispose ; @button_sprite = nil end #-------------------------------------------------------------------------- # ● Dispose Meter #-------------------------------------------------------------------------- def dispose_meter return if @meter_layout == nil @meter_layout.dispose ; @meter_layout = nil @meter.bitmap.dispose ; @meter.dispose end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update if @initial_wait > 0 @initial_wait -= 1 if @initial_wait == 0 refresh_button_command ; @meter.visible = true @meter_layout.visible = true end return end if @wrong_commnad[0] update_fade_command return end update_command ; update_sprite_button ; update_time ; update_meter end #-------------------------------------------------------------------------- # ● Update Skill Name #-------------------------------------------------------------------------- def update_fade_command fade_speed = 6 @skill_name.opacity -= fade_speed ; @meter.opacity -= fade_speed @meter_layout.opacity -= fade_speed ; @icon_sprite.opacity -= fade_speed @button_sprite.opacity -= fade_speed * 2 ; missed if @meter.opacity == 0 end #-------------------------------------------------------------------------- # ● Update Skill Name #-------------------------------------------------------------------------- def update_skill_name return if @skill_name == nil if @skill_name.x < @org_x @skill_name.x += 3 ; @icon_sprite.x += 3 if @skill_name.x > @org_x @skill_name.x = @org_x ; @icon_sprite.x = @org_x2 end end end #-------------------------------------------------------------------------- # ● Update Time #-------------------------------------------------------------------------- def update_time return if @button_sprite == nil @duration[0] -= 1 if @duration[0] > 0 wrong_command(1) if @duration[0] == 0 end #-------------------------------------------------------------------------- # ● Update Sprite Button #-------------------------------------------------------------------------- def update_sprite_button return if @button_sprite == nil if @button_sprite.zoom_x > 1.00 @button_sprite.zoom_x -= 0.05 @button_sprite.zoom_x = 1.00 if @button_sprite.zoom_x < 1.00 end @button_sprite.zoom_y = @button_sprite.zoom_x end #-------------------------------------------------------------------------- # ● Update Command #-------------------------------------------------------------------------- def update_command if Input.trigger?(:X) ; check_command(0) elsif Input.trigger?(:Z) ; check_command(1) elsif Input.trigger?(:Y) ; check_command(2) elsif Input.trigger?(:A) ; check_command(3) elsif Input.trigger?(:C) ; check_command(4) elsif Input.trigger?(:B) ; check_command(5) elsif Input.trigger?(:L) ; check_command(6) elsif Input.trigger?(:R) ; check_command(7) elsif Input.trigger?(:RIGHT) ; check_command(8) elsif Input.trigger?(:LEFT) ; check_command(9) elsif Input.trigger?(:DOWN) ; check_command(10) elsif Input.trigger?(:UP) ; check_command(11) end end #-------------------------------------------------------------------------- # ● command_list_check #-------------------------------------------------------------------------- def command_list_check(command) case command when "A" ; @com = 0 when "D" ; @com = 1 when "S" ; @com = 2 when "Shift" ; @com = 3 when "Z" ; @com = 4 when "X" ; @com = 5 when "Q" ; @com = 6 when "W" ; @com = 7 when "Right" ; @com = 8 when "Left" ; @com = 9 when "Down" ; @com = 10 when "Up" ; @com = 11 else ; @com = 12 end end #-------------------------------------------------------------------------- # ● check_command #-------------------------------------------------------------------------- def check_command(com) if com != -1 right_input = false @chain_command.each_with_index do |i, index| if index == @com_index command_list_check(i) ; right_input = true if @com == com end end else command_list_check(@com_index) ; right_input = true end if right_input next_command else wrong_command(0) end end #-------------------------------------------------------------------------- # ● Next Command #-------------------------------------------------------------------------- def next_command @com_index += 1 Audio.se_play("Audio/SE/" + CHAIN_RIGHT_SE, 100, 100) if @com_index == @chain_command.size @phase = 9 ; @success = true return end refresh_button_command end #-------------------------------------------------------------------------- # ● wrong_command #-------------------------------------------------------------------------- def wrong_command(type = 0) @wrong_commnad[0] = true ; @wrong_commnad[1] = type @skill_name.bitmap.clear Audio.se_play("Audio/SE/" + CHAIN_WRONG_SE, 100, 100) wname = type == 0 ? CHAIN_MISSED_WORDS[0] : CHAIN_MISSED_WORDS[1] @skill_name.bitmap.draw_text(0,0,200,32,wname.to_s,1) end #-------------------------------------------------------------------------- # ● missed #-------------------------------------------------------------------------- def missed @success = false ; @phase = 9 end end
×
×
  • Create New...