Benvenuto Visitatore!  / Create an account

Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
[Ricerca] Discussione generale sul Day/Night System
#1
Photo 

Come tutto è iniziato:



Informazioni ricavate sul DNS di PrimeDialga



Facciamo un DNS nostro, idee generali



DNS by Andrea
(03-05-2017, 10:47 AM)Andrea Ha scritto: Credo di aver terminato il DNS, ecco la routine:

Ogni filtro segue lo stesso formato delle palette nel GBA:
[0] - [5 bit blu] - [5 bit verde] - [5 bit rosso]
Il primo bit è inutilizzato, mentre i restanti campi occupano 5 bit.
In ogni campo, bisogna specificare quanto blu/verde/rosso sottrarre dalla paletta.
Per esempio, per ottenere un filtro tendente al blu, bisogna sottrarre il rosso e il verde:
[0] - [8] - [8] -> [0] - [01000] - [01000] - [01000] -> 2108

Io ho utilizzato questi filtri:

In questo specifico caso, ci sono 40 filtri.

Questo numero è ottenuto dalla seguente formula: ((ore * 3600)+(minuti * 60) / 2160) = [0-39]
Per incrementare il numero di filtri bisogna sostituire la parte evidenziata in rosso all'interno del codice con:
LDR R1, = VAL, dove al posto di VAL andrà inserito il denominatore della divisione precedente, nel mio caso 2160.
Per esempio, per utilizzare 144 filtri, bisognerà inserire al posto di VAL il numero 600 -> (24 ore * 3600) / 600 = 144.

Un ultimo appunto:
Nell'ultima parte della routine, dove sono segnati i vari offset, uno è evidenziato in blu e corrisponde alla table in cui sono collocati i filtri.
Potete cambiarlo a vostro piacimento, inserendo l'offset in cui andrete ad inserire i vostri filtri.

(01-05-2017, 02:13 PM)Andrea Ha scritto: Per inserirla dobbiamo recarci a 0x98 byte più avanti rispetto all'offset della routine originale del DNS, successivamente sovrascriviamo i byte con 00 4E 30 47 XX XX XX 08, dove al posto delle XX andrà inserito l'offset della nuova routine in little endian +1.

-48 filtri e possibilità di avere 2 set per estate e inverno.

(03-05-2017, 11:06 PM)eMMe97 Ha scritto:
Spiegazione:
le parti in rosso sono i mesi invernali. In questo caso se avremo un valore minore di 3 o maggiore di 9 (3= marzo, 9=settembre), ci troveremo in inverno. Cambiando questi valori alteriamo i mesi.
Ci sono quindi due diversi set di palette. La dicitura FILTRO è utilizzata per l'estate e FILTRI per l'inverno. Cambiate gli offset con quelli che volete.

-42 filtri, colorazione sistemata e 3 set di filtri per estate inverno e mezze stagioni

(06-05-2017, 10:26 AM)Andrea Ha scritto: Questa è la routine ottimizzata per 42 filtri e con il cambio di filtri in base alle stagioni:
Io ho provato la routine e i colori vengono sottratti correttamente:
[Immagine: B4laKcq.png]

-42 filtri e esclusione dei menù dall'azione del filtro

(08-05-2017, 03:33 PM)Andrea Ha scritto: Routine con l'esclusione delle palette e ottimizzata per 42 filtri:
Ora non dovrebbero esserci più problemi.

-42 filtri,3 set di filtri per estate inverno e mezze stagioni e esclusione dei menù dall'azione del filtro

(08-05-2017, 08:51 PM)eMMe97 Ha scritto: Come promesso ecco qui la routine del DNS Andrea's Plus Edition con tanto di filtri per stagioni, 42 sfumature e correzione all'applicazione delle palette.

La parte in rosso è sempre da sostituire con R6 se volete una notte più blu e meno nera, come la foto nei post precedenti.


-Programma per generare automaticamente i filtri a piacimento

Download 1.5

Come si usa:
-Alla prima domanda vi chiede quanti filtri deve generare, metto 42, 48 o 40 in base alla routine che stiamo utilizzando
-poi ti chiede quante fasi avranno un filtro fisso, inserisco 4 per mattina, giorno, pomeriggio e sera
-mi chiede quando inizia il primo filtro fisso, inserisco 15 per le 7 di mattina (mi sembra)
-voglio far finire la mattina alle 8 quindi inserisco 17
-ora inserisco il codice del colore, che sarà un giallino o un celestino

