Repository files navigation

Quinstance 0.3.2
================
A wrapper around VMFInstanceInserter, enabling the use of func_instances in
Quake maps.
Requirements
Windows: .NET Framework version 4 or later, http://www.microsoft.com/net
Linux/OSX: Mono, http://www.mono-project.com
Additionally, your map must be in either the QuakeEd or Valve 220 formats, and
you'll need one or more FGDs describing the entities found therein. Any standard
Quake FGD you can find should work, but please let me know if you have trouble.
My thanks to James King, "Metapyziks", for both the development of VMFII in the
first place and for the flexible license terms that let me redistribute a copy
along with Quinstance. Learn more about James' project at its Github repository:
https://github.com/Metapyziks/VMFInstanceInserterhttp://www.gyroshot.com
robert.martens@gmail.com
@ItEndsWithTens
Usage
-----
quinstance.exe input [output] -d FGD [-c] [-k] [-t TMPDIR] [-r ENTITY,...]
Linux/OS X users will need to add 'mono ' to the head of their command line.
Parameters:
input
The input file to be processed. Must be a Quake .map in either classic
QuakeEd or Valve 220 formats.
output [optional]
The file to output after processing. Defaults to input.temp.map.
-d, --fgd
Specify one or more FGD files, as a comma separated string, to be
preprocessed and passed along to VMFII.
-c, --cleanup [optional]
Deletes 'output' and renames the associated BSP, PRT, LIN and PTS files.
-k, --keep [optional]
Keep the generated temporary files instead of deleting them.
-t, --tmpdir [optional]
Specify the directory in which to store temporary files. Defaults to the
user's temp directory.
-r, --remove_entities [optional]
A comma-separated list of entities to remove from all input files. Allows
placeholder geometry in editors which don't display instance contents.
Background
----------
The func_instance entity, as seen in the Source engine, is a type of prefab
widget. Build reusable components in one map file, then place instances of
them in others, with changes automatically propagated at compile time.
Uses for the entity range from things like duplicating common architectural
elements or complex entity configurations, to building structures on grid but
positioning them off grid while maintaining ease of editing (and that without
fear of slowly accumulating vertex creep), to having multiple mappers working on
a project concurrently. Instances aren't the solution to every mapping problem,
and have their own quirks, but when you need them they make life a lot easier.
Using instances
---------------
First, you'll need to make the func_instance entity available in your editor.
Included in the 'extra' directory are two files to help with this. Users of
J.A.C.K. can just add func_instance.fgd to the Game Data Files list in the
Tools|Options "Game Profiles" tab.
If you prefer TrenchBroom, you'll need to do a little extra work: at the bottom
of func_instance.fgd is a TB-ready entity definition. Copy the block into
TrenchBroom/Resources/Defs/Quake.fgd
and remove the leading '//' comment tokens. Restart TrenchBroom and you should
have a new entity in the context menu's Create Point Entity|Func section.
Finally, anyone using NetRadiant will be able to make use of func_instance.ent,
which can simply be copied into the q1.game/id1 directory of your installation.
Please do note that I haven't been able to extensively test the use of these
entity definitions in TrenchBroom or NetRadiant! Comments, suggestions, and of
course bug reports are always welcome.
Next is compiler setup.
Editor-specific instructions are beyond the scope of this readme, but the basic
idea is the same everywhere. Add a compile step, just before CSG, that runs the
Quinstance executable as follows:
quinstance.exe input.map --fgd "fgd1.fgd,fgd2.fgd,..."
The --fgd parameter needs to be a comma separated list of the FGDs your map
depends on, func_instance.fgd excluded (VMFII already knows what instances are
and how to process them).
In order to keep your original input file untouched, Quinstance collapses your
instances into a new intermediate file. It has the extension .temp.map instead
of .map, and it's this file that's used for the first stages of compilation.
Because of this, you'll need to change your compile process such that calls to
your CSG and/or BSP executable make reference to input.temp.map instead of just
input.map. Also, if your process expects a file to be produced as a result of
running BSP, it will also need to reference the .temp addition.
For example, in J.A.C.K., the command
$csg_exe $bspdir/$file.$ext
would become instead
$csg_exe $bspdir/$file.temp.$ext
The same holds true for $bsp_exe, with the extra concern of needing to change
the "Ensure File Post-exists" option to
$bspdir/$file.temp.prt
since the various files created by BSP haven't been renamed yet.
Add a second compile step, immediately after BSP, with the following:
quinstance.exe input.map --cleanup
As a result of the compiling the aforementioned intermediate file, BSP outputs a
group of files with ".temp" in their names. This step runs Quinstance in cleanup
mode, which deletes the intermediate .map file and renames the associated .bsp,
.prt, .lin, and .pts files as appropriate. The BSP log is the exception, and
will not be renamed, so QBSP executables that append to existing logs can do so,
and old build output won't be lost.
Finally is actually using the entities.
Place a func_instance in your map at whatever position and orientation you'd
like. Set the entity's Filename key to the relative path of another map,
containing geometry and/or entities, and see that after being run through
Quinstance and compiled, a copy of the other map's contents will have appeared
where the func_instance once was, offset from the entity by the same amount they
were offset from their map's origin.
No editors currently display instance contents, so in your viewports you'll see
only a point entity representing each func_instance. To make editing easier, you
can build simple placeholder geometry and tie it to a brush entity that then
gets removed by Quinstance.
A basic definition for such an entity, func_placeholder, is provided by the
included FGD and ENT files, but in some editors you can also manually change an
entity's classname. You can use any name you want, actually, as long as it's
unique and not shared with entities you want to keep. Then just add
--remove_entities func_placeholder
to your Quinstance command line and those will be removed from the final output.
func_instance
-------------
key - Display Name - type, default
Description.
targetname - Fixup Name - target_source, default "AutoInstanceX"
A name that will, depending on the fixup style, be prepended or appended to
any entities. If a Fixup Style is set, but a Fixup Name is not provided, an
automatically generated name will be used. Keep in mind that even with fixup
enabled and a name set, you can selectively avoid fixup by giving entities
names starting with the @ symbol.
file - Filename - string, default ""
A path, relative to the current map file's location, pointing to the map you'd
like to copy in.
fixup_style - Fixup Style - integer, default 0
The method by which entity names will be fixed up.
0 : Prefix
1 : Postfix
2 : None
replaceXX - Replace - string, default ""
A replacement parameter that takes the form of $variable value. For example,
set this field to $brightness 750 and any occurrence of $brightness inside the
Filename map will be replaced with 750 when the instances are collapsed.
Materials can also be replaced, with the # symbol. For example, setting a
replacement variable to #SKY1 DOPEFISH will retexture any surfaces in the
Filename map, replacing the classic purple sky with everyone's favorite goofy
fish. If you need more than ten replacements, don't forget you can turn off
SmartEdit (if applicable) and add keys manually: replace11, replace12, etc.
For more information about func_instances as they're implemented in the Source
engine, see https://developer.valvesoftware.com/wiki/Func_instance
func_placeholder
----------------
A brush entity for placeholder geometry, to make mapping easier in editors that
don't show func_instance contents. This classname is only a sample: Quinstance
will remove all entities matching its --remove_entities parameter, which to be
clear is a comma separated list.
For example, if you tied some temporary brushwork to func_placeholder, and want
to remove it, you could try this:
quinstance input.map --fgd quake.fgd --remove_entities func_placeholder
But now let's say you ignored func_placeholder, and defined your own by manually
editing a brush entity's classname. Let's say you chose func_greybox, for the
sake of demonstration. You also want to remove all grunts from your map for some
reason, and use a shorter command line as well. In that case, this would do:
quinstance input.map -f quake.fgd -r func_greybox,monster_army
Changes
-------
0.3.2 - September 19th, 2016
Fix overwriting input under some circumstances
0.3.1 - September 19th, 2016
Fix .texinfo cleanup
Add missing --remove_entities usage info
0.3.0 - September 18th, 2016
Fix FGD preprocessing for certain input
Add entity removal, to allow placeholder geometry
0.2.2 - August 16th, 2016
Improve configuration instructions
Update VMFII
0.2.1 - October 25th, 2015
Fix worldspawn handling for some maps
Fix calling VMFII in Linux/OSX
0.2.0 - October 23rd, 2015
Add QuakeEd format support
0.1.0 - October 19th, 2015
Initial release

About

A wrapper around VMFInstanceInserter, enabling the use of func_instances in Quake maps.

Topics

Resources

