/*
===========================================================================
Copyright (C) 2000 - 2013, Raven Software, Inc.
Copyright (C) 2001 - 2013, Activision, Inc.
Copyright (C) 2013 - 2015, OpenJK contributors

This file is part of the OpenJK source code.

OpenJK is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License version 2 as
published by the Free Software Foundation.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, see <http://www.gnu.org/licenses/>.
===========================================================================
*/

#ifndef __OBJECTIVES_H__
#define __OBJECTIVES_H__

// mission Objectives


// DO NOT CHANGE MAX_MISSION_OBJ. IT AFFECTS THE SAVEGAME STRUCTURE

typedef enum //# Objective_e
{
	//=================================================
	//
	//=================================================

	LIGHTSIDE_OBJ = 0,
	HOTH2_OBJ1,
	HOTH2_OBJ2,
	HOTH2_OBJ3,
	HOTH3_OBJ1,
	HOTH3_OBJ2,
	HOTH3_OBJ3,
	T2_DPREDICAMENT_OBJ1,
	T2_DPREDICAMENT_OBJ2,
	T2_DPREDICAMENT_OBJ3,
	T2_DPREDICAMENT_OBJ4,
	T2_RANCOR_OBJ1,
	T2_RANCOR_OBJ2,
	T2_RANCOR_OBJ3,
	T2_RANCOR_OBJ4,
	T2_RANCOR_OBJ5,
	T2_RANCOR_OBJ5_2,
	T2_RANCOR_OBJ6,
	T2_WEDGE_OBJ1,
	T2_WEDGE_OBJ2,
	T2_WEDGE_OBJ3,
	T2_WEDGE_OBJ4,
	T2_WEDGE_OBJ5,
	T2_WEDGE_OBJ6,
	T2_WEDGE_OBJ7,
	T2_WEDGE_OBJ8,
	T2_WEDGE_OBJ9,
	T2_WEDGE_OBJ10,
	T2_WEDGE_OBJ11,
	T2_WEDGE_OBJ12,
	T3_RIFT_OBJ1,
	T3_RIFT_OBJ2,
	T3_RIFT_OBJ3,
	T1_DANGER_OBJ1,
	T1_DANGER_OBJ2,
	T1_DANGER_OBJ3,
	T1_DANGER_OBJ4,
	T1_DANGER_OBJ5,
	T3_BOUNTY_OBJ1,
	T3_BOUNTY_OBJ2,
	T3_BOUNTY_OBJ3,
	T3_BOUNTY_OBJ4,
	T3_BOUNTY_OBJ5,
	T3_BOUNTY_OBJ6,
	T3_BOUNTY_OBJ7,
	T3_BOUNTY_OBJ8,
	T3_BOUNTY_OBJ9,
	T2_ROGUE_OBJ1,
	T2_ROGUE_OBJ2,
	T2_TRIP_OBJ1,
	T2_TRIP_OBJ2,
	T3_BYSS_OBJ1,
	T3_BYSS_OBJ2,
	T3_BYSS_OBJ3,
	T3_HEVIL_OBJ1,
	T3_HEVIL_OBJ2,
	T3_HEVIL_OBJ3,
	T3_STAMP_OBJ1,
	T3_STAMP_OBJ2,
	T3_STAMP_OBJ3,
	T3_STAMP_OBJ4,
	TASPIR1_OBJ1,
	TASPIR1_OBJ2,
	TASPIR1_OBJ3,
	TASPIR1_OBJ4,
	TASPIR2_OBJ1,
	TASPIR2_OBJ2,
	VJUN1_OBJ1,
	VJUN1_OBJ2,
	VJUN2_OBJ1,
	VJUN3_OBJ1,
	YAVIN1_OBJ1,
	YAVIN1_OBJ2,
	YAVIN2_OBJ1,
	T1_FATAL_OBJ1,
	T1_FATAL_OBJ2,
	T1_FATAL_OBJ3,
	T1_FATAL_OBJ4,
	T1_FATAL_OBJ5,
	T1_FATAL_OBJ6,
	KOR1_OBJ1,
	KOR1_OBJ2,
	KOR2_OBJ1,
	KOR2_OBJ2,
	KOR2_OBJ3,
	KOR2_OBJ4,
	T1_RAIL_OBJ1,
	T1_RAIL_OBJ2,
	T1_RAIL_OBJ3,
	T1_SOUR_OBJ1,
	T1_SOUR_OBJ2,
	T1_SOUR_OBJ3,
	T1_SOUR_OBJ4,
	T1_SURPRISE_OBJ1,
	T1_SURPRISE_OBJ2,
	T1_SURPRISE_OBJ3,
	T1_SURPRISE_OBJ4,

	//# #eol
	MAX_OBJECTIVES,
} objectiveNumber_t;


