~Andrea Inviato 10 aprile, 2014 Condividi Inviato 10 aprile, 2014 Ho deciso di mettere questa parte del knowledge in una discussione a parte Knowledge #3 – Mugshot OAMKnowledge #3 – Mugshot OAM– TOOL & SPIEGAZIONI GENERALIIn 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:.THUMB.ALIGN 2PUSH {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 0xBLDR 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 0xBPOP {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 0x00000400Knowledge #3 – Mugshot OAM– INSERIAMO LA ROUTINEPer 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 COMANDIBene analizziamo ora la routine in tutte le sue parti LDR R3, .8000LDRH R3, [R3]MOV R1, #0x20MUL 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_PALADD R0, R1LDR R1, .SET_PAL_14MOV R2, #0x10SWI 0xBIn 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, .OAMLDRB R2, [R2]MOV R1, #0x20MUL R2, R1 Link al commento Condividi su altre piattaforme Più opzioni di condivisione...
Post raccomandati
Archiviata
La discussione è ora archiviata e chiusa ad ulteriori risposte.