⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mirmap.cpp

📁 传奇2地图编辑程序
💻 CPP
字号:
#include "StdAfx.h"
#include "mirmap.h"
#include ".\mirmap.h"
#include "wilfile.h"

CMirMap::CMirMap(LPCTSTR lpFileName)
{
	m_lpMapData=NULL;
	ZeroMemory(&m_MapHeader,sizeof(m_MapHeader));
	if(LoadMap(lpFileName)==FALSE)
	{
		//MessageBox(0,"打开地图错误",0,0);
		throw "Open Map file eoor";
	}
}

CMirMap::~CMirMap(void)
{
}

BOOL CMirMap::LoadMap(LPCTSTR lpFileName)
{
	char szModuleFileName[0x1000];
	GetModuleFileName(0,szModuleFileName,0x1000);
	long nPos=strlen(szModuleFileName);
	while(nPos>0)
	{
		if(szModuleFileName[nPos]=='\\')
		{
			szModuleFileName[nPos]=(char)0;
			strcat(szModuleFileName,"\\map\\");
			break;
		}
		nPos--;
	}
	strcat(szModuleFileName,lpFileName);
	strcat(szModuleFileName,".map");

	FILE*fp;
	fp=fopen(szModuleFileName,"rb");
	if(fp==NULL)
	{//打开文件错误
		MessageBox(0,"打开地图错误",0,0);
		return FALSE;
	}
	ZeroMemory(&m_MapHeader,sizeof(m_MapHeader));
	fread(&m_MapHeader,sizeof(m_MapHeader),1,fp);

	if(m_lpMapData)
	{
		delete[]m_lpMapData;
	}
	m_lpMapData=NULL;
	m_lpMapData=new MapPoint[m_MapHeader.Width*m_MapHeader.Height];
	fread(m_lpMapData,m_MapHeader.Width*m_MapHeader.Height,sizeof(MapPoint),fp);

	fclose(fp);

	return TRUE;
}

MapPoint* CMirMap::GetMapPoint(int x, int y)
{
	if(x>0 && x<m_MapHeader.Width && y>0 && y<m_MapHeader.Height)
		return &m_lpMapData[y+x*m_MapHeader.Height];
	else
		return m_lpMapData;
}

CWilFile tiles("Tiles");
CWilFile smtiles("SmTiles");
CWilFile object[]=
{
	CWilFile("Objects"),
	CWilFile("Objects2"),
	CWilFile("Objects3"),
	CWilFile("Objects4"),
	CWilFile("Objects5"),
	CWilFile("Objects6"),
	CWilFile("Objects7"),
	CWilFile("Objects8"),
	CWilFile("Objects9"),
	CWilFile("Objects10"),
};
extern HFONT g_hFont;
extern int MouseX;
extern int MouseY;
#define DRAW_W (SCREEN_W/48+5)
#define DRAW_H (SCREEN_H/30+20)
void CMirMap::DrawMap(LP_DISPLAY lpDisplay,int sx,int sy,int x,int y)
{
	//int mx=MouseX/48;
	//int my=MouseY/32;
	WORD index;
	//画大背景
	for(int i=-5;i<DRAW_W;i++)
	{
		for(int j=-3;j<DRAW_H;j++)
		{
			if( (((i+x)%2)==0 )&& (((j+y)% 2)==0))
			{
				index=GetMapPoint(i+x,j+y)->BackImg;
				index=index&0x7fff;
				if(index>0)
				{
					LP_BITMAPX bmp=tiles.LoadBitmap(lpDisplay,index-1);
					if(bmp)
					{
						lpDisplay->DrawBitmap(sx+i*48,sy+j*32,bmp,SCREENBUFFER,true);
					}
				}
			}
		}
	}
	//画小背景
	for(int i=-5;i<DRAW_W;i++)
	{
		for(int j=-3;j<DRAW_H;j++)
		{
			index=GetMapPoint(i+x,j+y)->MiddImg;
			if(index>0)
			{
				LP_BITMAPX bmp=smtiles.LoadBitmap(lpDisplay,index-1);
				if(bmp)
				{
					lpDisplay->DrawBitmap(sx+i*48,sy+j*32,bmp,SCREENBUFFER,true);
				}
			}
		}
	}
	//画前景
	for(int i=-5;i<DRAW_W;i++)
	{
		for(int j=-3;j<DRAW_H;j++)
		{
			index=GetMapPoint(i+x,j+y)->ForeImg&0x7FFF;
			WORD area=GetMapPoint(i+x,j+y)->Area;
			WORD aniframe=GetMapPoint(i+x,j+y)->AniFrame;
			if((aniframe&0x80) >0)
			{
				aniframe&=0x7f;
			}
			if(aniframe>0)
			{
				index = index + (1000 % (aniframe * (GetMapPoint(i+x,j+y)->AniTick +1)))/(GetMapPoint(i+x,j+y)->AniTick +1); 
			}
			if((GetMapPoint(i+x,j+y)->DoorOffset&0x80) >0 && (GetMapPoint(i+x,j+y)->DoorIndex&0x7f)>0)
			{
				index+=GetMapPoint(i+x,j+y)->DoorIndex&0x7f;
			}
			if(index>=0 && area<sizeof(object))
			{
				LP_BITMAPX bmp=object[area].LoadBitmap(lpDisplay,index-1);
				if(bmp)
				{
					//if(bmp->GetHeight()==32 && bmp->GetWidth()==48)
					{
					//	lpDisplay->DrawBitmap(sx+i*48,sy+j*32,bmp,SCREENBUFFER,true);
					}
					//else
					{
						//if(!IsBlend)
						{
							RECT rect;
							rect.left=sx+i*48-bmp->GetWidth()+48;
							rect.top=sy+j*32-bmp->GetHeight()+32;
							lpDisplay->DrawBitmap(rect.left,rect.top,bmp,SCREENBUFFER,true);
							//lpDisplay->DrawFillRect(SCREENBUFFER,rect.left,rect.top,rect.left+bmp->GetWidth(),rect.top+bmp->GetHeight(),RGB2Hi(255,255,255),24);
							//lpDisplay->DrawRect(SCREENBUFFER,rect.left,rect.top,rect.left+bmp->GetWidth(),rect.top+bmp->GetHeight(),RGB2Hi(0,0,255));
						}
					}
				}
			}
		}
	}
	return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -