Pokémon Center ~ Stay what we are ~ [Pokemon Sole- Pokemon Luna Download e Guida Ufficiale]

MUGSHOT - OAM

« Older   Newer »
  Share  
view post Posted on 10/4/2014, 13:53     +1   -1

Fakemon

Group:
Member
Posts:
2,092
Reputation:
+127

Status:


Ho deciso di mettere questa parte del knowledge in una discussione a parte :)
Knowledge #3 – Mugshot OAM
Knowledge #3 – Mugshot OAM– TOOL & SPIEGAZIONI GENERALI
In questa parte vedremo come inserire la routine dei mugshot. A differenza della lezione 1, in questa parte non ci occuperemo nel BG1 ma dell'OAM. Andiamo con ordine: Cos'č l'OAM?

L'OAM, come nel caso dei BG, č un "livello" dove vengono caricati gli OBJ. Gli OBJ possiamo definirli come oggetti i quali hanno determinate proprietŕ.
Gli OBJ in sintesi possono essere gli sprite (pokemon, ow o qualunque cosa non riguardi i tileset).
Ogni OBJ ha delle proprietŕ riassunti in 6 byte (+2) e iniziando dall'offset 700000:
[POS_Y][ATTRIBUTE_1][POS_X][ATTRIBUTE_2][START_TILE][ATTRIBUTE_3]+[byte_1][byte_2]
Quindi il secondo OBJ inizierŕ dall'offset 700008, il terzo 700010 e cosi via.
In questo progetto lavoreremo con le showpokepic. Le showpokepic, come si intuisce dal nome, fanno apparire l'immagine (sprite) di un pokemon. Lo sprite viene caricato nell'OAM.

Ora vi elencherň i tool da utilizzare in questa parte per semplificare il lavoro:
SHOWPOKEPIC LIMIT EDITOR 1.2: Per togliere il blocco delle showpokepic, in modo da mostrarne due simultaneamente.
ASM COMPILATOR v.1.2.0.0: Compilatore per le vostre routine ASM (In questo tutorial vi darň gia le routine compilate in ogni caso).
BINARY SPRITE CONVERTER 1.2: Per convertire i vostri mugshot (altrimenti seguite la lezione 1 su come ricavare i file .DMP)
Editor Esadecimale: Io utilizzo HxD

Qual'č il nostro intento? Semplicemente far apparire le due showpokepic e caricare i nostri mugshot al posto delle immagini dei pokemon.
Come prima cosa dobbiamo preoccuparci di come far apparire due showpokepic insieme.
Molto semplicemente utilizziamo il primo tool per rimuovere il blocco delle showpokepic: apriamo la rom col tool, e clicchiamo su "Applica Patch".
Per questa progetto ci serviremo di due routine, la prima caricherŕ l'immagine nella prima showpokepic invece l'altra nella seconda.
(potremmo anche utilizzarne una soltanto ma al momento utilizziamo questo metodo)
In questo caso ho gia fatto la routine che fa al caso nostro:

CITAZIONE
.THUMB
.ALIGN 2
PUSH {LR}
LDR R3, .8000 /*carico in r3 l'offset della variabile 8000 */
LDRH R3, [R3] /*salvo la Half-word in r3*/
MOV R1, #0x20 /*metto in r1 il valore 20 (byte che occupa un set di palette)*/
MUL R1, R3 /*moltiplico la variabile x 20 e salvo tutto in r1*/
LDR R0, .TABLE_PAL /*carico in r0 l'offset della TABLE delle palette*/
ADD R0, R1 /*sommo il prodotto precedente con l'offset della table*/
LDR R1, .SET_PAL_14 /*in r1 metto l'offset della rom de set 14*/
MOV R2, #0x10 /*metto in r2 il valore 10 (32 byte = 20 HEX, 20/2=10)*/
SWI 0xB
LDR R2, .OAM /*carico l'offset di inizia il 2 obj (player n_quadratini)*/
LDRB R2, [R2] /*salvo il byte in r2*/
MOV R1, #0x20 /*carico il valore 20 in r1*/
MUL R2, R1 /*moltiplico il numero di quadratini x 20*/
LDR R1, .BASE /*carico in r1 l'offset dove iniziano i tile dell'oam*/
ADD R1, R2 /**sommo il prodotto precedente con l'offset dei tile*/
LDR R2, .800 /*metto il valore 800 in r2*/
MUL R3, R2 /*moltiplico la variabile in r3 con il valore 800 in r2*/
LDR R2, .TABLE_MUG /*metto la TABLE dei mug in r2*/
ADD R0, R2, R3 /*sommo la TABLE e il prodotto precedente e metto in r0*/
LDR R2, .400 /*metto in r2 il valore 400*/
SWI 0xB
POP {PC}

.ALIGN 2
.8000: .WORD 0x0202E8C6
.OAM: .WORD 0x07000004
.TABLE_MUG: .WORD 0x08A00000
.TABLE_PAL: .WORD 0x08B00000
.SET_PAL_14: .WORD 0x0202F268
.BASE: .WORD 0x06010000
.800: .WORD 0x00000800
.400: .WORD 0x00000400

Knowledge #3 – Mugshot OAM– INSERIAMO LA ROUTINE
Per inserire la nostra routine ci avvaliamo di un assemblatore in questo caso vi ho gia fornito precedentemente il donwload. (Secondo tool)
Non ci resta che aprire il nostro tool e incollare la nostra routine.
Per compilarla dobbiamo aprire la nostra ROM andando su File>Apri Rom (*.gba). Infine cercate uno spazio libero nella vostra rom (consiglio dall'offset 700000 in poi) e incollatelo nella casella in alto vicino all'ingranaggio per poi schicciare il tasto :)