Stars

9 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Quinstance 0.3.2
================
A wrapper around VMFInstanceInserter, enabling the use of func_instances in
Quake maps.
Requirements
Windows: .NET Framework version 4 or later, http://www.microsoft.com/net
Linux/OSX: Mono, http://www.mono-project.com
Additionally, your map must be in either the QuakeEd or Valve 220 formats, and
you'll need one or more FGDs describing the entities found therein. Any standard
Quake FGD you can find should work, but please let me know if you have trouble.
My thanks to James King, "Metapyziks", for both the development of VMFII in the
first place and for the flexible license terms that let me redistribute a copy
along with Quinstance. Learn more about James' project at its Github repository:
https://github.com/Metapyziks/VMFInstanceInserterhttp://www.gyroshot.com
robert.martens@gmail.com
@ItEndsWithTens
Usage
-----
quinstance.exe input [output] -d FGD [-c] [-k] [-t TMPDIR] [-r ENTITY,...]
Linux/OS X users will need to add 'mono ' to the head of their command line.
Parameters:
input
The input file to be processed. Must be a Quake .map in either classic
QuakeEd or Valve 220 formats.
output [optional]
The file to output after processing. Defaults to input.temp.map.
-d, --fgd
Specify one or more FGD files, as a comma separated string, to be
preprocessed and passed along to VMFII.
-c, --cleanup [optional]
Deletes 'output' and renames the associated BSP, PRT, LIN and PTS files.
-k, --keep [optional]
Keep the generated temporary files instead of deleting them.
-t, --tmpdir [optional]
Specify the directory in which to store temporary files. Defaults to the
user's temp directory.
-r, --remove_entities [optional]
A comma-separated list of entities to remove from all input files. Allows
placeholder geometry in editors which don't display instance contents.
Background
----------
The func_instance entity, as seen in the Source engine, is a type of prefab
widget. Build reusable components in one map file, then place instances of
them in others, with changes automatically propagated at compile time.
Uses for the entity range from things like duplicating common architectural
elements or complex entity configurations, to building structures on grid but
positioning them off grid while maintaining ease of editing (and that without
fear of slowly accumulating vertex creep), to having multiple mappers working on
a project concurrently. Instances aren't the solution to every mapping problem,
and have their own quirks, but when you need them they make life a lot easier.
Using instances
---------------
First, you'll need to make the func_instance entity available in your editor.
Included in the 'extra' directory are two files to help with this. Users of
J.A.C.K. can just add func_instance.fgd to the Game Data Files list in the
Tools|Options "Game Profiles" tab.
If you prefer TrenchBroom, you'll need to do a little extra work: at the bottom
of func_instance.fgd is a TB-ready entity definition. Copy the block into
TrenchBroom/Resources/Defs/Quake.fgd
and remove the leading '//' comment tokens. Restart TrenchBroom and you should
have a new entity in the context menu's Create Point Entity|Func section.
Finally, anyone using NetRadiant will be able to make use of func_instance.ent,
which can simply be copied into the q1.game/id1 directory of your installation.
Please do note that I haven't been able to extensively test the use of these
entity definitions in TrenchBroom or NetRadiant! Comments, suggestions, and of
course bug reports are always welcome.
Next is compiler setup.
Editor-specific instructions are beyond the scope of this readme, but the basic
idea is the same everywhere. Add a compile step, just before CSG, that runs the
Quinstance executable as follows:
quinstance.exe input.map --fgd "fgd1.fgd,fgd2.fgd,..."
The --fgd parameter needs to be a comma separated list of the FGDs your map
depends on, func_instance.fgd excluded (VMFII already knows what instances are
and how to process them).
In order to keep your original input file untouched, Quinstance collapses your
instances into a new intermediate file. It has the extension .temp.map instead
of .map, and it's this file that's used for the first stages of compilation.
Because of this, you'll need to change your compile process such that calls to
your CSG and/or BSP executable make reference to input.temp.map instead of just
input.map. Also, if your process expects a file to be produced as a result of
running BSP, it will also need to reference the .temp addition.
For example, in J.A.C.K., the command
$csg_exe $bspdir/$file.$ext
would become instead
$csg_exe $bspdir/$file.temp.$ext
The same holds true for $bsp_exe, with the extra concern of needing to change
the "Ensure File Post-exists" option to
$bspdir/$file.temp.prt
since the various files created by BSP haven't been renamed yet.
Add a second compile step, immediately after BSP, with the following:
quinstance.exe input.map --cleanup
As a result of the compiling the aforementioned intermediate file, BSP outputs a
group of files with ".temp" in their names. This step runs Quinstance in cleanup
mode, which deletes the intermediate .map file and renames the associated .bsp,
.prt, .lin, and .pts files as appropriate. The BSP log is the exception, and
will not be renamed, so QBSP executables that append to existing logs can do so,
and old build output won't be lost.
Finally is actually using the entities.
Place a func_instance in your map at whatever position and orientation you'd
like. Set the entity's Filename key to the relative path of another map,
containing geometry and/or entities, and see that after being run through
Quinstance and compiled, a copy of the other map's contents will have appeared
where the func_instance once was, offset from the entity by the same amount they
were offset from their map's origin.
No editors currently display instance contents, so in your viewports you'll see
only a point entity representing each func_instance. To make editing easier, you
can build simple placeholder geometry and tie it to a brush entity that then
gets removed by Quinstance.
A basic definition for such an entity, func_placeholder, is provided by the
included FGD and ENT files, but in some editors you can also manually change an
entity's classname. You can use any name you want, actually, as long as it's
unique and not shared with entities you want to keep. Then just add
--remove_entities func_placeholder
to your Quinstance command line and those will be removed from the final output.
func_instance
-------------
key - Display Name - type, default
Description.
targetname - Fixup Name - target_source, default "AutoInstanceX"
A name that will, depending on the fixup style, be prepended or appended to
any entities. If a Fixup Style is set, but a Fixup Name is not provided, an
automatically generated name will be used. Keep in mind that even with fixup
enabled and a name set, you can selectively avoid fixup by giving entities
names starting with the @ symbol.
file - Filename - string, default ""
A path, relative to the current map file's location, pointing to the map you'd
like to copy in.
fixup_style - Fixup Style - integer, default 0
The method by which entity names will be fixed up.
0 : Prefix
1 : Postfix
2 : None
replaceXX - Replace - string, default ""
A replacement parameter that takes the form of $variable value. For example,
set this field to $brightness 750 and any occurrence of $brightness inside the
Filename map will be replaced with 750 when the instances are collapsed.
Materials can also be replaced, with the # symbol. For example, setting a
replacement variable to #SKY1 DOPEFISH will retexture any surfaces in the
Filename map, replacing the classic purple sky with everyone's favorite goofy
fish. If you need more than ten replacements, don't forget you can turn off
SmartEdit (if applicable) and add keys manually: replace11, replace12, etc.
For more information about func_instances as they're implemented in the Source
engine, see https://developer.valvesoftware.com/wiki/Func_instance
func_placeholder
----------------
A brush entity for placeholder geometry, to make mapping easier in editors that
don't show func_instance contents. This classname is only a sample: Quinstance
will remove all entities matching its --remove_entities parameter, which to be
clear is a comma separated list.
For example, if you tied some temporary brushwork to func_placeholder, and want
to remove it, you could try this:
quinstance input.map --fgd quake.fgd --remove_entities func_placeholder
But now let's say you ignored func_placeholder, and defined your own by manually
editing a brush entity's classname. Let's say you chose func_greybox, for the
sake of demonstration. You also want to remove all grunts from your map for some
reason, and use a shorter command line as well. In that case, this would do:
quinstance input.map -f quake.fgd -r func_greybox,monster_army
Changes
-------
0.3.2 - September 19th, 2016
Fix overwriting input under some circumstances
0.3.1 - September 19th, 2016
Fix .texinfo cleanup
Add missing --remove_entities usage info
0.3.0 - September 18th, 2016
Fix FGD preprocessing for certain input
Add entity removal, to allow placeholder geometry
0.2.2 - August 16th, 2016
Improve configuration instructions
Update VMFII
0.2.1 - October 25th, 2015
Fix worldspawn handling for some maps
Fix calling VMFII in Linux/OSX
0.2.0 - October 23rd, 2015
Add QuakeEd format support
0.1.0 - October 19th, 2015
Initial release

About

A wrapper around VMFInstanceInserter, enabling the use of func_instances in Quake maps.

Topics

Resources

