Zelda Classic AEternal, v2.55, Alpha 24 (Win32, 48MB)
Changelog for 2.55 on GitHub.
Expo Module | Demo Module | PhantomMenace Module |
Overview
Fixes to Legacy Bosses
Corrected visual bugs with legacy bosses (Gleeok, Dodongo) and vulnerability for Patras.
Added Scripted Knockback
Added npc->Knockback() and related ZScript handling for fully-scripted convtrol over npc kickback, either disabling engine knockback (->Slide()) or otherwise.
Added Add-On Utilities
Added Allegro Sprite Editor to edito ZQ tile pages.
Added Allegro Font Editor to edito fonts.dat for modules.
Added Allegro Grabber o edit omodule .dat files.
Added utilities.text to explain the use of each.
Allegro Sprite Editor is an older version of ASESprite, designed to work with ZC and other similar, older Allegro game software.
We have opened GitHub repositories for Allegro Sprite Editor and Allegro Font Editor on the AGN GitHub repo portal. The source for Allegro grabber is part of Allegro 4.4.x.
Parser
Fixed if(object) and unless(object) compilation errors; These expressions are now legal, to match if (!object).
Includes
Fixed Tango include under ./headers to correct use of bitmap as an identifier (fix compilation).
Scripts
npc scritps now run for one frame after the npc's HP is reduce to zero (or belie), to match behavious with Link. This allows you to set up death effects or other events if the npc's HP is reduced to 0 before the script aborts.
weapon scripts run for one frame after the weapon dies. This allows for weapon death effects, matching npc scripts and Link.
ZScript
Added npc->Immortal
This allows you to ensure that npcs aren't destroyed and cannot take damage.
Fixed sciope resolution for custom enum types.
Allow setting LA_RAFTING as an action.
Combos and Flags
Added internal Sideview Ladders with a ruleset to determine their behavious. Sidevi=ew (Link's Awakening/Oracle game) ladders no no-lnger require scripts.
Fixed Combo SkipY animation bugs, and added a rule for the old (bugged) behaviour.
Screenshots
Fixed screenshot colours when taking a screenshot from the menus in ZC Player.
ZQuest UI
Updated ZQ Ui to work better with small mode, resizing menus, reformatting contextual menus, to fit properly.
Rearranged ZScript Rules dialogues with tabs.
Enemies
Corrected boss enemy deaths and other graphical issues.
Corrected graphical and solidity behaviour for large enemeis created in the Enemy Editor.
Advanced Item Scripts
Not only can item scripts run for multiple frames, but you may now set a flag in the item editor 'Constant Script'.
If this flag is enabled, and you have the ZScript setting 'Item Scripts Continue to Run' enabled, then the item will run its script as long as it is in inventory, until it runs out of scope, the script calls Quit(), the item is removed from inventory, or the itemdata flag for 'Constant Script' is disabled; which is useful for passive items.
If you only set the item flag 'Constant Script', and not the ZScript setting 'Item Scripts Continue to Run', then the item will run its script once at the beginning of every game.
You can modify the ZScript setting 'Item Scripts Continue to Run' from other scripts during the course of a quest.
Waitdraw
More script types now support the Waitdraw() instruction. The supported types are:
- ffc
- screendata
- hero (active)
- global (active)
- dmap
- item
- itemsprite
You may disable Waitdraw() support for ffcs and item scripts with ZScript settings. These are both disabled by default in legacy quests.
Epilepsy Flash Reduction
Added an Epilepsy Protection quest rule, and ZC Player setting. The latter forces this protection on, even if the QR is off. This reduces the speed of screen-wide flashing events.
Combo Labels
You may now label combos in the Combo Editor, on the Attributes tab. Scripts may access a combo by its label using the command: Game->GetCombo("name").
This means that is is no longer necessary to hardcode combo ID constants into scripts. You can cache all of your game engine combos by name during a quest init, and then use the cached IDs. This allows the player to select the combo that they wish to use with your script, simply by giving it an appropriate label.
Script and Object ID Accessors
Likewise, you can get the ID of any script type, item, npc, or DMap, by its name using the following commands:
- int GetNPCScript("name");
- int GetLWeaponScript("name");
- int GetEWeaponScript("name");
- int GetDMapScript("name");
- int GetScreenScript("name");
- int GetHeroScript("name");
- int GetLinkScript("name");
- int GetPlayerScript("name");
- int GetSubscreenScript("name");
- int GetUntypedScript("name");
- int GetNPC("name");
- int GetItem("name");
- int GetDMap("name");
- int GetCombo("name");
Faster, Internal String Functions
The most common functions from string.zh are now internal ZScript functions. This makes them faster, and more reliable. Further, should you need to use the legacy versions for any reason, you can still call them under the std::string namespace.
New String Control Codes
Added String Control Codes to warp link, and to Set Screen->D[] values.
Warping Link:
\18 \dmap \screen \x \y \effect \sound
Setting Screen->D[]:
\19 \dmap \screen \reg \value
Quest->Misc []
Added A GUI-based dialogue to set up to 32 values, each with a label, that you can read by script via Game->Misc[].
Out of Bound NPCs
There is now a QR that allows NPCs to move, or be repositioned, outside the boundary of the screen.
Enemy Defence: Transform
You may now opt for enemies to transform into another enemy when hit by specific weapons. This works best on basic enemy types, and for the present, does not sup;port certain bosses or largely segmented boss enemies properly.
When transforming, you can set an effect from this list:
Changed Values for Transform Effect Type
- 0: None
- -1: Particle Dissolve (A)
- -2: Particle Explode
- -3: Particle Dissolve (B)
- -4: Harmless Superbomb Blast
- -5: Harmless Bomb Blast
- -6: Superbomb Blast (Harms Link, uses enemy weapon damage for its power.)
- -7: Bomb Blash (Harms Link, uses enemy weapon damage for its power.)
- 1: Sprite 1
- +: Higher Sprites
The attributes for the enemy to transform into, and the effect to use are set via the Enemy Editor, as normal.
Other ZScript and Parser
Added bitmap->DrawPlane()to simulate some SNES Mode 7 style effects.
Various fixes and improvements; fixed some crashes when using some (optional) compiler flags.
Added the ability to create overloaded internal functions.
Made some internal functions inline, thus reducing their call overhead.
Added the repeat(const int) statement. This is similar to a for loop, except that the number of repetitions must be constant, and the execution (ZASM) is faster.
e.g.
repeat(3) { Link->X += Rand(6); }
Added the until() statement. This is the inverse of while(). This also supports do-until. This is faster (ZASM executution) than while(!) and do-while(!).
e.g.
int x = Rand(100); until(x < 1) { Foo(); --x; }
Added the unless() statement. This is the inverse of if statements, and it supports the typical else-unless and else chain.
e.g.
int x = Rand(20); unless(x < 6) { ++Link->X; } else unless ( x > 10) { ++Link->Y; } else { ++Link->Z; }
Added a set of bitmap functions to convert Screen or Layer solidity, combo flag, combo type, and combo inherent flag values into colour data on a bitmap.
Fix system colour 0, palette corruption when using bitmap->Read().
Added Screen->Polygon() and bitmap->Polygon() to draw simple shapes in a solid colour.
Added bitmap render_source as an argument to all bitmap pointer pseudo-3D drawing functions. This allows using another bitmap as the texture of the draw., for Mode-7 style effects, or for texture-wrapping shapes.
Added the following alternative tokens to ZScript:
- compl: Equivalent to ~
- bitnot: Equivalent to ~
- not_equal: alt for not_eq
- and_equal: alt for and_eq
- xor_equal: alt for xor_eq
- or_equal: alt for or_eq