Messaggi: 275
Discussioni: 27
Registrato: 25-11-2016
Reputazione:
7
20-04-2017, 11:38 PM
(Questo messaggio è stato modificato l'ultima volta il: 18-05-2017, 05:40 PM da EddyHg80.)
Come tutto è iniziato:
Alla fine eccomi qua, a lamentarmi di ore di lavoro di un altro hacker
Perché odio il DNS di PrimeDialga? il motivo è molto semplice e vi balzerà all'occhio con questo confronto
Mattino:
Pomeriggio:
Sera:
Notte:
I più grandi flop secondo me si hanno al mattino, pomeriggio e sera.
-Cosa sarebbe bastato per farmi contento?
Il DNS sottrae ad esempio un po' di blu per fare il mattino, bastava sottrarne la metà. Fine.
-Cosa sarebbe stato stratosferico? Questo:
Presente nel Day/Night System di HackLars (che se non erro è italiano) compatibile solo con Ruby (non sono mai riuscito a farlo funzionare ma ok).
Ok basta lamentele, ora vi chiedo (e lo chiedo specificatamente a @ Andrea @ eMMe97 e @ Bonnox): sarebbe possibile rintracciare i dati da modificare nella routine del DNS per modificare di quanto le tonalità vengano sottratte?
So di essere pessimo, prima mi lamento e poi chiedo pure aiuto ad altri, ma è una cosa che mi ha sempre dato un po' fastidio e volevo dirla, non mi prendete troppo seriamente
Informazioni ricavate sul DNS di PrimeDialga
-Modificare il colore del filtro:
(22-04-2017, 11:33 AM)eMMe97 Ha scritto: Ogni orario è composto da 4 byte, che poi sono 2 byte ripetuti. I 2 byte rappresentano 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 0x8B000F8
Time 2 4-6 offset 0x8B000FC
Time 3 6-17 offset 0x8B00100
Time 4 17-19 offset 0x8B00104
Time 5 19-22 offset 0x8B00108
Time 6 22-24 offset 0x8B0010C
Per scegliere il colore potete usare paint.net o gimp2, compiare il loro valore esadecimale RGB di 6 cifre e convertirlo con APE, con il convertitore apposito; se usate APE non servirà invertire i 2 byte.
-Fix ai flash che avvengono quando si entra nei teletrasporti (Fire Red)
(22-04-2017, 11:47 AM)eMMe97 Ha scritto: Su firered all'offset 0x8070682 i byte 00 00 00 00 e risolvi il problema del lampeggiamento.
-Problema sul calcolo della tonalità per filtri che non sono colori primari, secondari e nero (e immagino bianco)
(22-04-2017, 02:41 PM)Andrea Ha scritto: 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).
Credo che le due palette vengano ricolorate secondo un algoritmo diverso:
(22-04-2017, 06:10 PM)EddyHg80 Ha scritto:
aumentando il blu è ancora più chiaro che il filtro non viene applicato uniformemente a tutti i colori
R:64 G:64 B:150
Applicando quel colore alcune palette vengono filtrate di più altre di meno, molto visibile nelle 2 tonalità di erba, che dovrebbero essere simili.
Facciamo un DNS nostro, idee generali
semicit. @ Bonnox
(24-04-2017, 02:58 PM)Bonnox Ha scritto: 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.
(22-04-2017, 03:08 PM)EddyHg80 Ha scritto: 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]
Queste mie formule rispecchiano il DNS di PrimeDialga, infatti se il filtro è nero, ogni componente sarà 0, e la componente finale risulterà dimezzata. Mentre se il filtro è bianco, ogni componente sarà 256, e la componente finale risulterà invariata (viene fuori Comp. x(1/2+1/2).
(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
DNS by Andrea
(03-05-2017, 10:47 AM)Andrea Ha scritto: Credo di aver terminato il DNS, ecco la routine:
.THUMB
.ALIGN 2
MOV R6, #1
AND R6, R7
CMP R6, #1
BEQ CHANGE
PUSH {R2}
MOV R2, R3
LSR R2, R2, #2
SWI 0xC
POP {R2}
CHANGE:
PUSH {R2-R7}
MOV R4, #0
LDR R2, .HOUR
LDRB R7, [R2, #1]
LDRB R6, [R2]
MOV R3, #60
MUL R7, R3
MOV R5, R3
MUL R3, R5
MUL R6, R3
ADD R6, R7
PUSH {R0-R6}
MOV R0, R6
MOV R1, #135
LSL R1, R1, #4
SWI 0x6
LDR R7, .FILTRI
LSL R0, R0, #1
ADD R7, R0
LDR R7, [R7]
POP {R0-R6}
LOOP:
LDRH R5, [R0, R4]
LSL R2, R5, #27
LSR R2, R2, #27
LSL R6, R7, #27
LSR R6, R6, #27
SUB R2, R6
BPL GREEN
MOV R2, #0
GREEN:
LSL R3, R5, #22
LSR R3, R3, #27
LSL R6, R7, #22
LSR R6, R6, #27
SUB R3, R6
BPL BLUE
MOV R3, #0
BLUE:
LSL R5, R5, #17
LSR R5, R5, #27
LSL R6, R6, #17
LSR R6, R6, #27
SUB R5, R6
BPL SHIFT
MOV R5, #0
SHIFT:
LSL R3, R3, #5
LSL R5, R5, #10
EOR R5, R2
EOR R5, R3
STRH R5, [R1, R4]
ADD R4, #2
CMP R4, #4
BNE LOOP
END:
POP {R2-R7}
ADD R0, #4
ADD R1, #4
SUB R3, #1
BPL CHANGE
LDR R6, .RETURN
BX R6
.ALIGN 2
.FILTRI: .word 0x08F00000
.RETURN: .word 0x08B000C4+1
.HOUR: .word 0x03005542
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:
E8 00 C7 00 A6 00 86 00 65 00 44 00 24 00 03 00 02 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 04 40 08 60 0C 80 10 A0 14 C0 18 E0 1C 00 21 01 1D 02 19 03 15 04 11 05 0D 06 09 07 05 08 01
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: .THUMB
.ALIGN 2
MOV R6, #1
AND R6, R7
CMP R6, #1
BEQ CHANGE
PUSH {R2}
MOV R2, R3
LSR R2, R2, #2
SWI 0xC
POP {R2}
CHANGE:
ldr r2, =(0x300553C)
ldrb r2, [r2, #0x3]
cmp r2, #0x3
ble set_inverno
cmp r2, #0x9
bge set_inverno
set_estate:
PUSH {R2-R7}
MOV R4, #0
LDR R2, .HOUR
LDRB R7, [R2, #1]
LDRB R6, [R2]
MOV R3, #60
MUL R7, R3
MOV R5, R3
MUL R3, R5
MUL R6, R3
ADD R6, R7
PUSH {R0-R6}
MOV R0, R6
LDR R1, = 1800
SWI 0x6
LDR R7, .FILTRO
LSL R0, R0, #1
ADD R7, R0
LDR R7, [R7]
POP {R0-R6}
B LOOP
set_inverno:
PUSH {R2-R7}
MOV R4, #0
LDR R2, .HOUR
LDRB R7, [R2, #1]
LDRB R6, [R2]
MOV R3, #60
MUL R7, R3
MOV R5, R3
MUL R3, R5
MUL R6, R3
ADD R6, R7
PUSH {R0-R6}
MOV R0, R6
LDR R1, = 1800
SWI 0x6
LDR R7, .FILTRI
LSL R0, R0, #1
ADD R7, R0
LDR R7, [R7]
POP {R0-R6}
LOOP:
LDRH R5, [R0, R4]
LSL R2, R5, #27
LSR R2, R2, #27
LSL R6, R7, #27
LSR R6, R6, #27
SUB R2, R6
BPL GREEN
MOV R2, #0
GREEN:
LSL R3, R5, #22
LSR R3, R3, #27
LSL R6, R7, #22
LSR R6, R6, #27
SUB R3, R6
BPL BLUE
MOV R3, #0
BLUE:
LSL R5, R5, #17
LSR R5, R5, #27
LSL R6, R6, #17
LSR R6, R6, #27
SUB R5, R6
BPL SHIFT
MOV R5, #0
SHIFT:
LSL R3, R3, #5
LSL R5, R5, #10
EOR R5, R2
EOR R5, R3
STRH R5, [R1, R4]
ADD R4, #2
CMP R4, #4
BNE LOOP
END:
POP {R2-R7}
ADD R0, #4
ADD R1, #4
SUB R3, #1
BPL CHANGE
LDR R6, .RETURN
BX R6
.ALIGN 2
.FILTRI: .word 0x08F00000
.FILTRO: .word 0x08F10000
.RETURN: .word 0x08B000C4+1
.HOUR: .word 0x03005542
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:
.THUMB
.ALIGN 2
MOV R6, #1
AND R6, R7
CMP R6, #1
BEQ CHANGE
PUSH {R2}
LSR R2, R3, #2
SWI 0xC
POP {R2}
CHANGE:
PUSH {R2-R7}
LDR R2, .DNS
LDRB R7, [R2, #4]
LDRB R6, [R2, #3]
MOV R3, #60
MUL R7, R3
MOV R5, R3
MUL R3, R5
MUL R6, R3
ADD R6, R7
LSR R6, R6, #11
LSL R6, R6, #1
LDR R7, .PRI
LDRB R2, [R2]
CMP R2, #2
BLE INVERNO
CMP R2, #5
BLE MASK
CMP R2, #8
BLE ESTATE
CMP R2, #12
BNE MASK
INVERNO:
LDR R7, .INV
B MASK
ESTATE:
LDR R7, .EST
MASK:
LDRH R7, [R7, R6]
MOV R4, #2
LOOP:
LDRH R5, [R0, R4]
LSL R2, R5, #27
LSR R2, R2, #27
LSL R6, R7, #27
LSR R6, R6, #27
SUB R2, R6
BPL GREEN
MOV R2, #0
GREEN:
LSL R3, R5, #22
LSR R3, R3, #27
LSL R6, R7, #22
LSR R6, R6, #27
SUB R3, R6
BPL BLUE
MOV R3, #0
BLUE:
LSL R5, R5, #17
LSR R5, R5, #27
LSL R6, R7, #17
LSR R6, R6, #27
SUB R5, R6
BPL SHIFT
MOV R5, #0
SHIFT:
LSL R3, R3, #5
LSL R5, R5, #10
EOR R5, R2
EOR R5, R3
STRH R5, [R1, R4]
SUB R4, #2
BPL LOOP
END:
POP {R2-R7}
ADD R0, #4
ADD R1, #4
SUB R3, #1
BPL CHANGE
LDR R6, .RETURN
BX R6
.ALIGN 2
.EST: .word 0x08XXXXXX
.PRI: .word 0x08YYYYYY
.INV: .word 0x08ZZZZZZ
.RETURN: .word 0x08B000C4+1
.DNS: .word 0x0300553F Io ho provato la routine e i colori vengono sottratti correttamente:
-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:
.THUMB
.ALIGN 2
MOV R6, #1
AND R6, R7
CMP R6, #1
BEQ CHANGE
COPY:
LDR R5, [R0]
STR R5, [R1]
ADD R0, #4
ADD R1, #4
SUB R3, #1
BPL COPY
B END_2
CHANGE:
PUSH {R2-R7}
MOV R4, #2
LDR R2, .HOUR
LDRB R7, [R2, #1]
LDRB R6, [R2]
MOV R3, #60
MUL R7, R3
MOV R5, R3
MUL R3, R5
MUL R6, R3
ADD R6, R7
LSR R6, R6, #11
LSL R6, R6, #1
LDR R7, .FILTRI
LDRH R7, [R7, R6]
LOOP:
LDRH R5, [R0, R4]
LSL R2, R5, #27
LSR R2, R2, #27
LSL R6, R7, #27
LSR R6, R6, #27
SUB R2, R6
BPL GREEN
MOV R2, #0
GREEN:
LSL R3, R5, #22
LSR R3, R3, #27
LSL R6, R7, #22
LSR R6, R6, #27
SUB R3, R6
BPL BLUE
MOV R3, #0
BLUE:
LSL R5, R5, #17
LSR R5, R5, #27
LSL R6, R7, #17
LSR R6, R6, #27
SUB R5, R6
BPL SHIFT
MOV R5, #0
SHIFT:
LSL R3, R3, #5
LSL R5, R5, #10
EOR R5, R2
EOR R5, R3
STRH R5, [R1, R4]
SUB R4, #2
BPL LOOP
POP {R2-R7}
ADD R0, #4
ADD R1, #4
SUB R3, #1
BPL CHANGE
END_2:
LDR R6, .RETURN
BX R6
.ALIGN 2
.FILTRI: .word 0x08C201D0
.RETURN: .word 0x08C200C4+1
.HOUR: .word 0x03005542 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.
.THUMB
.ALIGN 2
MOV R6, #1
AND R6, R7
CMP R6, #1
BEQ CHANGE
COPY:
LDR R5, [R0]
STR R5, [R1]
ADD R0, #4
ADD R1, #4
SUB R3, #1
BPL COPY
B END
CHANGE:
PUSH {R2-R7}
LDR R2, .DNS
LDRB R7, [R2, #4]
LDRB R6, [R2, #3]
MOV R3, #60
MUL R7, R3
MOV R5, R3
MUL R3, R5
MUL R6, R3
ADD R6, R7
LSR R6, R6, #11
LSL R6, R6, #1
LDR R7, .PRI
LDRB R2, [R2]
CMP R2, #2
BLE INVERNO
CMP R2, #5
BLE MASK
CMP R2, #8
BLE ESTATE
CMP R2, #12
BNE MASK
INVERNO:
LDR R7, .INV
B MASK
ESTATE:
LDR R7, .EST
MASK:
LDRH R7, [R7, R6]
MOV R4, #2
LOOP:
LDRH R5, [R0, R4]
LSL R2, R5, #27
LSR R2, R2, #27
LSL R6, R7, #27
LSR R6, R6, #27
SUB R2, R6
BPL GREEN
MOV R2, #0
GREEN:
LSL R3, R5, #22
LSR R3, R3, #27
LSL R6, R7, #22
LSR R6, R6, #27
SUB R3, R6
BPL BLUE
MOV R3, #0
BLUE:
LSL R5, R5, #17
LSR R5, R5, #27
LSL R6, R7, #17
LSR R6, R6, #27
SUB R5, R6
BPL SHIFT
MOV R5, #0
SHIFT:
LSL R3, R3, #5
LSL R5, R5, #10
EOR R5, R2
EOR R5, R3
STRH R5, [R1, R4]
SUB R4, #2
BPL LOOP
POP {R2-R7}
ADD R0, #4
ADD R1, #4
SUB R3, #1
BPL CHANGE
END:
LDR R6, .RETURN
BX R6
.ALIGN 2
.EST: .word 0x08FFFFFF
.PRI: .word 0x08EEEEEE
.INV: .word 0x08DDDDDD
.RETURN: .word 0x08B000C4+1
.DNS: .word 0x0300553F
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:  |
|
Messaggi: 741
Discussioni: 31
Registrato: 06-10-2014
Reputazione:
9
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:  |
|
Messaggi: 275
Discussioni: 27
Registrato: 25-11-2016
Reputazione:
7
(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:  |
|
Messaggi: 758
Discussioni: 36
Registrato: 18-08-2014
Reputazione:
12
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:  |
|
Messaggi: 741
Discussioni: 31
Registrato: 06-10-2014
Reputazione:
9
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:  |
|
Messaggi: 275
Discussioni: 27
Registrato: 25-11-2016
Reputazione:
7
22-04-2017, 11:12 AM
(Questo messaggio è stato modificato l'ultima volta il: 22-04-2017, 11:13 AM da EddyHg80.)
(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:  |
|
Messaggi: 1,851
Discussioni: 161
Registrato: 09-10-2014
Reputazione:
46
22-04-2017, 11:33 AM
(Questo messaggio è stato modificato l'ultima volta il: 22-04-2017, 11:44 AM da eMMe97.)
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!
 Mi Piace Ricevuti:  |
|
Messaggi: 275
Discussioni: 27
Registrato: 25-11-2016
Reputazione:
7
22-04-2017, 11:39 AM
(Questo messaggio è stato modificato l'ultima volta il: 22-04-2017, 11:47 AM da EddyHg80.)
(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!
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:  |
|
Messaggi: 1,851
Discussioni: 161
Registrato: 09-10-2014
Reputazione:
46
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.
Messaggi: 945
Discussioni: 59
Registrato: 12-06-2014
Reputazione:
38
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:  |
|
Messaggi: 275
Discussioni: 27
Registrato: 25-11-2016
Reputazione:
7
22-04-2017, 03:08 PM
(Questo messaggio è stato modificato l'ultima volta il: 22-04-2017, 03:17 PM da EddyHg80.)
(22-04-2017, 02:41 PM)Andrea Ha scritto: 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:
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:
(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:  |
|
Messaggi: 945
Discussioni: 59
Registrato: 12-06-2014
Reputazione:
38
0x439F439F è la visualizzazione a 32bit, nella rom bisogna sovrascrivere i byte del filtro interessato con 9F 43 9F 43.
 Mi Piace Ricevuti:  |
|
Messaggi: 2,198
Discussioni: 103
Registrato: 06-07-2014
Reputazione:
16
22-04-2017, 05:41 PM
(Questo messaggio è stato modificato l'ultima volta il: 22-04-2017, 05:48 PM da Bonnox.)
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!
(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.
*immagine di congiunzione tra mass effect e doctor who della segretaria samantha traynor con in mano lo spazzolino sonico*
Ho un T.A.R.D.I.S. modello 40 ma non so usarlo.
Ehm, in realtà non è mio. L'ho "preso in prestito". Presa. E' una donna, già.
Vuoi fare un giro? Ovunque e Dovunque; tutto il tempo e lo spazio; ciò che è stato e che sarà. Da dove vuoi cominciare?
People assume that time is a strict progression of cause to effect, but *actually* from a non-linear, non-subjective viewpoint - it's more like a big ball made of wibbly wobbly... time-y wimey... stuff.
Prima di fare le fangirl in preda agli ormoni informatevi sulla fisica!
 Mi Piace Ricevuti:  |
|
Messaggi: 275
Discussioni: 27
Registrato: 25-11-2016
Reputazione:
7
22-04-2017, 06:10 PM
(Questo messaggio è stato modificato l'ultima volta il: 22-04-2017, 06:38 PM da EddyHg80.)
(22-04-2017, 05:41 PM)Bonnox Ha scritto: 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!
Ripropongo le mie formule messe sopra
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 , in ogni caso la routine non è perfetta, ulteriore prova
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:
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:  |
|
Messaggi: 2,198
Discussioni: 103
Registrato: 06-07-2014
Reputazione:
16
22-04-2017, 06:33 PM
(Questo messaggio è stato modificato l'ultima volta il: 22-04-2017, 06:41 PM da Bonnox.)
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:  |
|
Messaggi: 2,198
Discussioni: 103
Registrato: 06-07-2014
Reputazione:
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:  |
|
Messaggi: 945
Discussioni: 59
Registrato: 12-06-2014
Reputazione:
38
Per realizzare un D&N abbastanza efficiente, si potrebbe seguire quello di Shinyquagsire:
https://github.com/shinyquagsire23/Wizard-DN
.
 Mi Piace Ricevuti:  |
|
Messaggi: 275
Discussioni: 27
Registrato: 25-11-2016
Reputazione:
7
24-04-2017, 08:10 PM
(Questo messaggio è stato modificato l'ultima volta il: 24-04-2017, 08:13 PM da EddyHg80.)
(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:  |
|
|