// ZC 2.54, Alpha 1

/////////////////
///  ZScript  ///
/////////////////


Added Audio-> pointer, for audio and music functions. Old functions such as PlaySOund are /cloned/ here, so
	you may do either game->PlaySound(), or Audio->PlaySOund() with the same effect.
	New audio function will be here. 
Added Debug-> pointer, for experimental stuff, and things meant purely for debugging. 
Added NPCData-> pointer, for editing the enemy editor npc values. 
Added Text-> Pointer, for modern text dialgoue.
Added Graphics-> Pointer, for graphical functions. Old isntructions will be cloned, and new instructions, such as 
	palette editing, will go here. 
Added ComboData-> Pointer, for editing the ombo table properties by script. 
Added SpriteData->Pointer, for editing the weapons/misc sprite properties by script. 

////////////////
///  Global  ///
////////////////


int SizeOfArrayBool(bool array[]);	ZASM Instruction:
					ARRAYSIZEB d2
/**
* Returns the index size of the array pointed by 'array'.
* As SizeOfArray(int *ptr), save that it works specifically with bool typed arrays. 
* Useful in for loops. 
*
*/ Example Use:


/************************************************************************************************************/

int SizeOfArrayFFC(ffc array[]);	ZASM Instruction:
					ARRAYSIZEF d2
/**
* Returns the index size of the array pointed by 'array'.
* As SizeOfArray(int *ptr), save that it works specifically with ffc typed arrays.
* Useful in for loops. 
*
*/ Example Use:


/************************************************************************************************************/

int SizeOfArrayNPC(npc array[]);	ZASM Instruction:
					ARRAYSIZEN d2
/**
* Returns the index size of the array pointed by 'array'.
* As SizeOfArray(int *ptr), save that it works specifically with npc typed arrays.
* Useful in for loops. 
*
*/ Example Use:

/************************************************************************************************************/

int SizeOfArrayItem(item array[]);	ZASM Instruction:
					ARRAYSIZEI d2
/**
* Returns the index size of the array pointed by 'array'.
* As SizeOfArray(int *ptr), save that it works specifically with item typed arrays.
* Useful in for loops. 
*
*/ Example Use:

/************************************************************************************************************/

int SizeOfArrayItemdata(itemdata array[]);	
					ZASM Instruction:
					ARRAYSIZEID d2
/**
* Returns the index size of the array pointed by 'array'.
* As SizeOfArray(int *ptr), save that it works specifically with itemdata typed arrays.
* Useful in for loops. 
*
*/ Example Use:

/************************************************************************************************************/

int SizeOfArrayLWeapon(lweapon array[]);	
					ZASM Instruction:
					ARRAYSIZEL d2
/**
* Returns the index size of the array pointed by 'array'.
* As SizeOfArray(int *ptr), save that it works specifically with lweapon typed arrays.
* Useful in for loops. 
*
*/ Example Use:

/************************************************************************************************************/

int SizeOfArrayEWeapon(eweapon array[]);	
					ZASM Instruction:
					ARRAYSIZEE d2
/**
* Returns the index size of the array pointed by 'array'.
* As SizeOfArray(int *ptr), save that it works specifically with eweapon typed arrays.
* Useful in for loops. 
*
*/ Example Use:

/************************************************************************************************************/

void OverlayTile(int firsttile, int secondtile);		ZASM Instruction:
								OVERLAYTILEVV
								OVERLAYTILEVR
								OVERLAYTILERV
								OVERLAYTILERR
/**
* Overlays secondtile onto firsttile, ignoring all pixels of colour 0.  
* The valid tile value range is 0 to 65519.
* This change is *TEMPORARY* within the quest file
* and will not be retained when saving the game.
*
*/ Example Use:


//////////////
///  GAME  ///
//////////////

int Game->GetItemScript(int ptr[]);	ZASM Instruction:
					GETITEMSCRIPT
	

/**
* Returns the number of the item script with the given name or -1 if there is
* no such script. The script name should be passed as a string.
* (!) This was added at 2.54 beta 52.5, 1st June 2017
*
*/ Example Use:	


/************************************************************************************************************/

int GetBoolPointer(bool *ptr[]);		ZASM Instruction: 
					BOOLARRPTR
	/**
	* Returns the pointer of a bool array as a float. 
	*/ Example Use:
		bool arr[16];
		int size = SizeOfArray( GetPointer(arr) );
		//Size == 16
		
/************************************************************************************************************/
		
bool SetBoolPointer(bool *ptr[]);		ZASM Instruction: 
					BOOLARRPTR2
	/**
	* Converts an int pointer to the bool type, for assigning.
	*/ Example Use:
		bool arr[16];
		int size = SizeOfArray( GetPointer(arr) );
		//Size == 16
		
/************************************************************************************************************/
		
void GreyscaleOn()			ZASM Instruction
					GREYSCALEON

/**
* Renders the entire display in greyscale.
*/ Example Use: !#!

/************************************************************************************************************/

void GreyscaleOff()			ZASM Instruction
					GREYSCALEOFF

/**
* Returns the display rendering to colour. 
*/ Example Use: !#!

/************************************************************************************************************/

int DMapPalette[];			ZASM Instruction: 
					DMAPLEVELPAL
/**
* An array of 512 integers containing each DMap's Level Palette
*/ Example Use: !#!

/************************************************************************************************************/

void SetMessage(int message, int buffer[]);
	
					ZASM Instruction: 
					SETMESSAGE
/**
* Loads string 'buffer[]' into ZQ Message 'message'. 
*/ Example Use: !#!

/************************************************************************************************************/

void SetDMapName(int dmap_id, int buffer[]);
					
					ZASM Instruction: 
					SETDMAPNAME
/**
* Loads string 'buffer[]' to the DMap Name field for DMap with ID 'dmap_id'.
* See std_constsnts.zh for appropriate buffer size.
*/ Example Use: !#!

/************************************************************************************************************/

void SetDMapTitle(int DMap, int buffer[]);
	
					ZASM Instruction:
					SETDMAPTITLE
/**
* Loads string 'buffer[]' to the DMap Title field for DMap with ID 'dmap_id'.
* See std_constsnts.zh for appropriate buffer size.
*/ Example Use: !#!

/************************************************************************************************************/

void SetDMapIntro(int DMap, int buffer[]);
	
					ZASM Instruction:
					SETDMAPINTRO
/**
* Loads string 'buffer[]' to the DMap Intro field for DMap with ID 'dmap_id'.
* See std_constsnts.zh for appropriate buffer size.
*/ Example Use: !#!

/************************************************************************************************************/

int Version;				ZASM Instruction: 
					ZELDAVERSION
					
/**
* Returns the version of ZC being used.  
*
*/ Example Use: !#!

/************************************************************************************************************/
			
int Build;				ZASM Instruction: 
					ZELDABUILD
					
/**
* Returns the Build ID of the version of ZC being used.  
*
*/ Example Use: !#!

/************************************************************************************************************/
			
int Beta;				ZASM Instruction: 
					ZELDABETA
					
/**
* Returns the Beta ID of the version of ZC being used. If the build is not a beta, this returns 0. 
*
*/ Example Use: !#!

/************************************************************************************************************/
			
bool DisableActiveSubscreen;		ZASM Instruction: 
					NOACTIVESUBSC
					
/**
* If set true, the active subscreen will not fall into view ehen the player presses Start.
*
*/ Example Use: !#!

/************************************************************************************************************/


void SetScreenFlag(int map, int screen, int flag, bool state);	ZASM Instruction:
								SCREENFLAG
								
