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: http://www.celephais.net/board/view_thread.php?id=60097
First | Previous | Next | Last
Thanks! 
I mean a higher refresh rate in your monitor. You' know it if you were as you need to set it in the engine in this case anyway. I ask about refresh rate because I searched here and that error was mentioned before in a thread elsewhere. I have no idea what could cause that so grasping at straws. :) 
Thanks 
No, just 60Hz
Thanks for the help, maybe it was a once off. I'll release as beta and see if anyone wants to test the map and see what happens. 
Re: Undead Fiend Head 
Hi Sir_Random, was the fiend mid-leap when the exploding box went off? Possibly it leapt into the box and set if off? I have a theory that you might have tumbled upon one of the many bugs that arise in the standard exploding box QuakeC code. 
Hi Preach 
It may well have been mid-leap, there was a lot going down at the time with ogre grenades and hell knight fire raining down :)

I haven't looked at the relevant code, but I'm surmising that when the Demon was gibbed it somehow wasn't flagged as dead, so the engine was still treating it's head as a walkmonster and trying to animate it. 
Now..where Was I 
One of the aspects of monsters dying in Quake which matters here is that the only real reason they don't continue attacking is that their think function gets reset by the death animation, so they never re-enter the ai loop. There's no other safeguard against a dead monster carrying actions out.

My guess of what happened is this:

Fiend leaps into the barrel and starts running Demon_JumpTouch
Demon_JumpTouch inflicts damage on the barrel
...The damage explodes the barrel
......The barrel explosion kills the fiend
..........The fiend turns into a head gib
Control returns to Demon_JumpTouch, which then sets a think function on the head gib, putting it back into the monster ai loop.

You might worry that this could happen in other situations, like if a grunt shot a barrel, blew it up, and died in the resulting explosion, would it also become a zombie? The answer is no, because army_atk5 sets a think function before it inflicts any damage. In fact, almost all monster animation functions set the think function before they take any action.

Demon_JumpTouch is an exception because it's a touch function that can triggers ai functions, and does so in an unusual order. The fact that the fiend was a head gib might have caused it to find one of the paths through the function that set an ai function (not all of them do).

Having gone on about Demon_JumpTouch so much, you might expect that the fix should be located there. But actually the traditional fix in QuakeC mods is just to add a short nextthink delay to the explosion of a barrel. This fixes whole other categories of bug - like multiple barrels exploding at the same time and resetting each other's radius damage loop. It also prevents the explosion interrupting other code, such as Demon_JumpTouch - which is especially confusing when the monster might change from alive to dead during the interruption! 
Thanks Preach 
I suppose a Fiend never encounters an explobox in original Quake, so there's not much chance of spotting that oversight in testing. I'm more familiar with idTech 4 & 5 (Doom 3, BFG) and there are plenty of anomalies in that code too :) 
@Preach 
This thing also happens with zombies?

I'm asking because there's a warning in the readme file of "The Pillars of the Damned" map that says "If you activate one of the crushers while a zombie is lying on the ground that zombie can only be killed by splash damage"

And this is what it looks like when i played (the bug shows at 09:30)

https://www.youtube.com/watch?v=udyyohmHvZc&t=570s

It's the same bug, or is something else? There's a way to fix this in progs.dat so it won't happen again? 
Zombie Vs "Zombie" 
Afraid not Tribal, where I said zombie in that post, I really meant "zombie". I was using it as shorthand for monsters affected by Sir_Random's bug - monsters that continue acting after the player has killed them. Any resemblance to actual zombies is entirely coincidental.

I don't think your bug is related, because the bug is triggered after the zombie is already "dead" on the floor, not at the moment of dying. It sounds like the engine tries and fails to restore the collision hull to the zombie when it stands up inside a BSP object, but I can't tell you more than that... 
@Preach 
Thanks anyway :) 
Trying To Get Started Mapping, Little Help With Compiling Probs? 
Hi All, long time quake player, thinking about my first quake map.

Hi Im looking into making my first quake map.

Im having problems understanding why qBSP runs on my map but vis and light doesn't run.

I dont understand why it finds my QCompileTools folder just fine for qbsp, yet it wont do the vis and light right next to it in the same folder?

