The (in)Complete Guides to AI Types and Sprites

And now, Undocumented Features!

After many hours of testing, I've compiled a list describing the properties of all of the AI types in SketchFighter, excluding the starred ones (thus the "(in)" in the topic title). I have also made a list of the special attributes that some sprites have, which you can find here, two posts down. Furthermore, I have posted a guide to a few of SketchFighter's undocumented features in this post. Feel free to post any feedback or corrections for any of the guides..

(EDIT, Dec 27 2006) Wow! I definitely hadn't expected this to be pinned. Thanks!
Anyway, I've modified the entries for the Tank Turret, Mega Mine, Seed Pod Waiting, and Mess AIs, and added an entry for the "* EnemyShieldRing" AI. Also, I've modified the first instance of the "sequential sprites" line to clarify things.
(EDIT, Jan 18 2007) Posted the (in)Complete Guide to Sprites, added link to it in this post.
(EDIT, Jan 26 2007) Added note about solid types.
(EDIT, Apr 24 2007) Posted the (in)Complete guide to Undocumented Features and added a link to it in this post.
(EDIT, Jun 10 2007) Clarified how the Armorbug, Cutie, and MEGA Mine scripts detect when the player is firing at them.

Edwards

----------The List----------
Note: If an AI Type aims towards the player, or chases the player, that will only occur if the Solid Type is Enemy. If the sprite has any other Solid Type, it will do every part of its script that does not involve the player. (And no, Player-type sprites will not chase/aim at enemies.) Note also that those AIs that are locked to a specific set of sprites will always use the default Solid Type of those sprites.

ENV: Lava pulse
Motion: None.
Animation: Sprite color changes up and down the scale of black, dark red, bright red, dark orange, and bright orange.
Sprites: Can use any sprite.

ENV: Super door flicker
Action: None.
Animation: Flickers rapidly between the three Super Door sprites.
Sprites: Locked to the Super Door sprites.

ENV: Lava bubble
Action: None.
Animation: Runs quickly through the "lava bubble" sprites once every two to four seconds. Is invisible between animations. Also, is locked at 100% size.
Sprites: Locked to the Lava Bubble sprites.

ENV: Pickup pulse
Action: None.
Animation: Inflates to 150% size in three stages, turns bright green. Deflates to 100% in another three steps, turning dark green/black. Full cycle takes about 1.5 seconds. NOTE: Is locked to having a base size of 100%.
Sprites: Can use any sprite.

ENV: Marker rect
Action: None.
Animation: Inflates in one step to 50% larger than starting size, turns bright green. Shrinks back to starting size in four steps, turning dark green halfway through. Cycle takes about 0.75 seconds.
Sprites: Can use any sprite.

ENV: Save-zone Ring
Action: Sprite spins slowly clockwise.
Animation: Color alternates between light green and dark green on a one-second cycle.
Sprites: Can use any sprite.

ENEMY: Spinning drone
Action: Spins constantly, bouncing around randomly.
Animation: None.
Sprites: Can use any sprite.

ENEMY: Active enemy turret
Action: Rotates for two seconds to face the player, moving up to 60°, then fires three mini-bean-type shots in a row. Repeats.
Animation: None.
Sprites: Can use any sprite. Shots come out the right side when sprite is at 0 rotation.

ENV: ClimateParticles
Action: Sprite flies left for two seconds, then right for two seconds, while spinning slowly.
Animation: When sprite changes direction, it creates three particles in random locations that continue in the previous direction for a fraction of a second. NOTE: Sprite is always colored bright red.
Sprites: Can use any sprite.

ENV: Light pulse
Action: None.
Animation: Sprite color fades to black and then brightens back up to full color. Full cycle takes about two seconds, and the sprite stays in the full-color mode for longer than the black mode.
Sprites: Can use any sprite.

ENV: Forest Tree Movement
Action: None.
Animation: Sprite rotates 5° clockwise, 5° more clockwise, inflates by about 5%, and then reverses that sequence. Time between each stage ranges from 0 to about 1 second.
Sprites: Can use any sprite.

ENEMY: Mine
Action: Sits in one place, slowly rotating, until the player gets too close. Rotation takes 10 seconds. Explodes when nose of ship gets within about 3.5 graph-paper squares of the center of the mine.
Animation: Rotation.
Sprites: Can use any sprite.

ENEMY: Waiting turret
Action: Sits still until it comes on-screen, then stwitches to ENEMY: Active enemy turret.
Animation: None.
Sprites: Can use any sprite.

ENEMY: Idle bug
Action: Moves around slowly and randomly, switches to ENEMY: Attack bug when the player gets within about a quarter screen of it.
Animation: Alternates slowly between the sprite that you place in the editor and the sprite that comes immediately afterwards in the list of sprites (hereafter referred to as "sprites N and N+1"). Do note that you need to select the first of the two sprites you want to use when creating the object, as selecting the second will cause that one to alternate with the one that comes after that. Further note: If you choose the last sprite in the list as the base sprite, the AI will use the next-to-last sprite as the second sprite. This is the only case where the order of sprites will be reversed.
Sprites: Can use any pair of sequential sprites.

ENEMY: Attack bug
Action: Will chase after the player slowly, making fairly wide turns (~2x player ship length). Every five seconds or so it stops, rotates 90° clockwise, and starts chasing again.
Animation: Alternates quickly between sprites N and N+1.
Sprites: Can use any pair of sequential sprites.

ENEMY: Ice missile
Action: Chases the player for about 10 seconds before disintegrating (using the large explosion with a dirty ice color). Moves almost as fast as Ship 1 in reverse, and has a similar turning radius to a bug.
Animation: Turns a dirty ice color and releases a trail of Missile smoke rings.
Sprites: Can use any sprite.

ENEMY: Ice missile waiting
Action: Does nothing until the player is within about a quarter screen, then switches to ENEMY: Ice missile.
Animation: None.
Sprites: Can use any sprite.

ENEMY: Spinning shooting
Action: Sits in place, rotating, shooting out of both ends. Fires 22 shots per full rotation, rotation takes about 8 seconds.
Animation: None.
Sprites: Can use any sprite.

