• Advertisement

Archived

This topic is now archived and is closed to further replies.

Tanstaafl Iso Blt and MouseMap

This topic is 6247 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi, i have some problems with his methods. I am using this Drawing Method:
  
	int WhereX; // Where are we currently rendering on the map?

	int WhereY;

	WhereY = WorldY;
	WhereX = WorldX;

	int x, y, X_Overlap=32, Y_Overlap=15;
	for(y = 0; y < 35; y++)
	{   
		for(x = 0; x < 25; x++)   
		{	
		
			// Set the Foreground Pos

			tile_texfg.x = x+2*X_Overlap*x+(X_Overlap)*(y&1);   // ScreenX;

			tile_texfg.y = y+Y_Overlap*y;
			tile_texfg.curr_frame = level->Map[2][WhereX][WhereY].TileID; // Last Layer ( Foreground )

				
			
				tile_texfg.Draw_Graphics( );
			
			WhereX++;

		}
		WhereY++;

		WhereX = WorldX;
	}

  
With this the this method all Tile were draw correct. Scrolling to X is correct but when i am scrolling Y the tile are not drawing correctly. Is there a better method to draw like Tanstaafl''s Staggered Map Iso? Then i am using his MouseMap method ( Really Great! )
  
void pointer_get_map_coords( int CoordX, int CoordY, int *mapx, int *mapy )
{
	/*
	int x, y;
   // get the x and y positions on screen relative to scroll and center coords
	x = (CoordX + world.WorldX)/64;
	y = (CoordY + world.WorldY)/64;

   // store the results
   *mapx = x;
   *mapy = y;

  */

	int RegionX =((CoordX)/64);
	int RegionY =((CoordY)/32)*2; // The multiplying by two is very important


	int MouseMapX = CoordX % 64;
	int MouseMapY = CoordY % 32;


	int RegionDX;
	int	RegionDY;

	lpddtileex->Lock(NULL, &ddsd, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT, NULL );
  
	// make a couple aliases to make code cleaner, so we don''t

	// have to cast

	int mempitch        = (int)ddsd.lPitch;
	USHORT *video_buffer = (USHORT *)ddsd.lpSurface;
    
	DWORD color = video_buffer[MouseMapX+MouseMapY*(mempitch>>1)];

	lpddtileex->Unlock( NULL );


	if ( color == 63488 ) // Red ( Links Oben )

	{
		RegionDX = -1;
		RegionDY = -1;
	}
	if ( color == 65504 ) // Gelb ( Rechts Oben )

	{
		RegionDX = 0;
		RegionDY = -1;
	}
	if ( color == 65535 ) // White ( Tile )

	{
		RegionDX = 0;
		RegionDY = 0;
	}
	if ( color == 2016 ) // Green ( Links Unten )

	{
		RegionDX = -1;
		RegionDY = 1;
	}
	if ( color == 31 ) // Blue ( Rechts Unten )

	{
		RegionDX = 0;
		RegionDY = 1;

	}

	int result_x = RegionX + RegionDX;
	int result_y = RegionY + RegionDY;

	if ( result_x < 0 )
		result_x =0;
	if ( result_y < 0 )
		result_y =0;


	*mapx = result_x;
	*mapy = result_y;
}
  
this method works but how i can implement the feature when i am for Example at world.x = 15, world.y = 5; And then there is a problem with the X_ADJUST because i don`t know how i can implement it. Thanx Lutz Hören [ Power Productions ]

Share this post


Link to post
Share on other sites
Advertisement

  • Advertisement