I'm using necros compile gui

Im very new to all this and this in particular is really confusing me, so I hope you can help, and if the soltion isnt obvious I could post the compiler output.



I hope you can help and Best wishes! 
First Question 
Is qbsp.exe creating a bsp in your maps folder?

Next, if not we'll need to see the .log folder that is created in the working directory. 
Hi Dumptruck, Great Youtube Vids By The Way. 
Hi,

Yeah I get the bsp, it runs, Fullbright and with geometry disappearing.

Here is the compile

------------------------------------------
Copying Files...
The file cannot be copied onto itself.
0 file(s) copied.
Converting map...
--------------QBSP--------------
---- qbsp / ericw-tools v0.18.1 ----
Input file: FirstQuakeMap01.map
Output file: FirstQuakeMap01.bsp

---- LoadMapFile ----
*** WARNING 06: No info_player_deathmatch entities in level
2700 faces
450 brushes
2 entities
28 unique texnames
452 texinfo

Opened WAD: D:/Projects/Texture Archive/texturedownloads/base.wad
Opened WAD: D:/Projects/Mapping/MyTrenchBroomQuakeMaps/id.wad
Processing hull 0...
---- Brush_LoadEntity ----
450 brushes
425 planes
---- CSGFaces ----
2700 brushfaces
3205 csgfaces
3025 mergedfaces
---- SolidBSP ----
3886 split nodes
1749 solid leafs
1840 empty leafs
298 water leafs
0 detail leafs
0 detail illusionary leafs
0 detail fence leafs
0 illusionary visblocker leafs
20722 leaffaces
19774 nodefaces
---- Portalize ----
2138 vis leafs
2138 vis clusters
5477 vis portals
---- FillOutside ----
*** WARNING 10: Reached occupant at (1504 -144 312), no filling performed.
Leak file written to FirstQuakeMap01.pts
---- MakeFaceEdges ----
---- GrowRegions ----
Processing hull 1...
*** WARNING 10: Reached occupant at (1504 -144 312), no filling performed.
Processing hull 2...
*** WARNING 16: Texture __TB_empty not found
---- WriteBSPFile ----
Wrote FirstQuakeMap01.bsp
923 planes 18460
23094 vertexes 277128
3886 nodes 93264
368 texinfo 14720
19774 faces 395480
5626 clipnodes 45008
2139 leafs 59892
20722 marksurfaces 41444
79088 surfedges 316352
47598 edges 190392
32 textures 346812
lightdata 0
visdata 0
entdata 216

0.469 seconds elapsed
Peak memory usage: 69414148 (66.2M)
--------------VIS---------------
---- vis / ericw-tools v0.18.1 ----
running with 8 threads
testlevel = 4
LoadBSPFile: 'FirstQuakeMap01.bsp'
BSP is version 29
LoadPortals: couldn't read FirstQuakeMap01.prt
No vising performed.
-------------LIGHT--------------
The file cannot be copied onto itself.
0 file(s) copied.
The file cannot be copied onto itself.
0 file(s) copied.
The system cannot find the file specified.
Press any key to continue . . . 
2 Issues 
1. You have a leak in your level so VIS will not run.

2. Light will not run if you don't have any light entities in your map. If you do, then I am not sure why it isn't running. Double check the path in the GUI to light.exe Maybe it's incorrect?

Also it's a good idea not to have spaces in any of these tools paths or for your wads etc. But that's not the issue above. 
@AM 
Open the .pts file in your editor, you should see a dotted line leading you to the leak so you can fix it. 
Okay 
sorting the leak means vis will now run,
it makes a prt file, does this go in the same dir as the bsp when loading it into quake?

I put some light entities into the map, and now when I try to compile, it gets to light, and crashes.

light.exe system error
The code execution cannot proceed because embree.dll was not found. Reinstalling the program may fix this problem.

I see the flame of the wall torches, but there is no light. still fullbright textures.
Strange. Light.exe is in the same place as the other 2 compilers. 
 
PRT files are just for use with the compile tools. The Quake executable doesn't need it.

The prebuilt builds of ericw-tools require (and come with) embree.dll. Try reinstalling it: https://github.com/ericwa/ericw-tools/releases/ 
AM 
re: light crash