/**
*
*
*/ Example Use:
							

/************************************************************************************************************/

bool ButtonPress[18];						ZASM Instruction:
								BUTTONPRESS
/**
* An array of 18 button states that correspond to Link->Press*
*
*/ Example Use:

/************************************************************************************************************/

bool ButtonInput[18];						ZASM Instruction:
								BUTTONINPUT
/**
* An array of 18 button states that correspond to Link->Input*
*
*/ Example Use:

/************************************************************************************************************/
	
bool ButtonHeld[18];						ZASM Instruction:
								BUTTONHELD
/**
* An array of 18 button states that returns if a button is being held down. 
* MAY only represent a joypad. 
*
*/ Example Use:

/************************************************************************************************************/

bool KeyPress[127];						ZASM Instruction:
								KEYPRESS
/**
* An array of 127 indices, each representing a keypress on the keyboard. 
* See std_keyboard.zh for constants ands functions that relate to reading from, or writing to the keyboard.
*
*/ Example Use:

/************************************************************************************************************/

bool ReadKey[127];						ZASM Instruction:
								READKEY
/**
* A read-only array of 127 indices, each representing a keypress on the keyboard. 
* Returns true if a key is pressed or held. 
* See std_keyboard.zh for constants ands functions that relate to reading from, or writing to the keyboard.
*
*/ Example Use:

/************************************************************************************************************/

bool JoypadPress[18];						ZASM Instruction:
								JOYPADPRESS
/**
* An array of 18 button states that corresponds to whether the player is pressing a button on a Joypad \
* controller, but not the keyboard. REQUIRES TESTING. 
*
*/ Example Use:

/************************************************************************************************************/


int NumMessages;			ZASM Instruction
int HighestStringID			GAMENUMMESSAGES


/**
	*
	* Returns the number of message strings used in a quest.  
	*
	* 
	* /

/************************************************************************************************************/


SetScreenEnemy(int map, int screen, int enemy_index, int enem_type);
GetScreenEnemy(int map, int screen, int enemy_index);

/************************************************************************************************************/

 
SetScreenDoor(int map, int screen, int door_index, int door_type);
GetScreenDoor(int map, int screen, int door_index);

/************************************************************************************************************/

 
SetScreenWidth(int map, int screen, int value);
GetScreenWidth(int map, int screen);

/************************************************************************************************************/

 
SetScreenHeight(int map, int screen, int value);
GetScreenHeight(int map, int screen);

/************************************************************************************************************/

 
SetScreenViewX(int map, int screen, int value);
GetScreenViewX(int map, int screen);

/************************************************************************************************************/

 
SetScreenViewY(int map, int screen, int value);
GetScreenViewY(int map, int screen);

/************************************************************************************************************/

 
SetScreenGuy(int map, int screen, int value);
GetScreenGuy(int map, int screen);

/************************************************************************************************************/

 
SetScreenString(int map, int screen, int value);
GetScreenString(int map, int screen);

/************************************************************************************************************/

 
SetScreenRoomType(int map, int screen, int value);
GetScreenRoomType(int map, int screen);

/************************************************************************************************************/

 
SetScreenEntryX(int map, int screen, int value);
GetScreenEntryX(int map, int screen);

/************************************************************************************************************/

 
SetScreenEntryY(int map, int screen, int value);
GetScreenEntryY(int map, int screen); 

/************************************************************************************************************/

 
SetScreenItem(int map, int screen, int value);
GetScreenItem(int map, int screen);

/************************************************************************************************************/

 
SetScreenUndercombo(int map, int screen, int value);
GetScreenUndercombo(int map, int screen);

/************************************************************************************************************/

 
SetScreenUnderCSet(int map, int screen, int value);
GetScreenUnderCSet(int map, int screen);

/************************************************************************************************************/

 
SetScreenCatchall(int map, int screen, int value);
GetScreenCatchall(int map, int screen);

/************************************************************************************************************/

 
SetScreenLayerOpacity(int map, int screen, int layer, int opacity);
GetScreenLayerOpacity(int map, int screen, int layer);
 
/************************************************************************************************************/

SetScreenSecretCombo(int map, int screen, int index, int value);
GetScreenSecretCombo(int map, int screen, int index);

/************************************************************************************************************/

 
SetScreenSecretCSet(int map, int screen, int index, int value);
GetScreenSecretCSet(int map, int screen, int index);

/************************************************************************************************************/

 
SetScreenSecretFlag(int map, int screen, int index, int value);
GetScreenSecretFlag(int map, int screen, int index);

/************************************************************************************************************/

 
SetScreenLayerMap(int map, int screen, int layer, int map);
GetScreenLayerMap(int map, int screen, int layer);

/************************************************************************************************************/

 
SetScreenLayerScreen(int map, int screen, int layer, int screen);
GetScreenLayerScreen(int map, int screen, int layer);

/************************************************************************************************************/

 
SetScreenPath(int map, int screen, int path, int dest);
GetScreenPath(int map, int screen, int path);

/************************************************************************************************************/

 
SetScreenWarpReturnX(int map, int screen, int warp, int posX);
GetScreenWarpReturnX(int map, int screen, int warp);

/************************************************************************************************************/

 
SetScreenWarpReturnY(int map, int screen, int warp, int posY);
GetScreenWarpReturnY(int map, int screen, int warp);


/************************************************************************************************************/

int GetMaxMaps()
int MapCount()				ZASM Instruction
					GETMAXMAPS

	/**
	*
	* Returns the number of maps used by a quest. 
	*
	* 
	* /

/************************************************************************************************************/

int GetScreenEnemy(int map, int screen, int enemy_index)			
					ZASM Instruction
					GETSCREENENEMY

	/**
	* Reads values from enemy lists anywhere in the game. 
	* Returns the Nth enemy of a given map, and screen where 'enemy_index' is the Nth index 
	* 'map' is the desired map, and 'screen' is the desired screen. 
	* Returns 0 if there is no enemy in the desired index.
	* 
	* Use DMaptoMap() from std_functions to simplify in-game use with DMaps. 
	* /

/************************************************************************************************************/

int SetScreenEnemy(int map, int screen, int enemy_index, int enemy_id)			
					ZASM Instruction
					SETSCREENENEMY

	/**
	* Sets values to enemy lists anywhere in the game.
	* Sets the Nth enemy of a given map, and screen to a specified NPC, where 'enemy_index' is 
	* the Nth index  'map' is the desired map, and 'screen' is the desired screen, and 'enemy_id'.
	* is the ID of the enemy that you wish to use.
	*
	* If changing the enemies on the current screen and map, enemies will change upon reloading the screen. 
	* 
	* Use DMaptoMap() from std_functions to simplify in-game use with DMaps. 
	* /

/************************************************************************************************************/

int GetScreenDoor(int map, int screen, int index)			
					ZASM Instruction
					GETSCREENDOOR

	/**
	* Reads value of a door on any screen in the game environment.
	* Returns Screen->Door[index] of a given map, and screen where 'index' is the Door[] index,
	* 'map' is the desired map, and 'screen' is the desired screen. 
	* Returns 0 if there is no door present (open). 
	* 
	* Use DMaptoMap() from std_functions to simplify in-game use with DMaps. 
	* /

/************************************************************************************************************/

int SetScreenDoor(int map, int screen, int index, int type)			
					ZASM Instruction
					SETSCREENDOOR

	/**
	* Sets the value of a door on any screen in the game environment.
	* Sets Screen->Door[index] of a given map, and screen where 'index' is the Door[] index,
	* 'map' is the desired map, and 'screen' is the desired screen, and 'type'.
	* is the door type.
	*
	* If changing the doors on the current screen and map, doors will change upon reloading the screen. 
	* 
	* Use DMaptoMap() from std_functions to simplify in-game use with DMaps. 
	* /

/************************************************************************************************************/


