@Majora wants a script that doesn't use LTMs for Active shield(when the button is pressed) or doesn't use LTMs at all, @CJC ? I altered... well rewrote the script he uses for shields to ghost link(make him invisible and draw over him) when he uses the shields instead of LTMs. This simplifies using LTMs to only being needed for the shield when not in use. I could draw a shield tile over link when he walks(has a shield and not using it) but it would be stuck in one place as I can't think of a way to match it with links walking sprites, it would disappear when you use the sword and such, and would have to be adusted for each shield and whatever tiles are used. Best to stick with LTMs for that IMHO.

Code:
const int I_FAKESHIELD1		= 140; 	//Extra Items 18, 19, and 20
const int I_FAKESHIELD2		= 141; 	// -change if these items are 
const int I_FAKESHIELD3		= 142; 	// -already in use
const int BUT_SHIELD		= 0; 	// -1 = L, 0 = R, 1 = Ex1, 2 = Ex2, 3 = Ex3, 4 = Ex4 <-Button to use for shield
const int DO_STRAFE			= 1; 	//Any value other than 0 turns on strafing
const int SFX_SHIELDUP		= 89;	// The sound to use when Shield is held up. 
const int TILE_LINK			= 34500; //first tile(Small shield facing up)

int walking;	//keeps track of link walking
bool lr;		//used for L and R
global script ExShield
{
	void run()
	{
		int strafeDir; 	//stores Link's direction
		bool shield;   	//keeps track on when shield is up
		
		
		while(true)
		{
			if(BUT_SHIELD == -1 && Link->InputL){Link->InputL = false; lr = true;}
			else if(BUT_SHIELD == 0 && Link->InputR){Link->InputR = false; lr = true;}
			else lr = false;
			if(!shield)strafeDir = Link->Dir;
			if(ShieldInput() && !shield && !DoingMore())	//Shield button pressed and shield is inactive.
			{
				shield = true;
				Link->Invisible = true;
				if(Link->Item[I_FAKESHIELD3]) Link->Item[I_SHIELD3]=true;
                else if(Link->Item[I_FAKESHIELD2]) Link->Item[I_SHIELD2]=true;
                else if(Link->Item[I_FAKESHIELD1]) Link->Item[I_SHIELD1]=true;
				else shield = false;
				if(shield) Game->PlaySound(SFX_SHIELDUP);
			}
			else if((!ShieldInput() && shield) || (DoingMore() && shield))
			{
				shield = false;
				Link->Invisible = false;
				Link->Item[I_SHIELD3] = false;
                Link->Item[I_SHIELD2] = false;
                Link->Item[I_SHIELD1] = false;
			}
			if(shield && ShieldInput())
			{
				if(DO_STRAFE){ 
					Waitdraw();
					GhostLink(strafeDir); 
					Link->Dir = strafeDir; } //forces link to face the same direction
				else GhostLink(); //draws link
			}
			
			Waitframe();
		} //end of while loop
	}// end of run
	bool ShieldInput()
	{
		if(BUT_SHIELD == 1 && Link->InputEx1) return true;
		else if(BUT_SHIELD == 2 && Link->InputEx2) return true;
		else if(BUT_SHIELD == 3 && Link->InputEx3) return true;
		else if(BUT_SHIELD == 4 && Link->InputEx4) return true;
		else return lr;
	}
	bool DoingMore() //checks for any action besides walking
    {
        for(int i = 2; i < 25; i++)
        {
            if(Link->Action == i) return true;
        }
        return false; //if function reaches the end of for loop returns false
    }
	void GhostLink() //Draws Link. Three tiles for each direction in order: Up Down Left Right
	{
		int val = TILE_LINK; 			//set initial tile

		if(Link->Item[I_FAKESHIELD3]) val += 40;		//move to row for Shield current shield
        else if(Link->Item[I_FAKESHIELD2]) val += 20; 
		
		if(Link->Dir == DIR_RIGHT) val += 9;		//move to first tile for direction
		else if(Link->Dir == DIR_LEFT) val += 6;
		else if(Link->Dir == DIR_DOWN) val += 3;
	
		if(Link->Action == LA_WALKING)walking++;	//alternate for walking
		if(walking >= 64)walking = 0;
		else if(walking >= 48)val += 2;
		else if(walking >= 16 && walking <= 32) val += 1;
		
		Screen->FastTile(2, Link->X, Link->Y, val, 6, 128); //draw tile.
	}
	void GhostLink(int dir) //Draws Link in one direction.
	{
		int val = TILE_LINK; 			//set initial tile

		if(Link->Item[I_FAKESHIELD3]) val += 40;		//move to row for Shield current shield
        else if(Link->Item[I_FAKESHIELD2]) val += 20; 
		
		if(dir == DIR_RIGHT) val += 9;		//move to first tile for direction
		else if(dir == DIR_LEFT) val += 6;
		else if(dir == DIR_DOWN) val += 3;
	
		if(Link->Action == LA_WALKING)walking++;	//alternate for walking
		if(walking >= 64)walking = 0;
		else if(walking >= 48)val += 2;
		else if(walking >= 16 && walking <= 32) val += 1;
		
		Screen->FastTile(2, Link->X, Link->Y, val, 6, 128); //draw tile.
	}	
} //end of global script
For anyone that doesn't know how to use this script: You make three custom items, "Dummy Shields," and give those in the quest as you would the real shields. The dummies are the items that show up in the inventory and can be used for LTMs for when the shield isn't in use. Other than that all you need to do is set the constants to your liking.

Example quest.

How the tiles it uses are laid out.