int CountedItems[256]={
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
//128
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
}
int _GlobalGameRAM[256];
//Indices of _GlobalGameRAM
const int GR_NUM_COLLECTIBLE_ITEMS = 0; //
const int GR_CURRENT_NUM_ITEMS_COLLECTED = 1;
int CheckCountedItems()
{
int count;
for ( int q = 0; q < 256; q++ )
{
if ( CountedItems[q] && Link->Item[q] ) count++;
}
return count;
}
void SetNumllectibleItems(){
//read all of the arrays and assemble this index in the active script.
int count;
count += NumTriforcePieces();
count += CheckCountedItems();
//determine how many items are collectible, and assign it to count;
_GlobalGameRAM[GR_NUM_COLLECTIBLE_ITEMS] = count;
}
void GetNumllectibleItems() { return _GlobalGameRAM[GR_NUM_COLLECTIBLE_ITEMS]; }
void Collecteditem(){
_GlobalGameRAM[GR_CURRENT_NUM_ITEMS_COLLECTED]++;
}
void GetCollectedItems(){ return _GlobalGameRAM[GR_CURRENT_NUM_ITEMS_COLLECTED]; }
//Returns the percentage of completion.
int PercentCollected()
{
return ( ( GetNumllectibleItems() / 100 ) * GetCollectedItems() );
}
void AddCountedItem(int item_id){ CountedItems[item_id] = 1; }
const int COLLECTIBLE_HEART_PIECES = 0;
const int COLLECTIBLE_MAGIC_JARS = 1;
const int COLLECTIBLE_BOMB_EXPANSIONS = 2;
const int COLLECTIBLE_WALLET_EXPANSIONS = 3;
const int COLLECTIBLE_ARROW_EXPANSIONS = 4;
const int MAX_IN_GAME_HEART_PIECES_ = 32;
const int MAX_IN_GAME_MAGIC_JARS = 16;
const int MAX_IN_GAME_BOMB_EXPANSIONS = 4;
const int MAX_IN_GAME_WALLET_EXPANSIONS = 4;
const int MAX_IN_GAME_ARROW_EXPANSIONS = 4;
const int COLLECTIBLE_CAPS_OFFSET = 16;
int Collectibles[32] =
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
MAX_IN_GAME_HEART_PIECES_, MAX_IN_GAME_MAGIC_JARS, MAX_IN_GAME_BOMB_EXPANSIONS, MAX_IN_GAME_WALLET_EXPANSIONS, MAX_IN_GAME_ARROW_EXPANSIONS
} ; //0 and 1 are heart pieces and magic jars; 2 is bomb expansions,
//3 is rupee expansions, 4 is arrow expansions.. You can add more if needed.
//Returns the maximum number of collectible expansion items.
int GetMaxCollectibles()
{
int count;
int q[2];
q[1] = SizeOfArray(Collectibles);
q[0] = q[1]/2;
for ( ; q[0] < q[1]; q[0]++ )
{
count += Collectibles[ q[0] ];
}
return count;
}
//D1: Collect ID: If a positive number, this item will be set true in the CountedItems[] array.
// if a NEGATIVE number, this index of AddCountedItem[] will increase by 1.
int CheckCollectibles()
{
int count;
int q[2];
q[0] = SizeOfArray(Collectibles) / 2;
for ( ; q[0] <= 0; q[0]-- )
{
count += Collectibles[ q[0] ];
}
return count;
}
item script PickupItem{
void run(int msg, int collect_id){
collect_id = (collect_id << 0);
if ( msg > 0 ) { Screen->Message(msg);
if ( collect_id > -1 && collect_id < 256 ) { CountedItems[collect_id] = 1; }
if ( collect_id < 0 )
{
collect_id = collect_id * -1;
if ( collect_id < SizeOfArray(Collectibles) )
{
Collectibles[collect_id]++;
}
}
}
}
//map, bosskey, compass == 3 ( * numlevels )
//Normally 9, so 27
int DungeonItems[27];
int GetCollectedDungeonItems()
{
int count;
for ( int q = SizeOfArray(DungeonItems); q >= 0; q-- )
{
if ( DungeonItems[q] ) count++;
}
return count;
}
//D0 Mesaage
//D1 Type : 0 == map, 1 == compass, 2 == bosskey
item script DungeonItemPickup
{
int dungeon = Game->GetCurLevel() * 3;
void run(int msg, int itype)
{
if ( msg > 0 ) { Screen->Message(msg); }
//Set the appropriate index for the level
DungeonItems[dungeon+itype] = 1;
}
}
int TriforcePieces[8]; //This is silly. Use a function to read the number owned instead.
global script Init
{
void run()
{
//This covers the basic ZC items. If you add items, or change item IDs, you will need to adjust the list.
AddCountedItem( I_AMULET1 );
AddCountedItem( I_AMULET2 );
AddCountedItem( I_ARROW1 );
AddCountedItem( I_ARROW2 );
AddCountedItem( I_ARROW3 );
AddCountedItem( I_BAIT );
AddCountedItem( I_BOMB );
AddCountedItem( I_BOMBBAG1 );
AddCountedItem( I_BOMBBAG2 );
AddCountedItem( I_BOMBBAG3 );
AddCountedItem( I_BOMBBAG4 );
AddCountedItem( I_BOOK );
AddCountedItem( I_BOOTS );
AddCountedItem( I_BOW1 );
AddCountedItem( I_BOW2 );
AddCountedItem( I_BRACELET1 );
AddCountedItem( I_BRACELET2 );
AddCountedItem( I_BRACELET3 );
AddCountedItem( I_BRANG1 );
AddCountedItem( I_BRANG2 );
AddCountedItem( I_BRANG3 );
AddCountedItem( I_CANDLE1 );
AddCountedItem( I_CANDLE2 );
AddCountedItem( I_CBYRNA );
AddCountedItem( I_CHARGERING1 );
AddCountedItem( I_CHARGERING2 );
AddCountedItem( I_CROSSSCROLL );
AddCountedItem( I_DINSFIRE );
AddCountedItem( I_FARORESWIND );
AddCountedItem( I_FLIPPERS );
AddCountedItem( I_HAMMER );
AddCountedItem( I_HEARTRING1 );
AddCountedItem( I_HEARTRING2 );
AddCountedItem( I_HEARTRING3 );
AddCountedItem( I_HOOKSHOT1 );
AddCountedItem( I_HOOKSHOT2 );
AddCountedItem( I_HOVERBOOTS );
AddCountedItem( I_LADDER1 );
AddCountedItem( I_LADDER2 );
AddCountedItem( I_LENS );
AddCountedItem( I_LETTER );
AddCountedItem( I_MAGICKEY );
AddCountedItem( I_MAGICRING1 );
AddCountedItem( I_MAGICRING2 );
AddCountedItem( I_MAGICRING3 );
AddCountedItem( I_MAGICRING4 );
AddCountedItem( I_NAYRUSLOVE );
AddCountedItem( I_PERILRING );
AddCountedItem( I_PERILSCROLL );
AddCountedItem( I_POTION1 );
AddCountedItem( I_POTION2 );
AddCountedItem( I_QUAKESCROLL1 );
AddCountedItem( I_QUAKESCROLL2 );
AddCountedItem( I_QUIVER1 );
AddCountedItem( I_QUIVER2 );
AddCountedItem( I_QUIVER3 );
AddCountedItem( I_QUIVER4 );
AddCountedItem( I_RAFT );
AddCountedItem( I_RING1 );
AddCountedItem( I_RING2 );
AddCountedItem( I_RING3 );
AddCountedItem( I_ROCSFEATHER );
AddCountedItem( I_SBOMB );
AddCountedItem( I_SHIELD1 );
AddCountedItem( I_SHIELD2 );
AddCountedItem( I_SHIELD3 );
AddCountedItem( I_SPINSCROLL1 );
AddCountedItem( I_SPINSCROLL2 );
AddCountedItem( I_STOMPBOOTS );
AddCountedItem( I_STONEAGONY );
AddCountedItem( I_SWORD1 );
AddCountedItem( I_SWORD2 );
AddCountedItem( I_SWORD3 );
AddCountedItem( I_SWORD4 );
AddCountedItem( I_WALLET500 );
AddCountedItem( I_WALLET999 );
AddCountedItem( I_WALLETA );
AddCountedItem( I_WAND );
AddCountedItem( I_WEALTHMEDAL );
AddCountedItem( I_WEALTHMEDAL2 );
AddCountedItem( I_WEALTHMEDAL3 );
AddCountedItem( I_WHIMSICALRING );
AddCountedItem( I_WHISPRING1 );
AddCountedItem( I_WHISPRING2 );
AddCountedItem( I_WHISTLE );
//Add custom items after this point:
}
}