1
0
Disbranĉigi 0

Vertical ranges for tilemapping; map-refactoring

This commit is contained in:
Jaidyn Ann 2020-10-20 20:44:34 -05:00
parent ac9d7ed3b2
commit b9a09cb3a3
2 changed files with 52 additions and 42 deletions

94
sbp.mfk
View File

@ -1,6 +1,5 @@
/// SUPER BREAD PAN
// SUPERPANSKATOL'
// Based on Garydos'es Pong example
import nes_joy
@ -17,7 +16,6 @@ struct Sprite {
byte x
}
// abstraction for 16x16 animated monstrosities
// ============================================================================
@ -468,6 +466,7 @@ inline void draw_score() {
// ============================================================================
// ENTITIES
// ============================================================================
// abstraction for 16x16 animated monstrosities
struct Entity {
Sprite top0, // left side, for the record
Sprite bottom0,
@ -641,7 +640,8 @@ void entity_destiny ( pointer.Entity ent ) {
// ============================================================================
// load a map onto the ppu
void init_map ( pointer.word locations, pointer location_tiles,
pointer.word ranges, pointer range_tiles,
pointer.word horiz_ranges, pointer horiz_tiles,
pointer.word vert_ranges, pointer vert_tiles,
pointer pallete, pointer attrs ) {
byte i
word j
@ -653,21 +653,45 @@ void init_map ( pointer.word locations, pointer location_tiles,
load_attr_table( attrs )
blank_bg()
read_ppu_status()
init_map_horiz_ranges( horiz_ranges, horiz_tiles )
init_map_vert_ranges ( vert_ranges, vert_tiles )
init_map_locations( locations, location_tiles )
}
// init_map helpers
// -----------------
macro void init_map_horiz_ranges ( pointer.word horiz_ranges, pointer horiz_tiles ) {
const byte horiz_inc = $1
ppu_load_range( horiz_ranges, horiz_tiles, horiz_inc )
}
macro void init_map_vert_ranges ( pointer.word vert_ranges, pointer vert_tiles ) {
const byte vert_inc = $20
ppu_load_range( vert_ranges, vert_tiles, vert_inc )
}
macro void init_map_locations ( pointer.word locations, pointer location_tiles ) {
i = 0
while ( locations[i] != nullchar ) {
ppu_set_addr(ppu_nametable_ram + locations[i])
ppu_write_data(location_tiles[i])
i += 1
}
}
macro void ppu_load_range ( pointer.word ranges, pointer tiles, byte increment ) {
i = 0
last_range = 0
while ( ranges[i] != nullchar ) {
if last_range != 0 {
ppu_set_addr(ppu_nametable_ram + ranges[i-1])
for j,ranges[i-1],to,ranges[i] {
ppu_write_data(range_tiles[i/2])
j = ranges[i-1]
while ( j <= ranges[i] ) {
ppu_set_addr( ppu_nametable_ram + j )
ppu_write_data(tiles[i/2]) // bug when i==1?
j += increment
}
last_range = 0
} else {
@ -677,48 +701,34 @@ void init_map ( pointer.word locations, pointer location_tiles,
}
}
void init_map1_c () {
init_map( pointer.word( MAP1_C_LOCATIONS ), MAP1_C_LOCATION_TILES,
pointer.word( MAP1_C_RANGES ), MAP1_C_RANGE_TILES,
MAP1_C_PALLETE, MAP1_C_ATTRS )
}
// -------------------------------------
// MAP DATA
// -------------------------------------
// map1: construction site
// not the most efficient way to store this data.
// _RANGES is for horizontal lines, left to right.
// _LOCATIONS should only be used for one-off, random blocks. right now it's used
// for manually typing in vertical lines, gross.
void init_map1_c () {
init_map( pointer.word( MAP1_C_LOCATIONS ), MAP1_C_LOCATION_TILES,
pointer.word( MAP1_C_HORIZ ), MAP1_C_HORIZ_TILES,
pointer.word( MAP1_C_VERT ), MAP1_C_VERT_TILES,
MAP1_C_PALLETE, MAP1_C_ATTRS )
}
const array(word) MAP1_C_LOCATIONS = [
// border pillars (far left and right)
$22,$3D, $42,$5D, $62,$7D, $82,$9D,
$A2,$BD, $C2,$DD, $E2,$FD, $102,$11D,
$122,$13D, $142,$15D, $162,$17D, $182,$19D,
$1A2,$1BD, $1C2,$1DD, $1E2,$1FD, $202,$21D,
$222,$23D, $242,$25D, $262,$27D, $282,$29D,
$2A2,$2BD, $2C2,$2DD, $2E2,$2FD,
// lift up top platform
$A,$2A,$4A,$6A,$8A,$AA,$CA,$EA,
$15,$35,$55,$75,$95,$B5,$D5,$F5,
// lift up bottom platform
$26A,$28A,$2AA,$2CA,$2EA,$30A,
$275,$295,$2B5,$2D5,$2F5,$315,
$22,$3D, $1A2,$1BD, $2E2,$2FD, // bolted parts of arena border
$EA,$F5, $26A,$275, // holding up bottom/top platforms w connecting metal
nullchar ]
const array(byte) MAP1_C_LOCATION_TILES = [
$81,$81, $82,$82, $82,$82, $82,$82,
$82,$82, $82,$82, $82,$82, $82,$82,
$82,$82, $82,$82, $82,$82, $82,$82,
$81,$81, $82,$82, $82,$82, $82,$82,
$82,$82, $82,$82, $82,$82, $82,$82,
$82,$82, $82,$82, $81,$81,
$85,$85,$85,$85,$85,$85,$85,$89,
$86,$86,$86,$86,$86,$86,$86,$8A,
$87,$85,$85,$85,$85,$85,
$88,$86,$86,$86,$86,$86 ]
const array(byte) MAP1_C_LOCATION_TILES = [
$81,$81, $81,$81, $81,$81,
$89,$8A, $87,$88 ]
const array(word) MAP1_C_RANGES = [
const array(word) MAP1_C_VERT = [
$22,$2E2, $3D,$2FD, // arena border (far left & right)
$4A,$EA, $55,$F5, // lift up top platform
$26A,$30A, $275,$315, // hold up bottom platform
nullchar ]
const array(byte) MAP1_C_VERT_TILES = [ $82,$82, $85,$86, $85,$86 ]
const array(word) MAP1_C_HORIZ = [
$340,$3A0, // sandstone subterrain
$300,$308, $317,$31F, // brick floor (top)
$320,$32E, $331,$33F, // brick floor (second)
@ -727,7 +737,7 @@ const array(word) MAP1_C_RANGES = [
$1A3,$1A8, $1B7,$1BC, // middle platforms
$249,$256, // bottom platform
nullchar ]
const array(byte) MAP1_C_RANGE_TILES = [ $84, $83,$83,$83,$83, $80,$80, $80, $80,$80, $80 ]
const array(byte) MAP1_C_HORIZ_TILES = [ $84, $83,$83, $83,$83, $80,$80, $80, $80,$80, $80 ]
const array(byte) MAP1_C_PALLETE = [ $21, // bg color
$29,$1A,$0F, $00,

BIN
sbp.nes

Binary file not shown.