Copy-paste from PureZC...

Code:
// Shop- Oracles-style shop, where you must press A to buy the item. There is no confirmation message, though, so only press A if you want the item!
// Limtations are simply the fact that I can't use the D variables of any other FFCs besides the one this script is set on, thus only four items per shop,
// and the fact that you won't hold up the item when you buy it... But it's useful, regardless! The shop can be anywhere on the screen now! However, this
// means you'll need to waste a few combos to show the item and the price... But it's worth it. Also, think about this: This script means no more leaving and
// exiting a shop just to buy more than one item...;) Plus, there's more versatility with THIS script. No more wasting Shop Types. Now, one script does it
// all. Each FFC has its own per-screen D variable from 0 to 7. This script uses 0-3 for the items you buy, and 4-7 for their prices. The screen-specificness
// of the D variables adds to the versatility. For example, on one screen, you could set up a shop that sells the 3 Shields, while on another, the very same
// script sets you up a shop that sells Bombs. I made this because I didn't particularly like how Zelda Classic's Z1 shops are done.... Plus, my quest, Realm
// of Mirrors, needed Oracles-styled things... Anyways, have fun with this script! ~Matthew
// Constants:
// nerm- Weird name, yes, but... Message to use when you try to buy an item without the required amount of Rupees. "THAT AIN'T ENOUGH TO BUY!"
// D variables:
// item1- Variable D0. First item you can buy.
// item2- Variable D1. Second item you can buy.
// item3- Variable D2. Third item you can buy.
// item4- Variable D3. Fourth item you can buy.
// price1- Variable D4. Price of item1.
// price2- Variable D5. Price of item2.
// price3- Variable D6. Price of item3.
// price4- Variable D7. Price of item4.

import "std.zh"