///////////////
///  Audio  ///
///////////////



void PauseSound(int soundid);		ZASM Instruction: 
					PAUSESOUNDR
					PAUSESOUNDV
	/**
	* Pauses one of the quest's playing sound effects. Use the SFX_ constants in
	* std.zh as values of soundid.
	*/ Example Use: !#!

/************************************************************************************************************/

void ResumeSound(int soundid);		ZASM Instruction: 
					RESUMESOUNDR
					RESUMESOUNDV
	/**
	* Resumes one of the quest's paused sound effects. Use the SFX_ constants in
	* std.zh as values of soundid.
	*/ Example Use: !#!

/************************************************************************************************************/

void EndSound(int soundid);		ZASM Instruction: 
					ENDSOUNDR
					ENDSOUNDV
	/**
	* Kills one of the quest's playing sound effects. Use the SFX_ constants in
	* std.zh as values of soundid.
	*/ Example Use: !#!

/************************************************************************************************************/

void PauseMusic();			ZASM Instruction: 
					PAUSEMUSIC
					PAUSEMUSIC
	/**
	* Pauses the present, playing MIDI or Enhanced Music file. 
	*/ Example Use: !#!

/************************************************************************************************************/

void ResumeMusic();			ZASM Instruction: 
					RESUMEMUSIC
					RESUMEMUSIC
	/**
	* Resumes the present, playing MIDI or Enhanced Music file. 
	*/ Example Use: !#!

/************************************************************************************************************/

void PlaySound(int sfx);

/************************************************************************************************************/


/////////////
///  FFC  ///
/////////////

int ID;				ZASM Instruction
				FFCID

/**
* Returns the screen index of the FFC. 
* Can be set, to change the index of a pointer, but this requires testing and may be unstable. 
*
*/

/************************************************************************************************************/


//////////////////
///  Itemdata  ///
//////////////////

int Attributes[10];		ZASM Instruction: 
				IDATAATTRIB

/**
* An array of ten integers containing the Attributes values.
* These correspond to the text entry fields, in the item editor 'Data' tab. 
*
*/

/************************************************************************************************************/

int Sprites[10];		ZASM Instruction: 
				IDATASPRITES

/**
* An array of ten integers containing the Sprites values. 
* These correspond to the pull-down options in the item editor 'Action' tab.  .
*
*/

/************************************************************************************************************/

bool Flags[5];			ZASM Instruction: 
				IDATAFLAGS

/**
* An array of five multipurpose boolean flags. The properties of this flag change based on the item class (family).
* Flag[0] corresponds to the box directly below 'Equiment Item'. For swords, this is 'B.H. is Percent'.
* Flag[1] corresponds to the box directly below 'Flag 1'. For swords, this is 'B.D. is Percent'.
* Flag[2] corresponds to the box directly right of 'Equiment Item'. For swords, this is 'B.  Penetrates Enemies'.
* Flag[3] corresponds to the box directly right of 'Flag 2'. For swords, this is 'Can Slash'.
* Flag[4] corresponds to the box directly below 'Flag 4'.For swords, this is '<Unused>', and greyed out.
*
* Scripted item classes may make use of these as a general-purpose script flags. 
* See 'zscript_itemdata.txt' for more information on what this flag does, based on the item class.
*/

/************************************************************************************************************/

//////////////
///  Item  ///
/////////////

int ACLock;				ZASM Instruction: 
					ITEMACLC

/**
* Returns the present tick of the animation clock.
*
*/

/************************************************************************************************************/


/////////////
///  NPC  ///
/////////////

int InvFrames;				ZASM Instruction: 
					NPCINVINC
/**
* Returns if the enemy is temporarily invincible, from being hit, or otherwise. 
* Returns the number of remaining invincibility frames if the enemy is invincible, otherwise 0. 
*
*/ Example Use: !#!
	
/************************************************************************************************************/

int Invincible;				ZASM Instruction: 
					NPCSUPERMAN
/**
* Returns if the enemy is invincible, because of ( superman variable ). 
*
*/ Example Use: !#!
	
/************************************************************************************************************/

bool HasItem;				ZASM Instruction: 
					NPCHASITEM
/**
* Returns if the enemy is holding the screen item.
*
*/ Example Use: !#!
	
/************************************************************************************************************/

bool Ringleader;			ZASM Instruction: 
					NPCRINGLEAD
/**
* Returns if the enemy is a 'ringleader'.
*
*/ Example Use: !#!
	
/************************************************************************************************************/

int ScriptDefense[];		ZASM Instruction: 
				NPCSCRDEFENSED
/**
* The npc's Script Weapon Defense values, as an array of 10 integers. Use the NPCSD_ and NPCDT_ constants
* in std.zh to set or compare these values.
* 
* This corresponds to the 'Defenses 3' tab in the Enemy Editor. 
*/

/************************************************************************************************************/

/////////////////
///  LWeapon  ///
/////////////////

int Range;				ZASM Instruction: 
					LWPNRANGE
					
/**
* The range of the weapon in pixels. 
* The range in pixels for boomerang and hookshot lweapons; and the duration in frames for arrow lweapons.
*
*/ Example Use: !#!

/************************************************************************************************************/

	
////////////////
///  Screen  ///
////////////////

void TriggerSecret(int flag);		ZASM Instruction:
					TRIGGERSECRETR
					TRIGGERSECRETV
					
Triggers all secrets of the type 'flag' on the current screen 


/************************************************************************************************************/


lweapon CreateLWeaponDx(int type, int baseitem)
					ZASM Instruction
					CREATELWEAPONDX
					
	/**
	*
	* Create an lweapon with the type 'type', using data as if the weapon was created
	* by using the item 'item_id', thus forwarding sprites, sounds, and other values.
	*
	* 
	* /

/************************************************************************************************************/

void Polygon();

/************************************************************************************************************/


//////////////
///  Link  /// 
//////////////


bool Link->DisableItem[256];					ZASM Instruction:
								DISABLEDITEM
/**
* An array of 256 values that represents whether items are disabeld on the current DMap.
* A disabled item returns 'true'.
* Writing to this array should disable or enable an item on the current DMap, but the behaviour
* if Link does not have that item MAY not be fully defined.
*
*/ Example Use:

/************************************************************************************************************/

int UsingItem;			ZASM Instruction: 
				LINKUSINITEM
				
/**
* Returns the ID of an item used when Link uses an item.
* Setting this does nothing. 
*
*/ Example Use: !#!

/************************************************************************************************************/

int Attack;			ZASM Instruction: 
				LINKUSINITEMA
				
/**
* Returns LinkClass::attack (?) 
*
*/ Example Use: !#!

/************************************************************************************************************/

int Animation;				ZASM Instruction: 
					LINKANIMTYPE
					
/**
* Link;s Animation style, as set in Quest->Graphics->Sprites->Link
* Valid types are 0, 1, 2, and 3.
*
*/ Example Use: !#!

/************************************************************************************************************/
					
int WalkASpeed;				ZASM Instruction: 
					LINKWALKANMSPD

/**
* Link's Walking Animation speed as set in Quest->Graphics->Sprites->Link
* valid types are:
*
*/ Example Use: !#!

/************************************************************************************************************/

int SwimASpeed;				ZASM Instruction: 
					LINKSWIMSPD
