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
 
If your map is called "testmap.bsp" you would type in the quakespasm console: "map testmap" 
IT WORKED!!! YOU GUYS ARE ALL GENIUSES!!!!!!! 
FINALLY I LOVE YOU ALL YOU ALL ARE THE BEST BOYS!!!!!!!!! THANK YOU ALL SO MUCH YESSSSSSSSSSSSSSSS!!!!! 
Anyone Here?! :) 
I am making a Hexen 2 (Hexen II (for ctrl-F)) map, and I can't for the life of my figure out the "hierarch" spawnflag.

I have a breakable_brush, and another breakable_brush next to it. In Hexen 2, sometimes by breaking a 'foundation' breakable brush, it will automatically destroy some other breakable brushes... i.e. if you have a breakable stone bird bath, with the foundation pillar and the basin being separate brushes, if you were to break the foundation pillar first, the basin should automatically break too, rather than remain floating in the air. This is what I'm trying to do.

I've made both of my brushes into breakable_brush's (separately), and switched on the HIERARCH flag. I've given them a "thingtype" field, and, as directed by the Help file, I've given them both a "frags" field, where the foundation brush has a value of 1 and the basin has a value of 2. According to the Help file, breakable brushes with the lower value will destroy any brushes that have a higher value.

I tried it, and they each can be broken separately, but breaking the foundation leaves the basin floating in mid-air.

I assumed, then, that's because I need to tell the game "these breakable brushes are of the same grouping". I noticed in the Help comment for the CHECKNAME flag, it says:

"link brushes, but also check the name you place in the netname field. Brushes must then not only touch, but also have the same netname to link"

So I enabled CHECKNAME (as well as HIERARCH), and then added a "netname" field, and gave the foundation and the basin the same netname value. ("tmp")

Still doesn't work. They just break separately, and if I break the foundation, the basin remains floating in the air.

How do I do this correctly? 
Hmm... 
Don't set .flags or it will override .frags.
I think you might need to set .cnt to 1. 
.flags? 
Hmm I'm not familiar with the dot.fieldname syntax (.flags?)

I'm using the "BSP" Editor, if that matters, but as far as I know, checking any of the flags (like HIERARCH, or ORDERED), uses/creates the field called "spawnflags" to which then it adds to that value in powers of 2 representing the different flags.

In my case, "spawnflags" field is "2" when I only tried HIERARCH by itself, and 2+8 "10" when I tried HIERARCH and CHECKNAME.

"frags" is a separate field -- If setting "spawnflags" overrides anything set in "frags", then how would one go about doing a "HIERARCH" flag breakable set? I thought the whole idea was to flag a set of rubble as HIERARCH, and then, using different values under "frags" determines which pieces break other pieces. (lower numbers destroy higher numbers?)

Anyway, I tried adding "cnt" with a value of 1 for both the foundation and the basin, but it didn't seem to have any effect. I tried that, with, and without, spawnflags existing.

For clarity, here are my properties of each breakable_brush--

Foundation brush:
cnt: 1
classname: breakable_brush
frags: 1
spawnflags: 2 (tried with, and without)

Basin brush:
cnt: 1
classname: breakable_brush
frags: 2
spawnflags: 2 (tried with, and without) 
Targetname And Killtarget 
I should note, btw, that in my actual scene, I have a grouping of 3+ brushes that can be broken, not just two. If I were to only have two brushes, I could use the: killtarget & targetname combination.

I tried that already, though, and it doesn't seem to chain together breaks. That is, if I tell piece1 to kill piece2, and I tell piece2 to kill piece3 ... Killing piece1 will only kill piece2, but leave piece3 floating there. So it doesn't seem to chain them, which is, I assume, the reason for the HIERARCH and ORDERED functions?

Any ideas? 
 
I had a quick look at the "hcode" (QuakeC), btw, link here: hexen2source-gamecode-1.5.8.tgz

Not sure if you have the full docs, here is the excerpt from breakabl.hc:

It sounds like you were using HIERARCH mode correctly; were the two breakables touching? It looks like that is required for them to be linked.