const int nerm = 12;
ffc script shop
{
	void run(int item1, int item2, int item3, int item4, int price1, int price2, int price3, int price4) //load up the D variables
	{
		int nobuy = 0;
		int wait = 1;
		while(true) //as long as the script is active, it'll NEVER stop. Yay!
		{
			ffc buy1 = Screen->LoadFFC(31);
			ffc buy2 = Screen->LoadFFC(30);   //we load the 4 FFCs to be used for the shop here...
			ffc buy3 = Screen->LoadFFC(29);
			ffc buy4 = Screen->LoadFFC(28);
			while(Link->X == buy1->X && Link->Y == buy1->Y) //continue only if Link is on the FFC
			{
				if(nobuy == 1) //checks if it shouldn't allow buying, "no-buy timer"
				{
					while(wait > 0)
					{			//this whole section prevents you from buying an item over and over again if you hold down A, AKA "no-buy timer"
						wait -= 1; //take away from the timer
						Waitframes(60); //wait one full second before continuing. 60 frames = 1 second....therefore, the value of "wait" is the amount of seconds on the no-buy timer... I wouldn't try 3, though. Too long, trust me.
					}
					nobuy = 0; //reset everything back to normal
					wait = 1;
				}
				if(Link->InputA && nobuy == 0 && Game->Counter[1] >= price1 && Link->Dir == 0) //only allow buying if you press A, if the no-buy timer has expired, if you have enough Rupees, and if you're...y'know, FACING the item...
				{
					Link->InputA = false; //stops Link from attacking....can't have that
					nobuy = 1;		//helps start the no-buy timer
					Screen->CreateItem(item1); //create the item that we're buying
					int itemcount = Screen->NumItems(); //find out how many items are on-screen...just a simple precaution. Since the item you're buying is most likely going to be the last item in the list, NumItems will give you the item's ID all the time...but then, that's if no other script creates items...
					item newitem = Screen->LoadItem(itemcount);
					newitem->X = Link->X;			//this section places the item on Link...simply GIVING it to him isn't enough... After all, what will tell the player they bought it successfully?
					newitem->Y = Link->Y;
					int drainwait = price1; //places the price of the item you just bought into a new variable to be deducted from...we can't deduct from the price variable, or else the price of the item might go down. XD
					while(drainwait > 0)
					{
						Game->Counter[1] -= 1;		//we take away Link's Rupees gradually here...just like with the normal shops.
						drainwait -= 1; //take away 1 from the deduction variable so it knows how much more to take away
						Waitframe(); //wait one frame...without this, the script would freeze the player...and that could be dangerous. VERY dangerous indeed...
					}
				}
				else if(Link->InputA && Game->Counter[1] < price1) //check if the player tries to buy an item without enough Rupees
				{
					Screen->Message(nerm); //bring up a message to tell the player that he/she needs more Rupees
					nobuy = 1; //hey, without this, the message will keep repeating! :O
				}
				Waitframe();
			}
			while(Link->X == buy2->X && Link->Y == buy2->Y)
			{
				if(nobuy == 1)
				{
					while(wait > 0)
					{
						wait -= 1;
						Waitframes(60);
					}
					nobuy = 0;
					wait = 1;
				}
				if(Link->InputA && nobuy == 0 && Game->Counter[1] >= price2 && Link->Dir == 0)
				{
					Link->InputA = false;
					nobuy = 1;
					Screen->CreateItem(item2);
					int itemcount = Screen->NumItems();
					item newitem = Screen->LoadItem(itemcount);
					newitem->X = Link->X;
					newitem->Y = Link->Y;
					int drainwait = price2;
					while(drainwait > 0)
					{
						Game->Counter[1] -= 1;
						drainwait -= 1;
						Waitframe();
					}
				}
				else if(Link->InputA && Game->Counter[1] < price2)
				{
					Screen->Message(nerm);
					nobuy = 1;
				}
				Waitframe();
			}
			while(Link->X == buy3->X && Link->Y == buy3->Y)
			{
				if(nobuy == 1)
				{
					while(wait > 0)
					{
						wait -= 1;
						Waitframes(60);
					}
					nobuy = 0;
					wait = 1;
				}
				if(Link->InputA && nobuy == 0 && Game->Counter[1] >= price3 && Link->Dir == 0)
				{
					Link->InputA = false;
					nobuy = 1;
					Screen->CreateItem(item3);
					int itemcount = Screen->NumItems();
					item newitem = Screen->LoadItem(itemcount);
					newitem->X = Link->X;
					newitem->Y = Link->Y;
					int drainwait = price3;
					while(drainwait > 0)
					{
						Game->Counter[1] -= 1;
						drainwait -= 1;
						Waitframe();
					}
				}
				else if(Link->InputA && Game->Counter[1] < price3)
				{
					Screen->Message(nerm);
					nobuy = 1;
				}
				Waitframe();
			}
			while(Link->X == buy4->X && Link->Y == buy4->Y)
			{
				if(nobuy == 1)
				{
					while(wait > 0)
					{
						wait -= 1;
						Waitframes(60);
					}
					nobuy = 0;
					wait = 1;
				}
				if(Link->InputA && nobuy == 0 && Game->Counter[1] >= price4 && Link->Dir == 0)
				{
					Link->InputA = false;
					nobuy = 1;
					Screen->CreateItem(item4);
					int itemcount = Screen->NumItems();
					item newitem = Screen->LoadItem(itemcount);
					newitem->X = Link->X;
					newitem->Y = Link->Y;
					int drainwait = price4;
					while(drainwait > 0)
					{
						Game->Counter[1] -= 1;
						drainwait -= 1;
						Waitframe();
					}
				}
				else if(Link->InputA && Game->Counter[1] < price4)
				{
					Screen->Message(nerm);
					nobuy = 1;
				}
				Waitframe();
			}
			Waitframe();
		}
	}
}
Yes, Oracles-style. It's actually more of LttP-style, since you don't pick up the item you buy and take it to the shopkeeper... But anyways...

REPLACE THIS WITH ALL NORMAL Z1 SHOPS IN YOUR QUESTS OR ELSE YOU WILL DIE! Just kidding. This is more versatile than normal shops. For starters, since I'm using the FFCs... You get to put your items anywhere you want. They don't even have to be right next to each other. Second, you get up to FOUR items in your shop! My original plan was to have that limit only be limited by the number of FFCs you could use...but I can't figure out how to access the D variables on other FFCs. If I could do THAT... Well, the script would be super-awesome. But oh well. Third, this one script, thanks again to the D variables, allows you to make MANY shops! Just one script is all that's needed. :) Now, how to work it...

D0-D3 are the item IDs for the items you buy. Look in std.zh for the info for THAT. D4-D7 are the prices for those items. Yes, it's respective. The only constant in the entire script decides what message appears when you don't have enough Rupees to buy an item. I actually thought about adding in a message for when you buy an item, but decided against that. For one, I don't have any D variables left for that, and two, you can do that with another script, placed on the item... Anyways, I don't wanna do it.

Don't mess with anything else, 'kay? Well, except "wait". Change that if you want to wait LONGER before you can try to buy an item again. Change the value in the "Waitframes", too, if you wanna try to make it wait a SHORTER amount of time. 60 frames = 1 second, by the way. If you wanna know how anything works, look at my little notes there. Just began using them with this script... And for this very reason, I might add! So, have fun with the script and stuffs! Let me know if there's anything else you wish to know about this script...

*le gasp for air* A lot to post, but... I hope that most new quests will use this script over the original shop types.