OpenBOR Manual

From Beats Of Rage

Revision as of 13:23, 18 November 2013 by 37.233.27.142 (Talk)

2JAimu Thanks a lot for the article post.Really looking forward to read more. Much obliged.

Thanks for sharing, this is a fantastic blog post.Really looking forward to read more. Cool.

ajiZhb Really appreciate you sharing this blog article.Much thanks again. Cool.

WSEkGs Great blog.Thanks Again. Will read on...

nNZDBP Wow, great article.Really thank you! Want more.

7rm7XH Thanks so much for the blog post.Really thank you!

czuegV I loved your article.Thanks Again. Keep writing.

JII8p4 Great post.Much thanks again. Cool.

1dQbI1 I value the blog article.Really looking forward to read more. Really Great.

9zrMIi Thanks so much for the blog.Thanks Again. Keep writing.

sCFtQ3 Awesome post.Really thank you! Want more.

tcEzkD Major thankies for the blog post. Much obliged.

hz60lS Really informative post.Really looking forward to read more. Want more.

cJYg5v I loved your post.Really looking forward to read more.

i4ESyt Thanks so much for the blog.Much thanks again. Much obliged.

Contents

Level Files - Level Objects

spawn {name}
  • {name} is the name of an entity defined in a .txt file which was loaded in MODELS.txt.
  • {name} will be spawned (created). Where and with what attributes are determined by the next set of fields.
2pspawn {bi}
  • If {bi} is set to 1, the entity is only spawned if there are 2 players playing.
3pspawn {bi}
  • If {bi} is set to 1, the entity is only spawned if there are 3 players playing.
4pspawn {bi}
  • If {bi} is set to 1, the entity is only spawned if there are 4 players playing.
alias {name}
  • The spawned entity will appear to have the name {name} in-game. For instance, if you used

spawn Rugal

alias Hotdog_Man

then when you reached Rugal in the stage, his name would be displayed as 'Hotdog Man'.

  • The rules from an entity's .txt file concerning names apply here, too. So use '_' instead of spaces if you want to use spaces.
map {pal}
  • {pal} is a number from 0 to 14 which corresponds to an entity's 'remap' pallete. The entity will use that pallete.
health {int}
  • {int} is a health value which will be used instead of the entity's normal health.
2phealth {int}
  • {int} is a health value which will be used instead of the entity's normal health, but only if there are 2 players playing.
3phealth {int}
  • {int} is a health value which will be used instead of the entity's normal health, but only if there are 3 players playing.
4phealth {int}
  • {int} is a health value which will be used instead of the entity's normal health, but only if there are 4 players playing.
mp {int}
  • For items spawned in a stage.
  • When a player picks this item up, they'll regain {int} MP instead of it's normal value.
dying {remap} {health1} {health2}
  • If this entity's health drops to or below {health1}, they will flash between their normal pallete and the {remap} pallete.
  • If their health drops to or below {health2}, they flash even faster.
item {name}
  • Optional.
  • When this entity dies, a {name} will instantly be spawned in it's place.
  • You can't make an entity drop multiple items.
itemhealth {int}
  • Optional.
  • Changes the health of a dropped entity to {int}
itemmap {int}
  • Optional.
  • Changes the pallete of a dropped entity to {int}
itemalias {name}
  • Optional.
  • Changes the name of a dropped entity to {name}
itemhealth {int}
  • Optional.
  • Changes the health of a dropped item to {int}
2pitem {name}
  • Optional.
  • Works just like 'item', except that this will only be spawned if there are 2 people playing.
3pitem {name}
  • Optional.
  • Works just like 'item', except that this will only be spawned if there are 3 people playing.
4pitem {name}
  • Optional.
  • Works just like 'item', except that this will only be spawned if there are 4 people playing.
boss {bi}
  • Optional.
  • If set to 0, nothing. If set to 1, the character is a boss. When a boss appears, the music will change to the boss music (if it was defined). Killing all the boss characters in a level will kill all other entities and will also end a stage automatically.
flip {bi}
  • Optional.
  • If set to 0, nada. If set to 1, the entity will face the opposite direction. Used for obstacles and traps most of the time, but it can also be used to make enemies who spawn on the left side of the screen face towards players from the start.
  • Can also be used for entities with subtype arrow to make them fly from left to right.
