#pragma once

#include "builddefines.h"

//-----------------------------------------------
//
// civilian "sub teams":
enum
{
	NON_CIV_GROUP = 0,
	REBEL_CIV_GROUP,
	KINGPIN_CIV_GROUP,
	SANMONA_ARMS_GROUP,
	ANGELS_GROUP,
	BEGGARS_CIV_GROUP,
	TOURISTS_CIV_GROUP,
	ALMA_MILITARY_CIV_GROUP,
	DOCTORS_CIV_GROUP,
	COUPLE1_CIV_GROUP,
	HICKS_CIV_GROUP,
	WARDEN_CIV_GROUP,
	JUNKYARD_CIV_GROUP,
	FACTORY_KIDS_GROUP,
	QUEENS_CIV_GROUP,
	UNNAMED_CIV_GROUP_15,
	UNNAMED_CIV_GROUP_16,
	UNNAMED_CIV_GROUP_17,
	UNNAMED_CIV_GROUP_18,
	UNNAMED_CIV_GROUP_19,
	ASSASSIN_CIV_GROUP,		// Flugente: enemy assassins belong to this group
	POW_PRISON_CIV_GROUP,	// Flugente: prisoners of war the player caught are in this group
	UNNAMED_CIV_GROUP_22,
	UNNAMED_CIV_GROUP_23,
	VOLUNTEER_CIV_GROUP,	// Flugente: civilians that the player recruited
	BOUNTYHUNTER_CIV_GROUP,	// Flugente: hostile bounty hunters
	DOWNEDPILOT_CIV_GROUP,	// Flugente: downed pilots
	SCIENTIST_GROUP,		// Flugente: enemy civilian personnel
	RADAR_TECHNICIAN_GROUP,
	AIRPORT_STAFF_GROUP,
	BARRACK_STAFF_GROUP,
	FACTORY_GROUP,
	ADMINISTRATIVE_STAFF_GROUP,
	LOYAL_CIV_GROUP,		// civil population deeply loyal to the queen
	BLACKMARKET_GROUP,		// black market dealer and bodyguards
	UNNAMED_CIV_GROUP_35,
	UNNAMED_CIV_GROUP_36,
	UNNAMED_CIV_GROUP_37,
	UNNAMED_CIV_GROUP_38,
	UNNAMED_CIV_GROUP_39,
	UNNAMED_CIV_GROUP_40,
	UNNAMED_CIV_GROUP_41,
	UNNAMED_CIV_GROUP_42,
	UNNAMED_CIV_GROUP_43,
	UNNAMED_CIV_GROUP_44,
	UNNAMED_CIV_GROUP_45,
	UNNAMED_CIV_GROUP_46,
	UNNAMED_CIV_GROUP_47,
	UNNAMED_CIV_GROUP_48,
	UNNAMED_CIV_GROUP_49,
	UNNAMED_CIV_GROUP_50,
	UNNAMED_CIV_GROUP_51,
	UNNAMED_CIV_GROUP_52,
	UNNAMED_CIV_GROUP_53,
	UNNAMED_CIV_GROUP_54,
	UNNAMED_CIV_GROUP_55,
	UNNAMED_CIV_GROUP_56,
	UNNAMED_CIV_GROUP_57,
	UNNAMED_CIV_GROUP_58,
	UNNAMED_CIV_GROUP_59,
	UNNAMED_CIV_GROUP_60,
	UNNAMED_CIV_GROUP_61,
	UNNAMED_CIV_GROUP_62,
	UNNAMED_CIV_GROUP_63,
	UNNAMED_CIV_GROUP_64,
	UNNAMED_CIV_GROUP_65,
	UNNAMED_CIV_GROUP_66,
	UNNAMED_CIV_GROUP_67,
	UNNAMED_CIV_GROUP_68,
	UNNAMED_CIV_GROUP_69,
	UNNAMED_CIV_GROUP_70,
	UNNAMED_CIV_GROUP_71,
	UNNAMED_CIV_GROUP_72,
	UNNAMED_CIV_GROUP_73,
	UNNAMED_CIV_GROUP_74,
	UNNAMED_CIV_GROUP_75,
	UNNAMED_CIV_GROUP_76,
	UNNAMED_CIV_GROUP_77,
	UNNAMED_CIV_GROUP_78,
	UNNAMED_CIV_GROUP_79,
	UNNAMED_CIV_GROUP_80,
	UNNAMED_CIV_GROUP_81,
	UNNAMED_CIV_GROUP_82,
	UNNAMED_CIV_GROUP_83,
	UNNAMED_CIV_GROUP_84,
	UNNAMED_CIV_GROUP_85,
	UNNAMED_CIV_GROUP_86,
	UNNAMED_CIV_GROUP_87,
	UNNAMED_CIV_GROUP_88,
	UNNAMED_CIV_GROUP_89,
	UNNAMED_CIV_GROUP_90,
	UNNAMED_CIV_GROUP_91,
	UNNAMED_CIV_GROUP_92,
	UNNAMED_CIV_GROUP_93,
	UNNAMED_CIV_GROUP_94,
	UNNAMED_CIV_GROUP_95,
	UNNAMED_CIV_GROUP_96,
	UNNAMED_CIV_GROUP_97,
	UNNAMED_CIV_GROUP_98,
	UNNAMED_CIV_GROUP_99,
	UNNAMED_CIV_GROUP_100,
	UNNAMED_CIV_GROUP_101,
	UNNAMED_CIV_GROUP_102,
	UNNAMED_CIV_GROUP_103,
	UNNAMED_CIV_GROUP_104,
	UNNAMED_CIV_GROUP_105,
	UNNAMED_CIV_GROUP_106,
	UNNAMED_CIV_GROUP_107,
	UNNAMED_CIV_GROUP_108,
	UNNAMED_CIV_GROUP_109,
	UNNAMED_CIV_GROUP_110,
	UNNAMED_CIV_GROUP_111,
	UNNAMED_CIV_GROUP_112,
	UNNAMED_CIV_GROUP_113,
	UNNAMED_CIV_GROUP_114,
	UNNAMED_CIV_GROUP_115,
	UNNAMED_CIV_GROUP_116,
	UNNAMED_CIV_GROUP_117,
	UNNAMED_CIV_GROUP_118,
	UNNAMED_CIV_GROUP_119,
	UNNAMED_CIV_GROUP_120,
	UNNAMED_CIV_GROUP_121,
	UNNAMED_CIV_GROUP_122,
	UNNAMED_CIV_GROUP_123,
	UNNAMED_CIV_GROUP_124,
	UNNAMED_CIV_GROUP_125,
	UNNAMED_CIV_GROUP_126,
	UNNAMED_CIV_GROUP_127,
	UNNAMED_CIV_GROUP_128,
	UNNAMED_CIV_GROUP_129,
	UNNAMED_CIV_GROUP_130,
	UNNAMED_CIV_GROUP_131,
	UNNAMED_CIV_GROUP_132,
	UNNAMED_CIV_GROUP_133,
	UNNAMED_CIV_GROUP_134,
	UNNAMED_CIV_GROUP_135,
	UNNAMED_CIV_GROUP_136,
	UNNAMED_CIV_GROUP_137,
	UNNAMED_CIV_GROUP_138,
	UNNAMED_CIV_GROUP_139,
	UNNAMED_CIV_GROUP_140,