ENEMY: Small flicker idle
Action: Moves in a wide clockwise circle, diameter a bit smaller than the height of the screen, taking about 8 seconds to make a full circle. When player gets within a quarter screen, switches to ENEMY: Small flicker attack.
Animation: Alternates between the two Small Flicker sprites.
Sprites: Locked to the two Small Flicker sprites.

ENEMY: Small flicker attack
Action: Chases the player as fast as its little wings can flap, which is about half the speed of Ship 1 in reverse. Explodes when it hits, doing an amount of damage equal to its remaining hit points + 5% (i.e. 50 HP = 55% damage). NOTE: The impact damage is actually an effect of the sprite, not the AI, but I am including it here because this AI is locked to that sprite.
Animation: Alternates very rapidly between the two Small Flicker sprites.
Sprites: Locked to the two Small Flicker sprites.

ENEMY: Carrier
Action: Moves in a random direction for a distance between 0 and about 4 graph-paper squares. Motion takes between 1 and 1.5 seconds. Pauses slightly between movements.
Animation: None. Does not rotate.
Sprites: Can use any sprite.

ENEMY: Idle mini bug
Action: Acts like ENEMY: Idle bug except that it switches to ENEMY: Fleeing bug.
Animation: Alternates slowly between sprites N and N+1.
Sprites: Can use any pair of consecutive sprites.

ENEMY: Fleeing bug
Action: Runs away from the player at slightly under the speed of Ship 1 in reverse. If it is running to either side of directly away from yourr line of motion, it will curve further in that direction.
Animation: Alternates very rapidly between sprites N and N+1.
Sprites: Can use any pair of consecutive sprites.

ENV: Mover short
Action: Moves 5 Graph-paper squares, then returns to its starting point. Direction of motion is towards the side that has the size and rotation adjust squares in the editor. Movement takes about 4 seconds total, delay between movements ranges from two to four seconds.
Animation: None. Does not rotate.
Sprites: Can use any sprite.

ENEMY: Fighter Pursuit
Chases the player at a speed slightly slower than Ship 1 in reverse. Switches to ENEMY: Fighter firing when it gets within bullet range (about 1/6 screen) of the player.
Animation: None.
Sprites: Can use any sprite.

ENEMY: Fighter firing
Action: Shoots a spread of three shots, backs up between 1 and 4 graph-paper squares, rotates up to 30° towards the player, moves foraward between 1 and 4 graph-paper squares, fires, and repeats. Tries to get the player directly in front of it at about 3/4 of the maximum range of its gun. Switches to ENEMY: Fighter Pursuit when the player gets out of range of the gun.
WARNING: This AI cannot be used directly. Any sprite that starts with this AI type will revert to the default AI for its sprite type.
Animation: None.
Sprites: Can use any sprite.

ENV: Mover long
Action: Moves 3/4 of a screen, then returns to its starting point. Direction of motion is towards the side that has the size and rotation adjust squares in the editor. Movement takes about 15 seconds total, delay between movements ranges from two to four seconds.
Animation: None. Does not rotate.
Sprites: Can use any sprite.

Boss 1 Wingflutter
Action: None.
Animation: Alternates at screen refresh rate between the two Boss 1 Wing sprites.
Sprites: Locked to the two Boss 1 Wing sprites.

Boss head
Action: None.
Animation: None.
Sprites: Can use any sprite.

Boss 2 Claw
Action: Rotates about 45° counter-clockwise every 2 to 5 seconds, and immediately rotates back. When it rotates, it fires bullets. The first and second shots are five bullets in a single spread shot, and the third shot is eight shots in a spread, fired over the course of about half a second. The sprite stays rotated for about 1 second after the third shot. Repeats. NOTE: Always fires towards the right-hand side of the screen.
Animation: None.
Sprites: Can use any sprite.

Boss 2 Body
Action: Moves in a large squared-off U-shape, with the open end always pointing to the right-hand side of the screen. Starts at the upper-left-hand corner of the motion.
Animation: None. Does not rotate.
Sprites: Can use any sprite.

Boss 1
Action:
Animation:
Sprites: Can use any sprite.

Boss death
Action: Explodes over the course of about 6 seconds.
Animation: Flashes black, red, and orange, while setting off large explosions.
Sprites: Can use any sprite.

Boss 3
Action: Spins constantly clockwise, with about one rotation every 4 seconds. Moves in a random direction for a distance between about 1 and 8 graph-paper squares over the course of about 1.5 seconds. Pauses between movements.
Animation: None.
Sprites: Can use any sprite.

Boss 3 Wall
Action: Spins counter-clockwise at about half the rate of Boss 3. Stays at original distance for about one second, then zips about four graph-paper quares to the right, back eight (four beyond center) to the left, returns to center and fires off three shots. Repeats this sequence about one second later with the addition of a series of four shots fired off about half a second after the three shots. Repeats. NOTE: When assembled with Boss 3, spin is cumulative, and the walls end up spinning at 50% the rate of the core, in the same direction.
Animation: None.
Sprites: Can use any sprite.

Boss 4
Action: Chases the player at about half the speed of Ship 1 in reverse for 4 seconds, then backs up at the same speed for 2 seconds. Repeats.
Animation: None.
Sprites: Can use any sprite.

Boss 5
Action: Aims towards the player and charges for 4 seconds at the usual speed of just under Ship 1 in reverse, stops, turns and flies away for about 2 seconds, and launches two Ice Missiles. Repeats.
Animation: None.
Sprites: Can use any sprite.

Boss 5 shield
Action: Rotates 30° counter-clockwise and immediately back over the course of 3 seconds. Repeats, with no break in the motion.
Animation: None.
Sprites: Can use any sprite.

Boss 4 Cannon
Action: Fires a supermassive bullet every one-half to three seconds. Releases two-three mines with AI Tank Boss Mine every 8-12 seconds (mines have same color as Cannon).
Animation: None. Does not rotate.
Sprites: Can use any sprite.

ENEMY: Seed Pod Waiting
Action: Waits, rotating slowly (1 rotation in 14 seconds), until the player's nose gets to within about five graph-paper squares of the center of its sprite. At that point, it shudders for about a half seconds, vanishes, and lets out a spray of red spikes. The number of spikes released appears to be proportional to the percent of hit points remaining.
Animation: None.
Sprites: Can use any sprite. NOTE: Color is locked to black.