typedef enum //# MissionFailed_e
{
	MISSIONFAILED_JAN=0,		//#
	MISSIONFAILED_LUKE,			//#
	MISSIONFAILED_LANDO,		//#
	MISSIONFAILED_R5D2,			//#
	MISSIONFAILED_WARDEN,		//#
	MISSIONFAILED_PRISONERS,	//#
	MISSIONFAILED_EMPLACEDGUNS,	//#
	MISSIONFAILED_LADYLUCK,		//#
	MISSIONFAILED_KYLECAPTURE,	//#
	MISSIONFAILED_TOOMANYALLIESDIED,	//#
	MISSIONFAILED_CHEWIE,		//#
	MISSIONFAILED_KYLE,			//#
	MISSIONFAILED_ROSH,			//#
	MISSIONFAILED_WEDGE,		//#
	MISSIONFAILED_TURNED,		//# Turned on your friends.

	//# #eol
	MAX_MISSIONFAILED,
} missionFailed_t;


typedef enum //# StatusText_e
{
	//=================================================
	//
	//=================================================
	STAT_INSUBORDINATION = 0,		//# Starfleet will not tolerate such insubordination
	STAT_YOUCAUSEDDEATHOFTEAMMATE,	//# You caused the death of a teammate.
	STAT_DIDNTPROTECTTECH,			//# You failed to protect Chell, your technician.
	STAT_DIDNTPROTECT7OF9,			//# You failed to protect 7 of 9
	STAT_NOTSTEALTHYENOUGH,			//# You weren't quite stealthy enough
	STAT_STEALTHTACTICSNECESSARY,	//# Starfleet will not tolerate such insubordination
	STAT_WATCHYOURSTEP,				//# Watch your step
	STAT_JUDGEMENTMUCHDESIRED,		//# Your judgement leaves much to be desired

	//# #eol
	MAX_STATUSTEXT,
} statusText_t;

extern qboolean	missionInfo_Updated;

#define SET_TACTICAL_OFF	0
#define SET_TACTICAL_ON		1

#define SET_OBJ_HIDE		0
#define SET_OBJ_SHOW		1
#define SET_OBJ_PENDING		2
#define SET_OBJ_SUCCEEDED	3
#define SET_OBJ_FAILED		4

#define OBJECTIVE_HIDE 0
#define OBJECTIVE_SHOW 1

#define OBJECTIVE_STAT_PENDING		0
#define OBJECTIVE_STAT_SUCCEEDED	1
#define OBJECTIVE_STAT_FAILED		2

extern int statusTextIndex;

void OBJ_SaveObjectiveData(void);
void OBJ_LoadObjectiveData(void);
extern void OBJ_SetPendingObjectives(gentity_t *ent);

#ifndef G_OBJECTIVES_CPP

extern stringID_table_t objectiveTable [];
extern stringID_table_t statusTextTable [];
extern stringID_table_t missionFailedTable [];

#else

