Difference between revisions of "OpenBORManual"

From DCEmulation
Jump to navigation Jump to search
(HUD location)
(Offense & Defense)
 
(274 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
OpenBoR Guide
 
OpenBoR Guide
by Fugue & Bloodbane
+
by Fugue & Bloodbane. Updated by O Ilusionista.
 
 
-Last update on 2-4-2009-
 
  
 +
'''Last update on 2019.09.01 - by O Ilusionista'''
 +
*~ Added more info about DUCK
 +
*~ Added DUCKING, DUCKRISE, EDGE, BACKEDGE, LOSE, VICTORY
  
 
=General Info=
 
=General Info=
Line 9: Line 10:
 
==Beats of Rage==
 
==Beats of Rage==
  
*Beats of Rage is a semi 3D beat 'em up game made by Senile Team. It is inspired by Streets of Rage series, popular and great semi 3D beat 'em up games by SEGA for Genesis console. However this game uses King of Fighters (a 2D 1vs1 game) sprites as its sprites for heroes and enemies.
+
*Beats of Rage is a semi 3D beat 'em up game made by Senile Team. It is inspired by Streets of Rage series, popular and great semi 3D beat 'em up games by SEGA for Genesis console. However this game uses King of Fighters (a 2D 1vs1 game) sprites as its sprites for heroes and enemies.  
 
*As a beat 'em up game, this game has features like combo which performed by tapping attack button after it hits enemy, jump and jumpattacks, SoR2 (Streets of Rage 2) style special, Capcom style grabattacks and SoR2 style throw. There are various enemies in this game, some of them can perform upper attack to hit jumping heroes, some of them can break free from grabs, some of them can grab or throw heroes etc. SoR2 style bikers can also be found here. Of course items like foods and 1Up are also available here.
 
*As a beat 'em up game, this game has features like combo which performed by tapping attack button after it hits enemy, jump and jumpattacks, SoR2 (Streets of Rage 2) style special, Capcom style grabattacks and SoR2 style throw. There are various enemies in this game, some of them can perform upper attack to hit jumping heroes, some of them can break free from grabs, some of them can grab or throw heroes etc. SoR2 style bikers can also be found here. Of course items like foods and 1Up are also available here.
 
*This great game is also moddable which allows players or modders to modify a mod or even make mods. The method of modding is quite simple cause it's basicly about providing pictures, sprites, wavs and animated gifs and converting them for use in BoR and also setting them with powerful text files (so to speak) for making heroes, enemies, levels etc. In fact, Beats of Rage is actually comprised of Pak and engine (BoR.exe). We could say that Pak is the body while engine is the soul. That's also the reason why mods are usually only in the form of Pak without the engine.
 
*This great game is also moddable which allows players or modders to modify a mod or even make mods. The method of modding is quite simple cause it's basicly about providing pictures, sprites, wavs and animated gifs and converting them for use in BoR and also setting them with powerful text files (so to speak) for making heroes, enemies, levels etc. In fact, Beats of Rage is actually comprised of Pak and engine (BoR.exe). We could say that Pak is the body while engine is the soul. That's also the reason why mods are usually only in the form of Pak without the engine.
 
*Pak isn't editable (in normal way) that's why before modding, modders need to unpak a mod 1st. After modding is finished, the mod can be packed to be played. Actually it's possible to play a mod without packing but it's best to pak it to make it neat. This great game attracted many players which formed BoR community.
 
*Pak isn't editable (in normal way) that's why before modding, modders need to unpak a mod 1st. After modding is finished, the mod can be packed to be played. Actually it's possible to play a mod without packing but it's best to pak it to make it neat. This great game attracted many players which formed BoR community.
 
*Even though modding is that simple, BoR have many features which have their own usage and their own place (or text to be exact) to declare. This manual is for explaining those features and where they can be declared.
 
*Even though modding is that simple, BoR have many features which have their own usage and their own place (or text to be exact) to declare. This manual is for explaining those features and where they can be declared.
*Due to lack of required features from BoR (Beats of Rage) and many requests, some coders stepped in to improve BoR, coded those missing features and fulfilled some requests. There were some BoR variations because of that e.g OpenBoR, DarkBoR and HOR. OpenBoR is the most advanced one and this manual includes OpenBoR features. Actually latest OpenBor support scripts but it's not included here.
+
*Due to lack of required features from BoR (Beats of Rage) and many requests, some coders stepped in to improve BoR, coded those missing features and fulfilled some requests. There were some BoR variations because of that e.g OpenBoR, DarkBoR and HOR. OpenBoR is the most advanced one and this manual includes OpenBoR features. Actually latest OpenBor support scripts but it's not included here.
  
 
----
 
----
Line 21: Line 22:
  
  
*Before you can start modding, you need the ingredients. Most of ingredients are sprites and texts. Due to many required files and complexity of them, it's highly recommended to start modding by editing available mod or pak instead of creating the ingredients one by one. Another way is by DL-ing BoREdit pack from http://www.senileteam.com/ and expand it. The pack contains enough basic ingredients to start a mod.
+
*Before you can start modding, you need the ingredients. Most of ingredients are sprites and texts. Due to many required files and complexity of them, it's highly recommended to start modding by editing available mod or pak instead of creating the ingredients one by one. Another way is by DL-ing BoREdit pack from  
 +
http://www.senileteam.com/and expand it. The pack contains enough basic ingredients to start a mod.
  
  
  
 
==Extracting an existing PAK File:==
 
==Extracting an existing PAK File:==
 +
 
*~You'll need a program called PAXPLODE.exe. which can be DL-ed from http://www.lavalit.com/. You need to register there 1st before you can DL anything though.
 
*~You'll need a program called PAXPLODE.exe. which can be DL-ed from http://www.lavalit.com/. You need to register there 1st before you can DL anything though.
 
*~Put this program in same folder with .pak that you want to 'explode'.
 
*~Put this program in same folder with .pak that you want to 'explode'.
Line 35: Line 38:
  
 
*Inside DATA folder, there should be various folders whose name are: BGS, CHARS, LEVELS, MUSIC, SCENES, SOUNDS and SPRITES. Aside from those, there should be text files i.e models.txt, levels.txt, lifebar.txt and video.txt and pal.act. Each text files have their own explanation which will be explained in their own section below.
 
*Inside DATA folder, there should be various folders whose name are: BGS, CHARS, LEVELS, MUSIC, SCENES, SOUNDS and SPRITES. Aside from those, there should be text files i.e models.txt, levels.txt, lifebar.txt and video.txt and pal.act. Each text files have their own explanation which will be explained in their own section below.
*Pal.act is global palette. For your information, every sprite in mod must use same palette which is this global palette. You need Adobe Photoshop to view and make .act files.
+
 
 
*About the folders, each contains files and texts related to folder name. So BGS contains background pictures and palettes, CHARS contains character's sprites and texts etc.
 
*About the folders, each contains files and texts related to folder name. So BGS contains background pictures and palettes, CHARS contains character's sprites and texts etc.
*NOTE: Some folders aren't mandatory meaning you can put all of their files in same folder (still within DATA folder that is) and it would still work (provided the paths are correct). However it's recommended to use different folders like above to make modding easier. You can add another folders if you need to, just make sure the paths are correct.
+
*NOTE: Some folders aren't mandatory meaning you can put all of their files in same folder (still within DATA folder that is) and it would still work (provided the paths are correct). However it's recommended to use different folders like above to make modding easier. You can add another folders if you need to, just make sure the paths are correct. By the way, you can play this paxploded mod! Yes you can!
  
 +
*NOTE 2: Pal.act is global palette, but its not needed anymore (since its encouraged to use 16bit video mode). In the old BOR (or if you use 8bit color mode), this is required - because every sprite in mod must use same palette which is this global palette. You need Adobe Photoshop to view and make .act files.
  
==Playing a paxploded PAK:==
+
==Playing paxploded PAK:==
 
*~Put bor.exe in same folder as DATA folder (if you are still using old BoR engine).
 
*~Put bor.exe in same folder as DATA folder (if you are still using old BoR engine).
 
*~If you are using OpenBoR, put OpenBoR.exe, every .dll and other folders like LOGS, MENU, PAKS, SAVES and SCREENSHOTS which come with it in same folder as DATA folder. Don't forget to put empty .pak in PAKS folder. You can get empty .pak from BoREdit pack.
 
*~If you are using OpenBoR, put OpenBoR.exe, every .dll and other folders like LOGS, MENU, PAKS, SAVES and SCREENSHOTS which come with it in same folder as DATA folder. Don't forget to put empty .pak in PAKS folder. You can get empty .pak from BoREdit pack.
Line 65: Line 69:
  
  
=MODELS.txt=
+
=MODELS.txt:=
  
*This text file determines what entities which are loaded and are going to be loaded to the engine. This file is mandatory obviously. Aside from that, this file also determines some general settings for models.
+
*This text file determines entities which are loaded and are going to be loaded to the engine. This file is mandatory obviously. Aside from that, this file also determines some general settings for models.
 
*Models.txt must be placed right under DATA folder.
 
*Models.txt must be placed right under DATA folder.
 
*Entities to load are declared with .txt. How to make and modify these texts are described in Entity Files section below.
 
*Entities to load are declared with .txt. How to make and modify these texts are described in Entity Files section below.
 +
*Order of loaded playable characters in this file also defines the order of them in select screen
  
  
Line 109: Line 114:
  
  
 +
combodelay {int}
 +
*~This command sets interval time between attacks in default combo to perform combo attack by tapping attack button.
 +
*~Default to 100 which means 50 centiseconds. It means if player press attack button 2 seconds after 1st attack connects, the 2nd attack won't be a combo. However, if it's pressed almost half second later, 2nd attack will be combo
 +
*~Great to disable cheap infinite combo!
 +
 +
offscreen_noatk_factor {bi}
 +
*~This command determines the ability of an entity to be able to attack while off screen. Useful to prevent entities that use ranged attacks like shots for example, they can attack without being in the visible area.
 +
**0 Means that the entity can attack outside the visible area (default)
 +
**1 Means that the entity CAN NOT attack outside the visible area.
  
 
==Generic Blocking Properties==
 
==Generic Blocking Properties==
  
blockratio {bi}
+
blockratio {bi}
 
*~If this is set, blocking will not completely nullify damage. The entity will take one forth of original damage instead
 
*~If this is set, blocking will not completely nullify damage. The entity will take one forth of original damage instead
  
Line 126: Line 140:
 
*~Entities health can be reduced to 1 health with this the next successful blocks won't take any health.
 
*~Entities health can be reduced to 1 health with this the next successful blocks won't take any health.
  
 
+
blockback  {bi}
 +
*~Flag to determine if attacks can be blocked from behind.
 +
**0 (default) = Entities can not block attacks from behind.
 +
**1 = Block attacks are possible
  
 
==Select Screen Properties==
 
==Select Screen Properties==
  
colourselect {bi}
+
colourselect {bi} {bi}
 
*~{bi} is a binary value.
 
*~{bi} is a binary value.
 
**0 = you can't change your character's palette.
 
**0 = you can't change your character's palette.
Line 139: Line 156:
  
 
spdirection {b1} {b2} {b3} {b4}
 
spdirection {b1} {b2} {b3} {b4}
 +
 
*~Sets the facing direction of players in select menu.
 
*~Sets the facing direction of players in select menu.
 
**0 = facing left.
 
**0 = facing left.
Line 165: Line 183:
 
**1 = players can hit each other.
 
**1 = players can hit each other.
  
 +
nocheats {bi}
 +
*~Sets cheat's allowance in this mod
 +
**0 = Cheats are allowed
 +
**1 = Cheats are forbidden
 +
*~Those who like fair play should use this ;).
  
 +
nodropspawn {bi}
 +
*~When it is on, the spawn position will be restricted to spawn entry setting.
 +
 +
nodebug {bi}
 +
*~in models.txt. set nodebug 1 to disable debug menu in options
  
 
==Attack types & animation limit==
 
==Attack types & animation limit==
 +
If you are receiving an error '' "Invalid animation name line xxx" '', you need to rise the value of the max animations you use for each type. For example, if you have MAXFOLLOWS 4 and try to use FOLLOW10, you will receive that error and you need to change the MAXFOLLOWS to 10. No need to change the others if you aren't using more animations than the max value.
  
 
maxattacks {max}
 
maxattacks {max}
 
*~Sets the maximum number of normal attacks animation i.e ATTACK1, ATTACK2 etc.
 
*~Sets the maximum number of normal attacks animation i.e ATTACK1, ATTACK2 etc.
 
*~{max} is number of available animations.
 
*~{max} is number of available animations.
*~Default is 4.  
+
*~Default is 4.
  
  
Line 179: Line 208:
 
*~PAIN,FALL, RISE, BLOCKPAIN and DEATH animations limit is also set together with this.
 
*~PAIN,FALL, RISE, BLOCKPAIN and DEATH animations limit is also set together with this.
 
*~{max} is number of available types.
 
*~{max} is number of available types.
*~Default is 10.
+
*~Default is 10 & maximum value is 99.
  
  
Line 189: Line 218:
  
 
maxfreespecials {max}
 
maxfreespecials {max}
*~Sets the maximum number of free specials.  
+
*~Sets the maximum number of free specials.
 
*~{max} is number of available free specials.
 
*~{max} is number of available free specials.
 
*~Default is 8.
 
*~Default is 8.
  
  
 +
maxidles {max}
 +
*~Sets the maximum number of IDLEs.
 +
*~{max} is number of available IDLEs.
 +
*~Default is 1.
 +
 +
 +
maxwalks {max}
 +
*~Sets the maximum number of WALKs.
 +
*~{max} is number of available WALKs.
 +
*~Default is 1.
 +
 +
 +
maxbackwalks {max}
 +
*~Sets the maximum number of BACKWALKs.
 +
*~{max} is number of available BACKWALKs.
 +
*~Default is 1.
 +
 +
 +
maxups {max}
 +
*~Sets the maximum number of UPs.
 +
*~{max} is number of available UPs.
 +
*~Default is 1.
 +
 +
 +
maxdowns {max}
 +
*~Sets the maximum number of DOWNs.
 +
*~{max} is number of available DOWNs.
 +
*~Default is 1.
  
 
==Bonus==
 
==Bonus==
  
 
lifescore {int}
 
lifescore {int}
*~Determines how many points players must earn to get one life or 1Up.
+
*~Determines how many score points players must earn to get one life or 1Up.
 
*~Default value is 50000.
 
*~Default value is 50000.
*~Set this to 0 to prevent players from getting life from points.
+
*~Set this to big value to prevent players from getting life from points.
 
+
*~DO NOT set this to 0 otherwise you'll get crash when hitting enemy.
  
 
credscore {int}
 
credscore {int}
*~Determines how many points players must earn to get one credit or continue.
+
*~Determines how many score points players must earn to get one credit or continue.
*~Default value is 0.
+
*~Default value is unknown. But by default players won't get credit from score.
*~Set this to 0 to prevent players from getting credit from points.
+
*~Set this to big value to prevent players from getting credit from points.
 +
*~DO NOT set this to 0 otherwise you'll get crash when hitting enemy.
  
  
Line 237: Line 295:
  
  
*~You don't need to load music, sound, system, or stage files with these commands. This is used only for entities.  
+
*~You don't need to load music, sound, system, or stage files with these commands. This is used only for entities.
  
  
 
----
 
----
  
=LEVELS.txt - General Settings=
+
=LEVELS.txt - General Settings:=
  
*This text file determines how many game modes (or difficulty in BoR) which are declared in the mod and what levels and scenes each game mode has. This file is mandatory obviously. Aside from that, this file also determines some general general settings for levels and HUD.
+
*This text file determines how many game modes (or difficulty in BoR) which are declared in the mod and what levels and scenes each game mode has. This file is mandatory obviously. Aside from that, this file also determines some general general settings for levels and HUD.  
 
*Due to lots of features, this part is divided into 2 parts. This part is for general level settings and HUD settings while the other part (Level sets below) is for game modes settings.
 
*Due to lots of features, this part is divided into 2 parts. This part is for general level settings and HUD settings while the other part (Level sets below) is for game modes settings.
 
*Levels.txt must be placed right under DATA folder.
 
*Levels.txt must be placed right under DATA folder.
  
 +
==Fonts==
 +
''(Originally posted by Maggas at lavalit forums)''
  
==Hiscore & Stage complete==
+
In order to create an font you need to known first how to define the size of the font image. That have to do actually with the size of the letters or "letterbox"(see bellow) you want to use.
  
hiscorebg {bi}
+
Then if you known size of your letters,then you must multiply the dimensions of your letters x16.(the dimensions are count in pixels)
*~If set to 1, the high score screen will have a background. Normally, it's just text on black.
 
  
 +
As example,if the size of your letters is width/9 pixels and height/9 pixels,then your font image size have to be width/144 and height/144,or 144x144 in other words.
  
completebg {bi}
+
The images bellow can be used as template in order to create your own font. Just pick up which image are fit with your letter dimensions.
*~Determines whether custom stage complete screen is used or not.
 
**0 = no custom screen is used. A black screen with texts will be shown instead.
 
**1 = custom screen is used.
 
*~The custom stage complete screen must be named complete.gif, must be non-animated gif and placed in data/bgs/ folder.
 
  
 +
*'''Font size 144x144 for letters with 9x9 pixels'''
 +
This is actually the default BOR font size which is used a lot.
 +
This can be used as font,font2,font3
  
showcomplete {x1} {y1} {x2} {y2} {x3} {y3}
+
[[File:01_-_Font_size_144x144_for_letters_with_9x9_pix.gif]]
*~Determines the position of "STAGE # COMPLETE".
 
*~{x1} and {y1} determines "STAGE"'s position.
 
*~{x2} and {y2} determines the number's position. This number shows the completed stage's number.
 
*~{x3} and {y3} determines "COMPLETE"'s position.
 
*~ x and y are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the life bar.
 
  
  
clearbonus {x0} {y0} {x1} {y1} {x2} {y2} {x3} {y3} {x4} {y4}
+
*'''Font size 160x160 for letters with 10x10 pixels'''
*~Determines the position of "Clear Bonus" and its scores for each player.
+
This size can be used as font,font2,font3 as well and i think is the maximum size for use as font,font2.
*~{x0} and {y0} determines "Clear Bonus"' position.
 
*~{x1} and {y1} determines Player 1's score bonus' position.
 
*~{x2} and {y2} determines Player 2's score bonus' position.
 
*~{x3} and {y3} determines Player 3's score bonus' position.
 
*~{x4} and {y4} determines Player 4's score bonus' position.
 
*~ x and y work exactly like they are for 'showcomplete'.
 
*~The score will only be shown if the respective player is present when stage completes though.
 
  
 +
[[File:02_-_Font_size_160x160_for_letters_with_10x10_pi.gif]]
  
lifebonus {x0} {y0} {x1} {y1} {x2} {y2} {x3} {y3} {x4} {y4}
 
*~Determines the position of "Lives Bonus" and its scores for each player.
 
*~{x0} and {y0} determines "Lives Bonus"' position.
 
*~{x1} {y1} {x2} {y} {x3} {y3} {x4} {y4} works exactly like for 'clearbonus' except that they are for life bonus.
 
  
 +
*'''Font size 192x192 for letters with 12x12 pixels'''
 +
This size can be used as font3
  
totalscore {x0} {y0} {x1} {y1} {x2} {y2} {x3} {y3} {x4} {y4}
+
[[File:03_-_Font_size_192x192_for_letters_with_12x12_pi.gif]]
*~Determines the position of "Total Score" and its scores for each player.
 
*~{x0} and {y0} determines "Total Score"'s position.
 
*~{x1} {y1} {x2} {y2} {x3} {y3} {x4} {y4} works exactly like for 'clearbonus' except that they are for Total Score.
 
  
  
showrushbonus {int}
+
*'''Font size 208x272 for letters with 13x17 pixels'''
*~Determines whether max rush is added as bonus in Stage Complete screen or not.
+
This size can be used as font4
** 0 = Max rush is not counted
 
** 1 = Max rush is counted
 
*~Make sure you have set 'rush' above before setting this.
 
  
 +
[[File:04_-_Font_size_208x272_for_letters_with_13x17_pi.gif]]
  
rushbonus {x0} {y0} {x1} {y1} {x2} {y2} {x3} {y3} {x4} {y4}
 
*~Determines the position of "Rush Bonus" and its scores for each player.
 
*~{x0} and {y0} determines "Rush Bonus"' position.
 
*~{x1} {y1} {x2} {y} {x3} {y3} {x4} {y4} works exactly like for 'clearbonus' except that they are for rush bonus.
 
  
 +
*'''Font size 256x256 for letters with 16x16 pixels'''
 +
This size can be used as font4
  
scbonuses {stage bonus} {life bonus} {rush bonus} {bonus type}
+
[[File:05_-_Font_size_256x256_for_letters_with_16x16_pi.gif]]
*~Stand for stage complete bonuses. Determines multiplier value for bonuses in Stage Complete Screen.
 
*~{stage bonus} is stage's bonus. If {bonus type} is set to 1, this become multiplier. Defaults to 10000
 
*~{life bonus} is life's bonus (lives * life bonus). Defaults to 1000
 
*~{rush bonus} is max rush bonus (max rush * rush bonus). Defaults to 100
 
*~{bonus type} determines how {stage bonus} affects. If set to 1, {stage bonus} will be multiplied by current stage's number. This way it will increase as you progress through the mod. See 'stagenumber' in Level Files section below for extra info about stage number.
 
*~NOTE: Use multiplies of 10 for {stage bonus}, {life bonus} and {rush bonus}.
 
  
  
==HUD location==
+
*'''Font size 272x272 for letters with 17x17 pixels'''
 +
This size can be used as font4 and others
  
[[Image:preview1p.png]]
+
[[File:06_-_Font_size_272x272_for_letters_with_17x17_pi.gif]]
  