/**
* Link's Swiming Animation speed as set in Quest->Graphics->Sprites->Link
* valid types are: 
*
*/ Example Use: !#!					

/************************************************************************************************************/

int InvFrames;				ZASM Instruction: 
					LINKINVFRAME

/**
* The number of frames for which Link is invincible, when hit by an enemy or weapon. 
* This returns how long Link will remain invincible, or you may set it to a value between 0 and 214747. 
* Returns 0 if Link is not invincible. 
*
*/ Example Use: !#!	

/************************************************************************************************************/

bool InvFlicker;			ZASM Instruction: 
					LINKCANFLICKER
				
/**
* Set true by default. If this is true, Link will either flicker, or flash when invincible, depending 
* on your Quest rules settings. If set false, Link will neither flash, nor flicker when invincible. 
*/ Example Use: !#!
	
/************************************************************************************************************/

int HurtSound;				ZASM Instruction: 
					LINKHURTSFX
				
/**
* The sound that plays when Link is injured. By default this is '16', but you may change it at any time.  
*
*/ Example Use: !#!
	
/************************************************************************************************************/

int HitHeight;				ZASM Instruction: 
					LINKHYSZ
					
/**
* link's Hitbox height in pixels starting from his 0x,0y (upper-left) corner, going down. 
* Note that this works on a per-sprite, per-direction basis. 
* If you wish to extend Link's hitbox upwards on the Y-Axis, set this value, and adjust his HitYOffset. 
* You can read a value that you assign to this (e.g. for custom collision functions). 
* This value is not preserved through sessions: Loading a saved game will reset it to the default. 
*
*/ Example Use: !#!

/************************************************************************************************************/
					
int HitWidth;				ZASM Instruction: 
					LINKHXSZ

/**
* Link's Hitbox width in pixels starting from his x0,y0 (upper-left) corner, going right. 
* Note that this works on a per-sprite, per-direction basis. 
* This value is not preserved through sessions: Loading a saved game will reset it to the default. 
*
*/ Example Use: !#!

/************************************************************************************************************/
//Not implemented. Use Extend and Sprites. 
int TileWidth;				ZASM Instruction: 
					LINKTYSZ
/**
* Link's width, in tiles.
* This is not usable, as Link->Extend cannot be set.
* While setting it is not syntactically incorrect, it does nothing.
* You can read a value that you assign to this (e.g. for custom/proxy sprite drawing).
* This value is not preserved through sessions: Loading a saved game will reset it to the default. 
*
*/ Example Use: !#!					

/************************************************************************************************************/
//Not implemented. Use Extend and Sprites. 
int TileHeight;				ZASM Instruction: 
					LINKTXSZ

/**
* Link's height, in tiles.
* This is not usable, as Link->Extend cannot be set.
* While setting it is not syntactically incorrect, it does nothing.
* You can read a value that you assign to this (e.g. for custom/proxy sprite drawing).
* This value is not preserved through sessions: Loading a saved game will reset it to the default. 
*
*/ Example Use: !#!	

/************************************************************************************************************/
//Not implemented. 
int HitZHeight;				ZASM Instruction: 
					LINKHZSZ
				
/**
* The Z-axis height of Link's hitbox, or collision rectangle.
* The lower it is, the lower a flying or jumping enemy must fly in order to hit Link.
* To jump over a sprite, you must be higher than its Z + HitZHeight.
* The values of DrawZOffset and HitZHeight are linked. Setting one, also sets the other. 
* Writing to this is ignored unless Extend is set to values >=3.
* This is not usable, as Link->Extend cannot be set.
* While setting it is not syntactically incorrect, it does nothing.
* You can read a value that you assign to this (e.g. for custom collision functions).
* This value is not preserved through sessions: Loading a saved game will reset it to the default. 
*
*/ Example Use: !#!
	
/************************************************************************************************************/

int HitXOffset;				ZASM Instruction: 
					LINKHXOFS
				
/**
* The X offset of Link's hitbox, or collision rectangle.
* Setting it to positive or negative values will move Link's hitbox left or right.
* Writing to this is ignored unless Extend is set to values >=3.
* Note that this works on a per-sprite, per-direction basis. 
* You can read a value that you assign to this (e.g. for custom collision functions).
* This value is not preserved through sessions: Loading a saved game will reset it to the default. 
*
*/ Example Use: !#!
	
/************************************************************************************************************/

int HitYOffset;				ZASM Instruction: 
					LINKHYOFS
				
/**
* The Y offset of Link's hitbox, or collision rectangle.
* Setting it to positive or negative values will move Link's hitbox up or down.
* Writing to this is ignored unless Extend is set to values >=3.
* Note that this works on a per-sprite, per-direction basis. 
* You can read a value that you assign to this (e.g. for custom collision functions).
* This value is not preserved through sessions: Loading a saved game will reset it to the default. 
*
*/ Example Use: !#!
	
/************************************************************************************************************/
//Not yet implemented
int DrawXOffset;			ZASM Instruction: 
					LINKXOFS
				
/**
* The X offset of Link's sprite.
* Setting it to positive or negative values will move the sprite's tiles left or right relative to its position.
* Writing to this is ignored unless Extend is set to values >=3.
* This is not usable, as Link->Extend cannot be set.
* While setting it is not syntactically incorrect, it does nothing.
* You can read a value that you assign to this.
* This value is not preserved through sessions: Loading a saved game will reset it to the default. 
*
*/ Example Use: !#!
	
/************************************************************************************************************/
//Not yet implemented
int DrawYOffset;			ZASM Instruction: 
					LINKYOFS
				
/**
* The Y offset of Link's sprite.
* Setting it to positive or negative values will move the sprite's tiles up or down relative to its position.
* Writing to this is ignored unless Extend is set to values >=3.
* This is not usable, as Link->Extend cannot be set.
* While setting it is not syntactically incorrect, it does nothing.
* You can read a value that you assign to this.
* This value is not preserved through sessions: Loading a saved game will reset it to the default. 
*
*/ Example Use: !#!

/************************************************************************************************************/

//! Link->Equipment is now read-write, and needs testing. 
//! It is also a pain to write bitwise values, to test it. 

int Equipment;				ZASM Instruction: 
					LINKEQUIP
				
/**
* Contains the item IDs of what is currently equiped to Link's A and B buttons.
* The first 8 bits contain the A button item, and the second 8 bits contain the B button item.
* If you are not comfortable with performing binary operations,
* you can use the functions GetEquipmentA() or GetEquipmentB() in std.zh.
*
*/ Example Use: !#!

/************************************************************************************************************/

int ItemA;				ZASM Instruction: 
					LINKITEMA
				
/**
* Contains the item IDs of what is currently equiped to Link's A button.
* Writing to this variable will set an item to the A-button. 
* This will occur even if the item is not in inventory, and not on the subscreen.
* This will ignore if you have B+A or B-only subscreens, and force-set the item.
* The intent of this is to allow scriters to easily create scripted subscreens. 
*
*/ Example Use: !#!

/************************************************************************************************************/

int ItemB;				ZASM Instruction: 
					LINKITEMB
				
/**
* Contains the item IDs of what is currently equiped to Link's B button.
* Writing to this variable will set an item to the A-button. 
* This will occur even if the item is not in inventory, and not on the subscreen.
* The intent of this is to allow scriters to easily create scripted subscreens. 
*
*/ Example Use: !#!

/************************************************************************************************************/
//! Untested
int SetItemSlot(int itm_id, bool a_button, bool force);				
					ZASM Instruction: 
					LINKITEMB
				
