This repository was archived by the owner on Sep 20, 2023. It is now read-only.
FOClassic v1
- Hello world!
FOClassic is born; see official announcement for detailed information about the project.
- engine building process has been migrated to CMake and heavily integrated with it
- many tasks has been automated to avoid human mistakes when preparing release
- parts of cmake setup which might be useful for developers will become part of release and/or public repository; that includes more or less complex scripts, where cmake will be favored over .bat/.sh files
- changed generated binary files signatures, files created by FOnline are explicitly ignored
- results in enforcing clean state on all servers willing to use applications in this project; migrating from r412 keeping saves, while technically possible (by hexediting files), is not adviced, supported, or good idea at all
- see binary files documentation for detailed description
- changed protocol used for Client <-> Server communication
- protocol versioning has been removed, version of Client and Server must match; adjusting FOGAME.MSG/1024 is advised
- multiple changes breaking compatibility with FOnline
- checking server status is not affected by protocol changes
- changed naming convention for released applications
FOnline
->ClientGL
FOnlineD3D
->ClientDX
Mapper
->MapperGL
MapperD3D
->MapperDX
FOnlineServer
->Server
- [windows] reminder: while .exe files can be renamed, associated .pdb files must keep original name, and be placed in same directory as .exe file
- crashdumps created by Client/Mapper includes information about rendering mode
- verbose server initialization log has been added and enabled by default; option to disable will follow in future version
- security fix for registration parameters
- hidden trade crash fix
- simplified logic for detecting outdated scripts bytecode
- scripts are recompiled from source whenever any mismatch is detected (older version, source newer than bytecode, etc.)
- removed warning message
- server simulates binding reserved functions after compilation of client scripts
- all provided applications now share global version number
- version contains two parts -
STAGE
andVERSION
STAGE
- internal version number, increased on completion of major milestonesVERSION
- public version number, increased on each release; visible in Client/Mapper/Server log
- both values are defined for all scripts as
FOCLASSIC_STAGE
andFOCLASSIC_VERSION
- [windows] version information is added to executables as VERSIONINFO in
1.STAGE.VERSION.*
format
- version contains two parts -
- magic numbers coming from engine - previously kept in multiple .fos files - has been merged into FOClassic.fos
- it is strongly adviced to use provided file as read-only header, both for scripts and and extensions; long-term goal is to eliminate need for editing FOClassic.fos and FOClassic.h
- whenever value from engine might be used for server-specific values (like custom item types), marker is added with suffix
LAST
and pointing at last value used by engine; please report if any of markers is missing- example:
#define ITEM_TYPE_FOOD (ITEM_TYPE_LAST+1)
- example:
- names of many values has been changed, to elimate cryptic prefixes such as
FCRIT
/FH
/FT
and more- old names are provided for each renamed value - developers can decide if they want to follow naming used in engine code right away, or keep old names and delay adaptation process; when old names are removed from header, developers can copy compatibility macros and maintain them in their own codebase
- in specific cases values/macros are provided even if they're either not used by engine at all, or have no use in extensions/scripts code
- first include macros which are widely used in scripts, and really shouldn't be separated (example: flags for finding critters)
- second include informations about inner engine logic which can be indirect help when working on more complex features (example: sprite layers)
- it's adviced to check that file at least once to have a general idea what and when is planned to be changed; due to way how project is released, in future versions developers should check for changes using tools provided by their source control system (
git diff
/svn diff
)
- extensions changes
- header name changed to FOClassic.h
- StlPort is no longer used, and must be removed from all extensions
- added
GameOptions* FOClassic
which will replaceGameOptions* FOnline
in future version - removed functions related to item deterioration flags not used by engine
bool Item::IsNoResc();
bool Item::IsService();
bool Item::IsServiceExt();
bool Item::IsEternal();
- fixed macro redefinition warnings; all values defined in header are undefined first
- many values/macros has been moved to FOClassic.fos, which is now required dependency
- added dummy extensions which serves as an example of recommended code structure; includes cmake setup
- other than being an example, provided extensions are part of engine building process, using only files prepared for release
- scripts changes
- disabled
bool SwapCritters(Critter& cr1, Critter& cr2, bool withInventory, bool withVars)
(function does nothing and always returns false); will be removed in future version - default date changed to 08.09.2078, 09:44
- disabled
- temporary changes; will be reverted in future version
- script string debugging disabled
- profiler disabled
- numeric commands removed
- GenerateWorld.cfg no longer required during initialization
- additional notes
- it's very much adviced to delete or move r412 executables to avoid launching them by muscle memory or missclick; while in most cases it ends with crash only (which is expected), FOnline r412 Server attempting to load state created by FOClassic might result with heavy RAM/HDD usage and/or making operating system completely unresponsive
- both headers are still work in progress, and has been only briefly tested against extensions - all missing entries, candidates for inclusion, and additional tuning should be posted on issue tracker