// Script Author: Andrew Shinn, Thanks to a1kon, calvin, doc, pgmfi.org in general and anyone else who I've missed for making stuff like this possible.
// Thanks to Civic TSI for making this a much better feature.
;

num ed_table = 0x6AA0;
num speed_base = 0x6AA1;
num rpm_table1 = 0x6AA2;
num rpm_table2 = 0x6AA4;
num rpm_table3 = 0x6AA6;
num rpm_table4 = 0x6AA8;
num cross_speed1	= 0x6AB8;
num cross_speed2	= 0x6ABC;
num cross_speed3	= 0x6AC0;

num hShiftRPM1		= -1;
num hShiftRPM2		= -1;
num hShiftRPM3		= -1;
num hShiftRPM4		= -1;
num hShiftSpeed1	= -1;
num hShiftSpeed2	= -1;
num hShiftSpeed3	= -1;
num hShiftEnable	= -1;
num hSpeedBase		= -1;

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

	CreateBorder(x, y, 200, 210, 5, 0, "Shift Light");
	CreateStatic(x+5, y-5, 100, 20, 5, 0, "Shift Light");

	x = x + 20;
	y = y + 20;
	hShiftRPM1 = CreateEdit(x, y, 75, 20, 5, 0, "");
	hShiftSpeed1 = CreateEdit(x, y+20, 75, 20, 5, 0, "");
	CreateStatic(x+80, y, 90, 20, 5, 0, "1st RPM");
	CreateStatic(x+80, y+20, 90, 20, 5, 0, "1st Speed");
	hShiftRPM2 = CreateEdit(x, y+40, 75, 20, 5, 0, "");
	hShiftSpeed2 = CreateEdit(x, y+60, 75, 20, 5, 0, "");
	CreateStatic(x+80, y+40, 90, 20, 5, 0, "2nd RPM");
	CreateStatic(x+80, y+60, 90, 20, 5, 0, "2nd Speed");
	hShiftRPM3 = CreateEdit(x, y+80, 75, 20, 5, 0, "");
	hShiftSpeed3 = CreateEdit(x, y+100, 75, 20, 5, 0, "");
	CreateStatic(x+80, y+80, 90, 20, 5, 0, "3rd RPM");
	CreateStatic(x+80, y+100, 90, 20, 5, 0, "3rd Speed");
	hShiftRPM4 = CreateEdit(x, y+120, 75, 20, 5, 0, "");
	CreateStatic(x+80, y+120, 90, 20, 5, 0, "4th RPM");

	hSpeedBase = CreateCheck(x, y+160, 90, 20, 5, 0, "Use km/h");
	if((readbyte(speed_base)) == 0x01)
		setitem(hSpeedBase, 1);
	else
		setitem(hSpeedBase, 0);

	hShiftEnable = CreateCheck(x+100, y+160, 70, 20, 5, 0, "Enable");
	if((readbyte(ed_table)) == 0x01)
		setitem(hShiftEnable, 1);
	else
		setitem(hShiftEnable, 0);

	SetItem(hShiftRPM1, round(1875600 / readword(rpm_table1)),0));
	SetItem(hShiftRPM2, round(1875600 / readword(rpm_table2)),0));
	SetItem(hShiftRPM3, round(1875600 / readword(rpm_table3)),0));
	SetItem(hShiftRPM4, round(1875600 / readword(rpm_table4)),0));

	if(getitem(hspeedbase))
	{
		SetItem(hShiftSpeed1, readbyte(cross_speed1));
		SetItem(hShiftSpeed2, readbyte(cross_speed2));
		SetItem(hShiftSpeed3, readbyte(cross_speed3));
	}
	else
	{
		SetItem(hShiftSpeed1, round(readbyte(cross_speed1) * 0.6214));
		SetItem(hShiftSpeed2, round(readbyte(cross_speed2) * 0.6214));
		SetItem(hShiftSpeed3, round(readbyte(cross_speed3) * 0.6214));
	}
}

void save()
{
	
	if((getitem(hShiftEnable)) == 0)
	{
		// Shift Light Disabled
		writebyte(ed_table, 0x00);
	}
	else
	{
		// Shift Light Enabled Jump
		writebyte(0x4291, 0x03);
		writeword(0x4292, 0x6AAA);
		assemble("shiftlight.asm", 0x6AA0);
		writebyte(ed_table, 0x01);
		writebyte(speed_base, getitem(hSpeedBase));

		writeword(0x6AAE, ed_table);
 		writeword(0x6AC5, rpm_table4);
		writeword(0x6ACB, rpm_table3);
 		writeword(0x6AD1, rpm_table2);
		writeword(0x6AD7, rpm_table1);
		writeword(rpm_table1, 1875600 / GetItem(hShiftRPM1));
		writeword(rpm_table2, 1875600 / GetItem(hShiftRPM2));
		writeword(rpm_table3, 1875600 / GetItem(hShiftRPM3));
		writeword(rpm_table4, 1875600 / GetItem(hShiftRPM4));
		if(getitem(hspeedbase))
		{
			writebyte(cross_speed1, GetItem(hShiftSpeed1));
			writebyte(cross_speed2, GetItem(hShiftSpeed2));
			writebyte(cross_speed3, GetItem(hShiftSpeed3));
		}
		else
		{
			writebyte(cross_speed1, GetItem(hShiftSpeed1) / 0.6214);
			writebyte(cross_speed2, GetItem(hShiftSpeed2) / 0.6214);
			writebyte(cross_speed3, GetItem(hShiftSpeed3) / 0.6214);
		}
	}
}