	UNNAMED_CIV_GROUP_141,
	UNNAMED_CIV_GROUP_142,
	UNNAMED_CIV_GROUP_143,
	UNNAMED_CIV_GROUP_144,
	UNNAMED_CIV_GROUP_145,
	UNNAMED_CIV_GROUP_146,
	UNNAMED_CIV_GROUP_147,
	UNNAMED_CIV_GROUP_148,
	UNNAMED_CIV_GROUP_149,
	UNNAMED_CIV_GROUP_150,
	UNNAMED_CIV_GROUP_151,
	UNNAMED_CIV_GROUP_152,
	UNNAMED_CIV_GROUP_153,
	UNNAMED_CIV_GROUP_154,
	UNNAMED_CIV_GROUP_155,
	UNNAMED_CIV_GROUP_156,
	UNNAMED_CIV_GROUP_157,
	UNNAMED_CIV_GROUP_158,
	UNNAMED_CIV_GROUP_159,
	UNNAMED_CIV_GROUP_160,
	UNNAMED_CIV_GROUP_161,
	UNNAMED_CIV_GROUP_162,
	UNNAMED_CIV_GROUP_163,
	UNNAMED_CIV_GROUP_164,
	UNNAMED_CIV_GROUP_165,
	UNNAMED_CIV_GROUP_166,
	UNNAMED_CIV_GROUP_167,
	UNNAMED_CIV_GROUP_168,
	UNNAMED_CIV_GROUP_169,
	UNNAMED_CIV_GROUP_170,