stringID_table_t objectiveTable [] =
{
	//=================================================
	//
	//=================================================
	ENUM2STRING(LIGHTSIDE_OBJ),
	ENUM2STRING(HOTH2_OBJ1),
	ENUM2STRING(HOTH2_OBJ2),
	ENUM2STRING(HOTH2_OBJ3),
	ENUM2STRING(HOTH3_OBJ1),
	ENUM2STRING(HOTH3_OBJ2),
	ENUM2STRING(HOTH3_OBJ3),
	ENUM2STRING(T2_DPREDICAMENT_OBJ1),
	ENUM2STRING(T2_DPREDICAMENT_OBJ2),
	ENUM2STRING(T2_DPREDICAMENT_OBJ3),
	ENUM2STRING(T2_DPREDICAMENT_OBJ4),
	ENUM2STRING(T2_RANCOR_OBJ1),
	ENUM2STRING(T2_RANCOR_OBJ2),
	ENUM2STRING(T2_RANCOR_OBJ3),
	ENUM2STRING(T2_RANCOR_OBJ4),
	ENUM2STRING(T2_RANCOR_OBJ5),
	ENUM2STRING(T2_RANCOR_OBJ5_2),
	ENUM2STRING(T2_RANCOR_OBJ6),
	ENUM2STRING(T2_WEDGE_OBJ1),
	ENUM2STRING(T2_WEDGE_OBJ2),
	ENUM2STRING(T2_WEDGE_OBJ3),
	ENUM2STRING(T2_WEDGE_OBJ4),
	ENUM2STRING(T2_WEDGE_OBJ5),
	ENUM2STRING(T2_WEDGE_OBJ6),
	ENUM2STRING(T2_WEDGE_OBJ7),
	ENUM2STRING(T2_WEDGE_OBJ8),
	ENUM2STRING(T2_WEDGE_OBJ9),
	ENUM2STRING(T2_WEDGE_OBJ10),
	ENUM2STRING(T2_WEDGE_OBJ11),
	ENUM2STRING(T2_WEDGE_OBJ12),
	ENUM2STRING(T3_RIFT_OBJ1),
	ENUM2STRING(T3_RIFT_OBJ2),
	ENUM2STRING(T3_RIFT_OBJ3),
	ENUM2STRING(T1_DANGER_OBJ1),
	ENUM2STRING(T1_DANGER_OBJ2),
	ENUM2STRING(T1_DANGER_OBJ3),
	ENUM2STRING(T1_DANGER_OBJ4),
	ENUM2STRING(T1_DANGER_OBJ5),
	ENUM2STRING(T3_BOUNTY_OBJ1),
	ENUM2STRING(T3_BOUNTY_OBJ2),
	ENUM2STRING(T3_BOUNTY_OBJ3),
	ENUM2STRING(T3_BOUNTY_OBJ4),
	ENUM2STRING(T3_BOUNTY_OBJ5),
	ENUM2STRING(T3_BOUNTY_OBJ6),
	ENUM2STRING(T3_BOUNTY_OBJ7),
	ENUM2STRING(T3_BOUNTY_OBJ8),
	ENUM2STRING(T3_BOUNTY_OBJ9),
	ENUM2STRING(T2_ROGUE_OBJ1),
	ENUM2STRING(T2_ROGUE_OBJ2),
	ENUM2STRING(T2_TRIP_OBJ1),
	ENUM2STRING(T2_TRIP_OBJ2),
	ENUM2STRING(T3_BYSS_OBJ1),
	ENUM2STRING(T3_BYSS_OBJ2),
	ENUM2STRING(T3_BYSS_OBJ3),
	ENUM2STRING(T3_HEVIL_OBJ1),
	ENUM2STRING(T3_HEVIL_OBJ2),
	ENUM2STRING(T3_HEVIL_OBJ3),
	ENUM2STRING(T3_STAMP_OBJ1),
	ENUM2STRING(T3_STAMP_OBJ2),
	ENUM2STRING(T3_STAMP_OBJ3),
	ENUM2STRING(T3_STAMP_OBJ4),
	ENUM2STRING(TASPIR1_OBJ1),
	ENUM2STRING(TASPIR1_OBJ2),
	ENUM2STRING(TASPIR1_OBJ3),
	ENUM2STRING(TASPIR1_OBJ4),
	ENUM2STRING(TASPIR2_OBJ1),
	ENUM2STRING(TASPIR2_OBJ2),
	ENUM2STRING(VJUN1_OBJ1),
	ENUM2STRING(VJUN1_OBJ2),
	ENUM2STRING(VJUN2_OBJ1),
	ENUM2STRING(VJUN3_OBJ1),
	ENUM2STRING(YAVIN1_OBJ1),
	ENUM2STRING(YAVIN1_OBJ2),
	ENUM2STRING(YAVIN2_OBJ1),
	ENUM2STRING(T1_FATAL_OBJ1),
	ENUM2STRING(T1_FATAL_OBJ2),
	ENUM2STRING(T1_FATAL_OBJ3),
	ENUM2STRING(T1_FATAL_OBJ4),
	ENUM2STRING(T1_FATAL_OBJ5),
	ENUM2STRING(T1_FATAL_OBJ6),
	ENUM2STRING(KOR1_OBJ1),
	ENUM2STRING(KOR1_OBJ2),
	ENUM2STRING(KOR2_OBJ1),
	ENUM2STRING(KOR2_OBJ2),
	ENUM2STRING(KOR2_OBJ3),
	ENUM2STRING(KOR2_OBJ4),
	ENUM2STRING(T1_RAIL_OBJ1),
	ENUM2STRING(T1_RAIL_OBJ2),
	ENUM2STRING(T1_RAIL_OBJ3),
	ENUM2STRING(T1_SOUR_OBJ1),
	ENUM2STRING(T1_SOUR_OBJ2),
	ENUM2STRING(T1_SOUR_OBJ3),
	ENUM2STRING(T1_SOUR_OBJ4),
	ENUM2STRING(T1_SURPRISE_OBJ1),
	ENUM2STRING(T1_SURPRISE_OBJ2),
	ENUM2STRING(T1_SURPRISE_OBJ3),
	ENUM2STRING(T1_SURPRISE_OBJ4),

	//stringID_table_t Must end with a null entry
	{ "", 0 }
};

