Vai al commento




MUGSHOT - OAM


Post raccomandati

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:
: Per togliere il blocco delle showpokepic, in modo da mostrarne due simultaneamente.
: Compilatore per le vostre routine ASM (In questo tutorial vi darò gia le routine compilate in ogni caso).
: 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:
.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
:)

LDR R3, .8000
LDRH R3, [R3]
MOV R1, #0x20
MUL R1, R3

[/indent]

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.

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.

LDR R2, .OAM
LDRB R2, [R2]
MOV R1, #0x20
MUL R2, R1
Link al commento
Condividi su altre piattaforme

Archiviata

La discussione è ora archiviata e chiusa ad ulteriori risposte.

  • Utenti nella discussione   0 utenti

    • Nessun utente registrato sta visualizzando questa pagina.
×
×
  • Crea...