Boss 6 Shield
Action: Rotates 45° counter-clockwise, pauses for between 2 and 3 seconds, rotates back to starting position, pauses for between 2 and 3 seconds. Repeats.
Animation: None.
Sprites: Can use any sprite.

Boss 6 Tangle
Action: Every four to ten seconds, it simultaniously releases a seed pod and a medium bug. The seed pod shoots off straight up (if sprite is at 0 rotation), and the bug just starts wandering around. The seed pod is black and the bug is the same color as the tangle sprite.
Animation: None. Does not rotate.
Sprites: Can use any sprite.

Boss 6 Tentacle
Action: Waves 45° clockwise and returns over the course of about 2 seconds. After 5 and a bit waves, it will expand to about 200% size along the x-axis (if it is at 0 rotation), then retract and start waving again. Repeats.
Animation: None.
Sprites: Can use any sprite.

Boss 7
Action: Moves about 6-10 graph-paper squares in a random direction for about 2 seconds, spinning about three times, stops for about 2 seconds. Repeats
Animation: None.
Sprites: Can use any sprite.

Boss 7 Cap
Action: Waits 3 seconds. Then shoots straight out 8 graph-paper squares and back over the course of about 1.5 seconds.
Animation: None. Does not rotate.
Sprites: Can use any sprite.

ENEMY: Pusher
Action: Spends 3 seconds turning to face the player, than moves forward at about half the speed of Ship 1 in reverse for 2 seconds. Repeats.
Animation: None.
Sprites: Can use any sprite.

ENEMY: Active tripple turret
Action: Basic three-shot-spread turret. There is a two-second delay between each set of shots, during which time the turret can rotate about 60°.
Animation: None.
Sprites: Can use any sprite.

ENEMY: Large flicker attack
Action: Chases the player at the usual speed of slightly slower than Ship 1 in reverse, attempting to ram the player.
Animation: Alternates between the two Large Flicker sprites.
Sprites: Locked to the two Large FLicker sprites.

ENEMY: Tank
Action: Moves forward slowly for 3 seconds, then stops and turns a random amount clockwise. Repeats.
Animation: Alternates between the two Tank sprites.
Sprites: Locked to the two Tank sprites.

ENEMY: Electrode
Action: Rotates 135° clockwise over the course of 3 seconds, then pauses for 1 second with a 1/2 second burst of lightning in the middle. Repeats.
Animation: Spends most of the time in the basic Electrode sprite, with a brief extremely fast alternation through the two Electrode With Lightning sprites when zapping.
Sprites: Locked to the Electrode sprites.

ENEMY: Idle armorbug
Action: Switches to the first Turtle sprite, and wanders around aimlessly and very slowly, until its hitpoints drop below 195, at which point it switches to DEFENCE armorbug. NOTE: The hitpoint trigger is locked to 195, regardless of how many hitpoints the sprite starts with. If it starts below 195, it will constantly be cycling between the two armorbug scripts, even if the player never shoots it.
Animation: Alternates slowly between the two Turtle sprites.
Sprites: Locked to the two turtle sprites.

DEFENCE armorbug
Action: Switches to the Tucked-In-Shell Turtle sprite, and stays motionless and invulnerable for about 7 seconds. At that point, it rotates between 0 and 180° clockwise and switches to ENEMY: Idle armorbug.
Animation: None.
Sprites: Locked to the Tucked-In-Shell Turtle sprite.

ENEMY: SpiderDefault
Action: Wanders aimlessly over a small area for 3 seconds, then jumps in the general direction of the player if they are within range (about a quarter-screen). If the player is not in range, does not jump. Repeats.
Animation: Uses the two basic Spider sprites when wandering around, uses the Spider Jump sprite when jumping. Does not rotate, although linked sprites will flicker out of alignment for one frame just before the Spider jumps.
Sprites: Locked to the Spider sprites. When it jumps, its size and orientation reset to 100% and 0°, although it can have other sizes and orientations before the first jump.

ENEMY: Idle cutie
Action: Sits around, rotating back and forth a bit. Switches to ENEMY: Angry cutie when its hitpoints drop below 299. The hitpoint trigger is locked to 299, regardless of how many hitpoints the sprite starts with. If it starts below 299, it will switch to ENEMY: Angry cutie the instant it comes onscreen.
Animation: Alternates slowly between the two Cutie sprites.
Sprites: Locked to the two Cutie sprites.

ENEMY: Angry cutie
Action: Lunges about 1/3 screen width, over the course of 1 second. Pauses 1 second to adjust its aim. Repeats.
Animation: Switches to the first Angry Cutie sprite when it activates, then alternates between the two Angry Cutie sprites while lunging.
Sprites: Locked to the two Angry Cutie (Dead Fish) sprites.

ENEMY: LittleBlobWaiting
Action: Waits arond, moving a bit, until the player gets within about a quarter-screen-width of them, at which point it starts chasing them at about one-half the speed of Ship 1 in reverse. NOTE: I am not absolutely certain that the chasing behaviour is included in this AI, but there is no other Little Blob AI. Perhaps ENEMY: Attack bug?
Animation: Alternates between the two Little Blob sprites at the screen refresh rate when it is moving.
Sprites: Locked to the two Little Blob sprites.

ENEMY: LittleBlobFindFriends
Action: Heads for the closest other small blob, which it will merge with when the two meet. If there is no other blob within culling distance, reverts to the chasing portion of ENEMY: LittleBlobWaiting.
Animation: Alternates between the two Little Blob sprites at the screen refresh rate.
Sprites: Locked to the two Little Blob sprites.

ENEMY: BigBlob
Action: Moves very slowly towards the player, firing a single bullet straight ahead every 2 seconds.
Animation: Alternates slowly between the two Large Blob sprites.
Sprites: Locked to the two Large Blob sprites.

ENEMY: Tank turret
Action: Turns to face the player with very fast turn rate. Shoots two mini-beam-type shots in a row every 3 seconds.
Animation: None.
Sprites: Can use any sprites.

