Example #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);
	}
}
Example #2
0
static void SetupObjectives(struct MissionOptions *mo, Mission *mission)
{
	for (int i = 0; i < (int)mission->Objectives.size; i++)
	{
		MissionObjective *mobj = CArrayGet(&mission->Objectives, i);
		struct Objective o;
		memset(&o, 0, sizeof o);
		assert(i < OBJECTIVE_MAX_OLD);
		// Set objective colours based on type
		o.color = ObjectiveTypeColor(mobj->Type);
		o.blowupObject = MapObjectGet(mobj->Index);
		o.pickupItem = pickupItems[mobj->Index % PICKUPS_COUNT];
		CArrayPushBack(&mo->Objectives, &o);
	}
}
Example #3
0
static void DrawObjectiveInfo(
	const struct MissionOptions *mo, const int idx, const Vec2i pos)
{
	const MissionObjective *mobj =
		CArrayGet(&mo->missionData->Objectives, idx);
	const struct Objective *o = CArrayGet(&mo->Objectives, idx);
	const CharacterStore *store = &gCampaign.Setting.characters;

	switch (mobj->Type)
	{
	case OBJECTIVE_KILL:
		{
			const Character *cd = CArrayGet(
				&store->OtherChars, CharacterStoreGetSpecialId(store, 0));
			const int i = cd->looks.face;
			TOffsetPic pic;
			pic.picIndex = cHeadPic[i][DIRECTION_DOWN][STATE_IDLE];
			pic.dx = cHeadOffset[i][DIRECTION_DOWN].dx;
			pic.dy = cHeadOffset[i][DIRECTION_DOWN].dy;
			DrawTTPic(
				pos.x + pic.dx, pos.y + pic.dy,
				PicManagerGetOldPic(&gPicManager, pic.picIndex), &cd->table);
		}
		break;
	case OBJECTIVE_RESCUE:
		{
			const Character *cd = CArrayGet(
				&store->OtherChars, CharacterStoreGetPrisonerId(store, 0));
			const int i = cd->looks.face;
			TOffsetPic pic;
			pic.picIndex = cHeadPic[i][DIRECTION_DOWN][STATE_IDLE];
			pic.dx = cHeadOffset[i][DIRECTION_DOWN].dx;
			pic.dy = cHeadOffset[i][DIRECTION_DOWN].dy;
			DrawTTPic(
				pos.x + pic.dx, pos.y + pic.dy,
				PicManagerGetOldPic(&gPicManager, pic.picIndex), &cd->table);
		}
		break;
	case OBJECTIVE_COLLECT:
		{
			const Pic *p = PicManagerGetFromOld(
				&gPicManager, cGeneralPics[o->pickupItem].picIndex);
			Blit(&gGraphicsDevice, p, Vec2iAdd(pos, p->offset));
		}
		break;
	case OBJECTIVE_DESTROY:
		{
			Vec2i picOffset;
			const Pic *p = MapObjectGetPic(
				MapObjectGet(mobj->Index), &gPicManager, &picOffset);
			Blit(&gGraphicsDevice, p, Vec2iAdd(pos, picOffset));
		}
		break;
	case OBJECTIVE_INVESTIGATE:
		// Don't draw
		return;
	default:
		CASSERT(false, "Unknown objective type");
		return;
	}
}