I'll give ZoriaRPG's changelog the same treatment as the official repos:
Blue: worthwhile assuming the feature is thoroughly tested
Orange: I don't object but would like some rationale as to why the feature is needed before being 100% happy introducing the feature into ZC
Red: dubious/requires discussion
// Beta 44
/////////////////
/// ZScript ///
/////////////////
The ZScript language now supports function pointers, using the AT_SIGN token (@) as a delimiter.
(Seems extremely risky, from a language-change perspective, with very marginal benefit. Is there really a need for function pointers? Need thorough testing if implemented.)
The ZScript language now supports C-Style comment blocks using the traditional syntax of:
/*
COMMENT BLOCK
*/
Arrays now support being declared with a formula:
int arr[10*4];
This is now the same as int arr[40];
Nesting array calls should now work properly. (e.g. arrA[ arrB[ arrC[ arrd[4] ] ] ] )
//////////////
// Global //
//////////////
void OverlayTile(int firsttile, int secondtile);
Overlay one tile onto another.
/************************************************** ************************************************** ********/
////////////
// Game //
////////////
bool CappedFPS
* Check if the game is uncapped.
(Unnecessary and extremely dangerous. FPS capping is a front-end implementation detail that should have no effect on the quest that's running.)
int Version;
* Returns the version of ZC being used.
int Build;
* Returns the Build ID of the version of ZC being used.
(Quest authors should only release quests for ZC versions that are stable releases (can be differentiated with Version). Letting authors see the build number just encourages negative behavior.)
int Beta;
* Returns the Beta ID of the version of ZC being used. If the build is not a beta, this returns 0.
(See above.)
bool DisableActiveSubscreen;
* If set true, the active subscreen will not fall into view ehen the player presses Start.
/************************************************** ************************************************** ********/
/////////////////
/// LWeapon ///
/////////////////
int Range;
* The range of the weapon in pixels. At present, this only affects boomerange class lweapons.
(Seems dangerous. Weapons are due for an overhaul, and any details we expose today severely constraints what we can revamp in the future.)
/////////////////
/// *weapon ///
/////////////////
float Misc[32];
* Epanded fro a size of [16] to [32]. An array of 32 miscellaneous variables for you to use as you please.
(I'm convinced now that these are a good idea.)
/************************************************** ************************************************** ********/
/////////////
/// NPC ///
/////////////
int ScriptDefense[10];
* The npc's Script Weapon Defense values. This corresponds to the 'Defenses 3' tab in the Enemy Editor.
(See above.)
/************************************************** ************************************************** ********/
//////////////
/// Link ///
//////////////
int Animation;
* Link;s Animation style, as set in Quest->Graphics->Sprites->Link
(I don't see a use for these, and moreover they bind us to implementation details about a very crufty part of the code (Link's animation))
int WalkASpeed;
* Link's Walking Animation speed as set in Quest->Graphics->Sprites->Link
int SwimASpeed;
* Link's Swiming Animation speed as set in Quest->Graphics->Sprites->Link
int InvFrames;
* This returns how long Link will remain invincible, 0 if not invincible. Can be set.
bool InvFlicker;
* If set false, Link will neither flash, nor flicker when invincible.
(There does need to be a way for scripts to disable Link's damage code. I don't think this pair of functions is the right approach.)
int HurtSound;
* The sound that plays when Link is injured. By default this is '16', but you may change it at any time.
(The SFX system needs to be revamped.
int HitHeight;
* link's Hitbox height in pixels starting from his 0x,0y (upper-left) corner, going down.
int HitWidth;
* Link's Hitbox width in pixels starting from his x0,y0 (upper-left) corner, going right.
int HitXOffset;
* The X offset of Link's hitbox, or collision rectangle.
int HitYOffset;
* The Y offset of Link's hitbox, or collision rectangle.
int Eaten;
* It returns 0 if Link is not eaten, otherwise it returns the duration of him being eaten.
(Assuming this is a GETTER only.)
int Equipment;
* Link->Equipment is now read-write, and needs testing.
(Much prefer the more fine-grained functions below. In fact we should deprecate Link->Equipment and encourage script writers to switch to ItemA, etc.)
int ItemA;
* Contains the item IDs of what is currently equiped to Link's A button.
int ItemB;
* Contains the item IDs of what is currently equiped to Link's B button.
int SetItemSlot(int itm_id, bool a_button, bool force);
* This allows you to set Link's button items without binary operation. Needs testing. , and to decide whether to
(Joe123 tried implementing this function and ran into "quite large issues." Needs thorough investigation before implementing.)
int Extend;
* Sets the extend value for all of Link's various actions.
int GetLinkExtend(int sprite, int dir);
* Gets the extend value for one of Link's various actions based on a direction.
void SetLinkExtend(int sprite, int dir, int extend);
* Sets the extend value for one of Link's various actions.
void SetLinkTile(int sprite, int tile, int dir)
* Sets the tile for Link's various actions. This is intended to work as OTile for Link. Unverified.
int GetLinkTile(int sprite, int dir)
* Returns the OTile for one of Link's various actions. Unverified.
int WalkTile, SwimTile, DiveTile, SlashTile, JumpTile, ChargeTile, StabTile, CastingTile, PoundTile, FloatTile
Hold1LandTile, Hold2LandTile, Hold1WaterTile, Hold2WaterTile;
* A series of fourteen individual setter/getter ints to set or return the tile for all of Link's various actions.
(All of the above expose dangerously low-level details about Link's animation code.)
int WarpEffect;
* Sets a warp effect type prior to doing Screen->Warp
(Adding extra state to the script engine that modifies future warps dangerously increases complexity. This functionality should be exposed only through a new function call e.g. Screen->WarpExtended())
int WarpSound;
* Setting this to a value other than '0' will play that sound when Link warps.
(Via any means, or only when warping using Screen->Warp? Some control over game sound effects is reasonable but this series of variables does not seem fully thought-out. Maybe replace with an SFX slot per warp type? )
bool SideWarpSounds;
* If you enable this setting, the warp sound will play in side warps.
(See above)
bool PitWarpSounds;
* If you enable this setting, the warp sound will play in a pit warp, one time.
(Adding this kind of state to the engine (sets up a delayed effect that only happens once, next time Link warps) is unnecessary and dangerous.)
int UseWarpReturn;
* Setting this to a value between 0 and 3 will change the target return square for Link->Warp
(Should be added as a new function e.g. Link->WarpToWarpReturn)
int UsingItem;
* Returns the ID of an item used when Link uses an item. Returns -1 if Link is not using an item this frame.
int UsingItemA;
* Returns the ID of an item used when Link uses an item on button A. Returns -1 if Link is not using an item this frame.
int UsingItemB;
* Returns the ID of an item used when Link uses an item on button B. Returns -1 if Link is not using an item this frame.
bool Diagonal;
* This corresponds to whether 'Diagonal Movement' is enabled, or not.
bool BigHitbox;
* This corresponds to whether 'Big Hitbox' is enabled, or not.
float Misc[32];
* Expanded from [16] to [32]. An array of 32 miscellaneous variables for you to use as you please.
/************************************************** ************************************************** ********/
//////////////////
/// itemdata ///
//////////////////
int ID;
* Returns the item number of the item in question.
int Modifier;
* The Link Tile Modifier
(There are some general concerns that need to be sorted out regarding items vs itemdata. Will setting itemdata automatically update the corresponding variables for all items using that itemdata? Or only affect new copies of that item?)
int Tile;
* The tile used by the item.
int CSet;
* The CSet of the tile used by the item.
int Flash;
* The Flash value for the CSet
int AFrames;
* The number of animation frames in the item's tile animation.
int ASpeed;
* The speed of the item's animation.
int Delay;
* The Delay value, before the animation begins.
int Script;
* The Action Script for the item.
int PScript;
* The Pickup Script for the item.
int MagicCost;
* The item's maic (or rupees, if this is set) cost.
int MinHearts;
* The minimum number of hearts required to pick up the item.
int Misc1, Misc2, Misc3, Misc4, Misc5, Misc6, Misc7, Misc8, Misc9, Misc10;
* These correspond to the pull-down options in the item editor 'Data' tab.
(Should be an array)
int Attribute1, Attribute2, Attribute3, Attribute4, Attribute5, Attribute6,
Attribute7, Attribute8, Attribute9, Attribute10;
* These correspond to the pull-down options in the item editor 'Action' tab.
bool Combine;
* Corresponds to 'Upgrade when collected twice'.
bool Downgrade;
* Corresponds to the 'Remove When Used' option on the Action tab of the item editor.
bool KeepOld;
* Corresponds to 'Keep lower level items on the Pickup tab of the item editor.
bool RupeeCost;
* Corresponds to the 'Use Rupees Instead of Magic' option on the item editor 'Action' tab.
(Should probably be renamed)
bool Edible;
* Corresponds to the 'Can be Eaten by Enemies' box on the Pickup tab of the item editor.
bool GainLower;
* Corresponds to the 'Gain All Lower Level Items' box on the Pickup tab of the item editor.
bool Flag1;
* This corresponds to the box directly below 'Equiment Item'. For swords, this is 'B.H. is Percent'.
bool Flag2;
* This corresponds to the box directly below 'Flag 1, or two boxes down from 'Equiment Item'.
* For swords, this is 'B.D. is Percent'.
bool Flag3;
* This corresponds to the box directly right of 'Equiment Item'. For swords, this is 'B. Penetrates Enemies'.
bool Flag4;
* This corresponds to the box directly right of 'Flag 2'. For swords, this is 'Can Slash'.
bool Flag5;
* This corresponds to the box directly below 'Flag 4'. For swords, this is '<Unused>', and greyed out.
bool Unused;
* ? - An extra script-only flag. It's a mystery to everyone.
/************************************************** ************************************************** ********/
////////////
/// npc ///
////////////
float Misc[32];
* Epanded fron a size of [16] to [32]. An array of 32 miscellaneous variables for you to use as you please.
/************************************************** ************************************************** ********/
////////////////
/// Screen ///
////////////////
void WavyIn();
* Replicates the warping screen wave effect (inbound) from a tile warp.
void WavyOut();
* Replicates the warping screen wave effect (outbound) from a tile warp.
void ZapIn();
* Replicates the warping screen zap effect (inbound) from a tile warp.
void ZapOut();
* Replicates the warping screen zap effect (outbound) from a tile warp.
void OpeningWipe();
* Replicates the opening wipe screen effect (using the quest rule for its type) from a tile warp.
void DrawBitmapEx ( int layer,
int bitmap_id,
int source_x, int source_y, int source_w, int source_h,
int dest_x, int dest_y, int dest_w, int dest_h,
float rotation, int cx, int cy, int mode, int lit, bool mask);
* As DrawBitmap(), except that it can do more things.
/************************************************** ************************************************** ********/