coords {x} {z} {a}
  • Determines the x, z, and a positions on the screen where the entity will spawn.
  • {x} and {z} are relative to the screen's current position, NOT the actual position in terms of the level itself.
  • {a} is how high off the ground the entity will spawn.
  • If {x} is between 0 and 320, and the entity is an enemy, it will magically fall out of the sky. Unless it has a SPAWN animation, in which case it'll play that.
  • If {x} is between 0 and 320, and the entity is an obstacle or item, it will magically appear out of thin air. Unless it has a SPAWN animation, in which case it'll play that.
  • In case you're wondering, the BoR playing field is, in bbox format, 0 320 160 230. Unless, of course, you've changed the {min} and {max} values in LEVELS.txt with 'z'. You can also place enemies outside those ranges, but they'll try to return to the playing field if you do.
  • Most projectiles will automatically die if their offset is more than 80 pixels offscreen left or right (their x value must stay between -80 and 400). Knives are the only exception: they can go up to 180 either way (-180 to 500). Other entities will also die if they move too far, but they have more leeway (Around 1000 in either direction). Keep that in mind while spawning characters.
  • Bikers should normally be spawned further out than other enemies. You'll probably want around 400 or -80 (But not more than -200 or 520, or they'll die).
at {pos}
  • For an entity to be spawned, the player must have scrolled to {pos} in the level.
  • {pos} is scroll position in pixels measured from start of level. For direction both and right, it's measured from left edge. For direction left, it's from right edge.
  • This must be declared together with other level objects. Normally typed after the latter.
wait
  • This isn't part of an entity's spawn. It doesn't take any arguments either. It should be followed by an 'at', though.
  • Screen scrolling will be stopped at {pos} in the 'at' command following the wait until all current enemies are killed.
  • In direction up and down, background scrolling can be stopped also with 'wait' but there's no way to make it auto scroll again.
group {min} {max}
  • Also not an entity spawn, also should be followed by 'at'.
  • Causes entities to be spawned in groups. When the number of enemies goes below {min} (not equal to, below), entities will be spawned until there are {max} enemies onscreen or there aren't any more enemies to spawn in the group.
  • Group size declarations remain in effect until changed. So use a large group size like 'group 100 100' to "cancel" the grouping.
  • 'wait' is also counted to 'group' so it's best to put 'wait' first to prevent it being limited by 'group'.
aggression {value}
  • For enemy spawns.
  • Spawned enemy's aggression will use this {value} instead of the enemy's normal aggression.
blockade {pos}
  • Optional. Used in direction both levels.
  • {pos} is scroll position and it's similar to the one for 'at'. {pos} for 'blockade' and 'at' can be different though.
  • This is to stop players scrolling backwards in levels with direction both at {pos}. If the level is long, you may want to use this since it could be weird being able to scroll back to beginning of level.
  • It must be followed by 'at'.
setpalette {palette}
  • Change palette in use to other palette which is loaded by 'palette' (see above).
  • {palette} correspond to the loaded palette number so if you want to use 2nd palette, set this to 2.
  • Like other level objects, this command must be followed by 'at' (see above) and also counted by 'group'.
shadowcolor {index}
  • This command changes gfxshadow's fill color to {index} at defined scrollpos. This is used together with 'gfxshadow' (see above).
  • {index} refers to current level palette's index.
  • Setting {index} to -1 turns gfxshadow off.
  • Setting {index} to -2 turns off fill color gfxshadow .
  • Must be followed by 'at'.
shadowalpha {index}
  • This command changes gfxshadow's from black shadow to mirrored image at defined scrollpos. This is used together with 'gfxshadow' (see above).
  • In case you don't understand, this is used to mirror image of entities appear on 'ground'. Useful if the 'ground' is actually water or mirror. Disable normal 'black shadow' 1st with 'shadowcolor' above before using this.
  • {index} refers to any alpha blending type i.e 1-6.
  • Setting {index} to -1 turns gfxshadow alpha off.
  • Must be followed by 'at'.
