整个程序的入口是在STARTUP.CPP(查看代码感觉vs2022太不方便了,可能是用的比较少吧。。。),需要注意的是默认编译出来是DLL,需要修改配置才能编译成exe文件,不过由于程序运行时默认需要传参数,运行是需要读取各种文件,但这个git仓库是不提供这些非源码文件的,比如下边这些(还未列全),但是代码写的比较规范,可以作为学习的一个源码, 源码地址:https://github.com/electronicarts/CnC_Remastered_Collection.git,在gitee有不少仓库已经同步过来了:
PROLOG.CPS
TITLE.CPS
PALETTE.CPS
PALETTE.CPS
VERSION.TXT
MOUSE.SHP
EXPAND.DAT
tabs.shp
PIPS.SHP
SHADOW.SHP
/***********************************************************************************************
* BulletTypeClass::Init_Heap -- Initialize the heap objects for the bullet type. *
* *
* This performs any necessary initialization for the bullet types. *
* *
* INPUT: none *
* *
* OUTPUT: none *
* *
* WARNINGS: none *
* *
* HISTORY: *
* 07/06/1996 JLB : Created. *
*=============================================================================================*/
void BulletTypeClass::Init_Heap(void)
{
/*
** These bullet type class objects must be allocated in the exact order that they
** are specified in the BulletType enumeration. This is necessary because the heap
** allocation block index serves double duty as the type number index.
*/
new BulletTypeClass("Invisible"); // BULLET_INVISIBLE
new BulletTypeClass("Cannon"); // BULLET_CANNON
new BulletTypeClass("Ack"); // BULLET_ACK
new BulletTypeClass("Torpedo"); // BULLET_TORPEDO
new BulletTypeClass("FROG"); // BULLET_FROG
new BulletTypeClass("HeatSeeker"); // BULLET_HEAT_SEEKER
new BulletTypeClass("LaserGuided"); // BULLET_LASER_GUIDED
new BulletTypeClass("Lobbed"); // BULLET_LOBBED
new BulletTypeClass("Bomblet"); // BULLET_BOMBLET
new BulletTypeClass("Ballistic"); // BULLET_BALLISTIC
new BulletTypeClass("Parachute"); // BULLET_PARACHUTE
new BulletTypeClass("Fireball"); // BULLET_FIREBALL
new BulletTypeClass("LeapDog"); // BULLET_DOG
new BulletTypeClass("Catapult"); // BULLET_CATAPULT
new BulletTypeClass("AAMissile"); // BULLET_AAMISSILE
new BulletTypeClass("GPSSatellite");// BULLET_GPS_SATELLITE
new BulletTypeClass("NukeUp"); // BULLET_NUKE_UP
new BulletTypeClass("NukeDown"); // BULLET_NUKE_DOWN
}
游戏里边有些接口是用于播放动画视频的:
void Play_Movie(char const * name, ThemeType theme, bool clrscrn, bool immediate)
加载图片的:
int Load_Picture(char const *filename, BufferClass& scratchbuf, BufferClass& destbuf, unsigned char *palette, PicturePlaneType format);