Boom compatibility and portability
Two questions, one topic:
Is it possible to make Doomsday work properly in an USB stick (and changing folders as the user sees fit, without giving troubles)?
Is XG scripts a reliable way to open doors for Boom compatibility in Doomsday (so all one would need to activate Boom compatibility, is just loading it as a WAD file or something)? We would need a Boom specific reference for all sorts of lines it uses, though.
EDIT: I will dig through Doom Builder files to list Boom's exclusive lines, sectors and things types. The source is Boom.cfg.
Boom's thing types
Boom things' flags
Boom extended linedef types
Boom's Linedef flag
The major issue I found, is that Boom's generalized linedef types uses a Quake-styled dmflags scheme, for every category/flag you change, it adds a certain value to the category's number. Here is the raw data, hopefully it is clear enough.
Normal
Floors
Ceilings
Doors
Locked Doors
Lifts
Stairs
Crushers
The same rule applies for generalized sector types, except that there are no categories here, value may go up to 1009 (correct me if I am wrong):
Is it possible to make Doomsday work properly in an USB stick (and changing folders as the user sees fit, without giving troubles)?
Is XG scripts a reliable way to open doors for Boom compatibility in Doomsday (so all one would need to activate Boom compatibility, is just loading it as a WAD file or something)? We would need a Boom specific reference for all sorts of lines it uses, though.
EDIT: I will dig through Doom Builder files to list Boom's exclusive lines, sectors and things types. The source is Boom.cfg.
Boom's thing types
5001 = "Pusher";
5002 = "Puller";
Boom things' flags
32 = "Not Deathmatch";
64 = "Not Cooperative";
Boom extended linedef types
142 = "W1 Floor Raise by 512";
143 = "W1 Lift Raise by 24 (changes texture)";
144 = "W1 Lift Raise by 24 (remove effect)";
145 = "W1 Ceiling Lower to Floor (fast)";
146 = "W1 Donut Raise";
147 = "WR Floor Raise by 512";
148 = "WR Lift Raise by 24 (changes texture)";
149 = "WR Lift Raise by 24 (remove effect)";
150 = "WR Crusher Start (silent)";
151 = "WR Ceiling Raise to Highest Ceiling";
152 = "WR Ceiling Lower to Floor (fast)";
153 = "W1 Change Texture And Effect";
154 = "WR Change Texture And Effect";
155 = "WR Donut Raise";
156 = "WR Light Start Blinking";
157 = "WR Light Change to Darkest";
158 = "S1 Floor Raise by Shortest Lower Texture";
159 = "S1 Floor Lower to Lowest Floor";
160 = "S1 Floor Raise by 24 (changes texture and effect)";
161 = "S1 Floor Raise by 24";
162 = "S1 Lift Perpetual Lowest and Highest Floors";
163 = "S1 Lift Stop";
164 = "S1 Crusher Start (fast)";
165 = "S1 Crusher Start (silent)";
166 = "S1 Ceiling Raise to Highest Ceiling";
167 = "S1 Ceiling Lower to 8 Above Floor";
168 = "S1 Crusher Stop";
169 = "S1 Light Change to Brightest";
170 = "S1 Light Change to 35";
171 = "S1 Light Change to 255";
172 = "S1 Light Start Blinking";
173 = "S1 Light Change to Darkest";
174 = "S1 Teleport (also monsters)";
175 = "S1 Door Close Wait Open (30 seconds)";
176 = "SR Floor Raise by Shortest Lower Texture";
177 = "SR Floor Lower to Lowest Floor";
178 = "SR Floor Raise by 512";
179 = "SR Floor Raise by 24 (changes texture and effect)";
180 = "SR Floor Raise by 24";
181 = "SR Lift Perpetual Lowest and Highest Floors";
182 = "SR Lift Stop";
183 = "SR Crusher Start (fast)";
184 = "SR Crusher Start";
185 = "SR Crusher Start (silent)";
186 = "SR Ceiling Raise to Highest Ceiling";
187 = "SR Ceiling Lower to 8 Above Floor";
188 = "SR Crusher Stop";
189 = "S1 Change Texture And Effect";
190 = "SR Change Texture And Effect";
191 = "SR Donut Raise";
192 = "SR Light Change to Brightest";
193 = "SR Light Start Blinking";
194 = "SR Light Change to Darkest";
195 = "SR Teleport (also monsters)";
196 = "SR Door Close Wait Open (30 seconds)";
197 = "G1 Exit Level";
198 = "G1 Exit Level (goes to secret level)";
199 = "W1 Ceiling Lower to Lowest Ceiling";
200 = "W1 Ceiling Lower to Highest Floor";
201 = "WR Ceiling Lower to Lowest Ceiling";
202 = "WR Ceiling Lower to Highest Floor";
203 = "S1 Ceiling Lower to Lowest Ceiling";
204 = "S1 Ceiling Lower to Highest Floor";
205 = "SR Ceiling Lower to Lowest Ceiling";
206 = "SR Ceiling Lower to Highest Floor";
207 = "W1 Teleport (also monsters, silent, same angle)";
208 = "WR Teleport (also monsters, silent, same angle)";
209 = "S1 Teleport (also monsters, silent, same angle)";
210 = "SR Teleport (also monsters, silent, same angle)";
211 = "SR Lift Raise to Ceiling (instantly)";
212 = "WR Lift Raise to Ceiling (instantly)";
213 = " Floor Change Brightness to this Brightness";
214 = " Scroll Ceiling Accelerates when Sector Changes Height";
215 = " Scroll Floor Accelerates when Sector Changes Height";
216 = " Scroll Things Accelerates when Sector Changes Height";
217 = " Scroll Floor/Things Accelerates when Sector Changes Height";
218 = " Scroll Wall Accelerates when Sector Changes Height";
219 = "W1 Floor Lower to Nearest Floor";
220 = "WR Floor Lower to Nearest Floor";
221 = "S1 Floor Lower to Nearest Floor";
222 = "SR Floor Lower to Nearest Floor";
223 = " Friction Tagged Sector: Drag < 100, Slide > 100";
224 = " Wind according to Line Vector";
225 = " Current according to Line Vector";
226 = " Wind/Current by Push/Pull Thing In Sector";
227 = "W1 Lift Raise to Next Highest Floor (fast)";
228 = "WR Lift Raise to Next Highest Floor (fast)";
229 = "S1 Lift Raise to Next Highest Floor (fast)";
230 = "SR Lift Raise to Next Highest Floor (fast)";
231 = "W1 Lift Lower to Next Lowest Floor (fast)";
232 = "WR Lift Lower to Next Lowest Floor (fast)";
233 = "S1 Lift Lower to Next Lowest Floor (fast)";
234 = "SR Lift Lower to Next Lowest Floor (fast)";
235 = "W1 Lift Move to Same Floor Height (fast)";
236 = "WR Lift Move to Same Floor Height (fast)";
237 = "S1 Lift Move to Same Floor Height (fast)";
238 = "SR Lift Move to Same Floor Height (fast)";
239 = "W1 Change Texture and Effect to Nearest";
240 = "WR Change Texture and Effect to Nearest";
241 = "S1 Change Texture and Effect to Nearest";
242 = " Create Fake Ceiling and Floor";
243 = "W1 Teleport to Line With Same Tag (silent, same angle)";
244 = "WR Teleport to Line With Same Tag (silent, same angle)";
245 = " Scroll Ceiling when Sector Changes Height";
246 = " Scroll Floor when Sector Changes Height";
247 = " Scroll Move Things when Sector Changes Height";
248 = " Scroll Floor/Move Things when Sector Changes Height";
249 = " Scroll Wall when Sector Changes Height";
250 = " Scroll Ceiling according to Line Vector";
251 = " Scroll Floor according to Line Vector";
252 = " Scroll Move Things according to Line Vector";
253 = " Scroll Floor, Move Things";
254 = " Scroll Wall according to Line Vector";
255 = " Scroll Wall using Sidedef Offsets";
256 = "WR Stairs Raise by 8";
257 = "WR Stairs Raise by 16 (fast)";
258 = "SR Stairs Raise by 8";
259 = "SR Stairs Raise by 16 (fast)";
260 = " Translucent";
261 = " Ceiling Brightness to this Brightness";
262 = "W1 Teleport to Line With Same Tag (silent, reversed angle)";
263 = "WR Teleport to Line With Same Tag (silent, reversed angle)";
264 = "W1 Teleport to Line With Same Tag (also monsters, silent, reversed angle)";
265 = "WR Teleport to Line With Same Tag (also monsters, reversed angle)";
266 = "W1 Teleport to Line With Same Tag (monsters only, silent)";
267 = "WR Teleport to Line With Same Tag (monsters only, silent)";
268 = "W1 Teleport (monsters only, silent)";
269 = "WR Teleport (monsters only, silent)";
271 = " Transfer Sky Texture to Tagged Sectors";
272 = " Transfer Sky Texture to Tagged Sectors (flipped)";
Boom's Linedef flag
512 = "PassThru";
The major issue I found, is that Boom's generalized linedef types uses a Quake-styled dmflags scheme, for every category/flag you change, it adds a certain value to the category's number. Here is the raw data, hopefully it is clear enough.
Normal
normal
{
title = "Normal";
offset = 0;
length = 0;
}
Floors
floors
{
title = "Floor";
offset = 24576; // category number when all flags are zero
length = 8192; // goes up to 24576 + 8192 = 32768.
trigger
{
0 = "Walk Over Once";
1 = "Walk Over Repeatable";
2 = "Switch Once";
3 = "Switch Repeatable";
4 = "Gunfire Once";
5 = "Gunfire Repeatable";
6 = "Door Once";
7 = "Door Repeatable";
}
direction
{
0 = "Down";
64 = "Up";
}
target
{
0 = "Highest Adjacent Floor";
128 = "Lowest Adjacent Floor";
256 = "Next Adjacent Floor";
384 = "Lowest Adjacent Ceiling";
512 = "Ceiling";
640 = "Shortest Lower Texture";
768 = "24 Map Pixels (relative)";
896 = "32 Map Pixels (relative)";
}
speed
{
0 = "Slow";
8 = "Normal";
16 = "Fast";
24 = "Turbo";
}
model
{
0 = "Trigger";
32 = "Numeric";
}
change
{
0 = "None";
1024 = "Change Texture and Remove Effect";
2048 = "Change Texture Only";
3072 = "Change Texture and Effect";
}
crusher
{
0 = "No";
4096 = "Yes";
}
}
Ceilings
ceilings
{
title = "Ceiling";
offset = 16384;
length = 8192;
trigger
{
0 = "Walk Over Once";
1 = "Walk Over Repeatable";
2 = "Switch Once";
3 = "Switch Repeatable";
4 = "Gunfire Once";
5 = "Gunfire Repeatable";
6 = "Door Once";
7 = "Door Repeatable";
}
direction
{
0 = "Down";
64 = "Up";
}
target
{
0 = "Highest Adjacent Ceiling";
128 = "Lowest Adjacent Ceiling";
256 = "Next Adjacent Ceiling";
384 = "Highest Adjacent Floor";
512 = "Floor";
640 = "Shortest Lower Texture";
768 = "24 Map Pixels (relative)";
896 = "32 Map Pixels (relative)";
}
speed
{
0 = "Slow";
8 = "Normal";
16 = "Fast";
24 = "Turbo";
}
model
{
0 = "Trigger";
32 = "Numeric";
}
change
{
0 = "None";
1024 = "Change Texture and Remove Effect";
2048 = "Change Texture Only";
3072 = "Change Texture and Effect";
}
crusher
{
0 = "No";
4096 = "Yes";
}
}
Doors
doors
{
title = "Door";
offset = 15360;
length = 1024;
trigger
{
0 = "Walk Over Once";
1 = "Walk Over Repeatable";
2 = "Switch Once";
3 = "Switch Repeatable";
4 = "Gunfire Once";
5 = "Gunfire Repeatable";
6 = "Door Once";
7 = "Door Repeatable";
}
action
{
0 = "Open Wait Close";
32 = "Open Only";
64 = "Close Wait Open";
96 = "Close Only";
}
speed
{
0 = "Slow";
8 = "Normal";
16 = "Fast";
24 = "Turbo";
}
wait
{
0 = "1 Second";
256 = "4 Seconds";
512 = "9 Seconds";
768 = "30 Seconds";
}
monsters
{
0 = "No";
128 = "Yes";
}
}
Locked Doors
lockeddoors
{
title = "Locked Door";
offset = 14336;
length = 1024;
trigger
{
0 = "Walk Over Once";
1 = "Walk Over Repeatable";
2 = "Switch Once";
3 = "Switch Repeatable";
4 = "Gunfire Once";
5 = "Gunfire Repeatable";
6 = "Door Once";
7 = "Door Repeatable";
}
action
{
0 = "Open Wait Close";
32 = "Open Only";
}
speed
{
0 = "Slow";
8 = "Normal";
16 = "Fast";
24 = "Turbo";
}
lock
{
0 = "Any";
64 = "Red Keycard";
128 = "Blue Keycard";
192 = "Yellow Keycard";
256 = "Red Skullkey";
320 = "Blue Skullkey";
384 = "Yellow Skullkey";
448 = "All";
}
combination
{
0 = "No (each is a different key)";
512 = "Keycard and Skullkey are same";
}
}
Lifts
lifts
{
title = "Lift";
offset = 13312;
length = 1024;
trigger
{
0 = "Walk Over Once";
1 = "Walk Over Repeatable";
2 = "Switch Once";
3 = "Switch Repeatable";
4 = "Gunfire Once";
5 = "Gunfire Repeatable";
6 = "Door Once";
7 = "Door Repeatable";
}
target
{
0 = "Lowest adjacent Floor";
256 = "Next adjacent Floor";
512 = "Lowest adjacent Ceiling";
768 = "Perpetual Lowest and Highest Floors";
}
speed
{
0 = "Slow";
8 = "Normal";
16 = "Fast";
24 = "Turbo";
}
delay
{
0 = "1 Second";
64 = "3 Seconds";
128 = "5 Seconds";
192 = "10 Seconds";
}
monsters
{
0 = "No";
32 = "Yes";
}
}
Stairs
stairs
{
title = "Stairs";
offset = 12288;
length = 1024;
trigger
{
0 = "Walk Over Once";
1 = "Walk Over Repeatable";
2 = "Switch Once";
3 = "Switch Repeatable";
4 = "Gunfire Once";
5 = "Gunfire Repeatable";
6 = "Door Once";
7 = "Door Repeatable";
}
direction
{
0 = "Down";
256 = "Up";
}
step
{
0 = "4 Map Pixels";
64 = "8 Map Pixels";
128 = "16 Map Pixels";
192 = "24 Map Pixels";
}
speed
{
0 = "Slow";
8 = "Normal";
16 = "Fast";
24 = "Turbo";
}
break
{
0 = "At different texture";
512 = "No";
}
monsters
{
0 = "No";
32 = "Yes";
}
}
Crushers
crushers
{
title = "Crusher";
offset = 12160;
length = 128;
trigger
{
0 = "Walk Over Once";
1 = "Walk Over Repeatable";
2 = "Switch Once";
3 = "Switch Repeatable";
4 = "Gunfire Once";
5 = "Gunfire Repeatable";
6 = "Door Once";
7 = "Door Repeatable";
}
speed
{
0 = "Slow";
8 = "Normal";
16 = "Fast";
24 = "Turbo";
}
silent
{
0 = "No";
64 = "Yes";
}
monsters
{
0 = "No";
32 = "Yes";
}
The same rule applies for generalized sector types, except that there are no categories here, value may go up to 1009 (correct me if I am wrong):
lighting
{
0 = "Normal";
1 = "Light Blinks (randomly)";
2 = "Light Blinks (0.5 sec)";
3 = "Light Blinks (1 sec)";
4 = "Light Blinks (0.5 sec) and Damage 10 or 20";
8 = "Light Glows (1+ sec)";
12 = "Light Blinks (0.5 sec sync)";
13 = "Light Blinks (1 sec sync)";
17 = "Light Flickers (randomly)";
}
damage
{
0 = "None";
32 = "Damage 5 per second";
64 = "Damage 10 per second";
96 = "Damage 20 per second";
}
secret
{
0 = "No";
128 = "Yes";
}
friction
{
0 = "Disabled";
256 = "Enabled";
}
wind
{
0 = "Disabled";
512 = "Enabled";
}