float BREAK_KILLALL = 1;
float BREAK_HIERARCH = 2;
float BREAK_NOLINK = 4;
float BREAK_CHECKNAME = 8;
float BREAK_ORDERED = 16;
float BREAK_TRANSLUCENT = 32;
float BREAK_INVINCIBLE = 64;
float BREAK_INVISIBLE = 128;

/*QUAKED breakable_brush (0 0 1) ? KILLALL HIERARCH NOLINK CHECKNAME ORDERED TRANSLUCENT INVINCIBLE INVISIBLE
Breakable window or wall

You can manually control the heirarchy of breaking by targeting all the brushes you want this brush to break.
If you target a light with this object and turn on the "breaklight" spawnflag, it will turn off that light when it's broken. The light will default to 300 if no lightvalue1 is given.

AUTOMATIC LINKING OPTIONS:
killall - when killed, the brush will kill all connected brushes
hierarch - link all brushes in a hierarchy. The hierarchy priority is set in the
frags field of each brush. Lower numbers will kill higher numbers. If
brushes share the same priority, they will die at the same time.
nolink - don't automatically link this brush with other brushes (use only manual targeting to link)
checkname - link brushes, but also check the name you place in the netname field.
Brushes must then not only touch, but also have the same netname to link
ordered - like hierarch, except that no matter which brush you kill, the brushes
will always break in a certain order. The order is set in the frags field.
The brush with a frags set to 1 will break first, brush with frags set to
2 will break second, etc.

OTHER FIELDS:
translucent - you can see through it
invincible - can't be shot and broken, but will break by linking
-------------------------FIELDS-------------------------
flag - order number
thingtype - type of chunks and sprites it will generate
0 - glass (default)
1 - grey stone
2 - wood
3 - metal
4 - flesh
5 - fire
6 - clay
7 - leaves
8 - hay
9 - brown stone
10 - cloth
11 - wood & leaf
12 - wood & metal
13 - wood stone
14 - metal stone
15 - metal cloth
16 - spider web
19 - clear glass
20 - red glass

health - amount of damage item can take. Default is based on thingtype
glass - 25
grey stone - 75
wood - 50
metal - 100
flesh - 30
fire - 999
clay - 25
leaves - 35
hay - 35
brown stone - 75
cloth - 35
wood&leaf - 35
wood&metal - 75
wood&stone - 65
metal&stone - 90
metal&cloth - 60
others - 25

abslight - to set the absolute light level

--------------------------------------------------------

*/
 
 
First, thank you guys for trying to help, and I'm happy I found this board and happy that people still mod for these games.

I'm still having trouble with this HIERARCH flag though, and I've taken some screenshots to show exactly what I have. I made a new couple of test brushes to test this with as little unknown factors as possible. The brushes are indeed touching, but I can't help but thinking I need to "group" them somehow with a field, no? How can it know that the foundation must break THAT block on top of it, or, does it iterate through every single breakable_brush in the level, and automatically make the connections in code after determining which ones are adjacent? That seems unlikely to me, but definitely not impossible.

Here's what I have:

https://i.imgur.com/DVb9QwB.png 
Decompiler 
So... I figured I could look up one of those BSP decompilers, decompile a Hexen2 bsp back into a map, and just see how they did it (with the bookshelves, etc)

I tried "debsp.exe" (Has the Return to Castle Wolfenstein logo). That one says you need BSPC.exe in the same folder, so I found that, first. That one reports that it "Is not a valid RTCW map, but it decompiled the BSP into a MAP nonetheless." Except; no it didn't, there is no new map file there.

I tried "BSP2MAP.exe". That one takes a long time to run, and displays promising vertex information scrolling at lightspeed in the CMD window when I try to decompile a BSP map. But then it just gets to the end, tells me how many seconds had elapsed, and there is no map file there. I feel like it's quitting prematurely, or else I would imagine it would report in the CMD log that it had successfully exported a new file.

I then realized you can run BSPC.exe by itself (without debsp.exe), so I tried that. That one reports it attempted, by first allocating some memory, and then reports "ERROR: Odd lump size". No new map file.

Btw, I tried all these on:
-demo1.bsp
-village1.bsp
-village2.bsp
-village3.bsp
-village4.bsp
-village5.bsp