Ora mi chiede quando inizia il secondo filtro fisso, il giorno:
Voglio che sia attivo e fisso dalle 10 alle 15:30:
-inserisco 21 per le 10:00
-inserisco 28 per le 15:30 (spero di star azzeccando gli orari)
-inserisco FFFFFF per il filtro bianco per il giorno

A questo punto il programma calcola anche tutti gli intermedi tra le 8 (fine del primo filtro fisso) e le 10 (inizio del secondo filtro fisso).

-finite con l'inserimento degli altri orari e filtri

Una volta terminato l'inserimento di tutti e 4 i filtri fissi si creerà un file di testo come output.


Con la versione 1.2 oltre ad esportare i filtri in un file di testo (viene creato nella stessa cartella) è possibile inserirli direttamente nella rom (se si trova nella stessa cartella): il programma vi chiederà il nome della rom per esteso, quindi compreso il .gba, e l'offset in cui volete inserire i filtri, il quale deve essere scritto senza 08 o 09 iniziali.
Se il programma si chiude dopo aver scritto il nome della rom probabilmente l'avete scritto male, per sicurezza togliete qualsiasi vocale accentata.
 Mi Piace Ricevuti: 
Flygon likes this post
Cita messaggio
#2
Ma se non ricordo male i colori puoi comunque deciderli tu con quel programma, la palette te la rifai manualmente e risolvi, no?
 Mi Piace Ricevuti: 
Cita messaggio
#3
(21-04-2017, 12:56 PM)Half shadow Ha scritto: Ma se non ricordo male i colori puoi comunque deciderli tu con quel programma, la palette te la rifai manualmente e risolvi, no?

Quel tipo di personalizzazione li va più che bene, il problema è che per esempio se io volessi un giallino più tenue per il mattino, non posso ottenerlo, mi devo tenere quel pugno in un occhio messo sopra.
 Mi Piace Ricevuti: 
Cita messaggio
#4
La cosa che mi da più fastidio non sono i colori, ma il fatto che il filtro lampeggia durante le lotte, mente scegli le mosse
 Mi Piace Ricevuti: 
Cita messaggio
#5
Ma io ricordo che c'era un tool che permetteva di scegliere se impostarlo durante le lotte oppure no, oltre a permettere di scegliere i colori e se permette la personalizzazione avete provato a correggere quel giallo fastidioso?
 Mi Piace Ricevuti: 
Cita messaggio
#6
(22-04-2017, 10:11 AM)Half shadow Ha scritto: Ma io ricordo che c'era un tool che permetteva di scegliere se impostarlo durante le lotte oppure no, oltre a permettere di scegliere i colori e se permette la personalizzazione avete provato a correggere quel giallo fastidioso?

Explosion si riferisce a un bug che non sono riusciti a fixare, cioe che quando si entra ad esempio in una porta, per un nanosecondo il filtro viene tolto e poi rimesso, quindi da un attimo fastidio perche magari uno si era abituato allo scuro della notte e gli viene flashato il giorno per un attimo.

Ripeto che il tool permette solo la sottrazione di Blu Verde o Rosso, se togli il blu, verde+rosso fa giallo; non si può scegliere di quanto togliere il blu, e a mio avviso ne toglie troppo, creando quel giallo sopra troppo acceso.
che io sappia non si può correggere
 Mi Piace Ricevuti: 
