Giter Club home page Giter Club logo

dcurrent / openbor Goto Github PK

View Code? Open in Web Editor NEW
876.0 62.0 116.0 1.24 GB

OpenBOR is the ultimate 2D side scrolling engine for beat em' ups, shooters, and more!

Home Page: http://www.chronocrash.com

License: BSD 3-Clause "New" or "Revised" License

Makefile 0.17% Batchfile 0.02% C++ 0.01% C 98.01% Java 1.05% Shell 0.28% Perl 0.02% Objective-C 0.22% Python 0.02% CMake 0.19% Dockerfile 0.01%
side-scroller fighting-game streets-of-rage final-fight engine

openbor's People

Contributors

carlsonsantana avatar cgremakes avatar coringao avatar crxtrdude avatar dbaldan avatar dcurrent avatar fgames9000 avatar glebm avatar guimabros avatar haxpor avatar ivanpopelyshev avatar j8r avatar jbeich avatar metafox avatar mrspence avatar msmalik681 avatar plombo avatar sumolx avatar supervisedthinking avatar utunnels avatar whitedragon0000 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

openbor's Issues

Build versions

Guys, I saw the latest release, which is build:
OpenBOR_v3.0_Build_4544 (October 3)

But how this could be possible if the last version was v4569, released in April 21?

If I can be honest, @DCurrent , those versions are starting to get very confuse and this is hurting the engine and its user base. We don't know anymore which is the latest version...

Compile Build in Log

Actually, when we run OpenBOR, we only have compile date without the build version:

OpenBoR v3.0 Build , Compile Date: Dec 22 2016

In fact, there is a build version, but it's wrong (it shows v3.0 when I am using build 4432). Long time ago, we had the build version showing the right (and more complete) information.

This could be helpful when debuging, because we need to guess the build version by the compile date.

getentityproperty / changeentityproperty

Guys, I want to document all the entity properties but I need help with that, so I would like to ask help from the Devs. There are some properties which I never heard about, like "trymove", "link", etc.

Some of them seams self explanatory or easy to understand, but some aren't.
Any help is very appreciated.

~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" -
"candamage" -
"chargerate" -
"colourmap" -
"colourtable" -
"combostep" -
"combotime" -
"custom_target" - If set it you can force an enemy to use it as target.
"damage_on_landing" - Damage that will be applied at end of a fall. If -1, entity will instantly recover at end of fall and play "land" animation if it has one.
"dead" -
"defaultmodel" - Model name base (no weapon name)
"defaultname" - Model name base (no weapon name)
"defense" - Return one of the defense factors of this entity. Follow by an integer specifies the attack type(see 'openborconstant', and also 'changeentityproperty').
"destx" - Destination of coord X for A.I.
"destz" - Destination of coord Y for A.I.
"detect" - Entity's stealth detect factor.
"direction" - Direction, 1 means left, 0 means right.
"dot" -
"dropframe" -
"edelay" -
"energycost" -
"escapecount" -
"escapehits" -
"exists" - Well, whether the entity is a valid one.
"facing" -
"falldie" -
"flash" -
"freezetime" -
"frozen" -
"gfxshadow" - This is the flag to set gfxshadow
"grabbing" - Entity currently held in a grab (if any). Only returns currently held entity.
"grabforce" -
"guardpoints" -
"hasplatforms" - It returns 1 if the entity you set is has a platform in current animation
"health" - Current HP left.
"height" - Height of a entity. If not set, you can't hit the latform with head.
"hitbyid" -
"hitheadplatform" - It returns the platform handler if the entity hit the platform with head and set the entity height > 0
"hitwall" - It returns 1 while you hit a wall/obstacle/platform while y > base
"hmapl" - Start index of hidden maps that you set with hmap X Y.
"hmapu" - End index of hidden maps that you set with hmap X Y.
"hostile" -
"icon" -
"iconposition" -
"invincible" -
"invinctime" -
"jugglepoints" -
"jumpheight" -
"jumpmovex" -
"jumpmovez" -
"jumpspeed" -
"knockdowncount" -
"komap" -
"landedplatform" - It returns the platform handler where the entity is on if entity is on, otherwise it returns NULL()
"landframe" -
"lifeposition" -
"lifespancountdown" -
"link" -
"map" - Current color remap in use. 0 = default, 1 = first remap, and so on.
"mapcount" - Number of maps
"mapdefault" -
"maps" -
"maptime" -
"maxguardpoints" -
"maxhealth" - Max health.
"maxjugglepoints" -
"maxmp" - Max MP.
"model" - Model name.
"mp" - Current MP left.
"mpdroprate" -
"mprate" -
"mpset" -
"mpstable" -
"mpstableval" -
"name" - Current name, or we say alias.
"nameposition" -
"nextanim" -
"nextmove" -
"nextthink" -
"no_adjust_base" -
"noaicontrol" -
"nodieblink" -
"nodrop" -
"nograb" -
"nohithead" - 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
"nolife" -
"nopain" -
"numweapons" - It returns the number of weapons of the entity.
"offense" - Return one of the offense factors of this entity. Follow by an integer specifies the attack type(see 'openborconstant', and also **'changeentityproperty').
"offscreen_noatk_factor" - set the chance (you need 1.0) has the enemy to attack offscreen. if you set 1.0 (NO ATK FACTOR) the enemy will not attack offscreen
"offscreenkill" - set after how many pixels offscreen the enemy can die
"opponent" - Last entity interacted with (damaged, damaged by, grabbed, etc.). Essentially this returns whoever would be showing up on a player's enemy life meter, but works for all entities.
"owner" -
"pain_time" -
"parent" -
"path" -
"pathfindstep" -
"playerindex" -
"position" -
"projectile" - Entity's projectile (blasted or thrown) status. 0 = Normal, 1 = Blasted or thrown.
"projectilehit" -
"range" -
"releasetime" -
"running" -
"rush_count" - current rush count
"rush_tally" - max rush count
"rush_time" - how much time you have before rush has ended.
"score" -
"scroll" -
"seal" - Entity's seal property. Entity cannot perform any special with an energy cost >= seal property.
"sealtime" - The elapsed gametime when engine will reset seal property to 0.
"setlayer" -
"shadowbase" -
"sortid" -
"spawntype" -
"speed" -
"sprite" -
"spritea" -
"stalltime" -
"stats" -
"staydown" -
"staydownatk" -
"stealth" - Entity's stealth factor.
"subentity" -
"subject_to_basemap" -
"subject_to_gravity" -
"subject_to_hole" -
"subject_to_maxz" -
"subject_to_minz" -
"subject_to_obstacle" -
"subject_to_platform" -
"subject_to_screen" -
"subject_to_wall" -
"subtype" - Subtype, e.g., arrow, biker. It is an integer value, see 'openborconstant'.
"takeaction" -
"think" -
"thold" -
"throwdamage" -
"throwdist" -
"throwframewait" -
"throwheight" -
"tosstime" -
"tossv" - Toss velocity (jumping or falling).
"trymove" -
"type" - Type, e.g, enemy, player. It is an integer value, see 'openborconstant'.
"velocity" - Set the velocity. It accepts 3 params. NULL() is valid.
"vulnerable" -
"walkoffmovex" -
"walkoffmovez" -
"weapent" -
"weaploss" - It accepts to values, example: changeentityproperty(entity,"weaploss",1,0). For first value see weaploss {flag} for second set the flag active on/off
"weapnum" - Set/get the weapon index
"weapon" - Set/get the weapon index but it accepts a second param, anim_flag: if set to 1 for scripted midair weapon changing, default 0
"x" - X position in level.
"xdir" - Horizontal velocity.
"y" - Altitude position in level.
"z" - Z position in level.
"zdir" - Vertical velocity.