You are missing the MS Visual C++ files. TB and ericw tools use 2 seperate libraries. Go to the site and look at the link right under the blue download button.

https://ericwa.github.io/ericw-tools/

Also plz watch my troubleshooting video which will help you with leaks.

https://youtu.be/kFd-D46OCrg 
Above Should Read 
"you might be missing" 
Sounds Good. 
which of the 3 should I download?

vcredist_arm.exe

vcredist_x64.exe

vcredist_x86.exe

Im using 64bit windows 10 
 
vcredist_x64.exe 
Still Getting The Embree Message After Vcredist_x64.exe 
I downloaded and ran vcredist_x64.exe only. It didnt ask me for a destination when I ran it so I dont know where it puts those libraries. My projects/mapping is on my D drive whereas windows system files are on c
could this be an issue? 
@AM 
When you extracted the ericw-tools-v0.18.. zip there should be a "bin" folder containing an embree.dll as well as the various .exe's. Maybe just confirm you still have the embree.dll because copying just the qbsp/vis/light.exe to a separate folder would cause the "embree.dll not found" error.

I downloaded and ran vcredist_x64.exe only. It didnt ask me for a destination when I ran it so I dont know where it puts those libraries.
Yeah this is fine, it's part of Windows so it gets installed globally somewhere.

One last thing there are 2 packages of the tools, -win32.zip and -win64.zip. The -win32.zip requires vcredist_x86.exe and the other one requires vcredist_x64.exe. I should probably spell this out more clearly :) 
It Works Perfectly Now =D 
beautiful moody quake lighting.

Yeah it all makes sense now, I think I moved the .exes thinking it would be ok. I put them where they should be and everything is fine.

THANKS SO MUCH 
 
Wait what....why would you need separate .dll's for the compile tools? Did something change? What's embree? 
Trenchbroom Custom Model Display (.fgd File) 
Hello! In my progs I have misc_model entity which places custom models into maps. It has a parameter "model", which contains the path to my model in folder (for instance progs/v_shot.mdl). It works fine, but how should I set my .fgd file to display this custom models in Trenchbroom? Is it possible to do somehow? 
Reyond 
It is possible. I have an improved version of the fdg for progs_dump that has this feature. Here's the bit you need to add to the fgd:

model({
"path" : model,
"skin" : skin,
"frame": frame
}) 
 
Sorry for being so stupid, but I have never worked with .fgd files before. I have this in my .fgd file:

@PointClass base(Appearflags) size (16 16 16) color(30 150 35) = misc_model : " Place your custom model"
[
model(string) : "Path to your model"
]

Trenchbroom sees the entity in the entity list, bit it can not display the model when i wright the path to it. Where exactly should I add your piece of code so the model could be seen?

P.S. I tried to add your piece of code but got an error. I have downloaded fgd from your drobpox but I still can not sort out how to use fgd files. Thanks for helping me! 
Thanks To Dumptruck_ds 
Thank you so much! I found out how the misc_model is made in your fgd file and this worked for me:

