#include "commun.h"

static int srce;
extern int nLigne;
#define linescroll_script        gblLI->bgmi.linescrollScript

void IWRAM_CODE vcountHandlerGame()
{
	u32 niveau;

	//Première fois
	if (nLigne == -1)
	{
		nLigne = 0;

		//Trouve la première ligne visible
		while (linescroll_script[nLigne] <= bgmap_scrlY + 1)
			nLigne += 2;

		//On applique celui qui se trouve en-dessus
		if (linescroll_script[nLigne - 1] & 0x8000)
			srce = ((bgmap_scrlX * (linescroll_script[nLigne - 1] & 0x7fff)) >> 8);
		else
			srce = ((bgmap_scrlX * (linescroll_script[nLigne - 1] & 0x7fff)) >> 8) & 7;
		REG_BG1HOFS = srce;

		//                REG_BG1HOFS=((bgmap_scrlX*linescroll_script[nLigne-1])>>8)&7;
		niveau = (linescroll_script[nLigne] - bgmap_scrlY - 1);
		if (niveau >= niveau_eau)
		{
			niveau = niveau_eau;
			niveau_eau = 8000;
		}

		if (niveau >= 156)
			niveau = 255;
		REG_DISPSTAT = (1 << 3) | (1 << 5) | (niveau << 8);
	}
	else if (niveau_eau == 8000)
	{

		//Attention!
		if (jeuEnCours)
			CopieDMA0Ex(PaletteEau, BG_PALETTE, 512, DMA16 | DMA_HBLANK | DMA_ENABLE);
		niveau_eau = 9000;
		if (REG_VCOUNT + 1 >= linescroll_script[nLigne] - bgmap_scrlY)
		{
			if (linescroll_script[nLigne + 1] & 0x8000)
				srce = ((bgmap_scrlX * (linescroll_script[nLigne + 1] & 0x7fff)) >> 8);
			else
				srce = ((bgmap_scrlX * (linescroll_script[nLigne + 1] & 0x7fff)) >> 8) & 7;
			REG_BG1HOFS = srce;
		}

		while (REG_VCOUNT + 2 > linescroll_script[nLigne] - bgmap_scrlY)
			nLigne += 2;
		srce = (linescroll_script[nLigne] - bgmap_scrlY - 1);
		if (srce >= 156)
			srce = 255;
		REG_DISPSTAT = (1 << 3) | (1 << 5) | (srce << 8);
	}
	else
	{
		if (linescroll_script[nLigne + 1] & 0x8000)
			srce = ((bgmap_scrlX * (linescroll_script[nLigne + 1] & 0x7fff)) >> 8);
		else
			srce = ((bgmap_scrlX * (linescroll_script[nLigne + 1] & 0x7fff)) >> 8) & 7;
		CopieDMA0Ex(&srce, (void*)0x4000014, 1, DMA16 | DMA_HBLANK | DMA_ENABLE);

		//         REG_BG1HOFS=srce;
		while (REG_VCOUNT + 2 > linescroll_script[nLigne] - bgmap_scrlY)
			nLigne += 2;
		niveau = (linescroll_script[nLigne] - bgmap_scrlY - 1);
		if (niveau >= niveau_eau)
		{
			niveau = niveau_eau;
			niveau_eau = 8000;
		}

		if (niveau >= 156)
			niveau = 255;
		REG_DISPSTAT = (1 << 3) | (1 << 5) | (niveau << 8);
	}
}
