Jump to content

Photo

Zelda Classic 2.55 Alpha 24 for Windows (Official)

Alpha Æternal AEternal 2.55 Windows

  • This topic is locked This topic is locked
7 replies to this topic

#1 ZoriaRPG

ZoriaRPG

    The Timelord

  • ZC Developers
  • Gender:Unspecified
  • Location:Prydon Academy

Posted 03 June 2019 - 02:07 AM

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.

 

 

 

 

 

screenscriptmenu.png
 
screenscriptdialogue.png
 
 
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.
 
 
combo_label.png
 
 
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[].
 

GameMisc5-Data.png

 

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

  • ShadowTiger, Twilight Knight and ywkls like this

#2 ShadowTiger

ShadowTiger

    !~~ah~~ha~~!

  • Members
  • Gender:Unspecified

Posted 03 June 2019 - 08:08 AM

More script types now support the Waitdraw() instruction. The supported types are:

Refresh my memory, please - What is the difference between Waitdraw and Waitframe?

Warping Link:
\18 \dmap \screen \x \y \effect \sound

What is "\Effect" there?

Setting Screen->D[]:
\19 \dmap \screen \reg \value

What is "\reg" ?

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.

Would you say that this is of particular benefit in the creation of an accurate real-time minimap?

1: Sprite 1
+: Higher Sprites

(Transform effect type) - What is the "Higher sprites" effect vs the "Sprite 1" effect?

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.

There is no way to preserve the hit points for transformed enemies, yes? For example, if I had a type of Darknut that lowers their shield when hit by fire and makes them vulnerable to the sword and other things for a while, and then turns back into the first kind of darknut with their original defenses, (And a few more invulnerabilities) could their current HP be transferred to the other version? Or is this just a completely different NPC ID on the screen or something?

#3 venrob

venrob

    Scripter / Dev

  • ZC Developers
  • Real Name:Rob
  • Gender:Male

Posted 03 June 2019 - 03:18 PM

Refresh my memory, please - What is the difference between Waitdraw and Waitframe?


What is "\Effect" there?

What is "\reg" ?

Would you say that this is of particular benefit in the creation of an accurate real-time minimap?

(Transform effect type) - What is the "Higher sprites" effect vs the "Sprite 1" effect?

There is no way to preserve the hit points for transformed enemies, yes? For example, if I had a type of Darknut that lowers their shield when hit by fire and makes them vulnerable to the sword and other things for a while, and then turns back into the first kind of darknut with their original defenses, (And a few more invulnerabilities) could their current HP be transferred to the other version? Or is this just a completely different NPC ID on the screen or something?

 

Waitdraw is for timing within a frame, while waitframe advances to the next frame. Basically, you let the engine do stuff, and then you do more stuff before the end of the frame. Some things, like modifying/reading Link->Dir, need to be on the correct side of Waitdraw to have their intended effect

 

\Effect would be a warp effect, such as those available for Farore's Wind

 

\reg is which Screen->D[] register to set (\reg as \1 means Screen->D[1])

 

A real-time MINIMAP? Well, the solidity might be, if you want just a "where can you walk" minimap. This could be TREMENDOUSLY useful for making an effective Z3 Scrolling setup using bitmaps, though!

 

Well, Sprite 1 is the first sprite in the sprites list. For higher sprites, you put the higher number, so 2 would be sprite 2, and 3 would be sprite 3, all the way through the sprite list.


  • ShadowTiger likes this

#4 PublicEnemy1

PublicEnemy1

    Newbie

  • Members

Posted 03 June 2019 - 08:29 PM

So, how does the Out-of-Bounds NPC work?

Do they still stay on the map? Can you make them wander and/or chase you around said map?

(I kinda want to make a horror game with this idea.)



#5 ZoriaRPG

ZoriaRPG

    The Timelord

  • ZC Developers
  • Gender:Unspecified
  • Location:Prydon Academy

Posted 04 June 2019 - 02:44 AM

Refresh my memory, please - What is the difference between Waitdraw and Waitframe?


Waitdraw() pauses the current script; all instructions after Waitdraw() run at a later time, in general, after sprites are drawn.
 

What is "\Effect" there?

 
Rob misled you here: It is the list of effects in the Screen->TileWarp menu:
 

