Esempio n. 1
0
void SetupMission(
	int buildTables, Mission *m, struct MissionOptions *mo, int missionIndex)
{
	int i;

	MissionOptionsInit(mo);
	mo->index = missionIndex;
	mo->missionData = m;
	mo->doorPics =
	    doorStyles[abs(m->DoorStyle) % DOORSTYLE_COUNT];
	mo->keyPics = keyStyles[abs(m->KeyStyle) % KEYSTYLE_COUNT];
	for (i = 0; i < (int)m->Items.size; i++)
	{
		CArrayPushBack(
			&mo->MapObjects,
			MapObjectGet(*(int32_t *)CArrayGet(&m->Items, i)));
	}

	mo->exitPic = exitPics[2 * (abs(m->ExitStyle) % EXIT_COUNT)];
	mo->exitShadow = exitPics[2 * (abs(m->ExitStyle) % EXIT_COUNT) + 1];

	ActorsInit();
	ObjsInit();
	MobObjsInit();
	SetupObjectives(mo, m);
	SetupBadguysForMission(m);
	SetupWeapons(gPlayerDatas, &m->Weapons);
	SetPaletteRanges(m->WallColor, m->FloorColor, m->RoomColor, m->AltColor);
	if (buildTables)
	{
		BuildTranslationTables(gPicManager.palette);
	}
}
Esempio n. 2
0
void SetupMission(int index, int buildTables)
{
	int i;
	int x, y;
	struct Mission *m;

	memset(&gMission, 0, sizeof(gMission));
	gMission.index = index;
	m = &gCampaign.setting->missions[abs(index) %
					 gCampaign.setting->missionCount];
	gMission.missionData = m;
	gMission.doorPics =
	    doorStyles[abs(m->doorStyle) % DOORSTYLE_COUNT];
	gMission.keyPics = keyStyles[abs(m->keyStyle) % KEYSTYLE_COUNT];
	gMission.objectCount = m->itemCount;

	for (i = 0; i < m->itemCount; i++)
		gMission.mapObjects[i] =
		    &mapItems[abs(m->items[i]) % ITEMS_COUNT];

	srand(10 * index + gCampaign.seed);

	gMission.exitPic = exitPics[2 * (abs(m->exitStyle) % EXIT_COUNT)];
	gMission.exitShadow =
	    exitPics[2 * (abs(m->exitStyle) % EXIT_COUNT) + 1];
	if (m->exitLeft > 0) {
		gMission.exitLeft = m->exitLeft * TILE_WIDTH;
		gMission.exitRight = m->exitRight * TILE_WIDTH;
		gMission.exitTop = m->exitTop * TILE_HEIGHT;
		gMission.exitBottom = m->exitBottom * TILE_HEIGHT;
	} else {
		if (m->mapWidth)
			x = (rand() % (abs(m->mapWidth) - EXIT_WIDTH)) +
			    (XMAX - abs(m->mapWidth)) / 2;
		else
			x = rand() % (XMAX - EXIT_WIDTH);
		if (m->mapHeight)
			y = (rand() % (abs(m->mapHeight) - EXIT_HEIGHT)) +
			    (YMAX - abs(m->mapHeight)) / 2;
		else
			y = rand() % (YMAX - EXIT_HEIGHT);
		gMission.exitLeft = x * TILE_WIDTH;
		gMission.exitRight = (x + EXIT_WIDTH + 1) * TILE_WIDTH;
		gMission.exitTop = y * TILE_HEIGHT;
		gMission.exitBottom = (y + EXIT_HEIGHT + 1) * TILE_HEIGHT;
	}
	SetupObjectives(m);
	SetupBadguysForMission(m);
	SetupWeapons(m->weaponSelection);
	SetRange(WALL_COLORS, abs(m->wallRange) % COLORRANGE_COUNT);
	SetRange(FLOOR_COLORS, abs(m->floorRange) % COLORRANGE_COUNT);
	SetRange(ROOM_COLORS, abs(m->roomRange) % COLORRANGE_COUNT);
	SetRange(ALT_COLORS, abs(m->altRange) % COLORRANGE_COUNT);
	if (buildTables)
		BuildTranslationTables();
}
Esempio n. 3
0
int main(int argc, char *argv[])
{
	int i;
	int loaded = 0;

	printf("C-Dogs SDL Editor\n");

	debug(D_NORMAL, "Initialising SDL...\n");
	if (SDL_Init(SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO) != 0)
	{
		printf("Failed to start SDL!\n");
		return -1;
	}
	SDL_EnableUNICODE(SDL_ENABLE);

	printf("Data directory:\t\t%s\n",	GetDataFilePath(""));
	printf("Config directory:\t%s\n\n",	GetConfigFilePath(""));

	EditorBrushInit(&brush);

	ConfigLoadDefault(&gConfig);
	ConfigLoad(&gConfig, GetConfigFilePath(CONFIG_FILE));
	gConfig.Graphics.IsEditor = 1;
	if (!PicManagerTryInit(
		&gPicManager, "graphics/cdogs.px", "graphics/cdogs2.px"))
	{
		exit(0);
	}
	memcpy(origPalette, gPicManager.palette, sizeof origPalette);
	BuildTranslationTables(gPicManager.palette);
	TextManagerInit(&gTextManager, GetDataFilePath("graphics/font.px"));
	GraphicsInit(&gGraphicsDevice);
	// Hardcode config settings
	gConfig.Graphics.ScaleMode = SCALE_MODE_NN;
	gConfig.Graphics.ScaleFactor = 2;
	gConfig.Graphics.Res.x = 400;
	gConfig.Graphics.Res.y = 300;
	GraphicsInitialize(
		&gGraphicsDevice, &gConfig.Graphics, gPicManager.palette, 0);
	if (!gGraphicsDevice.IsInitialized)
	{
		printf("Video didn't init!\n");
		exit(EXIT_FAILURE);
	}
	TextManagerGenerateOldPics(&gTextManager, &gGraphicsDevice);
	PicManagerLoadDir(&gPicManager, GetDataFilePath("graphics"));

	BulletInitialize();
	WeaponInitialize(&gGunDescriptions, GetDataFilePath("guns.json"));
	CampaignInit(&gCampaign);
	MissionInit(&lastMission);
	MissionInit(&currentMission);

	PlayerDataInitialize();
	MapInit(&gMap);

	// initialise UI collections
	// Note: must do this after text init since positions depend on text height
	sObjs = CreateMainObjs(&gCampaign, &brush, Vec2iNew(320, 240));
	memset(&sDrawObjs, 0, sizeof sDrawObjs);
	DrawBufferInit(&sDrawBuffer, Vec2iNew(X_TILES, Y_TILES), &gGraphicsDevice);

	// Reset campaign (graphics init may have created dummy campaigns)
	CampaignSettingTerminate(&gCampaign.Setting);
	CampaignSettingInit(&gCampaign.Setting);

	EventInit(&gEventHandlers, NULL, false);

	for (i = 1; i < argc; i++)
	{
		if (!loaded)
		{
			debug(D_NORMAL, "Loading map %s\n", argv[i]);
			memset(lastFile, 0, sizeof(lastFile));
			strncpy(lastFile, argv[i], sizeof(lastFile) - 1);
			if (strchr(lastFile, '.') == NULL &&
				sizeof lastFile - strlen(lastFile) > 3)
			{
				strcat(lastFile, ".CPN");
			}
			if (MapNewLoad(lastFile, &gCampaign.Setting) == 0)
			{
				loaded = 1;
			}
			debug(D_NORMAL, "Loaded map %s\n", argv[i]);
		}
	}

	debug(D_NORMAL, "Starting editor\n");
	EditCampaign();

	MapTerminate(&gMap);
	WeaponTerminate(&gGunDescriptions);
	CampaignTerminate(&gCampaign);
	MissionTerminate(&lastMission);
	MissionTerminate(&currentMission);

	DrawBufferTerminate(&sDrawBuffer);
	GraphicsTerminate(&gGraphicsDevice);
	PicManagerTerminate(&gPicManager);
	TextManagerTerminate(&gTextManager);

	UIObjectDestroy(sObjs);
	CArrayTerminate(&sDrawObjs);
	EditorBrushTerminate(&brush);

	SDL_Quit();

	exit(EXIT_SUCCESS);
}