	UNNAMED_CIV_GROUP_171,
	UNNAMED_CIV_GROUP_172,
	UNNAMED_CIV_GROUP_173,
	UNNAMED_CIV_GROUP_174,
	UNNAMED_CIV_GROUP_175,
	UNNAMED_CIV_GROUP_176,
	UNNAMED_CIV_GROUP_177,
	UNNAMED_CIV_GROUP_178,
	UNNAMED_CIV_GROUP_179,
	UNNAMED_CIV_GROUP_180,
	UNNAMED_CIV_GROUP_181,
	UNNAMED_CIV_GROUP_182,
	UNNAMED_CIV_GROUP_183,
	UNNAMED_CIV_GROUP_184,
	UNNAMED_CIV_GROUP_185,
	UNNAMED_CIV_GROUP_186,
	UNNAMED_CIV_GROUP_187,
	UNNAMED_CIV_GROUP_188,
	UNNAMED_CIV_GROUP_189,
	UNNAMED_CIV_GROUP_190,
	UNNAMED_CIV_GROUP_191,
	UNNAMED_CIV_GROUP_192,
	UNNAMED_CIV_GROUP_193,
	UNNAMED_CIV_GROUP_194,
	UNNAMED_CIV_GROUP_195,
	UNNAMED_CIV_GROUP_196,
	UNNAMED_CIV_GROUP_197,
	UNNAMED_CIV_GROUP_198,
	UNNAMED_CIV_GROUP_199,
	UNNAMED_CIV_GROUP_200,

	UNNAMED_CIV_GROUP_201,
	UNNAMED_CIV_GROUP_202,
	UNNAMED_CIV_GROUP_203,
	UNNAMED_CIV_GROUP_204,
	UNNAMED_CIV_GROUP_205,
	UNNAMED_CIV_GROUP_206,
	UNNAMED_CIV_GROUP_207,
	UNNAMED_CIV_GROUP_208,
	UNNAMED_CIV_GROUP_209,
	UNNAMED_CIV_GROUP_210,
	UNNAMED_CIV_GROUP_211,
	UNNAMED_CIV_GROUP_212,
	UNNAMED_CIV_GROUP_213,
	UNNAMED_CIV_GROUP_214,
	UNNAMED_CIV_GROUP_215,
	UNNAMED_CIV_GROUP_216,
	UNNAMED_CIV_GROUP_217,
	UNNAMED_CIV_GROUP_218,
	UNNAMED_CIV_GROUP_219,
	UNNAMED_CIV_GROUP_220,
	UNNAMED_CIV_GROUP_221,
	UNNAMED_CIV_GROUP_222,
	UNNAMED_CIV_GROUP_223,
	UNNAMED_CIV_GROUP_224,
	UNNAMED_CIV_GROUP_225,
	UNNAMED_CIV_GROUP_226,
	UNNAMED_CIV_GROUP_227,
	UNNAMED_CIV_GROUP_228,
	UNNAMED_CIV_GROUP_229,
	UNNAMED_CIV_GROUP_230,

