News | Forum | People | FAQ | Links | Search | Register | Log in
Mapping Help
This is the place to ask about mapping problems, techniques, and bug fixing, and pretty much anything else you want to do in the level editor.

For questions about coding, check out the Coding Help thread: https://www.celephais.net/board/view_thread.php?id=60097
First | Previous | Next | Last
Bleh 
Missed some vertices on grid.
Trisouping merges well.
Me bloated sheap. 
"This Sketch Is Getting Silly!" 
So, we clear the E2M2 bug outlined above - great! Now we are just play-testing through the map. I've got architecture (nice), I've got trim (not painted on), I've got monsters (loads), I've got lights (dark and scary), I've got music (totally immersive). I have a simple teleport; I go through and get the SV_TOUCHLINKS error. I have another teleport in another map, set up in the same way (target and targetname, no flags) and do not get the error. Same progs.dat.

I do a test map: a box room, the player, a trigger_teleport, a info_teleport_destination, one monster; I get the error. I use the standard progs.dat with the test map; I get the error.

I actually thought, "Easter weekend, cold outside, let's stay indoors and finish the map". Now I'm thinking I'll just juggle chain-saws in the garden whilst hopping naked on broken glass, it's bound to be easier than finishing the map.

What's on TV, mum? 
 
trigger_teleport will fire it's targets when it teleports something.
is there something else that shares the targetname of your teleport_destination? 
Nothing On Telly 
I did check the main map (because it does break some limits) but I cannot see anything untoward.

I then created the simplest map to test the issue:-


//BSPGROUPS0001
//BSPGROUPINFO"None" "255 255 255" "1"
//BSPFAVORITES0010