Libretro port?

Did you ever think about to port OpenBOR into a libretro-core?

A libretro core is a program (a game/emulator/miscellaneous) that has been ported to the libretro API so that it can be used by libretro frontends.

https://www.libretro.com/index.php/develop/
With RetroPlayer Kodi18 (Leia) on the horizon ...
This would be awsome!
Thx

OpenGL Alignment

@Plombo I noticed that the default OpenGL has a pretty nasty issue with grid alignment. In 480 widescreen (presumably others, but only tested 480*272) mode, the top Y position is moved ~25 pixels off screen, cutting off the top of levels and breaking scripted draw functions.

To test this, I wrote a grid drawing function. Run it in the update of any module to test. See the following screen shots:

SDL

SDL mode in normal and double size. Notice the grid and scripted enemy status. The 0 line is at top of screen, enemy icons and life all appear as intended.

ga-sdl-0
ga-sdl-1

OpenGL

In OpenGL, the enemy HUD is drawn off screen, grid does not appear until line 30 and part of the stage is cut off. Also notice how in double size, the cutoff is not so severe. Continuing to increase the size beyond *2 will eventually bring all items back into view. The bottom remains aligned correctly.

ga-opengl-0
ga-opengl-1

Drawmethod Clip

Seams that Drawmethod Clip has an issue: The effect isn't replicated by the gfxshadow neither by the mirror effect, as show on the image bellow.

avengers - 0026

The gfxshadow still shows the normal sprite shadow (when it should show only the clipped part) and the mirror simply doesn't shows the sprite at all.

Also, can one of the devs documents Drawmethod Clip?

drawmethod clip {x} {y} {w} {h}
~This one is on svn but is still experimental.

The X and Y starts counting from where? The image edge or from the image axis?
The W goes from left to right, but the H starts trom top to down or bottom to top?

Edit: I got it. It starts from the image edge, at top left. I will add this into the manual.

Invalid header

stristr.h contains a one line function prototype under the GPL.

char* stristr(char* haystack, char* needle);

The implementation - located in stristr.c (a public domain license) does not match the prototype.