	UNNAMED_CIV_GROUP_231,
	UNNAMED_CIV_GROUP_232,
	UNNAMED_CIV_GROUP_233,
	UNNAMED_CIV_GROUP_234,
	UNNAMED_CIV_GROUP_235,
	UNNAMED_CIV_GROUP_236,
	UNNAMED_CIV_GROUP_237,
	UNNAMED_CIV_GROUP_238,
	UNNAMED_CIV_GROUP_239,
	UNNAMED_CIV_GROUP_240,
	UNNAMED_CIV_GROUP_241,
	UNNAMED_CIV_GROUP_242,
	UNNAMED_CIV_GROUP_243,
	UNNAMED_CIV_GROUP_244,
	UNNAMED_CIV_GROUP_245,
	UNNAMED_CIV_GROUP_246,
	UNNAMED_CIV_GROUP_247,
	UNNAMED_CIV_GROUP_248,
	UNNAMED_CIV_GROUP_249,
	UNNAMED_CIV_GROUP_250,

	UNNAMED_CIV_GROUP_251,
	UNNAMED_CIV_GROUP_252,
	UNNAMED_CIV_GROUP_253,
	UNNAMED_CIV_GROUP_254,
	NUM_CIV_GROUPS
};

#define CIV_GROUP_NEUTRAL 0
#define CIV_GROUP_WILL_EVENTUALLY_BECOME_HOSTILE 1
#define CIV_GROUP_WILL_BECOME_HOSTILE 2
#define CIV_GROUP_HOSTILE 3


#ifdef JA2EDITOR

#ifndef __EDITORMERCS_H
#define __EDITORMERCS_H

//Merc editing modes.	These are used to determine which buttons to show and hide.
enum
{
	MERC_NOMODE,					//used for shutting down mercs tab, to extract any changed information

	MERC_GETITEMMODE,			//when selecting a specific piece of inventory from inventorymode
		
	MERC_TEAMMODE,				//selecting a team with no merc selected.
	MERC_BASICMODE,				//basic placement mode

	MERC_GENERALMODE,			//detailed placement mode for general information and NPC info
	MERC_ATTRIBUTEMODE,		//detailed placement mode for specifying attributes
	MERC_INVENTORYMODE,		//detailed placement mode for specifying inventory
	MERC_APPEARANCEMODE,	//detailed placement mode for specifying appearance
	MERC_PROFILEMODE,			//specifying a valid profile index will generate the merc automatically.
	MERC_SCHEDULEMODE,		//specifying a schedule for that particular individual
};

extern UINT8 gubCurrMercMode, gubPrevMercMode;

#define EDIT_NUM_COLORS				4
#define EDIT_COLOR_HEAD				0
#define EDIT_COLOR_PANTS			1
#define EDIT_COLOR_SKIN				2
#define EDIT_COLOR_VEST				3
#define EDIT_MERC_NONE				0
#define EDIT_MERC_DEC_STAT		1
#define EDIT_MERC_INC_STAT		2
#define EDIT_MERC_PREV_ORDER	3
#define EDIT_MERC_NEXT_ORDER	4
#define EDIT_MERC_PREV_ATT		5
#define EDIT_MERC_NEXT_ATT		6
#define EDIT_MERC_SET_DIR			7
#define EDIT_MERC_FIND				8
#define EDIT_MERC_DONE				9
#define EDIT_MERC_TO_COLOR		10
#define EDIT_MERC_TO_STATS		11
#define EDIT_MERC_PREV_COLOR	12
#define EDIT_MERC_NEXT_COLOR	13

#define NUM_MERC_BUTTONS			40

#define NUM_DIFF_LVLS						5

