Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
TimeOfDeath

boom sector effect - never go below 1% health?

Recommended Posts

For boom format maps, can you have a sector effect where your health will never go below 1%? Rocket jumping maps do this in hexen format with sector effect 4171, etc, but is it possible in boom (without the level exiting when you're under 10%)?

Where's EQ at.

Share this post


Link to post
TimeOfDeath said:

For boom format maps, can you have a sector effect where your health will never go below 1%? Rocket jumping maps do this in hexen format with sector effect 4171, etc, but is it possible in boom (without the level exiting when you're under 10%)?

Sort of (sensitive to compatibility settings). http://www.mediafire.com/?dct516nd9dvea08
The basic idea is to suspend the player above a type 11 sector with self-referencing linedefs. Should work even in vanilla.

Share this post


Link to post
tempun said:

The basic idea is to suspend the player above a type 11 sector with self-referencing linedefs. Should work even in vanilla.

What?? You mean a "buddha" cheat area, right in vanilla Doom? That should open on lots of possibilities [I haven't checked the linked file].

Share this post


Link to post
Phml said:

This happens as a bug in Sunder map14. :P

That's where I learned it from (j4rio's demo). And in one more Sunder map, AFAIK.

Share this post


Link to post

Here's a test: godtest.wad (-complevel 9)

I can't get it to work reliably. Sometimes the cyber kills me (does it matter where I stand?), but I never die in tempun's wad.

Is there no way to do this in boom with just a weird sector effect number? EarthQuake said the hexen format sector effect 4171 (and something else) is a mash-up of sector properties or something.

Share this post


Link to post

Is it possible to convert the hexen format sector effect 4171 or 2123 into boom? The hexen sector effect is type=damage end level, damage=none, and one of the two last properties are enabled (I forget what they're called).

Is it possible to use sector type 11 along with the generalized sector types in boom? I looked at boomref.txt but there's no mention of the 'damage end level' type in the 'generalized sector types' section.

Tempun's wad works perfectly for me, but I can't recreate it to work 100% reliably (and I can't get it to work at all in the map I'm working on).

Share this post


Link to post
TimeOfDeath said:

Is it possible to convert the hexen format sector effect 4171 or 2123 into boom? The hexen sector effect is type=damage end level, damage=none, and one of the two last properties are enabled (I forget what they're called).

Is it possible to use sector type 11 along with the generalized sector types in boom?

Don't think you can do any of this.

TimeOfDeath said:

I looked at boomref.txt but there's no mention of the 'damage end level' type in the 'generalized sector types' section.

Tempun's wad works perfectly for me, but I can't recreate it to work 100% reliably (and I can't get it to work at all in the map I'm working on).

Well, I messed with it for a long time before I got it to work.
Also, I think maybe we're using too user-hostile and primitive map editors such as Doom Builder or Slade which randomly mess with the map without being asked to, and we need to use more user-friendly and advanced editors such as Yadex to do this reliably, and crappy node builders which can't even understand what we meant to do.

Share this post


Link to post
tempun said:

Don't think you can do any of this.

Indeed death protection requires the sector special to be exactly 11 - no generalized flags allowed. So, you definitely can't.

Share this post


Link to post

I *think* that unreliability is because the engine sometimes thinks that we're in the sector that linedefs reference (and touching the floor). It is not type 11, and so the trick fails. (We can't make it type 11 as it would damage the player and cause him to exit the level.)
Furthermore, I think that engine decides what sector we're in using only nodes.
And so I made the above wad by first making the sector references of supporting linedefs correct (that is, having them refer to type 11 sector), saving the result, making linedefs reference the dummy sector, saving *to a different file* and then transplanting old nodes onto it with a lump editor. (EDIT: actually this is not reliable, as not only nodes are used but sidedefs also.) This dance is required because level editor automatically builds nodes on save after modification. This appeared to work but of course isn't acceptable for editing. A modified node builder or a wrapper which modifies the level before passing it to node builder is desirable.

Share this post


Link to post

You, sir, are a genius. I never thought I'd see something new in vanilla Doom, 17 years on!

The first map worked perfectly for me, but if I put noclipping on I was bumped in a way such that the level ended.

Share this post


Link to post

Ok thanks for all the help, tempun. I think I will just abandon this idea instead of having to replace new nodes with old nodes, etc. :)

Share this post


Link to post
Jon said:

The first map worked perfectly for me, but if I put noclipping on I was bumped in a way such that the level ended.

That's the cheating protection! **

Share this post


Link to post
TimeOfDeath said:

Ok thanks for all the help, tempun. I think I will just abandon this idea instead of having to replace new nodes with old nodes, etc. :)

It's possible to automate this somewhat.

Share this post


Link to post

Very cool find guys. Tempuns comments made me d/l the prb+ source and go poking around.

In p_spec.c I found

  // Falling, not all the way down yet?
  // Sector specials don't apply in mid-air
  if (player->mo->z != sector->floorheight)
    return;
and in p_inter.c we find
      // end of game hell hack
      if (target->subsector->sector->special == 11 && damage >= target->health)
        damage = target->health - 1;
So essentially if you want to live forever you need to float (at least 1 unit) above the floor of a type 11 sector.

I think the reason you were having hit/miss (as was I most of the night) was the self referencing sector causes the player to not be detected in the sector of type 11 occasionally.

I changed it so that instead of a full self reference, I kind'a "half-referenced" a non-type 11 sector.

Providing your linedefs are a max 32 units apart (you fall through otherwise) it seems consistent this way, and you can bridge sectors. An unexpected bonus - monsters can walk around in the sector with you :0)

You can also use inedef type 242 to cover over the 1 unit gap in floor height.

http://www.mediafire.com/?vv00fduifokd4ef