char *stristr(const char *String, const char *Pattern)
{ ...

Problem Starting OpenBOR

Hey, I tried starting OpenBOR for Windows and it refused to start. Will someone try to figure out the problem was? Thank you.

openbor-issue02
openbor-issue01

OpenBOR for official Debian GNU/Linux packaging

I'm interested in working with this source code to make it available in Debian repositories to give more visibility to GNU/Linux user.

But you would like to understand better in the compilation could you clarify me?

captura de tela de 2017-05-01 19-16-46

Saying that did not find the files for compilation, could you tell me what I'm doing wrong?

Thanks!

OGG files over BOR

Any plans to fix the issue with REMIX.BOR? I reported it back at 2013.
There is a required music: remix.bor. If you put a remix.ogg it will play, but when you go back to the title, it will play the .bor version instead.

It would be better if the engine can look for .ogg files in all required music, since .ogg is way smaller than .bor

Complete animationproperty

Need to complete animationproperty to get framecount and other props like:
enum _prop_summonframe_enum
enum _prop_starvelocity_enum
etc...

Wii Port - D-Pad Up Key doesn't work in menu when selecting a game

I have tested the last version (thanks for fixing it to make it work with USB) and it works fine with Game Cube Controller or Wii-Mote controller, but when using my original Pro Controller it doesn't work when I press up with the D-pad (it works if I use the analog, but not in the D-Pad). It works perfect in-game too, only doesn't work Up in the menu when selecting between the diferent pak files.

Wii port - FX sounds plays too low

I'm not sure why but I always have to put the volume of the FX at maximum and even with that they doesn't play too high... I think something is broken there.

These changes doesn't work for the OpenBOR menus? Is not suposed that the "click" that sounds when I'm changing the value of the FX should sound high or low depending of the value? Because I don't see difference when changing the value to a high volume...

Wii Port - Enemies moving horizontally when they fall to the floor

I have tested various .pak files and I noticed this problem. Watched some videos of these packs and the enemies shouldn't move like that when they are on the floor (they should be stopped in the same place). And they just continue moving horizontally on the floor until the end of the stage...
I happens in all the games I have tested until now....

Android touch bug

Unresolved touch (lag?) bug on android port with SDL2 update..
I ask any help...
After any tests I can't fix this issue...

OpenBOR Wii doesn't work on USB device

It seems that it doesn't load the pak files from a USB device. I tried a with a pendrive and with a HDD and it crashes when I try to load OpenBOR ("Exception DSI Occurred!" screen or just a black screen sometimes).

"Remap" with strange results

An user reported at my FB group that old mods with REMAP has strenge results, check the image bellow
Image: https://imgur.com/XFKfvqI
error

Build: Tested in OpenBor_v3.0_Build_4553 and OpenBOR_v3.0_Build_3849
Mod: Bare Knuckle 6 - Turn The Tide

Crash due to underallocation with max collisions > 1

Simpsons Treehouse of Horror (version 2.0.0 from Nov 1, 2016) crashes on startup

Process 3597 stopped
* thread #1, stop reason = signal SIGSEGV: invalid address (fault address: 0x61000000ab)
    frame #0: openbor`cache_model_sprites(m=0x000000080968de00, ld=1) at openbor.c:5481
   5478                 {
   5479                     for(instance = 0; instance < max_collisons; instance++)
   5480                     {
-> 5481                         cachesound(anim->collision_attack[f]->instance[instance]->hitsound, ld);
   5482                         cachesound(anim->collision_attack[f]->instance[instance]->blocksound, ld);
   5483                     }
   5484                 }
(lldb) bt
* thread #1, stop reason = signal SIGSEGV: invalid address (fault address: 0x61000000ab)
  * frame #0: openbor`cache_model_sprites(m=0x000000080968de00, ld=1) at openbor.c:5481
    frame #1: openbor`load_cached_model(name="Krustyw", owner="models.txt", unload='\0') at openbor.c:8513
    frame #2: openbor`load_models at openbor.c:12090
    frame #3: openbor`startup at openbor.c:32496
    frame #4: openbor`openborMain(argc=1, argv=0x00007fffffffe290) at openbor.c:36199
    frame #5: openbor`main(argc=1, argv=0x00007fffffffe290) at sdlport.c:126
    frame #6: openbor`_start(ap=<unavailable>, cleanup=<unavailable>) at crt1.c:72

while Rocket Viper 2 (v2.41) crashes when loading the first level

Process 3727 stopped
* thread #1, stop reason = signal SIGSEGV: invalid address (fault address: 0x6500000036)
    frame #0: openbor`free_frames(anim=0x000000080d0d1200) at openbor.c:5307
   5304                         // for sub structures.
   5305
   5306                         // Coords.
-> 5307                         if(anim->collision_attack[i]->instance[instance]->coords)
   5308                         {
   5309                             free(anim->collision_attack[i]->instance[instance]->coords);
   5310                             anim->collision_attack[i]->instance[instance]->coords = NULL;
(lldb) bt
* thread #1, stop reason = signal SIGSEGV: invalid address (fault address: 0x6500000036)
  * frame #0: openbor`free_frames(anim=0x000000080d0d1200) at openbor.c:5307
    frame #1: openbor`free_anim(anim=0x000000080d0d1200) at openbor.c:5400
    frame #2: openbor`anim_list_delete(index=42) at openbor.c:5378
    frame #3: openbor`free_model(model=0x000000080c8d1900) at openbor.c:5502
    frame #4: openbor`free_models at openbor.c:5599
    frame #5: openbor`borShutdown(status=1, msg="There's an exception while executing script '%s' %s") at openbor.c:32238
    frame #6: openbor`Script_Execute(pscript=0x000000080f00d554) at common.c:1492
    frame #7: openbor`execute_updatedscripts at openbor.c:31351
    frame #8: openbor`update(ingame=1, usevwait=0) at openbor.c:31819
    frame #9: openbor`playlevel(filename="DATA/LEVELS/scene/open/open.txt") at openbor.c:33159
    frame #10: openbor`playgame(players=0x00007fffffffdf90, which_set=0, useSavedGame=0) at openbor.c:33767
    frame #11: openbor`choose_mode(players=0x00007fffffffdf90) at openbor.c:34182
    frame #12: openbor`openborMain(argc=1, argv=0x00007fffffffe290) at openbor.c:36339
    frame #13: openbor`main(argc=1, argv=0x00007fffffffe290) at sdlport.c:138
    frame #14: openbor`_start(ap=<unavailable>, cleanup=<unavailable>) at crt1.c:72

However, ASan sheds more light

=================================================================
==338==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6020000b2b38 at pc 0x00000050409c bp 0x7ffffffecdd0 sp 0x7ffffffecdc8
WRITE of size 8 at 0x6020000b2b38 thread T0
    #0 0x50409b in addframe engine/openbor.c:5963:60
    #1 0x585256 in load_cached_model engine/openbor.c:10945:28
    #2 0x5a5038 in load_models engine/openbor.c:12090:13
    #3 0x79b01c in startup engine/openbor.c:32496:5
    #4 0x7d0d53 in openborMain engine/openbor.c:36199:5
    #5 0x8bd6ef in main engine/sdl/sdlport.c:126:2
    #6 0x42aeef in _start /usr/src/lib/csu/amd64/crt1.c:72:7

0x6020000b2b38 is located 0 bytes to the right of 8-byte region [0x6020000b2b30,0x6020000b2b38)
allocated by thread T0 here:
    #0 0x4a329c in malloc (/usr/local/bin/openbor+0x4a329c)
    #1 0x4b8d2f in safeMalloc engine/source/safealloc.h:31:23
    #2 0x502201 in collision_alloc_attack_list engine/openbor.c:5758:14
    #3 0x503c44 in addframe engine/openbor.c:5958:55
    #4 0x585256 in load_cached_model engine/openbor.c:10945:28
    #5 0x5a5038 in load_models engine/openbor.c:12090:13
    #6 0x79b01c in startup engine/openbor.c:32496:5
    #7 0x7d0d53 in openborMain engine/openbor.c:36199:5
    #8 0x8bd6ef in main engine/sdl/sdlport.c:126:2
    #9 0x42aeef in _start /usr/src/lib/csu/amd64/crt1.c:72:7
    #10 0x800e4cfff  (<unknown module>)

SUMMARY: AddressSanitizer: heap-buffer-overflow engine/openbor.c:5963:60 in addframe
Shadow bytes around the buggy address:
  0x4c0400016510: fa fa 00 04 fa fa 00 04 fa fa 00 04 fa fa 00 04
  0x4c0400016520: fa fa 00 04 fa fa 00 04 fa fa 07 fa fa fa 00 00
  0x4c0400016530: fa fa fd fa fa fa fd fa fa fa fd fa fa fa fd fa
  0x4c0400016540: fa fa fd fa fa fa fd fa fa fa fd fa fa fa fd fa
  0x4c0400016550: fa fa 04 fa fa fa 04 fa fa fa 04 fa fa fa 00 fa
=>0x4c0400016560: fa fa 00 fa fa fa 00[fa]fa fa fa fa fa fa fa fa
  0x4c0400016570: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x4c0400016580: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x4c0400016590: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x4c04000165a0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x4c04000165b0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==338==ABORTING

Example fixes:
https://github.com/freebsd/freebsd-ports/blob/b5e1cb9ba665/games/openbor/files/patch-openbor.c#L17
https://github.com/freebsd/freebsd-ports/blob/b5e1cb9ba665/games/openbor/files/patch-openbor.c#L36

About PSP

Sorry for bothering you.
I notice that this engine can make PSP game! Does it suppport the PSP system 6.60 or 6.61.

Building on x64 Linux fail

Hello,
I try to build using ./build 4 amd64 building starts but the compiler gives multiple warnings concerning sprintf.
I removed the -Werror flag from the Makefile it builds and runs but sometimes it gives me Segmentation Fault.

Bombs can't fall in holes

BloodBane helped me to find another bug: Entities thrown like BOMB can't fall in holes.

As he had explained:
I've tried it myself and did reproduce this bug
I also tried using other build to reproduce that bug but it didn't happen
So that means the cause is OpenBoR build.

  • The not buggy one is OpenBoR v3.0 Build , Compile Date: Nov 8 2016
  • while the buggy one is OpenBoR v3.0 Build , Compile Date: Dec 22 2016 - OpenBOR_v3.0_Build_4419

Looks like some change in the engine caused this bug.

The bug is still present in builds 4432 (Compile Date: 2017-01-25) and 4453 (Compile Date: Apr 8 2017)

Recursive spawns

Suggestion
I would like to sugest the engine to be able to use recursive spawns. Right now, if you have an entity and want it to spawn another copy of itself in a different animation (so you can spawn parts of his body, for example), the spawn function go crazy, with the entity spawning in very weird places, like outside of the walkable area, wrong animation, etc

I am using this function to spawn:

void spawnAni(void vName, float fX, float fY, float fZ, void Ani, float Vx, float Vy, float Vz)
{
//spawnB (Generic spawner) + Specific animation + velocities
//Damon Vaughn Caskey + Douglas Baldan
//07/06/2007
//
//Spawns entity next to caller.
//
//vName: Model name of entity to be spawned in.
//fX: X location adjustment.
//fZ: Y location adjustment.
//fY: Z location adjustment.

void self = getlocalvar("self"); //Get calling entity.
void vSpawn; //Spawn object.
int iDirection = getentityproperty(self, "direction");

clearspawnentry(); //Clear current spawn entry.
setspawnentry("name", vName); //Acquire spawn entity by name.

if (iDirection == 0){ //Is entity facing left?
fX = -fX; //Reverse X direction to match facing.
}

  fX = fX + getentityproperty(self, "x"); //Get X location and add adjustment.
  fY = fY + getentityproperty(self, "a"); //Get Y location and add adjustment.
  fZ = fZ + getentityproperty(self, "z"); //Get Z location and add adjustment.

vSpawn = spawn(); //Spawn in entity.

changeentityproperty(vSpawn, "position", fX, fZ, fY); //Set spawn location.
changeentityproperty(vSpawn, "direction", iDirection); //Set direction.
performattack(vSpawn, openborconstant(Ani));
changeentityproperty(vSpawn, "velocity", Vx, Vy, Vz);

return vSpawn; //Return spawn.
}

Tested in OpenBoR v3.0 Build , Compile Date: Dec 22 2016 - OpenBOR_v3.0_Build_4419

Debian Packaging for OpenBOR

Hello,

My intention on OpenBOR is to make it available in Debian/Ubuntu Linux distributions, simply for users beginners.

The source code is well organized to work on the packaging, but I need you to remove the other platforms that have in the compilation leaving only the GNU/Linux version.

Can you make that change the part or can I make that change myself?

Thanks!

Make the main window larger

Hello,

Please can you add an option (or the ability to use mouse to grab and stretch) to make the main window larger, on my screen its tiny and can barely read the text.

Backfall issue?

This was reported at FB group:
"I am doing some tests here and noticed that the enemies execute the animation BACKFALL normally, but the when the players reach frame with landframe, the animation get interrupted and go straight to animation RISE.

Another detail is that when the player dies he performs the animation perfectly."

Tested in builds 4419 and 4469

Crash on Projectile Hit

I noticed while testing modifications to projectile behavior that some projectiles in my test project cause a program error on hit.

On further inspection it was not the projectile specific changes, and is being caused by an earlier modification. My guess is I've just fat-fingered something during my property project updates, left a dangling pointer laying around, and it slipped through testing until I focused specifically on projectiles.

Just in case this comes up, I'm aware and working on it.

Suggestion: Duck animation

There is something we could think for the future - the duck animation. Right now, even we can changing this behaviour with script, the way it works now doens't makes much sense or is efficient.
Because when you are in DUCK animation an executes and attack, it will revert to the DUCK animation after its done - but the DUCK animation had ducking sprits, which makes it look weird. And if you remove those frames, it will looks weird too.

In Mugen, this animation is split into 3 states (states and animations aren't tied in Mugen, but is not the point here, just treat it as animations):

10 Stand to crouch Finite looptime
11 Crouching
12 Crouch to stand Finite looptime

So, my idea would be - on a far future and if DC agrees with it - to add two new animations: DUCKING and DUCKRISE. The first would be trigger BEFORE the DUCK animation and, after its finished, the entity would remaing in DUCK animation. After the DUCKATTACK, the entity would go to DUCK animation again. And when you release the down directional, it would go to DUCKING animation and not IDLE. For sure, all of this should happen only if those animations are available - if not, it would use the DUCK as it use now (kinda the same which happens when you use a BURN type attack but doens't have a BURN animation, instead the engine will use FALL). This would prevent of breaking any old mod.

How hard it would be to implement?

Shadow fade range

SUGGESTION (dunno if we can use github for that)

Mugen has a cool feature which I think could be cool to have in OpenBOR: Shadow fade range.
This is how it works:

fade.range = top_y, bot_y ;(optional)
This parameter lets you set the range over which the shadow is visible. It is used to create an effect of the shadow fading as the player gets farther away from the ground. The first value is the high level, and the second is the middle level. Both represent y-coordinates of the player. A shadow is invisible if the player is above the high level, and fully visible if below the middle level. The shadow is faded in between the two levels. If omitted, defaults to no effect (shadow is always fully visible). Take note that y-coordinate values are negative, and TOP_Y should be less than BOT_Y.

This could be great, specially when we use gfxshadow. Because it looks weird to shadows when the entities are too high.

JoyToKey keymapper is unable to map arrow keys in openbor

see http://www.chronocrash.com/forum/index.php?topic=3869.0

https://joytokey.net/en/ - the latest version v5.9 can be used, though the problem is evident back to at least v4.5...

in openbor v3 build 4107 from 2015, and in all previous versions I tested, joytokey is able to map arrow keys to joypad movement with no problems
in v3 build v4111 (the next version available on github) this is broken, though action buttons can still be mapped to joypad buttons without issue.

This issue remains up to the latest release of openbor to date. I don't think the joypad used will make a difference. I am using dinput.

Palette None

Since version OpenBOR_v3.0_Build_4469 (which is identified as 4569) entities with "palette none" will make the engine closes itself, giving this error log:

Fatal Error in load_cached_model, file: data/chars/misc/sflash.txt, line 7, message: Palette failed to load color table from image!

It's a version bug or something had changed? Because versions until OpenBOR_4453 works fine.

Skipselect resets the life count

As reported here, if you use skipselect -
with or without parameters - between two levels, the engine will ignore how many lives you have and reset it to the default value informed in the set.

OpenBoR v3.0 Build , Compile Date: Dec 22 2016 - OpenBOR_v3.0_Build_4419

Messy log

DC, if you can, fix a bit that messy log.

Wii port - Various errors in some pak games

As you will noticed I'm testing OpenBOR on the Wii this days. I know some of the issues can be caused for bad programming in the pak files themselves but I will tell you the problems I have found in different games for possible fixes.

1-Art of Fighting - Beats Of Rage Remix III:
All bugs was fixed in a updated versión, so they were bugs of the module.

2-Night Slashers X:
Fixed by msmalik681 and White Dragon.

3-Fighters History Revenge:
Fixed, it was problem with the frequency of the sounds.

4-Streets Of Rage 2X:
When it's loading the title screen it goes back to the homebrew channel... (Out of memory error!). I don't know if this can be fixed making the games loading what they need only (I noticed it loads all the stages, characters, enemies..... etc at the beginning and in big games this breaks the limits of the Wii). This is a good game and it would be great to have a way to play it on the Wii.

5-Golden Axe Revenge:
When you ride a dragon and you are in certain zones (in the first stage when you jump over the first platform) the fireball of the dragon is not fired (although it shows its animation).
I checked some videos and it should works well.

6-Preview screenshots are not showed on the game select menú.

And I'm not sure if this is in all version or just the Wii port, but I always have to put the SFX volume at max because the sound effects sounds very low...

Compiling error

I keep getting this error when compiling:

Compiling LINUX Port: openbor.c...
Compiling LINUX Port: openborscript.c...
Compiling LINUX Port: sdl/joysticks.c...
Compiling LINUX Port: sdl/control.c...
In file included from openborscript.c:36:0:
openborscript.c: In function ‘mapstrings_systemvariant’:
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:977:5: note: in expansion of macro ‘MAPSTRINGS’
     MAPSTRINGS(varlist[0], svlist, _sv_the_end,
     ^~~~~~~~~~
openborscript.c:977:28: note: did you mean to dereference the pointer?
     MAPSTRINGS(varlist[0], svlist, _sv_the_end,
                            ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
openborscript.c: In function ‘mapstrings_entityproperty’:
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:2991:5: note: in expansion of macro ‘MAPSTRINGS’
     MAPSTRINGS(varlist[1], eplist, _ep_the_end,
     ^~~~~~~~~~
openborscript.c:2991:28: note: did you mean to dereference the pointer?
     MAPSTRINGS(varlist[1], eplist, _ep_the_end,
                            ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:3013:9: note: in expansion of macro ‘MAPSTRINGS’
         MAPSTRINGS(varlist[2], eplist_aiflag, _ep_aiflag_the_end,
         ^~~~~~~~~~
openborscript.c:3013:32: note: did you mean to dereference the pointer?
         MAPSTRINGS(varlist[2], eplist_aiflag, _ep_aiflag_the_end,
                                ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:3023:13: note: in expansion of macro ‘MAPSTRINGS’
             MAPSTRINGS(varlist[3], proplist_defense, _ep_defense_the_end,
             ^~~~~~~~~~
openborscript.c:3023:36: note: did you mean to dereference the pointer?
             MAPSTRINGS(varlist[3], proplist_defense, _ep_defense_the_end,
                                    ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:3031:9: note: in expansion of macro ‘MAPSTRINGS’
         MAPSTRINGS(varlist[2], proplist_dot, _ep_dot_the_end,
         ^~~~~~~~~~
openborscript.c:3031:32: note: did you mean to dereference the pointer?
         MAPSTRINGS(varlist[2], proplist_dot, _ep_dot_the_end,
                                ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:3038:9: note: in expansion of macro ‘MAPSTRINGS’
         MAPSTRINGS(varlist[2], proplist_edelay, _ep_edelay_the_end,
         ^~~~~~~~~~
openborscript.c:3038:32: note: did you mean to dereference the pointer?
         MAPSTRINGS(varlist[2], proplist_edelay, _ep_edelay_the_end,
                                ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:3045:9: note: in expansion of macro ‘MAPSTRINGS’
         MAPSTRINGS(varlist[2], proplist_energycost, _ep_energycost_the_end,
         ^~~~~~~~~~
openborscript.c:3045:32: note: did you mean to dereference the pointer?
         MAPSTRINGS(varlist[2], proplist_energycost, _ep_energycost_the_end,
                                ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:3052:9: note: in expansion of macro ‘MAPSTRINGS’
         MAPSTRINGS(varlist[2], proplist_flash, _ep_flash_the_end,
         ^~~~~~~~~~
openborscript.c:3052:32: note: did you mean to dereference the pointer?
         MAPSTRINGS(varlist[2], proplist_flash, _ep_flash_the_end,
                                ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:3059:9: note: in expansion of macro ‘MAPSTRINGS’
         MAPSTRINGS(varlist[2], proplist_icon, _ep_icon_the_end,
         ^~~~~~~~~~
openborscript.c:3059:32: note: did you mean to dereference the pointer?
         MAPSTRINGS(varlist[2], proplist_icon, _ep_icon_the_end,
                                ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:3067:9: note: in expansion of macro ‘MAPSTRINGS’
         MAPSTRINGS(varlist[2], proplist_knockdowncount, _ep_knockdowncount_the_end,
         ^~~~~~~~~~
openborscript.c:3067:32: note: did you mean to dereference the pointer?
         MAPSTRINGS(varlist[2], proplist_knockdowncount, _ep_knockdowncount_the_end,
                                ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:3074:9: note: in expansion of macro ‘MAPSTRINGS’
         MAPSTRINGS(varlist[2], proplist_landframe, _ep_landframe_the_end,
         ^~~~~~~~~~
openborscript.c:3074:32: note: did you mean to dereference the pointer?
         MAPSTRINGS(varlist[2], proplist_landframe, _ep_landframe_the_end,
                                ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:3081:9: note: in expansion of macro ‘MAPSTRINGS’
         MAPSTRINGS(varlist[2], proplist_maps, _ep_maps_the_end,
         ^~~~~~~~~~
openborscript.c:3081:32: note: did you mean to dereference the pointer?
         MAPSTRINGS(varlist[2], proplist_maps, _ep_maps_the_end,
                                ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:3088:9: note: in expansion of macro ‘MAPSTRINGS’
         MAPSTRINGS(varlist[2], proplist_range, _ep_range_the_end,
         ^~~~~~~~~~
openborscript.c:3088:32: note: did you mean to dereference the pointer?
         MAPSTRINGS(varlist[2], proplist_range, _ep_range_the_end,
                                ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:3095:9: note: in expansion of macro ‘MAPSTRINGS’
         MAPSTRINGS(varlist[2], proplist_running, _ep_running_the_end,
         ^~~~~~~~~~
openborscript.c:3095:32: note: did you mean to dereference the pointer?
         MAPSTRINGS(varlist[2], proplist_running, _ep_running_the_end,
                                ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:3103:9: note: in expansion of macro ‘MAPSTRINGS’
         MAPSTRINGS(varlist[2], proplist_spritea, _ep_spritea_the_end,
         ^~~~~~~~~~
openborscript.c:3103:32: note: did you mean to dereference the pointer?
         MAPSTRINGS(varlist[2], proplist_spritea, _ep_spritea_the_end,
                                ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:3110:9: note: in expansion of macro ‘MAPSTRINGS’
         MAPSTRINGS(varlist[2], proplist_staydown, _ep_running_the_end,
         ^~~~~~~~~~
openborscript.c:3110:32: note: did you mean to dereference the pointer?
         MAPSTRINGS(varlist[2], proplist_staydown, _ep_running_the_end,
                                ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:3122:13: note: in expansion of macro ‘MAPSTRINGS’
             MAPSTRINGS(varlist[i], proplist_hostile_candamage, _ep_hcd_the_end,
             ^~~~~~~~~~
openborscript.c:3122:36: note: did you mean to dereference the pointer?
             MAPSTRINGS(varlist[i], proplist_hostile_candamage, _ep_hcd_the_end,
                                    ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:3135:9: note: in expansion of macro ‘MAPSTRINGS’
         MAPSTRINGS(varlist[2], proplist_takeaction, _ep_ta_the_end,
         ^~~~~~~~~~
openborscript.c:3135:32: note: did you mean to dereference the pointer?
         MAPSTRINGS(varlist[2], proplist_takeaction, _ep_ta_the_end,
                                ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:3142:9: note: in expansion of macro ‘MAPSTRINGS’
         MAPSTRINGS(varlist[2], proplist_think, _ep_th_the_end,
         ^~~~~~~~~~
openborscript.c:3142:32: note: did you mean to dereference the pointer?
         MAPSTRINGS(varlist[2], proplist_think, _ep_th_the_end,
                                ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
openborscript.c: In function ‘mapstrings_playerproperty’:
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:7301:5: note: in expansion of macro ‘MAPSTRINGS’
     MAPSTRINGS(varlist[1], proplist, _pp_the_end,
     ^~~~~~~~~~
openborscript.c:7301:28: note: did you mean to dereference the pointer?
     MAPSTRINGS(varlist[1], proplist, _pp_the_end,
                            ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
openborscript.c: In function ‘mapstrings_setspawnentry’:
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:9346:5: note: in expansion of macro ‘MAPSTRINGS’
     MAPSTRINGS(varlist[0], proplist, _sse_the_end,
     ^~~~~~~~~~
openborscript.c:9346:28: note: did you mean to dereference the pointer?
     MAPSTRINGS(varlist[0], proplist, _sse_the_end,
                            ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
openborscript.c: In function ‘mapstrings_playerkeys’:
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:9948:9: note: in expansion of macro ‘MAPSTRINGS’
         MAPSTRINGS(varlist[i], proplist, _pk_the_end,
         ^~~~~~~~~~
openborscript.c:9948:32: note: did you mean to dereference the pointer?
         MAPSTRINGS(varlist[i], proplist, _pk_the_end,
                                ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
Compiling LINUX Port: sdl/sblaster.c...
openborscript.c: In function ‘mapstrings_textobjproperty’:
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:10565:5: note: in expansion of macro ‘MAPSTRINGS’
     MAPSTRINGS(varlist[1], proplist, _top_the_end,
     ^~~~~~~~~~
openborscript.c:10565:28: note: did you mean to dereference the pointer?
     MAPSTRINGS(varlist[1], proplist, _top_the_end,
                            ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
openborscript.c: In function ‘mapstrings_layerproperty’:
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:10984:5: note: in expansion of macro ‘MAPSTRINGS’
     MAPSTRINGS(varlist[0], typelist, _glt_the_end,
     ^~~~~~~~~~
openborscript.c:10984:28: note: did you mean to dereference the pointer?
     MAPSTRINGS(varlist[0], typelist, _glt_the_end,
                            ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:10986:5: note: in expansion of macro ‘MAPSTRINGS’
     MAPSTRINGS(varlist[2], proplist, _glp_the_end,
     ^~~~~~~~~~
openborscript.c:10986:28: note: did you mean to dereference the pointer?
     MAPSTRINGS(varlist[2], proplist, _glp_the_end,
                            ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
openborscript.c: In function ‘mapstrings_drawmethodproperty’:
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:12125:5: note: in expansion of macro ‘MAPSTRINGS’
     MAPSTRINGS(varlist[1], proplist, _dm_the_end,
     ^~~~~~~~~~
openborscript.c:12125:28: note: did you mean to dereference the pointer?
     MAPSTRINGS(varlist[1], proplist, _dm_the_end,
                            ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
openborscript.c: In function ‘mapstrings_gfxproperty’:
source/openborscript/scriptcommon.h:60:60: error: comparison between pointer and zero character constant [-Werror=pointer-compare]
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                                            ^
openborscript.c:13658:5: note: in expansion of macro ‘MAPSTRINGS’
     MAPSTRINGS(varlist[1], proplist, _gfx_the_end,
     ^~~~~~~~~~
openborscript.c:13658:28: note: did you mean to dereference the pointer?
     MAPSTRINGS(varlist[1], proplist, _gfx_the_end,
                            ^
source/openborscript/scriptcommon.h:60:38: note: in definition of macro ‘MAPSTRINGS’
             for(proplist_cursor = 0; LIST[proplist_cursor] != '\0'; proplist_cursor++){ \
                                      ^~~~
Compiling LINUX Port: sdl/timer.c...
Compiling LINUX Port: sdl/sdlport.c...
Compiling LINUX Port: sdl/video.c...
Compiling LINUX Port: sdl/videocommon.c...
Compiling LINUX Port: sdl/threads.c...
Compiling LINUX Port: sdl/menu.c...
Compiling LINUX Port: sdl/opengl.c...
cc1: all warnings being treated as errors
Compiling LINUX Port: sdl/loadgl.c...
Compiling LINUX Port: source/adpcmlib/adpcm.c...
make: *** [Makefile:658: openborscript.o] Error 1
make: *** Waiting for unfinished jobs....

Removing All LINUX Files...
Done!

I've tried different versions of gcc, from 7.3.0 to 7.3.1+20180406. I still get this error. My OS is Parabola Linux. What do I do? What other information do I need to specify?

Huge pack file

There a HUGE (1GB) pack file in the .git directory of the repo that makes the repo ridiculous in size named: pack-bad2c1c73c3088c38db4c0294dcb050946913b2b.pack
Is that supposed to be there? And what is it?

Damageonland issue

I discovered that when you set a DAMAGEONLAND (as a attackbox complement or by script), the target wont react (IOW, its velocity won't change) by any other attack (even if the knockdown power is bigger) until it lands.

This breaks combos where you need a first attack which throws the target high in the air and wants to hit it again, while having it to receive damage from the fall from the a great altitude.

OpenBoR v3.0 Build , Compile Date: Dec 22 2016 - OpenBOR_v3.0_Build_4419

Build version on the log

Long time ago, all OpenBOR builds had the Build version on the log. But since version 3, this
isn't available anymore.

From the latest version (4569)
OpenBoR v3.0 Build , Compile Date: Apr 21 2017

It's possible to have this again? This helps the users to report bugs.

BGM Player in Launcher crashes with > 80 tracks

"Art of Fighting - Trouble in South Town" from here has 221 tracks. When trying to play the BGM from game selection menu it crashes.

=================================================================
==72226==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x00080cdc3d64 at pc 0x000000a1423a bp 0x7fffffffdcc0 sp 0x7fffffffdcb8
WRITE of size 1 at 0x00080cdc3d64 thread T0
    #0 0xa14239 in packfile_get_titlename engine/source/gamelib/packfile.c:1390:20
    #1 0xa148b1 in packfile_music_read engine/source/gamelib/packfile.c:1442:25
    #2 0x8cc3d9 in Menu engine/sdl/menu.c:704:3
    #3 0x8bd6cc in main engine/sdl/sdlport.c:121:2
    #4 0x42aeef in _start /usr/src/lib/csu/amd64/crt1.c:72:7

0x00080cdc3d64 is located 244 bytes to the right of 324720-byte region [0x00080cd74800,0x00080cdc3c70)
allocated by thread T0 here:
    #0 0x4a329c in malloc (/usr/local/bin/openbor+0x4a329c)
    #1 0x8c3c9f in safeMalloc engine/source/safealloc.h:31:23
    #2 0x8c465e in findPaks engine/sdl/menu.c:192:17
    #3 0x8cc2b9 in Menu engine/sdl/menu.c:700:19
    #4 0x8bd6cc in main engine/sdl/sdlport.c:121:2
    #5 0x42aeef in _start /usr/src/lib/csu/amd64/crt1.c:72:7
    #6 0x800e4cfff  (<unknown module>)

SUMMARY: AddressSanitizer: heap-buffer-overflow engine/source/gamelib/packfile.c:1390:20 in packfile_get_titlename
Shadow bytes around the buggy address:
  0x4001019b8750: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x4001019b8760: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x4001019b8770: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x4001019b8780: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 fa fa
  0x4001019b8790: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x4001019b87a0: fa fa fa fa fa fa fa fa fa fa fa fa[fa]fa fa fa
  0x4001019b87b0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x4001019b87c0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x4001019b87d0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x4001019b87e0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x4001019b87f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==72226==ABORTING

Example fix: https://github.com/freebsd/freebsd-ports/blob/afa4be9c7d5b/games/openbor/files/patch-source_gamelib_packfile.h

Android Joystick Mapping Bug (D-PAD/AXIS)

Since updated the SDL version, can't map a bluetooth control anymore. The engine detects random button press. You can't map anything because it keeps detects one of the axis mutiple times or even the other buttons.

Lockup on PSP & Android

Android and PSP ports are unstable as of 0eeff9e. Last known good b0e8315.

Per @dbaldan:

On the build 4453, the default colourdepth had changed to 32bits, dropping the support to 8 and 16buts. That build has no Android port, so the next available Android support is 4574.

When you run a mod in Android from that build and on, if you turn of the screen and turn it on back (pausing or not), you face the following:

  • The screen gets black
  • App freezes/hangs but doesn’t closes itself
  • No trace at the log
  • App doesn’t responses to any other Android button (back, home)
  • If you try to drag the notification bar down (by swiping down from the top of the screen), once the notification gets over the frost app, it gets freeze too.
  • If you turn off the screen again and try to turn it on back again, you will need to wait a bit or even the power button won’t response.
  • If you ask to kill background processes in Android (which kills openBOR if its not in focus, as it should), it doesn’t kills it. You have to go to settings and force the APP to close.

@whitedragon0000 attempted a correction in f9b4117 by restoring 8 and 16 bit color modes, but this was not an acceptable solution and has been reverted.

OpenBOR does not recognize correct ps2 adapter

Sorry for my english.

A ps2 adapter not work correct in recent versions of engine. Button configuration is confusing in this gamepad. In older versions, this problem does not happen, everything works fine. But as of the 2014 versions, the buttons are not recognized correctly.
I would ask you to evaluate this problem and try to fix it, please.

Details: I tested in Windows 10 and XP operating systems.

Below is the image of the adapter:

psadapter

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.