light {x} {z}
  • This command changes light direction to {x} {z} for gfxshadow's at defined scrollpos. This is used together with 'gfxshadow' (see above).
  • If {x} is not 0, the shadow will lean left or right (256 means 45 degree, try use some values and see what is the best value)
  • {z} can't be 0, because it is for the length of the shadow in z direction, 256 will make the shadow as long as its owner's sprite, and 128 will be half length. If it is negative value, the shadow will be flipped head-to-foot.
  • Must be followed by 'at'.
load {name}
  • Used to load a model in current level.
  • This command is for loading weapons models or other entities which shouldn't be loaded until this command is executed. It useful for memory usage control.
  • Like other level objects, this command must be followed by 'at' (see above) and also counted by 'group'.

Music Files

Recomendations:
  • Music files tend to be the largest portion of BoR mods, frequently larger than the rest of the mod combined. Some good ways to cut file size are to delete unneeded segments of the song, like silence at the start or end of the file or identical loops in video game tunes.
  • Chose some decent songs. If you've got different tastes in music, that's one thing, but just choosing random noise is something else. Make sure the music fits.
How to Convert:
  • You'll need a program called WAV2BOR.exe or CONVERT.exe, and some PCM 16-bit mono .wav files, preferably at 22 Khz. If you're having trouble understanding that last line, don't worry. Just open the .wav in Microsoft Sound Recorder and go to 'Save as...'. From there, find each of those options (PCM format, 16-bit mono at 22050 (22 Khz)) and select them.
  • Once you've got the files, place them all in a folder called W2B in your C: drive. This step wasn't necessary, but if you're having trouble it might fix some problems.
  • Create a new .txt file, and give it a name with the .bat extension. Add the following line for each .wav you want to convert, then double click on your .bat file to start the batch conversion of your .wav files to .bor music files:
wav2bor.exe {wav} {bor} {artist} {title}
  • {wav} is the name of the .wav file to be converted (make sure it has .wav on the end). {bor} is the file that will end up holding the .bor music. {artist} and {title} are optional fields which can be used for an artist name and song title. Or a dog's name and your favorite food. It doesn't really matter. If you do use them, remember that you must use underscores (_) instead of spaces ( ).

Sound Files

data/sounds/beat1.wav
  • Played when an attack hits an entity's bbox.
  • Normally, this sound will be played slower depending on how much damage the attack deals. If this is a problem, you can disable this with the 'noslowfx' command.
data/sounds/fall.wav
  • Played when an entity hits the floor after being knocked down.
data/sounds/get.wav
  • Played when a player picks up an item.
data/sounds/money.wav
  • Played when a player grabs a score item.
data/sounds/jump.wav
  • Played when someone jumps.
data/sounds/indirect.wav
  • Played when one character is flung into another with THROW.
data/sounds/punch.wav
  • Played when a player uses an attack in their attack chain (Pressing attack from a standing position). Normally only heard if the attack misses.
data/sounds/1up.wav
  • Played when the player gets a 1-up.
data/sounds/go.wav
  • Plays three times in a row when the player has beaten all enemies at a wait and can now move forward again.
data/sounds/timeover.wav
  • Played if the timer hits zero. Also played if all credits are lost.
data/sounds/beep.wav
  • Played in menus (not in game) when you move up or down.
data/sounds/beep2.wav
  • Played in menus (not in game) when you select an option.
data/sounds/bike.wav
  • Required if you have bikers. Plays for bikers, of course.
data/sounds/block.wav
  • Optional. Plays when an entity blocks an attack.
Warning: keep an eye on the file size of your .WAVs.

Troubleshooting

NONFATAL:

If your mod isn't crashing, but it's still acting funny, check this list:

After downloading a new version of OpenBoR, my HUD (life bar, time, etc.) appear at the bottom of the screen and my options and controls are messed up!

  • Sometimes, the format of the file SETTINGS.SAV will be changed. When this happens, you'll need to delete the SETTINGS.SAV file you currently have in the same folder as OpenBoR and re-open OpenBoR.

My entities are a discolored box/have the wrong colors!

  • OpenBoR uses a pallete system. Make sure the entities have the correct pallete.

My entities have tried to attack but nothing happens!

  • Are you sure you have given attackboxes in their attack animation?
FATAL:

If your mod is crashing, OpenBoR will store a little error message in "OpenBoRlog.txt" inside the Logs folder. That's for the Windows version, in DOS the log file is "OpenBoRl.txt". The last line is the error message.

Unable to open file '{path}'

  • Check the path, is the path typed correctly? If it is look for the file, is it placed in right folder or not?
  • Something is wrong with the file at {path}. Some possible known causes:
  • One of the file or folder names in the path is too long. BoR can only read from files and folders whose names are from one to eight letters long, not including the extension. For example, "BOB.txt", "12345678.gif", and "data/flip/flop.txt" are okay names. ".txt", "123456789.gif", and "data/nameistoolong/flop.txt" will all make the program spit out an error.
  • Another possible reason is the file is corrupted. Try remaking the file.

Failed to create colourmap from images '{path1}' and '{path2}'.

  • The game tried to make an alternate pallete (remap) of {path1} using the data in {path2}, but couldn't. Some possible known causes:
  • {path1} and/or {path2} do not exist. They may actually exist and just have the wrong name, so check your spelling if the files are there.
  • {path1} and {path2} are not based on the same image. They should be the exact same pictures EXCEPT that certain colors in one file have been replaced with another.

Command '{com}' not understood in file '{path}'

  • The line {com} is somewhere in {path}. However, OpenBoR does not have any code for handling {com}, and doesn't know what to do.
  • Check {com}'s spelling. For instance, it's colourselect, not colorselect.
  • Make sure you have the latest version of OpenBoR. New features won't work in older versions.

Unable to load file (may be out of memory)

  • This is a real sneaky error. It means that one of your .txt files which was just loaded doesn't end with a blank line.
  • To fix this, just go to the last line in the offending .txt file(s) and press enter once.
  • This will only crash OpenBoR when the problem file is actually loaded, not when it is 'known' while loading files at the start.

DOS/32A warning (9003): real mode interrupt vector had been modified: INT 43h

  • Roel (creator of the original BoR) finally found out some more about this. It's a Windows/DOS video mode emulation thing. Don't worry about it. It won't damage anything. We think.

Other Stuff

Outside the Box:
  • OpenBoR adds a lot to an already powerful, simple engine. But you can take things even further with a little thought.
  • Just because they're called SHOCK, FREEZE and BURN doesn't mean they need to be bolts, icicles and flares. They could be other elements, or not even elements at all- ever noticed that most fighting games have separate graphics for low, mid, and high-level attacks? Or ever wanted a character to just sit still for a second or two? Among other things...
  • Related to above, various attackboxes, SHOCK and BURN can be used to make custom slams and custom throws. There are many commands that also helps making them.
  • Text objects pause the game and can play an animation. You can use it for cutscenes which don't end the level. - Use them wisely as they have to be stored in RAM, while cutscenes are streamed in real-time.
  • Enemies can drop other enemies. That means you can create enemies with second forms.
  • An entity's offset, bbox, attack box, platform box, etc. don't need to overlap. Or even be close to one another.
Cutscenes:
  • There is a difference in the format for animated .gif files and not-animated .gif files. In other words, if you have a single-frame animated .gif, it would be read by OpenBoR differently than an identical non-animated .gif.
  • These scenes must have animated .gifs:

--> data/scenes/logo.txt

--> data/scenes/gameover.txt

  • These scenes must have non-animated .gifs:

--> data/scenes/title.txt

--> data/scenes/titleb.txt

Score:
  • When you hit an enemy, you get 5x the attack's damage in points.
  • THROWing an enemy will earn you the attack's damage in points (you don't get any multipliers).
  • You get 5x the attack's power in the player's .txt file, not the damage dealt. So an attack with 1000 power would always give 5000 points.
  • You get a one-up every 50,000 points.
Time:
  • Try to keep in mind how long it might take a player to beat a group of enemies or a boss. It feels kind of disappointing to last 99 seconds against a high-health boss or endless stream of enemies, only to die from time over.
  • To create an item which recovers a player's time, name it Time in it's .txt file and in MODELS.txt and give it a 'health' and 'score' value of 0.
Projectiles:
  • Knives fly straight forward. They can fly over pits unless they are on the ground.
  • Stars can only be thrown during jumps. Three fly out at downward angles.
  • Bombs fly in an arc. They can be thrown over pits.