I just want to see how their ents are set up. :(

I'm a little confused why these decompilers all failed to create a map file? 
 
So building a map, its a castle there is so many different paths you could take, iam trying to make the level more of an open sandbox that gradually opens up rather than a linear design.

maybe thiniking hiding 3 orbs you need to destroy to bring down a forcefield on the final area.

would it be so bad if entire side areas were just devoted to getting better weapons?

Maybe hide keys in the map just so you can access the vault or armory for the best secrets.

kinda dont really care about rocket jumps either, if you want to speed run it by all means go for it.

What would you do gameplay wise with a very open ended map? 
 
The hexen 2 .bsp format is slightly different than quake, I'm guessing that none of the Quake BSP decompilers will work on it. (RTCW is Quake 3 engine which is also different).

What should work is if you grab my Q1/H2 compile tools from <a href="https://ericwa.github.io/ericw-tools/>here</a>. Extract them copy the bsp's to the same directory, and open a command prompt in the same directory, and run:
"bsputil --extract-entities demo1.bsp"

This should generate a demo1.ent file that you can open in a text editor to check out the entities. 
SgtStabs 
also thinking of coding variables, i had this really cool way of chaining scripted variable outcome events in duke3d via a shooter and breakables that activate when broken.

so you set up a nail shooter, far away of the map, and put breakable brushes in the shooters path, as the shooter activates it will take out brushes in the chain, some are just duds to delay activations, then you add in 2 doors that close / open based on your postion in the level, which will give the variable outcome when one door closes blocking a chain and opens another door with a different script chain with the variable outcome. 
Target And Targetname 
I feel very stupid.

Thank you for that tool - (I actually already had it downloaded today, but was unaware of the extract entities command)

After finding the shelf entities and looking at how they were set up I made the realization:

Previously, since I knew - for sure - that breaking certain brushes in Hexen 2 could, in turn, potentially break MULTIPLE brushes, I automatically assumed that they used the HIERARCH flag. Because there are more than just two ents involved, I assumed the target/targetname combo was inadequate.

I was wrong - Breaking a shelf (i.e. "shelf1"), just targets multiple ents, all with the same targetname ("shelf1").

Oh boy...

So they never used HIERARCH, at least, not in demo1.bsp

I will assume, for now, that the HIERARCH code doesn't actually work, but, if I come across a spot where it is indeed used in-game (which I could now verify with your ent export), then I'll post back here. (Note: ORDERED *does* work, and is used. It can be seen on the bridge in demo1.bsp)

Thank you!

On another note, would that mean I am out of luck on the bsp-to-map decompilers? Even if not to examine ents, I might need to look at how something else was done later on. (I know this can be an iffy subject, but the goal here is only learning, rather than stealing or modifying Raven's work) 
Sgtstabs 
here is example of variable outcomes

if you walk over the yellow qsymbol before the red quake symbol, you will change the outcome, if you walk over the red tile first you will get a different outcome
no external coding, just chain reactions made from stock map tools.

http://www.quaketastic.com/files/variablestest.map 
SgtStabs 
few overlooked fixes with this new version

depending on which quake symbols you stand on first will decide whether a shambler or vore will spawn.

no external code aside some quoth tools.

http://www.quaketastic.com/files/variables.map 
Hexen 2 - Ambient Sounds, Other Than The Listed Ones? 
Another Hexen 2 mapping question --

My level has a mix of physical geometry torches (with i.e. light_flame_small_yellow sitting on top), and the full "model" torches which include the torch itself and the flame all in one model.

For both the full model torches, and the light_flame_small_yellow (etc) versions, their light value can be manually adjusted, which I have taken advantage of.

However, the full model torches emit no sound - only the geometry torches emit the torch sound. (actually, of course, it is the light_flame_small_yellow that is hard-coded to emit the torch sound)

I noticed this while playing single player Hexen II also, and always thought it was weird. The full 3D model torches were dead silent, and the torches creates with geometry + the flame model on top made sound.

Naturally I assumed I can just add a "sound_ambient" and add a torch sound, near all of my silent torches. However, the ambient sounds you can choose from in sound_ambient seem hard-coded too... They don't include all of the sounds in the game:

"soundtype" values :

1 - windmill
2 - dripping, echoing sewer water sound
3 - dripping water with no echo
4 - subtle sky/wind
5 - crickets / night sounds
6 - birds
7 - raven caw
8 - rocks falling
9 - lava bubble
10 - water gurgle
11 - metal
12 - pounding
13 - random moans and screams
14 - creaking
15 - chain rattling

Is there any way I can get around this, and have those silent 3D model torches emit sound also? 
Sound_ambient 
Set key|values:
soundtype | 0
noise1 | "raven/flame1.wav" 
Actually 
Just place an entity and rename it to FireAmbient.

Be sure to caputalize the F and the A. 
 
Ahh.....I don't suppose you have seen an error like this before?

https://i.imgur.com/i8XMJCV.png

Not knowing how to make a blank Entity, the first thing I noticed was that even BSP/geometry has a classname - "worldspawn". I made a new cube, and renamed worldspawn to FireAmbient. The block stayed as a blocked, so I immediately deleted it.

Then I tried the "raven/flame1.wav" method. First I tried it without quotes, then with quotes. Both attempts gave me that error above when I tried to run my map - and since I assumed the problem was those torches, I removed them, but the error stayed. It could be a coincidence but it's probably more likely that I've done something (wrong) that the editor/engine didn't like.

I noticed you can open up the .map file in Notepad, but I couldn't see anything that looks corrupt or wrong, like an "empty" entity or anything, but then again I might not know what to look for error-wise. :( 
 
And unfortunately I have no backup of the map. I can open it up in the map editor, but I can't run it in game currently 
Precache 
The engine needs to have the sound precached before you can use it (ya I know why not just precache on the fly, Darkplaces does). Typically something like light_small_flameyellow will precache its flame model and sound. Put one in and see if that helps. Also don't use quotes.

To make any point entity:
Add something like info_null
Rename it to desired function name, in this case, FireAmbient.
Not sure what editor you are using but should be able to edit the entity name regardless if it is in the fgd or not. 
Wait! 
You didn't rename the only brush entity named worldspawn did you? If so, then your map has no actual map. Check the .map in nofepad and see if the top emtity is named worldspawn. Worldspawn is what all the non-entity brushes use. 
 
Ah! Ya, you renamed worldspawn. Worldspawn precaches all the models and sounds so thats why you have a precache error.

Um, not sure how you did that. What editor are you using?

You may need to in the editor:
Copy all map contents
open a new map
Paste

To get worldspawn back. 
We're Back! 
https://i.imgur.com/1VGZAlF.png

I opened it in Notepad again and checked the top/first entity - yes, you were right - the top entity looked like this, in my map:

//BSPMAPTYPE0001
{
"wad" "demo1.wad"
{

I changed it to

//BSPMAPTYPE0001
{
"wad" "demo1.wad"
"classname" "worldspawn"
{

And the map works again :)

The editor I'm using is called "BSP" by Yahn Bernier. To be honest, I like the editor a lot. I haven't had many issues with it until just then. I find it easier to create and manipulate brushes than in Hammer, which I used to use for Half-Life/Half-Life 2, and EXCEEDINGLY easier to create and manipulate brushes than in UnrealEd 1.0, which I used to use for Unreal and Deus Ex.

Normally, in this ("BSP") editor, I click on a thing to highlight it, and I can edit its fields in the properties window on the left, and (I assume) it only changes that single entity. I created a new, floating block, selected only that block, and renamed its classname to FireAmbient. After realizing that nothing happened (the block remained a brick-textured block), I deleted it. Somehow I suppose that messed up worldspawn for the entire map. :)

Here is a shot of the editor:

https://i.imgur.com/rPohgvA.png

In the past, I had tried setting up some other editors first, for Hexen II - I know one of them I definitely tried to set up was called QuArK. I couldn't get it set up properly. "BSP" was the only one I finally figured out how to set up for H2. 
Cool 
I tried to find BSP Editor one day but couldn't find it. Where did you download it?

I just stick with JACK/Hammer. TB2 is pretty cool, though, you should try it.

Did FireAmbient work? 
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.