//BSPCAMERAS0005
//"582.0 -665.3 1088.0 0 0 238"
//"4.8 -138.3 128.0 0 0 180"
//"0.0 -128.0 128.0 0 0 180"
//"0.0 -128.0 128.0 0 0 180"
//"0.0 -128.0 128.0 0 0 180"
//BSPMAPTYPE0000
{
"classname" "worldspawn"
"wad" "c:\games\bsp96b\quake\wads\onion.wad"
{
//"0000" "0"
( -768 -768 384 ) ( 768 768 384 ) ( 768 -768 384 ) ROCK18 0 0 0 1.0 1.0
( -768 -768 368 ) ( 768 -768 368 ) ( 768 768 368 ) ROCK18 0 0 0 1.0 1.0
( -768 768 384 ) ( -768 -768 384 ) ( -768 -768 368 ) ROCK18 0 0 0 1.0 1.0
( -768 -768 384 ) ( 768 -768 384 ) ( 768 -768 368 ) ROCK18 0 0 0 1.0 1.0
( 768 -768 384 ) ( 768 768 384 ) ( 768 768 368 ) ROCK18 0 0 0 1.0 1.0
( 896 -584 384 ) ( -640 -584 384 ) ( -640 -584 368 ) ROCK18 0 0 0 1.0 1.0
}
{
//"0000" "0"
( 768 -768 1280 ) ( -768 768 1280 ) ( -768 -768 1280 ) ROCK18 0 0 0 1.0 1.0
( 768 -768 1296 ) ( -768 -768 1296 ) ( -768 768 1296 ) ROCK18 0 0 0 1.0 1.0
( 768 768 1280 ) ( 768 -768 1280 ) ( 768 -768 1296 ) ROCK18 0 0 0 1.0 1.0
( 768 -768 1280 ) ( -768 -768 1280 ) ( -768 -768 1296 ) ROCK18 0 0 0 1.0 1.0
( -768 -768 1280 ) ( -768 768 1280 ) ( -768 768 1296 ) ROCK18 0 0 0 1.0 1.0
( -768 768 1280 ) ( 768 768 1280 ) ( 768 768 1296 ) ROCK18 0 0 0 1.0 1.0
}
{
//"0000" "0"
( 768 -768 0 ) ( -768 -768 1280 ) ( -768 -768 0 ) ROCK18 0 0 0 1.0 1.0
( 768 -784 0 ) ( -768 -784 0 ) ( -768 -784 1280 ) ROCK18 0 0 0 1.0 1.0
( 768 -768 1280 ) ( 768 -768 0 ) ( 768 -784 0 ) ROCK18 0 0 0 1.0 1.0
( 768 -768 0 ) ( -768 -768 0 ) ( -768 -784 0 ) ROCK18 0 0 0 1.0 1.0
( -768 -768 0 ) ( -768 -768 1280 ) ( -768 -784 1280 ) ROCK18 0 0 0 1.0 1.0
( -768 -768 1280 ) ( 768 -768 1280 ) ( 768 -784 1280 ) ROCK18 0 0 0 1.0 1.0
}
{
//"0000" "0"
( 768 768 0 ) ( 768 -768 1280 ) ( 768 -768 0 ) ROCK18 0 0 0 1.0 1.0
( 784 768 0 ) ( 784 -768 0 ) ( 784 -768 1280 ) ROCK18 0 0 0 1.0 1.0
( 768 768 1280 ) ( 768 768 0 ) ( 784 768 0 ) ROCK18 0 0 0 1.0 1.0
( 768 768 0 ) ( 768 -768 0 ) ( 784 -768 0 ) ROCK18 0 0 0 1.0 1.0
( 768 -768 0 ) ( 768 -768 1280 ) ( 784 -768 1280 ) ROCK18 0 0 0 1.0 1.0
( 768 -768 1280 ) ( 768 768 1280 ) ( 784 768 1280 ) ROCK18 0 0 0 1.0 1.0
}
{
//"0000" "0"
( -768 768 0 ) ( 768 768 1280 ) ( 768 768 0 ) ROCK18 0 0 0 1.0 1.0
( -768 784 0 ) ( 768 784 0 ) ( 768 784 1280 ) ROCK18 0 0 0 1.0 1.0
( -768 768 1280 ) ( -768 768 0 ) ( -768 784 0 ) ROCK18 0 0 0 1.0 1.0
( -768 768 0 ) ( 768 768 0 ) ( 768 784 0 ) ROCK18 0 0 0 1.0 1.0
( 768 768 0 ) ( 768 768 1280 ) ( 768 784 1280 ) ROCK18 0 0 0 1.0 1.0
( 768 768 1280 ) ( -768 768 1280 ) ( -768 784 1280 ) ROCK18 0 0 0 1.0 1.0
}
{
//"0000" "0"
( -768 -768 0 ) ( -768 768 1280 ) ( -768 768 0 ) ROCK18 0 0 0 1.0 1.0
( -784 -768 0 ) ( -784 768 0 ) ( -784 768 1280 ) ROCK18 0 0 0 1.0 1.0
( -768 -768 1280 ) ( -768 -768 0 ) ( -784 -768 0 ) ROCK18 0 0 0 1.0 1.0
( -768 -768 0 ) ( -768 768 0 ) ( -784 768 0 ) ROCK18 0 0 0 1.0 1.0
( -768 768 0 ) ( -768 768 1280 ) ( -784 768 1280 ) ROCK18 0 0 0 1.0 1.0
( -768 768 1280 ) ( -768 -768 1280 ) ( -784 -768 1280 ) ROCK18 0 0 0 1.0 1.0
}
{
//"0000" "0"
( -1144 32 104 ) ( -1144 0 104 ) ( -1144 0 88 ) ROCK18 0 0 0 1.0 1.0
( -1336 800 72 ) ( -1352 800 72 ) ( -1352 800 56 ) ROCK18 0 0 0 1.0 1.0
( 1040 -152 104 ) ( 1040 -120 104 ) ( 1040 -120 88 ) ROCK18 0 0 0 1.0 1.0
( -1144 -832 88 ) ( -1128 -832 88 ) ( -1128 -832 72 ) ROCK18 0 0 0 1.0 1.0
( -1144 0 104 ) ( -1144 32 104 ) ( -1128 32 104 ) ROCK18 0 0 0 1.0 1.0
( -1088 32 -160 ) ( -1104 32 -160 ) ( -1104 0 -160 ) ROCK18 0 0 0 1.0 1.0
}
}
{
//"0000"
"origin" "496 160 136"
"classname" "monster_army"
}
{
//"0000"
"classname" "info_player_start"
"origin" "-736 -720 408"
}
{
"classname" "trigger_teleport"
"target" "test"
{
//"0000" "0"
( -512 -624 -576 ) ( -512 -752 -576 ) ( -512 -752 -608 ) NONE 0 0 0 1.0 1.0
( -384 -592 -576 ) ( -512 -592 -576 ) ( -512 -592 -608 ) NONE 0 0 0 1.0 1.0
( -384 -752 -576 ) ( -384 -624 -576 ) ( -384 -624 -608 ) NONE 0 0 0 1.0 1.0
( -512 -752 -576 ) ( -384 -752 -576 ) ( -384 -752 -608 ) NONE 0 0 0 1.0 1.0
( -576 -752 496 ) ( -576 -624 496 ) ( -448 -624 496 ) NONE 0 0 0 1.0 1.0
( -400 -624 384 ) ( -528 -624 384 ) ( -528 -752 384 ) NONE 0 0 0 1.0 1.0
}
}
{
//"0000"
"classname" "info_teleport_destination"
"origin" "-72 -680 408"
"targetname" "test"
}