@PointClass base(Appearflags, Target, Targetname) size(32 32 16) color(255 128 0) studio({ "path" : mdl}) = misc_model : "A point entity for displaying models"
[
mdl(string) : "Model Selection (ex progs/model.mdl)"
frame(integer)
first_frame(integer)
last_frame(integer)
speed(integer) : "Speed" : 10
angles(integer) : "set 'angle' to 0 if this is used"
 
Studio is the key bit here 
Is It Ok To Just Add The RL On Skill 0 ? 
I'm trying to balance my map for skills, and I'm wondering is it ok to just add the RL near the start for easy skill? Or would that be viewed as lazy?
It just seems harder to remove enemies and still keep the map exciting. 
Uh.., 
Depends on the game-wise developpement you tend the player to behave like.
A RL at the start makes it easy to clear path for almost the hardest monster, so then it depends on the ammo, health and armour you supply.

At the other hand with the weakest weapons you can build up a steady monster count that balances on to a harder fight at end.
Don't forget that several knights can make a player already uneasy to fight.

So an easy skill won't say an easier fight IMHO.
Or start with no weapon, there's an easy hack for it. 
Thanks Madfox 
Thanks, I do have a build up of monsters, geared at Normal/Hard. I guess I'll just change/remove some monsters for easy. I wanted to keep the ambush/crossfire situations, but I guess not many play on 'Easy' anyway. 
Sir_Random 
Don't forget that you can do more than just take away monsters on easy -- you can also replace them with weaker monsters that only spawn in easy mode.

For example replacing a vore with an ogre, or a shambler with 3 knights. 
@metlslime 
Thanks, that's what I'm going to do. 
 
It would be an interesting challenge on its own - a map where the # of monsters decreases with skill, but the overall challenge still increases. 
Suggestion: Progression, Plan Your Encounters 
Start with your ideal hardest level.
For each "encounter" consider the next logical easier encounter to step down to for Normal, then Easy. Either placement change, cover addition (e.g. func_wall post, crate), lower health or lower damage per second enemy swap out, or fewer enemies.

Gets fuzzy if you have near constant encounters but if so maybe pacing is needed on lower difficulties, longer timespans between encounters rather than one long continuous encounter with no breathing room between enemies (e.g. Nightmare).

Weapon-changeout/early-add is good, but remember how it will affect pacing, better weapons earlier = shorter fights = more time between encounters which can make for lower percieved difficulty. 
Qmaster 
I did make it for Normal/Hard, with a few strategic Nightmare monsters and I got great feedback from jcr who made demos in Nightmare. His play style is more aggressive than me so it was good to see the map played at pace and it seemed fairly balanced for him.
I just need to rework some battle areas to suit fewer/weaker monsters without making it toooo easy. 
Difficulty 
I think resisting "easier is just fewer monsters" design is the right way to go. There should be fewer monsters, just not many fewer, because too few is just plain boring. We're all Quake Experts after 20 years of this, so I think anyone playing custom maps on Easy in 2018 is doing so because they're doing it on a lunch break or a stolen evening away from the kids, and not because they can't handle more than one fiend at a time. Maybe we should think of it more as 'higher investment.' Besides, Quake gives you tons of unappreciated variables that you can tweak by skill, both obvious and subtle.

- Armor makes Quake significantly easier. More reds and yellows, more often, effectively extends the player's survivability in a given fight by hundreds of HP. More Greens, or stretches without armor at all, shrink the until-death buffer to little more than the player's current health. If you do want to keep the same monster loadout on all three skills, give the Easy player several Red and Yellow armors and the Hard player only one or two Greens. They'll feel like completely different games.

- Adding a vote for weapon pickups coming earlier or later. On Easy, the next big weapon might come before the next big encounter so the player can kick ass with it, on Medium it might be placed within it so the player has to engage to grab it, and on Hard it might only come as a reward after beating the fight entirely without it.

- Greater monster variety leads to more ways the player can be attacked at any one time, requiring juggling more variables to avoid damage and find the safe place to be standing at any given millisecond. A shambler and a vore together are harder to handle than a pair of either. Variety also raises the chances of infighting, however.

- The angles that enemies are presented from makes a difference. In front of the player is easier, flanking is harder, behind is bordering on unfair depending on circumstances. Below the player is a turkey shoot, eye level is straightforward, and monsters up high have a distinct advantage.

- Quantity of resources matters, of course. Bigger medkit pools clearly make the game easier, plentiful rockets can be splashed around while rare ones are only for emergencies, etc. Nail weapon DPS is higher than SG/SSG DPS and so on.

- Frequency of resources matters too. A steady drip lets the player feel secure, but isolated bursts create situations where the player has to stretch himself to get to the next 'island'. Depending on where he makes his errors, he might have to stretch pretty hard (eg those 'quicksave with 5 health left' or 'shambler axe dance or bust' moments). Feast-or-famine item placement can induce mild stockholm syndrome, leading to more positive reviews :)

- Unless you're using a lot of Enforcers, maybe provide all players an early Lightning Gun and simply vary the cells provided, as a way of dealing more or fewer 'get out of jail free' cards.