Player Swapping:
  • 'load'ing a player character in a level's .txt file will cause the player's character to become the loaded character. You can't bring the character select screen back up, though.
  • You can allow players to "unlock" characters in-game by only "know"ing the player in MODELS.txt, but putting an item which "load"s the entity in it's header. If a player grabs the item, they will be able to select the new character whenever they run out of lives or go to the select screen. This isn't saved when you close the game, though.
Other notes:
  • Both OpenBoR.exe and WAV2BOR.exe only work with short file names. If you put them in directories with a file or folder name longer than 8 characters, they won't work.
Fun:
  • Try to keep your mod interesting. The original BoR engine had a lot of neat tricks and fun potential which was never realized, and OpenBoR increases those possibilities exponentially. Think carefully about what you do with them.
  • The little things make a difference. The secret enemy in the original BoR's elevator, the wacky names, the entire hidden stage...
  • There are more fighting styles than just the standard Hadoken fireball/uppercut/spin kick. Try different attacks out. There are some interesting styles and attacks out there. Variety is the spice of life, right?
Limits (as of 2.0691):
  • Maximum number of:

sprite frames: NA**

animations: 1000

models: 200

entities: 150

panels per level: 52*

frames per animation: NA**

weapons per player: 10

remaps: 14

name length: 40

level spawns: 600

panel order length: 2000

hole spawns per level: 40

levels: 100

difficulty levels: 10

sound effects: 128

freespecials: 8

  • Although the source code has been changed to allow up to 52 panels per stage, a way of using panels past 26 has not yet been decided upon. There are only 26 letters in the alphabet, after all. So you can only use 26.
    • NA means this particular caveat is no longer limited by source code. In other words, if you want to create an animation with 500,000 frames, that's your business. Keep in mind however that with great power comes great responsibility; it is up to you to properly manage hardware resources (in particular memory), especially if you intend for your module to play on consoles.

FAQ

What do you mean by "entity?"
  • It's anything you load in Models.txt. It's basically a .txt file which tells the game how to display and use a player, an enemy, a barrel, an apple, etc...
What's a "hud?"
  • HUD: Heads-Up Display. It's what shows you life, your score, your player, etc. It's a display which gives you a heads-up as to what's going on.
Can I enter my initials on the high score screen?
  • Nope, sorry.
Help! My settings are all wrong/My controls have randomly changed/My high scores were replaced by gibberish!
  • The settings file format may have changed. Try deleting or moving your settings.sav file in the same directory as OpenBoR and reopening OpenBoR.
My settings won't save on the Dreamcast version!
  • This is a known issue. It seems the Dreamcast VMU (which is the only way to save on the DC) doesn't get along very well with OpenBoR, and getting them to work together would require too many major changes to be possible.
Where is the DC/PS2/PSP/Windows/X-Box/Linux/GP32/GP2X/NDS version of OpenBoR?
  • Windows, DOS, Dreamcast, PSP, GP2X and X-Box binaries/executables are available in in the recent releases by SumolX. The PS2 and GP32 ports of the original BoR were all done by separate coders, none of whom have expressed interest in porting OpenBoR. Without skilled coders for those platforms, those ports will not be possible. As of this time, I don't think the NDS version by GPF is done yet.
What is this BoR/OpenBoR/DarkBoR/BoRHed/HoR/AotB thing I keep hearing about?
  • BoR is the original Beats of Rage. It is a free game made by Senile Team. It doesn't have most of the features found in OpenBoR, but it is the original.
  • OpenBoR was an upgraded version of BoR which has been worked on by many coders. DarkBoR was an alternate version of BoR which has several unique features such as an MP bar and enhanced weapons support. It was developed by Tails, but it is now merged with OpenBoR to make a single engine.
  • BoRHed is an edit of BoR with new features similar to OpenBoR. It is developed by Lord_Ball and hopefully will be merged soon with OpenBoR.
  • HoR is an edit of BoR designed to create shooting games. It is developed by Lord_Ball.
  • Age of the Beast (AotB) is a "sequel" of sorts to the original BoR. The storyline, characters and music are original work made from scratch, but some basic gameplay elements will be similar to the original BoR. It's being developed by Senile Team, creators of the original BoR.
