With Gamestudio you probably own the most stable and robust game creation tool on the market. We're going to great lengths for keeping it that way. Before a new version is released, it is tested for months by thousands of private and public beta testers, to make sure that it is free of severe bugs. Nevertheless, no software is completely bug-safe (click for proof). You'll find below a list of all bugs ever found in Gamestudio, and their workarounds. Here's some hints when you encounter problems during development:
Mit Gamestudio besitzen Sie wahrscheinlich das stabilste und fehlerloseste Spiele-Entwicklungssystem auf dem Markt. Wir geben uns große Mühe, dass das auch so bleibt. Jede neue Version wird vor der Veröffentlichung einem monatelangen Beta-Test von über tausend privaten und öffentlichen Testern unterzogen, um Fehlerfreiheit sicherzustellen. Dennoch kann es keine Garantie für völlige Fehlerfreiheit geben (s. Beweis). Weiter unten finden Sie eine Liste aller gemeldeten Bugs sowie Anweisungen zu ihrer Umgehung. Hier noch einige Hinweise, falls Sie während der Entwicklung einem Problem begegnen:
This is the list of all Gamestudio/A8 bugs reported since version 8.0, and their fixes and workarounds. A list of all reported problems with certain 3D cards and third party software can be found at the end of this page. If you want to apply a workaround only to a certain engine version, use the version variable to check.
Functions that use a sound handle, such as snd_playing or snd_tune, could cause a crash under some circumstances dependent on the used sound (fixed in 8.30.4).
A wrong event warning was issued when the event function was set to NULL during an event (fixed in 8.30.3).
A statistics function was erroneously left in default.c, causing an empty function warning (fixed in 8.30.3).
The '#' default size token wrongly had an effect not only on STRING definitions, but also on str_cpy operations (all A8, A7, A6, and A5 versions; fixed in 8.30.4).
The brightness of 3D models with several subsets of different texture transparency could be wrong under some rare circumstances (all A8 versions; fixed in 8.30.4).
Limits to PH_SLIDER were swapped (all A8 versions; fixed in 8.30.4).
Setting angle limits to PH_HINGE joints didn't work as described (all A8 versions; fixed in 8.30.3). Please note that in the current PhysX version, angle limits can only be set once, and not modified afterwards.
The height of a PH_CAPSULE shape was too small (all A8 versions; fixed in 8.30.1). Workaround: increase scale_z temporarily when registering a PH_CAPSULE entity for physics.
Checking [Unlit] or [Metal] in WED didn't set mtl_unlit or mtl_metal under some circumstances (all A8 versions; fixed in 8.23.0). Workaround: set the material by script.
send_skill with SEND_STRING mode worked from server to the clients, but not from a client to the server (all A7 and A8 versions; fixed in 8.23.0). Workaround: use send_data for sending entity strings from a client to the server.
ent_getvertex didn't return duplicated vertex positions on animated models (all A7 and A8 versions; fixed in 8.23.0). Workaround: use the c.v struct to get the vertex position.
The shooter templates contained an old script version with missing paths, causing them not to find their default artwork and include files (fixed in 8.23.0). Workaround: please download the correct version shooter.zip and unzip the scripts in the include and templates folders of your installation. The shooter templates will be further improved for better flexibility in the next updates.
Deactivating the HDR shader didn't reset the view size of the default postprocessing stage, causing a black image in the shader viewer (fixed in 8.23.0).
Importing levels in WED sometimes generated a large number of sub-meshes that reduced the frame rate remarkably (all A7 and A8 versions; fixed in 8.23.0). Workaround: Import the level as MDL when the level frame rate is unusually low..
The Albedo value under WED Entity Properties was not preserved when closing and re-opening the level (all A8 versions; fixed in 8.22.0). Workaround: set the albedo entity parameter by script.
path_create didn't work under some circumstances when the level contained no paths (fixed in 8.22.0). Workaround: Create some dummy paths in the level when you use path_create.
When the same client connects or disconnects to an A8 server several times, the on_server event could be called too often (all A8 versions; fixed in 8.22.0). Workaround: Save the client ids in a variable list and only execute a join event when a client with a new id joins.
The draw_quad function used a wrong rotation center (all A7 and A8 versions; fixed in 8.22.0). Workaround: Use a panel object for displaying rotated bitmaps.
Hexadecimal constants like "0x1000" didn't work in array dimension definitions (all A7 and A8 versions; fixed in 8.13.1). Workaround: Use only decimal constants for the dimension in array definitions.
pXcon_setparams2 didn't work for 6D joints (all A8 versions; fixed in 8.12.1). Workaround: Use ball, hinge, or slider joints when the parameters must be modified from their default values.
PROC_NOFREEZE didn't work properly (all A8 versions; fixed in 8.12.0).
view_check sometimes returned 1 even when the box was fully inside the view cone (all A8 versions; fixed in 8.12.0).
PH_CONVEX objects that were part of a chain of joints caused a crash under certain circumstances when released (all A8 versions; fixed in 8.11.2). Workaround: Use joints only with simple shapes (box, sphere, etc.) when they need to be released at runtime.
ent_clone with sprites didn't clone all LOD steps (all A8 and A7 versions; fixed in 8.11.1). Workaround: Use flat models when cloning sprites is necessary.
The Map Compiler could not compile maps without lights (fixed in 8.11.0). The fixed version can be downloaded here: http://server.conitec.net/down/wwmp2wmb.zip. Please unzip the fixed compiler into your Gamestudio folder.
ent_getvertex returned the same normal for all terrain vertices (fixed in 8.11.0). Workaround: set terrain_lod to a nonzero value before loading the terrain.
The recommendation to use c_intersect for the intersection of a ray and a box only works from A8.11 on.
draw_line3d and draw_point3d produced too-bright colors under some circumstances (all A8 and A7 versions; fixed in 8.11.0).
Sprite instancing didn't work properly when sprites had different alpha values (all A8 versions; fixed in 8.10.0). Workaround: leave d3d_instancing at 0 when using sprites with different alpha values.
The send_skill_id function sent to a wrong id under some circumstances (all A8 and A7 versions since A7.50; fixed in 8.10.0). Workaround: use send_skill_to instead.
The mtlFX shader library contained a wrong file name of the default sky cube (all A8 versions; fixed in 8.06.2). Workaround: edit include\mtlFX.c and replace "skycube+6.tga" with "skycube+6.dds".
ent_createlocal erroneously created sub-entities of map entities globally (all A8 versions; fixed in 8.06.1). Workaround: set map_subents to 0 and create the sub-entities by script.
Particles had a wrong size in ISOMETRIC mode (all A8 versions; fixed in 8.10.0). Workaround: Create particles with effect_sprite when in ISOMETRIC mode.
The car.c script had a bug that caused frame rate dependency of the car torque (all A8 versions; fixed in 8.05.1).
vec_for_min and vec_for_max returned wrong values for multi-frame sprites (all A8 versions; fixed in 8.04.1). Workaround: get the min and max values from the sprite image size.
GED crashed in stand alone mode when a terrain was loaded with a skin size smaller than 1024x1024 pixels (all A8 and A7 versions; fixed in 8.04.1). Workaround: only use GED for painting terrain skins of sufficient size.
ent_next sometimes returned an entity pointer twice (all A8 and A7 versions; fixed in 8.04.0). Workaround: ignore the last entity when the number of returned entities is different to num_visentities.
The WED software renderer (Gxl2Bas32) did not show up in the selection dialog (fixed in 8.03.2).
Under some circumstances a particle error could occur on level change (fixed in 8.03.2). Workaround: terminate all particle functions before changing the level.
The pXent_settype function only supported maps and models with up to 65000 polygons (fixed in 8.03.0). Workaround: Split your map in several map entities when you have more than 65000 polygons.
The c_trace function could cause a crash when hitting an oriented sprite, such as a carpet on the floor (fixed in 8.03.0). Workaround: Use the PASSABLE flag for objects like floor carpets.
Under some circumstances, ptr_for_handle returned a NULL pointer for a TEXT or PANEL object when they were statically and dynamically created at the same time (all A8 and A7 versions; fixed in 8.03.2). Workaround: when using handles, only use dynamic TEXT or PANEL definitions created with txt_create or pan_create.
Placing a camera at a negative angle in WED caused a wrong positive camera angle in the engine (all A8 and A7 versions; fixed in 8.03.2). Workaround: set the correct camera angle by script.
c_ignore didn't work in combination with c_trace (fixed in 8.03.2). Workaround: use one of the other methods - flag, push, or group - to exclude objects from c_trace.
Loading an old A5/A6 "polygon" map could cause a crash (fixed in the 7.86.6 patch). Solution: Re-compile your level with proper A7 settings.
Exceeding the allowed name length of 30 characters for external model skins could cause a crash (all A3, A4, A5, A6, and A7 versions; fixed in 8.01.3). Solution: don't use crazy skin names.
Most 3D card driver bugs can be fixed by downloading the latest driver version from the manufacturer's website. Here's a list of all known third party software issues, as long as they affect Gamestudio.
You can never be sure that an arbitrary program is bug-free and won't crash - for instance, freeze the engine through an endless loop - with all possible parameters that it processes. Alan Turing found the proof 50 years ago. Consider a function BugFree that can test whether a program with certain entry parameters crashes or not. BugFree looks like this (in lite-C pseudo code):
function BugFree (Program, Parameters) { if (Program does not crash with Parameters) { return 1; } else { return 0; } }
Of course BugFree shall not crash itself, but terminate properly even when the tested Program crashes. Now we define a recursive function TestMe that calls BugFree:
function TestMe (Program) { if (BugFree (Program, Program)) { TestMe (Program); } }
This evil function only terminates when Program does not crash when it gets itself as a parameter. Otherwise TestMe calls itself endlessly and freezes. If you now call TestMe with itself as a parameters, you'll get a contradiction:
TestMe (TestMe);
This call does not crash only when it crashes. Therefore a function like BugFree can not exist. Therefore you can never prove that your code won't crash.
► latest version online