Sinceramente non riesco a capire quali siano i tuoi dubbi. Stai esattamente risolvendo da solo i problemi che ti poni:
Intanto pensavo di dare ad ogni tile un attributo che identifichi il tipo (muro,porta, piattaforma,...).
é quello che devi fare infatti... Non devi fare altro che creare una sorta di "tabella" aggiuntiva per i tiles e all'interno di ogni "cella" inserire un qualche numero che identifichi una funzione da eseguire. Ok, ti sta facendo male la testa. Vediamo se mi spiego meglio.
Immagina di avere 256 tiles numerati ovviamente da 0 a 255.
Adesso riserva un'area di memoria di 256 bytes ad una tabella per gli attributi dei tiles: per esempio scegliamo l'area che si estende da $C000 a $C0FF (cioè da 49152 a 49407). Ogni singola locazione dovrà contenere informazioni utili alla gestione di ogni singolo tile. Immaginiamo che:
- #$00 --> Indica che il tile fa parte dello sfondo per cui, di fatto, non influenza in alcun modo il gioco o i suoi sprites.
- #$01 --> Indica che il tile contiene "elementi" che uccidono l'eroe, per cui se toccati da un suo sprite ne causano la morte.
- #$02 --> Indica che il tile contiene una porta che consente, se toccato dallo sprite dell'eroe, di saltare... chessò... ad un nuovo livello di gioco.
- etc etc
Ora che ti resta da fare? Semplice. Durante il gioco, quando controlli le collisioni tra gli sprites e lo sfondo, devi determinare con quale tile sono venuti in "collisione". Ad esempio, immaginiamo che lo sprite dell'eroe abbia toccato il tile numero 7...
LDX #$07 ;cioè il numero del tile che andiamo a esaminare
LDA $C000,X ;la locazione in cui inizia la "tabella" attributi
BNE CONFRONTO1
JMP TILEDISFONDO
CONFRONTO1 CMP #$01
BNE CONFRONTO2
JMP MORTEDELLEROE
CONFRONTO2 CMP #$02
BNE FINECONFRONTI
JMP LIVELLOSUCCESSIVO
FINECONFRONTI RTS
In pratica non facciamo altro che andare a leggere il valore posto nella locazione $C007 (cioè $C000 + #$07, che contiene le informazioni per il tile numero 7, appunto) e in base al suo contenuto saltiamo a delle apposite routine che svolgano determinate funzioni: TILEDISFONDO (non facciamo nulla), MORTEDELLEROE (ucciadiamo l'eroe, ricominciamo lo stesso livello o determiniamo il game over), LIVELLOSUCCESSIVO (carichiamo il livello successivo di gioco). Come avrai capito, hai la possibilità di definire fino a 256 "attributi" possibili per ogni tile.
Questo è il sistema che uso io. Spero ti sia stato chiaro.
Lo stesso sistema lo puoi, in grande, pensare anche per la gestione dei personaggi che devono caratterizzare ogni livello che andrai a realizzare.
Spero, un minimo, di esserti stato utile.