p{#}life {x} {y}
+
OpenBOR actually can use up to 8 fonts used some commands to define which font is for what and not only 4 fonts. OpenBoR fonts are not monospaced. That is, the space between two letters is determined by how wide the letter is. If your letters 'overlap', try placing a black outline around them, or moving them rightward a few pixels.
*~Determines the position of player's life bar.
 
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
 
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the life bar.  
 
 
 
 
 
p{#}icon {x} {y}
 
*~Determines the position of player's icon.
 
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
 
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the icon.  
 
  
 +
Here is the "letter format" or just which letters must be used and where to place:
  
p{#}mp {x} {y}
+
<pre>0 1 2 3 4 5 6 7 8 9 A B C D E F
*~Determines the position of player's MP bar, if player has MP that is.
+
0 1 2 3 4 5 6 7 8 9 A B C D E F
*~Works exactly like p{#}life, except it affects player's MP bar instead.
+
! " # $ % & ´ ( )  * + , - . /
 +
0 1 2 3 4 5 6 7 8 9 : ; { = } ?
 +
@ A B C D E F G H I J K L M N O
 +
P Q R S T U V W X Y Z [ \ ] ^
 +
` a b c d e f g h i j k l m n o
 +
p q r s t u v w x y z</pre>
  
 
p{#}lifex {x} {y} {font}
 
*~Determines the position of player's "x". Which "x"? the "x" between lifebar and number of lives player has that is.
 
*~{#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
 
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of "x".
 
*~{font} determines which font is used for the "x".
 
 
*~Here's font reference for {font}:
 
*~Here's font reference for {font}:
 
** 0 = font.gif (default)
 
** 0 = font.gif (default)
Line 349: Line 374:
 
** 5 = font6.gif (optional)
 
** 5 = font6.gif (optional)
 
** 6 = font7.gif (optional)
 
** 6 = font7.gif (optional)
** 7 = font8.gif (optional)
+
** 7 = font8.gif (optional) (4287+)
 +
** 8 = font6.gif (optional) (4287+)
 +
** 9 = font7.gif (optional) (4287+)
 
*~Make sure the optional fonts are available before using them!
 
*~Make sure the optional fonts are available before using them!
  
 +
PS: Not all symbols are necessary.You can add which you need.
 +
* NUMBERS must be included in font images or openbor will crash without error.
 +
* LETTERS are optional. *(for custom fonts)
 +
 +
==Hiscore & Stage complete==
  
p{#}lifen {x} {y} {font}
+
hiscorebg {bi}
*~Determines the position of player 1's current number of lives. In case you haven't figured it out, the number on the right of lifebar is player's lives.
+
*~If set to 1, the high score screen will have a background. Normally, it's just text on black.
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
 
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the number.
 
*~{font} determines which font is used for the number.
 
*~Font reference is the same as 'p{#}lifex' above.
 
*~Default value is 3 or font4.gif.
 
  
  
p{#}score {x1} {y1} {x2} {y2} {x3} {y3} {font}
+
completebg {bi}
*~Determines the position of player's status.
+
*~Determines whether custom stage complete screen is used or not.
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
+
**0 = no custom screen is used. A black screen with texts will be shown instead.
*~{x1} and {y1} determines player's name position.
+
**1 = custom screen is used.
*~{x2} and {y2} determines player's "-" position. Yes, there is "-" between name and score.
+
*~The custom stage complete screen must be named complete.gif, must be
*~{x3} and {y3} determines player's score position.
+
non-animated gif and placed in data/bgs/ folder.
*~ x and y are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the name, "-" or the score.
 
*~{font} determines which font is used for the texts.
 
*~Font reference is the same as 'p{#}lifex' above.
 
*~Default value is 0 or font.gif.
 
  
  
p{#}namej {x1} {y1} {x2} {y2} {x3} {y3} {font}
+
showcomplete {x1} {y1} {x2} {y2} {x3} {y3}
*~Determines the position of player's "Select Hero", Name text, continue, credits and "GAME OVER" when joining the game.
+
*~Determines the position of "STAGE # COMPLETE".
*~{x1} and {y1} determines player's name position.
+
*~{x1} and {y1} determines "STAGE"'s position.
*~{x2} and {y2} determines "Select Hero"'s position.
+
*~{x2} and {y2} determines the number's position. This number shows the completed stage's number.
*~{x3} and {y3} determines "Press Start"'s position. These also sets "GAME OVER" and credits position.
+
*~{x3} and {y3} determines "COMPLETE"'s position.
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
+
*~ x and y are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the life bar.
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the text.
 
*~{font} determines which font is used for the texts.
 
*~Font reference is the same as 'p{#}lifex' above.
 
*~Default value is 0 or font.gif.
 
  
  
p{#}shoot {x} {y} {font}
+
clearbonus {x0} {y0} {x1} {y1} {x2} {y2} {x3} {y3} {x4} {y4}
*~Determines the position of weapon's counter when shootnum is used.
+
*~Determines the position of "Clear Bonus" and its scores for each player.
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
+
*~{x0} and {y0} determines "Clear Bonus"' position.
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the text.
+
*~{x1} and {y1} determines Player 1's score bonus' position.
*~{font} determines which font is used for the texts.
+
*~{x2} and {y2} determines Player 2's score bonus' position.
*~Font reference is the same as 'p{#}lifex' above.
+
*~{x3} and {y3} determines Player 3's score bonus' position.
*~Default value is 0 or font.gif.
+
*~{x4} and {y4} determines Player 4's score bonus' position.
 +
*~ x and y work exactly like they are for 'showcomplete'.
 +
*~The score will only be shown if the respective player is present when stage completes though.
  
  
mp{#}icon {x} {y}  
+
lifebonus {x0} {y0} {x1} {y1} {x2} {y2} {x3} {y3} {x4} {y4}
*~Determines the position of magicbar's icon.  
+
*~Determines the position of "Lives Bonus" and its scores for each player.
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
+
*~{x0} and {y0} determines "Lives Bonus"' position.
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the icon.
+
*~{x1} {y1} {x2} {y} {x3} {y3} {x4} {y4} works exactly like for 'clearbonus' except that they are for life bonus.  
  
  
p{#}iconw {x} {y}  
+
totalscore {x0} {y0} {x1} {y1} {x2} {y2} {x3} {y3} {x4} {y4}
*~Determines the position of player's icon for players with weapon.  
+
*~Determines the position of "Total Score" and its scores for each player.
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
+
*~{x0} and {y0} determines "Total Score"'s position.
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the icon.  
+
*~{x1} {y1} {x2} {y2} {x3} {y3} {x4} {y4} works exactly like for 'clearbonus' except that they are for Total Score.
  
  
e{#}life {x} {y}  
+
showrushbonus {int}
*~Determines the position of the life bar for the entity which most recently hit/was hit by/touched/interacted with player. Nothing will be shown if that entity hides his/her/its status though.
+
*~Determines whether max rush is added as bonus in Stage Complete screen or not.
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
+
** 0 = Max rush is not counted
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the life bar.
+
** 1 = Max rush is counted
 +
*~Make sure you have set 'rush' above before setting this.
  
  
e{#}icon {x} {y}  
+
rushbonus {x0} {y0} {x1} {y1} {x2} {y2} {x3} {y3} {x4} {y4}
*~Determines the position of the icon for the entity which most recently hit/was hit by/touched/interacted with player. Nothing will be shown if that entity hides his/her/its status though.
+
*~Determines the position of "Rush Bonus" and its scores for each player.
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
+
*~{x0} and {y0} determines "Rush Bonus"' position.
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the icon.  
+
*~{x1} {y1} {x2} {y} {x3} {y3} {x4} {y4} works exactly like for 'clearbonus' except that they are for rush bonus.  
 +
 
  
 +
scbonuses {stage bonus} {life bonus} {rush bonus} {bonus type}
 +
*~Stand for stage complete bonuses. Determines multiplier value for bonuses in Stage Complete Screen.
 +
*~{stage bonus} is stage's bonus. If {bonus type} is set to 1, this become multiplier. Defaults to 10000
 +
*~{life bonus} is life's bonus (lives * life bonus). Defaults to 1000
 +
*~{rush bonus} is max rush bonus (max rush * rush bonus). Defaults to 100
 +
*~{bonus type} determines how {stage bonus} affects. If set to 1, {stage bonus} will be multiplied by current stage's number. This way it will increase as you progress through the mod. See 'stagenumber' in Level Files section below for extra info about stage number.
 +
*~NOTE: Use multiplies of 10 for {stage bonus}, {life bonus} and {rush bonus}.
  
e{#}name {x} {y} {font}
 
*~Determines the position of the name for the entity which most recently hit/was hit by/touched/interacted with player. Nothing will be shown if that entity hides his/her/its status though.
 
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
 
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the name.
 
*~{font} determines which font is used for the texts.
 
*~Font reference is the same as 'p{#}lifex' above.
 
*~Default value is 0 or font.gif.
 
  
 +
pauseoffset {font0} {font1} {xpos} {ypos} {font_pause} {xpos_pause} {ypos_pause}
 +
*~write "pauseoffset" in levels.txt to change fonts and offset of pause strings.
 +
*~{font0} is font index for "continue"/"end game" strings. default 0
 +
*~{font1} is font index for "continue"/"end game" highlighted strings. default 1
 +
*~{xpos} is x position for "continue"/"end game" strings
 +
*~{ypos} is y position for "continue"/"end game" strings
 +
*~{font_pause} is font index for "PAUSE" string. default 3
 +
*~{xpos_pause} is x position for "PAUSE" string
 +
*~{ypos_pause} is y position for "PAUSE" string
  
p{#}smenu {x1} {y1} {x2} {y2}
+
==HUD location==
*~Determines the position of players in select screen.
 
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
 
*~{x1} and {y1} determines player's position.
 
*~{x2} and {y2} determines player's "Ready!" position.
 
*~ x and y are the number of pixels, right and down respectively, from the top left corner of the screen to the player's offset (for x1 and y1) or to the top left corner of "Ready!" text.
 
  
==HUD settings==
+
[[Image:preview1p.png]]
  
http://www.dreamcast-scene.com/uploads/Main/Preview2.p.png
+
p{#}life {x} {y}
 +
*~Determines the position of player's life bar.
 +
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
 +
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the life bar.
  
  
lbarsize {w} {h} {noborder} {type} {orientation} {border} {shadow} {graph} {backfill}
+
p{#}icon {x} {y}
*~Controls the size of lifebars.
+
*~Determines the position of player's icon.
*~This applies to players, enemies, items, etc (their lifebar will all have the same width, height, etc). If 'olbarsize' is declared, this only applies to players.
+
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
*~{w} is the maximum amount of health the bar can display. Defaults to 100.
+
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the icon.
*~{h} is the height of the lifebar in pixels. Defaults to 5.  
 
*~{noborder} turns on or off the border and shadow around life bars. {0} means there is, {1} means no outline or shadow.
 
*~ {type} is a flag that sets how lifebar show health. 0 (default) means if an entity's health goes over width, the life bar will wrap around and 'double up' on top of itself (1 unit of health is 1 pixel long.). 1 means the lifebar is shown in percent based.
 
*~{orientation} is a flag that sets lifebar's orientation.
 
**0 (default) = horizontal orientation. Lifebar is filled from left to right in this mode.
 
**1 = vertical orientation. Lifebar is filled from down to up in this mode.
 
*~{border} sets layer adjustment of outer border. Default to 0.
 
*~{shadow} sets layer adjustment of border shadow. Default to 0.
 
*~{graph} sets layer adjustment of graph fill. Default to 0.
 
*~{backfill} sets layer adjustment graph background. Default to 0.
 
*~The last 4 variables can be used to place lifebar behind player 'icon' or 'bgicon'. To do that you need to give value like -300.
 
  
  
mpbarsize {w} {h} {noborder} {type} {orientation} {border} {shadow} {graph} {backfill}
+
p{#}mp {x} {y}
*~Controls the size of mpbars.
+
*~Determines the position of player's MP bar, if player has MP that is.
*~Works exactly like 'lbarsize'.
+
*~Works exactly like p{#}life, except it affects player's MP bar instead.
  
  
olbarsize {w} {h} {noborder} {type} {orientation} {border} {shadow} {graph} {backfill}
+
p{#}lifex {x} {y} {font}
*~Controls opponent's lifebars size. If not available, 'lbarsize' will be used.
+
*~Determines the position of player's "x". Which "x"? the "x" between lifebar and number of lives player has that is.
*~Works exactly like 'lbarsize'.
+
*~{#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
 
+
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of "x".
 
+
*~{font} determines which font is used for the "x".
rush {flag} {duration} {text1} {f1} {f2} {text2} {f3} {f4}
+
*~Here's font reference for {font}:
*~This is for showing successful hits counter onscreen. If it is activated, texts will appear onscreen showing how many current consecutive hits and maximum consecutive hits.
+
** 0 = font.gif (default)
*~As long player hit something, the hit counter will keep incrementing. It doesn't matter if player hit same enemies/obstacles or other ones. Juggling hits also counted.
 
*~{flag} is integer value which activates this counter.
 
** 0 = counter is off.
 
** 1 = counter is on.
 
** 2 = counter is on and maximum hits is always displayed.
 
*~ {duration} sets how long the counter will be on before it expires.
 
*~ {text1} sets what text to be displayed for hits counter.
 
*~ {f1} sets which font to be used for {text1}.
 
*~ {f2} sets which font to be used for hits counter's number.
 
*~ {text2} sets what text to be displayed for maximum hits.
 
*~ {f3} sets which font to be used for {text2}.
 
*~ {f4} sets which font to be used for maximum hit' number.
 
*~ Here's font reference for {f1}, {f2}, {f3} and {f4}
 
** 0 = font.gif
 
 
** 1 = font2.gif
 
** 1 = font2.gif
 
** 2 = font3.gif
 
** 2 = font3.gif
Line 489: Line 494:
 
** 5 = font6.gif (optional)
 
** 5 = font6.gif (optional)
 
** 6 = font7.gif (optional)
 
** 6 = font7.gif (optional)
** 7 = font8.gif (optional)
+
** 7 = font8.gif (optional) (4287+)
 +
** 8 = font6.gif (optional) (4287+)
 +
** 9 = font7.gif (optional) (4287+)
 
*~Make sure the optional fonts are available before using them!
 
*~Make sure the optional fonts are available before using them!
*~Don't forget to set 'p{#}rush' below if you set this otherwise it will be piled at topleft corner.
 
  
  
p{#}rush {x1} {y1} {x2} {y2} {x3} {y3} {x4} {y4}
+
p{#}lifen {x} {y} {font}
*~Determines the position of player's 'rush' status. Only effect if you set 'rush' (above) though. Also it's highly recommended to set this too if you set 'rush' otherwise it will be piled at topleft corner.
+
*~Determines the position of player 1's current number of lives. In case you haven't figured it out, the number on the right of lifebar is player's lives.
*~{#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
+
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
*~{x1} and {y1} determines rush text's position. The text for this is modified with 'rush' command above.
+
*~ {x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the number.
*~{x2} and {y2} determines current rush value position. The font for this is modified with 'rush' command above.
+
*~ {font} determines which font is used for the number.
*~{x3} and {y3} determines max rush text's position. The text for this is modified with 'rush' command above.
+
*~ Font reference is the same as 'p{#}lifex' above.
*~{x4} and {y4} determines max rush value position. The font for this is modified with 'rush' command above.
+
*~ Default value is 3 or font4.gif.
*~x and y are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of text or value.
 
  
  
timeloc {x} {y} {w} {h} {noborder}
+
p{#}score {x1} {y1} {x2} {y2} {x3} {y3} {font}
*~Controls the position of the clock timer.
+
*~Determines the position of player's status.
*~To change the font, you'll need to work with the font file, not this command.
+
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
*~{x} and {y} control how far right and down (respectively) the timer is from the top left of the screen.
+
*~{x1} and {y1} determines player's name position.
*~{w} and {h} control the dimensions of the border placed around the timer. If your timer is being displayed under the border or is off-center, try editing this.
+
*~{x2} and {y2} determines player's "-" position. Yes, there is "-" between name and score.
*~{noborder} turns on or off the outline around the timer. {0} means it's there, {1} takes it away.
+
*~{x3} and {y3} determines player's score position.
*~The default values are 149, 4, 21, 20, and 0, respectively.
+
*~ x and y are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the name, "-" or the score.
 +
*~{font} determines which font is used for the texts.
 +
*~Font reference is the same as 'p{#}lifex' above.
 +
*~Default value is 0 or font.gif.
  
  
timeicon {path} {x} {y}  
+
p{#}namej {x1} {y1} {x2} {y2} {x3} {y3} {font}
*~Determines the position of timeicon. Timeicon is optional icon that can be place d behind timer to make timer looks cooler ;).
+
*~Determines the position of player's "Select Hero", Name text, continue, credits and "GAME OVER" when joining the game.
*~{path} is the location relative to OpenBoR of the icon's .gif.
+
*~{x1} and {y1} determines player's name position.
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the icon.
+
*~{x2} and {y2} determines "Select Hero"'s position.
 +
*~{x3} and {y3} determines "Press Start"'s position. These also sets "GAME OVER" and credits position.
 +
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
 +
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the text.
 +
*~{font} determines which font is used for the texts.
 +
*~Font reference is the same as 'p{#}lifex' above.
 +
*~Default value is 0 or font.gif.
  
  
bgicon {path} {x} {y}
+
p{#}shoot {x} {y} {font}
*~Determines the position of background icon. Background icon is optional icon that can be placed behind character's status to make HUD looks cooler ;).
+
*~Determines the position of weapon's counter when shootnum is used.
*~{path} is the location relative to OpenBoR of the icon's .gif.
+
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the icon.
+
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the text.
 +
*~{font} determines which font is used for the texts.
 +
*~Font reference is the same as 'p{#}lifex' above.
 +
*~Default value is 0 or font.gif.
  
  
==Music & SFX==
+
mp{#}icon {x} {y}
 +
*~Determines the position of magicbar's icon.
 +
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
 +
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the icon.
  
noslowfx {bi}
 
*~If set to 1, hit sounds will always play at the normal speed. Normally, the higher the damage of an attack, the slower it's hitsound plays.
 
  
 +
p{#}iconw {x} {y}
 +
*~Determines the position of player's icon for players with weapon.
 +
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
 +
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the icon.
  
custfade {int}
 
*~{int} determines how long it takes for music to fade out.
 
  
 +
e{#}life {x} {y}
 +
*~Determines the position of the life bar for the entity which most recently hit/was hit by/touched/interacted with player. Nothing will be shown if that entity hides his/her/its status though.
 +
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
 +
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the life bar.
  
musicoverlap {bi}
 
*~Determines if the music fades in and out when changing (1), or stops and restarts (0). Defaults to 0.
 
  
 +
e{#}icon {x} {y}
 +
*~Determines the position of the icon for the entity which most recently hit/was hit by/touched/interacted with player. Nothing will be shown if that entity hides his/her/its status though.
 +
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
 +
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the icon.
  
noslow {bi}
 
*~Determines whether or not the level slows down when the boss is defeated.
 
  
 +
e{#}name {x} {y} {font}
 +
*~Determines the position of the name for the entity which most recently hit/was hit by/touched/interacted with player. Nothing will be shown if that entity hides his/her/its status though.
 +
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
 +
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the name.
 +
*~{font} determines which font is used for the texts.
 +
*~Font reference is the same as 'p{#}lifex' above.
 +
*~Default value is 0 or font.gif.
  
==Miscellaneous==
 
  
maxplayers {int}
+
p{#}smenu {x1} {y1} {x2} {y2}
*~Determines how many players could play at same time.
+
*~Determines the position of players in select screen.
*~{int} could be 1, 2, 3 or 4.
+
*~ {#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
*~This setting can be overriden by same command in level sets (see below).
+
*~{x1} and {y1} determines player's position.
 +
*~{x2} and {y2} determines player's "Ready!" position.
 +
*~ x and y are the number of pixels, right and down respectively, from the top left corner of the screen to the player's offset (for x1 and y1) or to the top left corner of "Ready!" text.
  
 +
==HUD settings==
  
loadingbg {set} {bx} {by} {bsize} {tx} {ty} {tf}
+
http://www.dreamcast-scene.com/uploads/Main/Preview2.p.png
*~This command allows custom loading background to be displayed while models are being loaded.
 
*~The background must be named loading.gif and placed under data/bgs/ folder.
 
*~{set} determines how loading screen would be.
 
** -1 = default black screen with loading and status bar.
 
** 0 = no loading screen.
 
** 1 = loading screen background and status bar.
 
*~{bx} and {by} determines x and y coordinates of loading bar top left's location respectively.
 
*~{bsize} determines loading bar's length.
 
*~{tx} and {ty} determines x and y coordinates of "LOADING" text location respectively.
 
*~{tf} determines used font for "LOADING" text.
 
** 0 = font.gif
 
** 1 = font2.gif
 
** 2 = font3.gif
 
** 3 = font4.gif
 
  
  
loadingbg2 {set} {bx} {by} {bsize} {tx} {ty} {tf}
+
lbarsize {w} {h} {noborder} {type} {orientation} {border} {shadow}
*~This command allows custom loading background to be displayed while levels are being loaded.
+
{graph} {backfill}
*~The background must be named loading2.gif and placed under data/bgs/ folder.
+
*~Controls the size of lifebars.
*~The other variables have same effect with 'loadingbg'.
+
*~This applies to players, enemies, items, etc (their lifebar will all have the same width, height, etc). If 'olbarsize' is declared, this only applies to players.
 
+
*~{w} is the maximum amount of health the bar can display. Defaults to 100.
 
+
*~{h} is the height of the lifebar in pixels. Defaults to 5.
itemtrans {bi}
+
*~{noborder} turns on or off the border and shadow around life bars. {0} means there is, {1} means no outline or shadow.
*~This makes dropped items transparent. Make sure the items have transparency set before setting this.
+
*~ {type} is a flag that sets how lifebar show health. 0 (default) means if an entity's health goes over width, the life bar will wrap around and 'double up' on top of itself (1 unit of health is 1 pixel long.). 1 means the lifebar is shown in percent based.
 +
*~{orientation} is a flag that sets lifebar's orientation.
 +
**0 (default) = horizontal orientation. Lifebar is filled from left to right in this mode.
 +
**1 = vertical orientation. Lifebar is filled from down to up in this mode.
 +
*~{border} sets layer adjustment of outer border. Default to 0.
 +
*~{shadow} sets layer adjustment of border shadow. Default to 0.
 +
*~{graph} sets layer adjustment of graph fill. Default to 0.
 +
*~{backfill} sets layer adjustment graph background. Default to 0.
 +
*~The last 4 variables can be used to place lifebar behind player 'icon' or 'bgicon'. To do that you need to give value like -300.
  
  
equalairpause {bi}
+
mpbarsize {w} {h} {noborder} {type} {orientation} {border} {shadow}
*~Sets hitpause effect for jumpattacks.
+
{graph} {backfill}
** 0 = No hitpause
+
*~Controls the size of mpbars.
** 1 = Hitpause in effect
+
*~Works exactly like 'lbarsize'.
  
----
 
  
=LEVELS.txt - Level Sets=
+
olbarsize {w} {h} {noborder} {type} {orientation} {border} {shadow}
 +
{graph} {backfill}
 +
*~Controls opponent's lifebars size. If not available, 'lbarsize' will be used.
 +
*~Works exactly like 'lbarsize'.
  
*Just to reiterate, this part is 2nd part of levels.txt section. This part is for game modes settings.
 
  
 +
rush {flag} {duration} {text1} {f1} {f2} {text2} {f3} {f4}
 +
*~This is for showing successful hits counter onscreen. If it is activated, texts will appear onscreen showing how many current consecutive hits and maximum consecutive hits.
 +
*~As long player hit something, the hit counter will keep incrementing. It doesn't matter if player hit same enemies/obstacles or other ones. Juggling hits also counted.
 +
*~{flag} is integer value which activates this counter.
 +
**0 = counter is off.
 +
**1 = counter is on.
 +
**2 = counter is on and maximum hits is always displayed.
 +
*~ {duration} sets how long the counter will be on before it expires.
 +
*~ {text1} sets what text to be displayed for hits counter.
 +
*~ {f1} sets which font to be used for {text1}.
 +
*~ {f2} sets which font to be used for hits counter's number.
 +
*~ {text2} sets what text to be displayed for maximum hits.
 +
*~ {f3} sets which font to be used for {text2}.
 +
*~ {f4} sets which font to be used for maximum hit' number.
 +
*~ Here's font reference for {f1}, {f2}, {f3} and {f4}
 +
**0 = font.gif
 +
**1 = font2.gif
 +
**2 = font3.gif
 +
**3 = font4.gif
 +
**4 = font5.gif (optional)
 +
**5 = font6.gif (optional)
 +
**6 = font7.gif (optional)
 +
**7 = font8.gif (optional)
 +
*~Make sure the optional fonts are available before using them!
 +
*~Don't forget to set 'p{#}rush' below if you set this otherwise it will be piled at topleft corner.
  
==Header==
 
  
set {name}
+
p{#}rush {x1} {y1} {x2} {y2} {x3} {y3} {x4} {y4}
*~Marks the start of a difficulty level or game mode.
+
*~Determines the position of player's 'rush' status. Only effect if you set 'rush' (above) though. Also it's highly recommended to set this too if you set 'rush' otherwise it will be piled at topleft corner.
*~{name} is the name of the difficulty which will be selectable from the difficulty select menu.
+
*~{#} determines which player this setting is for and its possible values are 1, 2, 3 and 4. There's no space around {#} though.
 +
*~{x1} and {y1} determines rush text's position. The text for this is modified with 'rush' command above.
 +
*~{x2} and {y2} determines current rush value position. The font for this is modified with 'rush' command above.
 +
*~{x3} and {y3} determines max rush text's position. The text for this is modified with 'rush' command above.
 +
*~{x4} and {y4} determines max rush value position. The font for this is modified with 'rush' command above.
 +
*~x and y are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of text or value.
  
  
typemp {int}
+
timeloc {x} {y} {w} {h} {noborder}
*~Controls the conditions under which a player's MP can recover.
+
*~Controls the position of the clock timer.
**0 (or leave blank) = players will recover MP slowly over time.
+
*~To change the font, you'll need to work with the font file, not this command.
**1 = players will recover some MP when they hit an enemy.
+
*~{x} and {y} control how far right and down (respectively) the timer is from the top left of the screen.
**2 = players can't recover MP without using items or dying.
+
*~{w} and {h} control the dimensions of the border placed around the timer. If your timer is being displayed under the border or is off-center, try editing this.
 +
*~{noborder} turns on or off the outline around the timer. {0} means it's there, {1} takes it away.
 +
*~The default values are 149, 4, 21, 20, and 0, respectively.
  
  
cansave {int}
+
timeicon {path} {x} {y}
*~Defines how save states work in this level set.
+
*~Determines the position of timeicon. Timeicon is optional icon that can be place d behind timer to make timer looks cooler ;).
**0 = Save state is disabled
+
*~{path} is the location relative to OpenBoR of the icon's .gif.
**1 = Only saves last level (Default value). It's buggy currently though.
+
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the icon.
**2 = Strict save. Lives, credits, HP, MP, weapon, remap color etc are saved. When this saved state is loaded, players immediately enter last level without going to select screen. If it's multiplayer game, you will need partner.
 
  
  
skipselect {name} {name} {name} {name}
+
bgicon {path} {x} {y}
*~This command makes select screen and join in selection skipped in current level set. Players will automatically use certain defined player.
+
*~Determines the position of background icon. Background icon is optional icon that can be placed behind character's status to make HUD looks cooler ;).
*~{name} is the name of loaded player in models.txt (see above). The 1st one is for 1st player, 2nd for 2nd player and so on.
+
*~{path} is the location relative to OpenBoR of the icon's .gif.
*~MAKE SURE the defined player are loaded before using this!
+
*~{x} and {y} are the number of pixels, right and down respectively, from the top left corner of the screen to the top left corner of the icon.
*~You can empty all values to skip default select screen. However don't forget to set select screen text right after it.
 
  
 +
scoreformat {flag}
 +
*~{flag} is integer value which controls the align of score text.
 +
**0 = Score text is aligned left and unused digits are hidden.
 +
**1 = Score text is aligned right and all digits are shown.
  
nosame {bi}
+
==Music & SFX==
*~Determines whether or not Player 2 and Player 1 can use the same character at the same time.
 
  
 +
noslowfx {bi}
 +
*~If set to 1, hit sounds will always play at the normal speed. Normally, the higher the damage of an attack, the slower it's hitsound plays.
  
noshare {bi}
 
*~Determines whether or not Player 2 and Player 1 both use the same credits. If set to 1, each player will have their own supply of credits.
 
  
 +
custfade {int}
 +
*~{int} determines how long it takes for music to fade out.
  
lives {int}
 
*~The player will start with {int} lives.
 
  
 +
musicoverlap {bi}
 +
*~Determines if the music fades in and out when changing (1), or stops and restarts (0). Defaults to 0.
  
credits {int}
 
*~Players will start with {int} credits.
 
*~If 'noshare is not set (see above), this will determine total credits for all players. But if 'noshare 1' is set, this will determine how many credits each player has.
 
  
 +
noslow {bi}
 +
*~Determines whether or not the level slows down when the boss is defeated.
  
ifcomplete {bi}
 
*~Can be used to create 'secret' levels if {bi} is set to 1.
 
*~They aren't really secrets, as the players will still be able to see them on the menu, but they won't be able to select it until they've beaten a game mode at least once.
 
*~'secret 1' characters can only be used in difficulty settings with 'ifcomplete'.
 
  
 +
==Miscellaneous==
  
 
maxplayers {int}
 
maxplayers {int}
*~Determines how many players could play at same time just for current level set.
+
*~Determines how many players could play at same time.
 
*~{int} could be 1, 2, 3 or 4.
 
*~{int} could be 1, 2, 3 or 4.
*~This setting overrides same command in general settings (see above).
+
*~This setting can be overriden by same command in level sets (see below).
  
  
continuescore{int}
+
loadingbg {set} {bx} {by} {bsize} {tx} {ty} {tf}
*~Determines how taking continue effect score.
+
*~This command allows custom loading background to be displayed while models are being loaded.
** 1 = score is reset to 0 when you continue.
+
*~The background must be named loading.gif and placed under data/bgs/ folder.
** 2 = 1 point is added to your score when you continue. This is to replicate Capcom's scoring system which puts number of continues in their scores.
+
*~{set} determines how loading screen would be.
 +
**-1 = default black screen with loading and status bar.
 +
**0 = no loading screen.
 +
**1 = loading screen background and status bar.
 +
*~{bx} and {by} determines x and y coordinates of loading bar top left's location respectively.
 +
*~{bsize} determines loading bar's length.
 +
*~{tx} and {ty} determines x and y coordinates of "LOADING" text location respectively.
 +
*~{tf} determines used font for "LOADING" text.
 +
**0 = font.gif
 +
**1 = font2.gif
 +
**2 = font3.gif
 +
**3 = font4.gif
 +
 
  
 +
loadingbg2 {set} {bx} {by} {bsize} {tx} {ty} {tf}
 +
*~This command allows custom loading background to be displayed while levels are being loaded.
 +
*~The background must be named loading2.gif and placed under data/bgs/ folder.
 +
*~The other variables have same effect with 'loadingbg'.
  
  
==Body==
+
itemtrans {bi}
 +
*~This makes dropped items transparent. Make sure the items have transparency set before setting this.
  
z {zmin} {zmax} {BGheight}
 
*~Changes the location of stage boundaries.
 
*~{xmin} is how high up entities can walk. It starts at the top and works down, so larger numbers mean less room. Defaults to 160.
 
*~{xmax} is how far down the character can walk. It also goes down from the top. Defaults to 232.
 
*~{BGheight} changes where the bottom of the background is drawn. Defaults to 160. By changing this value, you can make the background match an altered {xmin}.
 
*~This can be set once per level. You can change it between two stages. If you need to change it during a stage, you should combine it with the "wall" command in the stage itself.
 
*~You can spawn entities outside of this range, but once they enter the playing field they can't escape again.
 
  
 +
equalairpause {bi}
 +
*~Sets hitpause effect for jumpattacks.
 +
**0 = No hitpause
 +
**1 = Hitpause in effect
  
file {path}
+
----
*~This command is for setting levels to play in a 'set'.
 
*~{path} is the location of a .txt file which describes a level.
 
*~Since this command only sets one level, you may need to declare more of this to set the other levels.
 
*~If there are more than one 'file', levels are played from the 1st one to last until there are no more or meet 'end' (see below).
 
*~Level to load here is declared with .txt. How to make and modify these texts are described in Level Files section below.
 
  
 +
=LEVELS.txt - Level Sets=
  
scene {path}
+
*Just to reiterate, this part is 2nd part of levels.txt section. This part is for game modes settings.
*~This command is for setting cutscenes to play in a 'set'.
 
*~{path} is the location of a .txt file which describes a cutscene.
 
*~Since this command only sets one cutscene, you may need to declare more of this to set the other cutscenes.
 
*~If there are more than one 'scene', cutscenes are played from the 1st one to last until there are no more or meet 'end' (see below).
 
*~Cutscene to load here are declared with .txt. How to make and modify these texts are described in Cutscene Files section below.
 
  
  
select {path}
+
==Header==
*~This command is for setting select screen files to play in a 'set'.
 
*~{path} is the location of a .txt file which sets custom select screen.
 
*~This can be declared more than once in same game mode and playing order is from the 1st one to last one.
 
*~Select screen to load here are declared with .txt. How to make and modify these texts are described in Select Screen Files section below.
 
  
 +
set {name}
 +
*~Marks the start of a difficulty level or game mode.
 +
*~{name} is the name of the difficulty which will be selectable from the difficulty select menu.
  
next
 
*~This command doesn't need any arguments.
 
*~When this command is reached, the Stage Complete scene will play, and Scores will be tallied.
 
  
 +
typemp {int}
 +
*~Controls the conditions under which a player's MP can recover.
 +
**0 (or leave blank) = players will recover MP slowly over time.
 +
**1 = players will recover some MP when they hit an enemy.
 +
**2 = players can't recover MP without using items or dying.
  
branch {name}
 
*~Used to give name to warp destination for endlevel entities which uses 'branch'.
 
*~{name} is the name of the destination.
 
*~Used together with 'branch' feature (see below).
 
  
 +
cansave {int}
 +
*~Defines how save states work in this level set.
 +
**0 = Save state is disabled
 +
**1 = Only saves last level (Default value). It's buggy currently though.
 +
**2 = Strict save. Lives, credits, HP, MP, weapon, remap color etc are saved. When this saved state is loaded, players immediately enter last level without going to select screen. If it's multiplayer game, you will need partner.
  
end
 
*~When this is reached, the game will end regardless of the levels after it.
 
*~There's no point of using 'end' without 'branch' so use this together with 'branch'.
 
  
 +
skipselect {name} {name} {name} {name}
 +
*~This command makes select screen and join in selection skipped in current level set. Players will automatically use certain defined player.
 +
*~{name} is the name of loaded player in models.txt (see above). The 1st one is for 1st player, 2nd for 2nd player and so on.
 +
*~MAKE SURE the defined player are loaded before using this!
 +
*~You can empty all values to skip default select screen. However don't forget to set select screen text right after it.
 +
*~You can set a different player for each level (4287+). Example:
 +
<pre> in levels.txt
 +
set
 +
...
 +
...
 +
skipselect RYU
 +
file level1.txt
 +
skipselect KEN
 +
file level2.txt
 +
etc...
 +
</pre>
  
----
 
  
=LIFEBAR.txt=
+
nosame {b1} {b2}
 +
*With nosame set, a player can't pick the characters that are currently occupied by other players like some capcom games (for example, Cadillacs and Dinosaurs). For this reason, there's no warning message that tells you don't select the same character.
 +
*~{b1} Determines whether or not Player 2 and Player 1 can use the same character at the same time.
 +
** 0 (Default)= They can use the same player.
 +
** 1 = They can not use the same player.
 +
*~{b2} stands for different colourmap select (currently it is not forced). The second flag is for color map index. If active it will skip same map ONLY for same players.
  
*This text file is optional file for setting lifebar colors. This is for OpenBoR only though.
+
Examples
*Lifebar.txt must be placed right under DATA folder and tt's lifebar.txt, not lifebars.txt.
+
<pre>
*{R}, {G} and {B} which are used below are color values from 0 to 255 for Red, Green, and Blue. If you don't know what that means, try thinking of them as brightnesses. If you had 0 255 0, then there would be no red, no blue, and all green, so you'd have green. If you had 0 0 0, there wouldn't be anything, and you'd have black. 255 255 255 would be all of everything, so it'd be white. 255 0 255 would be red + blue = purple. 128 128 128 would be halfway between white and black, so it'd be grey.
+
NOSAME 1
*If it still doesn't make sense to you, try opening up Microsoft Paint, go to Colors * Edit Colors * Define Custom Colors. Try messing around with the Red, Blue, and Green values. It works like that. BTW setting a color to the transparent color doesn't actually make it transparent.
+
NOSAME 1 2
*The color settings must match one of the colors in the default pallete exactly. If your colors aren't correct, try decreasing every color value by 1- some programs report color values to be higher or lower depending on whether they start at 0 or 1.
+
NOSAME 0 2</pre>
*However, if the mod is using truecolor mode (see video.txt below), all colors defined here will be true RGB colors. Which means, you don't need to check if they are available in global palette or not.
 
  
  
blackbox {R} {G} {B}
+
noshare {bi}
*~Determines the color of the 'shadow' around the lifebar and the bar at 500 health.
+
*~Determines whether or not Player 2 and Player 1 both use the same credits. If set to 1, each player will have their own supply of credits.
  
  
whitebox {R} {G} {B}
+
lives {int}
*~Determines the color of the outline around the lifebar and the bar at 600 health and up.
+
*~The player will start with {int} lives.
  
  
color{#} {R} {G} {B}
+
credits {int}
*~Determines used color by certain health value. For instance, 'color100' determines used color if health is 100 or less.
+
*~Players will start with {int} credits.
*~There's no space between "color" and {#} in color{#}.
+
*~If 'noshare is not set (see above), this will determine total credits for all players. But if 'noshare 1' is set, this will determine how many credits each player has.
*~{#} is the health value at which the color will be displayed and its possible values are 25, 50, 100, 200, 300, 400 and 500.
 
*~color500 is also used as the background of the lifebar, and is displayed with transparency.
 
*~If lifebar is displayed in percentage mode (see 'lbarsize' above for info about it), color reference changes to:
 
** color25 = 0-20% health
 
** color50 = 21-40% health
 
** color100 = 41-60% health
 
** color200 = 61-80% health
 
** color300 = 81-100% health
 
** color400 and color500 aren't used.
 
  
  
colormagic {R} {G} {B}
+
ifcomplete {int}
*~Controls the color of the MP bar.
+
*~Can be used to create 'locked' levels if {int} is set to 1 or higher.
 +
*~In the game, OpenBoR will display message on the right side respective game mode like this: Finish the game {int} times to unlock. That means, player must clear a game mode {int} to unlock this game mode.
 +
*~OpenBoR will save player's progress so no need to do it all at once.
 +
*~They aren't really secrets, as the players are still be able to see them on the menu, but they won't be able to select it until they've beaten a game mode with defined value.
 +
*~Characters with 'secret 1' in their header can only be used in difficulty settings with 'ifcomplete'.
  
  
colormagic2 {R} {G} {B}
+
maxplayers {int}
*~When a player's MP bar is longer than their health, the extra MP is overlaid on top of the first bar in this color, like with health.
+
*~Determines how many players could play at same time just for current level set.
 +
*~{int} could be 1, 2, 3 or 4.
 +
*~This setting overrides same command in general settings (see above).
  
  
shadowcolor {R} {G} {B}
+
continuescore {int}
*~Specify default gfxshadow color.
+
*~Determines how taking continue effect score.
 +
**1 = score is reset to 0 when you continue.
 +
**2 = 1 point is added to your score when you continue. This is to replicate Capcom's scoring system which puts number of continues in their scores.
  
  
----
+
disablegameover {int}
 +
*~set 1 you won't display the gameover screen! useful for custom HUD.
 +
**0: display (default)
 +
**1: not display
  
=VIDEO.txt=
 
  
*This text file is optional file for setting video, widescreen settings and true color mode. Yeah, its function can't be mentioned with just one word.
+
disablehof {int}
*Just like LIFEBAR.txt, it should be declared in DATA folder.
+
*~set 1 you won't display the hall of fame screen! useful for custom HUD.
 +
**0: display (default)
 +
**1: not display
  
  
colourdepth {int}bit
+
noshowcomplete {int}
*~This command is for activating true color mode.
+
*~set 1 you won't display the complete screen after NEXT! useful for custom HUD.
*~Accepted values for {int}bit are 8bit, 16bit and 32bit. Yes, 'bit' must be typed too.
+
**0: display (default)
*~It's 'colour' not 'color'.
+
**1: not display
  
 +
==Body==
  
video {int}
+
z {zmin} {zmax} {BGheight}
*~This command determines what video modes used by this mod.
+
*~Changes the location of stage boundaries.
*~If you are making long levels whose screen size is 480x240 (widescreen) or you're making high resolution mods, you must use this.
+
*~{xmin} is how high up entities can walk. It starts at the top and works down, so larger numbers mean less room. Defaults to 160.
*~Accepted values are:
+
*~{xmax} is how far down the character can walk. It also goes down from the top. Defaults to 232.
** 0 = 320x240 (default)
+
*~{BGheight} changes where the bottom of the background is drawn. Defaults to 160. By changing this value, you can make the background match an altered {xmin}.
** 1 = 480x272
+
*~This can be set once per level. You can change it between two stages. If you need to change it during a stage, you should combine it with the "wall" command in the stage itself.
** 2 = 640x480
+
*~You can spawn entities outside of this range, but once they enter the playing field they can't escape again.
** 3 = 720x480
 
** 4 = 800x480
 
** 5 = 800x600
 
** 6 = 960x540
 
*~This command can't be overriden in OpenBoR menu.
 
  
  
scenes {path}
+
file {path}
*~This command is used to define alternate path for widescreen scenes.
+
*~This command is for setting levels to play in a 'set'.
*~{path} points to folder containing those scenes. Note: defined path must end with slash (/).
+
*~{path} is the location of a .txt file which describes a level.
 +
*~Since this command only sets one level, you may need to declare more of this to set the other levels.
 +
*~If there are more than one 'file', levels are played from the 1st one to last until there are no more or meet 'end' (see below).
 +
*~Level to load here is declared with .txt. How to make and modify these texts are described in Level Files section below.
  
  
backgrounds {path}
+
scene {path}
*~This command is used to define alternate path for widescreen backgrounds.
+
*~This command is for setting cutscenes to play in a 'set'.
*~{path} points to folder containing those backgrounds. Note: defined path must end with slash (/).
+
*~{path} is the location of a .txt file which describes a cutscene.
 +
*~Since this command only sets one cutscene, you may need to declare more of this to set the other cutscenes.
 +
*~If there are more than one 'scene', cutscenes are played from the 1st one to last until there are no more or meet 'end' (see below).
 +
*~Cutscene to load here are declared with .txt. How to make and modify these texts are described in Cutscene Files section below.
  
  
levels {file}
+
select {path}
*~This command is used to define alternate file for alternate levels.txt.
+
*~This command is for setting select screen files to play in a 'set'.
*~{file} points to that file. The pointed file must be placed in directy under DATA folder like default levels.txt.
+
*~{path} is the location of a .txt file which sets custom select screen.
*~The rule to make alternate levels.txt is the same with making default one. See LEVELS.txt above.
+
*~This can be declared more than once in same game mode and playing order is from the 1st one to last one.
 +
*~Select screen to load here are declared with .txt. How to make and modify these texts are described in Select Screen Files section below.
  
  
models {file}
+
next
*~This command is used to define alternate file for alternate models.txt.
+
*~This command doesn't need any arguments.
*~{file} points to that file. The pointed file must be placed in directy under DATA folder like default models.txt.
+
*~When this command is reached, the Stage Complete scene will play, and Scores will be tallied.
*~The rule to make alternate models.txt is the same with making default one. See MODELS.txt above.
 
  
  
----
+
branch {name}
 +
*~Used to give name to warp destination for endlevel entities which uses 'branch'.
 +
*~{name} is the name of the destination.
 +
*~Used together with 'branch' feature (see below).
  
=Menu.txt=
 
  
*This text file is for modifying main menu. Currently there aren't many commands here but more commands will be added in the future. This file is optional.
+
end
*Menu.txt must be placed right under DATA folder if you're using it.
+
*~When this is reached, the game will end regardless of the levels after it.
 +
*~There's no point of using 'end' without 'branch' so use this together with 'branch'.
  
 +
----
  
renamekey {key} {newname}
+
=LIFEBAR.txt=
*~This command is for renaming key names. Useful and recommended to rename key if it is assigned for functions which is not described by its name. For instance, if 'attack2' is used for blocking, it would be best to rename it to 'block'.
 
*~{key} is the key whose name to be changed. Accepted inputs are: moveup, movedown, moveright, moveleft, attack, attack2, attack3, attack4, jump, special, start, screenshot. In case you don't know, those are names of all inputs in OpenBoR.
 
*~{newname} is the new name for the key. Don't forget to use underscore for spaces.
 
  
 +
*This text file is optional file for setting lifebar colors. This is for OpenBoR only though.
 +
*Lifebar.txt must be placed right under DATA folder and tt's lifebar.txt, not lifebars.txt.
 +
*{R}, {G} and {B} which are used below are color values from 0 to 255 for Red, Green, and Blue. If you don't know what that means, try thinking of them as brightnesses. If you had 0 255 0, then there would be no red, no blue, and all green, so you'd have green. If you had 0 0 0, there wouldn't be anything, and you'd have black. 255 255 255 would be all of everything, so it'd be white. 255 0 255 would be red + blue = purple. 128 128 128 would be halfway between white and black, so it'd be grey. *If it still doesn't make sense to you, try opening up Microsoft Paint, go to Colors -> Edit Colors -> Define Custom Colors. Try messing around with the Red, Blue, and Green values. It works like that. By the way, setting a color to the transparent color doesn't actually make it transparent.
 +
*The color settings must match one of the colors in the default pallete exactly. If your colors aren't correct, try decreasing every color value by 1- some programs report color values to be higher or lower depending on whether they start at 0 or 1.
 +
*However, if the mod is using truecolor mode (see video.txt below), all colors defined here will be true RGB colors. Which means, you don't need to check if they are available in global palette or not.
  
disablekey {key}
 
*~This command is for disabling keys. OpenBoR accepts more inputs now but it's possible not all of them are used (including old ones like special and jump) in the mod. It's best to disable not used keys so players won't have to define them.
 
*~{key} is the disabled key. Accepted inputs are: moveup, movedown, moveright, moveleft, attack, attack2, attack3, attack4, jump, special, start, screenshot. In case you don't know, those are names of all inputs in OpenBoR.
 
  
 +
blackbox {R} {G} {B}
 +
*~Determines the color of the 'shadow' around the lifebar and the bar at 500 health.
  
fontmonospace {1} {2} {3} {4} {5} {6} {7} {8}
 
*~This command sets whether font# is monospaced or not.
 
*~{1} refers to font.gif, {2} refers to font2.gif and so on.
 
*~Accepted values for them are:
 
** 0 = Variable width font (default).
 
** 1 = Monospaced.
 
  
----
+
whitebox {R} {G} {B}
 +
*~Determines the color of the outline around the lifebar and the bar at 600 health and up.
  
=Script.txt=
 
  
*This text file is for setting number of script variables. Currently there are only 4 commands. This file is optional.
+
color{#} {R} {G} {B}
*Script.txt must be placed right under DATA folder.
+
*~Determines used color by certain health value. For instance, 'color100' determines used color if health is 100 or less.
 +
*~There's no space between "color" and {#} in color{#}.
 +
*~{#} is the health value at which the color will be displayed and its possible values are 25, 50, 100, 200, 300, 400 and 500.
 +
*~color500 is also used as the background of the lifebar, and is displayed with transparency.
 +
*~If lifebar is displayed in percentage mode (see 'lbarsize' above for info about it), color reference changes to:
 +
**color25 = 0-20% health
 +
**color50 = 21-40% health
 +
**color100 = 41-60% health
 +
**color200 = 61-80% health
 +
**color300 = 81-100% health
 +
**color400 and color500 aren't used.
  
  
maxscriptvars {int}
+
colormagic {R} {G} {B}
*~Defines maximum number of variables in each script which is accessible by index.
+
*~Controls the color of the MP bar.
*~Use 'getscriptvar(index)' and 'setscriptvar(index,value)' to use these variables.
 
  
  
maxentityvars {int}
+
colormagic2 {R} {G} {B}
*~Defines maximum number of variables in each entity which is accessible by index.
+
*~When a player's MP bar is longer than their health, the extra MP is overlaid on top of the first bar in this color, like with health.
*~Use 'getentityvar(entity,index)' and 'setentityvar(entity,index,value)' to use these variables.
 
  
  
maxindexedvars {int}
+
shadowcolor {R} {G} {B}
*~Defines maximum number of global variables which is accessible by index.
+
*~Specify default gfxshadow color.
*~Use 'getindexedvar(index)' and 'setindexedvar(index,value)' to use these variables.
 
  
  
maxglobalvars {int}
+
----
*~Defines maximum number of global variables which is accessible by name.
 
*~Default value is 2048.
 
*~Use 'getglobalvar(name)', 'setglobalvar(name,value)', 'getlocalvar(name)' and 'setlocalvar(name,value)' to use these variables.
 
*~If there's no script in the mod, just set it to 0 or don't change it at all unless you know how big it should be.
 
  
 +
=VIDEO.txt=
  
----
+
*This text file is optional file for setting video, widescreen settings and true color mode. Yeah, its function can't be mentioned with just one word.
 
+
*Just like LIFEBAR.txt, it should be declared in DATA folder.
=Entity Files - Header Data=
 
  
*This text is for setting characters or entity's stats and animation. Obviously it's mandatory. Due to complexity and lots of features, this part is divided into 3 parts. This part is for entity's stats, 2nd part for animation types and 3rd one for animation settings. 2nd part describes what animations entity must have or could have.
 
  
*BTW Damon V. Caskey made a very complete [http://www.caskeys.com/nwn/forum/media/docs/character_template_001.txt Character Template] listing about any available data. This should help you to get started with your characters.
+
colourdepth {int}bit
 +
*~DEPRECIATED. All modules are displayed with a 32bit color screen.
 +
*~This command is for activating true color mode.
 +
*~Accepted values for {int}bit are 8bit, 16bit and 32bit. Yes, 'bit' must be typed too.
 +
*~It's 'colour' not 'color'.
  
** ''I've been using this template since starting work on mods, and have updated it gradually as new features came online.''
+
colourdepth {int}bit
**''It saves me a lot of time and hassle keeping my character animations organized, and I figured it might help someone else.''
 
  
 +
~ DEPRECIATED. All modules are displayed with a 32bit color screen
 +
~This command is for activating true color mode.
 +
~Accepted values for {int}bit are 8bit, 16bit and 32bit. Yes, 'bit' must be typed too.
 +
~It's 'colour' not 'color'.
  
==Basic Stats==
 
  
name {name}
+
video {int}
*~{name} is the name given to the entity by default.
+
*~This command determines what video modes used by this mod.
*~Used for every kind of entities.
+
*~If you are making long levels whose screen size is 480x240 (widescreen) or you're making high resolution mods, you must use this.
*~It is a string of 1 to 21 characters. You can actually use up to 40 characters, but the name will stretch off the screen or under the timer, making it look silly. You can also make the name even longer than that, but anything past 40 won't be displayed, so you'll really just be making your life harder.
+
*~Accepted values are:
*~If you really insist on having long name, you will have to reset the HUD display settings like name, score and time to make them displayed properly. See HUD settings in Levels.txt above for info.
+
**0 = 320x240 (default)
*~OpenBoR will crash on accessing the entity if you try to put a space in the name. You can safely use an underscore (_) instead.
+
**1 = 480x272
*~It is mandatory. How would OpenBoR access this entity if there's no name?
+
**2 = 640x480
*~Also avoid using same name for different entities, even if they aren't with same type. You would be confused too which one is actually wanted when they are loaded.
+
**3 = 720x480
 +
**4 = 800x480
 +
**5 = 800x600
 +
**6 = 960x540
 +
*~This command can't be overriden in OpenBoR menu.
  
  
type {type}
+
scenes {path}
*~{type}:
+
*~This command is used to define alternate path for widescreen scenes.
**player: The entity is a human-controlled player.
+
*~{path} points to folder containing those scenes. Note: defined path must end with slash (/).
**enemy: The entity is a CPU controlled enemy or enemy projectile.
 
**npc: The entity is a CPU controlled ally that will seek out and attack enemies. The entity is otherwise functionally identical to enemy entities with the chase subtype. You can  change the NPC allegiance via hostile setting. Npc types do not count toward groups.
 
**item: The entity is a stationary item which can be picked up. Items can only give one bonus per item. In other words, you can't make one item that both gives 2000 points AND gives a 1-up.
 
**none: The entity is a useless decoration.
 
**steamer: The entity constantly spews the object called Steam upwards with alpha transparency.
 
**obstacle: The entity is a stationary blockade which can (normally) be destroyed.
 
**text: The entity is a message object. When spawned, it will freeze all objects in play and show it's IDLE animation, then dissapear. It can be sped up by pressing attack or jump. Can be used for level intros, mid-level cutscenes, etc.
 
**trap: The entity is an obstacle which cannot be attacked. It can be made to attack, though, and will hit both players and enemies. If a trap is not set up to knock the entity down, the trap will only damage the entity one time. To hit them again, the target entity must take damage from another entity.
 
**endlevel: The entity is an item which, when touched by a player, will end the stage. It can be given a score value to be awarded for level completion.
 
**pshot: The type is outdated and does nothing. You can still use it, but it's ignored.
 
**panel:The entity will scroll together with level. If the entity's speed is 10, entity will stay with panel. If the speed is 5, it will stay with background (for direction left,right and both). This type is used to make multiple layers.
 
  
  
subtype {type}
+
backgrounds {path}
*~{type}:
+
*~This command is used to define alternate path for widescreen backgrounds.
**arrow: The entity flies from right to left off the screen. You can use the "flip" command when spawning it to make it fly left-to-right.
+
*~{path} points to folder containing those backgrounds. Note: defined path must end with slash (/).
**noskip: Used with text-type entities. It prohibits the player from using attack or jump to skip through text.
 
**weapon: Used for player weapons which can be picked up and used.
 
**biker: Used for Biker enemies. They fly left and right across the screen and must be knocked off their bikes to be stopped.
 
**notgrab: Does the same thing as the cantgrab command: the entity can't be grabbed.
 
**touch: For items. The item will be collected just by touching it. You won't need to press the attack button.
 
**flydie: For obstacles. When hit, the obstacle will fly horizontally offscreen while playing it's FALL animation.
 
**both: For endlevel items. If there are two players, both must be touching this item to end the stage.
 
**project: For items. When picked up, this entity is treated like a weapon which doesn't actually change any of the character's attributes except for their projectiles. Works for both players and enemies (if they have a GET animation).
 
**chase: For enemies and projectiles. If given to an enemy, he/she will walk towards player all the time. If player is far from the enemy, he/she will run instead. If given to projectile, it will become homing projectile.
 
**follow: For npcs. Will cause an npc to attempt to follow the entity that spawned or summoned it (see below). Uses range setting in idle animation to determine how close it will follow. If the npc exceeds the minimum range and no entities it is hostile towards are nearby, it will move to the spawning entity normally. If it exceeds maximum range, the npc will instantly warp to the spawning entity regardless of what it is currently doing and play it&#8217;s respawn animation if it has one. An npc without this subtype will behave exactly like an enemy with the chase subtype. It can potentially follow a hostile across the entire level, and will wander randomly if no hostiles are available.
 
  
  
health {int}
+
levels {file}
*~{int} is an integer, a number from -2147483647 to 2147483647 (which also happens to be (2^31)-1, if you're a math fan).
+
*~This command is used to define alternate file for alternate levels.txt.
*~This is the total amount of damage this entity can take before they die.
+
*~{file} points to that file. The pointed file must be placed in directy under DATA folder like default levels.txt.
*~Do not actually put a boss with 2147483647 health in your game. It's not funny. Seriously! even if there's no time limit, it would be very very boring.
+
*~The rule to make alternate levels.txt is the same with making default one. See LEVELS.txt above.
*~You can use decimal numbers, but it will always round down, so there's no real point.
 
*~If you use a value less than one or greater than 2147483647, the enemy starts off dead. Now that IS funny, but not neccessarily useful.
 
*~If the number is greater than the width of the life bar, the meter will "double up" the display (if you don't use percantage based lifebar that is). If you don't set lifebar.txt, this can make it hard to tell how much remaining life an entity has.
 
*~Not required, but it defaults to zero if it's not there, so that's kind of useless if you don't set it in the level's spawn point.
 
*~Used for players, enemies, items, projectiles, obstacles.
 
*~For items, this tells you how much life you regain when you pick it up.
 
  
  
mp {int}
+
models {file}
*~{int} is an integer, a number from -2147483647 to 2147483647.
+
*~This command is used to define alternate file for alternate models.txt.
*~This is the total amount of MP this entity begins with.
+
*~{file} points to that file. The pointed file must be placed in directy under DATA folder like default models.txt.
*~MP is drained by attacks set to drain MP. It can be recovered in several ways.
+
*~The rule to make alternate models.txt is the same with making default one. See MODELS.txt above.
*~You can use decimal numbers, but it will always round down, so there's no real point.
 
*~If the number is greater than the width of the life bar, the meter will "double up" the display. Since the MP bar is already pretty thin, this can make it hard to tell how much MP you have remaining sometimes.
 
*~Not required. If a player doesn't have it, they won't have an MP bar displayed.
 
*~Used for players and items.
 
*~For items, this tells you how much MP you regain when you pick it up.
 
  
  
speed {int}
+
----
*~{int} is a number from 5 to 300.
 
*~You can use numbers less than 5, but the entity will still move at the same speed. Same with using more than 300.
 
*~Somewhere between 100 and 300, the entity will gain the ability to run off the screen edges and out of the play area, killing it instantly. So that might not be a good idea.
 
*~Setting this to 0 will not stop an enemy from moving. You must use 'nomove' to do that.
 
*~Used for players, enemies, projectiles, and arrows.
 
*~This command doesn't support decimals though. For decimal value, use 'speedf' below.
 
  
 +
=Menu.txt=
  
speedf {float}
+
*This text file is for modifying main menu. Currently there aren't many commands here but more commands will be added in the future. This file is optional.
*~Determines entity's speed.
+
*Menu.txt must be placed right under DATA folder if you're using it.
*~This have same effect with 'speed' but this one allows {int} less than 5 even negative value.
 
*~Moreover, decimal values are allowed with this. However its value is 10 times speed's value. For instance, 'speedf 1.5' equals to 'speed 15'.
 
  
  
 +
renamekey {key} {newname}
 +
*~This command is for renaming key names. Useful and recommended to rename key if it is assigned for functions which is not described by its name. For instance, if 'attack2' is used for blocking, it would be best to rename it to 'block'.
 +
*~{key} is the key whose name to be changed. Accepted inputs are: moveup, movedown, moveright, moveleft, attack, attack2, attack3, attack4, jump, special, start, screenshot. In case you don't know, those are names of all inputs in OpenBoR.
 +
*~{newname} is the new name for the key. Don't forget to use underscore for spaces.
  
running {speed} {height} {length} {move} {land}
 
*~Determines the character's running abilities.
 
*~Used for players and enemies with subtype chase.
 
*~If present, players can run by pressing left or right twice and holding the button. The free special attack's input also changes to left, right, attack and right, left, attack. For enemies with subtype chase, this will enable their running ability.
 
*~If this is not present, the character will be unable to run.
 
*~{speed} is an integer value which works just like speed.
 
*~Actually, unlike normal speed, running speed can be greater than 300. Of course, you'd still run off an edge into oblivion if you tried to set a running speed that high.
 
*~{height} determines how high a character can jump (if at all) while running. It works like jumpheight.
 
*~{length} is an integer value which changes how far a character can jump while running. It is multiplied by the current jump length.
 
*~{move} is a binary value.
 
** 0 = (default) Character stops running if up or down is pressed. Running enemies can't move up or down.
 
** 1 = Character will continue running if up or down is pressed, but will also move up or down at an angle. Running enemies can move up or down.
 
*~{land} is a binary value. 0 means they stop running after landing from a running jump. 1 means they can continue running if the player holds forward during the jump.
 
  
 +
disablekey {key}
 +
*~This command is for disabling keys. OpenBoR accepts more inputs now but it's possible not all of them are used (including old ones like special and jump) in the mod. It's best to disable not used keys so players won't have to define them.
 +
*~{key} is the disabled key. Accepted inputs are: moveup, movedown, moveright, moveleft, attack, attack2, attack3, attack4, jump, special, start, screenshot. In case you don't know, those are names of all inputs in OpenBoR.
  
nomove {move} {flip}
 
*~Can be used to make a stationary enemy (one who does not move).
 
*~{move} is a binary value which determines if the enemy can or can't move. Setting it to 0 doesn't do anything, but setting it to 1 stops the enemy from moving.
 
*~{flip} is a binary value which determines if enemies can turn around to face players behind them.
 
*~If {move} is set to 1, the enemy's speed will default to 0.
 
  
 +
fontmonospace {1} {2} {3} {4} {5} {6} {7} {8}
 +
*~This command sets whether font# is monospaced or not.
 +
*~{1} refers to font.gif, {2} refers to font2.gif and so on.
 +
*~Accepted values for them are:
 +
**0 = Variable width font (default).
 +
**1 = Monospaced.
  
jumpspeed {int}
+
----
*~This command determines entity's jump speed. This entity must be able to jump obviously.
 
*~This command doesn't support decimals though. For decimal value, use 'jumpspeedf' below.
 
  
 +
=Script.txt=
  
jumpspeedf {float}
+
*This text file is for setting number of script variables. Currently there are only 6 commands. This file is optional.
*~This command determines entity's jump speed.
+
*Script.txt must be placed right under DATA folder.
*~This command supports decimals. However its value is 10 times jumpspeed's value. For instance, 'jumpspeedf 1.5' equals to 'jumpspeed 15'.
 
  
  
jumpheight {int}
+
maxscriptvars {int}
*~{int} is an integer value which determines how high an entity jumps.
+
*~Defines maximum number of variables in each script which is accessible by index.
*~The default value is 4.
+
*~Use 'getscriptvar(index)' and 'setscriptvar(index,value)' to use these variables.
*~An entity's jumpheight also affects how far it flys when knocked down, and how high and far jumpframe moves you.
 
*~For Bomb entities, this controls how high the bomb arcs into the air.
 
  
  
jumpmove {fx} {fz}
+
maxentityvars {int}
*~This allows Player to modify player's jump movement.
+
*~Defines maximum number of variables in each entity which is accessible by index.
*~{fx} determines effect in x axis:
+
*~Use 'getentityvar(entity,index)' and 'setentityvar(entity,index,value)' to use these variables.
** 0 = (default) No effect.
+
 
** 1 = Left/Right changes facing direction during jump.
+
 
** 2 = Left/Right changes jumping speed during jump (doesn't work with static jump).
+
maxindexedvars {int}
** 3 = Combination of 1 and 2.
+
*~Defines maximum number of global variables which is accessible by index.
*~{fz} determines effect in z axis:
+
*~Use 'getindexedvar(index)' and 'setindexedvar(index,value)' to use these variables.
** 0 = (default) No effect.
 
** 1 = Walking/running momentum is carried during jump.
 
** 2 = Up/Down changes jumping speed during jump (doesn't work with static jump).
 
** 3 = Combination of 1 and 2.
 
  
  
turndelay {int}
+
maxglobalvars {int}
*~ This sets how long the character performs BACKWALK before turning back.
+
*~Defines maximum number of global variables which is accessible by name.
*~ {int} is time in centiseconds.
+
*~Default value is 2048.
*~ This is used together with TURN and BACKWALK.
+
*~Use 'getglobalvar(name)', 'setglobalvar(name,value)', 'getlocalvar(name)' and 'setlocalvar(name,value)' to use these variables.
 +
*~If there's no script in the mod, just set it to 0 or don't change it at all unless you know how big it should be.
  
  
facing {int}
+
alwaysupdate {bi}
*~ This is for forcing the entity to face certain direction regardless where he/she is going.
+
*~This command sets when update.c script is run
**0 = no force (default).
+
**0 = Only run update.c when game starts
**1 = force the entity to face right.
+
**1 = Run update.c anytime including menu, scene, select screen etc
**2 = force the entity to face left.
+
*~Use this command together with update.c of course
**3 = force the entity to face same direction with level's direction.
 
*~ Setting this allows players to play BACKWALK.
 
  
 +
nocmdcompatible {bi}
 +
*~ When nocmdcompatible is enabled, the engine will try to merge @cmd within the same frame, which may not be compatible with old mod, so use with caution. Defaults to 0.
 +
*~ Example:
 +
<pre>
 +
@cmd f1
 +
@cmd f2
 +
@cmd f3
 +
frame data/chars/ffff/1.gif
 +
</pre>
  
chargerate {int}
 
*~Determines how fast MP recharge with CHARGE animation would be. Default value is 2.
 
  
 +
*~Before:
 +
<pre>
 +
if(frame==3)
 +
{
 +
    f1();
 +
}
 +
if(frame==3)
 +
{
 +
    f2();
 +
}
 +
if(frame==3)
 +
{
 +
    f3();
 +
}
 +
</pre>
 +
*~Now:
  
mprate {int}
+
<pre>
*~This sets how many MP player recovers (by time and by hitting enemy)
+
if(frame==3)
*~If typemp = 1, this is the amount MP player recover from hitting enemy.
+
{
*~If typemp = 2, this is the amount MP player recover on regular intervals.
+
    f1();
 +
    f2();
 +
    f3();
 +
    return;
 +
}
 +
</pre>
  
 +
----
  
mpset {mp} {stable type} {stable} {recover rate} {drop rate} {charge rate}
+
=Entity Files - Header Data=
*~This command determines how MP works for this entity. It's combination of many existing features actually but it has new features
 
*~{mp} sets maximum MP (just like 'mp' command)
 
*~{stable type} sets MP recovery type:
 
** 0 = Entity continuously recovers mp over time. Default.
 
** 1 = Entity recovers mp over time, up to value defined by {stable}
 
** 2 = Entity loses mp over time, down to defined by {stable}
 
** 3 = Entity recovers mp over time if below value defined by {stable}, and looses mp over time if above defined {stable}
 
** 4 = Entity starts his/her mp at maximum value, then it will drop steadily to {stable}. After it's reached, the cycle restarts.
 
*~{stable} sets stable MP value. Only usable if {stable type} is not set to 0
 
*~{recover rate} sets MP recovery rate
 
*~{drop rate} sets MP loss rate
 
*~{charge rate} sets MP recharge rate while entity is charging
 
  
 +
*This text is for setting characters or entity's stats and animation. Obviously it's mandatory. Due to complexity and lots of features, this part is divided into 3 parts. This part is for entity's stats, 2nd part for animation types and 3rd one for animation settings. 2nd part describes what animations entity must have or could have.
  
==Grab & Throw==
+
*By the way, Damon V. Caskey made a very complete Character Template
 +
[http://www.caskeys.com/nwn/forum/media/docs/character_template_001.txt Character Template] listing about any available data. This should help you to get started with your characters.
  
grabdistance {int}
+
**I've been using this template since starting work on mods, and have updated it gradually as new features came online./
*~{int} determines many things:
+
**It saves me a lot of time and hassle keeping my character animations organized, and I figured it might help someone else./
*~How close this entity must be to another to grab it.
 
*~How far away this entity will stand while holding an enemy.
 
*~How deep this character's attack range is in z axis. This is overriden by 'rangez' and 'attack' (see below).
 
*~How close this entity must get to be stopped by obstacles or pick up items.
 
*~How close other entities must be to be damaged or blocked by this trap/obstacle.
 
*~The default value is 36.
 
  
  
grabback {bi}
+
==Basic Stats==
*~If set to 1, when grabbing, this entity will be displayed behind the other entity being grabbed.
 
  
 +
name {name}
 +
*~{name} is the name given to the entity by default.
 +
*~Used for every kind of entities.
 +
*~It is a string of 1 to 21 characters. You can actually use up to 40 characters, but the name will stretch off the screen or under the timer, making it look silly. You can also make the name even longer than that, but anything past 40 won't be displayed, so you'll really just be making your life harder.
 +
*~If you really insist on having long name, you will have to reset the HUD display settings like name, score and time to make them displayed properly. See HUD settings in Levels.txt above for info.
 +
*~OpenBoR will crash on accessing the entity if you try to put a space in the name. You can safely use an underscore (_) instead.
 +
*~It is mandatory. How would OpenBoR access this entity if there's no name?
 +
*~Also avoid using same name for different entities, even if they aren't with same type. You would be confused too which one is actually wanted when they are loaded.
  
grabfinish {bi}
 
*~This command determines whether entity's GRAB animation is interruptible or not (see GRAB below).
 
** 0 = Interruption is possible (default). If enemies use this, they will skip the rest of animation after they knockdown opponent. It's not recommended for enemies.
 
** 1 = Interruption is not possible. For players, they must wait their GRAB animation to finish before they can perform any grabattacks. For enemies, they'll  finish their GRAB animation.
 
*~Use this with GRAB animation of course.
 
  
 
+
type {type}
grabwalk {bi}
+
*~{type}:
*~Determines grabwalking speed. If not declared, entity's walking speed will be used instead.
+
**player: The entity is a human-controlled player.
*~You need to declare GRABWALK to use this obviously.
+
**enemy: The entity is a CPU controlled enemy or enemy projectile.
 +
**npc: The entity is a CPU controlled ally that will seek out and attack
 +
**enemies. The entity is otherwise functionally identical to enemy entities with the chase subtype. You can change the NPC allegiance via hostile setting. Npc types do not count toward groups.
 +
**item: The entity is a stationary item which can be picked up. Items can only give one bonus per item. In other words, you can't make one item that both gives 2000 points AND gives a 1-up.
 +
**none: The entity is a useless decoration.
 +
**steamer: The entity constantly spews the object called Steam upwards with alpha transparency.
 +
**obstacle: The entity is a stationary blockade which can (normally) be destroyed.
 +
**text: The entity is a message object. When spawned, it will freeze all objects in play and show it's *IDLE* animation, then dissapear. It can be sped up by pressing attack or jump. Can be used for level intros, mid-level cutscenes, etc.
 +
**trap: The entity is an obstacle which cannot be attacked. It can be made to attack, though, and will hit both players and enemies. If a trap is not set up to knock the entity down, the trap will only damage the entity one time. To hit them again, the target entity must take damage from another entity.
 +
**endlevel: The entity is an item which, when touched by a player, will end the stage. It can be given a score value to be awarded for level completion.
 +
**pshot: The type is outdated and does nothing. You can still use it, but it's ignored.
 +
**panel:The entity will scroll together with level. If the entity's speed is 10, entity will stay with panel. If the speed is 5, it will stay with background (for direction left,right and both). This type is used to make multiple layers.
  
  
grabturn {bi}
+
subtype {type}
*~Determines whether entity can turn around or not when grabbing opponent.
+
*~{type}:
**0=no turning (default).
+
**arrow: The entity flies from right to left off the screen. You can use the "flip" command when spawning it to make it fly left-to-right.
**1=turns around.
+
**noskip: Used with text-type entities. It prohibits the player from using attack or jump to skip through text.
*~If you haven't figure it out, entity turns around if back is pressed while grabbing. Back is opposite of facing direction.
+
**weapon: Used for player weapons which can be picked up and used.
*~If GRABTURN is available, it will be played while turning.
+
**biker: Used for Biker enemies. They fly left and right across the screen and must be knocked off their bikes to be stopped.
 +
**notgrab: Does the same thing as the cantgrab command: the entity can't be grabbed.
 +
**touch: For items. The item will be collected just by touching it. You won't need to press the attack button.
 +
**flydie: For obstacles. When hit, the obstacle will fly horizontally offscreen while playing it's FALL animation.
 +
**both: For endlevel items. If there are two players, both must be touching this item to end the stage.
 +
**project: For items. When picked up, this entity is treated like a weapon which doesn't actually change any of the character's attributes except for their projectiles. Works for both players and enemies (if they have a GET animation).
 +
**chase: For enemies and projectiles. If given to an enemy, he/she will walk towards player all the time. If player is far from the enemy, he/she will run instead. If given to projectile, it will become homing projectile.
 +
**follow: For npcs. Will cause an npc to attempt to follow the entity that spawned or summoned it (see below). Uses range setting in *idle* animation to determine how close it will follow. If the npc exceeds the minimum range and no entities it is hostile towards are nearby, it will move to the spawning entity normally. If it exceeds maximum range, the npc will instantly warp to the spawning entity regardless of what it is currently doing and play it’s respawn animation if it has one. An npc without this subtype will behave exactly like an enemy with the chase subtype. It can potentially follow a hostile across the entire level, and will wander randomly if no hostiles are available.
 +
**boomerang: The entity you can spawn (with spawnframe for example) with subtype boomerang, will have automatic aimove boomerang and it will active for the owner animations: getboomerang, getboomeranginair.  
  
  
cantgrab {bi}
+
health {int}
*~{bi} determines whether or not an entity can be grabbed and held (or thrown).
+
*~{int} is an integer, a number from -2147483647 to 2147483647 (which also happens to be (2^31)-1, if you're a math fan).
*~If set to 1, opponent who stand close to this entity will simply pass through.
+
*~This is the total amount of damage this entity can take before they die.
 +
*~Do not actually put a boss with 2147483647 health in your game. It's not funny. Seriously! even if there's no time limit, it would be very very boring.
 +
*~You can use decimal numbers, but it will always round down, so there's no real point.
 +
*~If you use a value less than one or greater than 2147483647, the enemy starts off dead. Now that IS funny, but not neccessarily useful.
 +
*~If the number is greater than the width of the life bar, the meter will "double up" the display (if you don't use percantage based lifebar that is). If you don't set lifebar.txt, this can make it hard to tell how much remaining life an entity has.
 +
*~Not required, but it defaults to zero if it's not there, so that's kind of useless if you don't set it in the level's spawn point.
 +
*~Used for players, enemies, items, projectiles, obstacles.
 +
*~For items, this tells you how much life you regain when you pick it up.
  
  
paingrab {bi}
+
mp {int}
*~For enemies.
+
*~{int} is an integer, a number from -2147483647 to 2147483647.
*~Determines whether the enemy can be grabbed normally or only in pain animation.
+
*~This is the total amount of MP this entity begins with.
** 0 (default) = enemy can be grabbed normally, if the enemy is grabbable that is.
+
*~MP is drained by attacks set to drain MP. It can be recovered in several ways.
** 1 = enemy can only be grabbed in pain animation, if the enemy is grabbable that is.
+
*~You can use decimal numbers, but it will always round down, so there's no real point.
 +
*~If the number is greater than the width of the life bar, the meter will "double up" the display. Since the MP bar is already pretty thin, this can make it hard to tell how much MP you have remaining sometimes.
 +
*~Not required. If a player doesn't have it, they won't have an MP bar displayed.
 +
*~Used for players and items.
 +
*~For items, this tells you how much MP you regain when you pick it up.
  
  
antigrab {value}
+
speed {int}
*~This command sets entity's resistance to grabbing attempt by opponent. To grab this entity, opponent's 'grabforce' must equal or more than {value}.
+
*~{int} is a number from 5 to 300.
*~Used in conjuction with 'grabforce'.
+
*~You can use numbers less than 5, but the entity will still move at the same speed. Same with using more than 300.
 +
*~Somewhere between 100 and 300, the entity will gain the ability to run off the screen edges and out of the play area, killing it instantly. So that might not be a good idea.
 +
*~Setting this to 0 will not stop an enemy from moving. You must use 'nomove' to do that.
 +
*~Used for players, enemies, projectiles, and arrows.
 +
*~This command doesn't support decimals though. For decimal value, use 'speedf' below.
  
  
grabforce {value}
+
speedf {float}
*~This command sets entity's power to grab an opponent. This entity will have success grab if opponent's 'antigrab' is equal or less than {value}.
+
*~Determines entity's speed.
*~Used in conjuction with 'antigrab'.
+
*~This have same effect with 'speed' but this one allows {int} less than 5 even negative value.
 +
*~Moreover, decimal values are allowed with this. However its value is 10 times speed's value. For instance, 'speedf 1.5' equals to 'speed 15'.
  
  
throwdamage {int}
+
running {speed} {height} {length} {move} {land}
*~Changes the amount of damage this entity recieves if it gets thrown.
+
*~Determines the character's running abilities.
*~Defaults to 21.
+
*~Used for players and enemies with subtype chase.
 
+
*~If present, players can run by pressing left or right twice and holding the button. The free special attack's input also changes to left, right, attack and right, left, attack. For enemies with subtype chase, this will enable their running ability.  
 
+
*~If this is not present, the character will be unable to run.
throw {dist} {height}
+
*~{speed} is an integer value which works just like speed.
*~Controls the angle at which this player or enemy flies if they get thrown.
+
*~Actually, unlike normal speed, running speed can be greater than 300. Of course, you'd still run off an edge into oblivion if you tried to set a running speed that high.
*~{dist} is the distance that this entity will fly.
+
*~{height} determines how high a character can jump (if at all) while running. It works like jumpheight.
*~{height} controls how high off the ground this entity will get before it starts falling back down.
+
*~{length} is an integer value which changes how far a character can jump while running. It is multiplied by the current jump length.
 +
*~{move} is a binary value.
 +
** 0 = (default) Character stops running if up or down is pressed. Running enemies can't move up or down.
 +
** 1 = Character will continue running if up or down is pressed, but will also move up or down at an angle. Running enemies can move up or down.
 +
*~{land} is a binary value. 0 means they stop running after landing from a running jump. 1 means they can continue running if the player holds forward during the jump.
  
  
throwframewait {frame}
+
nomove {move} {flip}
*~Sets at which frame in character's throwing animation, throwing will start.
+
*~Used to make a stationary player, enemy or static projectile (one who does not move). For players and enemies, this prohibits them from using WALK animation thus preventing to move.
 +
*~{move} is a binary value which determines if the enemy can or can't move.
 +
** 0 = Enemy walk with WALK, projectile move normally
 +
** 1 = Enemy doesn't walk at all, projectile stays. Entity speed becomes 0.
 +
*~NOTE: Even if {move} is set to 1, entity can still be moved with 'move', jumpframe or script.
 +
~By default, enemy adjusts facing direction to face entities they hostile to (opponents). {flip} is a binary value which determines if enemy can turn around to face opponents if the latter stand behind them.
 +
** 0 = Enemy turn around
 +
** 1 = Enemy don't turn around at all
 +
*~If {flip} is set to 1, enemies will face direction set by 'facing' (see below) or to direction given to them in level texts(See 'flip' command in Level Objects below).
 +
*~NOTE: Even if {flip} is set to 1, entity can still be flipped with flipframe or script.
  
  
==Terrain Interaction==
+
jumpspeed {int}
 +
*~This command determines entity's jump speed. This entity must be able to jump obviously.
 +
*~This command doesn't support decimals though. For decimal value, use 'jumpspeedf' below.
  
height {alt}
 
*~Affects an entity's ability to walk under platforms.
 
*~If the platform is higher off the ground than this entity's height, this entity can move under it. Otherwise, it will get pushed out. However if somehow entity get stuck under platforms which are shorter, entity can only change direction and slide (see Animation Types below).
 
*~{alt} is measured from the offset point up.
 
*~This setting applies to all animation. If you want certain animations to have different heights use 'animheight' (see Animation Data).
 
  
 +
jumpspeedf {float}
 +
*~This command determines entity's jump speed.
 +
*~This command supports decimals. However its value is 10 times jumpspeed's value. For instance, 'jumpspeedf 1.5' equals to 'jumpspeed 15'.
  
antigravity {value}
 
*~This command determines how strong this entity resists gravity.
 
*~Value is in percent so setting 100 makes the entity never fall after jumping.
 
  
 +
jumpheight {int}
 +
*~{int} is an integer value which determines how high an entity jumps.
 +
*~The default value is 4.
 +
*~An entity's jumpheight also affects how far it flys when knocked down, and how high and far jumpframe moves you.
 +
*~For Bomb entities, this controls how high the bomb arcs into the air.
  
bounce {bi}
 
*~Determines whether entity will bounce or not after touches ground after falling.
 
**0 = No bounce effect
 
**1 = Bounce effect is set
 
  
 +
jumpmove {fx} {fz}
 +
*~This allows Player to modify player's jump movement.
 +
*~{fx} determines effect in x axis:
 +
** 0 = (default) No effect.
 +
** 1 = Left/Right changes facing direction during jump.
 +
** 2 = Left/Right changes jumping speed during jump (doesn't work with static jump).
 +
** 3 = Combination of 1 and 2.
 +
*~{fz} determines effect in z axis:
 +
** 0 = (default) No effect.
 +
** 1 = Walking/running momentum is carried during jump.
 +
** 2 = Up/Down changes jumping speed during jump (doesn't work with static jump).
 +
** 3 = Combination of 1 and 2.
  
noquake {bi}
+
walkoffmove {fx} {fz}
*~Determines whether or not the screen shakes if the entity hits the ground after being thrown.
+
*~This allows Player to modify player's walkoff movement.
**0 = it shakes. Defaults to 0.
+
*~it works like jumpmove {fx} {fz} and params are the same meaning.
**1 = it doesn't shake.
 
 
 
 
 
no_adjust_base {bi}
 
*~This command determines how terrain effect entity's base altitude.
 
*~Example of terrains are platforms, walls and holes.
 
** 0 = Terrain can effect entity. Default for most entities.
 
** 1 = Terrain can't effect entity. Default for arrows.
 
 
 
  
subject_to_wall {bi}
+
turndelay {int}
*~This command determines how walls effect entity.
+
*~ This sets how long the character performs BACKWALK before turning back.
** 0 = Walls don't have any effect. Default for projectiles.
+
*~ {int} is time in centiseconds.
** 1 = Walls have effects. Default for most entities.
+
*~ This is used together with TURN and BACKWALK.
*~This should be used by AI controlled entities.
 
  
  
subject_to_hole {bi}
+
facing {int}
*~This command determines how holes effect entity.
+
*~ This is for forcing the entity to face certain direction regardless where he/she is going.
** 0 = Entity can't fall to holes.
+
** 0 = no force (default).
** 1 = Entity can fall to holes. Default for most entities.
+
** 1 = force the entity to face right.
*~Aside from above, this command has more effect for enemies.
+
** 2 = force the entity to face left.
** 0 = Enemy can walk to holes.
+
** 3 = force the entity to face same direction with level's direction.
** 1 = Enemy can't walk to holes. Default for most enemies.
+
*~ Setting this allows players to play BACKWALK.
*~For your information, by default enemies can't walk to holes. It's as if holes are walls for enemies. They can jump , fall or move to holes though.
 
  
  
subject_to_obstacle {bi}
+
chargerate {int}
*~This command determines how obstacles effect entity.
+
*~Determines how fast MP recharge with CHARGE animation would be. Default value is 2.
** 0 = Obstacles don't have any effect. Default for projectiles.
 
** 1 = Obstacles have effects. Default for most entities.
 
*~This should be used by AI controlled entities.
 
  
  
subject_to_platform {bi}
+
mprate {int}
*~This command determines how platform effect entity.
+
*~This sets how many MP player recovers (by time and by hitting enemy)
** 0 = Platforms don't have any effect. Default for projectiles.
+
*~If typemp = 1, this is the amount MP player recover from hitting enemy.
** 1 = Platforms have effects. Default for most entities.
+
*~If typemp = 2, this is the amount MP player recover on regular intervals.
*~This should be used by AI controlled entities.
 
  
  
subject_to_gravity {bi}
+
mpset {mp} {stable type} {stable} {recover rate} {drop rate} {charge rate}
*~This command determines how gravity effect entity.
+
*~This command determines how MP works for this entity. It's combination of many existing features actually but it has new features
** 0 = Gravity don't have any effect.
+
*~{mp} sets maximum MP (just like 'mp' command)
** 1 = Gravity have effects. Default for most entities.
+
*~{stable type} sets MP recovery type:
 +
** 0 = Entity continuously recovers mp over time. Default.
 +
** 1 = Entity recovers mp over time, up to value defined by {stable}
 +
** 2 = Entity loses mp over time, down to defined by {stable}
 +
** 3 = Entity recovers mp over time if below value defined by {stable}, and looses mp over time if above defined {stable}
 +
** 4 = Entity starts his/her mp at maximum value, then it will drop steadily to {stable}. After it's reached, the cycle restarts.
 +
*~{stable} sets stable MP value. Only usable if {stable type} is not set to 0
 +
*~{recover rate} sets MP recovery rate
 +
*~{drop rate} sets MP loss rate
 +
*~{charge rate} sets MP recharge rate while entity is charging
 +
 
  
 +
edelay {Mode} {Factor} {Cap Min} {Cap Max} {Range Min} {Range Max}
 +
*~Adjusts entity's delay in all animations. Very useful if you want to make Haste or Slow effect ala Dungeon & Dragons without making new models.
 +
*~{Mode} defines how {factor} is applied to delay.
 +
** 0 = Original delay + {factor}
 +
** 1 = Original delay * {factor}
 +
*~{Factor} is the value you want to apply to delay.
 +
*~{Cap Min} is possible shortest delay.
 +
*~{Cap Max} is possible longest delay.
 +
*~{Range Min} is the shortest original delay that will be adjusted. Useful to prevent short delays such as 1 centisecond delay to be shortened.
 +
*~{Range Max} is the longest original delay that will be adjusted. Useful to prevent long delays such as 500 centiseconds delay to be extended.
  
subject_to_screen {bi}
 
*~This command determines whether entity can move offscreen or not.
 
** 0 = Entity can move offscreen. Default for non-player entities.
 
** 1 = Entity can't move offscreen. Default for players.
 
  
 +
nohithead {int}
 +
*~set nohithead 1 in entity.txt and even if you set an height for the entity, if it hit a platform with nohithead param set to 1, the entity will not block with head by a platform. But this platform will be walkable however. default is 0
  
subject_to_minz {int}
 
*~This command toggles minimum Z bounding for entity on field.
 
** 0 = Entity can't move beyond current zmin or minimum z. Default for most entities.
 
** 1 = Entity can move beyond current zmin or minimum z. Default for panel type entities.
 
  
 +
backpain {int}
 +
*~set backpain 1 in entity.txt to activate all backpain animations
  
subject_to_maxz {int}
 
*~This command toggles maximum Z bounding for entity on field.
 
** 0 = Entity can't move beyond current zmax or maximum z. Default for most entities.
 
** 1 = Entity can move beyond current zmax or maximum z. Default for panel type entities.
 
  
 +
summonkill {type}
 +
*~Entity header command. Determines behavior of any sub entities on screen that consider this entity as a Parent if this entity is killed.
 +
*~{type}
 +
*~Default: 0
 +
*~Behavior type.
 +
**0: Do nothing.
 +
**1: Kill only sub entities spawned with the Summon command.
 +
**2: Kill all sub entities.
  
==Entity Interaction==
 
  
aggression {value}
+
cmd {sequence of inputs} {freespecial#}
*~For enemies, this command modifies pausetime for enemy before they attack after player is within attack range.  
+
*~This command allows animation change by inputting sequence of inputs to certain freespecial. In other word, cancel. Obviously it's only for players.
*~Positive value reduces pausetime making the enemy reacts faster.  
+
*~{sequence of inputs} defines input sequence required to activate the freespecial. The accepted values here is exactly same with 'com' command in Entity Files: Header Date above.
*~Negative value increase pausetime making the enemy reacts slower.
+
*~{freespecial#} defines the freespecial to be played after input sequence is valid. Don't forget to set 'maxfreespecials' (see models.txt above) if you need more freespecials to access.
 +
*~Technically, the animation cancelling is like this: when valid sequence is accepted, this animation will stop immediately and defined freespecial will be played.
 +
*~{sequence of inputs} now accepts "+" to add mutiple commands. Examples:
  
 +
<pre>
 +
a + a2
 +
u + f a
 +
u + f -> a
 +
"->" symbol useful just for better reading
 +
</pre>
  
hitenemy {canhit} {alt}
+
==Grab & Throw==
*~For enemy's projectile entities.
 
*~If {canhit} is 1, this entity can hit other enemies, even if they threw this. Obviously, it still can hit players as well.
 
*~If {canhit} is 0 or left out, this entity can only hit heros.
 
*~If this entity is thrown as a bomb, it won't be able to hit the enemy who threw it until AFTER it explodes.
 
*~{alt} determines when this entity can hit other enemies: 0 means it can hit either while in air or on the ground. 1 means the attack can only hit on the ground.
 
  
 +
grabdistance {int}
 +
*~{int} determines many things:
 +
*~How close this entity must be to another to grab it.
 +
*~How far away this entity will stand while holding an enemy.
 +
*~How deep this character's attack range is in z axis. This is overriden by 'rangez' and 'attack' (see below).
 +
*~How close this entity must get to be stopped by obstacles or pick up items.
 +
*~How close other entities must be to be damaged or blocked by this trap/obstacle.
 +
*~The default value is 36.
  
aimove {type}
 
*~This command sets enemy's walk AI. IOW it sets how enemy walks around in levels.
 
*~Possible types for {type} are:
 
**Chase = Enemy will always chase player and this allows enemy to use RUN and RUNATTACK if enemy has it.
 
**Chasex = Enemy will chase player but it only lines up enemy's X axis with player's.
 
**Chasez = Enemy will chase player but it only lines up enemy's Z axis with player's.
 
**Avoid = Enemy will always avoid player.
 
**Avoidx = Enemy will always avoid player but enemy only avoids lining up X axis with player's.
 
**Avoidz = Enemy will always avoid player but enemy only avoids lining up Z axis with player's.
 
**Wander = Enemy walks without certain destination (hence the name).
 
**Ignoreholes = Enemy walks without ignoring holes. This makes enemy walks to holes stupidly.
 
  
 +
grabback {bi}
 +
*~If set to 1, when grabbing, this entity will be displayed behind the other entity being grabbed.
  
hostile {type1} {type2} ...
 
*~Optional.
 
*~Specifies what types an AI controlled entity will attack and what entities a projectile with the chase subtype will seek (this does not determine what the entity can hit, only what it will intentionally attack).
 
*~Available types are enemy, player, npc, obstacle, shot and you can use as many as you need. If you want entity to be hostile to nothing, just set 'none' here.
 
*~Be aware if you use this setting, you must provide all types you wish this entity to be hostile towards. That is to say, an enemy with &#8216;hostile npc obstacle&#8217; will only attack npc and obstacle types, not players.
 
  
 +
grabfinish {bi}
 +
*~This command determines whether entity's GRAB animation is interruptible or not (see GRAB below).
 +
** 0 = Interruption is possible (default). If enemies use this, they will skip the rest of animation after they knockdown opponent. It's not recommended for enemies.
 +
** 1 = Interruption is not possible. For players, they must wait their GRAB animation to finish before they can perform any grabattacks. For enemies, they'll finish their GRAB animation.
 +
*~Use this with GRAB animation of course.
  
candamage {type1} {type2} ...
 
*~Optional.
 
*~Specifies what types this entity can hit (very similar to hostile, but determines what entity may hit, not what it will intentionally target). 
 
*~Available types are enemy, player, npc, obstacle, shot and you can use as many as you need. If you don't want entity to hit anything, just set 'none' here.
 
*~Be aware if you use this setting, you must provide all types you wish this entity to be able to hit. That is to say, an enemy with &#8216;candamage npc obstacle&#8217; will be able to hit npc and obstacle types, not players.
 
  
 +
grabwalk {bi}
 +
*~Determines grabwalking speed. If not declared, entity's walking speed will be used instead.
 +
*~You need to declare GRABWALK to use this obviously.
  
projectilehit {type1} {type2} ...
+
 
*~Optional.
+
grabturn {bi}
*~Do not let the name confuse you, this is not for projectiles. This setting specifies what types this entity will hit when thrown from a grab.  
+
*~Determines whether entity can turn around or not when grabbing opponent.
*~Available types are enemy, player, npc, obstacle, shot and you can use as many as you need. If you don't want entity to hit anything, just set 'none' here.
+
** 0=no turning (default).
*~Be aware if you use this setting, you must provide all types you wish this entity to be able to hit when thrown. That is to say, an enemy with &#8216;projectilehit player&#8217; will only hit players when thrown, not other enemies.
+
** 1=turns around.
 +
*~If you haven't figure it out, entity turns around if back is pressed while grabbing. Back is opposite of facing direction.
 +
*~If GRABTURN is available, it will be played while turning.
  
  
==Remap==
+
cantgrab {bi}
 
+
*~{bi} determines whether or not an entity can be grabbed and held (or thrown).
remap {path1} {path2}
+
*~If set to 1, opponent who stand close to this entity will simply pass through.
*~Allows you to create alternate palletes for entities.
 
*~Each entity can have up to 14 palletes.
 
*~{path1} is a sprite of an entity in their normal pallete. {path2} is a sprite of the entity in an alternate pallete.
 
*~You should not change the file's pallete. The only changes should be to the pixels in the image, not the pallete data.
 
*~Player 2 normally uses the first alternate pallete, but both players can select their color when choosing a character with up and down if the colourselect option is on.
 
*~If your entity has sprites with incorrect colors in alternate palletes, the entity may use colors which are not in {path1}. Check the frames with incorrect colors and compare them. Then just add the colors somewhere in {path1} and the new colors in the same position in {path2}. If that sounds confusing, look at K9999's remaps. That's what I mean.
 
*~In truecolormode (see video.txt above), this command works same way. However, the 1st 128 colours in global palette or in data/pal.act will also be loaded as default palette or entity (if 'palette' (above) is not used).
 
*~If there's no global palette, 'palette' will have to be declared. New palette will be created from colours in default palette.
 
  
  
fmap {int}
+
paingrab {bi}
*~{int} determines which remap to use by the entity if it gets frozen by an freeze attack (See 'freeze' for more info about freeze attack).
+
*~For enemies.
*~You have to declare that remap with 'remap' before using this obviously.
+
*~Determines whether the enemy can be grabbed normally or only in pain animation.
*~If hero has 'fmap' set, the respective remap can't be selected at select screen and continue option.
+
** 0 (default) = enemy can be grabbed normally, if the enemy is grabbable that is.
*~If enemy has 'fmap' set, the respective remap can be used in levels. You might want to avoid using the remap unless you want to see Icemen on your levels.
+
** 1 = enemy can only be grabbed in pain animation, if the enemy is grabbable that is.
  
  
palette {path}
+
antigrab {value}
*~This is to set default palette for this entity. ONLY compatible with truecolor mode (see video.txt above)!.
+
*~This command sets entity's resistance to grabbing attempt by opponent. To grab this entity, opponent's 'grabforce' must equal or more than {value}.
*~{path} is the location of the image whose palette will be used as default palette. The {path} is relative to OpenBoR.
+
*~Used in conjuction with 'grabforce'.
*~If truecolor mode is set but this command is not declared, the 1st image/frame of the entity will be used instead.
 
*~Used in conjunction with 'alternatepal' below.
 
  
  
alternatepal {path}
+
grabforce {value}
*~This is to set alternate palette for this entity. ONLY compatible with truecolor mode (see video.txt above)!.
+
*~This command sets entity's power to grab an opponent. This entity will have success grab if opponent's 'antigrab' is equal or less than {value}.
*~{path} is the location of the image whose palette will be used as alternate palette. The {path} is relative to OpenBoR.
+
*~Used in conjuction with 'antigrab'.
*~Used in conjunction with 'pallette' above.
 
  
  
hmap {a} {b}
+
grabflip {value}
*~Hides entity's remap from being selected (in select screen for players). The remaps can still be used with other features, like forcemap or script.
+
*~This command sets how grabber faces grabbed target
*~Hidden remaps are from ath remap to bth remap.
+
**1 = Grabber will flip to face target
*~For example 'hmap 3 6', hides 3th, 4th, 5th and 6th remap.
+
**2 = Target will flip to face grabber
 +
**3 = Combination of 1 & 2 (default)
 +
*~Use this together with grab ability of course
  
  
globalmap {int}
+
throwdamage {int}
*~This command sets independent palette use for mods with 16/32 bit colormode.
+
*~Changes the amount of damage this entity recieves if it gets thrown.
** 0 = Entity has it's own palette.
+
*~Defaults to 21.
** 1 = Entity uses global palette.
 
  
  
==Shadow & Effects==
+
throw {dist} {height}
 +
*~Controls the angle at which this player or enemy flies if they get thrown.
 +
*~{dist} is the distance that this entity will fly.
 +
*~{height} controls how high off the ground this entity will get before it starts falling back down.
 +
 
  
shadow {int}
+
throwframewait {frame}
*~{int} is a number from 0 to 6.
+
*~Sets at which frame in character's throwing animation, throwing will start.
*~Each number corresponds to a specific shadow in the SPRITES folder.
 
*~Normally, the lower numbers are smaller.
 
*~This determines which shadow graphic will appear centered at this entity's offset point.
 
*~0 means there won't be a shadow.
 
  
 +
==Terrain Interaction==
  
aironly {bi}
+
height {alt}
*~If set to 1, this character's shadow will only be visible when it is off the ground (jumping, falling, etc.)
+
*~Affects an entity's ability to walk under platforms.
 +
*~If the platform is higher off the ground than this entity's height, this entity can move under it. Otherwise, it will get pushed out. However if somehow entity get stuck under platforms which are shorter, entity can only change direction and slide (see Animation Types below).
 +
*~{alt} is measured from the offset point up.
 +
*~This setting applies to all animation. If you want certain animations to have different heights use 'animheight' (see Animation Data).
  
  
gfxshadow {int}
+
antigravity {value}
*~Changes entity's shadow effect.
+
*~This command determines how strong this entity resists gravity.
**0 = (default) Use generic shadow set.
+
*~Value is in percent so setting 100 makes the entity never fall after jumping.
**1 = Use entity's current frame for the shadow. Yes, the shadow will be more realistic with this. The angle and length of shadow is defined by 'light' (see below).
 
  
  
alpha {int}
+
bounce {bi}
*~If set to 1, this entity will be displayed with alpha transparency.
+
*~Determines whether entity will bounce or not after touches ground after falling.
*~If set to 2, this entity will use negative alpha transparency (the darker colors are stronger, like shadows).
+
** 0 = No bounce effect
*~If set to 3, this entity will overlay transparency. It's described in the engine as being a combination of alpha and negative alpha, and the formula is "bg<128 ? multiply(bg*2,fg) : screen((bg-128)*2,fg)".
+
** 1 = Bounce effect is set
*~If set to 4, this entity will use hardlight transparency. Seems to be the opposite of overlay. The formula is "fg<128 ? multiply(fg*2,bg) : screen((fg-128)*2,bg)".
 
*~If set to 5, this entity uses dodge transparency. Described in the code as being "Very nice for a colourful boost of light."
 
*~If set to 6, this entity will use 50% transparency. The entire entity will be 50% transparent: every pixel will be averaged with the pixel right behind it.
 
*~In 8bit colormode, this setting DOES NOT work with remaps. You need 16bit or 32bit color mode to use this together with remaps.
 
  
  
parrow {path} {x} {y}
+
noquake {b1} {b2}
*~When a player respawns, the image at {path} will flash over the player at {x},{y} compared to their offset.
+
*~Determines whether or not the screen shakes if the entity hits the ground after being thrown.
*~The image will be visible for as long as the player is invincible after respawning (determined with makeinv).
 
*~I use -48 -130 for mine. You'll probably want yours to be somewhere around there, but I doubt you're using the exact same image and entity, so experiment.
 
  
 +
*~{b1} determine if the screen is affected by the shake
 +
** 0 = it shakes. Defaults to 0.
 +
** 1 = it doesn't shake.
  
parrow2 {path} {x} {y}
+
*~{b2} determine if the entity is affect by the shake. Useful to use entities as GUI (graphical user interface).
*~If player 2 is playing, and respawns, this will appear instead of parrow. You could just use parrow over again, or you could use something to mark that this is Player 2, not Player 1.
+
** 0 = it shakes. Defaults to 0.
 +
** 1 = it doesn't shake.
  
  
diesound {path}
+
no_adjust_base {bi}
*~{path} points to a .wav file that plays if the entity is defeated.
+
*~This command determines how terrain effect entity's base altitude.
*~It is also played if entity is killed instantly with lifespan or script.
+
*~Example of terrains are platforms, walls and holes.
 +
** 0 = Terrain can effect entity. Default for most entities.
 +
** 1 = Terrain can't effect entity. Default for arrows.
 +
 
 +
subject_to_basemap {bi}
 +
*~This command determines how basemaps effect entity.
 +
** 0 = Basemaps don't have any effect. Default for projectiles.
 +
** 1 = Basemaps have effects. Default for most entities.
 +
*~This should be used by AI controlled entities.
  
 +
subject_to_wall {bi}
 +
*~This command determines how walls effect entity.
 +
** 0 = Walls don't have any effect. Default for projectiles.
 +
** 1 = Walls have effects. Default for most entities.
 +
*~This should be used by AI controlled entities.
  
setlayer {int}
 
*~This entity will be displayed as if it were at z position {int}, regardless of it's actual position.
 
  
 +
subject_to_hole {bi}
 +
*~This command determines how holes effect entity.
 +
** 0 = Entity can't fall to holes.
 +
** 1 = Entity can fall to holes. Default for most entities.
 +
*~Aside from above, this command has more effect for enemies.
 +
** 0 = Enemy can walk to holes.
 +
** 1 = Enemy can't walk to holes. Default for most enemies.
 +
*~For your information, by default enemies can't walk to holes. It's as if holes are walls for enemies. They can jump , fall or move to holes though.
  
==Projectiles==
 
  
load {name}
+
subject_to_obstacle {bi}
*~This forces engine to load other entity into memory so the entity can be used.
+
*~This command determines how obstacles effect entity.
*~{name} is name of loaded entity.
+
** 0 = Obstacles don't have any effect. Default for projectiles.
*~Normally it's used for projectiles but it can be used to load any 'known' entity even if the entity is never spawned anywhere in level. Useful to load biker's rider which normally not loaded when biker is spawned.
+
** 1 = Obstacles have effects. Default for most entities.
*~Before using this, declare the entity with 'know' in models.txt.  
+
*~This should be used by AI controlled entities.
  
  
playshot {name}
+
subject_to_platform {bi}
*~{name} is the name of an entity.
+
*~This command determines how platform effect entity.
*~The player shoots this with pshotframe [=#=].
+
** 0 = Platforms don't have any effect. Default for projectiles.
*~This does exactly the same thing as a specifying {name} as a knife. Note: As of version 2.0691, playshot is no longer supported. Use knife instead.
+
** 1 = Platforms have effects. Default for most entities.
 +
*~This should be used by AI controlled entities.
  
  
playshotno {name}
+
subject_to_gravity {bi}
*~{name} is the name of an entity.
+
*~This command determines how gravity effect entity.
*~The player shoots this with 'pshotframe #'.
+
** 0 = Gravity don't have any effect.
*~Difference with 'playshot' is that the shot entity won't fly forward or in other word, it will stay on ground and not moving. That means it can fall to holes.
+
** 1 = Gravity have effects. Default for most entities.
*~That also means setting a in 'pshotframe' is useless.
+
 
  
 +
subject_to_screen {bi}
 +
*~This command determines whether entity can move offscreen or not.
 +
** 0 = Entity can move offscreen. Default for non-player entities.
 +
** 1 = Entity can't move offscreen. Default for players.
  
knife {name}
 
*~Used like "load". {name} will be thrown like a knife.
 
*~You'll need to use "load {name} {path}" instead of "know {name} {path}" when declaring the projectile in models.txt.
 
*~Knives can't be used by enemies during a jump. Stars are currently thrown instead.
 
  
 +
subject_to_minz {int}
 +
*~This command toggles minimum Z bounding for entity on field.
 +
** 0 = Entity can move beyond current zmin or minimum z. Default for panel type entities.
 +
** 1 = Entity can't move beyond current zmin or minimum z. Default for most entities.
 +
** This information was reversed in the manual before January 2019.
  
star {name}
 
*~Used like "load". {name} will be flung like a ninja star in a jump.
 
*~This command actually causes three stars to be thrown at three different angles.
 
*~You'll need to use "load {name} {path}" instead of "know {name} {path}" when declaring the projectile in models.txt.
 
*~Stars can only be used during a jump.
 
  
 +
subject_to_maxz {int}
 +
*~This command toggles maximum Z bounding for entity on field.
 +
** 0 = Entity can move beyond current zmax or maximum z. Default for panel type entities.
 +
** 1 = Entity can't move beyond current zmax or maximum z. Default for most entities.
 +
** This information was reversed in the manual before January 2019.
  
bomb {name}
 
pbomb {name}
 
*~This command is different for players and enemies. Players should use "pbomb" and enemies should use "bomb".
 
*~Used like "load". {name} will be tossed out like a grenade.
 
*~Bombs start off playing their IDLE animation until one of three things happens:
 
**1: The bomb touches an entity
 
**2: The bomb is hit by an attack
 
**3: The bomb touches the ground
 
*~After 1 or 2, the bomb will play it's ATTACK2 animation.
 
*~After 3, the bomb will play it's ATTACK1 animation.
 
*~After playing it's attack animation, the bomb will disappear.
 
*~Bombs are thrown in an arc determined by their speed and their jumpheight.
 
*~You'll need to use "load {name} {path}" instead of "know {name} {path}" when declaring the projectile in models.txt.
 
  
 +
offscreenkill {value}
 +
*~Determines how far an entity could go offscreen before removed or killed instantly. For your information, OpenBoR kills entities which are too far offscreen to reduce number of active entities.
 +
*~For example, projectiles and arrows are removed automatically by OpenBoR when they are 200 pixels offscreen. Doesn't matter which side they go offscreen to.
 +
*~In levels which don't allow scrolling back, this is useful to remove unused entities which are left offscreen. However, in levels which allow scrolling back, you might need to set this to avoid entities being killed while you still need it.
 +
*~{value} is distance in pixels measured from screen edges (left, right, up and down).
 +
*~Default value for normal entities is 1000, for arrows and projectiles it's 200 and for bikers it's 300.
  
rider {name}
+
==Entity Interaction==
*~For 'subtype biker' enemies.
 
*~{name} should be the name of an enemy in MODELS.txt.
 
*~When the bike is attacked, this entity will fall off.
 
*~Defaults to "K'" (Yes, with an apostrophe ')
 
*~If the rider is only loaded with 'know' in models.txt, you should add 'load {name} {path}' in this biker text to ensure that the 'rider' will fall off.
 
  
 +
aggression {value}
 +
*~For enemies, this command modifies pausetime for enemy before they attack after player is within attack range.
 +
*~Positive value reduces pausetime making the enemy reacts faster.
 +
*~Negative value increase pausetime making the enemy reacts slower.
  
==Flash==
 
  
flash {name}
+
hitenemy {canhit} {alt}
*~{name} is the name of flash animation this entity will use. Defaults to "Flash".
+
*~For enemy's projectile entities.
*~This is played when this entity is hit, not when it hits another entity.
+
*~If {canhit} is 1, this entity can hit other enemies, even if they threw this. Obviously, it still can hit players as well.
*~'noatflash' is required to make this command is activated.
+
*~If {canhit} is 0 or left out, this entity can only hit heros.
 +
*~If this entity is thrown as a bomb, it won't be able to hit the enemy who threw it until AFTER it explodes.
 +
*~{alt} determines when this entity can hit other enemies: 0 means it can hit either while in air or on the ground. 1 means the attack can only hit on the ground.
  
  
bflash {name}
+
aimove {type}
*~{name} is the name of flash animation this entity will use. Defaults to "Flash".
+
*~This command sets enemy's walk AI. IOW it sets how enemy walks around in  evels.
*~This is played when this entity blocks an attack.
+
*~Default AI is enemy will go after player or other entity he/she/it is hostile to
 +
*~Accepted types for {type} are:
 +
**Chase = Enemy will always chase player and this allows enemy to use RUN and RUNATTACK if enemy has it.
 +
**Chasex = Enemy will chase player but it only lines up enemy's X axis with player's.
 +
**Chasez = Enemy will chase player but it only lines up enemy's Z axis with player's.
 +
**Avoid = Enemy will always avoid player.
 +
**Avoidx = Enemy will always avoid player but enemy only avoids lining up X axis with player's.
 +
**Avoidz = Enemy will always avoid player but enemy only avoids lining up Z axis with player's.
 +
**Wander = Enemy walks without certain destination (hence the name).
 +
**Boomerang = Enemy assume a boomerang moving.
  
 +
*~Accepted 2nd params for {type} are:
 +
**Ignoreholes = Enemy walks without ignoring holes. This makes enemy walks to holes stupidly.
 +
**Notargetidle = Enemies ignore players when players are in idle animation.
 +
*~Example: aimove chase notargetidle
 +
*~Can be declared more than once but combine proper ones. avoid and chase are bad combination but avoidx and chasez are good one
  
dust {name}
 
*~{name} is the name of flash animation this entity will use.
 
*~This is played when this entity lands on the ground after being knocked down by an attack or after jumping.
 
*~If it's not specified, nothing will be shown.
 
  
 +
hostile {type1} {type2} ...
 +
*~Optional.
 +
*~Specifies what types an AI controlled entity will attack and what entities a projectile with the chase subtype will seek (this does not determine what the entity can hit, only what it will intentionally attack).
 +
*~Accepted types are enemy, player, npc, obstacle, shot and you can use as many as you need. If you want entity to be hostile to nothing, just set 'none' here.
 +
*~Be aware if you use this setting, you must provide all types you wish this entity to be hostile towards. That is to say, an enemy with ‘hostile npc obstacle’ will only attack npc and obstacle types, not players.
 +
*~Also 'stealth' feature below affect if the entity will target certain other entities or not.
  
toflip {bi}
 
*~Used for hitflashes.
 
*~If {bi} is 0, this hitflash will always face the same direction when spawned. If set to 1, the hitflash will flip when the attack comes from the other side.
 
  
 +
candamage {type1} {type2} ...
 +
*~Optional.
 +
*~Specifies what types this entity can hit (very similar to hostile, but determines what entity may hit, not what it will intentionally target).
 +
*~Available types are enemy, player, npc, obstacle, shot and you can use as many as you need. If you don't want entity to hit anything, just set 'none' here.
 +
*~Be aware if you use this setting, you must provide all types you wish this entity to be able to hit. That is to say, an enemy with ‘candamage npc obstacle’ will be able to hit npc and obstacle types, not players.
  
noatflash {bi}
 
*~When {bi} is 1, this entity will always play it's personal 'flash' when hit, instead of the attacker's. Useful for obstacles.
 
  
 +
projectilehit {type1} {type2} ...
 +
*~Optional.
 +
*~Do not let the name confuse you, this is not for projectiles. This
 +
setting specifies what types this entity will hit when thrown from a grab. *~Available types are enemy, player, npc, obstacle, shot and you can use as many as you need. If you don't want entity to hit anything, just set 'none' here.
 +
*~Be aware if you use this setting, you must provide all types you wish this entity to be able to hit when thrown. That is to say, an enemy with ‘projectilehit player’ will only hit players when thrown, not other enemies.
  
==Offense & Defense==
 
  
com {dir1} {dir2} ... {dir15} {action} freespecial{#}
+
stealth {stealth} {perception}
*~Allows you to customize freespecial input commands.
+
*~This command sets stealth ability to entity
*~The {#} should be the number of the freespecial you want to change. You can leave it blank for 1 or use 2 though 8 for 2 through 8. There is no space between freespecial and {#}.
+
*~{stealth} defines how 'invisible' the entity to hostile entities. Default value is 0
*~The first part is direction button input while the 2nd is action button input. It supports 15 direction button inputs but you can use just 2 or 3 if you want. You can even not using direction button input at all.
+
*~{perception} defines how well entity can see stealth entities. Default value is 0
*~Possible values for {dir#} are:
+
*~For instance, entity with {stealth} 2 is only 'visible' to hostile entities with {perception} 2 or higher
**U: Up
+
*~This command doesn't affect visual at all IOW entity is still visible to players
**D: Down
 
**F: Forward
 
**B: Back (The direction opposite your current direction. If used, the character will turn around.)
 
*~Possible values for {action} are:
 
**A: Attack button
 
**A2: Attack button2
 
**A3: Attack button3
 
**A4: Attack button4
 
**J: Jump button
 
**S: Special attack button
 
**K: Alternate special attack button
 
*~You can use either S or K for the special attack button commond. You can only use one or the other, so pick one and stick with it. This was done so that modders who use the special key for blocking can remember the key is used to blocK, not use Specials. (B would have been used, for Block, but B is already used for Back.)
 
*~Make sure that you don't have any conflicts with other commands. RUN, DODGE, and the directional ATTACKs all have inputs which can be the same as freespecials.
 
*~If you use B for {dir1}, flip the next input. The player changes direction, remember? So B, F, A would be 'turn around, move forward, attack', but since you turned around first, moving forward would mean moving in the direction you just turned to. If you wanted to have an input like Street Fighter's Guile or Charlie's Sonic Boom, you'd need to use B, B, A instead of B, F, A.
 
  
 +
attackthrottle {rate} {time}
 +
*~rate: chance to cancel attack (must be between 0.0 and 1.0)
 +
*~time: in seconds, how long should this entity stay tame until next check, the engine will generate a random number between 0 and this value.
 +
*~note: some action will cancel the timer, for example, getting hit. Seeing the target block or attacking will also affects the timer. A value of 0.5-0.75 should be OK.
 +
*~the idea is to allow using high aggressive settings to give the AI super quick initial "reflexes" but still enough delay between subsequent attacks to avoid unbeatable cheapness
  
atchain {number} {number} {number} {number} {number} ...
 
*~Determines the attack chain order for player. The attack chain only starts if the first attack hits though. Also if player takes too long before pressing attack to combo, the attack chain will reset to 1st.
 
*~The maximum length is 12. How they are used are determined by 'combostyle' below.
 
*~{number} can be anything from 1 to 12. 1 refers to ATTACK1, 2 to ATTACK2 and so on. Note: before using number 5 to 12, set 'maxattacks' to 12 1st. See 'maxattacks' above.
 
*~You can repeat the same number if you need to.
 
*~You don't have to use all of them. Setting something like 'atchain 1 3 2' works.
 
*~Default combo is 'atchain 1 1 2 3'.
 
  
 +
boomerangvalues {acceleration} {horizontal_distance}
 +
*~acceleration: the float value for de/acceleration of the boomerang
 +
*~horizontal_distance: the float value max distance from the spawner and boomerang
 +
*~speed of boomerang you can set manually (write speed {float}) or by default is 2.0!!
  
combostyle {bi}
+
==Palette==
*~Changes how 'atchain' works.
 
**0 = (Default) Old combo system.
 
**1 = New combo system.
 
*~With 'combostyle 1', various attack chain can be set with this command. For instance, 'atchain 1 2 5 0 3 3 6 0 4 0' have 3 kinds of attack chain in it.
 
*~The attack chains are selected by 'range' specified in respective attack (excluding ATTACK1). In above example, if ATTACK2 can't reach target, attack chain will switch to ATTACK3. If the latter hits, the attack chain becomes '1 3 3 6'. If the latter misses, attack chain will switch to ATTACK4.
 
  
 +
remap {path1} {path2}
 +
*~Allows you to create alternate palletes for entities.
 +
*~Each entity can have up to 14 palletes.
 +
*~{path1} is a sprite of an entity in their normal pallete. {path2} is a sprite of the entity in an alternate pallete.
 +
*~You should not change the file's pallete. The only changes should be to the pixels in the image, not the pallete data.
 +
*~Player 2 normally uses the first alternate pallete, but both players can select their color when choosing a character with up and down if the colourselect option is on.
 +
*~If your entity has sprites with incorrect colors in alternate palletes, the entity may use colors which are not in {path1}. Check the frames with incorrect colors and compare them. Then just add the colors somewhere in {path1} and the new colors in the same position in {path2}. If that sounds confusing, look at K9999's remaps. That's what I mean.
 +
*~In truecolormode (see video.txt above), this command works same way.
  
offense {type} {%}
 
*~Increases or decreases damage output of given attack type by %.
 
*~For example, "offense shock 50%" will increase shock attacks by 50%, whereas "offense burn -75%" will decrease burn attacks 75%.
 
*~ % could go more than 100 and -100. -100% makes the attack to give HP to opponent instead.
 
*~ Accepted types are:
 
**all (all default attacktypes are affected)
 
**normal# (replace # with appropriate attacktype number)
 
**shock
 
**burn
 
**steal
 
**blast
 
**freeze (only affects damage, freeze effect remains)
 
*~If you use attacktypes more than 10, setting 'all' won't affect attack11 and next attacks. You gonna have to set for each extra attacktypes if you want to affect them too.
 
  
 +
fmap {int}
 +
*~{int} determines which remap to use by the entity if it gets frozen by an freeze attack (See 'freeze' for more info about freeze attack).
 +
*~You have to declare that remap with 'remap' before using this obviously.
 +
*~If hero has 'fmap' set, the respective remap can't be selected at select screen and continue option.
 +
*~If enemy has 'fmap' set, the respective remap can be used in levels. You might want to avoid using the remap unless you want to see Icemen on your levels.
  
defense {type} {%} {pain} {knockdown} {blockpower} {blockthreshold} {blockratio} {blocktype}
 
*~Increases or decreases damage received by given attack type by %.
 
*~For example, "defense normal3 60%" will decrease attack3 damage by 60%, whereas "defense blast -45%" will increase blast damage by 45%.
 
*~ % could go more than 100 and -100. -100% makes the entity regains HP from the respective attack instead.
 
*~ Accepted types are exactly sames with 'offense' (see above).
 
*~{pain} is for setting 'nopain' (see above) effect just for this {type}. If received damage (with same type) is less than {pain}, entity won't be in PAIN (like nopain) however if damage is higher, entity will play PAIN animation like normal.
 
*~{knockdown} works with 'knockdowncount' (see above) and attackbox{#}'s {power} (see below). Incoming attack's (with same type) knockdown effect or {power} will be multiplied with {knockdown} before it effects entity. For instance, with 'knockdown = 50', it would half knockdown effect from attacks of this type.
 
*~{blockpower} works with attack{#}'s {unblockable} (see below). If {blockpower} exceeds the latter's value, this entity can block attacks of this type.
 
*~{blockthreshold} works just like 'thold' (see above) but just for this type. If received damage (with same type) is higher than {blockthreshold}, entity can't block the attack.
 
*~{blockratio} works just like 'blockratio' (see above) but just for this type except that this sets ratio instead. For instance, 'blockratio = 50' makes blocked attack (of this type) deals half damage.
 
*~{blocktype} works just like 'mpblock' (see above) but just for this type except that this sets which resource will take the damage instead.
 
**-1 = HP only
 
** 0 = Use 'mponly' setting
 
** 1 = MP then continue to HP if MP reaches 0
 
** 2 = Both MP and HP
 
  
 +
palette {path}
 +
*~This is to set default palette for this entity. ONLY compatible with truecolor mode (see video.txt above)!.
 +
*~{path} is the location of the image whose palette will be used as default palette. The {path} is relative to OpenBoR.
 +
*~If truecolor mode is set but this command is not declared, the 1st image/frame of the entity will be used instead.
 +
*~Usually used in conjunction with 'alternatepal' below. But sometimes it can be used to change default palette entity is using
 +
*~If path is set to none, alternate palettes are ignored and allows each frame (see 'frame' in animation data below) to use its own palette
 +
*~Useful to create effect libraries without having to design public palette for all of those effects
  
blockodds {int}
 
*~{int} is a number from 1 to 2147483647. It determines how often an enemy will block an attack.
 
*~1 means they'll block almost all attacks. 2147483647 means they pretty much never, ever, ever block, ever.
 
*~Enemies can't block during attacks so don't hesitate using this ;).
 
  
 +
alternatepal {path}
 +
*~This is to set alternate palette for this entity. ONLY compatible with truecolor mode (see video.txt above)!.
 +
*~{path} is the location of the image whose palette will be used as alternate palette. The {path} is relative to OpenBoR.
 +
*~Used in conjunction with 'pallette' above.
  
thold {int}
 
*~{int} is the threshold for an entity's blocking ability.
 
*~If the entity tries to block an attack with an attack power higher than {int}, they will not be able to do so and will get hit anyway.
 
*~If {int} is 0, an entity will have infinite threshold. In other words, they can block any attacks.
 
*~Regardless of threshold, if an attack is set to be unblockable, it can't be blocked.
 
  
 +
hmap {a} {b}
 +
*~Hides entity's remap from being selected (in select screen for players). The remaps can still be used with other features, like forcemap or script.
 +
*~Hidden remaps are from ath remap to bth remap.
 +
*~For example 'hmap 3 6', hides 3th, 4th, 5th and 6th remap.
  
blockpain {int}
 
*~Determines how strong entity blocks incoming attack during blocking.
 
*~If the attack's damage are lesser than {int}, entity continue blocking however if the damage is bigger or same as {int}, entity plays BLOCKPAIN animation.
 
*~Use this with BLOCK animation of course.
 
  
 +
globalmap {int}
 +
*~This command sets independent palette use for mods with 16/32 bit colormode.
 +
** 0 = Entity has it's own palette.
 +
** 1 = Entity uses global palette.
  
nopassiveblock {bi}
 
*~If set to 1, NPC and enemy will block more active instead of reactive.
 
*~Active also means they will block if they are attacked even if the attack doesn't hit them.
 
*~Obviously entity who use this must have block ability.
 
  
 +
KOMap {map} {flag}
 +
*~Used to change entity's remap when KO'ed or killed.
 +
*~{map} is the remap number to be applied.
 +
*~{flag} determines when exactly remap will be applied:
 +
** 0 = Remap is applied as soon as entity touches the ground
 +
** 1 = Remap is applied at the last frame of last FALL or DEATH animation
  
holdblock {bi}
+
==Shadow & Effects==
*~Determines whether holding special button will make player play his/her block animation once or continusly.
 
**0 = (default) Once. Press once then block will end normally.
 
**1 = Contiusly. Holding special button makes player block continusly until button is released.
 
*~Use this command with block ability of course.
 
  
 +
shadow {int}
 +
*~{int} is a number from 0 to 6.
 +
*~Each number corresponds to a specific shadow in the SPRITES folder.
 +
*~Normally, the lower numbers are smaller.
 +
*~This determines which shadow graphic will appear centered at this entity's offset point.
 +
*~0 means there won't be a shadow.
  
guardpoints {int}
 
*~Defines amount of guardpoints this entity has.
 
*~When this entity successfully blocks an attack, guardpoints will be subtracted by that attack's guardcost.
 
*~If guardpoints reaches 0, the next block attempt will fail and entity will be forced to play GUARDBREAK animation. The received attack is still blocked though.
 
*~Guardpoints will autorecover over time whose recovery time is defined by 'guardrate' below.
 
*~This feature works with BLOCK animation and custom blocks with script.
 
  
 +
aironly {bi}
 +
*~If set to 1, this character's shadow will only be visible when it is off the ground (jumping, falling, etc.)
  
guardrate {int}
 
*~Defines recovery rate of 'guardpoints' above.
 
*~Use with 'guardpoints' of course.
 
  
 +
gfxshadow {int} {shadowbase}
 +
*~Changes entity's shadow effect.
 +
** 0 = (default) Use generic shadow set.
 +
** 1 = Use entity's current frame for the shadow. Yes, the shadow will be more realistic with this. The angle and length of shadow is defined by 'light' (see below).
 +
*~{shadowbase} controls how the shadow works in platforms (4287+)
 +
** gfxshadow 1 = default gfxshadow
 +
** gfxshadow 1 0 = default gfxshadow
 +
** gfxshadow 1 1 = no shadow changes on platform/basemap (old builds)
 +
** gfxshadow 1 2 = 2D-like shadow (like platform games)
 +
** gfxshadow 1 3 = combination 1+2
 +
handable via script with new "shadowbase" prop in entityproperty
  
==Reaction==
 
  
nopain {bi}
+
alpha {int}
*~Used to make the character not playing his/her PAIN animation when hit by a non-knockdown attack. He will continue what he is doing when attacked.
+
*~If set to 1, this entity will be displayed with alpha transparency.
 +
*~If set to 2, this entity will use negative alpha transparency (the darker colors are stronger, like shadows).
 +
*~If set to 3, this entity will overlay transparency. It's described in the engine as being a combination of alpha and negative alpha, and the formula is "bg<128 ? multiply(bg*2,fg) : screen((bg-128)*2,fg)".
 +
*~If set to 4, this entity will use hardlight transparency. Seems to be the opposite of overlay. The formula is "fg<128 ? multiply(fg*2,bg) : screen((fg-128)*2,bg)".
 +
*~If set to 5, this entity uses dodge transparency. Described in the code as being "Very nice for a colourful boost of light."
 +
*~If set to 6, this entity will use 50% transparency. The entire entity will be 50% transparent: every pixel will be averaged with the pixel right behind it.
 +
*~In 8bit colormode, this setting DOES NOT work with remaps. You need 16bit or 32bit color mode to use this together with remaps.
  
  
nodrop {bi}  
+
parrow {path} {x} {y}
*~Set it to 1 to stop this entity from falling unless he/she/it dies and:
+
*~When a player respawns, the image at {path} will flash over the player at {x},{y} compared to their offset.
*1: There's no DEATH animation
+
*~The image will be visible for as long as the player is invincible after respawning (determined with makeinv).
*2: There's a DEATH animation, and its 'falldie' flag is set to 1.
+
*~I use -48 -130 for mine. You'll probably want yours to be somewhere around there, but I doubt you're using the exact same image and entity, so experiment.
*~This entity will play corresponding PAIN animation if knockdown attack hits him/her/it. For instance, attack3 will make this entity play PAIN3 even if it's a knockdown attack.
 
  
  
knockdowncount {int}
+
parrow2 {path} {x} {y}
*~This setting makes entity more resistent to knockdown attacks. To knock down this entity, either 'attack' with same or higher power than {int} or {int} consecutive knockdown attacks must hit this entity.
+
*~If player 2 is playing, and respawns, this will appear instead of parrow. You could just use parrow over again, or you could use something to mark that this is Player 2, not Player 1.
*~If the above requirements is not fulfilled, the entity will play PAIN animation instead if hit by an attack. Played PAIN animation correspond to attacktype that hits the entity.
 
*~If {int} = -1, the entity will always be knocked down even if hit by non knockdown attack.
 
  
  
remove {bi}
+
diesound {path}
*~Only works for projectiles. Defaults to 1.
+
*~{path} points to a .wav file that plays if the entity is defeated.
**1 = the projectile will be destroyed when it hits an enemy.
+
*~It is also played if entity is killed instantly with lifespan or script.
**0 = the projectile continues flying even after hitting an enemy.
 
  
  
escapehits {int}
+
setlayer {int}
*~For enemies
+
*~This entity will be displayed as if it were at z position {int}, regardless of it's actual position.
*~If you give this to an enemy, the enemy will perform SPECIAL2 when they get hit by int+1 hits. Don't forget to give the enemy anim SPECIAL2 if you're using this.
 
*~In case you haven't figured out, this feature is to make enemy counter attacks after they get certain number of consecutive hits.
 
*~The counter will reset if enemy plays any animation EXCEPT IDLE, FAINT and PAIN. The counter works even with grabattacks.
 
  
 +
==Projectiles==
  
nodieblink {int}
+
load {name}
*~Sets how entity's death animation is played.
+
*~This forces engine to load other entity into memory so the entity can be used.
**0 = entity starts blinking as soon as entity die in respective FALL animation.
+
*~{name} is name of loaded entity.
**1 = entity won't blink until after the last frame of entity's FALL or DEATH animation when killed.
+
*~Normally it's used for projectiles but it can be used to load any 'known' entity especially if the entity is never spawned anywhere in level. Useful to load entities which are spawned by commands such as 'throwframe' and 'spawnframe'.
**2 = entity won't blink at all during death, and entity will disappear after the last frame of their death animation.
+
*~Before using this, the entity must be declared with 'know' in models.txt.
**3 = entity will play it's death animation without blinking, and will not disappear until scrolled offscreen. The enemy won't count towards 'group's after dying, even though they don't disappear. This setting ONLY works for enemies.
 
  
  
makeinv {int} {bi}
+
playshot {name}
*~Determines whether or not the character is briefly invincible after being respawned. Otherwise, traps and enemies may be able to attack the player as they reappear- not nice.
+
*~{name} is the name of an entity.
*~(int) is how many seconds the player will be invincible for.
+
*~The player shoots this with pshotframe #.
*~(bi) is flag which sets blinking
+
*~This does exactly the same thing as a specifying {name} as a knife. Note: As of version 2.0691, playshot is no longer supported. Use knife instead.
** 0 = Blinking (default)
 
** 1 = No blinking
 
*~{int} also controls how long the parrow and parrow2 are visible.
 
*~You can also use makeinv in item type entities. This will create an item that gives the player {int} seconds of invincibility , much like a star in Mario.
 
  
  
falldie {value} or death {value}
+
playshotno {name}
*~Determines how DEATH animation will be played when the character dies.
+
*~{name} is the name of an entity.
**0 = fall, blink on ground then disappear without playing DEATH at all (default).
+
*~The player shoots this with 'pshotframe #'.
**1 = No FALL animation, DEATH animation will be played right after final blow
+
*~Difference with 'playshot' is that the shot entity won't fly forward or in other word, it will stay on ground and not moving. That means it can fall to holes.
**2 = Fall first then play DEATH animation. This only applies to enemies.
+
*~That also means setting a in 'pshotframe' is useless.
*~MAKE SURE that the character have DEATH animation when using this!
 
  
  
risetime {value}
+
knife {name}
*~This is for altering risetime (wait time for character while lying down after falling before rising).
+
*~Used like "load". {name} will be thrown like a knife.
*~Positive value reduces risetime making the character rises earlier.
+
*~You'll need to use "load {name} {path}" instead of "know {name} {path}" when declaring the projectile in models.txt.  
*~Negative value increase risetime making the character rises more late.
+
*~Knives can't be used by enemies during a jump. Stars are currently thrown instead.
  
  
riseinv {int} {bi}
+
boomerang {name}
*~Determines whether or not the player is briefly invincible after rising.
+
*~Used like "load". {name} will be thrown like a boomerang.
*~(int) is how many seconds the player will be invincible for.
+
*~You'll need to use "load {name} {path}" instead of "know {name} {path}" when declaring the projectile in models.txt.
*~(bl) is flag which sets blinking
 
** 0 = Blinking (default)
 
** 1 = No blinking
 
  
  
jugglepoints {int}
+
star {name}
*~This command limits jugglability of this entity. IOW it controls how many times entity can be juggled.
+
*~Used like "load". {name} will be flung like a ninja star in a jump.
*~Juggling means attacking falling opponents (assuming they are vulnerable while falling).
+
*~This command actually causes three stars to be thrown at three different angles.
*~This command is used in conjunction with 'jugglecost' (see Animation Data below).
+
*~You'll need to use "load {name} {path}" instead of "know {name} {path}" when declaring the projectile in models.txt.
*~The command works like this:
+
*~Stars can only be used during a jump.
**If attackbox hits opponent whose 'jugglepoints' is higher than or equal with 'jugglecost', the attack will connect. At this condition, opponent's 'jugglepoints' will be subtracted by that 'jugglecost'. This drops 'jugglepoints' which limits juggling ability.
 
**If attackbox hits opponent whose 'jugglepoints' is lower than 'jugglecost', the attack will not connect. At this condition, opponent's 'jugglepoints' will remain the same.
 
*~If {int} is set to -1, the entity will be immune to juggles.
 
  
  
instantitemdeath {int}
+
bomb {name} pbomb {name}
*~ This command sets whether the pause when item suicides after being taken is removed or not.
+
*~This command is different for players and enemies. Players should use "pbomb" and enemies should use "bomb".
**0 = pause is not removed.
+
*~Used like "load". {name} will be tossed out like a grenade.
**1 = pause is removed.
+
*~Bombs start off playing their IDLE animation until one of three things happens:
 +
** 1: The bomb touches an entity
 +
** 2: The bomb is hit by an attack
 +
** 3: The bomb touches the ground
 +
*~After 1 or 2, the bomb will play it's ATTACK2 animation.
 +
*~After 3, the bomb will play it's ATTACK1 animation.
 +
*~After playing it's attack animation, the bomb will disappear.
 +
*~Bombs are thrown in an arc determined by their speed and their jumpheight.
 +
*~You'll need to use "load {name} {path}" instead of "know {name} {path}" when declaring the projectile in models.txt.
  
  
riseattacktype {int}
+
rider {name}
*~Determines how entity performs RISEATTACK while rising.
+
*~For 'subtype biker' enemies.
**0 = Only RISEATTACK will be used. Other RISEATTACK animations (see Animation Types below) won't be used.
+
*~{name} should be the name of an enemy in MODELS.txt.
**1 = RISEATTACK will be played based on received attacktype. For instance, if entity was knocked down with attack5, entity will perform RISEATTACK5 if it's executed. If required animations aren't available, RISEATTACK will be played instead.
+
*~When the bike is attacked, this entity will fall off.
**3 = Like 1 but if required animations aren't available, RISE will be played instead (no riseattack).
+
*~Defaults to "K'" (Yes, with an apostrophe ')
 +
*~If the rider is only loaded with 'know' in models.txt, you should add 'load {name}' in this biker text to ensure that the 'rider' will fall off.
  
 +
==Flash==
  
==Weapons==
+
flash {name}
 +
*~{name} is the name of flash animation this entity will use. Defaults to "Flash".
 +
*~This is played when this entity is hit, not when it hits another entity.
 +
*~'noatflash' is required to make this command is activated.
  
weapons {name1} {name2} {name3} {name4} {name5} {original name}
 
*~This command sets other model which will be used to replace this entity when a weapon is picked up.
 
*~{name#} is the name of the model which this character becomes when they pick up weapon #. # is weapon's number. Don't forget to load the model in models.txt.
 
*~{original name} is the name of the character when it doesn't have any weapons equipped.
 
*~If {name#} is filled with none, this entity can't pick respective weapon.
 
  
 +
bflash {name}
 +
*~{name} is the name of flash animation this entity will use. Defaults to "Flash".
 +
*~This is played when this entity blocks an attack.
  
project {name}
 
*~For subtype "project" items.
 
*~{name} is the name of the new projectile the player or enemy who grabs this can use.
 
  
 +
dust {fall} {land} {jump}
 +
*~This command defines what dust entity which will be dropped by this entity on certain conditions below.
 +
*~Dust is another type of flash which falls instead of floating. To make one, simply make dust animation and declare it in models.txt just like flashes.
 +
*~{fall} is the dust dropped when entity landed on ground after being knocked down.
 +
*~{land} is the dust dropped when entity landed after normal jump. Doesn't include animations with 'jumpframe' or script based jumping.
 +
*~{jump} is the dust dropped when entity jumps with normal jump. Doesn't include animations with 'jumpframe' or script based jumping.
 +
*~If {fall} is the only one defined, the dust will also be dropped while landing but not while jumping.
  
shootnum {int}
 
*~For items which can be used as weapons.
 
*~This is the maximum number of times a weapon can be fired.
 
  
 +
toflip {bi}
 +
*~Used for hitflashes.
 +
*~If {bi} is 0, this hitflash will always face the same direction when spawned. If set to 1, the hitflash will flip when the attack comes from the other side.
  
counter {int}
 
*~For items which can be used as weapons.
 
*~This is the maximum number of times a weapon can be dropped before it dissapears forever.
 
*~To make weapons hang around basically forever, give them a high value like 100,000 or something. If somebody can drop it that many times, they probably don't deserve to hold onto it!
 
  
 +
noatflash {bi}
 +
*~When {bi} is 1, this entity will always play it's personal 'flash' when hit, instead of the attacker's. Useful for obstacles.
  
reload {int}
 
*~For items.
 
*~If a player picks up an item that has this command, it will restore their ammunition by {int}.
 
*~Does nothing if a player doesn't have a weapon.
 
*~Should be used with 'shootnum'.
 
*~Don't forget that items can only give one bonus.
 
  
 +
==Offense & Defense==
  
typeshot {bi}
+
com {input1} {input2} ... {input15} freespecial{#}
*~For weapons.
+
*~Allows you to customize freespecial input commands.
*~Determines if the weapon is a gun or a knife.
+
*~The {#} should be the number of the freespecial you want to change. You can leave it blank for 1 or use 2 though 8 for 2 through 8. There is no space between freespecial and {#}.
*~0 means a knife, and ammunition will not be displayed, since you can only throw knives once.
+
*~If you want to define this command for freespecial9 or higher, make sure
*~1 means a gun, so ammunition will be displayed. It will also appear on the ground if you run out of ammunition while using it.
+
'maxfreespecial' (see models.txt above) has been set.
 +
*~{input#} defines which key must be pressed. It can be direction or action keys
 +
*~Accepted direction inputs are:
 +
**U: Up
 +
**D: Down
 +
**F: Forward
 +
**B: Back (The direction opposite your current direction. If used, the character will turn around.)
 +
*~Accepted action inputs are:
 +
**A: Attack button
 +
**A2: Attack button2
 +
**A3: Attack button3
 +
**A4: Attack button4
 +
**J: Jump button
 +
**S: Special attack button
 +
**K: Alternate special attack button
 +
*~You can define same input multiple times if you want to, example: F F A
 +
*~You can use either S or K for the special attack button commond. You can only use one or the other, so pick one and stick with it. This was done so that modders who use the special key for blocking can remember the key is used to blocK, not use Specials. (B would have been used, for Block, but B is already used for Back.)
 +
*~Make sure that you don't have any conflicts with other commands. RUN, DODGE, and the directional ATTACKs all have inputs which can be the same as freespecials.
 +
*~If you use B for {dir1}, flip the next input. The player changes direction, remember? So B, F, A would be 'turn around, move forward, attack', but since you turned around first, moving forward would mean moving in the direction you just turned to. If you wanted to have an input like Street Fighter's Guile or Charlie's Sonic Boom, you'd need to use B, B, A instead of B, F, A.
 +
*~{input1} now accepts "+" to add mutiple commands. Examples:
  
 +
<pre>
 +
a + a2
 +
u + f a
 +
u + f -> a
 +
"->" symbol useful just for better reading
 +
</pre>
  
animal {bi}
 
*~For players with a weapon.
 
*~Determines if the weapon is actually an animal to be ridden.
 
*~Animals will run away if they are knocked down enough times.
 
*~Players on an animal can't be grabbed.
 
  
 +
atchain {number} {number} {number} {number} {number} ...
 +
*~Determines the attack chain order for player. The attack chain only starts if the first attack hits though. Also if player takes too long before pressing attack to combo, the attack chain will reset to 1st.
 +
*~The maximum length is 12. How they are used are determined by 'combostyle' below.
 +
*~{number} can be anything from 1 to 12. 1 refers to ATTACK1, 2 to ATTACK2 and so on. Note: before using number 5 to 12, set 'maxattacks' to 12 1st. See 'maxattacks' above.
 +
*~You can repeat the same number if you need to.
 +
*~You don't have to use all of them. Setting something like 'atchain 1 3 2' works.
 +
*~Default combo is 'atchain 1 1 2 3'.
  
weaploss {flag}
 
*~Determines how weapon could be lost when the character is wielding a weapon.
 
**0 (default) = weapon is lost and dropped on any hit.
 
**1 = weapon is lost only on knockdown hit.
 
**2 = weapon is lost only on death.
 
**3 = weapon is lost only when level ends or character is changed during continue. This depends on the level settings and whether players had weapons on start or not.
 
*~This setting can also be declared in weapon text. If you do so, the setting will override similar setting in character's text and it will only be used for that weapon.
 
  
 +
combostyle {bi}
 +
*~Controls how 'atchain' works.
 +
**0 = (Default) Static combo system
 +
**1 = Dynamic combo system
 +
**2 = Free combo system
 +
*~With 'combostyle 1', various attack chain can be set with this command. For instance, 'atchain 1 2 5 0 3 3 6 0 4 0' have 3 kinds of attack chain in it.
 +
*~The attack chains are selected by 'range' specified in respective attack (excluding ATTACK1). In above example, if ATTACK2 can't reach target, attack chain will switch to ATTACK3. If the latter hits, the attack chain becomes '1 3 3 6'. If the latter misses, attack chain will switch to ATTACK4.
 +
*~With 'combostyle 2', attack chain will be performed even if none of the attacks connects (Streets of Rage 3 style)
  
modelflag {int}
 
*~Determines how weapon model copies animation and weaponlist from original model.
 
**0 = Animation and weaponlist are copied
 
**1 = Animation aren't copied but weaponlist are still copied
 
**3 = Animation and weaponlost aren't copied
 
*~Use this with weapon models of course.
 
  
 +
offense {type} {factor}
 +
*~Modifies damage output of given attack type by {factor}.
 +
*~For example: "offense shock 0.5" will decrease shock attacks to 50%, whereas "offense burn 1.5" will increase burn attacks to 150%.
 +
*~{factor} could be negative and make the attack give HP instead. For example: -1 makes the attack to give HP to opponent instead of damaging.
 +
*~Accepted types are:
 +
**all (all attacktypes are affected)
 +
**normal# (replace # with appropriate attacktype number)
 +
**shock
 +
**burn
 +
**steal
 +
**blast
 +
**freeze (only affects damage, freeze effect remains)
  
==Icon & Lifebar==
 
  
icon {path}
+
defense {type} {factor} {pain} {knockdown} {blockpower} {blockthreshold} {blockratio} {blocktype}
*~The graphic normally shown next to the entity's life bar.
+
*~Modifies damage received by given attack type by {factor}.
*~Normally a 16 x 16 box with a picture of the entity's head.
+
*~For example: "defense normal3 0.6" will decrease attack3 damage to 60%,  whereas "defense blast 1.4" will increase blast damage to 140%.
*~{path} is the location relative to OpenBoR of the icon's .gif.
+
*~{factor} could be negative and make the damage restore HP instead. For example: -1 makes the entity regains HP from the respective attack instead being damaged.
*~The position of the graphic can be changed in LEVELS.txt.
+
*~Accepted types are exactly sames with 'offense' (see above).
*~You can use a longer image to change the appearence of your character's lifebar, but remember that the box and shadow around it appear on top if you don't turn them off in LEVELS.txt.
+
*~{pain} is for setting 'nopain' (see above) effect just for this {type}. If received damage (with same type) is less than {pain}, entity won't be in PAIN (like nopain) however if damage is higher, entity will play PAIN
*~Dimensions of the life bar relative to the icon in bbox format (if you haven't changed it in LEVELS.txt): 18 8 103 9
+
*~{knockdown} works with 'knockdowncount' (see above) and attackbox{#}'s {power} (see Animation Data below). Incoming attack's (with same type) knockdown effect or {power} will be multiplied with {knockdown} before it effects entity. For instance, with 'knockdown = 0.5', it would half knockdown effect from attacks of this type.
 +
*~{blockpower} works with attack{#}'s {unblockable} (see Animation Data below). If {blockpower} exceeds the latter's value, this entity can block attacks of this type.
 +
*~{blockthreshold} works just like 'thold' (see above) but just for this type. If received damage (with same type) is higher than {blockthreshold}, entity can't block the attack.
 +
*~{blockratio} works just like 'blockratio' (see above) but just for this type except that this sets ratio instead. For instance, 'blockratio = 0.5' makes blocked attack (of this type) deals half damage.  
 +
*~{blocktype} works just like 'mpblock' (see above) but just for this type except that this sets which resource will take the damage instead.
 +
** -1 = HP only
 +
** 0 = Use global 'mponly' setting
 +
** 1 = MP then continue to HP if MP reaches 0
 +
** 2 = Both MP and HP
  
  
iconpain {path}
+
blockodds {int}
*~Same as icon, except this appears instead if the entity is being injured.
+
*~{int} is a number from 1 to 2147483647. It determines how often an enemy will block an attack.
*~This only works for players.
+
*~1 means they'll block almost all attacks. 2147483647 means they pretty much never, ever, ever block, ever.
 +
*~Enemies can't block during attacks so don't hesitate using this ;).
  
  
icondie {path}
+
thold {int}
*~Same as icon, except this appears instead if the entity is dead.
+
*~{int} is the threshold for an entity's blocking ability.
*~This only works for players.
+
*~If the entity tries to block an attack with an attack power higher than {int}, they will not be able to do so and will get hit anyway.
 +
*~If {int} is 0, an entity will have infinite threshold. In other words, they can block any attacks.
 +
*~Regardless of threshold, if an attack is set to be unblockable, it can't be blocked.
 +
 
 +
 
 +
blockpain {int}
 +
*~Determines how strong entity blocks incoming attack during blocking.
 +
*~If the attack's damage are lesser than {int}, entity continue blocking however if the damage is bigger or same as {int}, entity plays BLOCKPAIN animation.
 +
*~Use this with BLOCK animation of course.
  
  
iconget {path}
+
nopassiveblock {bi}
*~Same as icon, except this appears instead if the entity is picking up an item.
+
*~Normally when AI controlled entities block a string of attacks, the odds of blocking each incoming hit are always treated separately. With nopassiveblock set to 1, the AI will behave more like a player and hold the block position if hit while blocking a previous attack.
*~This only works for players. Not like anything else has a GET animation.
+
*~Previous versions of the manual state this property also causes the AI to block "actively", defending itself from attacks that pass close by. This is not true. The AI will never attempt to block an attack that doesn't actually hit.
 +
*~Obviously entity who use this must have block ability.
 +
 
  
 +
holdblock {int}
 +
*~Determines whether holding special button will make player play his/her block animation once or continuously.
 +
** 0 = (default) Once. Once the block animation is complete, entity returns to idle.
 +
** 1 = Continuously until BLOCKPAIN. Holding special button makes player block continuously (block animation holds at its last frame) until button is released or entity assumes a BLOCKPAIN animation (and while in Blockpain,you are still considered blocking.). Once a BLOCKPAIN completes, entity returns to idle.
 +
** 2 = Continuously. Holding special button makes player block continuously until button is released. After a BLOCKPAIN animation, entity continues to block.
 +
*~Use this command with block ability of course. Work in conjunction with Blockpain animations.
  
iconw {path}
 
*~For players with a weapon.
 
*~{path} should point to a .gif file.
 
*~If a player has weapon with a limited number of uses, this icon will appear with a counter for the remaining uses.
 
  
  
iconmphigh {path}
+
guardpoints {int}
*~Same as icon, except this appears when the entity's MP is full.
+
*~Defines amount of guardpoints this entity has.
*~This only works for players. Other entities doesn't have MP.
+
*~When this entity successfully blocks an attack, guardpoints will be subtracted by that attack's guardcost.
 +
*~If guardpoints reaches 0, the next block attempt will fail and entity will be forced to play GUARDBREAK animation. The received attack is still blocked though.
 +
*~Guardpoints will autorecover over time whose recovery time is defined by 'guardrate' below.
 +
*~This feature works with BLOCK animation and custom blocks with script.
  
  
iconmphalf {path}
+
guardrate {int}
*~Same as icon, except this appears when the entity's MP is half.
+
*~Defines recovery rate of 'guardpoints' above. Default value is 2.
*~This only works for players. Other entities doesn't have MP.
+
*~Use with 'guardpoints' of course.
  
  
iconmplow {path}
+
offscreen_noatk_factor {bi}  
*~Same as icon, except this appears when the entity's MP is low.
+
*~This command determines the ability of an entity to be able to attack while off screen. Useful to prevent entities that use ranged attacks like shots for example, they can attack without being in the visible area.
*~This only works for players. Other entities don't have MP.
+
*~0 Means that the entity can attack outside the visible area (default)
 +
*~1 Means that the entity CAN NOT attack outside the visible area.
 +
*~If set offscreen_noatk_factor in entity.txt it overwrite offscreen_noatk_factor set in models.txt
  
 +
==Reaction==
  
nolife {bi}
+
nopain {bi}
*~Determines whether or not the player can see the entity's life when they make contact.
+
*~Used to make the character not playing his/her PAIN animation when hit by a non-knockdown attack. He will continue what he is doing when attacked.
**0 = they CAN see it. Defaults to 0.
 
**1 = they CANNOT see it.
 
  
  
http://www.dreamcast-scene.com/uploads/Main/Preview3.p.png
+
nodrop {int}
 +
*~Determines entity's resistance to knockdown attacks.
 +
** 0 = Entity can be knocked down (default)
 +
** 1 = Entity can't be knocked down. Can still be knocked down if hit in midair.
 +
** 2 = Entity can't be knocked down even if hit in midair.
 +
*~This entity will play corresponding PAIN animation if knockdown attack hits him/her/it. For instance, attack3 will make this entity play PAIN3 even if it's a knockdown attack.
 +
*~Throwing with THROW can still knockdown this entity.
 +
*~If this entity dies, he/she will play FALL animation or DEATH if it's available and set.
  
  
lifebarstatus {w} {h} {noborder} {type} {orientation} {border} {shadow} {graph} {backfill}
+
knockdowncount {int}
*~This command makes entity's lifebar be displayed onscreen. Usually this is used by bosses but works for any type.
+
*~This setting makes entity more resistent to knockdown attacks. To knock down this entity, either 'attack' with same or higher power than {int} or {int} consecutive knockdown attacks must hit this entity.
*~If this is set, entity's lifebar, icon and name will be displayed immediately onscreen. This entity will still shows normal lifebar, icon and name which appears under player's if it interacts with players though.
+
*~If the above requirements is not fulfilled, the entity will play PAIN animation instead if hit by an attack. Played PAIN animation correspond to attacktype that hits the entity.
*~This settings is not affected by 'nolife' (see above) at all.
+
*~If {int} = -1, the entity will always be knocked down even if hit by non knockdown attack.
*~{w} is the maximum amount of health the bar can display. Defaults to 100.
 
*~{h} is the height of the lifebar in pixels. Defaults to 5.  
 
*~{noborder} turns on or off the border and shadow around life bars. {0} means there is, {1} means no outline or shadow.
 
*~{type} is a flag that sets how lifebar show health. 0 (default) means if an entity's health goes over width, the life bar will wrap around and 'double up' on top of itself (1 unit of health is 1 pixel long.). 1 means the lifebar is shown in percent based.
 
*~{orientation} is a flag that sets lifebar's orientation. 0 (default) means horizontal while 1 means vertical.
 
*~ {border} sets layer adjustment of outer border. Default to 0.
 
*~{shadow} sets layer adjustment of border shadow. Default to 0.
 
*~{graph} sets layer adjustment of graph fill. Default to 0.
 
*~{backfill} sets layer adjustment graph background. Default to 0.
 
*~The last 4 variables can be used to place lifebar behind player 'icon' or 'bgicon'. To do that you need to give value like -300.
 
  
  
lifeposition {x} {y}
+
remove {bi}
*~This command determines display position of entity's lifebar onscreen.
+
*~Only works for projectiles. Defaults to 1.
*~It is counted from upperleft corner of screen to lifebar's upperleft corner.
+
**1 = the projectile will be destroyed when it hits an enemy.
*~Use this together with 'lifebarstatus' above.
+
**0 = the projectile continues flying even after hitting an enemy.
  
  
nameposition {x} {y}
+
escapehits {int}
*~This command determines display position of entity's name onscreen.
+
*~For enemies
*~It is counted from upperleft corner of screen to name's upperleft corner.
+
*~If you give this to an enemy, the enemy will perform SPECIAL2 when they get hit by int+1 hits. Don't forget to give the enemy anim SPECIAL2 if you're using this.
*~Use this together with 'lifebarstatus' above.
+
*~In case you haven't figured out, this feature is to make enemy counter attacks after they get certain number of consecutive hits.
 +
*~The counter will reset if enemy plays any animation EXCEPT IDLE, FAINT and PAIN. The counter works even with grabattacks.
  
  
iconposition {x} {y}
+
nodieblink {int}
*~This command determines display position of entity's icon onscreen.
+
*~Sets how entity's death animation is played.
*~It is counted from upperleft corner of screen to icon's upperleft corner.
+
** 0 = entity starts blinking as soon as entity die in respective FALL animation.
*~Use this together with 'lifebarstatus' above.
+
** 1 = entity won't blink until after the last frame of entity's FALL or DEATH animation when killed.
 +
** 2 = entity won't blink at all during death, and entity will disappear after the last frame of their death animation.
 +
** 3 = entity will play it's death animation without blinking, and will not disappear until scrolled offscreen. The enemy won't count towards 'group's after dying, even though they don't disappear. This setting ONLY works for enemies.
  
  
==Miscellaneous==
+
makeinv {int} {bi}
 
+
*~Determines whether or not the character is briefly invincible after being respawned. Otherwise, traps and enemies may be able to attack the player as they reappear- not nice.
credit {int}
+
*~(int) is how many seconds the player will be invincible for.
*~For items.
+
*~(bi) is flag which sets blinking
*~If an item has this set, it will give player credit when player take it.
+
** 0 = Blinking (default)
*~Keep in mind that only one bonus can be given to an item.
+
** 1 = No blinking
 +
*~{int} also controls how long the parrow and parrow2 are visible.
 +
*~You can also use makeinv in item type entities. This will create an item that gives the player {int} seconds of invincibility , much like a star in Mario.
  
  
secret {bi}
+
falldie {value} or death {value}
*~Used to make a 'secret' character who must be unlocked.
+
*~Determines how DEATH animation will be played when the character dies.
*~Secret characters are unlocked after beating any difficulty setting once, and can only be used in 'secret' difficulty levels.
+
** 0 = fall, blink on ground then disappear without playing DEATH at all (default).
 +
** 1 = No FALL animation, DEATH animation will be played right after final blow
 +
** 2 = Fall first then play DEATH animation.
 +
*~MAKE SURE that the character have DEATH animation when using this!
  
  
sleepwait {value}
+
risetime {rise} {riseattack}
*~Determines how long player must stand still in IDLE animation before SLEEP animation is played in centiseconds. Default value is 10 seconds.
 
  
 +
*~Model header. Modifies default delay for entity getting up or performing RISEATTACK after being knocked down. The default rise delay is 200, while a RISEATTACK has no delay at all.
  
score {onkill} {multiplier}
+
**{rise} is rising speed. Reduces time in centiseconds of the delay before rising. Use negative values to increase the delay.  
*~Changes the score earned by killing this entity. Both {onkill} and {multiplier} are {int}s.
+
**{riseattack} is rise attack speed. Reduces time in centiseconds of the delay before a RISEATTACK can be performed. Use a negative value to increase rise time. Speeding up the already instant RISEATTACK may seem pointless, but it can work to counteract a staydown effect.  
*~When the entity dies, the player who killed him/her/it will get {onkill} bonus points to their score.
+
**Example: risetime 0 -50 #appears to be default
*~Any hits landed on this entity by a player which would increase the player's score is multiplied by {multiplier}.
 
*~The default value is 5 for the multiplier. Setting {multiplier} to 0 makes it use default setting. Use -1 if you want to set 0 multiplier.
 
*~When used with an item, {onkill} changes the amount of score added when the item is picked up and {multiplier} is not used.
 
  
 +
riseattacktype {int}
 +
*~Determines how entity performs RISEATTACK while rising.
 +
** 0 = Only RISEATTACK will be used. Other RISEATTACK animations (see Animation Types below) won't be used.
 +
** 1 = RISEATTACK will be played based on received attacktype. For instance, if entity was knocked down with attack5, entity will perform RISEATTACK5 if it's executed. If required animations aren't available, RISEATTACK will be played instead.
 +
** 3 = Like 1 but if required animations aren't available, RISE will be played instead (no riseattack).
  
smartbomb  (power)  (type)  (pause)  (length}
 
*~This is for players. Enemies use the 'bomb' command for something else. Don't mix the two up!
 
*~If this is present, the player's special will work differently: it will become a "smart bomb" which damages all onscreen enemies, regardless of position.
 
*~{power} is an integer value which determines attack damage.
 
*~{type} is the attack's effect type:   
 
**0  knockdown1 (based on attack1)
 
**1  knockdown2 (based on attack2)
 
**2  knockdown3 (based on attack3)
 
**3  knockdown4 (based on attack4)
 
**4  blast
 
**5  burn
 
**6  freeze
 
**7  shock
 
**8  steal
 
*~{pause} is a binary value which determines whether or not all action onscreen pauses when you use your special. Used for a dramatic effect.
 
*~If {type} was set to 6 (freeze), {length} can be used to determine how long the enemies will remain frozen.
 
*~This command can also be used for items. In this way you can make "smart bomb" items to clear the screen. If you do use it with an item, {length} will replace {pause}
 
*~Exactly what is so smart about a bomb that just hits everything, anyway?
 
  
 +
riseinv {int} {bi}
 +
*~Determines whether or not the player is briefly invincible after rising.
 +
*~(int) is how many seconds the player will be invincible for.
 +
*~(bi) is flag which sets blinking
 +
** 0 = Blinking (default)
 +
** 1 = No blinking
  
branch {name}
 
*~This is used to make endlevel entity warps players to certain level instead of the next level in a level set if player touch it.
 
*~{name} is name of the destination in a level set.
 
*~In case you haven't figure it out, this feature is to make branch for multiple paths.
 
  
 +
jugglepoints {int}
 +
*~This command limits jugglability of this entity. IOW it controls how many times entity can be juggled.
 +
*~Juggling means attacking falling opponents (assuming they are vulnerable while falling).
 +
*~This command is used in conjunction with 'jugglecost' (see Animation Data below).
 +
*~The command works like this:
 +
**If attackbox hits opponent whose 'jugglepoints' is higher than or equal with 'jugglecost', the attack will connect. At this condition, opponent's 'jugglepoints' will be subtracted by that 'jugglecost'. This drops 'jugglepoints' which limits juggling ability. If attackbox hits opponent whose 'jugglepoints' is lower than 'jugglecost', the attack will not connect. At this condition, opponent's 'jugglepoints' will remain the same.
 +
*~If {int} is set to -1, the entity will be immune to juggles.
  
lifespan {value}
 
*~Sets entity's lifespan after the entity is spawned. {value} is in seconds and it supports decimals.
 
*~After {value} expires, entity will die and will play entity's death animation if the entity has it.
 
*~Entity who uses this can die normally if {value} hasn't expired of course.
 
  
 +
instantitemdeath {int}
 +
*~ This command sets whether the pause when item suicides after being taken is removed or not.
 +
** 0 = pause is not removed.
 +
** 1 = pause is removed.
  
----
+
==Weapons==
  
=Animation Types:
+
weapons {name1} {name2} {name3} {name4} {name5} {original name}
=AnimationTypes=
+
*~This command sets other model which will be used to replace this entity when a weapon is picked up.
 +
*~{name#} is the name of the model which this character becomes when they pick up weapon #. # is weapon's number. Don't forget to load the model in models.txt.
 +
*~{original name} is the name of the character when it doesn't have any weapons equipped.
 +
*~If {name#} is filled with none, this entity can't pick respective weapon.
  
*Just to reiterate, this part is 2nd part of entity files section. This part is for animations types entity must have and could have.
 
*Also, all animation types below (mandatory or optional) can't be declared more than once. If there were 2 or more animations with same name, the last one would be used and the formers are ignored when that animation is called.
 
  
 +
project {name}
 +
*~For subtype "project" items.
 +
*~{name} is the name of the new projectile the player or enemy who grabs this can use.
  
==Non Attack==
 
  
WAITING (used for players)
+
shootnum {int}
*~An optional animation.
+
*~For items which can be used as weapons.
*~Plays on the character select screen when a character is highlighted (that is, pressing an attack button will select them).
+
*~This is the maximum number of times a weapon can be fired.
  
  
SELECT (used for players)
+
counter {int}
*~An optional animation.
+
*~For items which can be used as weapons.
*~Played when you select a character on the character selection screen (that is, you've pressed an attack button to indicate you want to use this character).
+
*~This is the maximum number of times a weapon can be dropped before it dissapears forever.
 +
*~To make weapons hang around basically forever, give them a high value like 100,000 or something. If somebody can drop it that many times, they probably don't deserve to hold onto it!
  
  
SPAWN (used by all entities)
+
reload {int}
*~An optional animation.
+
*~For items.
*~Plays when an entity appears in a level, whether from the level's .txt file or being respawned after dying. It also plays on the character select screen.
+
*~If a player picks up an item that has this command, it will restore their ammunition by {int}.
*~For players, this is only played when they are spawned to level for 1st time.
+
*~Does nothing if a player doesn't have a weapon.
*~It generally beats having new enemies just fall from the sky. That looks kind of silly with most enemies.
+
*~Should be used with 'shootnum'.
 +
*~Don't forget that items can only give one bonus.
  
  
RESPAWN (used by all entities)
+
typeshot {bi}
*~An optional animation.
+
*~For weapons.
*~For enemies, this does the exact same thing as SPAWN. You can use them interchangeably.
+
*~Determines if the weapon is a gun or a knife.
*~For players, this is only played when they are respawned to level after losing life.
+
*~0 means a knife, and ammunition will not be displayed, since you can only throw knives once.
 +
*~1 means a gun, so ammunition will be displayed. It will also appear on the ground if you run out of ammunition while using it.
  
  
IDLE (used by all entities)
+
animal {bi}
*~The animation for entity when he/she/it is just standing there. Well that's the easy way to describe it.
+
*~For players with a weapon.
*~Technically, this animation is played when entity isn't doing anything and not in any condition (aside from idle). Entity could move in this animation though.
+
*~Determines if the weapon is actually an animal to be ridden.
*~If the SELECT and SPAWN graphics are not present, the IDLE animation will be used instead in select screen.
+
*~Animals will run away if they are knocked down enough times.
 +
*~Players on an animal can't be grabbed.
  
  
FAINT (players, enemies)
+
weaploss {flag} {weapnum}
*~Optional.
+
*~Determines how weapon could be lost when the character is wielding a weapon.
*~If this animation is present, whenever this entity's health is 1/4 (one quarter) or less than it's maximum health, it will use this animation instead of it's IDLE animation.
+
** {flag} 0 (default) = weapon is lost and dropped on any hit.
 +
** {flag} 1 = weapon is lost only on knockdown hit.
 +
** {flag} 2 = weapon is lost only on death.
 +
** {flag} 3 = weapon is lost only when level ends or character is changed during continue. This depends on the level settings and whether players had weapons on start or not.
 +
** {weapnum} is optional. If set on, the entity set weapon to {weapnum} (see weapnum {int})
 +
*~This setting can also be declared in weapon text. If you do so, the setting will override similar setting in character's text and it will only be used for that weapon.
  
  
SLEEP {players}
+
modelflag {int}
*~Optional.
+
*~Determines how weapon model copies animation and weaponlist from original model.
*~It will be played if player does not move at all for certain time. That certain time is set with 'sleepwait' command.
+
** 0 = Animation and weaponlist are copied
*~If it is not looped, player will return to IDLE animation when it is finished.  If it is looped, player will continously play it until player moves.
+
** 1 = Animation aren't copied but weaponlist are still copied
*~It will be overridden by FAINT, if FAINT is available too.
+
** 3 = Animation and weaponlost aren't copied
 +
*~Use this with weapon models of course.
  
  
WALK (players, enemies, projectiles)
+
weapnum {int}
*~Optional for non-moving enemies. They won't use it, so why give it to them?
+
*~Used to give number to weapons. {int} is the number.
*~The animation for an entity walking left or right.
+
*~Declaring this command is important so other command such as 'setweap' (see Level Designs below) could work properly.
*~If a character does not have UP and DOWN animations, they will use this instead when walking up or down.
 
*~Projectiles only use this if they are homing projectiles. For this purpose, 'range' is supported.
 
  
 +
==Icon & Lifebar==
  
BACKWALK {players, enemies}
+
icon {path} {bi}
*~Optional.
+
*~The graphic normally shown next to the entity's life bar.
*~Players play this only if they have 'facing' set.
+
*~Normally a 16 x 16 box with a picture of the entity's head.
*~Enemies will play this if they move backwards while facing players.
+
*~{path} is the location relative to OpenBoR of the icon's .gif.
 +
~*{bi} controls if the icon will use the entity current palette. Set to 1 to use the same palette.
 +
*~The position of the graphic can be changed in LEVELS.txt.
 +
*~You can use a longer image to change the appearence of your character's lifebar, but remember that the box and shadow around it appear on top if you don't turn them off in LEVELS.txt.
 +
*~Dimensions of the life bar relative to the icon in bbox format (if you haven't changed it in LEVELS.txt): 18 8 103 9
  
  
TURN
+
iconpain {path}
*~Optional.
+
*~Same as icon, except this appears instead if the entity is being injured.
*~For players and enemies.
+
*~This only works for players.
*~This animation will be played when players or enemies turn back after walking backwards with BACKWALK.
+
 
 +
 
 +
icondie {path}
 +
*~Same as icon, except this appears instead if the entity is dead.
 +
*~This only works for players.
  
  
UP {players, enemies}
+
iconget {path}
*~Optional.
+
*~Same as icon, except this appears instead if the entity is picking up an item.
*~Played when the character walk up, up-left, or up-right.
+
*~This only works for players. Not like anything else has a GET animation.
*~For this animation to work correctly, it must have the same number of frames as the WALK animation.
 
  
  
DOWN {players, enemies}
+
iconw {path}
*~Optional.
+
*~For players with a weapon.
*~Played when the character walk down, down-left, or down-right.
+
*~{path} should point to a .gif file.
*~For this animation to work correctly, it must have the same number of frames as the WALK animation.
+
*~If a player has weapon with a limited number of uses, this icon will appear with a counter for the remaining uses.
  
  
DUCK {players}
+
iconmphigh {path}
*~Optional.
+
*~Same as icon, except this appears when the entity's MP is full.
*~This will only play in a stage whose max and min 'z' are the same (In other words, a 2-D stage).
+
*~This only works for players. Other entities doesn't have MP.
*~Plays when a player presses down. They can use this to duck under high attacks.
 
*~This animation is also played if player is under platform which is shorter than his/her height. However in this state, player is forced to play this animation instead. In this state, pressing left or right only changes direction.
 
*~While ducking, player can perform either SLIDE or DUCKATTACK (see below).
 
  
  
LAND (players)
+
iconmphalf {path}
*~Optional, but players may still be able to land safely depending on the 'autoland'settings in MODELS.txt.
+
*~Same as icon, except this appears when the entity's MP is half.
*~If a player is thrown by an enemy (Thrown, not knocked down), then they can press Up and Jump right when they hit the ground to recover instantly and take no damage. This animation will be played instead of the normal fall animation.
+
*~This only works for players. Other entities doesn't have MP.
  
  
RUN (players, enemies)
+
iconmplow {path}
*~Optional.
+
*~Same as icon, except this appears when the entity's MP is low.
*~If the player has their running speed specified, this is the animation they will use to run.
+
*~This only works for players. Other entities don't have MP.
*~To perform this, tap forward twice then hold forward to keep running.
 
*~By setting loop to 0 and adding in the jumpframe command, you can turn this into a dash animation. The player will leap forward.
 
*~This animation is only used by enemies with subtype chase. Their running speed is determined by 'running' or 'speed' if that's unavailable.
 
  
  
JUMP {players, enemies}
+
nolife {bi}
*~Plays when a player presses jump or when an enemy approaches a platform.
+
*~Determines whether or not the player can see the entity's life when they make contact.
*~You don't need to draw the entity moving upward, since BoR moves them automatically.
+
** 0 = they CAN see it. Defaults to 0.
*~If given to an enemy, this animation should also have a range listed.
+
** 1 = they CANNOT see it.
*~Every jump animations including this will keep playing until the character lands regardless how long the animations are.
 
  
  
JUMPDELAY {players, enemies}  
+
lifebarstatus {w} {h} {noborder} {type} {orientation} {border} {shadow}
*~Optional.
+
{graph} {backfill}
*~Played just before entity jumps with normal jump. Used to make delay animation before entity actually jumps. That means when this animation is played, entity is still on ground.
+
*~This command makes entity's lifebar be displayed onscreen. Usually this is used by bosses but works for any type.
*~It won't be used if entity jumps with 'jumpframe'.
+
*~If this is set, entity's lifebar, icon and name will be displayed immediately onscreen. This entity will still shows normal lifebar, icon and name which appears under player's if it interacts with players though.
 +
*~This settings is not affected by 'nolife' (see above) at all.
 +
*~{w} is the maximum amount of health the bar can display. Defaults to 100.
 +
*~{h} is the height of the lifebar in pixels. Defaults to 5.
 +
*~{noborder} turns on or off the border and shadow around life bars. {0} means there is, {1} means no outline or shadow.
 +
*~{type} is a flag that sets how lifebar show health. 0 (default) means if an entity's health goes over width, the life bar will wrap around and 'double up' on top of itself (1 unit of health is 1 pixel long.). 1 means the lifebar is shown in percent based.
 +
*~{orientation} is a flag that sets lifebar's orientation. 0 (default) means horizontal while 1 means vertical.
 +
*~ {border} sets layer adjustment of outer border. Default to 0.
 +
*~{shadow} sets layer adjustment of border shadow. Default to 0.
 +
*~{graph} sets layer adjustment of graph fill. Default to 0.
 +
*~{backfill} sets layer adjustment graph background. Default to 0.
 +
*~The last 4 variables can be used to place lifebar behind player 'icon' or 'bgicon'. To do that you need to give value like -300.
  
  
JUMPLAND {players, enemies}  
+
lifeposition {x} {y}
*~Optional.
+
*~This command determines display position of entity's lifebar onscreen.
*~Played after entity lands from normal jump.
+
*~It is counted from upperleft corner of screen to lifebar's upperleft corner.
*~It won't be used if entity jumps with 'jumpframe'.
+
*~Use this together with 'lifebarstatus' above.
  
  
FORWARDJUMP {players, enemies}  
+
nameposition {x} {y}
*~Optional.
+
*~This command determines display position of entity's name onscreen.
*~Played when entity jumps forward with normal jump.
+
*~It is counted from upperleft corner of screen to name's upperleft corner.
*~It won't be used if entity jumps with 'jumpframe'.
+
*~Use this together with 'lifebarstatus' above.
  
  
RUNJUMP (players)
+
iconposition {x} {y}
*~Optional.
+
*~This command determines display position of entity's icon onscreen.
*~Played when entity jumps forward while running with normal jump.
+
*~It is counted from upperleft corner of screen to icon's upperleft corner.
*~It won't be used if entity jumps with 'jumpframe'.
+
*~Use this together with 'lifebarstatus' above.
  
 +
==Miscellaneous==
  
DODGE (players)
+
credit {int}
*~Optional.
+
*~For items.
*~Players with this animation can perform a 'depth' dodge up or down by pressing up or down twice.
+
*~If an item has this set, it will give player credit when player take it.
*~The player will move along the z axis (closer to or farther from the screen).
+
*~Keep in mind that only one bonus can be given to an item.
*~The dodge will last as long as the animation does, and you can't cancel out of it by attacking. So don't set it to loop.
 
*~This cannot be used with ATTACKUP, ATTACKDOWN, or freespecials with the input U, U or D, D.
 
  
  
GET {players}
+
secret {bi} {int}
*~Optional.
+
*~Used to make a 'secret' character who must be unlocked before he/she can be played
*~Played when the character picks up an item.
+
*~{bi} defines where secret character can be played:
 +
**0 = Can be played in any level set
 +
**1 = Can only be played in locked level set or level set with 'ifcomplete' in it (see levels.txt above)
 +
*~{int} defines how many times game must be completed before the character is unlocked
 +
*~Even though secret character is locked, you must load him/her with 'load' command instead of 'know' (see models.txt above)
  
  
JUMPCANT {players}
+
sleepwait {value}
*~Optional.
+
*~Determines how long player must stand still in IDLE animation before SLEEP animation is played in centiseconds. Default value is 10 seconds.
*~This animation is only played if player tried to perform jumpattack which costs energy without having enough energy.
 
  
  
CHARGE {players}
+
score {onkill} {multiplier}
*~Optional.
+
*~Changes the score earned by killing this entity. Both {onkill} and {multiplier} are {int}s.
*~Despite its name, this animation is not related to CHARGEATTACK at all.
+
*~When the entity dies, the player who killed him/her/it will get {onkill} bonus points to their score.
*~This animation is executed by holding special and jump together. As long the buttons are held, the animation will play continuously.
+
*~Any hits landed on this entity by a player which would increase the player's score is multiplied by {multiplier}.
*~While playing, player's MP will be recovered at specified rate. The recharge rate is specified with 'chargerate' (see Entity's Header data above).
+
*~The default value is 5 for the multiplier. Setting {multiplier} to 0 makes it use default setting. Use -1 if you want to set 0 multiplier.
 +
*~When used with an item, {onkill} changes the amount of score added when the item is picked up and {multiplier} is not used.
  
  
CANT (players)
+
smartbomb (power) (type) (pause) (length}
*~Used with MP.
+
*~This is for players. Enemies use the 'bomb' command for something else. Don't mix the two up!
*~If a player has this animation, and they attempt to use an attack which costs more MP than they have at the moment, they will play this animation and can't dodge or attack until it ends.
+
*~If this is present, the player's special will work differently: it will become a "smart bomb" which damages all onscreen enemies, regardless of position.
*~If the attack they were using had the Special button as input, they will block instead of playing this animation.
+
*~{power} is an integer value which determines attack damage.
 +
*~{type} is the attack's effect type:
 +
** 0 = knockdown1 (based on attack1)
 +
** 1 = knockdown2 (based on attack2)
 +
** 2 = knockdown3 (based on attack3)
 +
** 3 = knockdown4 (based on attack4)
 +
** 4 = blast
 +
** 5 = burn
 +
** 6 = freeze
 +
** 7 = shock
 +
** 8 = steal
 +
*~{pause} is a binary value which determines whether or not all action onscreen pauses when you use your special. Used for a dramatic effect.
 +
*~If {type} was set to 6 (freeze), {length} can be used to determine how long the enemies will remain frozen.
 +
*~This command can also be used for items. In this way you can make "smart bomb" items to clear the screen. If you do use it with an item, {length} will replace {pause}
 +
*~Exactly what is so smart about a bomb that just hits everything, anyway?
  
  
GRAB {players, enemies}
+
branch {name}
*~Optional for enemies and players.
+
*~This is used to make endlevel entity warps players to certain level instead of the next level in a level set if player touch it.
*~When this entity moves close enough to another, this entity will grab hold of the other.
+
*~{name} is name of the destination in a level set.
*~If a player grabs an enemy, they can hold the direction opposite the enemy for a few seconds to let go and walk away.
+
*~In case you haven't figure it out, this feature is to make branch for multiple paths.
*~If you don't want this entity to be able to grab, just don't give them this animation.
+
 
  
 +
lifespan {value}
 +
*~Sets entity's lifespan after the entity is spawned. {value} is in seconds and it supports decimals.
 +
*~After {value} expires, entity will die and will play entity's death animation if the entity has it.
 +
*~Entity who uses this can die normally if {value} hasn't expired of course.
  
GRABWALK (players)
+
scroll {value}
*~Optional. Currently only used by players.
+
*~Used to make non panel typed entities scroll like panel type.
*~This animation is played when player walks while grabbing enemy.
+
*~{value} is in decimals.
*~The grabwalk speed is determined by 'grabwalk' (see above). However, declaring this animation is enough to enable grabwalking.
 
*~This animation is like WALK animation so setting 'loop 1' is recommended. However, this animation is NOT performed in reverse while walking backwards. Use GRABBACKWALK below for that case.
 
  
  
GRABBACKWALK (players)
 
*~Optional. Currently only used by players.
 
*~This animation is played when player walks backwards while grabbing enemy. Only played if player can't turn around while grabbing.
 
*~The grabbackwalk speed is also determined by 'grabwalk' (see above).
 
*~This animation is like WALK animation so setting 'loop 1' is recommended.
 
  
  
GRABWALKUP (players)
+
=Animation Types=
*~Optional.
 
*~This animation is played when player walks upwards (in z axis that is) while grabbing enemy.
 
*~The grabbackwalk speed is also determined by 'grabwalk' (see above).
 
*~This animation is like WALK animation so setting 'loop 1' is recommended.
 
  
 +
*Just to reiterate, this part is 2nd part of entity files section. This part is for animations types entity must have and could have.
 +
*Also, all animation types below (mandatory or optional) can't be declared more than once. If there were 2 or more animations with same name, the last one would be used and the formers are ignored when that animation is called.
  
GRABWALKDOWN (players)
 
*~Optional.
 
*~This animation is played when player walks downwards (in z axis that is) while grabbing enemy.
 
*~The grabbackwalk speed is also determined by 'grabwalk' (see above).
 
*~This animation is like WALK animation so setting 'loop 1' is recommended.
 
  
 +
==Non Attack==
  
GRABTURN (players)
+
WAITING (used for players)
*~Optional.
+
*~An optional animation.
*~This animation is played when player turns around while grabbing enemy. Only usable if 'grabturn' is set to 1.
+
*~Plays on the character select screen when a character is highlighted (that is, pressing an attack button will select them).
*~During this animation, player is stationary even if player can perform GRABWALK. OTOH grabbed opponent will be moved to opposite place with same grabdistance.
 
  
  
SLIDE {players}
+
SELECT (used for players)
*~Optional.
+
*~An optional animation.
*~This animation is performed by pressing DOWN+JUMP while walking or idling or in WALK or IDLE animation.
+
*~Played when you select a character on the character selection screen (that is, you've pressed an attack button to indicate you want to use this character).
  
  
RUNSLIDE {players}
+
SPAWN (used by all entities)
*~Optional.
+
*~An optional animation.
*~This animation is performed by pressing DOWN+JUMP while running or in RUN animation..
+
*~Plays when an entity appears in a level, whether from the level's .txt file or being respawned after dying. It also plays on the character select screen.
 +
*~For players, this is only played when they are spawned to level for 1st time.
 +
*~It generally beats having new enemies just fall from the sky. That looks kind of silly with most enemies.
  
  
==Attack==
+
RESPAWN (used by all entities)
 +
*~An optional animation.
 +
*~For enemies, this does the exact same thing as SPAWN. You can use them interchangeably.
 +
*~For players, this is only played when they are respawned to level after losing life.
  
ATTACK1 {players, enemies}
 
*~By default, this animation is NOT optional for players. It is optional for enemies.
 
*~An attack. Players perform this by pressing attack (unless the chain order is changed).
 
*~Enemies perform this attack when a player is in range (range is specified with the 'range' command).
 
*~Enemies are slightly more likely to use ATTACK1 than ATTACK2.
 
*~Enemy bombs play this animation if they touch the ground. If they don't have an ATTACK2 animation, they'll use this instead, as well.
 
  
 +
IDLE (used by all entities)
 +
*~The animation for entity when he/she/it is just standing there. Well that's the easy way to describe it.
 +
*~Technically, this animation is played when entity isn't doing anything and not in any condition (aside from idle). Entity could move in this animation though.
 +
*~If the SELECT and SPAWN graphics are not present, the IDLE animation will be used instead in select screen.
 +
*~Entity can have more IDLE animations, see below.
  
ATTACK2 {players, enemies}
 
*~By default, this animation is NOT optional for players. It is optional for enemies.
 
*~Another attack. Players use this if they press attack after hitting with ATTACK1 twice (unless the chain order is changed).
 
*~Enemies use this just like ATTACK1.
 
*~Enemies are slightly more likely to use ATTACK2 than ATTACK3.
 
*~Enemy bombs play this animation if they touch another entity's bbox or attack box.
 
  
 +
IDLE# (used by all entities)
 +
*~Played if there's opponent within set 'range' while in IDLE.
 +
*~# is the number of animation. Do not type # but type a number instead.
 +
*~For instance, IDLE2 has 'range 0 100'. Entity will play default IDLE when enemy is farther than 100 pixels but once an enemy is within 100 pixels, IDLE2 will be played instead.
 +
*~If there are multiple IDLE# animations, the one with lowest number has the highest priority.
 +
*~Before using this, increase the maximum number of IDLE with 'maxidles' in models.txt (see Models.txt above).
 +
*~These animation ARE NOT related to PAIN#, FALL# or DEATH# at all!
  
ATTACK3 {players, enemies}
 
*~By default, this animation is NOT optional for players. It is optional for enemies.
 
*~And another attack. Players use this if they press attack after hitting with ATTACK2 (unless the chain order is changed)
 
*~This animation is also played instead if grab finishers and chargeattack are not available..
 
*~Enemies use this just like ATTACK1 and ATTACK2.
 
  
 +
FAINT (players, enemies)
 +
*~Optional.
 +
*~If this animation is present, whenever this entity's health is 1/4 (one quarter) or less than it's maximum health, it will use this animation instead of it's IDLE animation.
  
ATTACK4 {players, enemies}
+
 
 +
SLEEP {players}
 
*~Optional.
 
*~Optional.
*~Players use this only if it is included in 'atchain' .
+
*~It will be played if player does not move at all for certain time. That certain time is set with 'sleepwait' command.
*~Enemies use this just like ATTACK1, ATTACK2 and ATTACK3.
+
*~If it is not looped, player will return to IDLE animation when it is finished. If it is looped, player will continously play it until player moves.
 +
*~It will be overridden by FAINT, if FAINT is available too.
  
  
ATTACK5,ATTACK6,... {player,enemies}
+
WALK (players, enemies, projectiles)
*~These animations are only usable if you have increased ATTACK animations limit. To increase the limit use 'maxattacks' (see details above in Models.txt section).
+
*~Optional for non-moving enemies. They won't use it, so why give it to them?
*~After they are available, they work just like ATTACK1, ATTACK2, ATTACK3 and ATTACK4.
+
*~The animation for an entity walking left or right.
 +
*~If a character does not have UP and DOWN animations, they will use this instead when walking up or down.
 +
*~Projectiles only use this if they are homing projectiles. For this purpose, 'range' is supported.
 +
*~Entity can have more WALK animations, see below.
  
  
CHARGEATTACK {players}
+
WALK#
*~Optional.
+
*~Played if there's opponent within set 'range' while in WALK.
*~This attack is unleashed after holding attack button for about 3 seconds then let it go.
+
*~Works just like IDLE# above except it's for WALK.
*~If this is not available, the last attack in player's attack chain will be played instead.
+
*~Before using this, increase the maximum number of WALK with 'maxwalks' in models.txt (see Models.txt above).
  
  
ATTACKBOTH {players}
+
WALKOFF {players, enemies}
*~Optional.
+
*~Optional
*~An attack. Players use this if they hold attack and then press jump.
+
*~This animation is played when entity walks off platforms or walls
*~This cannot be used if the player has a BLOCK animation. If MODELS.txt has 'ajspecial 1', this is replaced by the special attack.
+
*~WALK animation usually won't look good when entity is falling while walking so use this animation too to make entity look better :)
  
  
UPPER {enemies}
+
BACKWALK {players, enemies}
 
*~Optional.
 
*~Optional.
*~If a player is on the same row as an enemy with an UPPER animation and jumps, the enemy will perform this attack automatically.
+
*~Players play this only if they have 'facing' set.
*~Range command (see Animation Data below) can be used for this attack although it's not necessary.
+
*~Enemies will play this if they move backwards while facing players.
 +
*~Entity can have more BACKWALK animations, see below.
  
  
RUNATTACK {players}
+
BACKWALK#
*~Optional.
+
*~Played if there's opponent within set 'range' while in BACKWALK.
*~Requires the character to be able to run. Otherwise, they can't really use it.
+
*~Works just like IDLE# above except it's for BACKWALK.
*~If the player presses attack while running, they will perform this attack.
+
*~Before using this, increase the maximum number of BACKWALK with 'maxbackwalks' in models.txt (see Models.txt above).
*~Although player is running while attack is pressed, player won't be moving in this animation. If you want them to move, insert 'move' here.
 
  
  
RUNJUMPATTACK {players}
+
TURN
 
*~Optional.
 
*~Optional.
*~Requires the character has a RUN animation. Otherwise, they can't really use it.
+
*~For players and enemies.
*~If the player presses attack during a running jump, they will perform this attack.
+
*~This animation will be played when players or enemies turn back after walking backwards with BACKWALK.
  
  
JUMPATTACK {players, enemies}
+
UP {players, enemies}
*~An attack.
+
*~Optional.
*~For players, this is the attack performed when a player jumps and presses attack.
+
*~Played when the character walk up, up-left, or up-right.
*~Enemies randomnly perform this attack when a player is in range.
+
*~For this animation to work correctly, it must have the same number of frames as the WALK animation.
*~The jump is automatic. You don't need to use the jumpframe command or draw the entity moving forward.
+
*~Entity can have more UP animations, see below.
*~When enemies use this attack, they'll jump forward.
 
  
  
JUMPFORWARD {players}
+
UP#
*~Optional.
+
*~Played if there's opponent within set 'range' while in UP.
*~If a player has this animation, they will only play their JUMPATTACK animation if they jump straight up and attack. This attack will be used if they jump forward and attack.
+
*~Works just like IDLE# above except it's for UP.
 +
*~Before using this, increase the maximum number of UP with 'maxups' in models.txt (see Models.txt above).
  
  
JUMPATTACK2 {players, enemies}
+
DOWN {players, enemies}
*~An attack. Just like the normal JUMPATTACK, except that players perform this attack by jumping, then holding the down button and pressing attack.
 
*~Enemies randomnly perform this attack when a player is in range.
 
*~When enemies use this attack, they'll jump straight up.
 
 
 
 
 
JUMPATTACK3 {players}
 
 
*~Optional.
 
*~Optional.
*~An attack. Just like the normal JUMPATTACK, except that players perform this attack by jumping, then holding the up button and pressing attack.
+
*~Played when the character walk down, down-left, or down-right.
 +
*~For this animation to work correctly, it must have the same number of frames as the WALK animation.
 +
*~Entity can have more DOWN animations, see below.
  
  
JUMPSPECIAL/SPECIAL3 {players}
+
DOWN#
*~Optional.  
+
*~Played if there's opponent within set 'range' while in DOWN.
*~An attack. Just like the normal JUMPATTACK, except that players perform this attack by jumping, then pressing special.
+
*~Works just like IDLE# above except it's for DOWN.
*~Unlike other jumpattack animations, players lost their momentum in this animation. IOW they won't move up and forward at all even if they are running before jumping. They still fall normally of course. The only exception is if 'dive' is present in the animation.
+
*~Before using this, increase the maximum number of DOWN with 'maxdowns' in models.txt (see Models.txt above).
*~This animation can be disabled with 'type' in level texts. See 'Level files' below for more info
 
  
  
ATTACKUP {players}
+
DUCK {players, enemies}
 
*~Optional.
 
*~Optional.
*~An attack. Players perform this by pressing up twice.
+
*~This will only play in a stage whose max and min 'z' are the same (In other words, a 2-D stage).
*~This attack overrides freespecials. If you use it, you will not be able to use a freespecial which has Up, Up, {button} as it's input. You also can't use this attack if you use the DODGE animation.
+
*~Plays when a player presses down. They can use this to duck under high attacks.
 +
*~This animation is also played if player is under platform which is shorter than his/her height. However in this state, player is forced to play this animation instead. In this state, pressing left or right only changes direction.
 +
*~While ducking, player can perform either SLIDE or DUCKATTACK (see below).
 +
*~If DUCKING is present (see below), this animation will play after it.
 +
*~For enemy that use DUCK you can use "range {min} {max}" animation command for custom DUCK when the entity is in that custom range.
  
  
ATTACKDOWN {players}
+
DUCKING {players, enemies} (6330+)
 
*~Optional.
 
*~Optional.
*~An attack. Players perform this by pressing down twice.
+
*~This animation occurs before the "DUCK" animation. In other words, it's a transition between the idle and the duck animation.
*~This attack overrides freespecials. If you use it, you will not be able to use a freespecial which has Down, Down, {button} as it's input. You also can't use this attack if you use the DODGE animation.
+
*~After this animation ends, the entity will go to DUCK if the hold button is held.
 +
*~Same rules of DUCK appliess here.
  
  
ATTACKFORWARD {players}  
+
DUCKRISE {players, enemies} (6330+)
 
*~Optional.
 
*~Optional.
*~An attack. Players perform this by pressing forward twice.
+
*~This animation occurs after the "DUCK" animation if the down button is not being held. In other words, it's a transition between the DUCK and the IDLE animation.
*~This attack cannot be used with running. Also, if you use it, you will not be able to use a freespecial which has Forward, Forward, {button} as it's input.
+
*~Same rules of DUCK appliess here.
 +
 
  
 +
LAND (players)
 +
*~Optional, but players may still be able to land safely depending on the 'autoland'settings in MODELS.txt.
 +
*~If a player is thrown by an enemy (Thrown, not knocked down), then they can press Up and Jump right when they hit the ground to recover instantly and take no damage. This animation will be played instead of the normal fall animation.
  
ATTACKBACKWARD {players}
+
 
 +
RUN (players, enemies)
 
*~Optional.
 
*~Optional.
*~An attack. Players perform this by pressing backwards once, then quickly pressing attack.
+
*~If the player has their running speed specified, this is the animation they will use to run.
*~Unlike most attacks which use the back button, this does not flip your direction.
+
*~To perform this, tap forward twice then hold forward to keep running.
 +
*~By setting loop to 0 and adding in the jumpframe command, you can turn this into a dash animation. The player will leap forward.
 +
*~This animation is only used by enemies with subtype chase. Their running speed is determined by 'running' or 'speed' if that's unavailable.
 +
 
 +
BACKRUN (players, enemies)
 +
*~Optional.(4310+)
 +
*~To active it set facing {flag} at entity header.
 +
*~Using back,back or forward,forward (in opposite direction) you'll enter in backrun
 +
 
 +
 
 +
JUMP {players, enemies}
 +
*~Plays when a player presses jump or when an enemy approaches a platform.
 +
*~You don't need to draw the entity moving upward, since BoR moves them automatically.
 +
*~If given to an enemy, this animation should also have a range listed.
 +
*~Every jump animations including this will keep playing until the character lands regardless how long the animations are.
  
  
FOLLOW{#} {players,enemies}
+
JUMPDELAY {players, enemies}
 
*~Optional.
 
*~Optional.
*~{#} is number and its accepted values are 1, 2, 3 and 4. There's no space between FOLLOW and {#}.
+
*~Played just before entity jumps with normal jump. Used to make delay animation before entity actually jumps. That means when this animation is played, entity is still on ground.
*~It works just like any attack animation except that it is only played when followup condition is met or entity is attacked in counter pose.
+
*~It won't be used if entity jumps with 'jumpframe'.
  
  
FOLLOW5,FOLLOW6,... {player,enemies}
+
JUMPLAND {players, enemies}
*~These animations are only usable if you have increased FOLLOW animations limit. To increase the limit use 'maxfollows' (see details above in Models.txt section).
+
*~Optional.
*~After they are available, they work just like FOLLOW1, FOLLOW2, FOLLOW3 and FOLLOW4.
+
*~Played after entity lands from normal jump.
 +
*~It won't be used if entity jumps with 'jumpframe'.
  
  
FREESPECIAL{[=#=]} {players, enemies}
+
FORWARDJUMP {players, enemies}
 
*~Optional.
 
*~Optional.
*~If {[=#=]} is not placed on the end of the name, it references FREESPECIAL1. If {[=#=]} is a number from 2 to 8, it references that FREESPECIAL. Anything else is an error.
+
*~Played when entity jumps forward with normal jump.
*~There is no space between FREESPECIAL and {[=#=]}.
+
*~It won't be used if entity jumps with 'jumpframe'.
*~An attack. The input depends on the 'com {dir1} {dir2} {action} freespecial{[=#=]}' earlier in the .txt file.
 
*~FREESPECIAL defaults to F, F, A if you can't run and B, F, A if you can. FREESPECIAL2 defaults to D, D, A. FREESPECIAL3 defaults to U, U, A. The other FREESPECIALs don't default to anything, and thus need to be defined to be useable by command.
 
*~For enemies, this animation works just like normal attack animations.
 
  
  
FREESPECIAL9,FREESPECIAL10,... {player,enemies}
+
RUNJUMP (players)
*~These animations are only usable if you have increased FREESPECIAL animations limit. To increase the limit use 'maxfreespecials' (see details above in Models.txt section).
+
*~Optional.
*~After they are available, they work just like other FREESPECIALs.
+
*~Played when entity jumps forward while running with normal jump.
 +
*~It won't be used if entity jumps with 'jumpframe'.
  
  
SPECIAL {players, enemies}
+
DODGE (players)
*~Optional for enemies.
+
*~Optional.
*~A breakout attack.
+
*~Players with this animation can perform a 'depth' dodge up or down by pressing up or down twice.  
*~Players perform this by pressing special. They can use it while being held by an enemy to break free, or while playing an injured animation (besides fall, shock, burn, and death) to counterattack.
+
*~The player will move along the z axis (closer to or farther from the screen).
*~For players to use this attack, they must have at least 6 life, which they will lose upon performing the attack. You can change this with 'energycost' (see below).
+
*~The dodge will last as long as the animation does, and you can't cancel out of it by attacking. So don't set it to loop.
*~Enemies perform this attack automatically if a player grabs and holds them for too long without throwing them or knocking them down. However, they'd lose 6 health too after performing this move just like players. Use 'energycost' to modify it.
+
*~This cannot be used with ATTACKUP, ATTACKDOWN, or freespecials with the input U, U or D, D.
*~For players, this animation can be disabled with 'type' in level texts. See 'Level files' below for more info
 
  
  
SPECIAL2 {players, enemies}
+
GET {players, enemies}
 
*~Optional.
 
*~Optional.
*~Players perform this by pressing forward and special, or special while running.
+
*~Played when the character picks up an item.
*~Enemies perform this after they receive certain number of consecutive hits. Used together with 'escapehits'.
 
*~For players, this animation can be disabled with 'type' in level texts. See 'Level files' below for more info
 
  
  
GRABATTACK {players, enemies}
+
JUMPCANT {players}
*~Optional for enemies, can be made optional for players with cantgrab or notgrab.
+
*~Optional.
*~When you've grabbed another character, you can press attack to use this attack up to two times.
+
*~This animation is only played if player tried to perform jumpattack which costs energy without having enough energy.
  
  
GRABATTACK2 {players, enemies}
+
CHARGE {players}
*~Optional. If not defined, defaults to ATTACK3.
 
*~When you've grabbed another character and used GRABATTACK twice, you can press attack to use this attack.
 
*~You can also use this early by pressing jump.
 
 
 
 
 
GRABFORWARD {players}
 
 
*~Optional.
 
*~Optional.
*~When you've grabbed another character, you can press forward and attack to use this attack up to two times. Just like GRABATTACK except for the input.
+
*~Despite its name, this animation is not related to CHARGEATTACK at all.
 +
*~This animation is executed by holding special and jump together. As long the buttons are held, the animation will play continuously.
 +
*~While playing, player's MP will be recovered at specified rate. The recharge rate is specified with 'chargerate' (see Entity's Header data above).
  
  
GRABFORWARD2 {players}
+
CANT (players)
*~Optional. If not defined, defaults to ATTACK3.
+
*~Used with MP.
*~When you've grabbed another character and used GRABFORWARD twice, you can press forward and attack to use this attack.
+
*~If a player has this animation, and they attempt to use an attack which costs more MP than they have at the moment, they will play this animation and can't dodge or attack until it ends.  
*~You can't use this early by pressing jump and forward.
+
*~If the attack they were using had the Special button as input, they will block instead of playing this animation.
  
  
GRABUP {players}
+
GRAB {players, enemies}
*~Optional.
+
*~Optional for enemies and players.
*~When you've grabbed another character, you can press up and attack to use this attack up to two times. Just like GRABATTACK except for the input.
+
*~When this entity moves close enough to another, this entity will grab hold of the other.
 +
*~If a player grabs an enemy, they can hold the direction opposite the enemy for a few seconds to let go and walk away.
 +
*~If you don't want this entity to be able to grab, just don't give them this animation.
  
  
GRABUP2 {players}
+
GRABWALK (players)
*~Optional. If not defined, defaults to ATTACK3.
+
*~Optional. Currently only used by players.
*~When you've grabbed another character and used GRABUP twice, you can press up and attack to use this attack.
+
*~This animation is played when player walks while grabbing enemy.
*~You can't use this early by pressing jump and up.
+
*~The grabwalk speed is determined by 'grabwalk' (see above). However, declaring this animation is enough to enable grabwalking.
 +
*~This animation is like WALK animation so setting 'loop 1' is recommended. However, this animation is NOT performed in reverse while walking backwards. Use GRABBACKWALK below for that case.
  
  
GRABDOWN {players}
+
GRABBACKWALK (players)
*~Optional.
+
*~Optional. Currently only used by players.
*~When you've grabbed another character, you can press down and attack to use this attack up to two times. Just like GRABATTACK except for the input.
+
*~This animation is played when player walks backwards while grabbing enemy. Only played if player can't turn around while grabbing.
 +
*~The grabbackwalk speed is also determined by 'grabwalk' (see above).
 +
*~This animation is like WALK animation so setting 'loop 1' is recommended.
  
  
GRABDOWN2 {players}
+
GRABWALKUP (players)
*~Optional. If not defined, defaults to ATTACK3.
+
*~Optional.
*~When you've grabbed another character and used GRABDOWN twice, you can press down and attack to use this attack.
+
*~This animation is played when player walks upwards (in z axis that is) while grabbing enemy.
*~You can't use this early by pressing jump and down.
+
*~The grabbackwalk speed is also determined by 'grabwalk' (see above).
 +
*~This animation is like WALK animation so setting 'loop 1' is recommended.
  
  
THROW {players, enemies}
+
GRABWALKDOWN (players)
 
*~Optional.
 
*~Optional.
*~When you've grabbed another character, you can press back and attack to use this attack.
+
*~This animation is played when player walks downwards (in z axis that is) while grabbing enemy.
*~By default, this animation deals 21 damage to the thrown victim. You can change the height, distance, and damage recieved for the throwee with the 'throwdamage' and 'throw' commands.
+
*~The grabbackwalk speed is also determined by 'grabwalk' (see above).
*~The normal score rules do not apply to throws: they always reward the thrower with a number of points equal to the damage they dealt.
+
*~This animation is like WALK animation so setting 'loop 1' is recommended.
*~The damage from this attack is not dealt until the victim lands. If they are a player and have a LAND animation, they can recover by pressing Up and Jump right when they land and avoid damage completely!
 
  
  
GRABBACKWARD {players}
+
GRABTURN (players)
 
*~Optional.
 
*~Optional.
*~When you've grabbed another character, you can press back and attack to use this attack up to two times. Just like GRABATTACK except for the input.
+
*~This animation is played when player turns around while grabbing enemy. Only usable if 'grabturn' is set to 1.
*~Since it has same command as THROW, don't use them both to avoid confusion!
+
*~During this animation, player is stationary even if player can perform GRABWALK. OTOH grabbed opponent will be moved to opposite place with same grabdistance.
  
  
GRABBACKWARD2 {players}
+
SLIDE {players}
 
*~Optional.
 
*~Optional.
*~When you've grabbed another character and used GRABBACKWARD twice, you can press back and attack to use this attack.
+
*~This animation is performed by pressing DOWN+JUMP while walking or idling or in WALK or IDLE animation.
*~You can't use this early by pressing jump and back.
 
*~Since it has same command as THROW, don't use them both to avoid confusion!
 
  
  
DUCKATTACK {player}
+
RUNSLIDE {players}
 
*~Optional.
 
*~Optional.
*~This animation is performed if attack is pressed while player is ducking.
+
*~This animation is performed by pressing DOWN+JUMP while running or in RUN animation.
*~It can also be played when player is forced to duck like under platform.
 
  
  
==Reaction==
+
EDGE {players} (6330+)
 +
*~Optional.
 +
*~This animation is played when the player is on the edge of walls, platforms and holes, as if trying to balance so as not to fall.
  
PAIN{#} {players, enemies}
 
*~Played when an entity is hit by an attack which does not knock them down. Bikers play this as their death animation.
 
*~{#} determines the number of PAIN animation. The possible numbers are 2 to 10 and empty. There's no space between PAIN and {#}. Empty means just PAIN without number.
 
*~This animation is used in conjuction with attack{#}. Example: PAIN5 will be played if entity is hit by non knockdown attack5.
 
*~PAIN is mandatory while PAIN2, PAIN3 etc are optional.
 
*~If required PAIN{#} is not available, PAIN will be used instead.
 
*~This animation will also be played if entity is hit by knockdown attack but entity is immune to knockdown attack with 'nodrop' or 'knockdowncount' (see them in Header Data above). Number of PAIN animation will be determined by received attack number.
 
  
 
+
BACKEDGE {players} (6330+)
PAIN11,PAIN12,... {player,enemies}
+
*~Optional.
*~These animations are only usable if you have increased attacktype limit. To increase the limit use 'maxattacktypes' (see details above in Models.txt section).
+
*~Works like EDGE animation, but happens when the edge is behind of the player.
*~After they are available, they work just like other PAINs.
 
  
  
SPAIN {players, enemies}
+
VICTORY {players} (6330+)
*~Optional. Defaults to PAIN.
+
*~Optional.
*~No, not Spain. It stand for Shocked PAIN.
+
*~This animation is performed when you defeat all bosses in a level.
*~Played when an entity is hit by a shock attack which does not knock them down.  
 
  
  
BPAIN {players, enemies}
+
LOSE {players} (6330+)
*~Optional. Defaults to PAIN.
+
*~Optional.
*~This means Burned PAIN.
+
*~This animation is performed when you got a time over.
*~Played when an entity is hit by a burn attack which does not knock them down.  
 
  
 +
==Attack==
  
FALL{#} {players, enemies, obstacles}
+
ATTACK1 {players, enemies}
*~Played when an entity is knocked down by a knock down attack.
+
*~By default, this animation is NOT optional for players. It is optional for enemies.
*~{#} determines the number of FALL animation. The accepted numbers are 2 to 10 and empty. There's no space between FALL and {#}. Empty means just FALL without number.
+
*~An attack. Players perform this by pressing attack (unless the chain order is changed).
*~This animation is used in conjuction with attack{#}. Example: FALL3 will be played if entity is hit by knockdown attack3.
+
*~Enemies perform this attack when a player is in range (range is specified with the 'range' command).
*~FALL is mandatory while FALL2, FALL3 etc are optional.
+
*~Enemies are slightly more likely to use ATTACK1 than ATTACK2.
*~If required FALL{#} is not available, FALL will be used instead.
+
*~Enemy bombs play this animation if they touch the ground. If they don't have an ATTACK2 animation, they'll use this instead, as well.
*~Declaring 'bbox' in this animation allows entity to be juggled.
 
*~Entities can't be grabbed (by walking to them) in this animation.
 
*~This animation will also be played if entity is knocked down by non knock down attack such as hit while in air or while frozen or entity uses 'knockdowncount -1' (see it in Header Data above). Number of FALL animation will be determined by received attack number.
 
  
  
FALL11,FALL12,... {player,enemies}
+
ATTACK2 {players, enemies}
*~These animations are only usable if you have increased attacktype limit. To increase the limit use 'maxattacktypes' (see details above in Models.txt section).
+
*~By default, this animation is NOT optional for players. It is optional for enemies.
*~After they are available, they work just like other FALLs.
+
*~Another attack. Players use this if they press attack after hitting with ATTACK1 twice (unless the chain order is changed).
 +
*~Enemies use this just like ATTACK1.
 +
*~Enemies are slightly more likely to use ATTACK2 than ATTACK3.
 +
*~Enemy bombs play this animation if they touch another entity's bbox or attack box.
  
  
RISE{#} {players, enemies}
+
ATTACK3 {players, enemies}
*~Played when an entity who has fallen down gets back up normally after being knocked down or thrown. However, entities could play RISEATTACK instead of this if certain conditions are met (see RISEATTACK below).
+
*~By default, this animation is NOT optional for players. It is optional for enemies.
*~{#} determines the number of RISE animation. The accepted numbers are 2 to 10 and empty. There's no space between RISE and {#}. Empty means just RISE without number.
+
*~And another attack. Players use this if they press attack after hitting with ATTACK2 (unless the chain order is changed)
*~This animation is used in conjuction with attack{#}. Example: RISE2 will be played if entity was falling in FALL2 animation before.
+
*~This animation is also played instead if grab finishers and chargeattack are not available..
*~RISE is mandatory while RISE2, RISE3 etc are optional.
+
*~Enemies use this just like ATTACK1 and ATTACK2.
*~If required RISE{#} is not available, RISE will be used instead.
 
  
  
RISE11,RISE12,... {player,enemies}
+
ATTACK4 {players, enemies}
*~These animations are only usable if you have increased attacktype limit. To increase the limit use 'maxattacktypes' (see details above in Models.txt section).
 
*~After they are available, they work just like other RISEs.
 
 
 
 
 
RISEB {players, enemies}
 
 
*~Optional.
 
*~Optional.
*~Played when an entity is rising after falling with BURN animation.
+
*~Players use this only if it is included in 'atchain' .
 +
*~Enemies use this just like ATTACK1, ATTACK2 and ATTACK3.
  
  
RISES {players, enemies}
+
ATTACK5,ATTACK6,... {player,enemies}
*~Optional.
+
*~These animations are only usable if you have increased ATTACK animations limit. To increase the limit use 'maxattacks' (see details above in Models.txt section).
*~Played when an entity is rising after falling with SHOCK animation.
+
*~After they are available, they work just like ATTACK1, ATTACK2, ATTACK3 and ATTACK4.
  
  
RISEATTACK{#} {players, enemies}
+
CHARGEATTACK {players}
 
*~Optional.
 
*~Optional.
*~Players play this instead of RISE if Up+Attack is pressed before they rise.
+
*~This attack is unleashed after holding attack button for about 3 seconds then let it go.
*~Enemies play this immediately if a player is in range of the attack while they are lying on ground.
+
*~If this is not available, the last attack in player's attack chain will be played instead.
*~{#} determines the number of RISEATTACK animation. The accepted numbers are 2 to 10 and empty. There's no space between RISEATTACK and {#}. Empty means just RISEATTACK without number.
 
*~This animation is used in conjuction with attack{#}. Example: RISEATTACK2 will be played if entity was knocked down with attack2 before.
 
*~How entity performs RISEATTACK is controlled by 'riseattacktype' in Header Data above.  
 
  
  
RISEATTACK11,RISEATTACK12,... {player,enemies}
+
ATTACKBOTH {players}
*~These animations are only usable if you have increased attacktype limit. To increase the limit use 'maxattacktypes' (see details above in Models.txt section).
+
*~Optional.
*~After they are available, they work just like other RISEATTACKs.
+
*~An attack. Players use this if they hold attack and then press jump.
 +
*~This cannot be used if the player has a BLOCK animation. If MODELS.txt has 'ajspecial 1', this is replaced by the special attack.
  
  
RISEATTACKB {players, enemies}
+
UPPER {enemies}
 
*~Optional.
 
*~Optional.
*~Played when an entity is riseattacking after knocked down with burn attack before.
+
*~If a player is on the same row as an enemy with an UPPER animation and jumps, the enemy will perform this attack automatically.
 +
*~Range command (see Animation Data below) can be used for this attack although it's not necessary.
  
  
RISEATTACKS {players, enemies}
+
RUNATTACK {players}
 
*~Optional.
 
*~Optional.
*~Played when an entity is riseattacking after knocked down with shock attack before.
+
*~Requires the character to be able to run. Otherwise, they can't really use it.
 +
*~If the player presses attack while running, they will perform this attack.
 +
*~Although player is running while attack is pressed, player won't be moving in this animation. If you want them to move, insert 'move' here.
  
  
SHOCK {players, enemies}
+
RUNJUMPATTACK {players}
*~Optional. Defaults to FALL.
+
*~Optional.
*~Played when an entity is hit by a shock attack which knocks them down, or a shock attack while in air or frozen.
+
*~Requires the character has a RUN animation. Otherwise, they can't really use it.
 +
*~If the player presses attack during a running jump, they will perform this attack.
  
  
BURN {players, enemies}
+
JUMPATTACK {players, enemies}
*~Optional. Defaults to FALL.
+
*~An attack.
*~Played when an entity is hit by a burn attack which knocks them down, or a burn attack while in air or frozen.
+
*~For players, this is the attack performed when a player jumps and presses attack.
 +
*~Enemies randomnly perform this attack when a player is in range.
 +
*~The jump is automatic. You don't need to use the jumpframe command or draw the entity moving forward.
 +
*~When enemies use this attack, they'll jump forward.
  
  
DEATH{#} {players, enemies, obstacles}
+
JUMPFORWARD {players}
*~Optional. Although it is optional, DEATH will be used as default if other DEATH{#} aren't available.
+
*~Optional.
*~Played when an entity loses all it's life after hit by attack{#}. Example: DEATH8 will be played if entity is killed by attack8.
+
*~If a player has this animation, they will only play their JUMPATTACK animation if they jump straight up and attack. This attack will be used if they jump forward and attack.
*~How this animation will be played is controlled by 'falldie/death' (see Header Data above).
 
*~{#} determines the number of death animation. The accepted numbers are 2 to 10 and empty. There's no space between DEATH and {#}. Empty means just DEATH without number.
 
*~If an entity is killed by being thrown, they will not use this animation.
 
  
  
DEATH11,DEATH12,... {player,enemies}
+
JUMPATTACK2 {players, enemies}
*~These animations are only usable if you have increased attacktype limit. To increase the limit use 'maxattacktypes' (see details above in Models.txt section).
+
*~An attack. Just like the normal JUMPATTACK, except that players perform this attack by jumping, then holding the down button and pressing attack.
*~After they are available, they work just like other DEATHs.
+
*~Enemies randomnly perform this attack when a player is in range.
 +
*~When enemies use this attack, they'll jump straight up.
  
  
BDIE {players, enemies}
+
JUMPATTACK3 {players}
 
*~Optional.
 
*~Optional.
*~Played when the character is finished by 'burn'.
+
*~An attack. Just like the normal JUMPATTACK, except that players perform this attack by jumping, then holding the up button and pressing attack.
*~It's still controlled by 'death' though.
 
  
  
SDIE {players, enemies}
+
JUMPSPECIAL/SPECIAL3 {players}
 
*~Optional.
 
*~Optional.
*~Played when the character is finished by 'shock'.
+
*~An attack. Just like the normal JUMPATTACK, except that players perform this attack by jumping, then pressing special.
*~It's still controlled by 'death' though.
+
*~Unlike other jumpattack animations, players lost their momentum in this animation. IOW they won't move up and forward at all even if they are running before jumping. They still fall normally of course. The only exception is if 'dive' is present in the animation.
 +
*~This animation can be disabled with 'type' in level texts. See 'Level files' below for more info
  
  
CHIPDEATH {players}
+
ATTACKUP {players}
 
*~Optional.
 
*~Optional.
*~Played when players are killed by chip damage while blocking. 'blockratio' must be set before using this and don't set 'nochipdeath' (see them in Models.txt section above).
+
*~An attack. Players perform this by pressing up twice.
*~For your information, chip damage is reduced damage from attacks recieved while blocking.
+
*~This attack overrides freespecials. If you use it, you will not be able to use a freespecial which has Up, Up, {button} as it's input. You also can't use this attack if you use the DODGE animation.
  
  
BLOCK (enemies, players)
+
ATTACKDOWN {players}
 
*~Optional.
 
*~Optional.
*~For players, this animation will only play if 'ajspecial 1' is in MODELS.txt. It will play when the player presses the special attack button.
+
*~An attack. Players perform this by pressing down twice.
*~Enemies use this with 'blockodds {int}'. If an enemy blocks your attack, they will play this animation.
+
*~This attack overrides freespecials. If you use it, you will not be able to use a freespecial which has Down, Down, {button} as it's input. You also can't use this attack if you use the DODGE animation.
*~Enemies will only block an attack if it would otherwise hit them (i.e. they won't block an attack which goes 10 feet over their heads).
 
*~Also, only attacks from front would be blocked. Attacks from behind won't be blocked even if they are blockable.
 
  
  
BLOCKPAIN{#} {players,enemies}
+
ATTACKFORWARD {players}
 
*~Optional.
 
*~Optional.
*~Used together with 'blockpain' (see Header Data above). Played if received damage exceeds 'blockpain' while blocking.
+
*~An attack. Players perform this by pressing forward twice.
*~{#} determines the number of BLOCKPAIN animation. The accepted numbers are 2 to 10 and empty. There's no space between BLOCKPAIN and {#}. Empty means just BLOCKPAIN without number.
+
*~This attack cannot be used with running. Also, if you use it, you will not be able to use a freespecial which has Forward, Forward, {button} as it's input.
*~This animation is used in conjuction with attack{#}. Example: BLOCKPAIN7 will be played if entity is hit by attack7.
 
*~If required BLOCKPAIN{#} is not available, BLOCKPAIN will be used instead. If BLOCKPAIN is also unavailable, BLOCK animation will be replayed.
 
  
  
BLOCKPAIN11,BLOCKPAIN12,... {player,enemies}
+
ATTACKBACKWARD {players}
*~These animations are only usable if you have increased attacktype limit. To increase the limit use 'maxattacktypes' (see details above in Models.txt section).
+
*~Optional.
*~After they are available, they work just like other BLOCKPAINs.  
+
*~An attack. Players perform this by pressing backwards once, then quickly pressing attack.
 +
*~Unlike most attacks which use the back button, this does not flip your direction.
  
  
BLOCKPAINB {players, enemies}
+
FOLLOW{#} {players,enemies}
 
*~Optional.
 
*~Optional.
*~Played when an entity received too much damage from 'burn' attack while blocking.
+
*~{#} is number and its accepted values are 1, 2, 3 and 4. There's no space between FOLLOW and {#}.
 +
*~It works just like any attack animation except that it is only played when followup condition is met or entity is attacked in counter pose.
  
  
BLOCKPAINS {players, enemies}
+
FOLLOW5,FOLLOW6,... {player,enemies}
*~Optional.
+
*~These animations are only usable if you have increased FOLLOW animations limit. To increase the limit use 'maxfollows' (see details above in Models.txt section).
*~Played when an entity received too much damage from 'shock' attack while blocking.
+
*~After they are available, they work just like FOLLOW1, FOLLOW2, FOLLOW3 and FOLLOW4.
  
  
GUARDBREAK {players, enemies}
+
FREESPECIAL{#} {players, enemies}
 
*~Optional.
 
*~Optional.
*~Played if entity blocks an attack but his/her 'guardpoints' is 0. See 'guardpoints' in Header Data above.
+
*~If {#} is not placed on the end of the name, it references FREESPECIAL1. If {#} is a number from 2 to 8, it references that FREESPECIAL. Anything else is an error.
 +
*~There is no space between FREESPECIAL and {#}.
 +
*~An attack. The input depends on the 'com {dir1} {dir2} {action} freespecial{#}' earlier in the .txt file.
 +
*~FREESPECIAL defaults to F, F, A if you can't run and B, F, A if you can. FREESPECIAL2 defaults to D, D, A. FREESPECIAL3 defaults to U, U, A. The other FREESPECIALs don't default to anything, and thus need to be defined to be useable by command.
 +
*~For enemies, this animation works just like normal attack animations.
  
  
GRABBED {players, enemies}
+
FREESPECIAL9,FREESPECIAL10,... {player,enemies}
*~Optional. Defaults to the PAIN animation if not present.
+
*~These animations are only usable if you have increased FREESPECIAL animations limit. To increase the limit use 'maxfreespecials' (see details above in Models.txt section).
*~Plays when this character is grabbed by another.
+
*~After they are available, they work just like other FREESPECIALs.
  
  
GRABBEDWALK (players,enemies)
+
SPECIAL {players, enemies}
*~Optional. Although only players who can perform GRABWALK, other players (aside from enemies) can be grabbed too.
+
*~Optional for enemies.
*~This animation is played when entity is being held and grabbing player is grabwalking.
+
*~A breakout attack.
 +
*~Players perform this by pressing special. They can use it while being held by an enemy to break free, or while playing an injured animation (besides fall, shock, burn, and death) to counterattack.
 +
*~For players to use this attack, they must have at least 6 life, which they will lose upon performing the attack. You can change this with 'energycost' (see below).
 +
*~Enemies perform this attack automatically if a player grabs and holds them for too long without throwing them or knocking them down. However, they'd lose 6 health too after performing this move just like players. Use 'energycost' to modify it.
 +
*~For players, this animation can be disabled with 'type' in level texts. See 'Level files' below for more info
  
  
GRABBEDBACKWALK (players,enemies)
+
SPECIAL2 {players, enemies}
*~Optional. I hope the name doesn't confuse you.
+
*~Optional.
*~This animation is played when entity is being held and grabbing player is grabbackwalking or walking backwards while grabwalking.
+
*~Players perform this by pressing forward and special, or special while running.
 +
*~Enemies perform this after they receive certain number of consecutive hits. Used together with 'escapehits'.
 +
*~For players, this animation can be disabled with 'type' in level texts. See 'Level files' below for more info
  
  
GRABBEDWALKUP (players,enemies)
+
GRABATTACK {players, enemies}
*~Optional. If the name confuses you, try reading it slowly.
+
*~Optional for enemies, can be made optional for players with cantgrab or notgrab.
*~This animation is played when entity is being held and grabbing player is walking upwards (in z axis that is) while grabwalking.
+
*~When you've grabbed another character, you can press attack to use this attack up to two times.
  
  
GRABBEDWALKDOWN (players,enemies)
+
GRABATTACK2 {players, enemies}
*~Optional. If the name confuses you, try reading it slowly.
+
*~Optional. If not defined, defaults to ATTACK3.
*~This animation is played when entity is being held and grabbing player is walking downwards (in z axis that is) while grabwalking.
+
*~When you've grabbed another character and used GRABATTACK twice, you can press attack to use this attack.
 +
*~You can also use this early by pressing jump.
  
  
GRABBEDTURN (players,enemies)
+
GRABFORWARD {players}
 
*~Optional.
 
*~Optional.
*~This animation is played when entity is being held and grabbing player is grabturning.
+
*~When you've grabbed another character, you can press forward and attack to use this attack up to two times. Just like GRABATTACK except for the input.
  
----
 
  
=Animation Data=
+
GRABFORWARD2 {players}
 +
*~Optional. If not defined, defaults to ATTACK3.
 +
*~When you've grabbed another character and used GRABFORWARD twice, you can press forward and attack to use this attack.
 +
*~You can't use this early by pressing jump and forward.
  
*Just to reiterate, this part is 3rd part of entity files section. This part is for animation's settings.
 
*Animation Headers are commands which can only be declared once per animation.
 
*Frame properties are commands which can be declared more than once in animation. With the exception of 'frame', they must be declared BEFORE respective 'frame' and can only be done once.
 
*"Frame" commands are commands which can only be declared once per animation however they have frame parameter to define at which frame they work. Related commands are here too.
 
*Attack supplement are commands which should be declared together with 'attack{#}' and typed between 'attack{#}' and 'frame'. They also work with 'blast', 'steal', 'burn', 'shock' and 'freeze'.
 
  
 +
GRABUP {players}
 +
*~Optional.
 +
*~When you've grabbed another character, you can press up and attack to use this attack up to two times. Just like GRABATTACK except for the input.
  
==Animation Header==
 
  
loop {bi}
+
GRABUP2 {players}
*~Determines whether or not an animation repeats itself when finished.
+
*~Optional. If not defined, defaults to ATTACK3.
**0 = animation ends when the last frame is reached (default).
+
*~When you've grabbed another character and used GRABUP twice, you can press up and attack to use this attack.
**1 = animation repeats itself after the last frame.
+
*~You can't use this early by pressing jump and up.
*~You can change it during the animation, but there's not really much of a point...
 
*~Some animations should NOT be set to loop. Examples include most attacks and injured animations.
 
  
  
fastattack {bi}
+
GRABDOWN {players}
*~Normally, in order for an attack to hit entities multiple times, the attack boxes must be separated by at least one frame with an empty attack box (one set to all 0) and must also be separated by a brief delay.
+
*~Optional.
*~If this is set to 1, this animation's attack boxes are not restricted by the delay (it will still need an empty attack box between frames, though).
+
*~When you've grabbed another character, you can press down and attack to use this attack up to two times. Just like GRABATTACK except for the input.
  
  
blockfx {path}
+
GRABDOWN2 {players}
*~{path} should point to a .wav file.
+
*~Optional. If not defined, defaults to ATTACK3.
*~If during this animation entity blocks an attack, this sound effect will be played. Normally used in BLOCK animation but it works in any animation if entity is in blocking status (set by script).
+
*~When you've grabbed another character and used GRABDOWN twice, you can press down and attack to use this attack.
*~Defaults to block.wav but if that sfx isn't exist, beat1.wav will be used instead.
+
*~You can't use this early by pressing jump and down.
  
  
blockflash {name}
+
THROW {players, enemies}
*~{name} is the name of an entity declared in MODELS.txt.
+
*~Optional.
*~If during this animation entity blocks an attack, this blockflash will be played instead of the normal hitflash for this entity. Normally used in BLOCK animation but it works in any animation if entity is in blocking status (set by script).
+
*~When you've grabbed another character, you can press back and attack to use this attack.
 +
*~By default, this animation deals 21 damage to the thrown victim. You can change the height, distance, and damage recieved for the throwee with the 'throwdamage' and 'throw' commands.
 +
*~The normal score rules do not apply to throws: they always reward the thrower with a number of points equal to the damage they dealt.
 +
*~The damage from this attack is not dealt until the victim lands. If they are a player and have a LAND animation, they can recover by pressing Up and Jump right when they land and avoid damage completely!
  
  
range {min} {max}
+
GRABBACKWARD {players}
*~Used for enemy attacks and jumps. Also used by homing projectiles.
+
*~Optional.
*~This command lets the enemy know when to perform their attacks or to jump on platforms..
+
*~When you've grabbed another character, you can press back and attack to use this attack up to two times. Just like GRABATTACK except for the input.
*~For the enemy to use the attack, a player must be more than {min} away, but less than {max} away in x axis.
+
*~Since it has same command as THROW, don't use them both to avoid confusion!
*~For the enemy to jump on a platform, the enemy must be within {min} pixels of the platform, and the platform must be less than {max} pixels high.
 
*~This is measured in pixels, starting at the enemy's offset point and moving towards the player's offset.
 
*~If not included, the first number will default to -10, and the second to 20 times the entity's jumpheight variable.
 
*~For homing projectiles, this determines their targeting range.
 
*~If this command is declared together with 'rangez' and/or 'rangea', opponent's location must be within ALL of them before attack animation is performed.
 
*~Default 'range' for ATTACK{#} is 0 75, for JUMPATTACK and JUMPATTACK2 is 0 150, for UPPER -10 120 and for BLOCK is 1 100. The last one only has effect if enemy uses 'nopassiveblock'.
 
  
  
rangez {min} {max}
+
GRABBACKWARD2 {players}
*~This command works similar with 'range' (see above) except that it works in z axis instead.
+
*~Optional.
*~Default values for {min} and {max} are '-grabdistance/3' and 'grabdistance/3' respectively.
+
*~When you've grabbed another character and used GRABBACKWARD twice, you can press back and attack to use this attack.
*~If this command is declared together with 'range' and/or 'rangea', opponent's location must be within ALL of them before attack animation is performed.
+
*~You can't use this early by pressing jump and back.
 +
*~Since it has same command as THROW, don't use them both to avoid confusion!
 +
 
  
 +
DUCKATTACK {player}
 +
*~Optional.
 +
*~This animation is performed if attack is pressed while player is ducking.
 +
*~It can also be played when player is forced to duck like under platform.
  
rangea {min} {max}
 
*~This command works similar with 'range' (see above) except that it works in y axis or altitude instead.
 
*~Default values for {min} and {max} are -1000 and 1000 respectively.
 
*~If this command is declared together with 'range' and/or 'rangez', opponent's location must be within ALL of them before attack animation is performed.
 
  
 +
==Reaction==
  
dive {hori} {vert}
+
PAIN{#} {players, enemies}
*~Allows characters to dive while in air. So obviously, they need to be in the air for it to work.
+
*~Played when an entity is hit by an attack which does not knock them down. Bikers play this as their death animation.
*~Actually this command simply makes entity moves downwards so it works even on ground. However, it's buggy cause entity will be stuck.
+
*~{#} determines the number of PAIN animation. The possible numbers are 2 to 10 and empty. There's no space between PAIN and {#}. Empty means just PAIN without number.
*~NOTE: Animations with this ALWAYS starts diving at the first frame. If you want to change starting frame, you gonna need script.
+
*~This animation is used in conjuction with attack{#}. Example: PAIN5 will be played if entity is hit by non knockdown attack5.
*~{hori} controls how fast the diving entity will move forward, horizontally.
+
*~PAIN is mandatory while PAIN2, PAIN3 etc are optional.
*~{vert} controls how fast the diving entity will move downward, vertically.
+
*~If required PAIN{#} is not available, PAIN will be used instead.
 +
*~This animation will also be played if entity is hit by knockdown attack but entity is immune to knockdown attack with 'nodrop' or 'knockdowncount' (see them in Header Data above). Number of PAIN animation will be determined by received attack number.
  
  
energycost {int}
+
PAIN11,PAIN12,... {player,enemies}
*~Can be used in player's SPECIAL, SPECIAL2, and FREESPECIAL([=#=]) animations.
+
*~These animations are only usable if you have increased attacktype limit. To increase the limit use 'maxattacktypes' (see details above in Models.txt section).
*~When the attack is performed, (int) will be subtracted from one of the player's stats. Which one depends on several factors:
+
*~After they are available, they work just like other PAINs.
*~If the player has enough MP to use the attack, it comes from their MP.
 
*~If they don't have enough MP, but have enough HP to make up the difference and the attack is not set to 'mponly', their MP will be drained and the anything left will be taken from HP.
 
*~If the player has 'mponly' set to 2 or simply don't have an MP bar, this will always come from the player's health.
 
*~This command also work with enemies. Since enemies don't have MP, this command will only drain health.
 
*~If the user does not have more than {int} life remaining, they can't perform the attack. If they have a CANT animation, they will play that instead.
 
*~Defaults to 6 for SPECIAL and 0 for anything else.
 
  
  
mponly {int}
+
BACKPAIN{#} {players, enemies}
*~Controls where this attack drains it's energycost from.
+
*~Played when an entity is hit from behind by an attack which does not knock them down.
**0 = it will come first from MP, then from HP if there isn't enough.
+
*~{#} determines the number of BACKPAIN animation. The possible numbers are 2 to 10 and empty. There's no space between BACKPAIN and {#}. Empty means just BACKPAIN without number.
**1 = this attack will only drain MP.
+
*~This animation is used in conjuction with attack{#}. Example: BACKPAIN5 will be played if entity is hit by non knockdown attack5.
**2 = this attack will only drain HP.
+
*~To enable this, you need to add BACKPAIN 1 to entity header
  
  
mpcost {int}
+
SPAIN {players, enemies}
*~When the attack is performed, (int) will be subtracted from the player's MP.
+
*~Optional. Defaults to PAIN.
*~This command is outdated and supported only for the sake of modders who already were using it. Using "energycost" is probably a better idea.
+
*~No, not Spain. It stand for Shocked PAIN.
 +
*~Played when an entity is hit by a shock attack which does not knock them down.
  
  
followanim {value}
+
BPAIN {players, enemies}
*~Determines which FOLLOW animation played when followup condition is met or when counter condition is met.
+
*~Optional. Defaults to PAIN.
*~Possible values are 1, 2, 3 and 4.
+
*~This means Burned PAIN.
*~Used together with 'followcond' or 'counterframe'.
+
*~Played when an entity is hit by a burn attack which does not knock them down.
  
  
followcond {value}
+
FALL{#} {players, enemies, obstacles}
*~This command is to make the entity performs FOLLOW{#} if an attackbox in the animation hits.
+
*~Played when an entity is knocked down by a knock down attack.
*~value determines the condition requirements before FOLLOW{#} is played.
+
*~{#} determines the number of FALL animation. The accepted numbers are 2 to 10 and empty. There's no space between FALL and {#}. Empty means just FALL without number.
** 1 = this animation will followup as long as it hits an entity.
+
*~This animation is used in conjuction with attack{#}. Example: FALL3 will be played if entity is hit by knockdown attack3.
** 2 = this animation will followup as long as it hits an enemy (Or player if an enemy uses it).
+
*~FALL is mandatory while FALL2, FALL3 etc are optional.
** 3 = this animation will followup as long as it hits an enemy and the target does not get killed or block the attack.
+
*~If required FALL{#} is not available, FALL will be used instead.
** 4 = this animation will followup as long as it hits an enemy, and the target is not killed, does not block the attack, and is not set to be ungrabbable.
+
*~Declaring 'bbox' in this animation allows entity to be juggled.
*~Which FOLLOW animation played is determined by 'followanim'.
+
*~Entities can't be grabbed (by walking to them) in this animation.
 +
*~This animation will also be played if entity is knocked down by non knock down attack such as hit while in air or while frozen or entity uses 'knockdowncount -1' (see it in Header Data above). Number of FALL animation will be determined by received attack number.
  
  
attackone {bi}
+
FALL11,FALL12,... {player,enemies}
*~This command sets attackboxes's ability in the animation to hit other opponent.
+
*~These animations are only usable if you have increased attacktype limit. To increase the limit use 'maxattacktypes' (see details above in Models.txt section).
** 0 = attackboxes can hit all opponents. This is default setting for all animations but grabattacks
+
*~After they are available, they work just like other FALLs.
** 1 = attackboxes can only hit one opponent. This is default setting for all grabattacks.
 
  
  
counterattack {bi}
+
BACKFALL{#} {players, enemies, obstacles}
*~If set to 1, attackboxes in this animation will also hit opponent's attackbox. However, this only works if opponent has active bbox when he/she is attacking.
+
*~Played when an entity is knocked down by a knock down attack from behind.
*~Like the name said, this is great for counter attacks.
+
*~To enable this, you need to add BACKPAIN 1 to entity header
 +
*~Follow the same logic of FALL animation
  
  
bouncefactor {r}
+
RISE{#} {players, enemies}
*~This command determines bounce effect after touching ground while falling to ground. It works even if entity is falling while playing non-FALL animation.
+
*~Played when an entity who has fallen down gets back up normally after being knocked down or thrown. However, entities could play RISEATTACK instead of this if certain conditions are met (see RISEATTACK below).
*~{r} is bounce ratio which controls bounce effect. If it's set to 1, entity will bounce forever. If it's set to 2, it will bounce longer than normal. Any bigger value has slight difference.
+
*~{#} determines the number of RISE animation. The accepted numbers are 2 to 10 and empty. There's no space between RISE and {#}. Empty means just RISE without number.
*~Normally this is used in FALL animation however it also works with other animations.
+
*~This animation is used in conjuction with attack{#}. Example: RISE2 will be played if entity was falling in FALL2 animation before.
*~This command won't have any effect if 'bounce' (see above) is set to 0.
+
*~RISE is mandatory while RISE2, RISE3 etc are optional.
 +
*~If required RISE{#} is not available, RISE will be used instead.
  
  
animheight {alt}
+
RISE11,RISE12,... {player,enemies}
*~This command sets entity's height just for this animation. It overrides 'height' (see Header Data above) if it's declared.
+
*~These animations are only usable if you have increased attacktype limit. To increase the limit use 'maxattacktypes' (see details above in Models.txt section).
*~Defaults to 0 or 'height' if it's not declared.
+
*~After they are available, they work just like other RISEs.
  
  
cancel {start frame} {end frame} {hits} {sequence of inputs} {freespecial#}
+
RISEB {players, enemies}
*~This command allows animation change by inputting sequence of inputs to certain freespecial. In other word, cancel. Obviously it's only for players.
+
*~Optional.
*~This command can be declared in any attack animations, jump animations and grab animations. Also it can be declared more than once in same animation for various cancels.
+
*~Played when an entity is rising after falling with BURN animation.
*~{start frame} and {end frame} defines frames where sequence of inputs is accepted. Inputs entered before {start frame} and after {end frame} will be ignored.
 
*~{hits} defines how many hits attackboxes in this animation must hit before cancelling is allowed. It doesn't matter whether the attacks are blocked or not. If you don't want to have this limit, just set it to 0.
 
*~{sequence of inputs} defines input sequence required to activate the freespecial. The accepted values here is exactly same with 'com' command in Entity Files: Header Date above.
 
*~{freespecial#} defines the freespecial to be played after input sequence is valid. Don't forget to set 'maxfreespecials' (see models.txt above) if you need more freespecials to access.
 
*~Technically, the animation cancelling is like this: when valid sequence is accepted, this animation will stop immediately and defined freespecial will be played.
 
*~If 'cancel' is declared in jump animation, the freespecial will subject to gravity and will end immediately when player landed like any jump animations.
 
*~If 'cancel' is declared in grab animation, grabbed enemy will be freed IOW player is not in grabbing state anymore.
 
*~If you declare 'cancel' in GRAB for player who also has GRABWALK, declare it in latter animation too so the input is received even if player is grabwalking. Same goes with GRABBACKWALK.
 
*~Be careful in using single button input cause engine can easily accept the input when this animation is played. For example, cancel with just attack button as input in GRABATTACK will make cancel activated immediately as soon as it's played. To avoid this, set {start frame} late enough for engine to remove the input which activated GRABATTACK.
 
  
  
 +
RISES {players, enemies}
 +
*~Optional.
 +
*~Played when an entity is rising after falling with SHOCK animation.
  
=="Frame" Commands==
 
  
pshotframe {frame} {a}
+
BACKRISE{#}, BACKRISEB, BACKRISES, BACKRISEB, BACKRISEATTACKB, BACKRISEATTACKS {players, enemies}
*~If this command is present, the player will fire it's 'pshot' once frame {frame} is reached.
+
*~Played when an entity is hit from behind by an attack with entity header with backpain 1 and attacked by forcedirection 0 (default)
*~The projectile will be spawned at altitude {a}. Since you can't use 0 for {a}, if you want to have the projectile on the ground (and thus able to fall into pits it crosses) use -1 instead. It will spawn at 0, not -1.
+
*~Respective backpain animations
*~The shot is defined by using the 'playshot' command.
 
*~{a} defaults to 70.
 
*~This command is outdated since all entities including players can use throwframe for same purpose.
 
  
  
throwframe {frame} {a}
+
RISEATTACK{#} {players, enemies}
*~If this command is present, the entity will throw it's 'star' or 'knife' once frame {frame} is reached.
+
*~Optional.
*~The projectile will be spawned at altitude {a}. Since you can't use 0 for {a}, if you want to have the projectile on the ground (and thus able to fall into pits it crosses) use -1 instead. It will spawn at 0, not -1.
+
*~Players play this instead of RISE if Up+Attack is pressed before they rise.
*~The projectile is defined by using the 'star' or 'knife' commands.
+
*~Enemies play this immediately if a player is in range of the attack while they are lying on ground.
*~Actually putting 'load star' or 'load knife' in the .txt file works also but it's only loads projectile named 'star' and 'knife' respectively.
+
*~{#} determines the number of RISEATTACK animation. The accepted numbers are 2 to 10 and empty. There's no space between RISEATTACK and {#}. Empty means just RISEATTACK without number.
*~{a} defaults to 70.
+
*~This animation is used in conjuction with attack{#}. Example: RISEATTACK2 will be played if entity was knocked down with attack2 before.
*~Knives will be used if the entity is on the ground. Three stars will be used if the entity is airborne.
+
*~How entity performs RISEATTACK is controlled by 'riseattacktype' in Header Data above.
*~If you want entity to throw knives while entity is airborne use 'shootframe' instead.
 
  
  
shootframe {frame} {a}
+
BACKRISEATTACK{#}, BACKRISEATTACKB, BACKRISEATTACKS {players, enemies}
*~This command is similar to 'throwframe' but it shoots 'shot' instead.
+
*~Played when an entity is hit from behind by an attack with entity header with backpain 1 and attacked by forcedirection 0 (default)
*~{a} defaults to 0.
+
*~Respective backpain animations
*~This command won't throw stars if entity is airborne so it's ideal for shooting knives while airborne.
 
  
  
custknife {name}
+
RISEATTACK11,RISEATTACK12,... {player,enemies}
*~{name} is the name of an entity declared in MODELS.txt.
+
*~These animations are only usable if you have increased attacktype limit. To increase the limit use 'maxattacktypes' (see details above in Models.txt section).
*~If present, for this animation only, the entity's default 'knife' entity will be replaced with this entity.
+
*~After they are available, they work just like other RISEATTACKs.
*~You still need to fire the entity at some point in the animation for this to do anything.
+
 
*~Don't forget to load the entity in MODELS.txt!
 
*~Knives can't be used by enemies during a jump.
 
  
 +
RISEATTACKB {players, enemies}
 +
*~Optional.
 +
*~Played when an entity is riseattacking after knocked down with burn attack before.
  
custstar {name}
 
*~{name} is the name of an entity declared in MODELS.txt.
 
*~If present, for this animation only, the enemy's default 'star' entity will be replaced with this entity.
 
*~You still need to fire the entity at some point in the animation for this to do anything.
 
*~Don't forget to load the entity in MODELS.txt!
 
  
 +
RISEATTACKS {players, enemies}
 +
*~Optional.
 +
*~Played when an entity is riseattacking after knocked down with shock attack before.
  
tossframe {frame} {a}
 
*~These 2 commands have same function but only "tossframe" which works for players and enemies.
 
*~If this command is present, the entity will throw it's 'bomb' once frame {frame} is reached.
 
*~The projectile will be spawned at altitude {a}.
 
*~The projectile is defined by putting 'load bomb' in the .txt file, or using the 'bomb', 'pbomb', 'custbomb', or 'custpbomb' command.
 
*~{a} defaults to 70.
 
  
 +
SHOCK {players, enemies}
 +
*~Optional. Defaults to FALL.
 +
*~Played when an entity is hit by a shock attack which knocks them down, or a shock attack while in air or frozen.
  
custbomb {name} / custpbomb {name}
+
BACKBPAIN, BACKSPAIN
*~Use "custbomb" for enemies and "custpbomb" for players.
+
*~Played when an entity is hit from behind by an attack with entity header with backpain 1 and attacked by forcedirection 0 (default)
*~{name} is the name of an entity declared in MODELS.txt.
+
*~Respective backpain animations for burn/shock during pain
*~If present, for this animation only, the entity's default 'bomb' entity will be replaced with this entity.
 
*~You still need to fire the entity at some point in the animation for this to do anything.
 
*~Don't forget to load the entity in MODELS.txt!
 
  
 +
BACKBURN, BACKSHOCK, BACKBURNPAIN, BACKSHOCKPAIN
 +
*~Played when an entity is hit from behind by an attack with entity header with backpain 1 and attacked by forcedirection 0 (default)
 +
*~Respective backpain animations for burn/shock during fall
  
jumpframe {frame} {height} {speedx} {speedz}
+
BURN {players, enemies}
*~If this command is present, the entity will perform a jump once frame {frame} is reached.
+
*~Optional. Defaults to FALL.
*~{height} is jumping velocity, {speedx} is x axis velocity and {speedz} is z axis velocity. Positive {height} value moves entity up, positive {speedx} moves entity front while positive {speedz} moves entity down in z axis. Negative value works the opposite.
+
*~Played when an entity is hit by a burn attack which knocks them down, or a burn attack while in air or frozen.
*~Only one jumpframe command counts- you can't jump more than once in an animation by putting more in, even if the entity lands before the next jump starts.
 
*~Now this command gives same effect to all entities. However there are default setting left behind for backwards compatibility. If {speedx} and {speedz} are not provided this is how the jump would be:
 
**Height is 0:
 
***Player: The jump is very low, but the character moves forward.
 
***Enemy: The jump is high and vertical.
 
**Height > 0:
 
***Player:  The jump is {height} high, and vertical.
 
***Enemy: The jump is {height} high, and moves forward.
 
**If you don't want that effect, simply give the desired value for {speedx} or just 0.
 
*~Setting 'jumpframe' in any FALL animation will change the respective falling arc. Useful to make launchers and custom throws.
 
  
  
dropframe {frame}
+
DEATH{#} {players, enemies, obstacles}
*~This is used to make entity switch to set {frame} when flight apex is reached while in air.
+
*~Optional. Although it is optional, DEATH will be used as default if other DEATH{#} aren't available.
 +
*~Played when an entity loses all it's life after hit by attack{#}. Example: DEATH8 will be played if entity is killed by attack8.
 +
*~How this animation will be played is controlled by 'falldie/death' (see Header Data above).
 +
*~{#} determines the number of death animation. The accepted numbers are 2 to 10 and empty. There's no space between DEATH and {#}. Empty means just DEATH without number.
 +
*~If an entity is killed by being thrown, they will not use this animation.
  
  
landframe {frame}
+
DEATH11,DEATH12,... {player,enemies}
*~If this is set, entity will be at frame {frame} when entity lands after jumping with 'jumpframe' or while falling.
+
*~These animations are only usable if you have increased attacktype limit. To increase the limit use 'maxattacktypes' (see details above in Models.txt section).
*~In order to get this to work properly, give long delay to frame right before landing frame. The former frame will be played while 'waiting' to land.
+
*~After they are available, they work just like other DEATHs.
 +
 
  
 +
BACKDEATH{#} {players, enemies, obstacles}
 +
*~To enable this, you need to add BACKPAIN 1 to entity header
 +
*~Played when an entity loses all it's life after hit by attack{#}. Example: BACKDEATH8 will be played if entity is killed by attack8.
 +
*~Follow the same logic of DEATH
  
flipframe {frame}
+
BDIE {players, enemies}
*~Used to make character turn around when frame+1 is played.
+
*~Optional.
*~Management is not responsible for any damage caused of using this command in improper animation such as WALK.
+
*~Played when the character is finished by 'burn'.
 +
*~It's still controlled by 'death' though.
  
  
quakeframe {frame} {loops} {intensity}
+
SDIE {players, enemies}
*~Used to make screen shakes with certain intensity.
+
*~Optional.
*~{frame} determines at which frame the quake/shake starts.
+
*~Played when the character is finished by 'shock'.
*~{loops} determines how many quake this animation will make after quake starts. Bear in mind that if the animation ends, there won't be another quake. And you have to provide a frame for each quake.
+
*~It's still controlled by 'death' though.
*~{intensity} determines how strong the quake would be. Technically it is how far the panel would go down in pixels.
 
*~Negative value works for this and the quake will be new style extreme quake.
 
  
  
counterframe {frame} {cond} {damaged}
+
CHIPDEATH {players}
*~This command is to make entity performs FOLLOW{#} if the entity is hit in set frame.  
+
*~Optional