Domanda

OK. Sono in essenza cercando di fare la mia interpretazione di hardware NES, in modo da poter fare un gioco che idealmente avrebbe assomigliare a quello di un gioco NES sarà simile. Attualmente sto attaccato con come regolare come disegnare il campo di gioco per la memoria video (di nuovo Buffer).

backbuffer

I Had Nes restrizioni alla NameTable o backbuffer. Per il mio esempio, il backbuffer è 256x240pixels grande, o la dimensione di uno schermo. Se ho disegnato questo al televisore, sarebbe riempire lo schermo perfettamente. Ora, se ho disegnato questo per lo schermo con un offset di X = 5, l'intera immagine sarebbe stata spostata e avrebbe avvolgere intorno allo schermo.

Ad esempio .....

ORIGINAL, NO OFFSET:                      DRAWN WITH OFFSET OF X=5:
ABCDEFGHIJK                               GHIJKABCDEF

DRAWN WITH OFFSET OF X=-5:
FGHIJKABCDE

Lo schermo si divide in quadrati 8x8 pixel ciascuno, per un totale di 32x30 righe e colonne. (256x240 pixels). L'offset è rappresentata in pixel - non colonne; quindi in teoria, avrei potuto compensare la schermata di 5 pixel e ogni colonna sarebbe spostato a destra per cinque pixel.

livello di progettazione

mie fasi sono costituite da schermi, contenente dati rappresentati in 16x15 righe e colonne, ciascuna da 16x16 pixel. Questo è quello di emulare il numero di giochi NES memorizzati dati a livello -. Tiene ogni piastrella informazioni su ciò che dovrebbe essere in ogni blocco 8x8

per esempio:.

AA
BC     with A,B,C,D representing what 8x8 graphic should go where
Design

Il livello è rappresentato da questo e, con ogni numero essendo una schermata diversa e -. che significa niente, null

-----
-123-
---4-
--54-
-----

CARATTERE POSIZIONAMENTO Questo è facile. So già come posso determinare quale tabella, riga e colonna i miei personaggi sono in base al loro posizionamento assoluto. Posso anche determinare il posizionamento relativo all'interno dello schermo.

Con queste informazioni, posso facilmente capire quali colonne sono a sinistra ea destra del carattere, se del caso (se il personaggio si trova sul lato sinistro dello schermo 1, Led rosso essere non più di livello a sinistra)

in modo ecco la domanda DUN DUN DUN Come faccio a disegnare i miei livelli allo schermo, in modo che scorrono da una all'altra. Sarebbe relativamente facile da disegnare uno schermo alla volta, e quando il personaggio arriva a bordo basta girare a un'altra schermata.

Tuttavia, il problema che sto avendo è concettualmente che ho bisogno di 'flusso' i dati di livello sullo schermo. Che, diciamo che il personaggio si muove di 24 pixel verso destra. La BG ha bisogno di muoversi pure.

Così, ho bisogno di regolare lo scorrimento del backbuffer da 24 pixel. Tuttavia, solo scorrendo da solo farà sì che lo schermo per avvolgere sopra, diplsaying vecchia parte del livello. Così, durante lo scorrimento ho bisogno di fare in modo di disegnare i nuovi pezzi del livello per il back buffer. Ma prima che io posso farlo, ho bisogno di capire quale devono lasciarci trascinare prima piastrelle. E se la persona va 24 pixel a sinistra, ho bisogno di ridisegnare le piastrelle sul backbuffer e modificare la correzione di conseguenza pure.

E cerchiamo di non dimenticare che se il personaggio si muove a destra e non ci sono dati più di livello da trarre, non ci dovrebbe essere alcun compensato ma invece il personaggio si avvicina al lato dello schermo (invece di essere centrato in mezzo al schermo tramite l'asse X).

In fondo, ho solo un sacco di diversi numeri e valori bloccato nella mia mente in questo momento - cercando di avvolgere la mia testa intorno molti concetti e hanno causato il mio cervello per trasformare in poltiglia. Qualcuno ha qualche punto di vista su come posso affrontare questo?

EDIT: Utilizzo VB.Net. C # è applicabile pure (programma che sia)

È stato utile?

Soluzione

Il modo in cui il NES fatto è stato con 4 tavoli nome, ogni 256x240. Quando si sfoglia di una fuori dallo schermo, quello adiacente sarebbe scorrere via. Per ottenere "mondi" più grande di 512x480, si aggiorna la tabella dei nomi nelle posizioni che sono fuori dallo schermo.

In generale, una cartuccia avrebbe un tavolo gigante nella ROM con tutti i dati di livello, e sarebbe tracciare la posizione complessiva di 1 o 2 variabili RAM. Poi, quando il gioco scorre, sarebbe aggiornare le variabili RAM, utilizzare quelli di ricercare la tabella dei dati di livello e copiare nei nuovi dati di livello nelle parti della tabella dei nomi che erano fuori dallo schermo.

Quindi in realtà il buffer schiena deve essere 512x480, e vi mostrerà solo una parte di esso 256x240.

Hai guardato lo smontaggio di tutti i giochi NES che hanno grandi mondi a scorrimento? Penso che un parziale smontaggio di Metroid è là fuori da qualche parte ...

... sì, ha trovato alcuni documenti a romhacking.net

Metroid smontaggio ; non reale ben commentato, ma con un piccolo sforzo non dovrebbe essere troppo difficile da capire.

Un'altra smontaggio che viene commentato migliore.

EDIT: Nel 2 ° disassemblaggio postato sopra, sguardo MetroidGameEnginePage.txt alla routine "SetupRoom" e la routine "DrawRoom"; anche la routine a etichetta mostra LEB4D come la tabella nome viene aggiornata in un caso. Anche guardare le ampie osservazioni di cui sopra la routine "GetNameTable". In generale, una ricerca per "tabella dei nomi" in tutto il documento si arriva molto altro ancora.

EDIT EDIT: Anche a romhacking.net; mappa della memoria per le PMI potrebbe essere utile.

Altri suggerimenti

avrei impostare una griglia di controllo delle immagini e caricare i livelli da un database che memorizza quale colonna e di riga ogni immagine è relativo al livello. Una volta che l'immagine che rappresenta il carattere del gioco diventa abbastanza a destra (che si dovrebbe conservare la sua posizione in alcune variabili livello di modulo) dello schermo si carica la colonna successiva di immagini (mentre spostando tutte le altre immagini una alla sinistra e la rimozione della prima colonna).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top