Code: Select all
#include <genesis.h>
#include "resmap.h"
#include "map.h"
void dvizenie (int joy1);
void loadMap (int map_x, int map_y);
void joyEvent(u16 joy, u16 changed, u16 state);
int cameraX;
int cameraY;
int loadmapX;
int loadmapY;
int razmerMapX;
int razmerMapY;
int ix;
int iy;
u8 screen_buff[97*100];
u16 screen_buffBplan[65*65];
int main() {
VDP_init();
int joy1;
cameraX=0;
cameraY=0;
razmerMapX=97;
razmerMapY=71;
loadmapX=64;
loadmapY=64;
VDP_loadTileTo(fonL1, 352, 128, 0);
VDP_setPalette(3, fonL1pal);
int load=0;
loadMap (razmerMapX, razmerMapY);
VDP_setTileRectDma(BPLAN, screen_buffBplan, 0, 0, loadmapX, loadmapY);
VDP_setTileRectDma(APLAN, screen_buff, 0, 0, loadmapX, loadmapY);
for (;;)
{
if (ix==-96){load=0;ix=0;VDP_setHorizontalScroll(BPLAN, 0, -96);VDP_setTileRectDma(BPLAN, screen_buffBplan, 0, 0, loadmapX, loadmapY); }
if (ix==96){load=0;ix=0;VDP_setHorizontalScroll(BPLAN, 0, -96);VDP_setTileRectDma(BPLAN, screen_buffBplan, 0, 0, loadmapX, loadmapY); }
if (iy==-96){load=0;iy=0;VDP_setVerticalScroll(BPLAN, 0, iy+96); VDP_setTileRectDma(BPLAN, screen_buffBplan, 0, 0, loadmapX, loadmapY); }
if (iy==96){load=0;iy=0; VDP_setVerticalScroll(BPLAN, 0, iy+96);VDP_setTileRectDma(BPLAN, screen_buffBplan, 0, 0, loadmapX, loadmapY);}
joy1 = JOY_readJoypad(JOY_1);
dvizenie (joy1);
if (ix==-96){cameraX+=12; loadMap (razmerMapX, razmerMapY);}
if (ix==96){cameraX-=12; loadMap (razmerMapX, razmerMapY);}
if (iy==-96){cameraY-=12;loadMap (razmerMapX, razmerMapY);}
if (iy==96){cameraY+=12; loadMap (razmerMapX, razmerMapY);}
sleepFrames(2);
if (load==0){load=1;
VDP_setHorizontalScroll(APLAN, 0, ix-96);
VDP_setVerticalScroll(APLAN, 0, iy+96);
VDP_setTileRectDma(APLAN, screen_buff, 0, 0, loadmapX, loadmapY);
}
if (load==1){
VDP_setHorizontalScroll(BPLAN, 0, ix-96);
VDP_setVerticalScroll(BPLAN, 0, iy+96);
VDP_setHorizontalScroll(APLAN, 0, ix-96);
VDP_setVerticalScroll(APLAN, 0, iy+96);
}
VDP_waitVSync;
VDP_updateSprites();
}
return 0;
}
void dvizenie (int joy1)// управление
{
if (joy1 & BUTTON_RIGHT){ix=ix-2; }
if (joy1 & BUTTON_LEFT){ix=ix+2; }
if (joy1 & BUTTON_UP){iy=iy-2; }
if (joy1 & BUTTON_DOWN){iy=iy+2;}
}
void loadMap (int map_x, int map_y){
u16 xF = 0;
u16 yF = 0;
u16 iF = 0;
u16 *map_ptr;
u16 *map_ptr2;
u16 *screen_ptr;
u16 *screen_ptr2;
screen_ptr = screen_buff;
screen_ptr2 = screen_buffBplan;
for (yF = 0; yF < loadmapY; yF++) {
map_ptr = &map_A[(yF+cameraY) *(map_x)+cameraX];
map_ptr2 = &map_B[(yF+cameraY) *(map_x)+cameraX];
for (iF = 0; iF < loadmapX; iF++){
*(screen_ptr++) = *(map_ptr++)| TILE_ATTR(3, 0, 0, 0);
*(screen_ptr2++) = *(map_ptr2++)| TILE_ATTR(3, 0, 0, 0);
}
}
}