Stars

9 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Quinstance 0.3.2
================
A wrapper around VMFInstanceInserter, enabling the use of func_instances in
Quake maps.
Requirements
Windows: .NET Framework version 4 or later, http://www.microsoft.com/net
Linux/OSX: Mono, http://www.mono-project.com
Additionally, your map must be in either the QuakeEd or Valve 220 formats, and
you'll need one or more FGDs describing the entities found therein. Any standard
Quake FGD you can find should work, but please let me know if you have trouble.
My thanks to James King, "Metapyziks", for both the development of VMFII in the
first place and for the flexible license terms that let me redistribute a copy
along with Quinstance. Learn more about James' project at its Github repository:
https://github.com/Metapyziks/VMFInstanceInserterhttp://www.gyroshot.com
robert.martens@gmail.com
@ItEndsWithTens
Usage
-----
quinstance.exe input [output] -d FGD [-c] [-k] [-t TMPDIR] [-r ENTITY,...]
Linux/OS X users will need to add 'mono ' to the head of their command line.
Parameters:
input
The input file to be processed. Must be a Quake .map in either classic
QuakeEd or Valve 220 formats.
output [optional]
The file to output after processing. Defaults to input.temp.map.
-d, --fgd
Specify one or more FGD files, as a comma separated string, to be
preprocessed and passed along to VMFII.
-c, --cleanup [optional]
Deletes 'output' and renames the associated BSP, PRT, LIN and PTS files.
-k, --keep [optional]
Keep the generated temporary files instead of deleting them.
-t, --tmpdir [optional]
Specify the directory in which to store temporary files. Defaults to the
user's temp directory.
-r, --remove_entities [optional]
A comma-separated list of entities to remove from all input files. Allows
placeholder geometry in editors which don't display instance contents.
Background
----------
The func_instance entity, as seen in the Source engine, is a type of prefab
widget. Build reusable components in one map file, then place instances of
them in others, with changes automatically propagated at compile time.
Uses for the entity range from things like duplicating common architectural
elements or complex entity configurations, to building structures on grid but
positioning them off grid while maintaining ease of editing (and that without
fear of slowly accumulating vertex creep), to having multiple mappers working on
a project concurrently. Instances aren't the solution to every mapping problem,
and have their own quirks, but when you need them they make life a lot easier.
Using instances
---------------
First, you'll need to make the func_instance entity available in your editor.
Included in the 'extra' directory are two files to help with this. Users of
J.A.C.K. can just add func_instance.fgd to the Game Data Files list in the
Tools|Options "Game Profiles" tab.
If you prefer TrenchBroom, you'll need to do a little extra work: at the bottom
of func_instance.fgd is a TB-ready entity definition. Copy the block into
TrenchBroom/Resources/Defs/Quake.fgd
and remove the leading '//' comment tokens. Restart TrenchBroom and you should
have a new entity in the context menu's Create Point Entity|Func section.
Finally, anyone using NetRadiant will be able to make use of func_instance.ent,
which can simply be copied into the q1.game/id1 directory of your installation.
Please do note that I haven't been able to extensively test the use of these
entity definitions in TrenchBroom or NetRadiant! Comments, suggestions, and of
course bug reports are always welcome.
Next is compiler setup.
Editor-specific instructions are beyond the scope of this readme, but the basic
idea is the same everywhere. Add a compile step, just before CSG, that runs the
Quinstance executable as follows:
quinstance.exe input.map --fgd "fgd1.fgd,fgd2.fgd,..."
The --fgd parameter needs to be a comma separated list of the FGDs your map
depends on, func_instance.fgd excluded (VMFII already knows what instances are
and how to process them).
In order to keep your original input file untouched, Quinstance collapses your
instances into a new intermediate file. It has the extension .temp.map instead
of .map, and it's this file that's used for the first stages of compilation.
Because of this, you'll need to change your compile process such that calls to
your CSG and/or BSP executable make reference to input.temp.map instead of just
input.map. Also, if your process expects a file to be produced as a result of
running BSP, it will also need to reference the .temp addition.
For example, in J.A.C.K., the command
$csg_exe $bspdir/$file.$ext
would become instead
$csg_exe $bspdir/$file.temp.$ext
The same holds true for $bsp_exe, with the extra concern of needing to change
the "Ensure File Post-exists" option to
$bspdir/$file.temp.prt
since the various files created by BSP haven't been renamed yet.
Add a second compile step, immediately after BSP, with the following:
quinstance.exe input.map --cleanup
As a result of the compiling the aforementioned intermediate file, BSP outputs a
group of files with ".temp" in their names. This step runs Quinstance in cleanup
mode, which deletes the intermediate .map file and renames the associated .bsp,
.prt, .lin, and .pts files as appropriate. The BSP log is the exception, and
will not be renamed, so QBSP executables that append to existing logs can do so,
and old build output won't be lost.
Finally is actually using the entities.
Place a func_instance in your map at whatever position and orientation you'd
like. Set the entity's Filename key to the relative path of another map,
containing geometry and/or entities, and see that after being run through
Quinstance and compiled, a copy of the other map's contents will have appeared
where the func_instance once was, offset from the entity by the same amount they
were offset from their map's origin.
No editors currently display instance contents, so in your viewports you'll see
only a point entity representing each func_instance. To make editing easier, you
can build simple placeholder geometry and tie it to a brush entity that then
gets removed by Quinstance.
A basic definition for such an entity, func_placeholder, is provided by the
included FGD and ENT files, but in some editors you can also manually change an
entity's classname. You can use any name you want, actually, as long as it's
unique and not shared with entities you want to keep. Then just add
--remove_entities func_placeholder
to your Quinstance command line and those will be removed from the final output.
func_instance
-------------
key - Display Name - type, default
Description.
targetname - Fixup Name - target_source, default "AutoInstanceX"
A name that will, depending on the fixup style, be prepended or appended to
any entities. If a Fixup Style is set, but a Fixup Name is not provided, an
automatically generated name will be used. Keep in mind that even with fixup
enabled and a name set, you can selectively avoid fixup by giving entities
names starting with the @ symbol.
file - Filename - string, default ""
A path, relative to the current map file's location, pointing to the map you'd
like to copy in.
fixup_style - Fixup Style - integer, default 0
The method by which entity names will be fixed up.
0 : Prefix
1 : Postfix
2 : None
replaceXX - Replace - string, default ""
A replacement parameter that takes the form of $variable value. For example,
set this field to $brightness 750 and any occurrence of $brightness inside the
Filename map will be replaced with 750 when the instances are collapsed.
Materials can also be replaced, with the # symbol. For example, setting a
replacement variable to #SKY1 DOPEFISH will retexture any surfaces in the
Filename map, replacing the classic purple sky with everyone's favorite goofy
fish. If you need more than ten replacements, don't forget you can turn off
SmartEdit (if applicable) and add keys manually: replace11, replace12, etc.
For more information about func_instances as they're implemented in the Source
engine, see https://developer.valvesoftware.com/wiki/Func_instance
func_placeholder
----------------
A brush entity for placeholder geometry, to make mapping easier in editors that
don't show func_instance contents. This classname is only a sample: Quinstance
will remove all entities matching its --remove_entities parameter, which to be
clear is a comma separated list.
For example, if you tied some temporary brushwork to func_placeholder, and want
to remove it, you could try this:
quinstance input.map --fgd quake.fgd --remove_entities func_placeholder
But now let's say you ignored func_placeholder, and defined your own by manually
editing a brush entity's classname. Let's say you chose func_greybox, for the
sake of demonstration. You also want to remove all grunts from your map for some
reason, and use a shorter command line as well. In that case, this would do:
quinstance input.map -f quake.fgd -r func_greybox,monster_army
Changes
-------
0.3.2 - September 19th, 2016
Fix overwriting input under some circumstances
0.3.1 - September 19th, 2016
Fix .texinfo cleanup
Add missing --remove_entities usage info
0.3.0 - September 18th, 2016
Fix FGD preprocessing for certain input
Add entity removal, to allow placeholder geometry
0.2.2 - August 16th, 2016
Improve configuration instructions
Update VMFII
0.2.1 - October 25th, 2015
Fix worldspawn handling for some maps
Fix calling VMFII in Linux/OSX
0.2.0 - October 23rd, 2015
Add QuakeEd format support
0.1.0 - October 19th, 2015
Initial release

About

A wrapper around VMFInstanceInserter, enabling the use of func_instances in Quake maps.

Topics

Resources

Stars