ENEMY: Mega Mine
Action: Slowly rotates (10-11 seconds per rotation), doing nothing until the player gets within 7 graph-paper squares of the mine. At that point the color flashes between black and yellow for about 3 seconds, after which it explodes. It will also explode if its hitpoints drop below 100 (as in the cases of armorbugs and cuties, this is hard-coded, so don't start a MEGA mine with less than 100 hitpoints).
Animation: None.
Sprites: Can use any sprite.

ENEMY: Skull turret
Action: Rotates to face the player at a very high speed for 3 seconds. Pauses for an instant, then fires a supermassive bullet. Repeats.
Animation: None.
Sprites: Can use any sprite.

  • EnemyShieldRing
    Action: Rotates 60° clockwise over the course of 1 second, pauses for 1 second. Repeats.
    Animation: None.
    Sprites: Can use any sprite.

ENEMY: Mess
Action: Heads in the direction the player was when it started moving for 1 second, stops for a moment, repeats. If the player touches it, they are massively slowed down. NOTE: The slowing is an effect of the sprites, not the AI, but I am including it here because this AI is locked to those sprites.
Animation: Switches very rapidly among the three Mess sprites.
Sprites: Locked to the three Mess sprites. The first time it pauses, it sets its color to black. Also, it sets the solid type to Pickup.

ENEMY: Guardian pursuit
Action: Chases the player until it gets close, then switches to ENEMY: Guardian Attack.
Animation: None.
Sprites: Can use any sprite.

ENEMY: Guardian Attack
Action: Fires a supermassive bullet, turns 180°clockwise, switches to ENEMY: Guardian Retreat.
Animation: None.
Sprites: Can use any sprite.

ENEMY: Guardian Retreat
Action: Fires three small bullets in a spread behind it, and runs away from the player. Then switches to ENEMY: Guardian pursuit.
Animation: None.
Sprites: Can use any sprite.

BOSS: Preboss 1
Action: Chases after the player at a speed nearly as fast as Ship 1. Fires a narrow spread of mini-beam-type bullets every 5 seconds.
Animation: None.
Sprites: Can use any sprite.

BOSS: Preboss 1 escaping
Action: Runs in a kind of snaking evasive pattern for about 4 seconds, then pauses to rotate for about 1 second. Repeats.
Animation: None.
Sprites: Can use any sprite.

Fade away
Action: None.
Animation: Fades out over the course of a couple seconds as soon as it comes into culling distance.
Sprites: Can use any sprite.

Tank boss mines
Action: Sits in one place, slowly rotating, until the player gets too close. Rotation takes 10 seconds. Explodes when nose of ship gets within about 3.5 graph-paper squares of the center of the mine. Vanishes after about 22 seconds.
Animation: None.
Sprites: Can use any sprite.

This post has been edited by Edwards : 10 June 2007 - 08:44 PM

Just a clarifying note on the Sequential Sprites part. (This cropped up in a bug report to the beta list, but isn't really a bug, and is easily misunderstood).

You must select the first sprite of the pair when using a sequential sprites script. (ie, in the sprite list there is miniBug1, miniBug2, othersprite1, othersprite2, etc.) If you select miniBug2 as the default sprite for a sprite with the Idle Bug script set, it will alternate between miniBug2 and othersprite1 instead of switching between miniBug1 and miniBug2. So it's important to ALWAYS pick the first of a set of sprites when using a corresponding script, or else it's going to look mighty funny.

As promised, here is a guide to the special attributes of those sprites in the game that have nonstandard actions/effects in the game. I have divided this guide into five sections:
Section 1: A couple of undocumented sets of values that can be given to a sprite that control how it interacts with the player.
Section 2: The text sprite. This object has a few interesting quirks, but doesn't really fit in with the rest of the sprites in this guide.
Section 3: The main list of sprites with special attributes. Each entry starts with the name of the sprite, its ID number in parentheses, and a solid type (or two), which is the only solid type for which that sprite has the listed effect.
Section 4: A list of the powerup sprites, for the aid of anyone producing a graphical conversion.
Section 5: A list of the sprites used for the player's weapons, for the aid of anyone producing a graphical conversion.

As of right now, the guide is probably not entirely complete, as I have not tested every possible combination of sprites, solid types, and so forth, but I suspect that it contains most of the sprites with special attributes. If you have any questions, or know of any sprites I have missed, please post or PM me.

Changelog:
Jan 19 2007: Typo fixes, added some formerly-omitted information to the shield/missile recharges.
Jan 21 2007: Added the Player Ship sprites. Also added information about automatic marker-box creation for some pickups.
Jan 24 2007: Added note about solid-type sprites hitting sprites with an Extra2 of 6 (thank you, cheleball); added Ice Missiles to the Small Flicker section.
Jan 26 2007: Added text object, modified pickup marker information in Section 4.
Jan 27 2006: Added entry for "Explode Box".
Jan 31 2006: Added entry for "Boss 7 Pen Cap".
Mar 8 2007: Added Lava 1 to the Snow entry, general updates for 1.0.1
Jun 10 2007: Added note about BigBlob number cap in 1.0.1

Edwards

-------------------- Global Useful Sprite Attributes --------------------
Any sprite with Solid Type 1 (Solid) and Extra1 = -1:
The collision box for this sprite is polarized for player impacts- if the player hits any side other than that which is on the right when the sprite is in its default orientation, they will be dragged towards the right side. No other impacts are affected. This is usually noticed only on the Wall sprites, because they are the ones that default to having an Extra1 of -1, but it is true for all sprites.
Note that it is partially possible to negate this effect by giving the sprite an Extra1 of 0, as that will still make it invulnerable, but it will also prevent Super Pellets from bouncing off of it.

Any sprite with Solid Type 3 (Enemy) or 2 (Player) and Extra2 = 6:
If a sprite of the correct type (see below) hits this sprite, the impactor will take damage equal to this sprite's Extra1 (negative damage is not possible, unfortunately), and this sprite will vanish. This is used for the various enemy bullets in the game, but can apply to any sprite.
If this sprite's type is Enemy, it will do damage to the player and any Solid-type sprites it hits, and will not interact at all with the other solid types. Ordinary Player-type sprites are unaffected. Note that for large sprites, such as wall, the collision detection is a bit iffy, and the player usually needs to hit the center of the sprite to get damaged. This is not always the case, however.
If this sprite's type is Player, it will do damage to any Enemy- and Solid-type sprites it hits, and will not interact at all with any other solid types.
Also of note if the type is Enemy: All weapons except Pellets, Super Pellets, and Homing will pass through the sprite. The listed weapons will impact the sprite, but not do any damage. This is probably a bug, however, so I don't recommend relying on it for anything.

Any sprite with an Extra2 value greater than 1000:
In 1.0.1, any sprite with an Extra2 value greater than 1000 (not including 1000) that was destroyed before the player saved their game in a custom level will effectively not be regenerated when the level reloads from that saved game. They actually will appear, but they will be given the "Fade away" AI (or Door Open for doors), and it will not be possible to interact with them.

-------------------- The Text Sprite --------------------
This is a somewhat strange entity. The only solid type it can have when placed in the editor is 0 (Not Solid)- any attempt to change its solid type will turn it into Sprite 1. A text sprite can use any AI, although its sprite will never change, even if the AI is otherwise locked to a particular set of sprites. Also note that because text sprites can only be Not Solid, any AI that targets the player, or detects their presence before switching to another script will be unable to do so, as only Enemy-type sprites can detect the player (this can make for a nice marquee effect if you use the the Attack Bug AI).

Other than that, it works as described in the editor manual. The text it displays is the same as its name, and the font it uses is based on its Extra1, as follows.
-1 and down: Non-existent. Setting the sprite to have this Extra1 will auto-size the width to 0, which cannot be selected, so avoid doing this.
0: Block letters.
1: Thin handwriting.
2: Thick handwriting (thicker lines than above, otherwise the same).
3 to 9: Double-spaced block letters.
10: Same as -1.
11 and up: Same as 0. I recommend against using these last two types, as it looks like they probably only exist by accident, and may not exist in future versions of the game, and they are simply duplicate methods of documented features. You probably shouldn't use the 3-to-9 value either, as it is also undocumented, but if you find a good use for it, go ahead and use it.
Note that changing the Extra1 will auto-size the sprite's width to whatever is appropriate for the new font, and that the text size is based entirely on the sprite's height. Note also that the actual sprite width is almost entirely useless- the entire text will be displayed no matter how wide or narrow the sprite officially is, and the location at which the sprite is culled is based on the location of the center of the text, not the location of the sprite bounding box. The only use for the width is the area that you can click in to select the text in the editor.

-------------------- Sprites With Special Attributes --------------------
Player Ship 1, 2, 3 (27, 159, 160)
Pickup: DO NOT DO THIS. In 1.0.1, if the player impacts a sprite like this, the game will instantly crash.
In 1.0.0, things are more interesting: If the player contacts a pickup-type Player Ship, their ship will vanish, and have no sprite or collision box (although if the shields were active when they hit the pickup, those will remain visible forever). They will also be unable to move in any direction, although they can still rotate and fire. Furthermore, be especially certain not to set the Game Start sprite to type Pickup if it is one of these sprites, as the Game Start sprite is not destroyed when the level starts- it merely becomes invisible, while remaining capable of interacting with anything in the level. I am quite certain that the behaviour of these sprites is a bug, but I'm not certain that there's any point in fixing it, and there just might be some use in locking the player immobile in one location, especially if I can work out a way of setting up a "defend an object" goal.
Also of note is that these sprites are used by the game as the sprites for the three types of player ship.

Explode Box (55)
Solid and Enemy: When destroyed, these blocks explode in a spray of DangerShrapnel sprites (179), doing damage to the player and any nearby Solid or Enemy sprites.

Normal door, Super door 1, 2, 3 (58, 59, 60, 61)
Any type: If it has the same name as a Switch sprite (capitalization counts), it will vanish when that switch is deactivated.

Switch, Switch half (62, 63)
Solid, Enemy: When shot by the correct color of weapon, as defined by the Extra1 value, the switch sprite will turn black and unscripted, any door sprites and triggers with the same name (capitalization counts) will vanish, and non-door sprites with the same name will turn black and intangible, unless they are of Solid Type 1 (Solid), in which case they will turn black, stay solid, and become indestructible.
Note that although the manual claims that Extra2 links work with switches, I have been unable to get them to work, and although it implies that all sprites with the same name as the switch will become intangible, Solid sprites have remained stubbornly solid for me. I suspect that both of these are bugs.

Snow, Lava 1 (76, 95)
Pickup: Does about 50 damage per second to the player when they are within the bounds of the sprite, if they are in the first ship. Each damage point is accompanied by a small red explosion.

Save-Ring (162)
Pickup: When the player contacts this sprite, it fully heals them and vanishes. Only reappears if it is using the "Save-zone Ring" AI. In 1.0.1 and later, it also creates a temporary save file when the player enters it, and displays a "you have been healed and your game saved" dialog. Nothing special needs to be done to activate this behavior, but note that the save ring will only reappear after use if it has the "ENV: Save-zone Ring" AI.

Action Trigger (164)
Pickup: Numerous special functions, depending on the name. Most are listed in the manual.
WARNING: In 1.0.1, Force Field sprites are extremely processor-intensive, and having more than a few on-screen at a time can bring the game's framerate to unplayably low levels.

Boss 1 Wing 1, 2, Boss 6 tentacle 1, 2 (201, 202, 221, 222)
Solid: Collisions seem to push the player towards the top of the sprite when it is in its default orientation, in addition to bouncing them away.

Enemy ice-missile, Enemy small flier, Boss 1 small flier, Boss 5 ice-missile, Enemy small flier(2) (193, 196, 206, 215, 252)
Enemy: Impacting this sprite will do damage to the player equal to Extra1 + 5. Negative damage is possible, although any boost to the player's shields beyond their current maximum will be removed when the player touches any Pickup type sprite. Until they do so, however, whatever boost they got from the sprite will stand, no matter how large (until you overflow the internal shield variable, which happens at 2^31, at which point the player will explode).

Boss 7 Pen Cap (228)
Solid, Enemy: Acts like the "wall-type" sprite, by dragging the player towards the right-hand side, no matter what stats it has.

Enemy Electrodes Zap 1, 2, 3 (274, 275, 276)
Enemy: Impacting these sprites does 25 damage to the player, rather than 5.

Enemy BigBlob2 (265)
Enemy: When destroyed, creates 4 Small Blob sprites. This attribute appears to be contagious, in that a critter that cycles through this sprite will turn into four blobs when destroyed. (I suspect this because the other Large Blob sprite does not have this attribute). Unfortunately, if the critter merely starts with this sprite, and the rest of the time cycles through other sprites, the attribute will not spread.
NOTE: As of 1.0.1, if there are 14 or more large blobs on-screen, destroying one will only result in two small blobs.

Enemy LilBlob1, 2 (266, 267)
Enemy: If an Enemy LilBlob1 and and Enemy LilBlob2 collide, and both have scripts other than "(Not Scripted)", then they will merge to form an Enemy BigBlob1, with a slight explosion of lava bubbles and red sparks.

Mess1, 2, 3 (289, 290, 291)
Pickup: When the player flies into the sprite's collision box, they will be slowed down to roughly half-speed (exact value unknown, could be slower).

-------------------- Powerup Sprites --------------------
The following is a list of the powerup sprites used by the game, for the aid of anyone developing a total conversion.

If one of these sprites, except for the small missile and shield recharges, has an Extra2 value greater than 1000 (and, in 1.0.0, less than 3626), no child sprites, and is of type Pickup*, then the game will automatically give it a Marker Rectangle (141) as a child sprite at its location. Note that in 1.0.1, if one of these sprites does not have an Extra2 value in this range, the game will automatically assign one to it when the level loads, replacing any previously-existing Extra2 value, so these pickups will always have marker rectangles unless they are manually given child sprites.

*There are four exceptions to the Type=Pickup rule in both 1.0.0 and 1.0.1: the Super weapon pickups, which can have marker rectangles regardless of their solid type.

Note for 1.0.0: Extra2s 3626 through 3999 appear to be reserved for internal use- any Pickup-type sprites with this Extra2 will not appear in-game. This is not the case in 1.0.1, however, so I recommend that you not worry about it.

Ship upgrade II (125)
Pickup: Sets the player's ship to Ship 2 when picked up.

Ship upgrade III (126)
Pickup: Sets the player's ship to Ship 3 when picked up.

Shield upgrade 1 (127)
Pickup: Sets the player's maximum shield points to 200 when picked up.

Shield upgrade 2 (128)
Pickup: Sets the player's maximum shield points to 300 when picked up.

Missile upgrade (129)
Pickup: Increases the player's maximum missile capacity by 5, and adds 5 missiles (100 and 100 on MP).

Gun Yellow (130)
Pickup: Allows the player to use the Yellow color of weapons.

Sprite ID 131: Gun Red (131)
Pickup: Allows the player to use the Red color of weapons.

Sprite ID 132: Gun Blue (132)
Pickup: Allows the player to use the Blue color of weapons.

Gun Green (133)
Pickup: Allows the player to use the Green color of weapons.

Gun Pellets (134)
Pickup: Allows the player to use the Pellets weapon.

Gun Beam (135)
Pickup: Allows the player to use the Beam weapon.

Gun Wave (136)
Pickup: Allows the player to use the Wave weapon.

Gun Homing (137)
Pickup: Allows the player to use the Homing weapon.

Shield Pickup (small) (157)
Pickup: Replenishes the player's shields by 25% when picked up (50% on MP), if it has an Extra1 greater than 0.

Missile Pickup (158)
Pickup: Replenishes the player's missile stock by one when picked up, if it has an Extra1 greater than 0.

Star (176)
Pickup: Increments the Star counter by one when picked up.

Gun Super Pellets (277)
Pickup: Allows the player to use the Super Pellets weapon. Note: Marker rectangle will appear regardless of solid type in 1.0.1.

Gun Super Beam (278)
Pickup: Allows the player to use the Super Beam weapon. Note: Marker rectangle will appear regardless of solid type in 1.0.1.

Gun Super Wave (279)
Pickup: Allows the player to use the Super Wave weapon. Note: Marker rectangle will appear regardless of solid type in 1.0.1.

Gun Super Homing (280)
Pickup: Allows the player to use the Super Homing weapon. Note: Marker rectangle will appear regardless of solid type in 1.0.1.

Shield Pickup (big) (284)
Pickup: Recharges the player's shields by 100 when picked up, if it has an Extra1 greater than 0.

-------------------- Player Weapon Sprites --------------------
The following is a list of the player-weapon sprites used by the game. Each of them (except the Beam), if set to Solid type 2 (Player), will do damage equal to its Extra1 to the first enemy that hits it, at which point it will vanish (except for the Wave and Wave Super, which won't vanish).

Bullet1 (29)
Used by the game as the Pellet projectile.

Missile (142)
Used by game as the Missile projectile.

Homing Bullet (143)
Used by game as the Homing projectile.

Wave (144)
Used by game as the Homing projectile.

Beam (145)
Used by game as the Beam and Super Beam projectile.

BeamFireEffect (163)
Used by the game as a glow around the nose of the player's ship. Yes, when placed in a level, it has the attributes listed at the beginning of this weapon list.

Wave Super (281)
Used by game as the Super Wave projectile.

Super Pellet (282)
Used by game as the Super Pellet projectile.

Super Homing (283)
Used by game as the Super Homing projectile.

This post has been edited by Edwards : 10 June 2007 - 08:49 PM

Quote

Any sprite with Solid Type 3 (Enemy) or 2 (Player) and Extra2 = 6:
Impacting this sprite will do damage to the impactor equal to the sprite's Extra1 (negative damage is not possible, unfortunately), and the sprite will vanish. This is used for the various enemy bullets in the game, but can apply to any sprite. Important Note: The player apparently must impact the center of the sprite for this effect to occur, but enemies merely need to touch the collision box.

A note on this one - if you use it, make sure that the sprite's collision box is not touching the collision box of any solid objects, or it will take damage and "die" before the player even reaches it.

I have a few things. First, Marker Rectangle which is created around a pickup when it has a suitable Extra2 looks like to be merely a child of the pickup; and if the pickup has any child, then even with a suitable Extra2 no Marker Rectangle will be put around, meaning you have to add your own. Also, you might wish to document the special workings of the "text" sprite.

@ZP and cheleball: Thank you both. I've fixed the omissions you pointed out, and added a section for the text sprite.
@ZP: Did I miss anything major in the "text" section?

Finally, I noted an interesting effect of setting a sprite's solid type to something other than Enemy if it has an enemy AI, namely that the AI will be unable to locate the player, and added that to the AI guide.

Edwards

Quote

@ZP: Did I miss anything major in the "text" section?

I know you weren't talking to me, but:

Quote

Note also that the actual sprite width is entirely useless- the entire text will be displayed no matter how wide or narrow the sprite officially is, and the location at which the sprite is culled is based on the location of the center of the text, not the location of the sprite bounding box.

Not 100% true. The width is used for click detection in the editor, so I like to set it at about the same size as the text runs so it's easier to click. Also, sprites are culled based on their center of rotation, and the text sprite's is at the beginning (makes sense, since the width is not generally considered).

@edwards, on Jan 27 2007, 09:00 AM, said in The (in)Complete Guides to AI Types and Sprites:

@ZP: Did I miss anything major in the "text" section?

As far as I know, no.

And yeah, this "effect" that sprites that are not enemies cannot find the player (preventing, for instance, a non-solid turret) is a bit annoying, and should be known.

Quote

And yeah, this "effect" that sprites that are not enemies cannot find the player (preventing, for instance, a non-solid turret) is a bit annoying, and should be known.

On the plus side, it may just enable a fixed (non-aiming) turret. I've been wondering if there was a way to do that.

Great job, Edwards. Totally worth being pined!

It seems that the exploding box will happily take damage from any color, regardless of its extra2 value. I'd love confirmation or denial of this. 🙂

@cheleball, on Feb 19 2007, 10:39 PM, said in The (in)Complete Guides to AI Types and Sprites:

It seems that the exploding box will happily take damage from any color, regardless of its extra2 value. I'd love confirmation or denial of this. 🙂

I can deny it. Exploding Box, Extra1=2, Extra2=1, blue shots and missiles have no effect.

Edwards

Next, we have a slightly more interesting guide: The undocumented features that I have encountered in SketchFighter. These are generally features that are used in the main scenario, and work (partially) in custom levels, but are not touched on at all in the game's documentation. Be warned that, being undocumented, these features may very well change dramatically in future versions. In fact, the multiple bosses feature went through some massive changes between 1.0.0 and 1.0.1, so anything you make based on this guide will likely not work properly in 1.0.0.

As usual, please post with questions, comments, and suggestions for other things I should look into (with the exception of multiple-file maps- trust me, that one doesn't work in custom maps).

(EDIT May 12th, 2007) Added note that the Preboss1 battle does not work in version 1.0.1. Also added note that the racing minigames have been disabled in 1.0.1.
Unfortunately, I suspect that this guide will get shorter, rather than longer, as time goes on.
(EDIT August 28th, 2007) Added note to Racing Minigames section indicating that they can still be used if you are making a total conversion.

Edwards

The (in)Complete Guide to Undocumented Features
Consisting of Short Pieces
Related to the various Undocumented Features
that I have Encountered

Multiple Bosses
(Tested and rewritten for 1.0.2)
The game does have some support for multiple bosses, but it is not easy to set up.

When the play enters a trigger named Boss Start, that trigger is deactivated (but not deleted), and the game looks for the last-placed sprite with the name of "Boss" within clipping distance. If no such sprites are found within clipping distance, then the entire level is scanned for the last-placed Boss sprite. If no Boss is found, then the process is repeated for "Boss2".
Once the game finds a sprite with one of those two names, it will create a boss health meter linked to that sprite, and search for the last-placed sprites with the names of "Boss Door 1", "Boss Door 2", "Boss Door 3", and "Boss Door 4" that are within clipping distance. If one of these sprites does not exist within clipping distance, then the rest of the level is scanned for that sprite. These four Boss Door sprites (the first one it finds with each name) will be moved to a visible layer and made solid (note that they need not be "doors"- the Ice Caves boss has a normal-looking wall as one of its doors). If no Boss or Boss2 is found in the level, nothing will happen.

After the Boss health meter and doors have been activated, if the player kills a sprite ( any sprite) named "Boss", "Boss1", "Boss2", "Boss3", "Boss4", "Boss5", "Boss6", or "Boss7", that sprite will start the "Boss Death" animation, and the Boss Health Meter will vanish. Some Boss Doors will also vanish, but this is a bit trickier. It appears that the game will go through all the Boss Door Xs in the clipping area/level in the same order as before, and select one of each name to deactivate, using the same criteria. This selection process is not affected the slightest bit by which doors were previously activated*. So, if you activate a Boss Door 1 at one end of a boss arena, but kill the boss while that door is out of the clipping area and a different, unactivated Boss Door 1 is in the clipping area, the unactivated door will be deactivated, but the previously-activated door will remain fully solid, possibly trapping the player. Deactivation simply consists of moving the door sprite to layer ten and making it intangible- it will not be deleted outright.

Once one boss fight is over, another can start, using the same rules. It is possible to have multiple bosses with the same name, which will be activated in the order described above. The same selection order will be used for multiple Boss Doors with the same name. Due to the new complexity of which Bosses and Boss Doors are used, I strongly recommend not using multiple Boss/Boss Door sprites with the same name in a single level. Remember that you also have two Mini Bosses that you can use in a level (Mini Boss and Mini Boss 2, with Mini Boss Doors 1, 2, 3, and 4), which gives up to four full Boss Door setups with bosses that drop shields and such. You can also use Boss1 and Boss3 through Boss7 to provide pickup drops when they die, although you will need to use one of the "fake" boss door setups with these.

*I think that this selection of which Boss Doors to deactivate is not a fundamental change from earlier versions, but the shift to a "within clipping distance" bias has turned it into a potential bug by allowing the case that the selected doors for deactivation are not the same as the selected dors for activation.

WARNING: "Boss" and "Boss1" are not equivalent names. "Boss" is the one that can be connected to a health meter. Do not confuse the two.
WARNING: Because Boss Start triggers are reactivated after saving, it is possible to trap the player in a previously-cleared Boss arena. I recommend giving Boss Start triggers an Extra2 link to the Bosses they are used for, so that they will be permanently deleted when the Boss is killed.
WARNING: The Boss Door activation/deactivation process is a royal pain in the body-part-of-your-choice. I very strongly recommend that you do not use more than one each of Boss Door 1, 2, 3 and 4 in your level, regardless of how many Bosses you have.
WARNING: If the player enters an active Boss Start trigger during the death sequence of a Boss, the game will almost certainly crash when the Boss finishes exploding. (There is an exception if the health meter gets linked to a different Boss due to the selection rules outlined above, but this is a rare case.)
WARNING: The first time that a Boss fight ends due to the Boss associated with the health meter dying, the last-placed Boss Start trigger within clipping distance is removed from the map, even if it was not the one that triggered the fight. I think.
WARNING: In 1.0.1 and 1.0.2, saving the game and restarting reactivates all Boss Start triggers, except for those that have been deleted by Extra2 links and the first boss fight (see above).

The Last Boss Script Sequence
ONLY PARTIALLY FUNCTIONAL IN 1.0.1 AND 1.0.2
(The following paragraph is only valid for version 1.0.0)
When the player enters a trigger named "Preboss Start", the last-placed sprite named "Preboss Start marker" will vanish. Then, the last-placed sprite named "Preboss1" will appear, with the Pen scribbling on top of it, followed by all sprites named "Preboss1Decoy". Preboss1's Solid Type will get set to enemy, and it's AI will get set to Preboss 1 Escaping. The Preboss1Decoys will get set to a Solid Type of Not Solid with the Preboss 1 AI. A Boss Health Meter will be created, linked to the Preboss1 that was activated.
(The remainder of this description is valid for all verisons through 1.0.2)

As soon as any sprite named Preboss1 is destroyed (it need not be the one that was activated), regardless of whether the Preboss Start trigger was ever activated, all sprites named Preboss1Decoy will switch to the Fade Away AI. Shortly thereafter, the Pen will appear drawing sprites randomly chosen from the following list:
Box1 (51), Enemy Small Flier (196), Enemy Big Flier (197), Enemy large small flier (241), EnemyCutie1 (260), EnemyBigBlob1 (264), Enemy MEGA mine (285)
This drawing will occur in ten waves, with the following numbers of sprites drawn in each wave: 1, 2, 2, 3, 3, 4, 5, 5, 6, 2
The time between each wave drops quickly, with approximately the following times (in seconds) between each pair of waves (starting with the gap between waves one and two): 4, 4, 3, 3, 3, 2, 1, 1, 5
The tenth wave always consists of two Messes, and as soon as they have been drawn, the last-placed sprites named LastBoss, LastBoss.lid, and Lastboss.body will be moved into a visible layer and made solid. LastBoss will be given the Boss 7 AI, and linked to a Boss Health Meter, and LastBoss.lid will be given the Boss 7 Cap AI.

WARNING: There is some very strange bug in the scripting for the Drawing Pen in the final battle (at least in 1.0.0), in that when I quit my test level after killing Preboss1, and restarted, the pen picked up drawing where it had left off, even though the level had been reset. After a couple of leave/restarts of the level, the pen seemed to get stuck in an infinite loop of drawing Messes. Fortunately, everything went back to normal after I completely quit and reloaded the game. For this reason, I very strongly recommend against attempting to do anything more unusual with LastBoss than allowing Preboss1 to be killed without using a Preboss Start trigger (do note that this "unusual" setup is required as of 1.0.1).

The Racing Minigames
THESE DO NOT WORK IN CUSTOM LEVELS IN VERSION 1.0.1 AND LATER
The Racetrack Race

Notes: All of these sprites must be of type Pickup. They will vanish when you enter them, so the mini-game can only be attempted once.

Sprites:

Race Start : When you pick up this sprite, 40-second race timer will be started.
Race Info : Optional. When you pick up this sprite, the "welcome to the race" message will appear.
Race Finish : Reach it again before time is up (or if you never entered Race Start), and the sprite named "Race Door" that was placed in the level last will be removed. Reach it after 40 seconds, and it will display the "too slow, exit and re-enter to retry" message.

The Forest Race

Notes: ForestRace must be a trigger of type pickup, but ForestRaceStart and ForestRaceEnd can be any sprite, with a solid type of either Not Solid or Player, not Pickup. If the type of one of these latter sprites is pickup, it will vanish when the player flies into it (see warnings).

Sprites:

ForestRace: Enter this trigger, and you will be shown the "race start" message and teleported to ForestRaceStart. Reach it again before time is up, and the game will show the "race won" message, and the sprite named "Race Door" that was placed in the level last will be removed, as will ForestRace (ForestRace is not removed by entering it unless that entry wins the race). Reach this sprite after 25 seconds, and the game will display the "race failed" message, and teleport the player to ForestRaceEnd.
Note that it is theoretically possible to take advantage of the "one Race Door at a time" effect, and the removal of pickup-type ForestRaceStarts, to make a set of multiple races that must all be completed, but I recommend against trying this, as set-up is very difficult.
ForestRaceStart: This is where you are teleported to when the race starts.
ForestRaceEnd: This is where you are teleported to if you reach ForestRace after time is up.

The Warnings
WARNING: The racing minigames no longer work in custom levels as of SketchFighter version 1.0.1. This information is only provided as an aid to anyone attempting to create a total conversion, and as an historical note regarding what was formerly possible in custom levels.
WARNING: When a race starts, it activates the race counter, which counts up. This is the same timer that is used for custom level timing, so by starting a race, the custom level timer will start counting up, regardless of whether the level has a timer. When the race ends, the custom level timer will revert to its normal behaviour, and start counting down, starting at whatever time it had when you finished the racing minigame. When it reaches zero, the level will end (once again, this is regardless of whether the custom level has a time limit). Note that this could be used if you want a post-race time limit for something- say, a boss that takes a while to kill. The level then becomes a balance between speed through the race, and having enough time to actually win.
WARNING: If there is no ForestRaceStart sprite, entering the ForestRace trigger will start an infinite loop, where the "start race" message will appear, then re-appear every time you dismiss it, until you finally get leave the other side of the trigger during the microseconds of motion you get between displays of the message. This is NOT FUN.
WARNING: If you complete the Forest race in less than 3 seconds, you will get the Race Start message again and be sent back to ForestRaceStart.
WARNING: The Racetrack race can only be flown once per playing of a custom level.

This post has been edited by Edwards : 28 August 2007 - 05:57 PM