/**
* This allows you to set Link's button items without binary operations, and to decide whether to 
* obey quest rules, or inventory.
*
* When using this, 'itm_id' is the ID number of the item.
* Set 'a_button' true to set this item to the A-button, false to set it to the B-button.
* Set' force' true to set the item even if Link does not have it, or if the Quest Rules disallow it.
* 	Otherwise, set 'force' false, and the item will only be set if Link has it. Furthermore
* 	it will only set to slot A if either it is a sword, or the B+A quest rule is enabled. 
*
*/ Example Use: !#!

/************************************************************************************************************/

int Eaten;				ZASM Instruction: 
					LINKEATEN
				
/**
* This stores a counter for how long Link has been inside a LikeLike, or similar enemy.
* It returns 0 if Link is not eaten, otherwise it returns the duration of him being eaten.
*
*/ Example Use: !#!

/************************************************************************************************************/

int Extend;				ZASM Instruction: 
					LINKEXTEND


/**
* Sets the extend value for all of Link's various actions for his current sprite, and direction.
* This is equivalent to the Extend value set in Quest->Graphics->Sprites->Link when selecting 
* a tile, click on his sprites for any given action, and press the 'x' key.
* The options are 16x16, 16x32, and 32x32; which correspond to Extend values of ( 0, 1, and 2 ) 
* respectively. 
*
* This also returns the present extend value of Link's sprite for his current direction and sprite. 
*
* You may force-set all sprites, and directions to an extend value by assigning a negative number to
* this variable, where -1 == 0 -2 == 1, -3 == 2, -4 == 3, and -5 == 4.
*
* See the 'LINKEXTEND_* values in std_constants for more details. 
*/

/************************************************************************************************************/
 
int GetLinkExtend(int sprite, int dir);		ZASM Instruction: 
						SETLINKEXTEND

/**
* Gets the extend value for one of Link's various actions based on a direction.
* This is equivalent to the Extend value set in Quest->Graphics->Sprites->Link when selecting a tile.
* See 'std_constants' entries under LSPR_* for a list of the various attributes for 'sprite'.
*/

/************************************************************************************************************/
 
void SetLinkExtend(int sprite, int dir, int extend);		
						ZASM Instruction: 
						SETLINKEXTEND

/**
* Sets the extend value for one of Link's various actions.
* This is equivalent to the Extend value set in Quest->Graphics->Sprites->Link when selecting a tile.  
* 'sprite' is the 'action', 'dir' is the sprite direction, and 'extend' is a value between 1 and 3.
* An extend value of '4' is reserved for future implementations of Link->Hit/DrawOffsets ad HitWidth/height.
* See 'std_constants' entries under LSPR_* for a list of the various attributes for 'sprite'.
*/

/************************************************************************************************************/
//Untested 
void SetLinkTile(int sprite, int tile, int dir)			
				ZASM Instruction: 
				SETLINKTILE

/**
* Sets the tile for Link's various actions. This is intended to work as OTile for Link.
* 'sprite' is the action for the tile. See Quest->Graphics->Sprites->Link for a visual reference. 
* 'tile is the base tile for the sequence. It uses the animation style set in the sprites editor.
* 'dir' is the direction for the tile.
* See 'std_constants' entries under LSPR_* for a list of the various attributes for 'sprite'.
* 
* See the 'LINKEXTEND_* values in std_constants for more details on possible extend values. 
*/

/************************************************************************************************************/
//!Untested
int GetLinkTile(int sprite, int dir)			
				ZASM Instruction: 
				LINKGETTILE

/**
* Returns the OTile for one of Link's various actions.
* 'sprite' is the action for the tile. See Quest->Graphics->Sprites->Link for a visual reference. 
* 'dir' is the direction for the tile.
* See 'std_constants' entries under LSPR_* for a list of the various attributes for 'sprite'.
*/

/************************************************************************************************************/

/////////////////
///  NPCData  ///
/////////////////

// NPCData-> (Getter Functions)
	int GetFlags(int npc_id);
	int GetFlags2(int npc_id);
	int GetWidth(int npc_id);
	int GetHeight(int npc_id);
	int GetSTile(int npc_id);
	int GetSWidth(int npc_id);
	int GetSHeight(int npc_id);
	int GetETile(int npc_id);
	int GetEWidth(int npc_id);
	int GetHP(int npc_id);
	int GetFamily(int npc_id);
	int GetCSet(int npc_id);
	int GetAnim(int npc_id);
	int GetEAnim(int npc_id);
	int GetFramerate(int npc_id);
	int GetEFramerate(int npc_id);
	int GetTouchDamage(int npc_id);
	int GetWeaponDamage(int npc_id);
	int GetWeapon(int npc_id);
	int GetRandom(int npc_id);
	int GetHaltRate(int npc_id);
	int GetStep(int npc_id);
	int GetHoming(int npc_id);
	int GetHunger(int npc_id);
	int GetDropset(int npc_id);
	int GetBGSFX(int npc_id);
	int GetHitSFX(int npc_id);
	int GetDeathSFX(int npc_id);
	int GetDrawXOffset(int npc_id);
	int GetDrawYOffset(int npc_id);
	int GetDrawZOffset(int npc_id);
	int GetHitXOffset(int npc_id);
	int GetHitYOffset(int npc_id);
	int GetHitWidth(int npc_id);
	int GetHitHeight(int npc_id);
	int GetHitZHeight(int npc_id);
	int GetTileWidth(int npc_id);
	int GetTileHeight(int npc_id);
	int GetWeaponSprite(int npc_id);

	int GetScriptDefense(int npc_id, int def_index); //2.future compat. 
	int GetDefense(int npc_id, int def_index);
	bool GetSizeFlag(int npc_id, int size_flag);
	int GetAttribute(int npc_id, int attrib);

// NPCData-> (Setter Functions)
	void SetFlags(int npc_id, int value);
	void SetFlags2(int npc_id, int value);
	void SetWidth(int npc_id, int value);
	void SetHeight(int npc_id, int value);
	void SetSTile(int npc_id, int value);
	void SetSWidth (int npc_id, int value);
	void SetSHeight(int npc_id, int value);
	void SetETile(int npc_id, int value);
	void SetEWidth(int npc_id, int value);
	void SetHP(int npc_id, int value);
	void SetFamily(int npc_id, int value);
	void SetCSet(int npc_id, int value);
	void SetAnim(int npc_id, int value);
	void SetEAnim(int npc_id, int value);
	void SetFramerate(int npc_id, int value);
	void SetEFramerate(int npc_id, int value);
	void SetTouchDamage(int npc_id, int value);
	void SetWeaponDamage(int npc_id, int value);
	void SetWeapon(int npc_id, int value);
	void SetRandom(int npc_id, int value);
	void SetHaltRate(int npc_id, int value);
	void SetStep(int npc_id, int value);
	void SetHoming(int npc_id, int value);
	void SetHunger(int npc_id, int value);
	void SetDropset(int npc_id, int value);
	void SetBGSFX(int npc_id, int value);
	void SetHitSFX(int npc_id, int value);
	void SetDeathSFX(int npc_id, int value);
	void SetDrawXOffset(int npc_id, int value);
	void SetDrawYOffset(int npc_id, int value);
	void SetDrawZOffset(int npc_id, int value);
	void SetHitXOffset(int npc_id, int value);
	void SetHitYOffset(int npc_id, int value);
	void SetHitWidth(int npc_id, int value);
	void SetHitHeight(int npc_id, int value);
	void SetHitZHeight(int npc_id, int value);
	void SetTileWidth(int npc_id, int value);
	void SetTileHeight(int npc_id, int value);
	void SetWeaponSprite(int npc_id, int value);

	void SetScriptDefense(int npc_id, int def_index, int value);
	void SetDefense(int npc_id, int def_index, int value);
	void SetSizeFlag(int npc_id, int size_flag, bool set);
	void SetAttribute(int npc_id, int attribute, int value);
	
	