extern STR16 zDiffNames[NUM_DIFF_LVLS];
extern INT16 sCurBaseDiff;
extern INT16 gsSelectedMercID;
extern INT32 gsSelectedMercGridNo;
extern UINT8 gubCurrMercMode;

enum _ForUseWithIndicateSelectedMerc
{
	SELECT_NEXT_CREATURE	= -7,
	SELECT_NEXT_REBEL			=	-6,
	SELECT_NEXT_CIV				= -5,
	SELECT_NEXT_ENEMY			= -4,
	SELECT_NEXT_TEAMMATE	= -3,
	SELECT_NEXT_MERC			= -2,
	SELECT_NO_MERC				= -1
	// >= 0 select merc with matching ID
};

void IndicateSelectedMerc( INT16 sID );

void GameInitEditorMercsInfo();
void GameShutdownEditorMercsInfo();
void EntryInitEditorMercsInfo();
void UpdateMercsInfo();

void ProcessMercEditing();
void AddMercToWorld( INT32 iMapIndex );
void HandleRightClickOnMerc( INT32 iMapIndex );
void SetMercEditingMode( UINT8 ubNewMode );

void ResetAllMercPositions();

void EraseMercWaypoint();
void AddMercWaypoint( INT32 iMapIndex );

void SetEnemyColorCode( UINT8 ubColorCode );

void SpecifyEntryPoint(INT32 iMapIndex);//dnl ch41 290909

//Modify stats of current soldiers
void SetMercOrders( INT8 bOrders );
void SetMercAttitude( INT8 bAttitude );
void SetMercDirection( INT8 bDirection );
void SetMercRelativeEquipment( INT8 bLevel );
void SetMercRelativeAttributes( INT8 bLevel );

void DeleteSelectedMerc();

void CreateEditMercWindow( void );
void DisplayEditMercWindow( void );
INT32 IsMercHere( INT32 iMapIndex );

void ExtractCurrentMercModeInfo( BOOLEAN fKillTextInputMode );

void SetMercEditability( BOOLEAN fEditable );

void HandleMercInventoryPanel( INT16 sX, INT16 sY, INT8 bEvent );

extern UINT16 gusMercsNewItemIndex;
extern BOOLEAN gfRenderMercInfo;

//NOTE:	The editor uses these enumerations, so please update the text as well if you modify or
//			add new groups.	Try to abbreviate the team name as much as possible.	The text is in 
//			EditorMercs.c
extern CHAR16 gszCivGroupNames[ NUM_CIV_GROUPS ][ 128 ];
//
//-----------------------------------------------

void ChangeCivGroup( UINT8 ubNewCivGroup );

#define MERCINV_LGSLOT_WIDTH		48
#define MERCINV_SMSLOT_WIDTH		24
#define MERCINV_SLOT_HEIGHT			18

extern BOOLEAN					gfRoofPlacement;

extern void SetEnemyDroppableStatus( UINT32 uiSlot, BOOLEAN fDroppable );

void RenderMercStrings();

extern BOOLEAN gfShowPlayers;
extern BOOLEAN gfShowEnemies;
extern BOOLEAN gfShowCreatures;
extern BOOLEAN gfShowRebels;
extern BOOLEAN gfShowCivilians;
void SetMercTeamVisibility( INT8 bTeam, BOOLEAN fVisible );

extern UINT8 gubCurrentScheduleActionIndex;
extern BOOLEAN gfSingleAction;
extern BOOLEAN gfUseScheduleData2;

void UpdateScheduleAction( UINT8 ubNewAction );
void FindScheduleGridNo( UINT8 ubScheduleData );
void ClearCurrentSchedule();
void CancelCurrentScheduleAction();
void RegisterCurrentScheduleAction( INT32 iMapIndex );
void StartScheduleAction();

void InitDetailedPlacementForMerc();
void KillDetailedPlacementForMerc();

void CopyMercPlacement( INT32 iMapIndex );
void PasteMercPlacement( INT32 iMapIndex );

#endif
#endif



 


