Skip to content
  • Client cache contains more detailed informations about engine version used to compile scripts
    • new cache is requested if cached version info does not match Client
  • all players are disconnected when reloading client scripts
  • scripts changes
    • import errors slightly more developer-friendly
    • when possible, AngelScript error codes are converted to their names from angelscript.h (asINVALID_CONFIGURATION, asOUT_OF_MEMORY etc.)
    • [Server] with VerboseInit enabled, all imports are displayed in log
    • [Server] dependencies saved in .fosb files are relative to scripts directory
    • [Client, Server] precompiled scripts (cache/.fosb files) are saved with version of AngelScript used to compile them; in case of version mismatch:
      • [Client] new cache is requested
      • [Server] script is compiled from source
    • [Client, Server] importing functions from other modules is done only if no errors has been detected during scripts loading
  • temporary changes
    • warnings during scripts compilation are treated as errors (enabled during AngelScript updates, disabled in release)
  • additional notes
    • as this release contains more than one AngelScript update, it has been splitted into smaller parts (marked with git tags) which should be easier to handle for everyone
    • table below contains links to official AngelScript announcements (Version) as well as script engine repository (Revision); other than that, it's recommended to read more detailed changelog - especially sections script language and library interface (in case of extensions workin with angelscript.h)
    • for long-running servers, it's recommended to update engine tag-by-tag; links to compiled binaries are provided (note that AppVeyor keeps artifacts for about 6 months)
Version Revision Tag Binaries
2.26.1 r1582 v6-angelscript-2.26.1 https://ci.appveyor.com/project/rotators/foclassic/builds/21911136
2.26.2 r1602 v6-angelscript-2.26.2 https://ci.appveyor.com/project/rotators/foclassic/builds/21912852
2.26.3 r1633 v6-angelscript-2.26.3 https://ci.appveyor.com/project/rotators/foclassic/builds/21913947
2.27.0 r1682 v6-angelscript-2.27.0 https://ci.appveyor.com/project/rotators/foclassic/builds/21952914
2.27.1 r1699 v6 https://github.com/rotators/foclassic/releases/tag/v6/
Assets 4

@wipe2238 wipe2238 released this Jan 23, 2019 · 42 commits to master since this release

  • fixed loading of .fosb files when script source cannot be found
    • dependencies are not checked if main .fos file does not exists
  • all applications will search for config file in following order:
    • executable name
    • original name, including suffix (ClientDX.cfg, MapperGL.cfg, etc.)
    • original name, excluding suffix (Client.cfg, Mapper.cfg, Server.cfg)
    • FOClassic.cfg
    • FOnline.cfg (temporary, file will be ignored in future)
  • added Server setting VerboseInit (boolean), false by default
    • if enabled, Server prints more details about some tasks (dialogs/maps/prototypes/scripts loading)
  • removed Server setting Language_N, use Languages instead; see v2 changelog for detailed info
  • Client log filename changed to Client.log
  • extensions changes
    • GameOptions* FOnline removed, use FOClassic instead
    • GameOptions::FoDataPath renamed to GameOptions::DataPath
    • ProtoItem::IsItem() consistent with engine-side check
  • scripts changes
    • [Client] global variables __Gmap* renamed to __Worldmap*
    • [Server] global function bool SwapCritters(Critter& cr1, Critter& cr2, bool withInventory, bool withVars) removed
    • [Client, Mapper] global variable __FoDataPath renamed to __DataPath
    • [Client, Server] global variable __GlobalMapMaxGroupCount renamed to __WorldmapMaxGroupCount
  • extensions/scripts changes (FOClassic.fos)
    • multiple defines has been renamed; see tables below for a complete list
    • added DIK defines
    • changed values of COMMAND defines
    • changed values of DRAW_PRIMITIVE defines
  • interface changes
    • Gmap* entries renamed to Worldmap*
    • LMenuGmap* entries renamed to LMenuWorldmap*
  • additional notes
    • as mentioned in announcement, this release end migration stage and starts regular development where bigger and/or more demanding changes can and will be introduced; to avoid "r413+ situation" some of bigger reworks might be introduced across multiple releases, making progress somewhat slower but (hopefully) easier to grasp