and it still shows the error, although FQ85 reports it but does not crash. 
 
if that map you posted is causing the error, then at this point, all i can ask is: are you SURE you also tested with the stock progs.dat? 
Ooops... 
"classname" "info_teleport_destination&qu...

is "classname" "info_teleport_destination" in the map file.

Ah, 'preview' shows me that somebody doesn't like too many quotes in a post.

The map file is correct 
Furthermore 
Did you test it in a non-Fitz engine? Does it crash there? 
Progs.dat 
Is dated 25/11/1996.

But I am assuming that if I run FQ directly from the .exe file, it will link to the ID1 folder and will not somehow use another -game setting? 
Just To Be Sure... 
I moved everything out of the Quake folder and just left the ID1 folder in there.

Anything in the config file that might affect things?

No, hang on; I have a map using my progs.dat that does not display the problem. FMB_BDG has a teleporter to get you to a secret area and there are no issues at all. The map that displays the error is the next map in this series. 
Negke 
I only have FQ and have never used anything else. I will down load something else and try it - any suggestions? 
Anything Will Do. Old Winquake For Instance 
My point is, even if Fitzquake displays the warning, it doesn't prove there's a serious issue. It may just as well work fine in other engines. I also get the sv_touchlinks (engine) warning in some of my maps, and they still work flawlessly. 
Negke 
It's true that the map does not crash (because FQ mugtraps the error) and the teleporter works. So it can be released like that. I just don't like the message popping up on screen: it's wrong.

I also find it annoying that sometimes it errors and some times it does not.

Now here's a funny thing. In one instance, a teleporter is actually being used as a short-cut. If you use it (by finding a secret) you teleport to immediately behind a monster (shhh, he does not know you're coming), and you get the error message. However, if you kill that monster first (he is nothing to do with the secret, and he is not targeted, he's just an ogre plain and simple) and then go and do the secret teleport, there is no error.

I know my maps are not exactly state of the art, but I do try to get them looking good and playing good. I guess this is compromise time, but as it is my last map, I would have preferred if it did not stutter over such a thing. 
Rock The Mike 
I think I can eliminate the message! If you avoid spawning the tdeath trigger during the teleport touch function, instead just spawning a helper entity with a think function that will spawn the tdeath as soon as possible. The think I wrote was:

void() spawn_tdeath_wrapper =
{
spawn_tdeath(self.origin, self.enemy);
remove(self);
};

and the replacement for the spawn_tdeath call in teleport_touch goes like

tdeath = spawn();
tdeath.origin = t.origin;
tdeath.enemy = other;
tdeath.nextthink = time;
tdeath.think = spawn_tdeath_wrapper;

Trying your test map in glquake doesn't cause a crash though, even before the fix. I think I can see why the error message occurs intermittently and is essentially benign. When a touch even is fired, the engine is in the middle of an internal physics function which holds some state information about the world. That state is an except of a linked list holding the physical entities in the world.

When the tdeath gets added, this is a physical entity which need to be included on the list. If we are very unfortunate then the little bit of the list that the function already has is now out of date. In less careful engines the function does not even notice that it's bit of information is out of date. Does this matter?

Well, that depends. If you care that the function might be skipping our new entity then there is a bug, but we've already acknowledged that we don't expect reliable collisions this frame (that's why force_retouch is set to 2).

I think there's also a more dangerous problem which can arise in this code if the mismatch is because the QC removed an entity, because then the engine is using out of date information to access a dead entity. Dead entities get their physical properties removed so expectations might get violated.

Since we're adding not removing, that class of error can't happen, so I'd expect we are safe. If the error message is irritating the QC workaround above exists, although it might add an extra frame worth of delay to telefrags so it's not entirely without tradeoff. 
 
i think you could also do an overly large findradius then compare bbox absmin/maxs?
that would avoid using force_retouch entirely. 
Historical 
The force_retouch isn't something new, it's been there always to handle a teleporting monster landing on a standing monster. If a monster doesn't move then it won't collide with the tdeath without it, and force_retouch seems designed for this situation. I mean you could reimplement the whole physics engine in QC and not bother with movetypes : - P 
Thanks Preach 
Annoying messages eradicated. 
Tutorials 
Hi Guys!
I'm new to q1 mapping, and i'm wondering if there are any good tutorials out there.
I'm familiar with q3 mapping, so i'm mostly interested in the differences.
Or if it isnt too anoying i could also ask the most necessery stuff here.
Thanks! 
Old Tutorial From 1996 
there's bunch of basics there
http://www.quake-1.com/wc16a-tutorial/

though, modern mappers mostly use radiant, but the basics are basics ;) 
 
If you're familar with Q3 mapping, just look at a Q1 editor def file. You'll see a list of all entities with short descriptions that should give you a basic overview. Maybe open some map in the editor, from the id map sources maybe, for concrete examples.

Q1 mapping isn't too different from Q3, except it requires texture wads, there are no curves and no caulk, and a few more entity types (which are pretty self-explanatory for the most part).

Here is a set of compilers and some other tools that might come in handy at some point. A fairly large collection of texture wads can be found here. If you use Radiant, the .wad has to be in the ID1 folder, and you need to add "wad" "path\tex.wad" to worldspawn for QBSP. 
Addendum 
If you're into Radiant, I suggest you give Netradiant a try, see if it works for you. It's an updated version of GtkR 1.5.

Compiling a map works like with q3map2, only there are three tools instead of one: txqbsp, light, wvis.

Fitzquake or Quakespasm are good engines for testing; Darkplaces is not recommended. And be sure to enable developer mode (console) before loading the map. 
Worth Mentioning 
Developer mode just shows you additional error messages / warnings, if any. 
Thx :) 
That answers most of my questions for now. 
Radiant 
After mapping in Radiant1.5 I get the error meassage when attempting to compile.
It's a bit confusing because now I have to reload the map in quark to compile.

http://members.home.nl/gimli/radia.jpg

What statement do I miss to let the compiler find the map? 
Edit Default_build_menu.xml 
You have to edit this file: C:\Program Files (x86)\GtkRadiant 1.5.0\q1.game\default_build_menu.xml
You must fill in the correct path to q1 and the compilers.
I made it like this:
______________________
<?xml version="1.0"?>
<!--
build commands
[RadiantPath]: path to Radiant .. C:\Program Files\Gtkradiant
[EnginePath]: path to the engine .. C:\Games\Quake
-->
<project version="2.0">
<var name="bsp">"[RadiantPath]yourbsp"</var>
<var name="vis">"[RadiantPath]yourvis"</var>
<var name="light">"[RadiantPath]yourlight"</var>
______________________ 
 
I changed the first lines as noted,
so I did but the error still occurs. 
First | Previous | Next | Last
You must be logged in to post in this thread.
Website copyright © 2002-2024 John Fitzgibbons. All posts are copyright their respective authors.