//Item Durability, Damage, and Repair
//Item value, for selling
//Item lore unlocked
//Item FFC

//Uses Item->Misc]

//Item->Misc[] constanrts. Misc[] is index size 16.
const int ITEM_MAX HP = 0;
const int ITEM_DAMAGE = 1;
const int ITEM_HARDNESS = 2;
const int ITEM_REGEN = 3;
const int ITEM_REGEN_RATE = 4;
const int ITEM_REPAIR_COST = 5;
const int ITEM_REPAIR_REGEN_REQUIREMENT = 6;
const int ITEM_VALUE = 7;
const int ITEM_LORE_UNLOCKED = 8;
const int ITEM_FFC = 9;
const int ITEM_STRING = 10;
const int ITEM_DESIRED_BY = 11;
const int ITEM_UPGRADES_TO = 12; //High side of float.
const int ITEM_DOWNGRADES_TO = 12; //Low side of float.
const int ITEM_SLIPPED_AWAY_RANGE = 13;
const int ITEM_MAP_SCREEN = 14;
const int ITEM_X_Y = 15;

int GetLostItemCoordinates(int itm){
	itemdata it = Game->LoadItemData(itm);;
	int itemMap = GetHighArgument(it->Misc[ITEM_MAP_SCREEN]);
	int itemScreen = GetLowArgument(it->Misc[ITEM_MAP_SCREEN]);
}

int ItemStats[16]; //A fast way of using item stats, without needing itemdata.

void ItemStats(int itm){
	itemdata it = Game->LoadItemData(itm);
	for ( int q = 0; q <= 16; 1++ ){
		ItemStats[q] = it->Misc[q];
	}
}

const int SET = 0;
const int LOAD = 1;

void ItemStats(int itm, bool set){
	itemdata it = Game->LoadItemData(itm);
	for ( int q = 0; q <= 16; 1++ ){
		if ( set ) {
			it->Misc[q] = ItemStats[q];
		}
		else {
			ItemStats[q] = it->Misc[q];
		}
	}
}

void ItemStats(int itm, int action){
	itemdata it = Game->LoadItemData(itm);
	for ( int q = 0; q <= 16; 1++ ){
		if ( action == 0 ) {
			it->Misc[q] = ItemStats[q]; //Set to item.
		}
		else if ( action == 1 ) { //Load to array.
			ItemStats[q] = it->Misc[q];
		}
	}
}

int ItemStats(int itm, int stat, bool array){
	itemdata it = Game->LoadItemData(itm);
	if ( array ) { //Return a stored value from ItemStats[]
		return ItemStats[stat];
	}
	return it->Misc[stat];
}

void ItemStats(int itm, int stat, int value){
	itemdata it = Game->LoadItemData(itm);
	it->Misc[stat] = value;
}

void ItemStats(int itm, int stat, int value, int action){
	itemdata it = Game->LoadItemData(itm);
	for ( int q = 0; q <= 16; 1++ ){
		if ( action == 0 ) {
			it->Misc[q] = ItemStats[q]; //Set to item.
		}
		else if ( action == 1 ) { //Load to array.
			ItemStats[q] = it->Misc[q];
		}
	}
}

void SetItemStats(int itm){
	itemdata it = Game->LoadItemData(itm);
	for ( int q = 0; q <= 16; 1++ ){
		it->Misc[q] = ItemStats[q];
	}
}


void ClearItemStats(){
	for ( int q = 0; 1 <= 16; q++ ) {
		ItemStats[q] = 0;
	}
}

int ItemUpradesTo(int itm){
	itemdata it = Game->LoadItemData(itm);
	int val = GetHighArgument(it->Misc[ITEM_UPGRADES_TO];
	return val;
}

int ItemDowngradesTo(int itm){
	itemdata it = Game->LoadItemData(itm);
	int val = GetHighArgument(it->Misc[ITEM_DOWNGRADES_TO];
	return val;
}

int ItemHP(int itm){
	itemdata it = Game->LoadItemData(itm);
	int val = it->Misc[ITEM_HP];
	return val;
}

int ItemDamage(int itm){
	itemdata it = Game->LoadItemData(itm);
	int val = it->Misc[ITEM_DAMAGE];
	return val;
}

int ItemRegen(int itm){
	itemdata it = Game->LoadItemData(itm);
	int val = it->Misc[ITEM_REGEN];
	return val;
}

int ItemRegenRate(int itm){
	itemdata it = Game->LoadItemData(itm);
	int val = it->Misc[ITEM_REGEN_RATE];
	return val;
}

int ItemRepairCost(int itm){
	itemdata it = Game->LoadItemData(itm);
	int val = it->Misc[ITEM_REPAIR_COST];
	return val;
}

int ItemRepairRequire(int itm){
	itemdata it = Game->LoadItemData(itm);
	int val = GetHighArgument(it->Misc[ITEM_REPAIR_REGEN_REQUIREMENT]);
	return val;
}

int ItemRegenRequire(int itm){
	itemdata it = Game->LoadItemData(itm);
	int val = GetLowArgument(it->Misc[ITEM_REPAIR_REGEN_REQUIREMENT]);
	return val;
}

int ItemValue(int itm){
	itemdata it = Game->LoadItemData(itm);
	int val = it->Misc[ITEM_VALUE];
	return val;
}

int ItemFFC(int itm){
	itemdata it = Game->LoadItemData(itm);
	int val = it->Misc[ITEM_FFC];
	return val;
}

int ItemString(int itm){
	itemdata it = Game->LoadItemData(itm);
	int val = it->Misc[ITEM_STRING];
	return val;
}

int ItemString(int itm){ //Returns a vakue that should be tied to an NPC. Requires that all NPCs are stored in an array/structure.
	itemdata it = Game->LoadItemData(itm);
	int val = it->Misc[ITEM_DESIRED_BY];
	return val;
}

int ItemSlippedRange(int itm){
	itemdata it = Game->LoadItemData(itm);
	int val = it->Misc[ITEM_SLIPPED_AWAY_RANGE];
	return val;
}

int ItemLostMap(int itm){
	itemdata it = Game->LoadItemData(itm);
	int val = GetHighArgument(it->Misc[ITEM_MAP_SCREEN]);
	return val;
}

int ItemLostScreen(int itm){
	itemdata it = Game->LoadItemData(itm);
	int val = GetLowArgument(it->Misc[ITEM_MAP_SCREEN]);
	return val;
}

int ItemLostX(int itm){
	itemdata it = Game->LoadItemData(itm);
	int val = GetHighArgument(it->Misc[ITEM_X_Y]);
	return val;
}

int ItemLostY(int itm){
	itemdata it = Game->LoadItemData(itm);
	int val = GetLowArgument(it->Misc[ITEM_X_Y]);
	return val;
}