Which version of BoR should I use?
  • OpenBoR is by far the best choice as of this moment. Each version has its advantage though:
  • The original BoR is the only version with certain ports (such as PS2 or GP32) so it has the greatest compatibility.
  • OpenBoR has many new features and backwards compatibility to the original BoR or DarkBoR. It also is the most optimized version.
  • BoRHed also adds new features, but an entirely different set.
  • HoR was designed for overhead/sideview shooters, so that's something of a different situation.
  • AotB isn't out yet. So, um, it's not really a choice at the moment.

You may be able to create multiple versions compatible with the different versions of BoR, like how game companies release cross-platform games. That's extra work, though.

I'm amazed to see 10 different attackboxes. Why would someone need that many?
  • You should be amazed on the effects you could make with them. With many attackboxes, modders can make an attack that push an opponent backwards, pull him/her, launchers and other cool effects.
When is AotB going to be released?
  • When it's done. Coding games is actually a difficult and annoying not-tons-of-fun task. Especially when you don't get paid. And even more so if people ask for demo versions or release dates. It's being worked on. It'll come when it's ready. Asking will at best do nothing and more often just slow things down.
I found an error in this guide.
  • Then please report it at LavaLit.com.
I found an error in OpenBoR.
  • Report bugs at the OpenBoR Sourceforge site to allow to track them easier.

http://sourceforge.net/projects/openbor/ (Select Tracker->Bugs)

  • Use the system in the following manner:

9 - Highest = System Crash / Fatal bug

5 - Medium = Something is just not working correctly and effects the engine in a strange way.

1 - Lowest = cosmetics, small things.

  • Lastly, Always upload a log file and enter each bug with your username and website (borgeneration/senileteam) and a where/how to be contacted if I don't know you personally.
I want something added to OpenBoR.
  • If you do want to ask for new features, think first. How many people besides you would use the feature? Would it be possible to program? Would it make problems with older versions? Has someone else asked for something similar? If you still want to ask, be sure to do so nicely. The people in the BoR scene are nice, and they are not getting paid for this, so they deserve some little thanks, right?
I want to HELP add something to OpenBoR.
  • Awesome! Head to LavaLit forums and let SamuraiX know. As a warning, even if your addition is really good, it may not be added. Backwards compatibility, speed, memory, and Dreamcast/PSP compatibility are all important factors in what gets added or not.
Can I make my own version of BoR/OpenBoR/DarkBoR?
  • Of course. If you're only making small, mod-specific changes (like changing the design of system menus), go ahead. If you're making larger changes (like new features or options), it would be nice if you mentioned it on the OpenBoR forums, but that's still not enforced or anything.
How do I make my own version of BoR/OpenBoR/DarkBoR?
  • Information on how to compile the code for PC, PSP, Dreamcast, GP2X and other platforms can be found at LavaLit.com.

Links

Credits

Beats of Rage:

Senile Team:

Original Beats of Rage game.

Roel (Opla):

Original BoR source code and engine, major improvements in OpenBoR code, some original BoR graphics.

Neill Corlett:

Dreamcast and PS2 Port.

OpenBoR:

L@Cible:

His BoR-DC-Toolchain made OpenBoR possible.

Kirby2000:

OpenBoR Maintainer 2004-2005, 4 player support.

CGRemakes:

OpenBoR Maintainer 2005-2006.

SumolX/SX:

OpenBoR Maintainer 2006-2007, PSP port.

uTunnels:

OpenBoR Coder

Tails:

DarkBoR, 4 player support.

Lord_Ball:

BoRHed, HoR.

Drikobruschi:

Contributed hi-score table code.

Kbandressen:

OpenBoR Coder

Fugue:

Contributed many features, original author of this manual.

Bloodbane:

Manual updater.

OpenBoR Manual contributions:

bWWd, Zamuel, Christuserloeser, Damon Caskey

Sega:

Original Streets of Rage design, concept, etc.

SNK:

Original BoR graphics.

Sega, Capcom, SNK, Konami, Tecmo, Treasure, Sammy, etc.:

For all the brawler games!

The entire BoR and OpenBoR community:

Keep making those games!

Personal tools