The General Store is where the player buys all of their upgrades and items. Store items unlock as the levels progresses, always dangling a new item in front of the player. The UI for this store was designed to read left to right. Also a smart hint bar always tells them what items are available, how much they can afford, how much they can hold. This help bar updates dynamically based on player stats.

The following is an excerpt of a script used in the General Store for accounting. This script checks available items in the level and then displays the appropriate icons and info in the store. What I did on the UI is figure out how the general store works, how it would be laid out, and how the player would interface with it. I also did the art for them and scripting of those elements in flash. The actual interface that took place between the game the UI and technical stuff of how it ran was all done by Thatcher Ulrich, an awesome programmer. (More info on Thatcher, http://www.tulrich.com ).

 

if (!inited)
{
 	 inited = true;
	 prefs = "";
 	 desc = "";
	 price = 0;
	 quantity = 0;
	 max_affordable = 0; // for buyables, how many we can afford.
	 max_holdable = 0; // for buyables, how many more we can hold.
// set_visible is used to toggle the visiblity 
   set_visible = function(vis)
   {
   	this._visible = vis;
   }
 // For showing our state as selected or not.
   set_selected = function(selected)
   {
  	 highlight._visible = selected;
   }
 // Set our quantity.
   set_quantity = function(qty)
   {
  	 quantity = qty;
   }
 // Copy our info from another item
   copy_info_from = function(item)
   {
  	 set_info(item.prefs, item.price, item.quantity, item.max_affordable, item.max_holdable);
   }
 // For setting our item & price info.
   set_info = function(prefs_in, price_in, qty, max_affordable_in, max_holdable_in)
   {
	 this.GetString = _root.GetString;
	 this.prefs = prefs_in;
   this.desc = "";
   this.price = price_in;
   set_quantity(qty);
   this.max_affordable = max_affordable_in;
   this.max_holdable = max_holdable_in;
   icon_endurreg2._visible = false;
   icon_can1._visible = false;
   icon_can2._visible = false;
   icon_breeder._visible = false;
   icon_boombatqueen._visible = false;
   icon_stingbee._visible = false;
   icon_sparkstunkz._visible = false;
	 var icon_alpha = 100; // normally, icon is fully visible
   if (this.quantity == 0)
   {
   	icon_alpha = 50; // none available; fade it out
   }
//check info on items against the values we gathered from player and display the correct info.
	 if (prefs == "\\data\\prefs\\artifacts\\enduranceregenboost2.txt")
   {
   	icon_endurreg2._visible = true;
   	icon_endurreg2._alpha = icon_alpha;
   	desc = GetString("store_endurencereg2_desc");
   }
   else if (prefs == "\\data\\prefs\\artifacts\\bountycanmediium.txt")
   {
   	icon_can1._visible = true;
  	icon_can1._alpha = icon_alpha;
   	desc = GetString("store_can1_desc");
   }
   else if (prefs == "\\data\\prefs\\artifacts\\bountycanfast.txt")
   {
   	icon_can2._visible = true;
   	icon_can2._alpha = icon_alpha;
   	desc = GetString("store_can2_desc");
   }
   else if (prefs == "\\data\\prefs\\artifacts\\breederbag.txt")
   {
   	icon_breeder._visible = true;
   	icon_breeder._alpha = icon_alpha;
   	desc = GetString("store_breeder_desc");
   }
   else if (prefs == "\\data\\prefs\\artifacts\\trapfuzzlerabid.txt")
   {
   	icon_rabidfuzzle._visible = true;
   	icon_rabidfuzzle._alpha = icon_alpha;
   	desc = GetString("store_rabidfuzzles_desc");
   }
   else if (prefs == "\\data\\prefs\\artifacts\\damageboombatqueen.txt")
   {
   	icon_boombatqueen._visible = true;
   	icon_boombatqueen._alpha = icon_alpha;
   	//desc = GetString("store_dynamiteextender_desc");
   }
   else if (prefs == "\\data\\prefs\\artifacts\\immobilizesparkstunkz.txt")
   {
   	icon_sparkstunkz._visible = true;
   	icon_sparkstunkz._alpha = icon_alpha;
   	//desc = GetString("store_dynamiteextender_desc");
   }
   else if (prefs == "\\data\\prefs\\artifacts\\damagestingbee.txt")
   {
   	icon_stingbee._visible = true;
   	icon_stingbee._alpha = icon_alpha;
   	//desc = GetString("store_dynamiteextender_desc");
   }
   else if (prefs == "\\data\\prefs\\artifacts\\damageriotslug.txt")
   {
   	icon_riotslug._visible = true;
   	icon_riotslug._alpha = icon_alpha;
   	//desc = GetString("store_dynamiteextender_desc");
   }
   else if (prefs == "\\data\\prefs\\artifacts\\attracterimmobilizeskunkbomb.txt")
   {
   	icon_attracteskunkbomb._visible = true;
   	icon_attracteskunkbomb._alpha = icon_alpha;
   	desc = GetString("store_attracterskunkbomb_desc");
   	//desc = GetString("store_dynamiteextender_desc");
   }
   else if (prefs == "\\data\\prefs\\artifacts\\attracterchipmunk.txt")
   {
   	icon_attracterchippunk._visible = true;
   	icon_attracterchippunk._alpha = icon_alpha;
   	desc = GetString("store_attracterchippunk_desc");
  	 //desc = GetString("store_dynamiteextender_desc");
   }
   */
   // etc.
}

The Bounty Store provides missions for the player. The store is designed to give the player one bounty at a time. This is so they can pick the bounty of their choice, but once on that bounty they are on a controlled linear mission.