9 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Quinstance 0.3.2
================
A wrapper around VMFInstanceInserter, enabling the use of func_instances in
Quake maps.
Requirements
Windows: .NET Framework version 4 or later, http://www.microsoft.com/net
Linux/OSX: Mono, http://www.mono-project.com
Additionally, your map must be in either the QuakeEd or Valve 220 formats, and
you'll need one or more FGDs describing the entities found therein. Any standard
Quake FGD you can find should work, but please let me know if you have trouble.
My thanks to James King, "Metapyziks", for both the development of VMFII in the
first place and for the flexible license terms that let me redistribute a copy
along with Quinstance. Learn more about James' project at its Github repository:
https://github.com/Metapyziks/VMFInstanceInserterhttp://www.gyroshot.com
robert.martens@gmail.com
@ItEndsWithTens
Usage
-----
quinstance.exe input [output] -d FGD [-c] [-k] [-t TMPDIR] [-r ENTITY,...]
Linux/OS X users will need to add 'mono ' to the head of their command line.
Parameters:
input
The input file to be processed. Must be a Quake .map in either classic
QuakeEd or Valve 220 formats.
output [optional]
The file to output after processing. Defaults to input.temp.map.
-d, --fgd
Specify one or more FGD files, as a comma separated string, to be
preprocessed and passed along to VMFII.
-c, --cleanup [optional]
Deletes 'output' and renames the associated BSP, PRT, LIN and PTS files.
-k, --keep [optional]
Keep the generated temporary files instead of deleting them.
-t, --tmpdir [optional]
Specify the directory in which to store temporary files. Defaults to the
user's temp directory.
-r, --remove_entities [optional]
A comma-separated list of entities to remove from all input files. Allows
placeholder geometry in editors which don't display instance contents.
Background
----------
The func_instance entity, as seen in the Source engine, is a type of prefab
widget. Build reusable components in one map file, then place instances of
them in others, with changes automatically propagated at compile time.
Uses for the entity range from things like duplicating common architectural
elements or complex entity configurations, to building structures on grid but
positioning them off grid while maintaining ease of editing (and that without
fear of slowly accumulating vertex creep), to having multiple mappers working on
a project concurrently. Instances aren't the solution to every mapping problem,
and have their own quirks, but when you need them they make life a lot easier.
Using instances
---------------
First, you'll need to make the func_instance entity available in your editor.
Included in the 'extra' directory are two files to help with this. Users of
J.A.C.K. can just add func_instance.fgd to the Game Data Files list in the
Tools|Options "Game Profiles" tab.
If you prefer TrenchBroom, you'll need to do a little extra work: at the bottom
of func_instance.fgd is a TB-ready entity definition. Copy the block into
TrenchBroom/Resources/Defs/Quake.fgd
and remove the leading '//' comment tokens. Restart TrenchBroom and you should
have a new entity in the context menu's Create Point Entity|Func section.
Finally, anyone using NetRadiant will be able to make use of func_instance.ent,
which can simply be copied into the q1.game/id1 directory of your installation.
Please do note that I haven't been able to extensively test the use of these
entity definitions in TrenchBroom or NetRadiant! Comments, suggestions, and of
course bug reports are always welcome.
Next is compiler setup.
Editor-specific instructions are beyond the scope of this readme, but the basic
idea is the same everywhere. Add a compile step, just before CSG, that runs the
Quinstance executable as follows:
quinstance.exe input.map --fgd "fgd1.fgd,fgd2.fgd,..."
The --fgd parameter needs to be a comma separated list of the FGDs your map
depends on, func_instance.fgd excluded (VMFII already knows what instances are
and how to process them).
In order to keep your original input file untouched, Quinstance collapses your
instances into a new intermediate file. It has the extension .temp.map instead
of .map, and it's this file that's used for the first stages of compilation.
Because of this, you'll need to change your compile process such that calls to
your CSG and/or BSP executable make reference to input.temp.map instead of just
input.map. Also, if your process expects a file to be produced as a result of
running BSP, it will also need to reference the .temp addition.
For example, in J.A.C.K., the command
$csg_exe $bspdir/$file.$ext
would become instead
$csg_exe $bspdir/$file.temp.$ext
The same holds true for $bsp_exe, with the extra concern of needing to change
the "Ensure File Post-exists" option to
$bspdir/$file.temp.prt
since the various files created by BSP haven't been renamed yet.
Add a second compile step, immediately after BSP, with the following:
quinstance.exe input.map --cleanup
As a result of the compiling the aforementioned intermediate file, BSP outputs a
group of files with ".temp" in their names. This step runs Quinstance in cleanup
mode, which deletes the intermediate .map file and renames the associated .bsp,
.prt, .lin, and .pts files as appropriate. The BSP log is the exception, and
will not be renamed, so QBSP executables that append to existing logs can do so,
and old build output won't be lost.
Finally is actually using the entities.
Place a func_instance in your map at whatever position and orientation you'd
like. Set the entity's Filename key to the relative path of another map,
containing geometry and/or entities, and see that after being run through
Quinstance and compiled, a copy of the other map's contents will have appeared
where the func_instance once was, offset from the entity by the same amount they
were offset from their map's origin.
No editors currently display instance contents, so in your viewports you'll see
only a point entity representing each func_instance. To make editing easier, you
can build simple placeholder geometry and tie it to a brush entity that then
gets removed by Quinstance.
A basic definition for such an entity, func_placeholder, is provided by the
included FGD and ENT files, but in some editors you can also manually change an
entity's classname. You can use any name you want, actually, as long as it's
unique and not shared with entities you want to keep. Then just add
--remove_entities func_placeholder
to your Quinstance command line and those will be removed from the final output.
func_instance
-------------
key - Display Name - type, default
Description.
targetname - Fixup Name - target_source, default "AutoInstanceX"
A name that will, depending on the fixup style, be prepended or appended to
any entities. If a Fixup Style is set, but a Fixup Name is not provided, an
automatically generated name will be used. Keep in mind that even with fixup
enabled and a name set, you can selectively avoid fixup by giving entities
names starting with the @ symbol.
file - Filename - string, default ""
A path, relative to the current map file's location, pointing to the map you'd
like to copy in.
fixup_style - Fixup Style - integer, default 0
The method by which entity names will be fixed up.
0 : Prefix
1 : Postfix
2 : None
replaceXX - Replace - string, default ""
A replacement parameter that takes the form of $variable value. For example,
set this field to $brightness 750 and any occurrence of $brightness inside the
Filename map will be replaced with 750 when the instances are collapsed.
Materials can also be replaced, with the # symbol. For example, setting a
replacement variable to #SKY1 DOPEFISH will retexture any surfaces in the
Filename map, replacing the classic purple sky with everyone's favorite goofy
fish. If you need more than ten replacements, don't forget you can turn off
SmartEdit (if applicable) and add keys manually: replace11, replace12, etc.
For more information about func_instances as they're implemented in the Source
engine, see https://developer.valvesoftware.com/wiki/Func_instance
func_placeholder
----------------
A brush entity for placeholder geometry, to make mapping easier in editors that
don't show func_instance contents. This classname is only a sample: Quinstance
will remove all entities matching its --remove_entities parameter, which to be
clear is a comma separated list.
For example, if you tied some temporary brushwork to func_placeholder, and want
to remove it, you could try this:
quinstance input.map --fgd quake.fgd --remove_entities func_placeholder
But now let's say you ignored func_placeholder, and defined your own by manually
editing a brush entity's classname. Let's say you chose func_greybox, for the
sake of demonstration. You also want to remove all grunts from your map for some
reason, and use a shorter command line as well. In that case, this would do:
quinstance input.map -f quake.fgd -r func_greybox,monster_army
Changes
-------
0.3.2 - September 19th, 2016
Fix overwriting input under some circumstances
0.3.1 - September 19th, 2016
Fix .texinfo cleanup
Add missing --remove_entities usage info
0.3.0 - September 18th, 2016
Fix FGD preprocessing for certain input
Add entity removal, to allow placeholder geometry
0.2.2 - August 16th, 2016
Improve configuration instructions
Update VMFII
0.2.1 - October 25th, 2015
Fix worldspawn handling for some maps
Fix calling VMFII in Linux/OSX
0.2.0 - October 23rd, 2015
Add QuakeEd format support
0.1.0 - October 19th, 2015
Initial release

About

A wrapper around VMFInstanceInserter, enabling the use of func_instances in Quake maps.

Topics

Resources

Stars

