dcurrent / openbor Goto Github PK
View Code? Open in Web Editor NEWOpenBOR 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
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
Please (Plombo) can you update PS Vita Tools and Makefile Update?
Thanks..
Engine support of collision detection boxes is complete internally, but there is currently no way for module authors to access or define them.
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...
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.
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.
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
@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 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.
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.
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.
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.
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)
{ ...
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?
Saying that did not find the files for compilation, could you tell me what I'm doing wrong?
Thanks!
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
Need to complete animationproperty to get framecount and other props like:
enum _prop_summonframe_enum
enum _prop_starvelocity_enum
etc...
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.
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...
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....
Unresolved touch (lag?) bug on android port with SDL2 update..
I ask any help...
After any tests I can't fix this issue...
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).
An user reported at my FB group that old mods with REMAP has strenge results, check the image bellow
Image: https://imgur.com/XFKfvqI
Build: Tested in OpenBor_v3.0_Build_4553 and OpenBOR_v3.0_Build_3849
Mod: Bare Knuckle 6 - Turn The Tide
Using precompiled mingw sdl2 2.0.8 from official site the static libSDL2.a causing no audio.
Any help?
I upload the my compiled SDL2_gfx 1.0.4 with SDL2 2.0.8 for any help.
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
It's in the title: OpenBOR on Wii can be loaded fine from a USB device if an SD card is inserted, but if no SD card is in the console, it crashes with a code dump on launch.
Sorry for bothering you.
I notice that this engine can make PSP game! Does it suppport the PSP system 6.60 or 6.61.
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.
NSW had made a video showing how the controllers are acting strange in OpenBOR.
If you watch the video, you can spot some weird things happening
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.
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)
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
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!
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.
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
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.
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?
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.
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.
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.
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
DC, if you can, fix a bit that messy log.
Currently, if you try to load a game from Wiiflow, always load the Openbor selection menu to choose the game.
Could not you avoid that menu and load the game directly?
Thanks
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...
Is it possible to update (more or less quickly) to opengl api 4.6?
I ask to you Plombo because I know that you have taken care of this part of the engine.
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?
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?
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
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.
"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
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.
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.
Latest commit crashes on open. Likely due to log enhancements causing a seg fault.
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:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.