General usage
Enemy scripts
A ghost.zh script should begin by calling one of the Ghost_Init
functions to
find the enemy the FFC should be associated with and set up internal data.
Afterward, Ghost_Waitframe()
should be used instead of Waitframe()
.
This is necessary to keep data consistent and to provide standard enemy behavior,
such as reacting to damage. Most of the standard enemy data is manipulated by
using the global variables and functions here, but some things
- particularly defenses and draw offsets - must still be accessed via the npc pointer.
The enemy used can be of any type and with any settings. Its HP, damage, and
defenses will be used normally. Its regular tiles and animation will be used
if the FFC is set to use GH_INVISIBLE_COMBO
; otherwise, it will be made
invisible. Other enemy data can be used as you see fit.
There are also a number of functions used to create and control eweapons. They can be assigned a number of simple movements and can be made to vanish and spawn additional eweapons. These behaviors require support from the global script.
For scripted enemies to be susceptible to clocks, StartClock()
and UpdateClock()
must be called in the global script, and the included item script
GhostZHClockScript
must be set as any clock items' pickup script, with D0 set
to match the clock's duration.
To prevent conflicts with ghost.zh, scripts should avoid using
npc->Misc[__GHI_NPC_DATA]
and eweapon->Misc[__EWI_FLAGS]
. Both indices
are set to 15 by default.
Functions, variables, and constants whose names start with __
are for internal
use and may be changed or removed in future versions without warning.
AutoGhost
With appropriately written scripts, it is possible to place scripted enemies
without any manual FFC setup. The AutoGhost()
function will scan the screen for
enemies that should be handled by scripts and set up FFCs automatically when
it finds them. AutoGhost()
should come after WaitDraw()
in the global script.
An AutoGhost FFC script's run function should take an enemy ID as argument D0,
which should be passed to the Ghost_InitAutoGhost
function. AutoGhost()
will not set
any other arguments, but they can be used if your script runs additional
instances of the same script.
The corresponding enemy needs to be set up to identify the script and combo it will use, as described here.