9 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Quinstance 0.3.2
================
A wrapper around VMFInstanceInserter, enabling the use of func_instances in
Quake maps.
Requirements
Windows: .NET Framework version 4 or later, http://www.microsoft.com/net
Linux/OSX: Mono, http://www.mono-project.com
Additionally, your map must be in either the QuakeEd or Valve 220 formats, and
you'll need one or more FGDs describing the entities found therein. Any standard
Quake FGD you can find should work, but please let me know if you have trouble.
My thanks to James King, "Metapyziks", for both the development of VMFII in the
first place and for the flexible license terms that let me redistribute a copy
along with Quinstance. Learn more about James' project at its Github repository:
https://github.com/Metapyziks/VMFInstanceInserterhttp://www.gyroshot.com
robert.martens@gmail.com
@ItEndsWithTens
Usage
-----
quinstance.exe input [output] -d FGD [-c] [-k] [-t TMPDIR] [-r ENTITY,...]
Linux/OS X users will need to add 'mono ' to the head of their command line.
Parameters:
input
The input file to be processed. Must be a Quake .map in either classic
QuakeEd or Valve 220 formats.
output [optional]
The file to output after processing. Defaults to input.temp.map.
-d, --fgd
Specify one or more FGD files, as a comma separated string, to be
preprocessed and passed along to VMFII.
-c, --cleanup [optional]
Deletes 'output' and renames the associated BSP, PRT, LIN and PTS files.
-k, --keep [optional]
Keep the generated temporary files instead of deleting them.
-t, --tmpdir [optional]
Specify the directory in which to store temporary files. Defaults to the
user's temp directory.
-r, --remove_entities [optional]
A comma-separated list of entities to remove from all input files. Allows
placeholder geometry in editors which don't display instance contents.
Background
----------
The func_instance entity, as seen in the Source engine, is a type of prefab
widget. Build reusable components in one map file, then place instances of
them in others, with changes automatically propagated at compile time.
Uses for the entity range from things like duplicating common architectural
elements or complex entity configurations, to building structures on grid but
positioning them off grid while maintaining ease of editing (and that without
fear of slowly accumulating vertex creep), to having multiple mappers working on
a project concurrently. Instances aren't the solution to every mapping problem,
and have their own quirks, but when you need them they make life a lot easier.
Using instances
---------------
First, you'll need to make the func_instance entity available in your editor.
Included in the 'extra' directory are two files to help with this. Users of
J.A.C.K. can just add func_instance.fgd to the Game Data Files list in the
Tools|Options "Game Profiles" tab.
If you prefer TrenchBroom, you'll need to do a little extra work: at the bottom
of func_instance.fgd is a TB-ready entity definition. Copy the block into
TrenchBroom/Resources/Defs/Quake.fgd
and remove the leading '//' comment tokens. Restart TrenchBroom and you should
have a new entity in the context menu's Create Point Entity|Func section.
Finally, anyone using NetRadiant will be able to make use of func_instance.ent,
which can simply be copied into the q1.game/id1 directory of your installation.
Please do note that I haven't been able to extensively test the use of these
entity definitions in TrenchBroom or NetRadiant! Comments, suggestions, and of
course bug reports are always welcome.
Next is compiler setup.
Editor-specific instructions are beyond the scope of this readme, but the basic
idea is the same everywhere. Add a compile step, just before CSG, that runs the
Quinstance executable as follows:
quinstance.exe input.map --fgd "fgd1.fgd,fgd2.fgd,..."
The --fgd parameter needs to be a comma separated list of the FGDs your map
depends on, func_instance.fgd excluded (VMFII already knows what instances are
and how to process them).
In order to keep your original input file untouched, Quinstance collapses your
instances into a new intermediate file. It has the extension .temp.map instead
of .map, and it's this file that's used for the first stages of compilation.
Because of this, you'll need to change your compile process such that calls to
your CSG and/or BSP executable make reference to input.temp.map instead of just
input.map. Also, if your process expects a file to be produced as a result of
running BSP, it will also need to reference the .temp addition.
For example, in J.A.C.K., the command
$csg_exe $bspdir/$file.$ext
would become instead
$csg_exe $bspdir/$file.temp.$ext
The same holds true for $bsp_exe, with the extra concern of needing to change
the "Ensure File Post-exists" option to
$bspdir/$file.temp.prt
since the various files created by BSP haven't been renamed yet.
Add a second compile step, immediately after BSP, with the following:
quinstance.exe input.map --cleanup
As a result of the compiling the aforementioned intermediate file, BSP outputs a
group of files with ".temp" in their names. This step runs Quinstance in cleanup
mode, which deletes the intermediate .map file and renames the associated .bsp,
.prt, .lin, and .pts files as appropriate. The BSP log is the exception, and
will not be renamed, so QBSP executables that append to existing logs can do so,
and old build output won't be lost.
Finally is actually using the entities.
Place a func_instance in your map at whatever position and orientation you'd
like. Set the entity's Filename key to the relative path of another map,
containing geometry and/or entities, and see that after being run through
Quinstance and compiled, a copy of the other map's contents will have appeared
where the func_instance once was, offset from the entity by the same amount they
were offset from their map's origin.
No editors currently display instance contents, so in your viewports you'll see
only a point entity representing each func_instance. To make editing easier, you
can build simple placeholder geometry and tie it to a brush entity that then
gets removed by Quinstance.
A basic definition for such an entity, func_placeholder, is provided by the
included FGD and ENT files, but in some editors you can also manually change an
entity's classname. You can use any name you want, actually, as long as it's
unique and not shared with entities you want to keep. Then just add
--remove_entities func_placeholder
to your Quinstance command line and those will be removed from the final output.
func_instance
-------------
key - Display Name - type, default
Description.
targetname - Fixup Name - target_source, default "AutoInstanceX"
A name that will, depending on the fixup style, be prepended or appended to
any entities. If a Fixup Style is set, but a Fixup Name is not provided, an
automatically generated name will be used. Keep in mind that even with fixup
enabled and a name set, you can selectively avoid fixup by giving entities
names starting with the @ symbol.
file - Filename - string, default ""
A path, relative to the current map file's location, pointing to the map you'd
like to copy in.
fixup_style - Fixup Style - integer, default 0
The method by which entity names will be fixed up.
0 : Prefix
1 : Postfix
2 : None
replaceXX - Replace - string, default ""
A replacement parameter that takes the form of $variable value. For example,
set this field to $brightness 750 and any occurrence of $brightness inside the
Filename map will be replaced with 750 when the instances are collapsed.
Materials can also be replaced, with the # symbol. For example, setting a
replacement variable to #SKY1 DOPEFISH will retexture any surfaces in the
Filename map, replacing the classic purple sky with everyone's favorite goofy
fish. If you need more than ten replacements, don't forget you can turn off
SmartEdit (if applicable) and add keys manually: replace11, replace12, etc.
For more information about func_instances as they're implemented in the Source
engine, see https://developer.valvesoftware.com/wiki/Func_instance
func_placeholder
----------------
A brush entity for placeholder geometry, to make mapping easier in editors that
don't show func_instance contents. This classname is only a sample: Quinstance
will remove all entities matching its --remove_entities parameter, which to be
clear is a comma separated list.
For example, if you tied some temporary brushwork to func_placeholder, and want
to remove it, you could try this:
quinstance input.map --fgd quake.fgd --remove_entities func_placeholder
But now let's say you ignored func_placeholder, and defined your own by manually
editing a brush entity's classname. Let's say you chose func_greybox, for the
sake of demonstration. You also want to remove all grunts from your map for some
reason, and use a shorter command line as well. In that case, this would do:
quinstance input.map -f quake.fgd -r func_greybox,monster_army
Changes
-------
0.3.2 - September 19th, 2016
Fix overwriting input under some circumstances
0.3.1 - September 19th, 2016
Fix .texinfo cleanup
Add missing --remove_entities usage info
0.3.0 - September 18th, 2016
Fix FGD preprocessing for certain input
Add entity removal, to allow placeholder geometry
0.2.2 - August 16th, 2016
Improve configuration instructions
Update VMFII
0.2.1 - October 25th, 2015
Fix worldspawn handling for some maps
Fix calling VMFII in Linux/OSX
0.2.0 - October 23rd, 2015
Add QuakeEd format support
0.1.0 - October 19th, 2015
Initial release

About

A wrapper around VMFInstanceInserter, enabling the use of func_instances in Quake maps.

Topics

Resources

Stars

