<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.fightorder.net/wiki/index.php?action=history&amp;feed=atom&amp;title=Lua_VFS</id>
	<title>Lua VFS - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.fightorder.net/wiki/index.php?action=history&amp;feed=atom&amp;title=Lua_VFS"/>
	<link rel="alternate" type="text/html" href="https://www.fightorder.net/wiki/index.php?title=Lua_VFS&amp;action=history"/>
	<updated>2026-04-21T04:07:44Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://www.fightorder.net/wiki/index.php?title=Lua_VFS&amp;diff=451&amp;oldid=prev</id>
		<title>Qrow: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://www.fightorder.net/wiki/index.php?title=Lua_VFS&amp;diff=451&amp;oldid=prev"/>
		<updated>2025-11-13T01:50:58Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 18:50, 12 November 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Qrow</name></author>
	</entry>
	<entry>
		<id>https://www.fightorder.net/wiki/index.php?title=Lua_VFS&amp;diff=450&amp;oldid=prev</id>
		<title>interwiki3&gt;Beherith: /* Files */</title>
		<link rel="alternate" type="text/html" href="https://www.fightorder.net/wiki/index.php?title=Lua_VFS&amp;diff=450&amp;oldid=prev"/>
		<updated>2022-08-08T09:53:38Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Files&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Engine_Development|Development]] &amp;lt; [[Lua_Scripting|Lua Scripting]] &amp;lt; {{FULLPAGENAME}}&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
