Help Make Scrolling!!!

For anything related to VDP (plane, color, sprite, tiles)

Moderators: BigEvilCorporation, Mask of Destiny

Post Reply
Mixail
Very interested
Posts: 133
Joined: Thu Nov 18, 2010 4:47 pm

Help Make Scrolling!!!

Post by Mixail » Fri Mar 11, 2011 4:29 pm

How to make what the screen didn't twitch at the moment of update???

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);
			}

        }
	
}






Post Reply