9 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Quinstance 0.3.2
================
A wrapper around VMFInstanceInserter, enabling the use of func_instances in
Quake maps.
Requirements
Windows: .NET Framework version 4 or later, http://www.microsoft.com/net
Linux/OSX: Mono, http://www.mono-project.com
Additionally, your map must be in either the QuakeEd or Valve 220 formats, and
you'll need one or more FGDs describing the entities found therein. Any standard
Quake FGD you can find should work, but please let me know if you have trouble.
My thanks to James King, "Metapyziks", for both the development of VMFII in the
first place and for the flexible license terms that let me redistribute a copy
along with Quinstance. Learn more about James' project at its Github repository:
https://github.com/Metapyziks/VMFInstanceInserterhttp://www.gyroshot.com
robert.martens@gmail.com
@ItEndsWithTens
Usage
-----
quinstance.exe input [output] -d FGD [-c] [-k] [-t TMPDIR] [-r ENTITY,...]
Linux/OS X users will need to add 'mono ' to the head of their command line.
Parameters:
input
The input file to be processed. Must be a Quake .map in either classic
QuakeEd or Valve 220 formats.
output [optional]
The file to output after processing. Defaults to input.temp.map.
-d, --fgd
Specify one or more FGD files, as a comma separated string, to be
preprocessed and passed along to VMFII.
-c, --cleanup [optional]
Deletes 'output' and renames the associated BSP, PRT, LIN and PTS files.
-k, --keep [optional]
Keep the generated temporary files instead of deleting them.
-t, --tmpdir [optional]
Specify the directory in which to store temporary files. Defaults to the
user's temp directory.
-r, --remove_entities [optional]
A comma-separated list of entities to remove from all input files. Allows
placeholder geometry in editors which don't display instance contents.
Background
----------
The func_instance entity, as seen in the Source engine, is a type of prefab
widget. Build reusable components in one map file, then place instances of
them in others, with changes automatically propagated at compile time.
Uses for the entity range from things like duplicating common architectural
elements or complex entity configurations, to building structures on grid but
positioning them off grid while maintaining ease of editing (and that without
fear of slowly accumulating vertex creep), to having multiple mappers working on
a project concurrently. Instances aren't the solution to every mapping problem,
and have their own quirks, but when you need them they make life a lot easier.
Using instances
---------------
First, you'll need to make the func_instance entity available in your editor.
Included in the 'extra' directory are two files to help with this. Users of
J.A.C.K. can just add func_instance.fgd to the Game Data Files list in the
Tools|Options "Game Profiles" tab.
If you prefer TrenchBroom, you'll need to do a little extra work: at the bottom
of func_instance.fgd is a TB-ready entity definition. Copy the block into
TrenchBroom/Resources/Defs/Quake.fgd
and remove the leading '//' comment tokens. Restart TrenchBroom and you should
have a new entity in the context menu's Create Point Entity|Func section.
Finally, anyone using NetRadiant will be able to make use of func_instance.ent,
which can simply be copied into the q1.game/id1 directory of your installation.
Please do note that I haven't been able to extensively test the use of these
entity definitions in TrenchBroom or NetRadiant! Comments, suggestions, and of
course bug reports are always welcome.
Next is compiler setup.
Editor-specific instructions are beyond the scope of this readme, but the basic
idea is the same everywhere. Add a compile step, just before CSG, that runs the
Quinstance executable as follows:
quinstance.exe input.map --fgd "fgd1.fgd,fgd2.fgd,..."
The --fgd parameter needs to be a comma separated list of the FGDs your map
depends on, func_instance.fgd excluded (VMFII already knows what instances are
and how to process them).
In order to keep your original input file untouched, Quinstance collapses your
instances into a new intermediate file. It has the extension .temp.map instead
of .map, and it's this file that's used for the first stages of compilation.
Because of this, you'll need to change your compile process such that calls to
your CSG and/or BSP executable make reference to input.temp.map instead of just
input.map. Also, if your process expects a file to be produced as a result of
running BSP, it will also need to reference the .temp addition.
For example, in J.A.C.K., the command
$csg_exe $bspdir/$file.$ext
would become instead
$csg_exe $bspdir/$file.temp.$ext
The same holds true for $bsp_exe, with the extra concern of needing to change
the "Ensure File Post-exists" option to
$bspdir/$file.temp.prt
since the various files created by BSP haven't been renamed yet.
Add a second compile step, immediately after BSP, with the following:
quinstance.exe input.map --cleanup
As a result of the compiling the aforementioned intermediate file, BSP outputs a
group of files with ".temp" in their names. This step runs Quinstance in cleanup
mode, which deletes the intermediate .map file and renames the associated .bsp,
.prt, .lin, and .pts files as appropriate. The BSP log is the exception, and
will not be renamed, so QBSP executables that append to existing logs can do so,
and old build output won't be lost.
Finally is actually using the entities.
Place a func_instance in your map at whatever position and orientation you'd
like. Set the entity's Filename key to the relative path of another map,
containing geometry and/or entities, and see that after being run through
Quinstance and compiled, a copy of the other map's contents will have appeared
where the func_instance once was, offset from the entity by the same amount they
were offset from their map's origin.
No editors currently display instance contents, so in your viewports you'll see
only a point entity representing each func_instance. To make editing easier, you
can build simple placeholder geometry and tie it to a brush entity that then
gets removed by Quinstance.
A basic definition for such an entity, func_placeholder, is provided by the
included FGD and ENT files, but in some editors you can also manually change an
entity's classname. You can use any name you want, actually, as long as it's
unique and not shared with entities you want to keep. Then just add
--remove_entities func_placeholder
to your Quinstance command line and those will be removed from the final output.
func_instance
-------------
key - Display Name - type, default
Description.
targetname - Fixup Name - target_source, default "AutoInstanceX"
A name that will, depending on the fixup style, be prepended or appended to
any entities. If a Fixup Style is set, but a Fixup Name is not provided, an
automatically generated name will be used. Keep in mind that even with fixup
enabled and a name set, you can selectively avoid fixup by giving entities
names starting with the @ symbol.
file - Filename - string, default ""
A path, relative to the current map file's location, pointing to the map you'd
like to copy in.
fixup_style - Fixup Style - integer, default 0
The method by which entity names will be fixed up.
0 : Prefix
1 : Postfix
2 : None
replaceXX - Replace - string, default ""
A replacement parameter that takes the form of $variable value. For example,
set this field to $brightness 750 and any occurrence of $brightness inside the
Filename map will be replaced with 750 when the instances are collapsed.
Materials can also be replaced, with the # symbol. For example, setting a
replacement variable to #SKY1 DOPEFISH will retexture any surfaces in the
Filename map, replacing the classic purple sky with everyone's favorite goofy
fish. If you need more than ten replacements, don't forget you can turn off
SmartEdit (if applicable) and add keys manually: replace11, replace12, etc.
For more information about func_instances as they're implemented in the Source
engine, see https://developer.valvesoftware.com/wiki/Func_instance
func_placeholder
----------------
A brush entity for placeholder geometry, to make mapping easier in editors that
don't show func_instance contents. This classname is only a sample: Quinstance
will remove all entities matching its --remove_entities parameter, which to be
clear is a comma separated list.
For example, if you tied some temporary brushwork to func_placeholder, and want
to remove it, you could try this:
quinstance input.map --fgd quake.fgd --remove_entities func_placeholder
But now let's say you ignored func_placeholder, and defined your own by manually
editing a brush entity's classname. Let's say you chose func_greybox, for the
sake of demonstration. You also want to remove all grunts from your map for some
reason, and use a shorter command line as well. In that case, this would do:
quinstance input.map -f quake.fgd -r func_greybox,monster_army
Changes
-------
0.3.2 - September 19th, 2016
Fix overwriting input under some circumstances
0.3.1 - September 19th, 2016
Fix .texinfo cleanup
Add missing --remove_entities usage info
0.3.0 - September 18th, 2016
Fix FGD preprocessing for certain input
Add entity removal, to allow placeholder geometry
0.2.2 - August 16th, 2016
Improve configuration instructions
Update VMFII
0.2.1 - October 25th, 2015
Fix worldspawn handling for some maps
Fix calling VMFII in Linux/OSX
0.2.0 - October 23rd, 2015
Add QuakeEd format support
0.1.0 - October 19th, 2015
Initial release

About

A wrapper around VMFInstanceInserter, enabling the use of func_instances in Quake maps.

Topics

Resources

Stars