type:

		Warp types are:

			wtIWARP: Acts like a tile warp.

			wtExit: An entrance/exit warp.

			wtSCROLL: A scrolling warp.

			wtNONE: A cancel warp. 

			

	dmap:

		The Destination DMap

		

	screen: 

		The Destination Screen

		

	x, y:

		Either raw pixel coordinates, or a warp return square ID.

		

			Link->WarpEx() Coordinates Versus Warp Return Square:

				If 'x' and 'y' are both > -1, then they are raw coordinates as always.

				If 'x' < 0, THEN 'y' is the warp return square type, using positive integers.



				This allows using the warp return constants in std.zh, and it prevents a 

				possible ID clash from both values trying to establish the square ID. 



	effect:

		Warp Effects are:

		warpEffectNONE: No visual effect.

		warpEffectZap: Zap Effects

		warpEffectWave: Wave Effects

		warpEffectInstant: Black screen.

		warpEffectOpen: Calls the opening wipe.



	sound:

		You may play a special sound (e.g. Magic Mirror) during the warp.

What is "\reg" ?


A misnomer carried over from when DarkDragon created Screen->D[]: He dubbed the eight indices as registers, d0 through d7.  (More information on the term register.)

There are eight D[] indices, 0 to 7.

 

Would you say that this is of particular benefit in the creation of an accurate real-time minimap?


You could scale bitmaps to do that, and position markers on them. You could also just make a scalin dungeon map.
 

(Transform effect type) - What is the "Higher sprites" effect vs the "Sprite 1" effect?


It simply means, values > 1 use sorites equal to the value: 1, uses sprite 1; 2 uses sprite 2; 35 uses sprite 35.
 

There is no way to preserve the hit points for transformed enemies, yes? For example, if I had a type of Darknut that lowers their shield when hit by fire and makes them vulnerable to the sword and other things for a while, and then turns back into the first kind of darknut with their original defenses, (And a few more invulnerabilities) could their current HP be transferred to the other version? Or is this just a completely different NPC ID on the screen or something?

 
Not at present, but it would be easy to add.
 

So, how does the Out-of-Bounds NPC work?
Do they still stay on the map? Can you make them wander and/or chase you around said map?
(I kinda want to make a horror game with this idea.)


This is intended to be used with scripting. NPCs don't move onto other screens, but they can be positioned outside the screen bounds using this, as I do in my scrolling quests.
 

 
Note how npcs move out of bounds, and when you scroll, they become visible. With this rule off, when pannin, they would collect at screen edges in a lump.
 

 

This could be TREMENDOUSLY useful for making an effective Z3 Scrolling setup using bitmaps, though!


That is precisely how I use it.
  • ShadowTiger likes this

#6 PublicEnemy1

PublicEnemy1

    Newbie

  • Members

Posted 04 June 2019 - 09:19 AM

This is intended to be used with scripting. NPCs don't move onto other screens, but they can be positioned outside the screen bounds using this, as I do in my scrolling quests.

 

 
Note how npcs move out of bounds, and when you scroll, they become visible. With this rule off, when pannin, they would collect at screen edges in a lump.
 
So this is supposed to help with Z3 Scrolling? Nice!
Though, is it possible that the idea of enemies chasing you even from a different part of a map be implemented in the future or through scripting?


#7 venrob

venrob

    Scripter / Dev

  • ZC Developers
  • Real Name:Rob
  • Gender:Male

Posted 06 June 2019 - 03:40 AM

Oh, also one note, you can mix `if/unless` in a chain. i.e.

if(x < 5)
{
    x += Rand(1,10);
}
else unless(x > 240)
{
    x += 5;
}

  • ShadowTiger likes this

#8 Twilight Knight

Twilight Knight

  • Members
  • Real Name:Sven
  • Gender:Male
  • Location:The Netherlands

Posted 06 June 2019 - 10:40 AM

Nifty new features, so I downloaded!

 

Now this is the first time I work on items in 2.55, but it seems the items list is no longer sorted alphabetically. Is this intentional?

 

Edit: "item list" as in the one under Quest -> Items

 

Edit: Alright, ignore that please. It sorts when you reopen the dialogue  :whistle:


Edited by Twilight Knight, 06 June 2019 - 10:44 AM.




Also tagged with one or more of these keywords: Alpha, Æternal, AEternal, 2.55, Windows

1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users