Knowledge #3 – Mugshot OAM– SPIEGAZIONE COMANDI
Bene analizziamo ora la routine in tutte le sue parti :)
CITAZIONE
LDR R3, .8000
LDRH R3, [R3]
MOV R1, #0x20
MUL R1, R3

In questa parte la routine caricherŕ l'offset della variabile 8000 in r3 e successivamente salverŕ una half-word.
dopodiché mettiamo in r1 il valore 20 (che sarebbero quanti byte occupa un set di palette).
Un set di palette č composto da 16 colori e ogni paletta č composta da 2 byte, quindi in tutti avremo 32 byte.
In esadecimale 32 = 20.

Infine moltiplichiamo la half-word con il valore 20.
CITAZIONE
LDR R0, .TABLE_PAL
ADD R0, R1
LDR R1, .SET_PAL_14
MOV R2, #0x10
SWI 0xB

In r0 carichiamo l'offset della TABLE delle pal (in questo caso B00000).
successivamente andremo a sommare il prodotto precedentemente ricavato nella prima parte con la nostra TABLE.
Ora arriva la parte fondamentale, carichiamoin r1 il set di palette numero 14 contenuto nella RAM.
e successivamente mettiamo in r2 il valore 10.
Perchč 10?
Ho detto prima che ogni set di palette occupa 20 byte.
Il comando successivo SWI 0xB, sovrascrive 2 byte alla volta di conseguenza č necessario dimezzare il numero dei byte da copiare che non saranno 20 ma 10 byte.

In questo modo tramite la nostra variabile avremo caricato le nostre palette.
Ora manca la parte riguardante il mugshot in se.
CITAZIONE
LDR R2, .OAM
LDRB R2, [R2]
MOV R1, #0x20
MUL R2, R1

Bene ora arriva la parte interessante. Vi ricordate all'inizio la struttura dell'oam su come viene salvato?
Bene sfrutteremo il byte dell'oam contenente da dove inizia l'oam e salviamo il byte un r2.
In r2 ora abbiamo quanti quadretti č distante dall'inizio dove vengono caricati tutti i tile dell'oam.
Ora in r1 mettiamo il valore 20.
Perchč 20? Non centra niente con le palette. In questo caso 20 sono i byte che compongono un quadratino 8x8. Infatti successivamente moltiplicheremo il valore 20 con il byte dove inizia il nostro OBJ.
CITAZIONE
LDR R1, .BASE
ADD R1, R2
LDR R2, .800
MUL R3, R2
LDR R2, .TABLE_MUG
ADD R0, R2, R3
LDR R2, .400
SWI 0xB

Bene, in r1 carichiamo l'offset da dove iniziano i tile dell'oam e lo sommiamo al prodotto precedente.
Ora in r2 carichiamo il valore 800 (che sarebbero i byte che occupa una immagine 64x64 compressa) e motliplichiamo il valore 800 con la variabile contenuta in r3 (ormai non serve piů il valore della variabile in r3 quindi salvo il prodotto direttamente in r3).
Ora in r2 carichiamo la nostra TABLE dei mug (io ho scelto A00000) e sommiamo il prodotto precedente con l'offset della nostra TABLE.
Infine, analogamente alla parte finale riguardante le palette, carichiamo in r2 il valore dimezzato dei byte da copiare.

Knowledge #3 – Mugshot OAM– ROUTINE COMPILATA
La routine compilata occupa 50 byte ;)
CITAZIONE
00 B5 0B 4B 1B 88 20 21 59 43 0C 48 40 18 0C 49 10 22 0B DF 07 4A 12 78 20 21 4A 43 09 49 89 18 09 4A 53 43 04 4A D0 18 08 4A 0B DF 00 BD C0 46 C6 E8 02 02 0C 00 00 07 00 00 A0 08 00 00 B0 08 68 F2 02 02 00 00 01 06 00 08 00 00 00 04 00 00

Knowledge #3 – Mugshot OAM– ESEMPIO SCRIPT

#dynamic 0x800000
#org @inizio
setvar 0x8000 0x1
callasm 0xOFFSET+1
end

Knowledge #3 – Mugshot OAM– SECONDO MUGSHOT?
Per caricare il secondo mugshot č molto semplice.
Nella routine comilata potete notare questi byte:
0C 00 00 07
68 F2 02 02
Basterŕ incollare un altra routine e al posto di questi byte metterci:
14 00 00 07
88 F2 02 02
semplicemente cambiamo gli attributi di controllo dell'oam (ovvero il terzo oam) e impostiamo dove caricare la paletta nel set di palette 15 ^^


Knowledge #3 – Mugshot OAM– INSERIRE I MUGSHOT
Come ultima cosa voglio fare una considerazione su come inserire i mugshot.
La nostra routine lavora su due table, entrambe la table verrano riempite nello stesso modo.
Prendiamo come riferimento come offset A00000 come TABLE dei MUG e B00000 come TABLE delle PAL.
In questo caso utilizzando il tool fornito all'inizio (Terzo Tool) ricaveremo il nostro file binario.
Ora non ci resta che incollarlo nell'offset A00000. Occupando 800 byte ogni mugshot il secondo mugshot partirŕ da A00800 fino ad arrivare a A01000 e cosi via.
Analogo l'inserimento delle palette.


Spero di essere stato il piů chiaro possibile.
Se avete dubbi chiedete pure nei commenti :)
 
Top
0 replies since 10/4/2014, 13:53   57 views
  Share