stringID_table_t missionFailedTable [] =
{
	ENUM2STRING(MISSIONFAILED_JAN),			//# JAN DIED
	ENUM2STRING(MISSIONFAILED_LUKE),		//# LUKE DIED
	ENUM2STRING(MISSIONFAILED_LANDO),		//# LANDO DIED
	ENUM2STRING(MISSIONFAILED_R5D2),		//# R5D2 DIED
	ENUM2STRING(MISSIONFAILED_WARDEN),		//# THE WARDEN DIED
	ENUM2STRING(MISSIONFAILED_PRISONERS),	//#	TOO MANY PRISONERS DIED
	ENUM2STRING(MISSIONFAILED_EMPLACEDGUNS),//#	ALL EMPLACED GUNS GONE
	ENUM2STRING(MISSIONFAILED_LADYLUCK),	//#	LADY LUCK DISTROYED
	ENUM2STRING(MISSIONFAILED_KYLECAPTURE),	//# KYLE HAS BEEN CAPTURED
	ENUM2STRING(MISSIONFAILED_TOOMANYALLIESDIED),	//# TOO MANY ALLIES DIED
	ENUM2STRING(MISSIONFAILED_CHEWIE),
	ENUM2STRING(MISSIONFAILED_KYLE),
	ENUM2STRING(MISSIONFAILED_ROSH),
	ENUM2STRING(MISSIONFAILED_WEDGE),
	ENUM2STRING(MISSIONFAILED_TURNED),		//# Turned on your friends.

	//stringID_table_t Must end with a null entry
	{ "", 0 }
};

stringID_table_t statusTextTable [] =
{
	//=================================================
	//
	//=================================================
	ENUM2STRING(STAT_INSUBORDINATION),				//# Starfleet will not tolerate such insubordination
	ENUM2STRING(STAT_YOUCAUSEDDEATHOFTEAMMATE),		//# You caused the death of a teammate.
	ENUM2STRING(STAT_DIDNTPROTECTTECH),				//# You failed to protect Chell, your technician.
	ENUM2STRING(STAT_DIDNTPROTECT7OF9),				//# You failed to protect 7 of 9
	ENUM2STRING(STAT_NOTSTEALTHYENOUGH),			//# You weren't quite stealthy enough
	ENUM2STRING(STAT_STEALTHTACTICSNECESSARY),		//# Starfleet will not tolerate such insubordination
	ENUM2STRING(STAT_WATCHYOURSTEP),				//# Watch your step
	ENUM2STRING(STAT_JUDGEMENTMUCHDESIRED),			//# Your judgement leaves much to be desired
	//stringID_table_t Must end with a null entry
	{ "", 0 }
};

#endif// #ifndef G_OBJECTIVES_CPP


#endif// #ifndef __OBJECTIVES_H__

