← index
Old.Learning.Projects/mrpg2k/Hero.cpp
Source: Old.Learning.Projects/mrpg2k/Hero.cpp
// the games hero source module

// written by jared bruni

// www.lostsidedead.com



/* copyright notice

  this software or any software I write, is stricly for educational
  uses only. you are not allowed to take my code, and use it in
  anything which is sold.
  open source, open mind
*/

#include "thehead.h"



// load up the hero

void Hero::load()
{
	mxhwnd.LoadGraphic(&hero_graphic,"pes.bmp");
	hero_graphic.SetColorKey(RGB(255,0,255));
	cur_sprite = 1;
	setheropos(20 + 20 -1);	
}

// update the hero

void Hero::update()
{
	drawhero();
	keycheck();
}

// set the hero position

void Hero::setheropos(int pos)
{
	hero_pos = pos;
}

// draw the hero

void Hero::drawhero()
{
	int start_x = 80;
	int start_y = 80;

	int sx = start_x;
	int sy = start_y;

	int row_count = 0;

	for(int i = 0; i < LevelSize; i++)
	{
		if(i == hero_pos)
		{
			drawsprite(sx,sy,cur_sprite);
			return;
		}

		row_count ++;

		sy = sy + 16;

		if(row_count > 20)
		{
			row_count = 0;
			sx = sx + 16;
			sy = start_y;
		}
	}
}


// draw a hero sprite  - 

void Hero::drawsprite(int draw_x, int draw_y, int sprite)
{
	if(sprite <= 11)
	{

	int bx = 32 * sprite;
	hero_graphic.DisplayGraphicEx(bx,0,bx+32,32,draw_x,draw_y);

	}
}
// keycheck on hero

void Hero::keycheck()
{
	
	if(TimeChange())
	{
		
		hero_dely++;
		
		if(hero_dely >= 2)
		{
			
			hero_dely = 0;
			
			
			// the down key is pressed

			if(mxhwnd.KeyCheck(DIK_DOWN))
			{
				bool checkup1;
				bool checkup2;
				BlockInfo info1;
				BlockInfo info2;
				GetTileInfo(&info1,level.level_block[hero_pos + 2]);
				GetTileInfo(&info2,level.level_block[hero_pos + 21 + 2]);
				checkup1 = info1.solid;
				checkup2 = info2.solid;
				
				if(checkup1 == false && checkup2 == false)
				{
					hero_pos++;
				}
				
				dir = DIR_DOWN;
				
				if(cur_sprite != 0 && cur_sprite != 1)
				{
					cur_sprite = 0;
					return;
				}
				
				if(cur_sprite == 0)
				{
					cur_sprite = 1;
					return;
				}
				
				if(cur_sprite == 1)
				{
					cur_sprite = 0;
					return;
				}
			}
			
			// up key is pressed

			if(mxhwnd.KeyCheck(DIK_UP))
			{
				
				bool checkup1;
				bool checkup2;
				BlockInfo info1;
				BlockInfo info2;
				GetTileInfo(&info1,level.level_block[hero_pos - 1]);
				GetTileInfo(&info2,level.level_block[hero_pos + 20]);
				checkup1 = info1.solid;
				checkup2 = info2.solid;
				
				if(checkup1 == false && checkup2 == false)
				{
					hero_pos--;
				}
				
				dir = DIR_UP;
				
				if(cur_sprite != 4 && cur_sprite != 5)
				{
					cur_sprite = 4;
					return;
				}
				
				if(cur_sprite == 4)
				{
					cur_sprite = 5;
					return;
				}
				
				if(cur_sprite == 5)
				{
					cur_sprite = 4;
					return;
				}
				
			}

				// right key is pressed

			if(mxhwnd.KeyCheck(DIK_RIGHT))
			{
				
				bool checkup1;
				bool checkup2;
				BlockInfo info1;
				BlockInfo info2;
				GetTileInfo(&info1,level.level_block[hero_pos + 21 + 21]);
				GetTileInfo(&info2,level.level_block[hero_pos + 21 + 22]);
				checkup1 = info1.solid;
				checkup2 = info2.solid;
				
				if(checkup1 == false && checkup2 == false)
				{
					hero_pos = hero_pos + 21;
				}
				
				dir = DIR_RIGHT;
				
				if(cur_sprite != 2 && cur_sprite != 3)
				{
					cur_sprite = 2;
					return;
				}
				
				if(cur_sprite == 2)
				{
					cur_sprite = 3;
					return;
				}
				
				if(cur_sprite == 3)
				{
					cur_sprite = 2;
					return;
				}
				
			}

			// left key is pressed

			if(mxhwnd.KeyCheck(DIK_LEFT))
			{
				
				bool checkup1;
				bool checkup2;
				BlockInfo info1;
				BlockInfo info2;
				GetTileInfo(&info1,level.level_block[hero_pos - 21]);
				GetTileInfo(&info2,level.level_block[hero_pos - 20]);
				checkup1 = info1.solid;
				checkup2 = info2.solid;
				
				if(checkup1 == false && checkup2 == false)
				{
					hero_pos = hero_pos - 21;
				}
				
				dir = DIR_LEFT;
				
				if(cur_sprite != 6 && cur_sprite != 7)
				{
					cur_sprite = 6;
					return;
				}
				
				if(cur_sprite == 6)
				{
					cur_sprite = 7;
					return;
				}
				
				if(cur_sprite == 7)
				{
					cur_sprite = 6;
					return;
				}
				
			}
			
		}
		
	}
	
}

// hero keyup

void Hero::keyup(WPARAM wParam)
{
	switch(wParam)
	{
	case VK_UP:
	case VK_DOWN:
	case VK_LEFT:
	case VK_RIGHT:
		setstand();
		break;
	}
}
// set the hero position, back to normal standing, based on the direction he is facing

void Hero::setstand()
{
	switch(dir)
	{
	case DIR_UP:
		cur_sprite = 5;
		break;
	case DIR_DOWN:
		cur_sprite = 0;
		break;
	case DIR_LEFT:
		cur_sprite = 6;
		break;
	case DIR_RIGHT:
		cur_sprite = 2;
		break;
	}
}