/************************************************************************************************************/

//////////////
///  Text  ///
//////////////
Text-> This is for text boxes and similar.


/************************************************************************************************************/

//////////////////
///  Graphics  ///
//////////////////
Graphics-> A potential container for graphical functions, palette editing, and similar to Audio->.


/************************************************************************************************************/

///////////////////
///  ComboData  ///
///////////////////
ComboData-> For modifying the combo tables by script. 

	GetBlockEnemies(int combo_id);
	GetBlockHole(int combo_id);
	GetBlockTrigger(int combo_id);  
	GetConveyorSpeedX(int combo_id);  
	GetConveyorSpeedY(int combo_id);  
	GetCreateEnemy(int combo_id);  
	GetCreateEnemyWhen(int combo_id);  
	GetCreateEnemyChange(int combo_id);  
	GetDirChangeType(int combo_id);
	GetDistanceChangeTiles(int combo_id);
	GetDiveItem(int combo_id);
	GetDock(int combo_id); 
	GetFairy(int combo_id);  
	GetFFComboChangeAttrib(int combo_id);  
	GetFootDecorationsTile(int combo_id);  
	GetFootDecorationsType(int combo_id);  
	GetHookshotGrab(int combo_id);  
	GetLadderPass(int combo_id);  
	GetLockBlockType(int combo_id);  
	GetLockBlockChange(int combo_id);  
	GetMagicMirror(int combo_id);  
	GetModifyHPAmount(int combo_id);  
	GetModifyHPDelay(int combo_id);  
	GetModifyHPType(int combo_id);  
	GetModifyMPAmount(int combo_id);  
	GetModifyMPDelay(int combo_id);  
	GetModifyMPType(int combo_id);  
	GetNoPushBlocks(int combo_id);  
	GetOverhead(int combo_id);  
	GetPlaceEnemy(int combo_id);  
	GetPushDirection(int combo_id);  
	GetPushWeight(int combo_id);  
	GetPushWait(int combo_id);  
	GetPushed(int combo_id);  
	GetRaft(int combo_id);  
	GetResetRoom(int combo_id);  
	GetSavePoint(int combo_id);  
	GetScreenFreeze(int combo_id);  
	GetSecretCombo(int combo_id);  
	GetSingular(int combo_id);  
	GetSlowMove(int combo_id);  
	GetStatue(int combo_id);  
	GetStepType(int combo_id);  
	GetStepChangeTo(int combo_id);  
	GetStrikeRemnants(int combo_id);  
	GetStrikeRemnantsType(int combo_id);  
	GetStrikeChange(int combo_id);  
	GetStrikeItem(int combo_id);  
	GetTouchItem(int combo_id);  
	GetTouchStairs(int combo_id);  
	GetTriggerType(int combo_id);  
	GetTriggerSens(int combo_id);  
	GetWarpType(int combo_id);  
	GetWarpSens(int combo_id);  
	GetWarpDirect(int combo_id);  
	GetWarpLocation(int combo_id);  
	GetWater(int combo_id);  
	GetWhistle(int combo_id);  
	GetWinGame(int combo_id);  
	GetBlockWeaponLevel(int combo_id);  
	GetTile(int combo_id);  
	GetFlip(int combo_id);  
	GetWalkability(int combo_id);  
	GetType(int combo_id);  
	GetCSets(int combo_id);  
	GetFoo(int combo_id);  
	GetFrames(int combo_id);  
	GetSpeed(int combo_id);  
	GetNextCombo(int combo_id);  
	GetNextCSet(int combo_id);  
	GetFlag(int combo_id);  
	GetSkipAnim(int combo_id);  
	GetNextTimer(int combo_id);  
	GetSkipAnimY(int combo_id);  
	GetAnimFlags(int combo_id);  

	//two inputs, one return
	GetBlockWeapon(int combo_id, int index);   //[32]          
	GetExpansion(int combo_id, int index);   //[6] 
	GetStrikeWeapons(int combo_id, int index);   //[32] 
		
	//two inputs, no return
	SetBlockEnemies(int combo_id, int value);
	SetBlockHole(int combo_id, int value);
	SetBlockTrigger(int combo_id, int value);
	SetConveyorSpeedX(int combo_id, int value);
	SetConveyorSpeedY(int combo_id, int value);
	SetCreateEnemy(int combo_id, int value);
	SetCreateEnemyWhen(int combo_id, int value);
	SetCreateEnemyChange(int combo_id, int value);
	SetDirChangeType(int combo_id, int value);
	SetDistanceChangeTiles(int combo_id, int value);
	SetDiveItem(int combo_id, int value);
	SetDock(int combo_id, int value);
	SetFairy(int combo_id, int value);
	SetFFComboChangeAttrib(int combo_id, int value);
	SetFootDecorationsTile(int combo_id, int value);
	SetFootDecorationsType(int combo_id, int value);
	SetHookshotGrab(int combo_id, int value);
	SetLadderPass(int combo_id, int value);
	SetLockBlockType(int combo_id, int value);
	SetLockBlockChange(int combo_id, int value);
	SetMagicMirror(int combo_id, int value);
	SetModifyHPAmount(int combo_id, int value);
	SetModifyHPDelay(int combo_id, int value);
	SetModifyHPType(int combo_id, int value);
	SetModifyMPAmount(int combo_id, int value);
	SetModifyMPDelay(int combo_id, int value);
	SetModifyMPType(int combo_id, int value);
	SetNoPushBlocks(int combo_id, int value);
	SetOverhead(int combo_id, int value);
	SetPlaceEnemy(int combo_id, int value);
	SetPushDirection(int combo_id, int value);
	SetPushWeight(int combo_id, int value);
	SetPushWait(int combo_id, int value);
	SetPushed(int combo_id, int value);
	SetRaft(int combo_id, int value);
	SetResetRoom(int combo_id, int value);
	SetSavePoint(int combo_id, int value);
	SetScreenFreeze(int combo_id, int value);
	SetSecretCombo(int combo_id, int value);
	SetSingular(int combo_id, int value);
	SetSlowMove(int combo_id, int value);
	SetStatue(int combo_id, int value);
	SetStepType(int combo_id, int value);
	SetStepChangeTo(int combo_id, int value);
	SetStrikeRemnants(int combo_id, int value);
	SetStrikeRemnantsType(int combo_id, int value);
	SetStrikeChange(int combo_id, int value);
	SetStrikeItem(int combo_id, int value);
	SetTouchItem(int combo_id, int value);
	SetTouchStairs(int combo_id, int value);
	SetTriggerType(int combo_id, int value);
	SetTriggerSens(int combo_id, int value);
	SetWarpType(int combo_id, int value);
	SetWarpSens(int combo_id, int value);
	SetWarpDirect(int combo_id, int value);
	SetWarpLocation(int combo_id, int value);
	SetWater(int combo_id, int value);
	SetWhistle(int combo_id, int value);
	SetWinGame(int combo_id, int value);
	SetBlockWeaponLevel(int combo_id, int value);
	SetTile(int combo_id, int value);
	SetFlip(int combo_id, int value);
	SetWalkability(int combo_id, int value);
	SetType(int combo_id, int value);
	SetCSets(int combo_id, int value);
	SetFoo(int combo_id, int value);
	SetFrames(int combo_id, int value);
	SetSpeed(int combo_id, int value);
	SetNextCombo(int combo_id, int value);
	SetNextCSet(int combo_id, int value);
	SetFlag(int combo_id, int value);
	SetSkipAnim(int combo_id, int value);
	SetNextTimer(int combo_id, int value);
	SetSkipAnimY(int combo_id, int value);
	SetAnimFlags(int combo_id, int value);

	//three inputs, no return
	SetBlockWeapon(int combo_id, int index, int value); //[32]
	GetExpansion(int combo_id, int index, int value); //[32]
	SetStrikeWeapons(int combo_id, int index, int value); //[32]

