Documentation Project

dont know if it ok to post here but diging in the forums about jumpmove, found a post of utunels about how a 7 value both in x as in z fixed the limitation of value 2 in wich a static jump cant move. test it and works
this is the info in the manual.

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.
That's all very out of date and best left be.

DC
 
dont know if it ok to post here but diging in the forums about jumpmove, found a post of utunels about how a 7 value both in x as in z fixed the limitation of value 2 in wich a static jump cant move. test it and works
this is the info in the manual.
This is already on the legacy manual :)
 
Digging into the source code I've found some more information that, once confirmed, we can add to the manual:

Biker:
• The Rider is spawned at Y+10 from the parent.

• Rider won't copy the map from the Biker entity neither there is a way the change it's palette by native means (until 6931 at least) - Coinfirmed

• The manual says "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)" but, from what I saw at the code, one of the values is wrong:

C:
// for old bikers
int biker_move()
{


if((self->direction == DIRECTION_RIGHT) ? (self->position.x > advancex + (videomodes.hRes + 200)) : (self->position.x < advancex - 200))

Unless I am mistaken, they are spawn either at -200 or (video horizontal resolution +200) - confirmed

SUBTYPE BIKER is called with the following settings:

Code:
subject_to_hole                                = 1;
        subject_to_gravity                             = 1;
        subject_to_basemap                             = 0;
        subject_to_wall                                = 0;
        subject_to_platform                            = 0;
        subject_to_screen                              = 0;
        subject_to_minz                                = 1;
        subject_to_maxz                                = 1;
        no_adjust_base                                 = 0;

I know each type has a group of default settings aplied by default and here are the default values as I could get from the source:

TYPE PLAYER

Code:
chainlength            = 4;
        bounce                 = 1;
        subject_to_basemap     = 1;
        subject_to_wall        = 1;
        subject_to_platform    = 1;
        subject_to_obstacle    = 1;
        subject_to_hole        = 1;
        subject_to_gravity     = 1;
        subject_to_screen      = 1;
        subject_to_minz        = 1;
        subject_to_maxz        = 1;
        no_adjust_base         = 0;


TYPE ENEMY

Code:
        bounce                 = 1;
        subject_to_basemap     = 1;
        subject_to_wall        = 1;
        subject_to_platform    = 1;
        subject_to_hole        = 1;
        subject_to_obstacle    = 1;
        subject_to_gravity     = 1;
        subject_to_minz        = 1;
        subject_to_maxz        = 1;
        no_adjust_base         = 0;

TYPE ITEM

Code:
        subject_to_basemap     = 1;
        subject_to_wall        = 1;
        subject_to_platform    = 1;
        subject_to_hole        = 1;
        subject_to_obstacle    = 1;
        subject_to_gravity     = 1;
        subject_to_minz        = 1;
        subject_to_maxz        = 1;
        no_adjust_base         = 0;

TYPE OBSTACLE
That is a curious one - I can't understand the NOATTACK part.

Code:
        aimove |= AIATTACK1_NOATTACK;
        subject_to_basemap     = 1;
        subject_to_wall        = 1;
        subject_to_platform    = 1;
        subject_to_hole        = 1;
        subject_to_gravity     = 1;
        subject_to_minz        = 1;
        subject_to_maxz        = 1;
        no_adjust_base         = 0;

TYPE STEAMER
Code:
offscreenkill = 80;

TYPE PSHOT
Code:
aimove = 0;
        subject_to_hole                = 0;
        subject_to_gravity             = 1;
        subject_to_basemap             = 0;
        subject_to_wall                = 0;
        subject_to_platform            = 0;
        subject_to_screen              = 0;
        subject_to_minz                = 1;
        subject_to_maxz                = 1;
        subject_to_platform            = 0;
        no_adjust_base                 = 1;

TYPE TRAP
Code:
        subject_to_basemap     = 1;
        subject_to_wall        = 1;
        subject_to_platform    = 1;
        subject_to_hole        = 1;
        subject_to_gravity     = 1;
        subject_to_minz        = 1;
        subject_to_maxz        = 1;
        no_adjust_base         = 0;

TYPE TEXT
Code:
        subject_to_gravity     = 0;
        subject_to_minz        = 1;
        subject_to_maxz        = 1;

TYPE ENDLEVEL
Code:
        subject_to_basemap     = 1;
        subject_to_wall        = 1;
        subject_to_platform    = 1;
        subject_to_hole        = 1;
        subject_to_obstacle    = 1;
        subject_to_gravity     = 1;

TYPE NPC
Code:
        bounce                 = 1;
        subject_to_basemap     = 1;
        subject_to_wall        = 1;
        subject_to_platform    = 1;
        subject_to_hole        = 1;
        subject_to_obstacle    = 1;
        subject_to_gravity     = 1;
        subject_to_minz        = 1;
        subject_to_maxz        = 1;
        no_adjust_base         = 0;

TYPE PANEL
Code:
        antigravity            = 1.0; //float type
        subject_to_gravity     = 1;
        no_adjust_base         = 1;
oh thx for this will use it in future work
 
This is actually a really valuable initiative for the OpenBOR community. Undocumented features and hidden behaviors can make modding much harder, especially for newcomers trying to understand AI flags, animations, and scripting logic.

I agree that many things are only mentioned in old posts or scattered across forums, which makes learning more difficult than it should be. Having proper explanations for flags like “falling” vs “animating” would definitely help avoid a lot of trial and error.

I’ll be following this topic because a centralized documentation effort could become extremely useful for both new and experienced OpenBOR creators. Thanks for putting the effort into organizing all of this.
 
Does anybody know any information of the source code on how the entity property of "bbox" is used? I tried to display the name with drawstring using ondrawscript on a character, but every time or before the character is about to be ready to play, the engine crashes.

Code:
Level Loaded:    'data/levels/vsselect.txt'
Total Ram: 2147483647 Bytes
 Free Ram: 649932800 Bytes
 Used Ram: 186413056 Bytes
Total sprites mapped: 6131


GCANCEL = -1
GCANCEL = -1Script function 'getentityproperty' returned an exception, check the manual for details.
 parameters: #175987960, 73, 
 
********** An Error Occurred **********
*            Shutting Down            *

There's an exception while executing script 'ondrawscript' data/chars/aryu/aryu.txtTotal Ram: 2147483647 Bytes
 Free Ram: 727531520 Bytes
 Used Ram: 195444736 Bytes

Release level data...........
Level Unloading: 'data/levels/vsselect.txt'
Total Ram: 2147483647 Bytes
 Free Ram: 727527424 Bytes
 Used Ram: 195452928 Bytes

RAM Status:
Total Ram: 2147483647 Bytes
 Free Ram: 727527424 Bytes
 Used Ram: 195452928 Bytes

Done!

Release graphics data........    Done!
Release game data............

Unload 'Flash' ............Done.
Unload 'SpecFlash' ............Done.
Unload 'SuperFlash' ............Done.
Unload 'DUST' ............Done.
Unload 'DustL' ............Done.
Unload 'DustJ' ............Done.
Unload 'Hadohit' ............Done.
Unload 'Hadohit2' ............Done.
Unload 'Hadohit3' ............Done.
Unload 'Ryu' ............Done.
Unload 'Hadoken' ............Done.
Unload 'Ryu_continue' ............Done.
Unload 'ryupan' ............Done.
Unload 'Ken' ............Done.
Unload 'KHadoken' ............Done.
Unload 'black-fade-out' ............Done.
Unload 'fsrk1' ............Done.
Unload 'fsrk2' ............Done.
Unload 'shoryukenh' ............Done.
Unload 'Ken_continue' ............Done.
Unload 'bodiboks' ............Done.
Unload 'bodibokso' ............Done.
Unload 'kenpan' ............Done.
Unload 'Chun-Li' ............Done.
Unload 'Kikouken' ............Done.
Unload 'Kikouken2' ............Done.
Unload 'Kikouken3' ............Done.
Unload 'Dimple' ............Done.
Unload 'chunpan' ............Done.
Unload 'Joe' ............Done.
Unload 'joepan' ............Done.
Unload 'Balrog' ............Done.
Unload 'Ript' ............Done.
Unload 'balpan' ............Done.
Unload 'Guile' ............Done.
Unload 'Sonic-Boom' ............Done.
Unload 'glepan' ............Done.
Unload 'Zangief' ............Done.
Unload 'zanpan' ............Done.
Unload 'Dhalsim' ............Done.
Unload 'dhalpan' ............Done.
Unload 'Guy' ............Done.
Unload 'guypan' ............Done.
Unload 'Bison' ............Done.
Unload 'bipan' ............Done.
Unload 'Necro' ............Done.
Unload 'nepan' ............Done.
Unload 'Birdie' ............Done.
Unload 'Eagle' ............Done.
Unload 'eglpan' ............Done.
Unload 'Vega' ............Done.
Unload 'Claw' ............Done.
Unload 'Mask' ............Done.
Unload 'vegapan' ............Done.
Unload 'Sakura' ............Done.
Unload 'Yang' ............Done.
Unload 'yanpan' ............Done.
Unload 'Yun' ............Done.
Unload 'Terry' ............Done.
Unload 'kiru' ............Done.
Unload 'Gouken' ............Done.
Unload 'GoHadoken' ............Done.
Unload 'player1' ............Done.
Unload 'Challenger' ............Done.
Unload 'player2' ............Done.
Unload 'P1Cursor' ............Done.
Unload 'P2Cursor' ............Done.
Unload 'ARyu' ............Done.
Unload 'Hadouken' ............Done.
Unload 'ARyuCont' ............Done.
Unload 'hadouf' ............Done.
Unload 'hadouf2' ............Done.
Unload 'shinhado' ............Done.
Unload 'Empty' ............Done.
Unload 'Pilada3' ............Done.
Unload 'PlayerPorts' ............Done.
Unload 'slots' ............Done.

Warning: 2 script variants are not freed, dumping...
openbor_loadsprite
openbor_array

Release game data............    Done!
Release timer................    Done!
Release input hardware.......    Done!
Release sound system.........    Done!
Release FileCaching System...    Done!

**************** Done *****************

There's an exception while executing script 'ondrawscript' data/chars/aryu/aryu.txt

I did try running with "bbox" property with drawstring in ondrawscript, but got a crash from it. I don't know what its property value is. I'm just curious.

Partial part:
Code:
drawstring(0, 100, 1, "BBox: "+getentityproperty(P1, "bbox"));
 
Does anybody know any information of the source code on how the entity property of "bbox" is used? I tried to display the name with drawstring using ondrawscript on a character, but every time or before the character is about to be ready to play, the engine crashes.

Code:
Level Loaded:    'data/levels/vsselect.txt'
Total Ram: 2147483647 Bytes
 Free Ram: 649932800 Bytes
 Used Ram: 186413056 Bytes
Total sprites mapped: 6131


GCANCEL = -1
GCANCEL = -1Script function 'getentityproperty' returned an exception, check the manual for details.
 parameters: #175987960, 73,
 
********** An Error Occurred **********
*            Shutting Down            *

There's an exception while executing script 'ondrawscript' data/chars/aryu/aryu.txtTotal Ram: 2147483647 Bytes
 Free Ram: 727531520 Bytes
 Used Ram: 195444736 Bytes

Release level data...........
Level Unloading: 'data/levels/vsselect.txt'
Total Ram: 2147483647 Bytes
 Free Ram: 727527424 Bytes
 Used Ram: 195452928 Bytes

RAM Status:
Total Ram: 2147483647 Bytes
 Free Ram: 727527424 Bytes
 Used Ram: 195452928 Bytes

Done!

Release graphics data........    Done!
Release game data............

Unload 'Flash' ............Done.
Unload 'SpecFlash' ............Done.
Unload 'SuperFlash' ............Done.
Unload 'DUST' ............Done.
Unload 'DustL' ............Done.
Unload 'DustJ' ............Done.
Unload 'Hadohit' ............Done.
Unload 'Hadohit2' ............Done.
Unload 'Hadohit3' ............Done.
Unload 'Ryu' ............Done.
Unload 'Hadoken' ............Done.
Unload 'Ryu_continue' ............Done.
Unload 'ryupan' ............Done.
Unload 'Ken' ............Done.
Unload 'KHadoken' ............Done.
Unload 'black-fade-out' ............Done.
Unload 'fsrk1' ............Done.
Unload 'fsrk2' ............Done.
Unload 'shoryukenh' ............Done.
Unload 'Ken_continue' ............Done.
Unload 'bodiboks' ............Done.
Unload 'bodibokso' ............Done.
Unload 'kenpan' ............Done.
Unload 'Chun-Li' ............Done.
Unload 'Kikouken' ............Done.
Unload 'Kikouken2' ............Done.
Unload 'Kikouken3' ............Done.
Unload 'Dimple' ............Done.
Unload 'chunpan' ............Done.
Unload 'Joe' ............Done.
Unload 'joepan' ............Done.
Unload 'Balrog' ............Done.
Unload 'Ript' ............Done.
Unload 'balpan' ............Done.
Unload 'Guile' ............Done.
Unload 'Sonic-Boom' ............Done.
Unload 'glepan' ............Done.
Unload 'Zangief' ............Done.
Unload 'zanpan' ............Done.
Unload 'Dhalsim' ............Done.
Unload 'dhalpan' ............Done.
Unload 'Guy' ............Done.
Unload 'guypan' ............Done.
Unload 'Bison' ............Done.
Unload 'bipan' ............Done.
Unload 'Necro' ............Done.
Unload 'nepan' ............Done.
Unload 'Birdie' ............Done.
Unload 'Eagle' ............Done.
Unload 'eglpan' ............Done.
Unload 'Vega' ............Done.
Unload 'Claw' ............Done.
Unload 'Mask' ............Done.
Unload 'vegapan' ............Done.
Unload 'Sakura' ............Done.
Unload 'Yang' ............Done.
Unload 'yanpan' ............Done.
Unload 'Yun' ............Done.
Unload 'Terry' ............Done.
Unload 'kiru' ............Done.
Unload 'Gouken' ............Done.
Unload 'GoHadoken' ............Done.
Unload 'player1' ............Done.
Unload 'Challenger' ............Done.
Unload 'player2' ............Done.
Unload 'P1Cursor' ............Done.
Unload 'P2Cursor' ............Done.
Unload 'ARyu' ............Done.
Unload 'Hadouken' ............Done.
Unload 'ARyuCont' ............Done.
Unload 'hadouf' ............Done.
Unload 'hadouf2' ............Done.
Unload 'shinhado' ............Done.
Unload 'Empty' ............Done.
Unload 'Pilada3' ............Done.
Unload 'PlayerPorts' ............Done.
Unload 'slots' ............Done.

Warning: 2 script variants are not freed, dumping...
openbor_loadsprite
openbor_array

Release game data............    Done!
Release timer................    Done!
Release input hardware.......    Done!
Release sound system.........    Done!
Release FileCaching System...    Done!

**************** Done *****************

There's an exception while executing script 'ondrawscript' data/chars/aryu/aryu.txt

I did try running with "bbox" property with drawstring in ondrawscript, but got a crash from it. I don't know what its property value is. I'm just curious.

Partial part:
Code:
drawstring(0, 100, 1, "BBox: "+getentityproperty(P1, "bbox"));

There's no such thing. Collision is an animation property, and right now it's a work in progress while I do updates.

DC
 
It's from this list.

getentityproperty(entity, propname) / changeentityproperty(entity, propname, values)

  • Get an entity's property by name.
  • 'entity' is the handle of that entity.
  • 'propname' is the property's name.
  • 'value' is new value you want to set.
  • Property names:
    • "a" - Altitude (DEPRECATED)
    • "aggression" -
    • "aiattack" -
    • "aiflag" -
    • "aimove" -
    • "alpha" - Channel for sprite fusion. From 0 to 6.
    • "animal" -
    • "animating" - In return 0 if the entity isn't in animation (static frame), 1 if animation forward (from 0 to X) and -1 if animating backward (from X to 0). Example AI enemies when walking back have "animating" == -1.
    • "animation" - The handle of current animation.
    • "animation.handle" -
    • "animationid" - The id of current animation. It is an integer value, see 'openborconstant'.
    • "animheight" -
    • "animhits" - The internal hit counter for current animation.
    • "animnum" - Is the "animationid"
    • "animpos" - Frame position of current animation.
    • "animvalid" - It returns 1 if animation exists in entity.txt
    • "antigrab" -
    • "antigravity" -
    • "attackid" -
    • "attacking" - Entity's attack box status. When 0, attack box will not hit other entities.
    • "attackthrottle" -
    • "attackthrottletime" -
    • "autokill" -
    • "base" - Altitude base where is the entity on, if a equals base, this entity is in air.
    • "bbox" -
    • "blink" -
    • "blockback" -
    • "blockodds" -
    • "blockpain" - Entity blockpain property. If intended damage from blocked attack >= blockpain, entity will briefly twitch or play Blockpain animation if it has one.
    • "boomerang" - changeentityproperty(entity,"boomerang",acceleration,horizontal_distance) and getentityproperty(entity,"boomerang",flag) -> flag: 0 = acceleration, 1 = horizontal_distance
    • "boss" -
    • "bounce" -
    • "bound" -

BTW I wonder what "bound" and "blockback" do on their own.
 
@DCurrent I am adding log() on the manual but I can't find it on the source code to document it.
Can you give me a hand here?


Does it accept all escape sequence from C?

Escape Sequence List​

Probably, it will accepts only:
\n,
\t,
\\
\’
\"
\?

right?
I was able to confirm the list of permitted escape sequences in the source code. In the original Plombo code, within the file pp_lexer.c there was a comment listing the escape sequences:
Currently supported escape sequences are: \r \n \t \s \" \' \\

However, this comment no longer exists, and from what I can gather, there has been a change in how the code functions.

According to the agent, after analyzing the most recent version of ScriptString_DecodeLiteral (2026-08-11), the escape sequences supported by OpenBOR are:
EscapeResult
\nnewline
\rcarriage return
\ttab
\sspace
\0null character (effectively ends the string)
\"double quote
\'single quote
\\backslash

The list is the same as the old preprocessorlib’s, plus \0. So \n works in log(), and the decoder runs when the script is compiled, before the string ever reaches log(). There is no \xHH, octal, \a, \b, \f or \v.

Two behaviors you need to know about:
  1. An unknown escape comes out duplicated.In the default: case of the switch, the code writes the backslash and the character, but doesn’t advance the cursor (the cursor++ that the other cases have is missing). The character then gets read again by the loop. Results from my tests:
    • "a\qb" becomes a\qqb
    • "a\x41b" becomes a\xx41b
    The comment in the code says the intent is to preserve the legacy result (\q), so this looks like a bug in the new commit. The fix is to add cursor++; in the default case. Worth letting the lead dev know.
  2. \0 truncates the string. The decoder writes the null byte, but the text is later copied with strlen/strcmp. In my test, "a\0b" ended up as just a. In practice, \0 works as “end the string here”.

Of course, take this info with a grain of salt until a dev team member confirms it.
 
Back
Top Bottom