Misplaced Pages

MexScript

Article snapshot taken from Wikipedia with creative commons attribution-sharealike license. Give it a read and then ask your questions in the chat. We can research this topic together.
(Redirected from QuickBMS)
This article uses bare URLs, which are uninformative and vulnerable to link rot. Please consider converting them to full citations to ensure the article remains verifiable and maintains a consistent citation style. Several templates and tools are available to assist in formatting, such as reFill (documentation) and Citation bot (documentation). (August 2022) (Learn how and when to remove this message)
MexScript
Paradigmdomain-specific:functional:structured:end-user
Designed byMike Zuurman
DeveloperMike Zuurman
First appeared1997
Typing disciplinedynamic
Major implementations
MultiEx Commander, QuickBMS, others

MexScript is a multi-paradigm computer scripting language used in a number of game resource archive file handlers. It was originally created for the 16-bit command-line tool multiex, and later 32-bit versions of MultiEx Commander. It is a script that enables the end user to have the interpreting program perform a number of tasks needed to access file contents, as well as to replace file contents. The MexScript has since become one of the standards to process game archives, as is indicated by the implementation of the script (also referred to as multiex, MexCom3, BMS) in similar programs, such as Dragon UNpack, Game Extractor, FusePAK, and the more recent dialect QuickBMS.

History

MexScript was created in 1997 for multiex by Mike Zuurman and fed to the tool using .INI files. The script was improved upon in later releases of MultiEx Commander. The name stems from the abbreviation of multiex to 'mex', though it is also referred to as Binary MultiEx Script (BMS) which in essence is a compiled version of MexScript. MexScript is interpreted by a Dynamic-link library called "multiex.dll" for the Windows version of MultiEx Commander, and a public version was released on the 24th of July 2003.

Implementations

Besides MultiEx Commander, the MexScript has been implemented in a number of other applications. The multiex Dynamic-link library was used after initial release in a similar game archive file handler called Dragon UNpack. The scripting language itself has been implemented in the linux tool Fusepak and the Java application Game Extractor. A script exists to convert MexScript into Python for OpenMEX. There is also a dialect of MexScript/BMS called QuickBMS, that first appeared on the Xentax Foundation's Game Research Forum on April 16, 2009.

Design

MexScript is a domain specific, structured functional scripting language designed for the end-user. The primary domain is the processes required to handle game resource archive formats (GRAF). GRAF is a term first coined in November 2003. The purpose of writing in the MexScript scripting language is to manipulate the contents of GRAs in order to MOD a computer game.

Script

Extensive descriptions of MexScript are found on the web sites of various implementations, most notably MultiEx Commander and QuickBMS.

The last release of the 16-bit implementation in 1998 of MultiEx Commander featured statements and commands as follows:

ID, EVENTS, NOFILENAMES, GetLong, FlipLong, GetInt, GetString, WriteLong, GetDString, GetNullString, StrCReplace, StrEReplace, LOOP, ENDLOOP, SavePos, GoTo, SET, SETFILECNT, ADD, SUBST, SETBYTESREAD, MULTIPLY, UP, DOWN, PROMPTUSER, ExtractFILE, SETPATH, FindFileID, Case, SeparateHeader.

Later dialects as implemented by MultiEx Commander or QuickBMS offer more functionality.

Data

Depending on the dialect or original implementation, the data types can differ substantially. MexScript for MultiEx Commander has the following:

  • Long --> 32-bit value (4 bytes, Little endian)
  • Int --> 16-bit value (2 bytes, Little endian)
  • Byte --> 8-bit value (1 byte)
  • ThreeByte --> 24-bit value (three bytes, Little endian)
  • String --> null-terminated string of characters (a string ending with a 0 byte)

Scoping

Variables do not have to be declared before use; their scope is then global, except when a variable that has not been used before is involved in some kind of calculation. In such a case it is declared using a SET <variable> statement. All variables can be changed at run-time, allowing for self-modifying code.

Output

The scripting language typically outputs a list of files contained in a game resource archive, along with the offsets and sizes, along with information on their name and putative compression. This is done in 32-bit MultiEx Commander and other implementations using the Log statement, or CLog statement.

Control structure commands

MexScript provides several common control structures.

  • ifelse test
  • do-while condition
  • for-next loops

Recursion is MexScript's preferred processing paradigm.

I/O

Output of the original multiex.exe was either extraction or importation of files contained in archives. The 32-bit implementation would output a list of files contained in the processed archive, along with information on their position, size, name and compression type. This list would then be fed to MultiEx Commander, or similar tools.

Syntax

In the original 16-bit version, commands were to be written on one line, but later versions allowed more. Anything in a line following the hash symbol # is ignored, allowing the coder to insert comments. The QuickBMS dialect also supports C-style (/* ... */) and C++-style (//) comments. Each line ends with a semicolon ;, though it is not obligatory in many dialects.

References

  1. ^ "MexScript - XentaxWiki".
  2. "Dragon UnPACKer • Developers Area - ElberethZone".
  3. http://www.watto.org/extract/info.html
  4. "Fusepak :: BMS".
  5. "Luigi Auriemma".
  6. http://www.gamers.org/pub/idgames2/utils/bsp_pak_tools/mcmex1_9.txt
  7. "MultiEx v1.6 « Homo universalis". www.zuurman.net. Archived from the original on 2018-08-21.
  8. "GIF Extractor [Archive] - The Horror Is Alive". www.the-horror.com. Archived from the original on 2016-03-04.
  9. http://trac.assembla.com/Da_FileServer_Projects/BinaryMapper
  10. "Planet Quake - News, Screenshots, Previews, Reviews, Guides". Archived from the original on 2013-10-03. Retrieved 2012-06-29.
  11. "Dragon UnPACKer • Developers Area - ElberethZone".
  12. "Fusepak :: BMS".
  13. http://www.watto.org/extract/info.html
  14. "CVS Info for project openmex".
  15. "OpenMex". 27 February 2013.
  16. "Files extractors scripting - XeNTaX".
  17. "XeNTaX - OpenGRAF". www.xentax.com. Archived from the original on 2 December 2003. Retrieved 13 January 2022.
  18. ^ Luigi Auriemma. "QuickBMS".
  19. "XeNTaX - Login".

External links

Categories: