Internal Viewport 270p (480x270)
This commit is contained in:
parent
6a681ba4bc
commit
1ab2898f5e
@ -26,6 +26,13 @@ use std::path::PathBuf;
|
|||||||
|
|
||||||
const STRESS_GLYPH_ASSET_ID: AssetId = 100;
|
const STRESS_GLYPH_ASSET_ID: AssetId = 100;
|
||||||
const STRESS_SCENE_ASSET_ID: AssetId = 1;
|
const STRESS_SCENE_ASSET_ID: AssetId = 1;
|
||||||
|
const STRESS_VIEWPORT_W: i32 = 480;
|
||||||
|
const STRESS_VIEWPORT_H: i32 = 270;
|
||||||
|
const STRESS_SPRITE_COLS: i32 = 48;
|
||||||
|
const STRESS_SPRITE_ROWS: i32 = 24;
|
||||||
|
const STRESS_SPRITE_SPACING_PX: i32 = 10;
|
||||||
|
const STRESS_SCENE_TILE_W: usize = 96;
|
||||||
|
const STRESS_SCENE_TILE_H: usize = 64;
|
||||||
|
|
||||||
fn asm(s: &str) -> Vec<u8> {
|
fn asm(s: &str) -> Vec<u8> {
|
||||||
assemble(s).expect("assemble")
|
assemble(s).expect("assemble")
|
||||||
@ -141,34 +148,38 @@ fn heavy_load(rom: &mut Vec<u8>) {
|
|||||||
|
|
||||||
rom.extend(asm("PUSH_I32 0\nHOSTCALL 0"));
|
rom.extend(asm("PUSH_I32 0\nHOSTCALL 0"));
|
||||||
|
|
||||||
rom.extend(asm(
|
let scene_width_px = (STRESS_SCENE_TILE_W * 8) as i32;
|
||||||
"GET_GLOBAL 0\nPUSH_I32 2\nMUL\nPUSH_I32 192\nMOD\nGET_GLOBAL 0\nPUSH_I32 76\nMOD\nHOSTCALL 4",
|
let scene_height_px = (STRESS_SCENE_TILE_H * 8) as i32;
|
||||||
));
|
let camera_x_span = scene_width_px - STRESS_VIEWPORT_W;
|
||||||
|
let camera_y_span = scene_height_px - STRESS_VIEWPORT_H;
|
||||||
|
rom.extend(asm(&format!(
|
||||||
|
"GET_GLOBAL 0\nPUSH_I32 2\nMUL\nPUSH_I32 {camera_x_span}\nMOD\nGET_GLOBAL 0\nPUSH_I32 {camera_y_span}\nMOD\nHOSTCALL 4"
|
||||||
|
)));
|
||||||
|
|
||||||
rom.extend(asm("PUSH_I32 0\nSET_LOCAL 0"));
|
rom.extend(asm("PUSH_I32 0\nSET_LOCAL 0"));
|
||||||
let row_loop_start = rom.len() as u32;
|
let row_loop_start = rom.len() as u32;
|
||||||
rom.extend(asm("GET_LOCAL 0\nPUSH_I32 16\nLT"));
|
rom.extend(asm(&format!("GET_LOCAL 0\nPUSH_I32 {STRESS_SPRITE_ROWS}\nLT")));
|
||||||
let jif_row_end_offset = rom.len() + 2;
|
let jif_row_end_offset = rom.len() + 2;
|
||||||
rom.extend(asm("JMP_IF_FALSE 0"));
|
rom.extend(asm("JMP_IF_FALSE 0"));
|
||||||
|
|
||||||
rom.extend(asm("PUSH_I32 0\nSET_LOCAL 1"));
|
rom.extend(asm("PUSH_I32 0\nSET_LOCAL 1"));
|
||||||
let col_loop_start = rom.len() as u32;
|
let col_loop_start = rom.len() as u32;
|
||||||
rom.extend(asm("GET_LOCAL 1\nPUSH_I32 32\nLT"));
|
rom.extend(asm(&format!("GET_LOCAL 1\nPUSH_I32 {STRESS_SPRITE_COLS}\nLT")));
|
||||||
let jif_col_end_offset = rom.len() + 2;
|
let jif_col_end_offset = rom.len() + 2;
|
||||||
rom.extend(asm("JMP_IF_FALSE 0"));
|
rom.extend(asm("JMP_IF_FALSE 0"));
|
||||||
|
|
||||||
rom.extend(asm(
|
rom.extend(asm(&format!(
|
||||||
"PUSH_I32 0\n\
|
"PUSH_I32 0\n\
|
||||||
GET_LOCAL 0\nPUSH_I32 32\nMUL\nGET_LOCAL 1\nADD\nGET_GLOBAL 0\nADD\nPUSH_I32 15\nMOD\nPUSH_I32 1\nADD\n\
|
GET_LOCAL 0\nPUSH_I32 {STRESS_SPRITE_COLS}\nMUL\nGET_LOCAL 1\nADD\nGET_GLOBAL 0\nADD\nPUSH_I32 15\nMOD\nPUSH_I32 1\nADD\n\
|
||||||
GET_LOCAL 1\nPUSH_I32 10\nMUL\nGET_GLOBAL 0\nPUSH_I32 10\nMOD\nADD\nPUSH_I32 320\nMOD\n\
|
GET_LOCAL 1\nPUSH_I32 {STRESS_SPRITE_SPACING_PX}\nMUL\nGET_GLOBAL 0\nPUSH_I32 10\nMOD\nADD\nPUSH_I32 {STRESS_VIEWPORT_W}\nMOD\n\
|
||||||
GET_LOCAL 0\nPUSH_I32 10\nMUL\nGET_GLOBAL 0\nPUSH_I32 2\nMUL\nPUSH_I32 10\nMOD\nADD\nPUSH_I32 180\nMOD\n\
|
GET_LOCAL 0\nPUSH_I32 {STRESS_SPRITE_SPACING_PX}\nMUL\nGET_GLOBAL 0\nPUSH_I32 2\nMUL\nPUSH_I32 10\nMOD\nADD\nPUSH_I32 {STRESS_VIEWPORT_H}\nMOD\n\
|
||||||
GET_LOCAL 0\nGET_LOCAL 1\nADD\nGET_GLOBAL 0\nADD\nPUSH_I32 4\nMOD\n\
|
GET_LOCAL 0\nGET_LOCAL 1\nADD\nGET_GLOBAL 0\nADD\nPUSH_I32 4\nMOD\n\
|
||||||
PUSH_I32 0\n\
|
PUSH_I32 0\n\
|
||||||
GET_LOCAL 1\nGET_GLOBAL 0\nADD\nPUSH_I32 1\nBIT_AND\nPUSH_I32 0\nNEQ\n\
|
GET_LOCAL 1\nGET_GLOBAL 0\nADD\nPUSH_I32 1\nBIT_AND\nPUSH_I32 0\nNEQ\n\
|
||||||
GET_LOCAL 0\nGET_GLOBAL 0\nADD\nPUSH_I32 1\nBIT_AND\nPUSH_I32 0\nNEQ\n\
|
GET_LOCAL 0\nGET_GLOBAL 0\nADD\nPUSH_I32 1\nBIT_AND\nPUSH_I32 0\nNEQ\n\
|
||||||
GET_LOCAL 0\nGET_LOCAL 1\nADD\nPUSH_I32 4\nMOD\n\
|
GET_LOCAL 0\nGET_LOCAL 1\nADD\nPUSH_I32 4\nMOD\n\
|
||||||
HOSTCALL 5\nPOP_N 1",
|
HOSTCALL 5\nPOP_N 1"
|
||||||
));
|
)));
|
||||||
|
|
||||||
rom.extend(asm("GET_LOCAL 1\nPUSH_I32 1\nADD\nSET_LOCAL 1"));
|
rom.extend(asm("GET_LOCAL 1\nPUSH_I32 1\nADD\nSET_LOCAL 1"));
|
||||||
let jmp_col_loop_offset = rom.len() + 2;
|
let jmp_col_loop_offset = rom.len() + 2;
|
||||||
@ -180,23 +191,23 @@ fn heavy_load(rom: &mut Vec<u8>) {
|
|||||||
rom.extend(asm("JMP 0"));
|
rom.extend(asm("JMP 0"));
|
||||||
let row_loop_end = rom.len() as u32;
|
let row_loop_end = rom.len() as u32;
|
||||||
|
|
||||||
rom.extend(asm("GET_GLOBAL 0\nPUSH_I32 3\nMUL\nPUSH_I32 220\nMOD\n\
|
rom.extend(asm("GET_GLOBAL 0\nPUSH_I32 3\nMUL\nPUSH_I32 380\nMOD\n\
|
||||||
PUSH_I32 8\n\
|
PUSH_I32 8\n\
|
||||||
PUSH_CONST 0\n\
|
PUSH_CONST 0\n\
|
||||||
GET_GLOBAL 0\nPUSH_I32 2047\nMUL\nPUSH_I32 65535\nBIT_AND\n\
|
GET_GLOBAL 0\nPUSH_I32 2047\nMUL\nPUSH_I32 65535\nBIT_AND\n\
|
||||||
HOSTCALL 1"));
|
HOSTCALL 1"));
|
||||||
rom.extend(asm("PUSH_I32 12\n\
|
rom.extend(asm("PUSH_I32 16\n\
|
||||||
GET_GLOBAL 0\nPUSH_I32 2\nMUL\nPUSH_I32 120\nMOD\nPUSH_I32 24\nADD\n\
|
GET_GLOBAL 0\nPUSH_I32 2\nMUL\nPUSH_I32 186\nMOD\nPUSH_I32 32\nADD\n\
|
||||||
PUSH_CONST 1\n\
|
PUSH_CONST 1\n\
|
||||||
GET_GLOBAL 0\nPUSH_I32 4093\nMUL\nPUSH_I32 65535\nBIT_AND\n\
|
GET_GLOBAL 0\nPUSH_I32 4093\nMUL\nPUSH_I32 65535\nBIT_AND\n\
|
||||||
HOSTCALL 1"));
|
HOSTCALL 1"));
|
||||||
rom.extend(asm("PUSH_I32 220\n\
|
rom.extend(asm("PUSH_I32 336\n\
|
||||||
GET_GLOBAL 0\nPUSH_I32 5\nMUL\nPUSH_I32 140\nMOD\n\
|
GET_GLOBAL 0\nPUSH_I32 5\nMUL\nPUSH_I32 194\nMOD\n\
|
||||||
PUSH_CONST 2\n\
|
PUSH_CONST 2\n\
|
||||||
GET_GLOBAL 0\nPUSH_I32 1237\nMUL\nPUSH_I32 65535\nBIT_AND\n\
|
GET_GLOBAL 0\nPUSH_I32 1237\nMUL\nPUSH_I32 65535\nBIT_AND\n\
|
||||||
HOSTCALL 1"));
|
HOSTCALL 1"));
|
||||||
rom.extend(asm("GET_GLOBAL 0\nPUSH_I32 4\nMUL\nPUSH_I32 180\nMOD\nPUSH_I32 80\nADD\n\
|
rom.extend(asm("GET_GLOBAL 0\nPUSH_I32 4\nMUL\nPUSH_I32 240\nMOD\nPUSH_I32 112\nADD\n\
|
||||||
GET_GLOBAL 0\nPUSH_I32 3\nMUL\nPUSH_I32 90\nMOD\nPUSH_I32 70\nADD\n\
|
GET_GLOBAL 0\nPUSH_I32 3\nMUL\nPUSH_I32 120\nMOD\nPUSH_I32 88\nADD\n\
|
||||||
PUSH_CONST 3\n\
|
PUSH_CONST 3\n\
|
||||||
GET_GLOBAL 0\nPUSH_I32 3001\nMUL\nPUSH_I32 65535\nBIT_AND\n\
|
GET_GLOBAL 0\nPUSH_I32 3001\nMUL\nPUSH_I32 65535\nBIT_AND\n\
|
||||||
HOSTCALL 1"));
|
HOSTCALL 1"));
|
||||||
@ -326,19 +337,23 @@ fn build_scene_bank() -> SceneBank {
|
|||||||
flip_x: false,
|
flip_x: false,
|
||||||
flip_y: false,
|
flip_y: false,
|
||||||
};
|
};
|
||||||
64 * 32
|
STRESS_SCENE_TILE_W * STRESS_SCENE_TILE_H
|
||||||
];
|
];
|
||||||
|
|
||||||
for step in 0..8 {
|
for y in 0..STRESS_SCENE_TILE_H {
|
||||||
let x = 4 + step * 7 + layer_index * 2;
|
for x in 0..STRESS_SCENE_TILE_W {
|
||||||
let y = 2 + step * 3 + layer_index * 2;
|
let diagonal = (x + layer_index * 2) % 11 == (y * 2) % 11;
|
||||||
let index = y * 64 + x;
|
let stripe = (x / 6 + y / 5 + layer_index) % 5 == 0;
|
||||||
tiles[index] = Tile {
|
if diagonal || stripe {
|
||||||
active: true,
|
let index = y * STRESS_SCENE_TILE_W + x;
|
||||||
glyph: Glyph { glyph_id: 0, palette_id: layer_index as u8 + 1 },
|
tiles[index] = Tile {
|
||||||
flip_x: false,
|
active: true,
|
||||||
flip_y: false,
|
glyph: Glyph { glyph_id: 0, palette_id: layer_index as u8 + 1 },
|
||||||
};
|
flip_x: false,
|
||||||
|
flip_y: false,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SceneLayer {
|
SceneLayer {
|
||||||
@ -351,15 +366,19 @@ fn build_scene_bank() -> SceneBank {
|
|||||||
2 => ParallaxFactor { x: 0.5, y: 0.5 },
|
2 => ParallaxFactor { x: 0.5, y: 0.5 },
|
||||||
_ => ParallaxFactor { x: 0.25, y: 0.25 },
|
_ => ParallaxFactor { x: 0.25, y: 0.25 },
|
||||||
},
|
},
|
||||||
tilemap: TileMap { width: 64, height: 32, tiles },
|
tilemap: TileMap {
|
||||||
|
width: STRESS_SCENE_TILE_W,
|
||||||
|
height: STRESS_SCENE_TILE_H,
|
||||||
|
tiles,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Keep the farthest layer a bit sparser so the diagonal remains visually readable.
|
// Keep the farthest layer a bit sparser so the diagonal remains visually readable.
|
||||||
for step in 0..4 {
|
for step in 0..12 {
|
||||||
let x = 10 + step * 12;
|
let x = 10 + step * 7;
|
||||||
let y = 4 + step * 5;
|
let y = 4 + step * 3;
|
||||||
let index = y * 64 + x;
|
let index = y * STRESS_SCENE_TILE_W + x;
|
||||||
layers[3].tilemap.tiles[index].active = false;
|
layers[3].tilemap.tiles[index].active = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user