9 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Quinstance 0.3.2
================
A wrapper around VMFInstanceInserter, enabling the use of func_instances in
Quake maps.
Requirements
Windows: .NET Framework version 4 or later, http://www.microsoft.com/net
Linux/OSX: Mono, http://www.mono-project.com
Additionally, your map must be in either the QuakeEd or Valve 220 formats, and
you'll need one or more FGDs describing the entities found therein. Any standard
Quake FGD you can find should work, but please let me know if you have trouble.
My thanks to James King, "Metapyziks", for both the development of VMFII in the
first place and for the flexible license terms that let me redistribute a copy
along with Quinstance. Learn more about James' project at its Github repository:
https://github.com/Metapyziks/VMFInstanceInserterhttp://www.gyroshot.com
robert.martens@gmail.com
@ItEndsWithTens
Usage
-----
quinstance.exe input [output] -d FGD [-c] [-k] [-t TMPDIR] [-r ENTITY,...]
Linux/OS X users will need to add 'mono ' to the head of their command line.
Parameters:
input
The input file to be processed. Must be a Quake .map in either classic
QuakeEd or Valve 220 formats.
output [optional]
The file to output after processing. Defaults to input.temp.map.
-d, --fgd
Specify one or more FGD files, as a comma separated string, to be
preprocessed and passed along to VMFII.
-c, --cleanup [optional]
Deletes 'output' and renames the associated BSP, PRT, LIN and PTS files.
-k, --keep [optional]
Keep the generated temporary files instead of deleting them.
-t, --tmpdir [optional]
Specify the directory in which to store temporary files. Defaults to the
user's temp directory.
-r, --remove_entities [optional]
A comma-separated list of entities to remove from all input files. Allows
placeholder geometry in editors which don't display instance contents.
Background
----------
The func_instance entity, as seen in the Source engine, is a type of prefab
widget. Build reusable components in one map file, then place instances of
them in others, with changes automatically propagated at compile time.
Uses for the entity range from things like duplicating common architectural
elements or complex entity configurations, to building structures on grid but
positioning them off grid while maintaining ease of editing (and that without
fear of slowly accumulating vertex creep), to having multiple mappers working on
a project concurrently. Instances aren't the solution to every mapping problem,
and have their own quirks, but when you need them they make life a lot easier.
Using instances
---------------
First, you'll need to make the func_instance entity available in your editor.
Included in the 'extra' directory are two files to help with this. Users of
J.A.C.K. can just add func_instance.fgd to the Game Data Files list in the
Tools|Options "Game Profiles" tab.
If you prefer TrenchBroom, you'll need to do a little extra work: at the bottom
of func_instance.fgd is a TB-ready entity definition. Copy the block into
TrenchBroom/Resources/Defs/Quake.fgd
and remove the leading '//' comment tokens. Restart TrenchBroom and you should
have a new entity in the context menu's Create Point Entity|Func section.
Finally, anyone using NetRadiant will be able to make use of func_instance.ent,
which can simply be copied into the q1.game/id1 directory of your installation.
Please do note that I haven't been able to extensively test the use of these
entity definitions in TrenchBroom or NetRadiant! Comments, suggestions, and of
course bug reports are always welcome.
Next is compiler setup.
Editor-specific instructions are beyond the scope of this readme, but the basic
idea is the same everywhere. Add a compile step, just before CSG, that runs the
Quinstance executable as follows:
quinstance.exe input.map --fgd "fgd1.fgd,fgd2.fgd,..."
The --fgd parameter needs to be a comma separated list of the FGDs your map
depends on, func_instance.fgd excluded (VMFII already knows what instances are
and how to process them).
In order to keep your original input file untouched, Quinstance collapses your
instances into a new intermediate file. It has the extension .temp.map instead
of .map, and it's this file that's used for the first stages of compilation.
Because of this, you'll need to change your compile process such that calls to
your CSG and/or BSP executable make reference to input.temp.map instead of just
input.map. Also, if your process expects a file to be produced as a result of
running BSP, it will also need to reference the .temp addition.
For example, in J.A.C.K., the command
$csg_exe $bspdir/$file.$ext
would become instead
$csg_exe $bspdir/$file.temp.$ext
The same holds true for $bsp_exe, with the extra concern of needing to change
the "Ensure File Post-exists" option to
$bspdir/$file.temp.prt
since the various files created by BSP haven't been renamed yet.
Add a second compile step, immediately after BSP, with the following:
quinstance.exe input.map --cleanup
As a result of the compiling the aforementioned intermediate file, BSP outputs a
group of files with ".temp" in their names. This step runs Quinstance in cleanup
mode, which deletes the intermediate .map file and renames the associated .bsp,
.prt, .lin, and .pts files as appropriate. The BSP log is the exception, and
will not be renamed, so QBSP executables that append to existing logs can do so,
and old build output won't be lost.
Finally is actually using the entities.
Place a func_instance in your map at whatever position and orientation you'd
like. Set the entity's Filename key to the relative path of another map,
containing geometry and/or entities, and see that after being run through
Quinstance and compiled, a copy of the other map's contents will have appeared
where the func_instance once was, offset from the entity by the same amount they
were offset from their map's origin.
No editors currently display instance contents, so in your viewports you'll see
only a point entity representing each func_instance. To make editing easier, you
can build simple placeholder geometry and tie it to a brush entity that then
gets removed by Quinstance.
A basic definition for such an entity, func_placeholder, is provided by the
included FGD and ENT files, but in some editors you can also manually change an
entity's classname. You can use any name you want, actually, as long as it's
unique and not shared with entities you want to keep. Then just add
--remove_entities func_placeholder
to your Quinstance command line and those will be removed from the final output.
func_instance
-------------
key - Display Name - type, default
Description.
targetname - Fixup Name - target_source, default "AutoInstanceX"
A name that will, depending on the fixup style, be prepended or appended to
any entities. If a Fixup Style is set, but a Fixup Name is not provided, an
automatically generated name will be used. Keep in mind that even with fixup
enabled and a name set, you can selectively avoid fixup by giving entities
names starting with the @ symbol.
file - Filename - string, default ""
A path, relative to the current map file's location, pointing to the map you'd
like to copy in.
fixup_style - Fixup Style - integer, default 0
The method by which entity names will be fixed up.
0 : Prefix
1 : Postfix
2 : None
replaceXX - Replace - string, default ""
A replacement parameter that takes the form of $variable value. For example,
set this field to $brightness 750 and any occurrence of $brightness inside the
Filename map will be replaced with 750 when the instances are collapsed.
Materials can also be replaced, with the # symbol. For example, setting a
replacement variable to #SKY1 DOPEFISH will retexture any surfaces in the
Filename map, replacing the classic purple sky with everyone's favorite goofy
fish. If you need more than ten replacements, don't forget you can turn off
SmartEdit (if applicable) and add keys manually: replace11, replace12, etc.
For more information about func_instances as they're implemented in the Source
engine, see https://developer.valvesoftware.com/wiki/Func_instance
func_placeholder
----------------
A brush entity for placeholder geometry, to make mapping easier in editors that
don't show func_instance contents. This classname is only a sample: Quinstance
will remove all entities matching its --remove_entities parameter, which to be
clear is a comma separated list.
For example, if you tied some temporary brushwork to func_placeholder, and want
to remove it, you could try this:
quinstance input.map --fgd quake.fgd --remove_entities func_placeholder
But now let's say you ignored func_placeholder, and defined your own by manually
editing a brush entity's classname. Let's say you chose func_greybox, for the
sake of demonstration. You also want to remove all grunts from your map for some
reason, and use a shorter command line as well. In that case, this would do:
quinstance input.map -f quake.fgd -r func_greybox,monster_army
Changes
-------
0.3.2 - September 19th, 2016
Fix overwriting input under some circumstances
0.3.1 - September 19th, 2016
Fix .texinfo cleanup
Add missing --remove_entities usage info
0.3.0 - September 18th, 2016
Fix FGD preprocessing for certain input
Add entity removal, to allow placeholder geometry
0.2.2 - August 16th, 2016
Improve configuration instructions
Update VMFII
0.2.1 - October 25th, 2015
Fix worldspawn handling for some maps
Fix calling VMFII in Linux/OSX
0.2.0 - October 23rd, 2015
Add QuakeEd format support
0.1.0 - October 19th, 2015
Initial release

About

A wrapper around VMFInstanceInserter, enabling the use of func_instances in Quake maps.

Topics

Resources

Stars

