// Author: Uberteg;

num Uberteg		= 0x01;
num nTpsFuel		= 0x7A0D;
num nMainFuel		= 0x7A0F;
num nColdFuel		= 0x7A11;

num hTPSFuel		= -1;
num hMainFuel		= -1;
num hColdFuel		= -1;
num hFuelEnable		= -1;

num hSuggestedValue;

void open()
{
	num x = 10;
	num y = 110;

	CreateBorder(x, y, 230, 150, 6, 0, "Fuel Mod");
	CreateStatic(x+5, y-5, 100, 20, 6, 0, "Fuel Modifiers");

	x = x + 20;
	y = y + 20;
	hTPSFuel = CreateEdit(x, y, 50, 20, 6, 0, "");
	CreateStatic(x+60, y, 90, 20, 6, 0, "TPS Enrich");
	setitem(hTPSFuel, round(readword(nTpsFuel) / 0x8000 / 100));

	y = y + 20;
	hColdFuel = CreateEdit(x, y, 50, 20, 6, 0, "");
	CreateStatic(x+60, y, 90, 20, 6, 0, "Cold Enrich");
	setitem(hColdFuel, round(readword(nColdFuel) / 0x8000 / 100));

	y = y + 20;
	hMainFuel = CreateEdit(x, y, 50, 20, 6, 0, "");
	CreateStatic(x+60, y, 90, 20, 6, 0, "Main Enrich");
	setitem(hMainFuel, round(readword(nMainFuel) / 0x8000 / 100));

	y = y + 30;
	hSuggestedValue = CreateEdit(x, y, 50, 20, 6, 0, "");
	CreateStatic(x+60, y, 100, 20, 6, 0, "Suggested Value");
	GetFuelModSuggestedValue();

	y = y + 30;
	hFuelEnable = CreateCheck(x+120, y, 70, 20, 6, 0, "Enable");
	if((readword(0x14AD)) == 0x7500)
		setitem(hFuelEnable, 1);
	else
		setitem(hFuelEnable, 0);
}

void GetFuelModSuggestedValue()
{
	setitem(hSuggestedValue, round(240 / readword(nInjSave) / 100));
}

void DisableCRC()						// bit of a hack, this function is called when the rom is being converted to an uberdata rom
{
	writeword(nTpsFuel, 0x8000);
	writeword(nMainFuel, 0x8000);
	writeword(nColdFuel, 0x8000);
	
	assemble("tpsfuel.asm", 0x7500);
	assemble("coldfuel.asm", 0x7580);
	assemble("mainfuel.asm", 0x7600);
	
	// Add Datalogging
	writeword(0x000A, 0x6A00);		// redirect the serial handler for datalogging
	assemble("datalogger.asm", 0x6A00);	// assemble datalogging
	writebyte(0x270C, 0xF8);		// Switch serial port to 38400 buad #1
	writebyte(0x37C3, 0xF8);		// Switch serial port to 38400 buad #2
	
	writeword(0x6A7A, 0xCC03);
	writebyte(0x6A82, 0x00);
	writebyte(0x6A84, 0x03);
	writebyte(0x6A86, 0x00);
	writebyte(0x6A8A, 0x01);
	writebyte(0x6A9A, 0x00);
	
}

void save()
{
	writeword(nTpsFuel, 0x8000 * getitem(hTPSFuel) / 100);
	writeword(nMainFuel, 0x8000 * getitem(hMainFuel) / 100);
	writeword(nColdFuel, 0x8000 * getitem(hColdFuel) / 100);
	

	if((getitem(hFuelEnable)) == 0)
	{
		// TPS fuel
		writebyte(0x14AC, 0x87);
		writeword(0x14AD, 0xCD44);

		// Cold fuel
		writebyte(0x1468, 0xD4);
		writeword(0x1469, 0xED42);

		// Main fuel
		writeword(0x129B, 0x4F17);
	}
	else
	{
		// TPS fuel jump
		writebyte(0x14AC, 0x03);
		writeword(0x14AD, 0x7500);

		// Cold fuel jump
		writebyte(0x1468, 0x03);
		writeword(0x1469, 0x7580);

		// Main fuel jump
		writeword(0x129B, 0x7600);
	}
}
