📄 mapgen.cpp
字号:
// Copyright 2002 Kenneth Guy,
//
#include <iostream>
#include <fstream>
#include <vector>
typedef int TInt;
typedef short TInt16;
typedef unsigned int TUint32;
typedef unsigned short TUint16;
#include "TMapLineType.h"
#include "TPathLineType.h"
#include "map.h"
#include "paths.h"
#include "header.h"
/*
MapDataOffset 0
Paths 4
ShipSprite 8
ShipDeathStartSprite 12
ShipDeathEndSprite 16
BadGuyDeathStartSprite 20
BadGuyDeathEndSprite 24
BulletPower1_StartSprite 28
BulletPower2_StartSprite 32
BulletPower3_StartSprite 36
BulletPower4_StartSprite 40
mapdata 44
paths 44+mapdata
*/
void write32bit(int val,std::ofstream& file) {
const unsigned char* data = (const unsigned char*)(&val);
file.write(data,4);
}
main(int argc, char** argv) {
if(argc!=2) {
cerr << "levelGen <filename>\n";
std::exit(-1);
}
std::vector<short > pathStartVec;
int pathSize=0;
while(KPaths[pathSize]!=EPathLineEnd) {
// keep track of where the start points are
if(KPaths[pathSize]==EPathLineStart) {
pathStartVec.push_back(pathSize/4);
}
pathSize+=4;
}
pathSize+=4;
pathSize*= sizeof(TInt16);
int mapSize=0;
while(Map[mapSize]!=EMapLineEndOfMap) {
// change path field to to be offset into
// path commands rather than n'th EPathLineStart
if(Map[mapSize] & EMapLineObject &&
Map[mapSize] & EMapLineObjectMovementPath) {
Map[mapSize+5]=pathStartVec[Map[mapSize+5]];
}
mapSize+=8;
}
mapSize+=8;
mapSize*= sizeof(TInt16);
int mapDataOffset=60;
int pathsOffset=mapDataOffset+mapSize;
std::ofstream level(argv[1]);
if(!level) {
cerr << "Couldn't open " << argv[1] << "\n";
std::exit(-1);
}
write32bit(mapDataOffset,level); //0
write32bit(pathsOffset,level); //4
write32bit(KShipSprite,level); //8
write32bit(KShipDeathStartSprite,level); //12
write32bit(KShipDeathEndSprite,level); //16
write32bit(KBadGuyDeathStartSprite,level);//20
write32bit(KBadGuyDeathEndSprite,level); //24
write32bit(KBulletPower1_StartSprite,level); //28
write32bit(KBulletPower2_StartSprite,level); //32
write32bit(KBulletPower3_StartSprite,level); //36
write32bit(KBulletPower4_StartSprite,level); //40
write32bit(KShipStartPosX,level); //44
write32bit(KShipStartPosY,level); //48
write32bit(KShipStartHealth,level); //52
write32bit(KShipPowerUps,level); //56
level.write((const unsigned char *)Map,mapSize); //60
level.write((const unsigned char *)KPaths,pathSize);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -