Optimized level-loading a bit

This commit is contained in:
Simponic 2020-08-15 15:59:31 -06:00
parent 3020917b0b
commit ee3af6b1f0
6 changed files with 49 additions and 35 deletions

View File

@ -1,8 +1,8 @@
#include "types.h" #include "types.h"
#include <string.h>
#ifndef MAP_H #ifndef MAP_H
#define MAP_H #define MAP_H
extern const int map1[9][20]; extern const int map1[9][40];
#endif // MAP_H #endif // MAP_H

View File

@ -29,5 +29,4 @@ void applyGravity();
void scalePlayer(); void scalePlayer();
void updatePlayer(); void updatePlayer();
#endif // PLAYEROBJECT_H #endif // PLAYEROBJECT_H

View File

@ -18,7 +18,9 @@ OBJ_ATTR obj_buffer[128];
OBJ_AFFINE *obj_aff_buffer= (OBJ_AFFINE*)obj_buffer; // Object affine-buffer OBJ_AFFINE *obj_aff_buffer= (OBJ_AFFINE*)obj_buffer; // Object affine-buffer
int main() { int main() {
memcpy(pal_obj_mem, blockPal, blockPalLen);
memcpy(pal_obj_mem, blockPal, blockPalLen); // Copy block pallete to pallete bank
// Copy sprites to OAM
memcpy(&tile_mem[4][0], playerTiles, playerTilesLen); memcpy(&tile_mem[4][0], playerTiles, playerTilesLen);
memcpy(&tile_mem[4][4], blockTiles, blockTilesLen); memcpy(&tile_mem[4][4], blockTiles, blockTilesLen);
memcpy(&tile_mem[4][8], spikeTiles, spikeTilesLen); memcpy(&tile_mem[4][8], spikeTiles, spikeTilesLen);
@ -29,15 +31,21 @@ int main() {
playerObject player = createPlayerObject(&obj_buffer[0], &obj_aff_buffer[0],0, 0); playerObject player = createPlayerObject(&obj_buffer[0], &obj_aff_buffer[0],0, 0);
player.camera = createCamera(-10, 0); player.camera = createCamera(-10, 0);
int currentGroundLevel = 140; int currentXLevel = 0;
int currentXLevel = 1; int playing = 1;
while(playing) {
while(1) {
vid_vsync(); vid_vsync();
player.camera.x += 1; if (key_is_down(KEY_START) || currentXLevel >= 39) {
oam_init(obj_buffer, 128);
currentXLevel = 0;
player = createPlayerObject(&obj_buffer[0], &obj_aff_buffer[0],0, 0);
player.camera = createCamera(-10, 0);
}
player.camera.x += 2;
key_poll(); key_poll();
if (player.camera.x % 16 == 15) { if ((player.camera.x + 10)% 16 == 0) {
currentXLevel++; currentXLevel++;
} }
@ -45,6 +53,7 @@ int main() {
player.vel.dy -= 9 << FIX_SHIFT; player.vel.dy -= 9 << FIX_SHIFT;
} }
//updatePlayer(&player, 80); //updatePlayer(&player, 80);
obj_affine_copy(obj_aff_mem, player.affine, 1); obj_affine_copy(obj_aff_mem, player.affine, 1);
obj_copy(obj_mem, player.obj, 1); obj_copy(obj_mem, player.obj, 1);
@ -60,26 +69,32 @@ int main() {
ATTR1_SIZE_16, ATTR1_SIZE_16,
ATTR2_PALBANK(0) | 8 ATTR2_PALBANK(0) | 8
); );
int x, y; int x, y;
int currentMemoryLocation = 3;
for (int i = 0; i < 9; i++) { for (int i = 0; i < 9; i++) {
for (int j = 0; j < 15; j++){ for (int j = currentXLevel - 1; j < (currentXLevel + 15); j++){
x = (j * 16);
y = (i * 16); y = (i * 16);
x = (j * 16);
applyCameraShift(&player.camera, &x, &y); applyCameraShift(&player.camera, &x, &y);
if (map1[i][j] == 1) { if (x + 16 > 0 && x <= 240 && (currentXLevel) < 40){
if (j == currentXLevel) { if (map1[i][j] == 1) {
updatePlayer(&player, 16 * i - 16); currentMemoryLocation++;
} if (j == currentXLevel) {
obj_set_pos(&blockObject, x, y); updatePlayer(&player, 16 * i - 16);
obj_copy(obj_mem + (16 * i + j) + 1, &blockObject, 1); }
} obj_set_pos(&blockObject, x, y);
else if (map1[i][j] == 2) { obj_copy(obj_mem + currentMemoryLocation, &blockObject, 1);
obj_set_pos(&spikeObject, x, y); }
obj_copy(obj_mem + (16 * i + j) + 1, &spikeObject, 1); else if (map1[i][j] == 2) {
currentMemoryLocation++;
obj_set_pos(&spikeObject, x, y);
obj_copy(obj_mem + currentMemoryLocation, &spikeObject, 1);
}
} }
} }
} }
} }
return 0; return 0;

View File

@ -1,12 +1,12 @@
#include "../include/map.h" #include "../include/map.h"
const int map1[9][20] = { const int map1[9][40] = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, 0, 1 },
{0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 2, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1 },
{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1 },
{1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1 },
}; };

View File

@ -3,7 +3,7 @@
void initializePlayerObject (playerObject *object) { void initializePlayerObject (playerObject *object) {
// Initialize the point and velocity of a player object // Initialize the point and velocity of a player object
object->vel = createVelocity(0, 0); object->vel = createVelocity(0, 0);
object->pt = createPoint(15 << FIX_SHIFT, 0 << FIX_SHIFT); object->pt = createPoint(0 << FIX_SHIFT, 60 << FIX_SHIFT);
} }
playerObject createPlayerObject (OBJ_ATTR *obj_buffer, OBJ_AFFINE *affine_buffer, int pallete_bank, int tile_id) { playerObject createPlayerObject (OBJ_ATTR *obj_buffer, OBJ_AFFINE *affine_buffer, int pallete_bank, int tile_id) {

View File

@ -78,5 +78,5 @@ void obj_affine_copy (OBJ_AFFINE *dst, const OBJ_AFFINE *src, u32 count) {
void obj_affine_identity(OBJ_AFFINE *aff) { void obj_affine_identity(OBJ_AFFINE *aff) {
// Make a pointer point to a identity affine matrix // Make a pointer point to a identity affine matrix
aff->pa = 1 << 8; aff->pb = 0; aff->pa = 1 << 8; aff->pb = 0;
aff->pc = 0 ; aff->pd = 1 << 8; aff->pc = 0 ; aff->pd = 1 << 8;
} }