Old prefix New prefix
ACTION `CRITTER_ACTION
CMD COMMAND
CONT CONTAINER
COND CRITTER_CONDITION
FCRIT CRITTER_FLAG
FH HEX_FLAG
FOMB MSGBOX
FONT FONT_TYPE
FT FONT_FLAG
GLOBAL_PROCESS WORLDMAP_PROCESS
GM_FOG WORLDMAP_FOG
GM_WALK WORLDMAP_WALK
ITEM ITEM_FLAG
ITEMS ITEM_COLLECTION
MESSAGE SENDMESSAGE
PT PATH
SCREEN SHOW_SCREEN
VAR VAR_TYPE
Old name New name
CHOSEN_MOVE_TO_CRIT CHOSEN_MOVE_TO_CRITTER
CHOSEN_MOVE_ITEM_CONT CHOSEN_MOVE_ITEM_CONTAINER
CHOSEN_USE_SKL_ON_CRITTER CHOSEN_USE_SKILL_ON_CRITTER
CHOSEN_USE_SKL_ON_ITEM CHOSEN_USE_SKILL_ON_ITEM
CHOSEN_USE_SKL_ON_SCEN CHOSEN_USE_SKILL_ON_SCENERY
CHOSEN_PICK_CRIT CHOSEN_PICK_CRITTER
CHOSEN_WRITE_HOLO CHOSEN_WRITE_HOLODISK
CLIENT_MAIN_SCREEN_GLOBAL_MAP CLIENT_MAIN_SCREEN_WORLDMAP
CLIENT_SCREEN_PIP_BOY CLIENT_SCREEN_PIPBOY
CLIENT_SCREEN_FIX_BOY CLIENT_SCREEN_FIXBOY
CLIENT_SCREEN_CHA_NAME CLIENT_SCREEN_CHAR_NAME
CLIENT_SCREEN_CHA_AGE CLIENT_SCREEN_CHAR_AGE
CLIENT_SCREEN_CHA_SEX CLIENT_SCREEN_CHAR_SEX
CLIENT_SCREEN_GM_TOWN CLIENT_SCREEN_WM_TOWN
CLIENT_SCREEN_INPUT_BOX CLIENT_SCREEN_INPUTBOX
CLIENT_SCREEN_TOWN_VIEW CLIENT_SCREEN_WM_TOWNVIEW
CLIENT_SCREEN_SAVE_LOAD CLIENT_SCREEN_LOADSAVE
CRITTER_ONLY_NAME CRITTER_LOOK_NAME
MAX_USES USE_MAX
NPC_START_ID CRITTER_ID_START_NPC
USER_START_ID CRITTER_ID_START_PLAYER
Assets 4

@wipe2238 wipe2238 released this Dec 30, 2018 · 59 commits to master since this release

  • fixed Client crash when loading .dat files in some scenarios
  • fixed ASCompiler crash when receiving warnings/errors from script engine
  • language packs are loaded by Server before initializing script system
  • Mapper scripts are compiled by Server during initialization
    • errors in Mapper scripts are not considered critical by Server; compilation will be stopped if errors are detected, and initialization will move on to next step
  • added FONT_TYPE_DIALOG, uses Dialog.fofnt
    • font file(s) are not required by default; if Dialog.fofnt cannot be found, Default.fofnt is loaded instead
    • used on dialog/barter screens only, replacing FONT_TYPE_DEFAULT usage
    • it's recommended to use FONT_TYPE_DIALOG whenever drawing strings over dialog/barter screens (even if game uses default font only) to fully support player-made interfaces
  • when reading WindowName setting, strings FOCLASSIC_STAGE and FOCLASSIC_VERSION are converted to real values; affects all core applications which uses this setting
  • Mapper window no longer adds engine version to WindowName setting
    • to restore previous behaviour use WindowName = My Game Mapper (vFOCLASSIC_VERSION)
  • reserved functions
    • [Client, Mapper] added void finish(), executed before closing application
  • extensions changes
    • added Client::UID[]
    • added GameOptionsExt::WallAlpha
    • Item::_Data::Rate added to FOCLASSIC_EXTENSION_STRIP_CONST list
  • scripts changes
    • preprocessor now understands #undef directive
    • added global define ANGELSCRIPT_VERSION
      exposes value with same name defined in angelscript.h
    • scripts for all targets can be placed in subdirectories
      • path to script (@ TARGET module in scripts.cfg) can be set using Unix and Windows format, but internally Unix format is used
    • Client:
      • added void CritterCl::GetNameTextInfo(bool& nameVisible, int& x, int& y, int& w, int& h, int& lines)
        returns size and position of name / dialog floater / chat message above critter head
      • added uint8 CritterCl::Alpha, const bool CritterCl::FadingEnable
    • Server:
      • added const bool Critter::IsDisconnected (thanks mojuk)
        returns true for offline player characters
      • added uint Critter::GetUID(uint8 index)
        returns player's UID0 - UID4
      • added uint Critter::GetIp()
        returns player's IP
      • added string@ Critter::GetIpString()
        returns player's IP in human-readable format
    • Client/Mapper:
      • added global variable uint8 __WallAlpha
        allows to change walls transparency, similiar to __RoofAlpha
      • added void SetZoom(float zoom)
        allows to change zoom level easily from scripts
Assets 4

@wipe2238 wipe2238 released this Dec 7, 2018 · 116 commits to master since this release

  • dialogs security fix (thanks Skycast)
  • ~ban command fix (thanks Skycast)
  • information about outdated Client version is always displayed to player
    • [windows] if FOGAME.MSG/1024 cannot be found (eg. cache hasn't been downloaded yet), Client displays native dialog box with hardcoded message
  • extension changes
    • if FOCLASSIC_EXTENSION_STRIP_CONST is defined, const is removed from selected entries; currently affects only geometry-related variables
  • extensions changes (requires Bleeding Edge mode)
    • introduced GameOptionsExt* FOClassicExt holding additions to GameOptions* FOClassic; this is a temporary change - once migration stage is finished (planned next month) both structures will be merged into one
    • introduced Ini* FOClassicExt::ConfigFile containing copy of configuration for currently running application
      • all sections starting with Client / Mapper / Server / Game Options are reserved for internal use
      • any additional sections are kept intact, and can be used by servers for game-specific configuration
    • introduced CmdLine* FOClassicExt::CommandLine containing copy of command line arguments
    • unlike AngelScript headers, CommandLine.h and Ini.h (required to use CommandLine/ConfigFile) needs to be included "manually" in extension code
  • breaking changes
    • previous Client versions won't be able to communicate with Server properly
Assets 4

@wipe2238 wipe2238 released this Nov 8, 2018 · 218 commits to master since this release

FOnline and FOClassic are now fully open-source projects.

  • restored loading of worldsaves and characters created by FOnline r412, and possibly older revisions (depends which file format version is used)
    • support for loading legacy files will be kept only until first change of their format (eg. changing format of worldsave will disable loading legacy worldsave and characters)
    • wordsave/characters files format changes are not planned during migration stage
    • loading has been briefly tested against real server state (thanks Kilgore)
  • when checking server status, number of currently connected players is returned instead of characters ingame; this should give more realistic numbers, especially on servers which uses NoLogout maps
  • configuration files / command line rework
    • application settings are loaded from disk only once, and cached in memory
    • all command line options has been renamed to use --CamelCase format; those which does not follow this scheme (eg. --some-weird-option) are intended for internal use and might be changed/removed without notice
    • all command line options uses same names as in configuration files
    • Client
      • removed setting UserPass; character password can still be provided by using --UserPass in command line
      • renamed setting FonlineDataPath to DataPath
      • if setting requires changes at runtime (eg. invalid Language in config file), it's done in memory only, without updating config file on disk
      • all boolean settings are false by default
    • Mapper
      • settings moved to Mapper section
      • Client/Server settings can be overwritten in Mapper.cfg, see below
    • Server:
      • settings moved to Server section
      • added setting Languages containing list of all languages supported
        • if Languages list is empty/not set, Language_N is used; it will continue to work until further notice
        • if Languages list is non-empty, Language_N entries are ignored
        • see bottom of changelog for config file fragment
    • settings reading logic
      • application starts, config file is parsed, all settings are stored in memory as strings
      • Client/Mapper: detail section is handled; example for GL application using App as its main section:
        • detail section (AppGL) settings are copied into main section (App) overwriting old entries or creating new ones
        • detail section (AppGL) is removed from memory
        • unused section (AppDX) is removed from memory
      • Mapper
        • Client configuration is loaded and parsed using same logic as in previous point
        • Server configuration is loaded
        • note: as Mapper has been using multiple config files, non-Mapper settings can be now be added inside Mapper.cfg - when loading non-Mapper configuration, setting will not be overwritten during loading step, but they might be overwritten during sections merge step; consider following scenario:
          • Mapper.cfg contains [Client] -> ScreenWidth = 5000
          • Client.cfg contains [Client] -> ScreenWidth = 1000
          • Client.cfg contains [ClientDX] -> ScreenWidth = 2000
          • Mapper loads Mapper.cfg: ScreenWidth = 5000 is used
          • Mapper loads Client.cfg: ScreenWidth = 5000 is used, as such setting already exists
          • Client's detail section is merged into main section: ScreenWidth = 2000 is used
          • making sure that mapper uses correct values can be enforced by either using detail section(s) in Mapper.cfg for non-Mapper settings, or not using detail section(s) at all in Client/Server config files
      • settings in cache are applied to GameOptions
        • default value is applied
        • value in config file is applied, if present
        • value in comand line is applied, if present
        • (integers) value is checked agains allowed minimum/maximum; if it's out of range, default value is applied
      • additional configuration based on setings not stored in GameOptions
      • summary: detail sections, together with sections merging, should allows fine-tuning applications to individual developers needs without need for creating or editing multiple files between playing and developing sessions - that change is affecting Mapper the most, as it have very little own settings
    • main section name is the same as original filename, without any suffix
      • exception: Client still uses Game options, instead of Client, for compatibility with FOConfig; it will be changed in future version together with introducing config tool changes
    • detail sections names are always the same as applications original filenames
  • extensions
    • uint8 Critter::Access - const removed
  • scripts
    • added global define __VERSION, for compatibility with FOnline
    • int Critter::GetAccess() changed to uint8 Critter::GetAccess()
    • added void Critter::SetAccess( uint8 access ) for changing players access level
      • works for player characters only
      • player_getaccess() is not called
      • custom access level (access > ACCESS_ADMIN) are not allowed to use RunServerScript()
  • additional info
    • project has been integrated with AppVeyor service, and configured to prepare (pre)release packages after succesful compilation; that allows anyone interested to use development version of each and all applications without waiting for official releases - which, from this version, will use binaries compiled by external services
      https://ci.appveyor.com/project/rotators/foclassic/
      • binaries can be found under Image: Visual Studio 2013 -> Artifacts; despite of the image name, Visual Studio 2010 is used for compilation
      • Image: Visual Studio 2017 is used for checking if engine is ready for migration to VS2017; it most likely will take some time, so it can be safely ignored currently
      • binaries are available for six month since they have been created; see artifacts retention policy

Server.cfg fragment

# List of all supported languages separated by whitespace; if empty/unset, Language_0/1/... is used
# First language on list is used as default
# Length of each language name must be exactly four letters
Languages = engl russ
Assets 4
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.