Travers

EDIT: BTW I don't think and "node trickery" is needed. I was building this test in SLADE2

Also the player cannot die by self-damage (RL splash) and when you get to 1%, armor is no longer lost either.

Test map seems to work OK in prb+, gl-prb+ and gzd.

Share this post


Link to post

Does it work in Eternity? Actually, I'll test it now, and possibly report to Team Eternity if it doesn't.

EDIT: Holy shit it works. And you can stay on 3dmidtex lines there, suspended above the guarantee of life. Too bad the view doesn't become white like with that artifact, because the effect is similar.

Share this post


Link to post
traversd said:

So essentially if you want to live forever you need to float (at least 1 unit) above the floor of a type 11 sector.

I think the reason you were having hit/miss (as was I most of the night) was the self referencing sector causes the player to not be detected in the sector of type 11 occasionally.

I came to the same conclusions.

traversd said:

I changed it so that instead of a full self reference, I kind'a "half-referenced" a non-type 11 sector.

Providing your linedefs are a max 32 units apart (you fall through otherwise)

U can make them diagonal and 32*sqrt(2) units apart

traversd said:

it seems consistent this way, and you can bridge sectors. An unexpected bonus - monsters can walk around in the sector with you :0)

Well naturally, the difference in height is only 1 unit.

traversd said:

EDIT: BTW I don't think and "node trickery" is needed. I was building this test in SLADE2

This depends on luck and node builder. The subsector the thing is in is determined indirectly by R_PointInSubsector (r_main.c), using nodes:

 while (!(nodenum & NF_SUBSECTOR))
    nodenum = nodes[nodenum].children[R_PointOnSide(x, y, nodes+nodenum)];
  return &subsectors[nodenum & ~NF_SUBSECTOR];
In turn, subsector determines sector. Subsectors are linked to sectors in P_GroupLines (p_setup.c): (look it up in full somewhere else, forum software screws up the code)
 seg_t *seg = &segs[subsectors[i].firstline];
Note it uses the first seg to get sector reference and so results depend on nodes.
Your method is more robust because it only makes 1 reference incorrect and thus less chance of glitches. But they probably still can happen in bigger levels, depending on node builder.

traversd said:

Also the player cannot die by self-damage (RL splash) and when you get to 1%, armor is no longer lost either.

P_DamageMobj (p_inter.c):

damage = target->health - 1
. This happens before armor checks. So if you have a lot of health and armor, first hit, no matter how powerful, can't reduce your health to 1.

Share this post


Link to post
printz said:

Too bad the view doesn't become white like with that artifact, because the effect is similar.

And the hits don't move you anywhere either. EDIT: I take that back.

Share this post


Link to post

Ah OK. Sorry - coding and doom engine internals are not my strong point but I think I get what you're saying.

There's no easy way to see how a map is broken up into the subsectors is there? It'd be interesting to see the outcome of self-referencing only one side - Can you have subsectors of 0 area?

It probably goes back to your "luck" comment but I wonder if there is a way (using a specific nodebuilder) to force/encourage where the first subsector in a sector might be formed?

Travers

Share this post


Link to post
traversd said:

Ah OK. Sorry - coding and doom engine internals are not my strong point but I think I get what you're saying.

Ignore my confidence, I don't know much about them either. You can read Doom Wiki articles on segs, subsectors and nodes

traversd said:

There's no easy way to see how a map is broken up into the subsectors is there?

Node builders' authors must have written nodes viewers to debug their programs, but I don't know of any.

traversd said:

It'd be interesting to see the outcome of self-referencing only one side - Can you have subsectors of 0 area?

I think I remember that there must be no degenerate subsectors, but I'm not sure at all.

traversd said:

It probably goes back to your "luck" comment but I wonder if there is a way (using a specific nodebuilder) to force/encourage where the first subsector in a sector might be formed?

First seg of the subsector, you mean. I don't know whether renderer requires seg to be in a particular order, but a bigger problem is that subsector can have a single seg. We can then try to swap sector references (and what if the same occurs on the other side?) In short, probably, but I don't know how. It would probably need a modified node builder.

Share this post


Link to post
tempun said:

And the hits don't move you anywhere either.

Even that happens? That would make it less useful, because one of the challenges should be "stay on the spot if you want to live".

Share this post


Link to post
printz said:

Even that happens? That would make it less useful, because one of the challenges should be "stay on the spot if you want to live".

Put in heaps of medikits.

Share this post


Link to post
tempun said:

Put in heaps of medikits.

Looks too contrived as "slaughter-mappy" for my liking. I prefer the special effect to look more natural.

Share this post


Link to post
printz said:

Even that happens? That would make it less useful, because one of the challenges should be "stay on the spot if you want to live".


Hrm, I was getting knocked around by the 3 cybers in the test map.

Off-hand I think uses for this could be to make a small area "invincible" to allow a player to undertake a rocket jump to progress or maybe a secret map where you cannot die. I guess neither scenario is very intuitive in the doom environment (not something expected of the standard game mechanics).

Share this post


Link to post

The reason I wanted to use it was to imitate another video game: there's a part where you get hurt and it takes you down to 1% health without killing you (regardless of what your health was at before, you always go down to 1%, just to scare you).

Share this post


Link to post

Off-hand I think uses for this could be to make a small area "invincible" to allow a player to undertake a rocket jump to progress or maybe a secret map where you cannot die. I guess neither scenario is very intuitive in the doom environment (not something expected of the standard game mechanics).


You could always introduce it earlier in a gentle but forced way, i.e. crusher over a critical switch on a spot where you cannot die, with particular lightning/texture, and use those same visual clues later on for more interesting gameplay scenarios once the concept is assimilated. Can't be worse than switches puzzles. :)

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×