-
Notifications
You must be signed in to change notification settings - Fork 1
/
README.txt
254 lines (178 loc) · 9.58 KB
/
README.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
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/VMFInstanceInserter
http://www.gyroshot.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