9 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Quinstance 0.3.2
================
A wrapper around VMFInstanceInserter, enabling the use of func_instances in
Quake maps.
Requirements
Windows: .NET Framework version 4 or later, http://www.microsoft.com/net
Linux/OSX: Mono, http://www.mono-project.com
Additionally, your map must be in either the QuakeEd or Valve 220 formats, and
you'll need one or more FGDs describing the entities found therein. Any standard
Quake FGD you can find should work, but please let me know if you have trouble.
My thanks to James King, "Metapyziks", for both the development of VMFII in the
first place and for the flexible license terms that let me redistribute a copy
along with Quinstance. Learn more about James' project at its Github repository:
https://github.com/Metapyziks/VMFInstanceInserterhttp://www.gyroshot.com
robert.martens@gmail.com
@ItEndsWithTens
Usage
-----
quinstance.exe input [output] -d FGD [-c] [-k] [-t TMPDIR] [-r ENTITY,...]
Linux/OS X users will need to add 'mono ' to the head of their command line.
Parameters:
input
The input file to be processed. Must be a Quake .map in either classic
QuakeEd or Valve 220 formats.
output [optional]
The file to output after processing. Defaults to input.temp.map.
-d, --fgd
Specify one or more FGD files, as a comma separated string, to be
preprocessed and passed along to VMFII.
-c, --cleanup [optional]
Deletes 'output' and renames the associated BSP, PRT, LIN and PTS files.
-k, --keep [optional]
Keep the generated temporary files instead of deleting them.
-t, --tmpdir [optional]
Specify the directory in which to store temporary files. Defaults to the
user's temp directory.
-r, --remove_entities [optional]
A comma-separated list of entities to remove from all input files. Allows
placeholder geometry in editors which don't display instance contents.
Background
----------
The func_instance entity, as seen in the Source engine, is a type of prefab
widget. Build reusable components in one map file, then place instances of
them in others, with changes automatically propagated at compile time.
Uses for the entity range from things like duplicating common architectural
elements or complex entity configurations, to building structures on grid but
positioning them off grid while maintaining ease of editing (and that without
fear of slowly accumulating vertex creep), to having multiple mappers working on
a project concurrently. Instances aren't the solution to every mapping problem,
and have their own quirks, but when you need them they make life a lot easier.
Using instances
---------------
First, you'll need to make the func_instance entity available in your editor.
Included in the 'extra' directory are two files to help with this. Users of
J.A.C.K. can just add func_instance.fgd to the Game Data Files list in the
Tools|Options "Game Profiles" tab.
If you prefer TrenchBroom, you'll need to do a little extra work: at the bottom
of func_instance.fgd is a TB-ready entity definition. Copy the block into
TrenchBroom/Resources/Defs/Quake.fgd
and remove the leading '//' comment tokens. Restart TrenchBroom and you should
have a new entity in the context menu's Create Point Entity|Func section.
Finally, anyone using NetRadiant will be able to make use of func_instance.ent,
which can simply be copied into the q1.game/id1 directory of your installation.
Please do note that I haven't been able to extensively test the use of these
entity definitions in TrenchBroom or NetRadiant! Comments, suggestions, and of
course bug reports are always welcome.
Next is compiler setup.
Editor-specific instructions are beyond the scope of this readme, but the basic
idea is the same everywhere. Add a compile step, just before CSG, that runs the
Quinstance executable as follows:
quinstance.exe input.map --fgd "fgd1.fgd,fgd2.fgd,..."
The --fgd parameter needs to be a comma separated list of the FGDs your map
depends on, func_instance.fgd excluded (VMFII already knows what instances are
and how to process them).
In order to keep your original input file untouched, Quinstance collapses your
instances into a new intermediate file. It has the extension .temp.map instead
of .map, and it's this file that's used for the first stages of compilation.
Because of this, you'll need to change your compile process such that calls to
your CSG and/or BSP executable make reference to input.temp.map instead of just
input.map. Also, if your process expects a file to be produced as a result of
running BSP, it will also need to reference the .temp addition.
For example, in J.A.C.K., the command
$csg_exe $bspdir/$file.$ext
would become instead
$csg_exe $bspdir/$file.temp.$ext
The same holds true for $bsp_exe, with the extra concern of needing to change
the "Ensure File Post-exists" option to
$bspdir/$file.temp.prt
since the various files created by BSP haven't been renamed yet.
Add a second compile step, immediately after BSP, with the following:
quinstance.exe input.map --cleanup
As a result of the compiling the aforementioned intermediate file, BSP outputs a
group of files with ".temp" in their names. This step runs Quinstance in cleanup
mode, which deletes the intermediate .map file and renames the associated .bsp,
.prt, .lin, and .pts files as appropriate. The BSP log is the exception, and
will not be renamed, so QBSP executables that append to existing logs can do so,
and old build output won't be lost.
Finally is actually using the entities.
Place a func_instance in your map at whatever position and orientation you'd
like. Set the entity's Filename key to the relative path of another map,
containing geometry and/or entities, and see that after being run through
Quinstance and compiled, a copy of the other map's contents will have appeared
where the func_instance once was, offset from the entity by the same amount they
were offset from their map's origin.
No editors currently display instance contents, so in your viewports you'll see
only a point entity representing each func_instance. To make editing easier, you
can build simple placeholder geometry and tie it to a brush entity that then
gets removed by Quinstance.
A basic definition for such an entity, func_placeholder, is provided by the
included FGD and ENT files, but in some editors you can also manually change an
entity's classname. You can use any name you want, actually, as long as it's
unique and not shared with entities you want to keep. Then just add
--remove_entities func_placeholder
to your Quinstance command line and those will be removed from the final output.
func_instance
-------------
key - Display Name - type, default
Description.
targetname - Fixup Name - target_source, default "AutoInstanceX"
A name that will, depending on the fixup style, be prepended or appended to
any entities. If a Fixup Style is set, but a Fixup Name is not provided, an
automatically generated name will be used. Keep in mind that even with fixup
enabled and a name set, you can selectively avoid fixup by giving entities
names starting with the @ symbol.
file - Filename - string, default ""
A path, relative to the current map file's location, pointing to the map you'd
like to copy in.
fixup_style - Fixup Style - integer, default 0
The method by which entity names will be fixed up.
0 : Prefix
1 : Postfix
2 : None
replaceXX - Replace - string, default ""
A replacement parameter that takes the form of $variable value. For example,
set this field to $brightness 750 and any occurrence of $brightness inside the
Filename map will be replaced with 750 when the instances are collapsed.
Materials can also be replaced, with the # symbol. For example, setting a
replacement variable to #SKY1 DOPEFISH will retexture any surfaces in the
Filename map, replacing the classic purple sky with everyone's favorite goofy
fish. If you need more than ten replacements, don't forget you can turn off
SmartEdit (if applicable) and add keys manually: replace11, replace12, etc.
For more information about func_instances as they're implemented in the Source
engine, see https://developer.valvesoftware.com/wiki/Func_instance
func_placeholder
----------------
A brush entity for placeholder geometry, to make mapping easier in editors that
don't show func_instance contents. This classname is only a sample: Quinstance
will remove all entities matching its --remove_entities parameter, which to be
clear is a comma separated list.
For example, if you tied some temporary brushwork to func_placeholder, and want
to remove it, you could try this:
quinstance input.map --fgd quake.fgd --remove_entities func_placeholder
But now let's say you ignored func_placeholder, and defined your own by manually
editing a brush entity's classname. Let's say you chose func_greybox, for the
sake of demonstration. You also want to remove all grunts from your map for some
reason, and use a shorter command line as well. In that case, this would do:
quinstance input.map -f quake.fgd -r func_greybox,monster_army
Changes
-------
0.3.2 - September 19th, 2016
Fix overwriting input under some circumstances
0.3.1 - September 19th, 2016
Fix .texinfo cleanup
Add missing --remove_entities usage info
0.3.0 - September 18th, 2016
Fix FGD preprocessing for certain input
Add entity removal, to allow placeholder geometry
0.2.2 - August 16th, 2016
Improve configuration instructions
Update VMFII
0.2.1 - October 25th, 2015
Fix worldspawn handling for some maps
Fix calling VMFII in Linux/OSX
0.2.0 - October 23rd, 2015
Add QuakeEd format support
0.1.0 - October 19th, 2015
Initial release

About

A wrapper around VMFInstanceInserter, enabling the use of func_instances in Quake maps.

Topics

Resources

Stars

9 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages