Difference between revisions of "Animation string"
(→Tags: More information on 'b' flags) |
Katajakasa (talk | contribs) |
||
(14 intermediate revisions by 3 users not shown) | |||
Line 36: | Line 36: | ||
Here's a complete list of all tags. Descriptions in ''italics'' may be unreliable. | Here's a complete list of all tags. Descriptions in ''italics'' may be unreliable. | ||
+ | <!-- | ||
+ | chaos -- notes 25/11/09 -- flags' effects on various anim data fields | ||
+ | f4: | ||
+ | ar 0001 | ||
+ | at 0002 | ||
+ | af 0004 | ||
+ | aa 0008 | ||
+ | ai 0010 | ||
+ | ac 0020 | ||
+ | aw 0040 | ||
+ | ad 0080 | ||
+ | ab 0400 | ||
+ | ao 0800 | ||
+ | as 1000 | ||
+ | ae 2000 | ||
+ | am 4000 | ||
+ | ax 8000 | ||
+ | |||
+ | al f4 = f4E | 0002 // bug? should this be f4 |= 0x0002? | ||
+ | |||
+ | f4E: | ||
+ | us 0001 | ||
+ | bn 0004 | ||
+ | ag 0008 | ||
+ | ur 0010 | ||
+ | ue 0020 | ||
+ | ud 0040 | ||
+ | uh 0080 | ||
+ | uz 0100 | ||
+ | uf 0200 | ||
+ | uc 0400 | ||
+ | ua 0800 | ||
+ | ug 1000 | ||
+ | ul 2000 | ||
+ | by 4000 | ||
+ | bo0 4000 // plus some other stuff | ||
+ | bk 8000 // plus some other stuff | ||
+ | |||
+ | f1A: | ||
+ | zg 0004 | ||
+ | zl 0010 | ||
+ | zm 0020 | ||
+ | zh 0040 | ||
+ | zj 0080 | ||
+ | zp 0100 | ||
+ | zz FFFF | ||
+ | |||
+ | f14: | ||
+ | bg 0200 | ||
+ | br 0100 | ||
+ | bt 0400 | ||
+ | f ^ 0004 | ||
+ | v = 0001 | ||
+ | vsK = 0001 // plus f52 | ||
+ | |||
+ | f52: | ||
+ | cf 08 | ||
+ | cg 20 | ||
+ | cl 40 | ||
+ | cp 10 | ||
+ | cw 04 | ||
+ | uj 80 | ||
+ | vsx 01 // plus f14 | ||
+ | vsy 02 // plus f14 | ||
+ | |||
+ | f22: | ||
+ | jg 0004 | ||
+ | fl 0010 | ||
+ | jm 0020 | ||
+ | jh 0040 | ||
+ | jj 0080 | ||
+ | jp 0100 | ||
+ | jf 1000 | ||
+ | jf2 2000 | ||
+ | jz FFFF | ||
+ | |||
+ | |||
+ | From http://www.omf2097.com/~forum/viewthread.php?tid=193&page=8 : [More incorporated below] | ||
+ | |||
+ | cp: doesn't strictly mean "hits here" | ||
+ | look at Nova's basic punch: it starts hitting on frame 2-3 but doesn't have CP till 4 | ||
+ | ub: this frame causes trails | ||
+ | n: during recovery; or during entirety of Concussion Cannon | ||
+ | --> | ||
{| cellpadding="4" style="border:1px solid darkgray;" | {| cellpadding="4" style="border:1px solid darkgray;" | ||
! Tag !! Notes | ! Tag !! Notes | ||
+ | |- | ||
+ | |colspan=2| <hr> | ||
|- | |- | ||
| aa || | | aa || | ||
Line 48: | Line 134: | ||
| ad || | | ad || | ||
|- | |- | ||
− | | ae || | + | | ae || Never used? |
|- | |- | ||
| af || | | af || | ||
Line 70: | Line 156: | ||
| ar || | | ar || | ||
|- | |- | ||
− | | al || | + | | al || Never used? |
|- | |- | ||
|colspan=2| <hr> | |colspan=2| <hr> | ||
|- | |- | ||
− | | '''b<...>''' || The b codes control the rendering method used for the sprite. A variable '''b''' is set to a ''visibility level'', and is linearly interpolated throughout the frame from the '''bs''' value to the '''bf''' value. | + | | '''b<...>''' || The b codes control the rendering method used for the sprite. A variable '''b''' is set to a ''visibility level'', and is linearly interpolated throughout the frame from the '''bs''' value to the '''bf''' value, if the '''bs''' value has been specified and is not zero. Otherwise the '''b''' value is set to the '''bf''' value. |
<pre> | <pre> | ||
<math> | <math> | ||
− | b = bs + (bf - bs) * tick / ticksThisFrame | + | b = bs ? (bs + (bf - bs) * tick / ticksThisFrame) : bf |
</math> | </math> | ||
</pre> | </pre> | ||
Line 100: | Line 186: | ||
| bj<n> || bflags |= 0x0400, bf := n | | bj<n> || bflags |= 0x0400, bf := n | ||
|- | |- | ||
− | | bs<n> || ''Blend start with opacity n < 256 (the sprite is drawn at this opacity at the start of the frame and gradually transitioned to whatever is set as the blend finish value)'' | + | | bs<n> || bs := n ''Blend start with opacity n < 256 (the sprite is drawn at this opacity at the start of the frame and gradually transitioned to whatever is set as the blend finish value)'' |
|- | |- | ||
| bu || bflags |= 0x8000 | | bu || bflags |= 0x8000 | ||
Line 110: | Line 196: | ||
|colspan=2| <hr> | |colspan=2| <hr> | ||
|- | |- | ||
− | | '''bp<...>''' || The bp codes control scene lighting. A variable '''bp''' is set to a '' | + | | '''bp<...>''' || The bp codes control scene and entity lighting and colouring. A variable '''bp''' is set to a ''colour level'', and is linearly interpolated throughout the frame from the '''bpb''' value to the '''bpp''' value. The '''bpd''' tag specifies a reference colour (r,g,b) by palette index. |
<pre> | <pre> | ||
− | |||
bp = bpb + (bpp - bpb) * tick / ticksThisFrame | bp = bpb + (bpp - bpb) * tick / ticksThisFrame | ||
− | + | for i = bps to bps + bpn: | |
− | g_i' = | + | if bz: |
− | + | m = max(r_i, g_i, b_i) | |
− | + | r_i' = r_i + m/64 * bp/64 * (r - r_i*) | |
+ | g_i' = g_i + m/64 * bp/64 * (g - g_i*) | ||
+ | b_i' = b_i + m/64 * bp/64 * (b - b_i*) | ||
+ | else: | ||
+ | r_i' = r * bp/64 | ||
+ | g_i' = g_i * (1 - bp/64) + g * bp/64 | ||
+ | b_i' = b_i * (1 - bp/64) + b * bp/64 | ||
+ | |||
+ | r_i = max(0, min(63, r_i')) | ||
+ | g_i = max(0, min(63, g_i')) | ||
+ | b_i = max(0, min(63, b_i')) | ||
</pre> | </pre> | ||
+ | In the above, r_i* is the original (unmodified) value. | ||
|- | |- | ||
− | | | + | | bpd<n> || bpd := n |
+ | Specifies a colour (reference palette index) | ||
|- | |- | ||
− | | | + | | bps<n> || bps := n |
− | + | Starting palette index | |
− | |||
|- | |- | ||
| bpn<n> || bpn := n | | bpn<n> || bpn := n | ||
+ | Palette entry count | ||
|- | |- | ||
− | | | + | | bpf || Blend Palette Fighter: If this is the HAR for player 2 then bps48 bpn48 (second robot's colours) else bps1 bpn47 (first robot's colours) |
|- | |- | ||
| bpp<n> || bpb := n, bpp := n | | bpp<n> || bpb := n, bpp := n | ||
+ | Set both initial and final ''colour level''. | ||
|- | |- | ||
− | | | + | | bpb<n> || bpb := n |
+ | Initial ''colour level'' for blending. Specify bpp first. | ||
+ | |- | ||
+ | | bpo || bpo := 1 | ||
+ | Disables palette effects. Only used in CREDITS.BK. | ||
+ | |- | ||
+ | | bz || | ||
+ | If specified, a colour tint effect will be used, otherwise a green-blue lightning effect will be used. | ||
|- | |- | ||
|colspan=2| <hr> | |colspan=2| <hr> | ||
|- | |- | ||
− | | ba<n> || | + | | ba<n> || Only used by CREDITS.BK |
|- | |- | ||
− | | bc<n> || | + | | bc<n> || Only used by CREDITS.BK |
|- | |- | ||
− | | bd || | + | | bd || Only used by CREDITS.BK |
|- | |- | ||
− | | bg || | + | | bg || Only used by CREDITS.BK |
|- | |- | ||
− | | bi<n> || | + | | bi<n> || Only used by CREDITS.BK |
|- | |- | ||
| bk<n> || crashes if not in arena? | | bk<n> || crashes if not in arena? | ||
Line 158: | Line 263: | ||
| by || | | by || | ||
|- | |- | ||
− | | | + | | cf || Used by Shadow's destruction (AF1:61) |
|- | |- | ||
− | | | + | | cg || Used by Katana's rising blade (normal and extended) (AF5:22,23) |
|- | |- | ||
− | + | | cl || Used by Pyros' scrap (both parts) (AF3:35,38) | |
− | |||
− | | cl || | ||
|- | |- | ||
| cp || ''Apply the damage for the current animation to opponent'' | | cp || ''Apply the damage for the current animation to opponent'' | ||
|- | |- | ||
− | | cw || | + | | cw || Used by Flail's charging moves (charge punch, strong punch, scrap 2) (AF7:33,35,36) |
|- | |- | ||
− | | cx<n> || | + | | cx<n> || Used by: |
+ | * Jaguar's ?? (AF0:38) | ||
+ | * Thorn's off-wall attack (AF2:39) | ||
+ | * Electra's ?? (AF4:33) | ||
+ | * Katana's razor spins (AF5:25,26,27,28) | ||
+ | * Flail's chain spins (AF7:31,39), | ||
+ | * Gargoyle standing pose and diving claw grab (AF8:1,35), | ||
+ | * Chronos' ?? (AF9:38,39) | ||
|- | |- | ||
| cy<n> || | | cy<n> || | ||
|- | |- | ||
− | | d<n> || ''d1 | + | | d<n> || Jump back into the animation as if N 'ticks' have already occured, for example, d1 will jump back to the start of the animation, but d200 will jump into the animation at whatever point the animation would be 200 ticks after it had started. |
|- | |- | ||
| e || | | e || | ||
Line 185: | Line 295: | ||
|- | |- | ||
| i || | | i || | ||
+ | |- | ||
+ | |colspan=2| <hr> | ||
+ | |- | ||
+ | | '''j<...>''' || It is hypothesized that the '''j''' tags define which moves can 'chain' to which other moves. Possibly jh moves only chain to high moves, jm moves only chain to mid moves, jl moves only chain to low moves. (The distinction between a mid and low move is unclear at this point.) jf moves appear to chain to your scrap move (f=finisher here). | ||
+ | |||
+ | It is unknown whether jn<n> is part of this block of tags or a separate tag. | ||
+ | <!-- | ||
+ | The J Tags: Could indicate the frames are to be skipped under some conditions. | ||
+ | Plenty of them - format seems to be j[letter] or jn[int] | ||
+ | |||
+ | Jag's J Tags | ||
+ | jh: P, d+K, cannon | ||
+ | jm: db+P, db+K, K | ||
+ | jl: df+P, d+P | ||
+ | jp: b+P | ||
+ | jn21: P, b+P, d+P | ||
+ | jn15: getting up | ||
+ | jf: win animation | ||
+ | |||
+ | Hypothesis: J means Jump. I have no idea what jn## means. | ||
+ | --> | ||
|- | |- | ||
| jf2 || | | jf2 || | ||
Line 199: | Line 330: | ||
|- | |- | ||
| jm || | | jm || | ||
+ | |- | ||
+ | | jp || | ||
+ | |- | ||
+ | | jz || combination of all other j flags except jn. Only used by (AF5:35). | ||
|- | |- | ||
| jn<n> || | | jn<n> || | ||
|- | |- | ||
− | | | + | |colspan=2| <hr> |
− | |||
− | |||
|- | |- | ||
| k<n> || | | k<n> || | ||
Line 247: | Line 380: | ||
|- | |- | ||
| oy<n> || oy := n | | oy<n> || oy := n | ||
− | |||
− | |||
|- | |- | ||
| pa || | | pa || | ||
Line 294: | Line 425: | ||
| smf<n> || | | smf<n> || | ||
|- | |- | ||
− | | smo<n> || | + | | smo<n> || Play music track <n>. The track to play is one of the following: |
+ | * 0 - No music | ||
+ | * 1 - End.psm | ||
+ | * 2 - Menu.psm | ||
+ | * 3 - Arena0.psm | ||
+ | * 4 - Arena1.psm | ||
+ | * 5 - Arena2.psm | ||
+ | * 6 - Arena3.psm | ||
+ | * 7 - Arena4.psm | ||
|- | |- | ||
| sp<n> || ''Sound panning n?'' | | sp<n> || ''Sound panning n?'' | ||
Line 332: | Line 471: | ||
| v || | | v || | ||
|- | |- | ||
− | | vsx || also does v. | + | | vsx || also does v. Never used? |
|- | |- | ||
− | | vsy || actually vsK where K is anything other than x. also does v. | + | | vsy || actually vsK where K is anything other than x. also does v. Never used? |
|- | |- | ||
| w || | | w || | ||
+ | |- | ||
+ | |colspan=2| <hr> | ||
|- | |- | ||
| '''x<...>''' || /x-?\+?=?-?\+?[0-9]*/ is accepted but in practice it'll be one of... | | '''x<...>''' || /x-?\+?=?-?\+?[0-9]*/ is accepted but in practice it'll be one of... | ||
Line 344: | Line 485: | ||
| x+<n> || ''Move x by n right?'' | | x+<n> || ''Move x by n right?'' | ||
|- | |- | ||
− | | x=<n> || ''Interpolate to x=<m> on | + | | x=<n> || ''Interpolate to x=<m> on previous frame?'' |
+ | |- | ||
+ | | x<n> || If unspecified, a value of 100 is assumed. ''Set x to n?'' | ||
|- | |- | ||
− | | | + | |colspan=2| <hr> |
|- | |- | ||
| '''y<...>''' || /y-?\+?=?-?\+?[0-9]*/ is accepted but in practice it'll be one of... | | '''y<...>''' || /y-?\+?=?-?\+?[0-9]*/ is accepted but in practice it'll be one of... | ||
Line 354: | Line 497: | ||
| y+<n> || ''Move y by n right?'' | | y+<n> || ''Move y by n right?'' | ||
|- | |- | ||
− | | y=<n> || ''Interpolate to y=<m> on | + | | y=<n> || ''Interpolate to y=<m> on previous frame?'' |
+ | |- | ||
+ | | y<n> || If unspecified, a value of 100 is assumed. ''Set y to n?'' | ||
+ | |- | ||
+ | |colspan=2| <hr> | ||
|- | |- | ||
− | | | + | | '''z<...>''' || The z tags specify which attacks the player is invunlerable to, for the duration of the frame. |
+ | <!-- | ||
+ | The Z Tags | ||
+ | zz: total invincibility? | ||
+ | all frames of Rising Blade | ||
+ | frames 1-2 of Jag Leaps | ||
+ | zp: on early frames of Shadow Headbutt, f1-3 of Flip Kick - inv. projectiles? | ||
+ | zj: invincible to jumps? | ||
+ | all frames of Rising Talon | ||
+ | frames 1-2 of Flip Kick | ||
+ | --> | ||
|- | |- | ||
− | | zg || | + | | zg || '''0x0004''' Never used? |
|- | |- | ||
− | | zh || | + | | zh || '''0x0040''' Never used? |
|- | |- | ||
− | | zj || | + | | zj || '''0x0080''' ''Player is invincible to jumping attacks?'' |
|- | |- | ||
− | | zl || | + | | zl || '''0x0010''' Never used? |
|- | |- | ||
− | | zm || | + | | zm || '''0x0020''' Never used? |
|- | |- | ||
− | | zp || | + | | zp || '''0x0100''' ''Player is invincible to projectiles?'' |
|- | |- | ||
− | | zz || Combination of all other z flags. ''Player is invincible for this frame'' | + | | zz || '''0xFFFF''' Combination of all other z flags. ''Player is invincible for this frame'' |
|} | |} | ||
Latest revision as of 03:11, 16 January 2013
Basic format
Animation strings are of the form:
<frame descriptor 1>-<frame descriptor 2>-...-<frame descriptor n>
Frame descriptors are a sequence of lowercase tags followed by an uppercase frame letter and an integer frame duration:
zzA1
For instance:
x-5A3-x-3B2-x-2C1-x-1D1
divides up as:
Tags | Frame | Duration |
---|---|---|
x-5 | A | 3 |
x-3 | B | 2 |
x-2 | C | 1 |
x-1 | D | 1 |
Tags
There are a lot of available tags. Not all of them are understood. Some of them take numeric parameters, which are indicated in angle brackets below. Such parameters must match the regular expression:
-?+\?[0-9]*
An omitted parameter is treated as 0.
Here's a complete list of all tags. Descriptions in italics may be unreliable.
Tag | Notes |
---|---|
aa | |
ab | |
ac | |
ad | |
ae | Never used? |
af | |
ag | |
ai | |
am | |
ao | |
as | |
at | |
aw | |
ax | |
ar | |
al | Never used? |
b<...> | The b codes control the rendering method used for the sprite. A variable b is set to a visibility level, and is linearly interpolated throughout the frame from the bs value to the bf value, if the bs value has been specified and is not zero. Otherwise the b value is set to the bf value.
<math> b = bs ? (bs + (bf - bs) * tick / ticksThisFrame) : bf </math> The bf value is set by the tags bb, bf, bj, bl, bm. These tags all also set some bflags which control the rendering effect. |
b1 | = 0x2000 |
b2 | = 0x4000 |
bb<n> | = 0x0010, bf := n Screen shake with magnitude n |
be | = 0x0800 Something related to victory/scrap/destruction animations? |
bf<n> | = 0x0001, bf := n Blend finish with opacity n < 256 |
bh | = 0x0040 |
bl<n> | = 0x0008, bf := n |
bm<n> | = 0x0100, bf := n |
bj<n> | = 0x0400, bf := n |
bs<n> | bs := n Blend start with opacity n < 256 (the sprite is drawn at this opacity at the start of the frame and gradually transitioned to whatever is set as the blend finish value) |
bu | = 0x8000 |
bw | = 0x0080 |
bx | = 0x0002 |
bp<...> | The bp codes control scene and entity lighting and colouring. A variable bp is set to a colour level, and is linearly interpolated throughout the frame from the bpb value to the bpp value. The bpd tag specifies a reference colour (r,g,b) by palette index.
bp = bpb + (bpp - bpb) * tick / ticksThisFrame for i = bps to bps + bpn: if bz: m = max(r_i, g_i, b_i) r_i' = r_i + m/64 * bp/64 * (r - r_i*) g_i' = g_i + m/64 * bp/64 * (g - g_i*) b_i' = b_i + m/64 * bp/64 * (b - b_i*) else: r_i' = r * bp/64 g_i' = g_i * (1 - bp/64) + g * bp/64 b_i' = b_i * (1 - bp/64) + b * bp/64 r_i = max(0, min(63, r_i')) g_i = max(0, min(63, g_i')) b_i = max(0, min(63, b_i')) In the above, r_i* is the original (unmodified) value. |
bpd<n> | bpd := n
Specifies a colour (reference palette index) |
bps<n> | bps := n
Starting palette index |
bpn<n> | bpn := n
Palette entry count |
bpf | Blend Palette Fighter: If this is the HAR for player 2 then bps48 bpn48 (second robot's colours) else bps1 bpn47 (first robot's colours) |
bpp<n> | bpb := n, bpp := n
Set both initial and final colour level. |
bpb<n> | bpb := n
Initial colour level for blending. Specify bpp first. |
bpo | bpo := 1
Disables palette effects. Only used in CREDITS.BK. |
bz |
If specified, a colour tint effect will be used, otherwise a green-blue lightning effect will be used. |
ba<n> | Only used by CREDITS.BK |
bc<n> | Only used by CREDITS.BK |
bd | Only used by CREDITS.BK |
bg | Only used by CREDITS.BK |
bi<n> | Only used by CREDITS.BK |
bk<n> | crashes if not in arena? |
bn | |
bo<n> | |
br | Draw additively |
bt | |
by | |
cf | Used by Shadow's destruction (AF1:61) |
cg | Used by Katana's rising blade (normal and extended) (AF5:22,23) |
cl | Used by Pyros' scrap (both parts) (AF3:35,38) |
cp | Apply the damage for the current animation to opponent |
cw | Used by Flail's charging moves (charge punch, strong punch, scrap 2) (AF7:33,35,36) |
cx<n> | Used by:
|
cy<n> | |
d<n> | Jump back into the animation as if N 'ticks' have already occured, for example, d1 will jump back to the start of the animation, but d200 will jump into the animation at whatever point the animation would be 200 ticks after it had started. |
e | |
f | toggle flag Flip sprite verticially |
g | |
h | |
i | |
j<...> | It is hypothesized that the j tags define which moves can 'chain' to which other moves. Possibly jh moves only chain to high moves, jm moves only chain to mid moves, jl moves only chain to low moves. (The distinction between a mid and low move is unclear at this point.) jf moves appear to chain to your scrap move (f=finisher here).
It is unknown whether jn<n> is part of this block of tags or a separate tag. |
jf2 | |
jf | |
jg | |
jh | |
jj | |
jl | |
jm | |
jp | |
jz | combination of all other j flags except jn. Only used by (AF5:35). |
jn<n> | |
k<n> | |
l<n> | |
ma<n> | if n == 1000 then n := random(360) |
mc | |
md<n> | Destroy animation n |
mg<n> | |
mi<n> | |
mm<n> | mm := n |
mn<n> | |
mo | something involving HARs, applied to object mm |
mp<n> | |
mrx<n> | mx := random(320 - 2*mm) + n |
mry<n> | my := random(200 - 2*mm) + n |
ms | my := -4 * (f1C - 188) |
mu<n> | similar to mo, n < 1024, applied to object mm |
mx<n> | mx := n |
my<n> | my := n |
m<n> | Create instance of animation n |
n | |
ox<n> | ox := n |
oy<n> | oy := n |
pa | |
pb<n> | n < 512 |
pc<n> | n < 512 |
pd<n> | n < 256 |
pe | make pa, pb, pc, pd operate on the other HAR |
ph | disable pa, pb, pc, pd |
pp<n> | |
ps | update a color palette |
ptd<n> | |
ptp<n> | |
ptr<n> | |
q | |
r | toggle a global Flip sprite horizontally |
s<n> | Play sound n |
sa | |
sb<n> | same as se<n> plus setting one other value to n |
sc<n> | sc0 is different from other sc tags |
sd | |
se<n> | similar to sl<n+1> (the latter also clears the high byte of the value) |
sf<n> | Sound frequency n |
sl<n> | Sound loudness n |
smf<n> | |
smo<n> | Play music track <n>. The track to play is one of the following:
|
sp<n> | Sound panning n? |
sw<n> | sw<n> sets an internal counter to max(current value, n). This counter is decreased at a rate of either 2 or 4 units per game tick, down to 0. If the counter gets to 100 or above, the game pauses for a little while. |
t | |
ua | |
ub | motion blur |
uc | |
ud | |
ue | |
uf | |
ug | |
uh | |
uj | |
ul | |
un | |
ur | |
us | |
uz | |
v | |
vsx | also does v. Never used? |
vsy | actually vsK where K is anything other than x. also does v. Never used? |
w | |
x<...> | /x-?\+?=?-?\+?[0-9]*/ is accepted but in practice it'll be one of... |
x-<n> | Move x by n left? |
x+<n> | Move x by n right? |
x=<n> | Interpolate to x=<m> on previous frame? |
x<n> | If unspecified, a value of 100 is assumed. Set x to n? |
y<...> | /y-?\+?=?-?\+?[0-9]*/ is accepted but in practice it'll be one of... |
y-<n> | Move y by n left? |
y+<n> | Move y by n right? |
y=<n> | Interpolate to y=<m> on previous frame? |
y<n> | If unspecified, a value of 100 is assumed. Set y to n? |
z<...> | The z tags specify which attacks the player is invunlerable to, for the duration of the frame. |
zg | 0x0004 Never used? |
zh | 0x0040 Never used? |
zj | 0x0080 Player is invincible to jumping attacks? |
zl | 0x0010 Never used? |
zm | 0x0020 Never used? |
zp | 0x0100 Player is invincible to projectiles? |
zz | 0xFFFF Combination of all other z flags. Player is invincible for this frame |
Error handling
A handful of animation strings used by the AF and BK files provided with OMF2097 are ill-formed. The behaviour in the case of ill-formed strings in the OMF engine is inconsistent, but at least the following non-tags must be accepted and ignored by any correct parser:
Tag | Used by | Notes |
---|---|---|
zc | Pyros' Shadow Super Thrust x+4zcubs21l50zp |
Probably a typo for zp. It looks like someone added 'zp's at the end of all the tags later when it was found to be not working properly (probably because of this zc). The tags for the frames before and after both contain zp. |