Fixed Linux Daemon version of server.
IntellisenseCreator now uses a single file and provides all variants of the deduced operators.
Fixed bugs related to the incorrect operation of the server, client and mapper under the Linux operating system.
The performance was tested on Ubuntu 12.10 under VirtualBox.
All binaries are rebuilt using GCC 4.7.2.
Optimized the work of OpenGL rendering, the performance has increased two to three times.
The renderer and shader code has been worked out for compatibility with old video cards (tested on Radeon 9600).
Added new options for changing effects in the client using the SetEffect function - see _client_defines.fos, 'Effect types' and 'Effect subtypes'.
The specification of the SetEffect function is also changed from
Void SetEffect (int effectType, int effectSubtype, string @ + effectName)
Bool SetEffect (int effectType, int effectSubtype, string @ + effectName, string @ + effectDefines = null)
String @ + effectDefines - preprocessor directives for the effect (null by default);
The return value indicates successful upload and compilation of the effect.
The 'bool __OpenGLRendering' function is added to the client and mapper scripts, which specifies which rendering is used (true - OpenGL, false - Direct3D).
Fixed the mechanism for determining the client window that was already running.
For the client / mapper, global variables have been added
Uint __FPS - current FPS;
Uint __PingPeriod - server ping period (equal to 2000 ms by default);
Uint __Ping - the current ping.
In native scripts, a function is added with which you can set callbacks when logging
Void (* GameOptions :: SetLogCallback) (void (* function) (const char *), bool enable);
Void (* function) (const char *) - function where the log texts will be sent;
Bool enable - set or remove the callback.
The client script function DrawHardcodedScreen now works with the main client screens (CLIENT_MAIN_SCREEN_ *).
In view of irrelevance, the global variable 'bool DisableDrawScreens' has been removed.
Added global server function 'uint GetRegisteredPlayers (array <uint> & ids, array <string> & names)' - returns length of arrays with clients. (By Wipe)
Fix for preprocessor's line translation with multiline macros. Added full file name to output. (By Atom)
Preprocessor now implements evaluation of constant expressions using #if directive. (By Atom)
The client function SetEffect was improved, new functionality was added, the scheme of the transmitted arguments was changed.
New types are given in _client_defines.fos EFFECT_ *, these constants are now passed only to the first argument 'int effectType', they can also be combined by means of bitwise operations.
When passing null to effectName, the default effect will be set (shown below).
More about the types of effects:
EFFECT_2D_GENERIC - objects, scenery, walls and everything else, except for the critters, tiles, rain;
EFFECT_2D_CRITTER - critter;
EFFECT_2D_TILE - floor tiles;
EFFECT_2D_ROOF - roof tiles;
EFFECT_2D_RAIN - rain;
EFFECT_3D_SIMPLE - not skinned 3d model; Only for OpenGL;
EFFECT_3D_SIMPLE_SHADOW - shadow for not skinned 3d models; Only for OpenGL;
EFFECT_3D_SKINNED - skinned 3d model;
EFFECT_3D_SKINNED_SHADOW - shadow for skinned 3d models; Only for OpenGL;
EFFECT_INTERFACE_BASE - game interface;
EFFECT_INTERFACE_CONTOUR - contours (strokes);
EFFECT_FONT - fonts;
EFFECT_PRIMITIVE_GENERIC - graphics constructed using primitives, except light;
EFFECT_PRIMITIVE_LIGHT - lighting;
EFFECT_FLUSH_RENDER_TARGET - render target rendering; Only for OpenGL;
EFFECT_FLUSH_RENDER_TARGET_MS - rendering multisempler target rendering; Only for OpenGL;
EFFECT_FLUSH_PRIMITIVE - output of the constructed graphics using primitives; Only for OpenGL;
EFFECT_FLUSH_MAP - output of the game card; Only for OpenGL;
The default effects for each type (OpenGL / Direct3D):
EFFECT_2D_GENERIC - 2D_Default.glsl / 2D_Default.fx
EFFECT_2D_CRITTER - 2D_Default.glsl / 2D_Default.fx
EFFECT_2D_TILE - 2D_WithoutEgg.glsl / 2D_Default.fx
EFFECT_2D_ROOF - 2D_Default.glsl / 2D_Default.fx
EFFECT_2D_RAIN - 2D_Default.glsl / 2D_Default.fx
EFFECT_3D_SIMPLE - 3D_Simple.glsl / -
EFFECT_3D_SIMPLE_SHADOW - 3D_Simple.glsl (#define SHADOW) / -
EFFECT_3D_SKINNED - 3D_Skinned.glsl / 3D_Default.fx
EFFECT_3D_SKINNED_SHADOW - 3D_Skinned.glsl (#define SHADOW) / -
EFFECT_INTERFACE_BASE - Interface_Default.glsl / Interface_Default.fx
EFFECT_INTERFACE_CONTOUR - Contour_Default.glsl / -
EFFECT_FONT - Font_Default.glsl / Font_Default.fx
EFFECT_PRIMITIVE_GENERIC - Primitive_Default.glsl / Primitive_Default.fx
EFFECT_PRIMITIVE_LIGHT - Primitive_Default.glsl / Primitive_Default.fx
EFFECT_FLUSH_RENDER_TARGET - Flush_RenderTarget.glsl / -
EFFECT_FLUSH_RENDER_TARGET_MS - Flush_RenderTargetMS.glsl / -
EFFECT_FLUSH_PRIMITIVE - Flush_Primitive.glsl / -
EFFECT_FLUSH_MAP - Flush_Map.glsl / -
The second parameter is considered only in the following types of effects:
EFFECT_2D_GENERIC - when specifying the id of the item, the effect will change only for it; When sending 0, the default effect will change;
EFFECT_2D_CRITTER - when specifying the id of the critter, the effect will change only for it; When sending 0, the default effect will change;
EFFECT_FONT - when specifying a font (FONT_ *), the effect will change only for it; The default effect will be changed when -1 is transmitted.
The work of the EffDef tag for fo3d format, with which you can set the initial values in the effect, is fixed.
Increased the performance of Linux versions of the server, client and mapper.
Especially it will be noticeable on single-core processors.
In the Linux version, all the binary libraries are statically linked to the main libraries used by the game.
Now the game starts without any additional package presets, at least on the following Linux distributions:
Ubuntu 12.10, Linux Mint 14.1, Fedora 18, openSUSE 12.3.
The work of the SetEffect client script function has been fixed.
Started working on porting the game under MacOSX.
Updating the documentation to the current state.
On the errors and additions, report in this thread:
At the moment, a version of the game supported by Unicode is being developed, it is available at this address
On the bugs, report on the irc channel #fodev (forestnet.org).
At the end of testing, that repository will be merged with the current one.
Updated instructions for integrating the script compiler into Notepad ++
Added support for Unicode, encoding UTF-8.
All text files are translated into UTF-8 encoding (without BOM).
Updated the entire toolkit for compatibility with Unicode.
Including the prototype editor (ObjectEditor). (By Ghosthack)
The functionality and the global client / mapper function were fixed
Void KeyboardPress (uint8 key1, uint8 key2, string @ + key1Text = null, string @ + key2Text = null)
Added optional parameters key1Text / key2Text, which will be passed to the key_up / key_down handlers along with the key1 / key2 variables.
To process the input, the constant DIK_CLIPBOARD_PASTE was added, the event of which means inserting text from the clipboard.
Changed the principle of input from the keyboard and work with the input language.
In the reserved functions of the client / key_down / key_up keyer, the string & keyText parameter is now passed, in which the text in the desired language will be written, based on the current OS input language.
Switching the keyboard layout is now controlled by the OS, not by the program, due to which the global Variable ChangeLang and the corresponding constants were removed. The global function int GetKeybLang () has also been removed.
Removed the function of translating text from one language to another by the Pause button (use third-party programs, for example, PuntoSwicher).
The name correctness checks are moved to scripts, the client / server only checks the length, correctness of UTF-8 characters and the absence of the "*" character (which in some places is then replaced by a space).
The 'string name' parameter was added to the reserved client function 'bool player_data_check (string & name, int  & data) to verify its correctness before registering.
Global server functions are added to server / client / mapper scripts:
Uint DecodeUTF8 (const string & text, uint & length) - decode the character from the text (const string & text) with the return of its UCS code and the length of the code in the string (uint & length). If the character is not recognized, the code 0xFFFD will be returned.
String @ EncodeUTF8 (uint ucs) - encoding the UCS code in a string.
The format of fofnt font files has changed, now, first of all, there must be a tag with a version of the format (Version).
- the format of the Letter tag has changed, c "Letter 65 # 'A'" to "Letter 'A'";
- Added a LineHeight tag that points to the height of the font line (if not specified, then the height is taken from the largest character in the entire list);
- in the name of the atlas for the Image font, you can add the character '*', then the texture color is normalized from any to RGB [128, 128, 128] (only for OpenGL renderer);
- the label 'End' will stop parsing the file (for debugging).
These fonts are now cached in binary form, their downloading will now be very fast, after the first run. Rekeshirovanie goes, if the time of file recording has changed.
In the main font Default.fofnt additional Unicode characters are added from the font DefaultExt.fnt (although the font itself is not used anywhere), therefore the client now supports not only English and Russian, at least for the default font.
Updated work with lines.
The index operator now returns a string containing the desired character, so it is not necessary to compare it with character constants ('X'), but rather with strings ("X"). Example:
String s = "abcd"; // s  returns "b"
String s = "abcd"; // s  exception - going beyond the array
When assigning with an index operator, the character is deleted and the line to be inserted is inserted, examples are:
String s = "abcd"; S  = "g"; // s == "agcd"
String s = "abcd"; S  = "xyz"; // s == "abxyzd"
String s = "abcd"; S  = ""; // s == "acd"
There was an opportunity to index lines with the help of negative values. This is also applicable to global functions for working with strings (substr, findFirst, findLast, etc.) for the parameter 'int start'. Examples:
String s = "abcd"; // s [-1] returns "d"
String s = "abcs"; // s [-100] exception - going beyond the array
String s = "abcd"; S [-3] = "X"; // s == "aXcd"
String s = "abcd"; S [-1] = ""; // s == "abc"
The length () method now returns the number of Unicode characters in a string, not the number of bytes, i.e. As the method lengthUTF8 (), which is now removed (replace the old length () see below).
Updated all the functions for working with strings (substr, findFirst, findLast, etc.), now they also work with Unicode characters, not bytes.
The resize (uint) method is renamed, see below.
To work with bytes in the string, the following methods are added:
Uint rawLength () const - instead of the previous length ();
Void rawResize (uint size) - instead of resize (uint);
Uint8 rawGet (uint index) const - instead of the old index operator;
Void rawSet (uint index, uint8 value) - instead of the old index operator.
Corrections in three-dimensional graphics.
Fixed memory leak when working with effects.
In the fo3d format, the Mesh tag can now be set to -1, which means that setting textures, effects, and mute materials (Texture, Effect, DesableSubset tags) will affect all meshes in the current model. Also, now this tag is -1 by default, not 0 (that is, the installation for all models, not just for the first one).
Fixed the use of effects in 3d models of OpenGL rendering (before they were not installed and the default effects were always used).
Optimized the speed of loading maps (fomap) and prototypes (fopro) files.
Fixed full screen mode in Linux version, as well as Windows for Direct3D renderer.
Switching to fullscreen mode and back will now happen on the F11 key.
In the mapper, the rain on / off now occurs on Shift + F10, instead of F11.
Added folding window on F12 in Linux.
Correcting the outlines of some symbols (a, l).
Fixed a system for tracking the game from different computers, for Linux (oisbka 'Different UID ...').
For Linux versions, the installation of the correct directory is added when the program starts, when the current directory differs from where the program is located.
Notepad ++ configs have been updated to the current state for syntax highlighting and autocompletion in scripts.
It is recommended to update Notepad ++ to the latest version (6.3.3), since the syntax highlighting is implemented on a relatively new system.
The instructions for integrating the compiler with Notepad ++ are restored and slightly updated.
Fixed some bugs in the documentation.
Server exe r509 + Mono 3.0.10
Mono update, critter events: PlaneBegin, PlaneEnd, PlaneRun
Virtual events did nothing good
Removed mono integration subdirectory. For those interested, the content can be fetched from: https://github.com/rotators/fomono/releases
In the mapper, the effect of the offsets of the objects registered in the prototype for previewing objects during installation is added.
Fixed bug with saving the client, as a result of which it was possible to roll back the data until the last save.
Fixed the function of renaming files, which was used when deleting player characters (renaming the file to ".client_deleted"). For Windows version. (By k3tamina)
Added global functions for the client: (by Wipe)
Bool SaveScreenshot () - save the screenshot;
Bool SaveLogFile () - save the log file.
Fixed loading of tiles in subdirectories. (By Atom)
For locations, the mechanism of events (in the manner of critters, maps and objects) is added. (By scypior)
The following events were added:
Void _FuncName (Location & loc, bool deleted)
Shutdown the location.
Bool _FuncName (Location & loc, Critter & cr)
When a group of players enter the location from the global map.
When true, the group enters the location, with false not.
For the Location class, the following methods are added:
Bool SetEvent (int eventType, string @ + funcName)
Void EventFinish (bool deleted)
Bool EventEnter (Critter @  & group, uint8 entrance)
Fixed drawing of extensions of main screens (login, registration, game). The SDK was used when registering in the mode of three-dimensional characters (PLAYERS_3D). Bug with 393 revisions.
Fixed a bug with downloading ZIP / BOS files, if there are not ASCII characters in the client's path. A bug with 400 revisions.
When creating crash dumps with Access Violation, the operation type (write / read) and the address of the error message are additionally recorded.
The folder Stable was deleted in the repository, because Archives are unavailable due to loss of hosting. The information on stable revisions is moved to ReadMe.txt.
I see atleast a lot of fixes, mostly for Linux users but also for Windows users + some engine hardcoded bugs fixed. And last update for SDK is from April, maybe he finally gave up with engine after many years of work? I agree, he should release engine sources so that someone could continue work on it.
Hopefully there is atleast this fix for r412, as it was for current r391:http://fonline.ru/forum/threads/4999/
FOnline engine had a lot potential, but 3D stuff just made things worse. After cvet started to it, why didn't he made for example "2D" client revision and "3D" revision for different folders?
Reloaded maybe never see newer revision than r412 as it's too much hassle and never able to get even close to stable (told by Kilgore), I know there are a lot better fixes after r412, but also bad ones (like dropped support for older GPUs with OpenGL 1.x, maybe one of the worst move made from cvet, and this was because of optimized 3D stuff... if it would be just 2D there would be always support for older GPUs), r412 was actually pretty good option as it introduced most performance fixes of almost all revisions (only better revision is one with reduced RAM usage, on r4xx), after for example r413+ there was just a lot revisions with regressions fixes, because changes that were made on r413.