- Don't forget that the difficulty spawnflags are present on every entity. If you're using monster closets, vary the locations of the ambush triggers. Have the Hard ambushes happen when the player is in the worst possible position, and give them a leg up or more warning on easier skills (or even leave the closet open on Easy so there's no surprise at all). You might even duplicate the doors so you can set different 'speed' keys per skill, so the harder ambushes are an instant pants shitting and the easier ones are more like a countdown until the monsters come out, complete with early warning aggro sounds. Doors can be temporarily barred behind the player on hard skills while he is free to retreat from a fight on easier ones. Falling into a pit can be a mild backtracking inconvenience on easy skills but death by spikes on harder ones. How much room is there between nail shooters in this hallway? With careful use of triggerable lights and skill-specific trigger_relays, you can even use light and darkness against the player differently.

Getting crafty with what you change between difficulty levels can give you ideas for entire encounters, although don't rely on that too much for interest, because any given player is probably only going to experience one such permutation and thus won't realize the need to appreciate how different it is from any others. 
@Lunaran 
Great suggestions above. I may steal this and create a "gameplay" video based on it and a few other posts. This is an area I struggle with and just two or three of these suggestions would have have a big impact on any map. I know some players hate "back spawning" monsters but I think if you use them sparingly as an easy task after a more challenging encounter they can be effective. 
Ammo Science 
Here's a method I've been using. It's really rough, and time consuming without a custom progs to do it for you, but it can be a helpful way to ground your estimates.

A box of:
25 or 50 nails = 225 or 450 damage
20 or 40 shells = 440/880 dmg
6 or 12 cells = 180/360 dmg

6/12 rockets are harder to judge because of 1) splash damage and 2) zombies, but let's say every rocket is 180dmg, for 1080/2160 dmg per box.

Total all the ammo you provide in the map (add 25 shells for the starter ammo, add 2 rockets per ogre and 5 shells per grunt and so on), and that's the max amount of hit point damage you are giving the player to deal. Total the starting health of all the monsters, and compare the two numbers.

Researching id maps and popular custom maps reveals an average 'custom' of about ~3:1 on Easy, ~2.2.:1 on Medium, and ~1.7:1 on Hard. the id maps are generally above that curve (4/3/2:1), and custom maps tend to fall below it(2.5/2.0/1.5:1).

Careful cheapskate shot-counters can finish a map with a ratio of about 1.3:1 ammo DP:monster HP, but most players will have to resort to the axe at some point and will complain of shortage. RPGSP1, which was greeted by universal reviews of "good but I ran out of ammo at the end" still had a ratio on skill 2 of 1.4:1 DP:HP.

There are lots of outliers to these curves, though, because so much of it comes down to how the level design enables the player to *use* the weapons, as well as exploit infighting, choke points, etc. Do rockets get spent one at a time on individual zombies or can they be used to gib crowds of knights for maximum ROI? or are they useless against herds of shamblers?

It also matters when the player gets the ammo. Ammo the player doesn't pick up or can't use is effectively not present in the map at all. Does it come too late to be used when it was really needed? does it come too early and get skipped? or partially wasted when picked up by a player who's already nearly maxed and getting too much at the wrong times? How much of that ammo is in secret areas? 
I Can't Add 
20/40 shells * 24dmg/shell = 480/960 DP per box 
 
also quad damage placement 
Glad To See I'm Not The Only One 
Right there with you buddy. I once made a mod that outputs my health, shells, nails, etc to the console once per minute. Then I graphed it for my favorite levels. Made sort of an S type curve and tends to plateau with plentiful supplies of ammo towards the end but health still only hovered around 40 to 75. 
BUT 
I always come back to this: to heck with the numbers, make it fun. 
Of Course 
I cannot caveat enough that such measurements are of little exact use. It's good for ballparking it and discovering "oh shit I'm way off" and don't trust it more than that. 
1 post not shown on this page because it was spam
First | Previous | Next | Last
Post A Reply:
Name:
Title:
Body:
message
question
exclamation
idea
flame
noflame
error
skull
beer
moon
pent
rocket
sheep
pacman
pig
cheese
worldcraft
gauntlet
crate
pitfall
pimp
smile
cool
sad
frown
oi
yay
tongue
evil
wink
neutral
q1
q2
q3
ut
hl
cs
doom
dkt
serious
cube
Website copyright © 2002-2018 John Fitzgibbons. All posts are copyright their respective authors.