/************************************************************************************************************/

////////////////////
///  SpriteData  ///
////////////////////
SpriteData-> For modifying the weapon/misc sprites by script. 

	GetTile(int sprite_id);
	GetMisc(int sprite_id);
	GetCSets(int sprite_id);
	GetFrames(int sprite_id);
	GetSpeed(int sprite_id);
	GetType(int sprite_id);
	SetTile(int sprite_id, int value);
	SetMisc(int sprite_id, int value);
	SetCSets(int sprite_id, int value);
	SetFrames(int sprite_id, int value);
	SetSpeed(int sprite_id, int value);
	SetType(int sprite_id, int value);

/************************************************************************************************************/



///////////////
///  Input  ///
///////////////

Input-> 

/************************************************************************************************************/

bool Press[18];						ZASM Instruction:
								BUTTONPRESS
/**
* An array of 18 button states that correspond to Link->Press*
*
*/ Example Use:

/************************************************************************************************************/

bool Button[18];						ZASM Instruction:
								BUTTONINPUT
/**
* An array of 18 button states that correspond to Link->Input*
*
*/ Example Use:

/************************************************************************************************************/
	
bool Hold[18];						ZASM Instruction:
								BUTTONHELD
/**
* An array of 18 button states that returns if a button is being held down. 
* MAY only represent a joypad. 
*
*/ Example Use:

/************************************************************************************************************/

bool Key[127];						ZASM Instruction:
								KEYPRESS
/**
* An array of 127 indices, each representing a keypress on the keyboard. 
* See std_keyboard.zh for constants ands functions that relate to reading from, or writing to the keyboard.
*
*/ Example Use:

/************************************************************************************************************/

bool ReadKey[127];						ZASM Instruction:
								READKEY
/**
* A read-only array of 127 indices, each representing a keypress on the keyboard. 
* Returns true if a key is pressed or held. 
* See std_keyboard.zh for constants ands functions that relate to reading from, or writing to the keyboard.
*
*/ Example Use:

/************************************************************************************************************/

bool Joypad[18];						ZASM Instruction:
								JOYPADPRESS
/**
* An array of 18 button states that corresponds to whether the player is pressing a button on a Joypad \
* controller, but not the keyboard. REQUIRES TESTING. 
*
*/ Example Use:

/************************************************************************************************************/

int Mouse[6]

/**
* An array of six integers for the mouse X, Y and Z positions, and Left, Right, and Middle Clicks.
* 
* You can write to clicks by setting their array indices to 0 or 1.
* /

/************************************************************************************************************/


/////////////////
///  MapData  ///
/////////////////

MapData->

SetEnemy(int map, int screen, int enemy_index, int enem_type);
GetEnemy(int map, int screen, int enemy_index);

/************************************************************************************************************/

 
SetDoor(int map, int screen, int door_index, int door_type);
GetDoor(int map, int screen, int door_index);

/************************************************************************************************************/

 
SetWidth(int map, int screen, int value);
GetWidth(int map, int screen);

/************************************************************************************************************/

 
SetHeight(int map, int screen, int value);
GetHeight(int map, int screen);

/************************************************************************************************************/

 
SetViewX(int map, int screen, int value);
GetViewX(int map, int screen);

/************************************************************************************************************/

 
SetViewY(int map, int screen, int value);
GetViewY(int map, int screen);

/************************************************************************************************************/

 
SetGuy(int map, int screen, int value);
GetGuy(int map, int screen);

/************************************************************************************************************/

 
SetString(int map, int screen, int value);
GetString(int map, int screen);

/************************************************************************************************************/

 
SetRoomType(int map, int screen, int value);
GetRoomType(int map, int screen);

/************************************************************************************************************/

 
SetEntryX(int map, int screen, int value);
GetEntryX(int map, int screen);

/************************************************************************************************************/

 
SetEntryY(int map, int screen, int value);
GetEntryY(int map, int screen); 

/************************************************************************************************************/

 
SetItem(int map, int screen, int value);
GetItem(int map, int screen);

/************************************************************************************************************/

 
SetUndercombo(int map, int screen, int value);
GetUndercombo(int map, int screen);

/************************************************************************************************************/

 
SetUnderCSet(int map, int screen, int value);
GetUnderCSet(int map, int screen);

/************************************************************************************************************/

 
SetCatchall(int map, int screen, int value);
GetCatchall(int map, int screen);

/************************************************************************************************************/

 
SetLayerOpacity(int map, int screen, int layer, int opacity);
GetLayerOpacity(int map, int screen, int layer);
 
/************************************************************************************************************/

SetSecretCombo(int map, int screen, int index, int value);
GetSecretCombo(int map, int screen, int index);

/************************************************************************************************************/

 
SetSecretCSet(int map, int screen, int index, int value);
GetSecretCSet(int map, int screen, int index);

/************************************************************************************************************/

 
SetSecretFlag(int map, int screen, int index, int value);
GetSecretFlag(int map, int screen, int index);

/************************************************************************************************************/

 
SetLayerMap(int map, int screen, int layer, int map);
GetLayerMap(int map, int screen, int layer);

/************************************************************************************************************/

 
SetLayerScreen(int map, int screen, int layer, int screen);
GetLayerScreen(int map, int screen, int layer);

/************************************************************************************************************/

 
SetPath(int map, int screen, int path, int dest);
GetPath(int map, int screen, int path);

/************************************************************************************************************/

 
SetWarpReturnX(int map, int screen, int warp, int posX);
GetWarpReturnX(int map, int screen, int warp);

/************************************************************************************************************/

 
SetWarpReturnY(int map, int screen, int warp, int posY);
GetWarpReturnY(int map, int screen, int warp);


/************************************************************************************************************/

int GetEnemy(int map, int screen, int enemy_index)			
					ZASM Instruction
					GETSCREENENEMY

	/**
	* Reads values from enemy lists anywhere in the game. 
	* Returns the Nth enemy of a given map, and screen where 'enemy_index' is the Nth index 
	* 'map' is the desired map, and 'screen' is the desired screen. 
	* Returns 0 if there is no enemy in the desired index.
	* 
	* Use DMaptoMap() from std_functions to simplify in-game use with DMaps. 
	* /

/************************************************************************************************************/

int SetEnemy(int map, int screen, int enemy_index, int enemy_id)			
					ZASM Instruction
					SETSCREENENEMY

	/**
	* Sets values to enemy lists anywhere in the game.
	* Sets the Nth enemy of a given map, and screen to a specified NPC, where 'enemy_index' is 
	* the Nth index  'map' is the desired map, and 'screen' is the desired screen, and 'enemy_id'.
	* is the ID of the enemy that you wish to use.
	*
	* If changing the enemies on the current screen and map, enemies will change upon reloading the screen. 
	* 
	* Use DMaptoMap() from std_functions to simplify in-game use with DMaps. 
	* /

/************************************************************************************************************/