Although Spring can access the filesystem directly (via os module) it is more common that you&lt;br /&gt;
would want to access files included with your game or Spring. Trouble is, most of these files are&lt;br /&gt;
compressed into archives (.sdz/.sd7) so random access would generally be a difficult procedure.&lt;br /&gt;
Fortunately, the Spring Lua system automatically provides access to mod and base files via the VFS module.&lt;br /&gt;
&lt;br /&gt;
The VFS module doesn&amp;#039;t simply open archives though. What it does is map your game files, game &lt;br /&gt;
dependencies and Spring content onto a virtual file tree. All archives start from the &amp;#039;roots&amp;#039; of the tree&lt;br /&gt;
and share the same virtual space, meaning that if two or more archives contain the same resource&lt;br /&gt;
file name the resources overlap and only one of the files will be retrieved. Overlapping directories&lt;br /&gt;
on the other hand are merged so the resulting virtual directory contains the contents of both. Here is&lt;br /&gt;
an example of how this works:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Archive 1 (games/mygame.sd7)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
textures&amp;lt;br&amp;gt;&lt;br /&gt;
|__ texture1.png&amp;lt;br&amp;gt;&lt;br /&gt;
models&amp;lt;br&amp;gt;&lt;br /&gt;
|__ model1.mdl&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Archive 2 (base/springcontent.sdz&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
textures&amp;lt;br&amp;gt;&lt;br /&gt;
|__ texture1.png&amp;lt;br&amp;gt;&lt;br /&gt;
|__ texture2.png&amp;lt;br&amp;gt;&lt;br /&gt;
|__ texture3.png&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
textures&amp;lt;br&amp;gt;&lt;br /&gt;
|__ texture1.png&amp;lt;br&amp;gt;&lt;br /&gt;
|__ texture2.png&amp;lt;br&amp;gt;&lt;br /&gt;
|__ texture3.png&amp;lt;br&amp;gt;&lt;br /&gt;
models&amp;lt;br&amp;gt;&lt;br /&gt;
|__ model1.mdl&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This raises the question: If both archives have a texture1.png then which texture1.png is retreived&lt;br /&gt;
via the VFS? The answer depends on the order the archives are loaded and the VFS mode (more on&lt;br /&gt;
modes below). Generally however, each archive loaded overrides any archives loaded&lt;br /&gt;
before it. The standard order of loading (from first to last) is:&lt;br /&gt;
&lt;br /&gt;
#  The main Spring/ game directory.&lt;br /&gt;
#  The automatic dependencies springcontent.sdz and maphelper.sdz.&lt;br /&gt;
#  Dependencies listed in your modinfo.lua (or modinfo.tdf), in the order listed.&lt;br /&gt;
#  Your mod archive.&lt;br /&gt;
&lt;br /&gt;
= Modes =&lt;br /&gt;
&lt;br /&gt;
These modes are constants passed to VFS.Include() and friends to control the order that archives are&lt;br /&gt;
searched for a given file. They are case-sensitive.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.RAW&amp;#039;&amp;#039;&amp;#039; Only select uncompressed files.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.MOD&amp;#039;&amp;#039;&amp;#039; {{new|104.0}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.MAP&amp;#039;&amp;#039;&amp;#039;  {{new|104.0}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.BASE&amp;#039;&amp;#039;&amp;#039;  {{new|104.0}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.MENU&amp;#039;&amp;#039;&amp;#039;  {{new|104.0}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.ZIP&amp;#039;&amp;#039;&amp;#039;   Only select compressed files (.sdz,.sd7).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.RAW_FIRST&amp;#039;&amp;#039;&amp;#039;  Try uncompressed files first, then compressed.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.ZIP_FIRST&amp;#039;&amp;#039;&amp;#039;  Try compressed files first, then uncompressed.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.RAW_ONLY&amp;#039;&amp;#039;&amp;#039; &amp;lt;font color=#55ee99&amp;gt;(Deprecated. Same as VFS.RAW)&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.ZIP_ONLY&amp;#039;&amp;#039;&amp;#039; &amp;lt;font color=#55ee99&amp;gt;(Deprecated. Same as VFS.ZIP.)&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also: https://github.com/spring/spring/blob/develop/rts/System/FileSystem/VFSModes.h&lt;br /&gt;
&lt;br /&gt;
= Files =&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.Include&amp;#039;&amp;#039;&amp;#039; &amp;lt;span class=note&amp;gt;(if enviroment=nil then use current one)&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( string &amp;quot;filename&amp;quot; [, table enviroment = nil [, number mode ] ] ) -&amp;gt;&lt;br /&gt;
&amp;lt;span class=note&amp;gt;The environment arg sets the global environment (see generic lua refs). In almost all cases, this should be left nil to preserve Springs default.  &lt;br /&gt;
&lt;br /&gt;
If nil then the env will be _G (global environment) If the optional env argument is provided any non-local variables and functions defined in&lt;br /&gt;
filename.lua are then accessable via env or _G. Vise-versa, any variables defined in env prior to&lt;br /&gt;
passing to VFS.Include are available to code in the included file. Code running in filename.lua will&lt;br /&gt;
see the contents of env in place of the normal _G environment. &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=note&amp;gt;This loads and compiles the lua code from a file in the VFS. The path is relative to the main Spring directory, e.g. VFS.Include(&amp;#039;LuaUI/includes/filename.lua&amp;#039;, nil, [vfsmode]) &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=note&amp;gt;VFS modes are single char strings and can be concatenated; doing specifies an order of preference for the mode (=location) from which to include files.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.LoadFile&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  ( string &amp;quot;filename&amp;quot; [, number mode ] ) -&amp;gt; nil | string data&lt;br /&gt;
&lt;br /&gt;
This is used for loading raw text data, as it will not execute the file, like VFS.Include does, just returns a string of the file contents. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.FileExists&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  ( string &amp;quot;filename&amp;quot; [, number mode ] ) -&amp;gt; boolean&lt;br /&gt;
&amp;lt;span class=note&amp;gt;example usage: if VFS.FileExists(&amp;quot;maps/Castles.sdz&amp;quot;) then ... end &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.DirList&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  ( string &amp;quot;directory&amp;quot; [, string &amp;quot;pattern&amp;quot; = &amp;quot;*&amp;quot;  [, number mode ] ] )&lt;br /&gt;
    -&amp;gt; { [1] = string filename, ... }&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.SubDirs&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  ( string &amp;quot;directory&amp;quot;, [, string &amp;quot;pattern&amp;quot; = &amp;quot;*&amp;quot;  [, number mode ] ] )&lt;br /&gt;
    -&amp;gt; { [1] = string subdir1, ... }&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.GetAvailableAIs&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  ( [ string gameName] [, string mapName ] )&lt;br /&gt;
    -&amp;gt; { ai1, ai2, ... }&lt;br /&gt;
&amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;Gets a list of all Spring AIs. The optional gameName and mapName parameters can be used to include game/map specific LuaAIs in the list.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.UseArchive&amp;#039;&amp;#039;&amp;#039; &amp;lt;span class=warning&amp;gt;unsynced only!&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( string &amp;quot;filename&amp;quot; [, number mode ], lua_function [, arg1 [,arg2 ]] )&lt;br /&gt;
    -&amp;gt; result1,result2,... of the given lua_function&lt;br /&gt;
&amp;lt;span class=note&amp;gt;Loads an archive &amp;#039;&amp;#039;&amp;#039;temporarely&amp;#039;&amp;#039;&amp;#039; in the VFS and then runs the given lua_function,&amp;lt;br&amp;gt;which can make usage of the files in the archive.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.MapArchive&amp;#039;&amp;#039;&amp;#039; &amp;lt;span class=warning&amp;gt;unsynced only!&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( string &amp;quot;filename/modname of archive&amp;quot;, [string checksum of archive] )&lt;br /&gt;
    -&amp;gt; bool&lt;br /&gt;
&amp;lt;span class=note&amp;gt;Permanently loads an archive into the VFS (to load zipped music collections etc.). &amp;lt;br&amp;gt; Does nothing if the archive is already loaded in the VFS (won&amp;#039;t reload even if there are &amp;lt;br&amp;gt; changes made to the archive). If checksum is given it checks if the to be loaded file is correct,&amp;lt;br&amp;gt;if not then it won&amp;#039;t load it and return false.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.UnmapArchive&amp;#039;&amp;#039;&amp;#039; &amp;lt;span class=warning&amp;gt;unsynced only! available in 98.0&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( string &amp;quot;filename/modname of archive&amp;quot;)&lt;br /&gt;
    -&amp;gt; bool&lt;br /&gt;
&amp;lt;span class=note&amp;gt;Removes an already loaded archive (see VFS.MapArchive)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.CompressFolder&amp;#039;&amp;#039;&amp;#039; &amp;lt;span class=warning&amp;gt;unsynced only!&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( string &amp;quot;folderPath&amp;quot; [, string &amp;quot;archiveType&amp;quot; ] [, string &amp;quot;compressedFilePath&amp;quot; ] &amp;lt;br&amp;gt; [, bool includeFolder ] [, number mode ] ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=note&amp;gt;Compresses the specified folder. &amp;lt;br&amp;gt;archiveType defines the compression type which can currently be only &amp;quot;zip&amp;quot; &amp;lt;br&amp;gt;includeFolder specifies whether the archive should have the specified folder as root (defaults to false) &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.GetFileAbsolutePath&amp;#039;&amp;#039;&amp;#039; &amp;lt;span class=warning&amp;gt;unsynced only! available in 105.0&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( string &amp;quot;filename&amp;quot; [, number mode ] ) -&amp;gt; absPath | nil&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.GetArchiveContainingFile&amp;#039;&amp;#039;&amp;#039; &amp;lt;span class=warning&amp;gt;unsynced only! available in 105.0&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( string &amp;quot;filename&amp;quot; [, number mode ] ) -&amp;gt; archiveNameWithVersion | nil&lt;br /&gt;
&lt;br /&gt;
= Generic hash =&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.CalculateHash&amp;#039;&amp;#039;&amp;#039; {{new|101.0}}&lt;br /&gt;
  ( string input, number hashType)&lt;br /&gt;
    -&amp;gt; string md5hash&lt;br /&gt;
&lt;br /&gt;
Calculates hash (in base64 form) of a given string (with md5 support initially). Note supplying 0 (MD5) as hashType is mandatory&lt;br /&gt;
&lt;br /&gt;
= Archives =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.GetMaps&amp;#039;&amp;#039;&amp;#039; {{new|98.0}}&lt;br /&gt;
  ( ) -&amp;gt; {&lt;br /&gt;
   [1] = string mapName, ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.GetGames&amp;#039;&amp;#039;&amp;#039; {{new|98.0}}&lt;br /&gt;
  ( ) -&amp;gt; {&lt;br /&gt;
   [1] = string gameName, ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.GetAllArchives&amp;#039;&amp;#039;&amp;#039; {{new|98.0}}&lt;br /&gt;
  ( ) -&amp;gt; {&lt;br /&gt;
   [1] = string archiveName, ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.GetLoadedArchives&amp;#039;&amp;#039;&amp;#039; {{new|105.0}}&lt;br /&gt;
  ( ) -&amp;gt; {&lt;br /&gt;
   [1] = string archiveName, ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.GetArchivePath&amp;#039;&amp;#039;&amp;#039; {{new|105.0}}&lt;br /&gt;
  ( string archiveName ) -&amp;gt; string archivePathOnDisk&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.GetNameFromRapidTag&amp;#039;&amp;#039;&amp;#039; {{new|105.0}}&lt;br /&gt;
  ( string rapidTag ) -&amp;gt; string archiveName&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.HasArchive&amp;#039;&amp;#039;&amp;#039; {{new|98.0}}&lt;br /&gt;
  ( string archiveName ) -&amp;gt; boolean&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.GetArchiveInfo&amp;#039;&amp;#039;&amp;#039; {{new|98.0}}&lt;br /&gt;
  ( string archiveName ) - &amp;gt;&lt;br /&gt;
     {        &lt;br /&gt;
          name = string,&lt;br /&gt;
          shortname = string,&lt;br /&gt;
          version = string,&lt;br /&gt;
          mutator = string,&lt;br /&gt;
          game = string,&lt;br /&gt;
          shortgame = string,&lt;br /&gt;
          description = string,&lt;br /&gt;
          mapfile = string,&lt;br /&gt;
          modtype = number,     &lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;modtype values:1=primary, 0=hidden, 3=map&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.GetArchiveChecksum&amp;#039;&amp;#039;&amp;#039; {{new|98.0}}&lt;br /&gt;
  ( string archiveName ) -&amp;gt; string singleArchiveChecksum, string completeArchiveChecksum&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.GetArchiveDependencies&amp;#039;&amp;#039;&amp;#039; {{new|98.0}}&lt;br /&gt;
  ( string archiveName ) -&amp;gt; { &lt;br /&gt;
    [1] = string archiveName, ... &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.GetArchiveReplaces&amp;#039;&amp;#039;&amp;#039; {{new|98.0}}&lt;br /&gt;
  ( string archiveName ) -&amp;gt; { &lt;br /&gt;
    [1] = string archiveName, ... &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.DownloadArchive&amp;#039;&amp;#039;&amp;#039; {{new|101.0}}&lt;br /&gt;
  ( name, category ) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
Category must be one of: map, game, engine.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.AbortDownload&amp;#039;&amp;#039;&amp;#039; {{new|104.0}}&lt;br /&gt;
  ( id ) -&amp;gt; boolean foundAndRemoved&lt;br /&gt;
&lt;br /&gt;
Additional functions are available as part of the [[Lua_UnsyncedCtrl#.28Virtual-.29FileSystem|unsynced ctrl]].&lt;br /&gt;
&lt;br /&gt;
= Packing =&lt;br /&gt;
&amp;lt;span class=&amp;quot;note&amp;quot; style=&amp;quot;font-size:110%&amp;quot;&amp;gt;The Pack- and Unpack-functions are used to convert numbers-&amp;gt;strings and strings-&amp;gt;numbers.&lt;br /&gt;
So you can read a binary file and then convert the received strings back to numbers and the other way around. Also you can use it in combination with the SendLuaXYZMsg-functions.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.PackU8&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.PackU16&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.PackU32&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.PackS8&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.PackS16&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.PackS32&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.PackF32&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=note&amp;gt;arguments are:&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.PackX( number arg1, number arg2, number arg3, ... )&amp;#039;&amp;#039;&amp;#039; -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.PackX( {[1]=number,[2]=number,..} )&amp;#039;&amp;#039;&amp;#039; -&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.UnpackU8&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.UnpackU16&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.UnpackU32&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.UnpackS8&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.UnpackS16&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.UnpackS32&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.UnpackF32&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=note&amp;gt;arguments are:&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.UnpackX( string &amp;quot;binary&amp;quot; [, number position = 1] [, number count] )&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
  -&amp;gt; number | table { [1]=number,[2]=number,.. }&lt;br /&gt;
&lt;br /&gt;
= Zlib =&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.ZlibCompress&amp;#039;&amp;#039;&amp;#039; &amp;lt;span class=warning&amp;gt;unsynced only!&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( string &amp;quot;uncompressedStr&amp;quot; )&lt;br /&gt;
    -&amp;gt; nil | string &amp;quot;compressedStr&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;VFS.ZlibDecompress&amp;#039;&amp;#039;&amp;#039; &amp;lt;span class=note&amp;gt;available in synced, too!&amp;lt;/span&amp;gt;&lt;br /&gt;
  ( string &amp;quot;compressedStr&amp;quot; [, number uncompressed size = 65500] )&lt;br /&gt;
    -&amp;gt; nil | string &amp;quot;uncompressedStr&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[category: Lua]]&lt;/div&gt;</summary>
		<author><name>interwiki3&gt;Beherith</name></author>
	</entry>
</feed>