Cita messaggio
#7
Risolto!
Richiede una modifica con un hex editor, però permette di installare QUALSIASI filtro di QUALSIASI colore! (io ho fatto la prova con il marrone, viola e giallo).
Indicherò gli offset di tutto gli orari. Ogni orario è composto da 4 byte, che poi è lo stesso byte ripetuto. Il byte è il colore che si sceglie come filtro, ovviamente invertito (es. se il colore è rappresentato dai byte 12 34, inserirò all'offset 34 12, che ripetuto sarà 34 12 34 12).

Time 1 0-4 offset 0x8b00f08
Time 2 4-6 offset 0x8b000fc
Time 3 6-17 offset 0x8b00100
Time 4 17-19 offset 0x8b00104
Time 5 19-22 offset 0x8b01008
Time 6 22-24 offset 0x8b010c

Non è una modifica ottimale perché non sono stato a vedere come funzionasse il tool, diciamo è una modifica più grossolana, però funziona!

Penso sia molto carina come cosa, perché effettivamente si potrebbero creare degli effetti più realistici!
[Immagine: 51ppxl.png] [Immagine: 1zlgf2o.png] [Immagine: http1t.png] [Immagine: 2i1cze0.png] [Immagine: 122knxf.png] [Immagine: veu3h5.png] [Immagine: 33u6d86.png]
 Mi Piace Ricevuti: 
EddyHg80 likes this post
Cita messaggio
#8
(22-04-2017, 11:33 AM)eMMe97 Ha scritto: Risolto!
Richiede una modifica con un hex editor, però permette di installare QUALSIASI filtro di QUALSIASI colore! (io ho fatto la prova con il marrone, viola e giallo).
Indicherò gli offset di tutto gli orari. Ogni orario è composto da 4 byte, che poi è lo stesso byte ripetuto. Il byte è il colore che si sceglie come filtro, ovviamente invertito (es. se il colore è rappresentato dai byte 12 34, inserirò all'offset 34 12, che ripetuto sarà 34 12 34 12).

Time 1 0-4 offset 0x8b00f8
Time 2 4-6 offset 0x8b00fc
Time 3 6-17 offset 0x8b00100
Time 4 17-19 offset 0x8b00104
Time 5 19-22 offset 0x8b01008
Time 6 22-24 offset 0x8b010c

Non è una modifica ottimale perché non sono stato a vedere come funzionasse il tool, diciamo è una modifica più grossolana, però funziona!

Penso sia molto carina come cosa, perché effettivamente si potrebbero creare degli effetti più realistici!

Hai inserito la routine all'offset B00000? forse sarebbe più universale se ci dessi dei byte da cercare nella rom per trovare questi valori, perché il tool permette di inserire la rom dove vogliamo noi

Comunque, sei il mio eroe! dance

credo che qualche offset sia sbagliato, qualcuno ha 6 cifre altri 7 eheh, immagino che bisogna partire dal primo e aggiungere 4 giusto?
 Mi Piace Ricevuti: 
Cita messaggio
#9
Scusate, avevo inserito uno 0 in meno.
Ho inserito normalmente tutto all'offset che suggerisce il tool. Il primo offset è b000f8 e poi si va di 4 in 4 per tutti gli altri.

@Explosion100 su firered all'offset 0x8070682 i byte 00 00 00 00 e risolvi il problema del lampeggiamento.
[Immagine: 51ppxl.png] [Immagine: 1zlgf2o.png] [Immagine: http1t.png] [Immagine: 2i1cze0.png] [Immagine: 122knxf.png] [Immagine: veu3h5.png] [Immagine: 33u6d86.png]
 Mi Piace Ricevuti: 
Explosion100 and EddyHg80 like this post
Cita messaggio
#10
Nel GBA le palette sono composte da 16 bit suddivise nel seguente modo:
0 - [BLUE] [GREEN] [RED]
Il primo bit è inutilizzato, mentre ogni colore occupa 5 bit.
Per ogni periodo del giorno è presente un filtro per cambiare colore alle palette.
Partendo dall'offset in cui viene inserita la routine del DNS, su rubino è di default 0x08B00000, i filtri sono inseriti 0xF8 byte dopo e sono disposti nel seguente ordine:
notte (0), mattina(1), giorno(2), pomeriggio(3), sera(4).
Ogni filtro occupa 32 bit, due half-word da 16 bit ripetute; questo ci permette di convertire più velocemente le palette (due palette ad ogni iterazione).
Ipotizzando di dover cambiare il filtro della mattina esso è collocato a 0x08B00000 + 0xF8 + (4(dim 32 bit) * 1(mattina)) -> 0x08B000FC e il suo valore è 0x03FF03FF.
Convertendo in binario i primi 16 bit otteniamo:
0 - 00000 - 11111 - 11111
Per avere un'idea di come calcolare il valore che ci interessa, immaginiamo che ogni colore sia un foglio semi-trasparente che posizioneremo sopra lo schermo del gba.
I valori che ogni campo potrà assumere andranno da 0 a 31 (00000-11111), questi ci indicheranno la semi-trasparenza del "foglio".
Quindi, per creare l'effetto giallo della mattina avremo bisogno di due fogli, uno rosso ed uno verde che sovrapposti ci daranno il giallo, mentre il foglio blu sarà assente.
"Convertendo" questa idea in codice binario otteniamo:
0 - NO blu - foglio rosso - foglio verde
0 - 00000 - 11111 - 11111, lo stesso valore che era presente nel filtro della mattina.
Seguendo questo ragionamento, è possibile aumentare/diminuire la semi-trasparenza dei tre fogli per ottenere l'effetto che desideriamo.
Per esempio, per ottenere un giallo un pochino più tenue rispetto a quello di default:
0 - 10000 - 11100 - 11111 -> 0x439F -> 0x439F439F
Screen:
 Mi Piace Ricevuti: 
Cita messaggio
#11
(22-04-2017, 02:41 PM)Andrea Ha scritto:

Per me che ho fatto un po di programmazione è molto chiaro, grazie mille della spiegazione approfondita, l'unica cosa è che probabilmente la routine è stata creata appositamente per essere utilizzata con filtri di colori primari, secondari, nero e bianco, perché facendo diverse prove non ho avuto i risultati sperati
Questa ne è la prova, con il giallino scritto da te viene un verde:
[Immagine: nQK4TtC.png]

(nel convertitore di APE il valore GBA va messo al contrario, nella rom ho inserito 0x439F)

quindi a questo punto credo sia necessario modificare la routine stessa, in modo che dia come output questi valori

Componente R finale = Componente R iniziale *[(Componente R filtro scelto/512)+1/2]
Componente G finale = Componente G iniziale *[(Componente G filtro scelto/512)+1/2]
Componente B finale = Componente B iniziale *[(Componente B filtro scelto/512)+1/2]

al posto di 512 che è il valore massimo x2 in RGB va messo il valore massimo x 2 in GBA (1111=0xF, quindi F x2=1E ?), in questo modo se il filtro ha una componente 0 il colore finale viene dimezzato, se ha la componente 128 (metà del massimo, parlando in termini di RGB) il colore viene sottratto di un quarto del valore iniziale e così via.
 Mi Piace Ricevuti: 
Cita messaggio
#12
0x439F439F è la visualizzazione a 32bit, nella rom bisogna sovrascrivere i byte del filtro interessato con 9F 43 9F 43.
 Mi Piace Ricevuti: 
Cita messaggio
#13
Citazione:I più grandi flop secondo me si hanno al mattino, pomeriggio e sera.

ma va la, la sera con quel rossiccio ricorda il tramonto! :p


Citazione:Il DNS sottrae ad esempio un po' di blu per fare il mattino,

CHEFFIGATA io che stavo pensando di farmi il mio sistema DNS personale stavo seriamente pensando di dover ripalettare tutto il mondo... e poi arrivi tu con questo magnifico algoritmo!!! e per gli altri momenti della giornata cosa suggerisci? al tramonto aggiungere un po' di rosso? al pomeriggio di aggiungere un po' di giallo? o servono robe più complesse con integrali e simili?

Citazione: bastava sottrarne la metà. Fine.

Citazione:Ok basta lamentele, ora vi chiedo : sarebbe possibile rintracciare i dati da modificare nella routine del DNS per modificare di quanto le tonalità vengano sottratte?

Ben in 2 modi: disassemblando il programma (difficilissimo) o facendo la differenza con la ROM prima dell'applicazione della patch.

Non per sembrare pazzo, ma non sarebbe meglio fare un "open DNS" (so che il nome potrebbe essere fuorviante per alcuni, esperti in telecomunicazioni), ovvero realizzato da tutti noi insieme?

Ora, il problema si divide in 2 parti: trovare un buon algoritmo che riproduca fedelmente i colori, decidendo anche in quante parti dividere il giorno; e capire come inserirlo nella ROM.
Tu eddy hai capito come lo fa il programmino?
Immagino intervenga ogni volta che il gioco reperisce una palette...

edit: mentre rispondevo andrea ha aggiunto il suo messaggio.

Ho visto che parlava di "fogli". Non so se è la stessa cosa di cui parlava lui (non ho capito bene, sono stanchissimo), ma potremmo applicare il "blending". Ovvero immaginiamo come dice lui il foglio, ma usiamo una semplice formuletta che ho preso da internet qualche tempo fa che actually ora non ricordo ma doveva essere qualcosa come la somma dei 2 colori diviso 2 oppure 1 meno qualcosa... forse riesco a trovare un programmino java che feci tempo fa per provare, vi faccio sapere!

 

FIRMA (intanto che ivan rimette lo spazio dedicato) 

Guida di cui vado più fiero: Mega-Huge Bonnox' guide

Il mio nuovo motto: don't ask for ETAs!

[Immagine: yKWdaxi.gif]

(RIP immagine firma cancellata dai server)
"L'uomo è ancora il più straordinario dei computer"
-
citazione famosa, qualcuno di importante nella storia, forse Churchill boh


 
pezzo di firma prevalentemente riguardo il fangirling su Doctor who, di cui ora mi mezzo vergogno ma che alla fine per qualche motivo non riesco a cancellare, come se fossi ancorato alle origini. 
In fondo contiene anche un primordiale tentativo di ravvedimento, processo che si conclude con l'introduzione del presente spoiler. 
 
 Mi Piace Ricevuti: 
Cita messaggio
#14
(22-04-2017, 05:41 PM)Bonnox Ha scritto:

Ripropongo le mie formule messe sopra Wink

Componente R finale = Componente R iniziale *[(Componente R filtro scelto/512)+1/2]
Componente G finale = Componente G iniziale *[(Componente G filtro scelto/512)+1/2]
Componente B finale = Componente B iniziale *[(Componente B filtro scelto/512)+1/2]

@Andrea sì ho sbagliato a inserire i byte nella rom svitato , in ogni caso la routine non è perfetta, ulteriore prova

[Immagine: Z4wHSRp.png]

Ho applicato un filtro R:64 G:64 B:128 e ho avuto risultati diversi a seconda dei colori:
l'erba più scura sembra aver ricevuto il giusto filtro, anche se non proprio come volevo
da
R:96
G:168
B:144

a
R:48
G:80
B:80

-48 è la metà di 96, quindi per il rosso ha avuto lo stesso effetto di un filtro nero (quello standard del tool)
-80 è meno della metà di 168, quindi il filtro è stato addirittura più coprente di un filtro nero
-per il blu abbiamo più della metà, quindi in un certo senso ha rispettato quello che volevo fare, ma mi aspettavo un 108 (=144 - 36, un quarto in meno)

per l'erba più chiara abbiamo pressocché un dimezzamento di tutte le componenti, quindi come un filtro nero.

Dafuq is going on?

edit:
[Immagine: k0paO9Y.png]

aumentando il blu è ancora più chiaro che il filtro non viene applicato uniformemente a tutti i colori
R:64 G:64 B:150
 Mi Piace Ricevuti: 
Cita messaggio
#15
non è proprio quello che avevo in mente di trovare (maledetto disordine), ma spero faccia al caso vostro.
questa è una semplice formula del colore risultante dalla sovrapposizione di una lastra trasparente a un'immagine che non lo è.

https://postimg.org/image/gq8ko566f/

fatemi sapere se funziona.

secondo me dovremmo chiedere su qualche sito specializzato.
 Mi Piace Ricevuti: 
Cita messaggio
#16
Ho pensato ad una cosa. Secondo me stiamo brancolando nel buio perché non usiamo un metodo di lavoro preciso, ma andiamo a tentativi. Dovremmo cercare di capire veramente il problema: dobbiamo modificare dei colori in un certo modo affinché assomiglino alle varie sfumature dei momenti della giornata.
Secondo me bisognerebbe prendere una schermata dell'emulatore del gioco senza modifica, e con i programmi di grafica pasticciare con gli slider come luminosità, contrasto, dominanti, saturazione, ecc, aka Lightroom, e nel contempo vedere come cambiano i valori dei pixel, usando specialmente l'istogramma. In questo modo secondo me si riesce a trovare una formula decente da applicare ai colori originali.

Venendo al secondo problema, bisogna vedere come il programma applica la modifica alla rom, ed eventualmente farne la versione "per tutti" con le nuove formule.
 Mi Piace Ricevuti: 
Cita messaggio
#17
Per realizzare un D&N abbastanza efficiente, si potrebbe seguire quello di Shinyquagsire:
https://github.com/shinyquagsire23/Wizard-DN
.
 Mi Piace Ricevuti: 
Cita messaggio
#18
(24-04-2017, 05:16 PM)Andrea Ha scritto: Per realizzare un D&N abbastanza efficiente, si potrebbe seguire quello di Shinyquagsire:
https://github.com/shinyquagsire23/Wizard-DN

@Andrea in effetti questo DNS di shinyquagsire è secondo me il migliore in assoluto, ispirato a quello fatto da diegoisawesome in Crystal Dust, purtroppo non sono mai riuscito a capire come farlo funzionare non essendo pratico con i makefile...
sapresti dirci come fargli compilare un dns in una rom pulita? se non sbaglio fire red è supportato, emerald non ne sono certo, ruby sicuramente no.
Se riusciamo a farlo funzionare penso che dopo si tratti di trovare gli offset per ogni versione ed il gioco è fatto, è già fatto molto bene e non dovremmo farci un DN da zero.

edit:
ripensandoci, wizard DN doveva essere un plug-in a MEH, progetto ormai morto, chissà se è possibile farlo funzionare senza MEH

P.S. ho aggiornato il primo post, riassumendo quello che è stato detto
 Mi Piace Ricevuti: 
Cita messaggio




Utenti che stanno guardando questa discussione: 1 Ospite(i)