int GetDoor(int map, int screen, int index)			
					ZASM Instruction
					GETSCREENDOOR

	/**
	* Reads value of a door on any screen in the game environment.
	* Returns Screen->Door[index] of a given map, and screen where 'index' is the Door[] index,
	* 'map' is the desired map, and 'screen' is the desired screen. 
	* Returns 0 if there is no door present (open). 
	* 
	* Use DMaptoMap() from std_functions to simplify in-game use with DMaps. 
	* /

/************************************************************************************************************/

int SetDoor(int map, int screen, int index, int type)			
					ZASM Instruction
					SETSCREENDOOR

	/**
	* Sets the value of a door on any screen in the game environment.
	* Sets Screen->Door[index] of a given map, and screen where 'index' is the Door[] index,
	* 'map' is the desired map, and 'screen' is the desired screen, and 'type'.
	* is the door type.
	*
	* If changing the doors on the current screen and map, doors will change upon reloading the screen. 
	* 
	* Use DMaptoMap() from std_functions to simplify in-game use with DMaps. 
	* /

/************************************************************************************************************/


///////////////
///  Debug  ///
///////////////

/************************************************************************************************************/
DEBUGGING: These might find their way into namespace Debug->
/************************************************************************************************************/	


int GetFFCPointer(ffc *ptr[]);		ZASM Instruction: 
					FFCARRPTR
	/**
	* Returns the pointer of a ffc array as a float. 
	*/ Example Use:
		ffc arr[16];
		int size = SizeOfArray( GetPointer(arr) );
		//Size == 16
				
/************************************************************************************************************/	

ffc SetFFCPointer(int value);		ZASM Instruction: 
					FFCARRPTR2
	/**
	* Converts an int pointer to the ffc type, for assigning.
	*/ Example Use:
		ffc arr[16]; ffc arrB[2]; int arrC[2];
		arrC[0] = GetPointer(arr);
		arrB[0] = SetPointer(arrC[0]);
				
/************************************************************************************************************/	

int GetItemPointer(item *ptr[]);		ZASM Instruction: 
					ITEMARRPTR
	/**
	* Returns the pointer of a item array as a float. 
	*/ Example Use:
		item arr[16];
		int size = SizeOfArray( GetPointer(arr) );
		//Size == 16
				
/************************************************************************************************************/	

item SetItemPointer(int value);		ZASM Instruction: 
					ITEMARRPTR2
	/**
	* Converts an int pointer to the item type, for assigning.
	*/ Example Use:
		item arr[16]; item arrB[2]; int arrC[2];
		arrC[0] = GetPointer(arr);
		arrB[0] = SetPointer(arrC[0]);
				
/************************************************************************************************************/	


int GetItemdataPointer(itemdata *ptr[]);	ZASM Instruction: 
					IDATAARRPTR
	/**
	* Returns the pointer of a itemdata array as a float. 
	*/ Example Use:
		itemdata arr[16];
		int size = SizeOfArray( GetPointer(arr) );
		//Size == 16
				
/************************************************************************************************************/	

itemdata SetItemdataPointer(int value);		ZASM Instruction: 
					IDATAARRPTR2
	/**
	* Converts an int pointer to the itemdata type, for assigning.
	*/ Example Use:
		itemdata arr[16]; itemdata arrB[2]; int arrC[2];
		arrC[0] = GetPointer(arr);
		arrB[0] = SetPointer(arrC[0]);
				
/************************************************************************************************************/	

int GetNPCPointer(npc *ptr[]);		ZASM Instruction: 
					NPCARRPTR
	/**
	* Returns the pointer of a item array as a float. 
	*/ Example Use:
		item arr[16];
		int size = SizeOfArray( GetPointer(arr) );
		//Size == 16
				
/************************************************************************************************************/	

npc SetNPCPointer(int value);		ZASM Instruction: 
					NPCARRPTR2
	/**
	* Converts an int pointer to the npc type, for assigning.
	*/ Example Use:
		npc arr[16]; npc arrB[2]; int arrC[2];
		arrC[0] = GetPointer(arr);
		arrB[0] = SetPointer(arrC[0]);
				
/************************************************************************************************************/	

int GetLWeaponPointer(lweapon *ptr[]);		ZASM Instruction: 
					LWPNARRPTR
	/**
	* Returns the pointer of a lweapon array as a float. 
	*/ Example Use:
		lweapon arr[16];
		int size = SizeOfArray( GetPointer(arr) );
		//Size == 16
				
/************************************************************************************************************/	

lweapon SetLWeaponPointer(int value);		ZASM Instruction: 
					LWPNARRPTR2
	/**
	* Converts an int pointer to the lweapon type, for assigning.
	*/ Example Use:
		lweapon arr[16]; lweapon arrB[2]; int arrC[2];
		arrC[0] = GetPointer(arr);
		arrB[0] = SetPointer(arrC[0]);
				
/************************************************************************************************************/	

int GetEWeaponPointer(eweapon *ptr[]);		ZASM Instruction: 
					EWPNARRPTR
	/**
	* Returns the pointer of a eweapon array as a float. 
	*/ Example Use:
		eweapon arr[16];
		int size = SizeOfArray( GetPointer(arr) );
		//Size == 16
				
/************************************************************************************************************/	

eweapon SetEWeaponPointer(int value);		ZASM Instruction: 
					EWPNARRPTR2
	/**
	* Converts an int pointer to the eweapon type, for assigning.
	*/ Example Use:
		eweapon arr[16]; eweapon arrB[2]; int arrC[2];
		arrC[0] = GetPointer(arr);
		arrB[0] = SetPointer(arrC[0]);
				
/************************************************************************************************************/	

int RefFFC; 				ZASM Instruction:
					REFFFC
	/**
	* Returns the present ffc refrence from the stack. FOR DEBUGGING ONLY!
	* THIS WILL BE DISABLED IN RELEASE BUILDS !
	*/ Example Use:
	
/************************************************************************************************************/	

int RefItem; 				ZASM Instruction:
					REFITEM
	/**
	* Returns the present item refrence from the stack. FOR DEBUGGING ONLY!
	* THIS WILL BE DISABLED IN RELEASE BUILDS !
	*/ Example Use:
	
/************************************************************************************************************/	

int RefItemdata; 			ZASM Instruction:
					REFIDATA
	/**
	* Returns the present itemdata refrence from the stack. FOR DEBUGGING ONLY!
	* THIS WILL BE DISABLED IN RELEASE BUILDS !
	*/ Example Use:
	
/************************************************************************************************************/	

int RefLWeapon; 			ZASM Instruction:
					REFLWPN
	/**
	* Returns the present lweapon refrence from the stack. FOR DEBUGGING ONLY!
	* THIS WILL BE DISABLED IN RELEASE BUILDS !
	*/ Example Use:
	
/************************************************************************************************************/	

int RefEWeapon; 			ZASM Instruction:
					REFEWPN
	/**
	* Returns the present eweapon refrence from the stack. FOR DEBUGGING ONLY!
	* THIS WILL BE DISABLED IN RELEASE BUILDS !
	*/ Example Use:
	
/************************************************************************************************************/	

int RefNPC; 				ZASM Instruction:
					REFNPC
	/**
	* Returns the present npc refrence from the stack. FOR DEBUGGING ONLY!
	* THIS WILL BE DISABLED IN RELEASE BUILDS !
	*/ Example Use:
	
/************************************************************************************************************/	

int SP; 				ZASM Instruction:
					SP
	/**
	* Returns the value of the stack pointer. FOR DEBUGGING ONLY!
	* THIS WILL BE DISABLED IN RELEASE BUILDS !
	*/ Example Use:

/************************************************************************************************************/

	