Search In
• More options...
Find results that contain...
Find results in...

# An adventure in gzdoom. (A Learning Process & Hidden Tutorial)

## Recommended Posts

[img]

[/img]

This is what happens when I test. They look fine in the builder. What am I doing wrong? I got 3d slopes working. Slopes on the floor work, but I can't seem to figure out how to get them to work on the ceiling.

Jaxxoon R said:

Thanks.

Can you provide an example map of some description?..

everennui said:

[img]
http://www.imgur.com/BizzHRd.png
[/img]

This is what happens when I test. They look fine in the builder. What am I doing wrong? I got 3d slopes working. Slopes on the floor work, but I can't seem to figure out how to get them to work on the ceiling.

What exactly are you doing here? Are those columns on both sides of the doorways sloped sectors with 0 heights so as to achieve that diagonal texture change effect?

What slope system are you using, plane_align?

It looks to me like you have the ceiling below the floor, so there are 2 textures trying to render at the same place. To fix that, make the ceiling equal to or higher than the floor.

Empyre said:

It looks to me like you have the ceiling below the floor, so there are 2 textures trying to render at the same place. To fix that, make the ceiling equal to or higher than the floor.

That's what I thought it had to be to, but it's not.

http://imgur.com/a/n1I5h

Also... here is the wad if you would like to look at it.

https://www.mediafire.com/?n85brbe8u4nkrbz

EDIT: USE MAP04.

Gez said:

What exactly are you doing here? Are those columns on both sides of the doorways sloped sectors with 0 heights so as to achieve that diagonal texture change effect?

What slope system are you using, plane_align?

Edit: I'm looking into plane align now.

Have you tried resetting the slope floor height offset to 0?

Line action 181 Plane Align is a lot more robust than sector slopes. I remember having similar problems until I switched.

Plane Aligned 3D Floors are even better:

Looks fine on my side without any tweaks. Try updating GZDoom?

MaxED said:

Looks fine on my side without any tweaks. Try updating GZDoom?
http://i.imgur.com/mbFo9p3.png

winner winner chicken dinner. I was running 1.98. I now have 1.9.1 and it works fine.

I actually downloaded 1.98 2 days before 1.9.1 was released. Thank you so much! I knew I shouldn't have to do a dummy sector for slopes non-3d slopes.

now... to reset my key bindings. :/

You don't need a dummy sector to use plane align. It really is the simplest way to make a slope. Here is a room copied-and-pasted from one of my maps, and made stand-alone. There are plane align slopes everywhere, and no dummy sectors.
Plane Align Test Room

Empyre said:

You don't need a dummy sector to use plane align. It really is the simplest way to make a slope. Here is a room copied-and-pasted from one of my maps, and made stand-alone. There are plane align slopes everywhere, and no dummy sectors.
Plane Align Test Room

DUDE! That's a really kickass room!

I changed the name of this post so that it would have more longevity than just ceiling slopes. Right now I am currently trying to figure out mirrors. I just can't get them to show up.

I'm using gzdoom (UDMF) Doom 2 for my configuration.

I have it set to action 182 (Line Mirror) and it has nothing behind it. The line is single-sided (front facing).

Here's the actual .wad if that helps anyone. https://www.mediafire.com/?n85brbe8u4nkrbz (USE MAP04)

I'm really confused by this one. Seems like it would be pretty easy. UDMF supports mirrors? I haven't found anything that says otherwise and I've viewed the tutorials on YT - they seem like they're in a different format, but all the options are there. Anyone else deal with this?

Your example in that screenshot doesn't match your wad. As for the actual map you did post, you stuck it on a double sided line. Even though the line itself is marked as single sided, and the the mirror otherwise would work (it does rather surprisingly in ZDoom), what you have done is technically undefined. The mirror line must have no backside at all.

Edward850 said:

Your example in that screenshot doesn't match your wad. As for the actual map you did post, you stuck it on a double sided line. Even though the line itself is marked as single sided, and the the mirror otherwise would work (it does rather surprisingly in ZDoom), what you have done is technically undefined. The mirror line must have no backside at all.

Do you think you could post a screenshot of how you got it to work?

Literally just merge the line into the wall behind it.

Edward850 said:

Literally just merge the line into the wall behind it.
http://puu.sh/nTPlo/460d7e54bf.png

And you to it to work in GZDOOM??

I'm beginning to think this is a problem with my OpenGL

everennui said:

And you to it to work in GZDOOM??

Edward850 said:

Thank you so much. After looking at yours I noticed a sector number that was different from the one I had. My line_mirror was marked as 96 when it should have been marked to sector 95.

Does anyone know how to lower this door so it doesn't pop out of the frame like this?

everennui said:

Does anyone know how to lower this door so it doesn't pop out of the frame like this?

http://imgur.com/XuascbU.png

If you want to make an effect like that, then you need to make your polyobject out of two-sided lines so that the midtextures don't tile. Keep in mind a polyobject isn't a 3D floor, so if the player's viewpoint gets above the top of the door, they'll be able to see it's hollow inside.

Gez said:

If you want to make an effect like that, then you need to make your polyobject out of two-sided lines so that the midtextures don't tile. Keep in mind a polyobject isn't a 3D floor, so if the player's viewpoint gets above the top of the door, they'll be able to see it's hollow inside.

I actually found a thread for something like you're talking about. http://forum.zdoom.org/viewtopic.php?f=3&t=35974

One of the users made a door for another user. I looked at it. It's really cool. I did notice that it was hollow in the middle, but it was still better than an infinitely tall wall. Is it necessary to use coding for what you're talking about? The swingingdoor.wad that, "cocka" created and linked used action 5 "poly explicit line" instead of the, action 7 "swinging door". Am I aiming to make a sector?

I'm really lost.

(This is the door in that wad.) The linedefs are all action 5. and the two, longest lines are tagged. Are they tagged so that the code can detect them?

I'm beginning to think I need to code it.

I think that I figured out how to do the polyobject the way you are talking about. It renders in the game, but I don't know how to get it to move.

I found this script, but maybe I didn't change the numbers right. The anchor and poly start are #2 in this instance. Is that the ID I need to use in the scrip or do I use the tag number?

EDIT: Script 7 if it's not clear.

I've resorted to doing one of these:

numbers on some of the doors, but there isn't enough negative space to do it on this current door I'm thinking about, and I think that exteneding it the needed 128 pixels would just make the other room too long. I actually really like the example in, "swingingdoors.wad" from Cocka and I might even have to borrow it from him if I can figure out what the scripting is and understand it. I don't want to just stick a code in there.

I don't have very much experience coding, but I KIND OF understand the jist of it. My biggest problem is understanding syntax and declerations; although, ACS seems pretty straight forward (most (word please) "syntax"? say what they mean to do.). ie. PolyObjSwing gives a pretty clear indication of its intent. gzdoom builder's scripting is really cool (autofill, and (what are PolyObj(0, 0, 0<);---These called?))... I think that I could understand this, but too ignorant. Just plain and simple.

What do I need to do/understand/learn to learn ACS Scripting?

I have read the Wiki and I do understand how the very basics work. I know that each phonomena needs it's own script "script" calls a script "1" is an ID tag for the script. "{" creates the body of the script." "}" closes the script. The parameters or actual coded script goes between the brackets. I understand how to spawn monster's and items. That actually makes sense.

I get the premise of boolean language if, else, then... I just don't know how to call upon the program to start it.

What I would really like to do is create a script for monster's to drop "souls" (little balls) that the player collects to open chests, or unlock a special door in a map. I don't know if it's possible or not. I guess it's just going to be a lot of looking through the forums and saving bookmarks.

Is there an ACS Bible or anything like that?

I did program a little bit of Q Basic in Highschool, but it was very basic stuff. I know quiet a lot of HTML 4.0 and basic CSS, but this is quiet a step up from that stuff. I'm not sure what the word is I'm looking for, but I'm am just kind of like a dear in the headlights. Awestruck. As I look at this huge world and feels small. What do I do first? How am I going to survive. Okay... that's hyperbole, but I would be forever in debt to anyone that could help a novice out.

In the mean time I will get through the Wiki one more time. (Which is actually part of an inner contention.) That wiki is for ZDoom. I know they're very similar, but it makes me maybe a little more cautious about compatibility. For example... creating slopes in gzdoom is a lot easier in UDMF. I don't want to be redundant or asinine. I imagine in ZDoom all PolyObj had to be coded at one time, but now you just need to set up an anchor and set a linedef action to 9001-3(? (of the top of my head)).

Honestly, it really makes me appreciate all the work that people put into their work.

GEZ. I know I've seen your name on something. I'm drawing a blank at the moment.

Nothing has really ever captured me so much as Doom editing. I refuse to be defeated by my own ignorance. It's a fun challenge and I like that a lot.

I really do appreciate all the people who have helped me along the way. Doomworld and the DooM Community in general have all been very awesome to talk to. Everyone is so helpful and that makes me feel really good.

Maybe there are other posts like THIS. link?

(what are PolyObj(0, 0, 0<);---These called?))

Are you referring to the numbers inside the parentheses? Those are arguments.

I know exactly how you feel re: scripting... I felt that way for soooo long, until I started learning how to actually code last year (mostly JavaScript, in my case). I haven't really done any ACS since then but every time I've peeked at it it's been pretty amazing how much more comprehensible it is now. I don't mean to scare you though or make you think that you'll need a year of practice to understand it, because you certainly won't. I'm honestly not sure what would help most in your case, but I think learning some basic programming stuff outside of ACS might be helpful? I dunno. Maybe try the basic JavaScript tutorials on codecademy? It's not ACS obviously but I think JS is a really great gateway for folks with no prior programming experience and who are prone to feeling overwhelmed and filled with self-doubt :p That tutorial probably takes a few hours in all, which I guess may sound like a lot, but I think you could probably learn a lot from it (plus you could say you know a little bit of JS!), though I don't think you'd need to finish it entirely to get benefit from it. I would think that if you go through that (or something else similar) and then come back to ACS it'll seem a lot more approachable. I honestly dunno though! This sort of stuff can be pretty frustrating at first but I know you can do it :D

For your idea specifically, with monsters dropping things, I think you'd want to go with a DECORATE/ACS combo there. DECORATE is used for creating new monsters/items/etc or altering existing ones, so DECORATE is how you would go about, say, making monsters drop a certain item like a "soul" or something. So essentially what you'd want to do is:

- use DECORATE to create some custom inventory items that the player can pick up
- use DECORATE to alter applicable monsters to drop said item (perhaps using A_SpawnItemEx in their death state)
- in your map(s), if for example you have a door that requires the player to have 50 souls to open, give that door a line special that executes some script; this script will check to see if the player has at least 50 souls in their inventory; if so, open the door, otherwise maybe show them some sort of message (such as "you need 50 souls to open this door")

Hope that makes sense! I guess when I put it into 3 little bullet points I make it sound simple, but if it's your first time doing any of these things then it understandably might not be quite so simple. So... ask more questions if you have them :D Even things I think I know how to do with DECORATE I often run into problems with and have to resort to the wiki a lot, so definitely don't hesitate to ask.

everennui said:

1. What do I need to do/understand/learn to learn ACS Scripting?

2. I just don't know how to call upon the program to start it.

3. What I would really like to do is create a script for monster's to drop "souls" (little balls) that the player collects to open chests, or unlock a special door in a map. I don't know if it's possible or not.

4. Is there an ACS Bible or anything like that?

5. That wiki is for ZDoom. I know they're very similar, but it makes me maybe a little more cautious about compatibility. For example... creating slopes in gzdoom is a lot easier in UDMF.

6. GEZ. I know I've seen your name on something. I'm drawing a blank at the moment.

1. Learn basics from ZDoom wiki (all pages linked at the bottom of the main page about ACS) or any C tutorial (as ACS is based on C), gradually move from simple things to more elaborate ones, search the ZDoom wiki whenever you need something particular.

2. What?

3. Definitely it is possible. You'll have to use some DECORATE and possibly LOCKDEFS. Implementation in ACS alone might be possible, but somewhat unclean and I wouldn't recommend it.

4. Nothing better than the ZDoom wiki.

5. Compatibility between ZDoom and GZDoom is something you shouldn't worry about at all. Their advanced features (ACS, DECORATE, playing maps in UDMF format...) are usually incompatible with other ports, though.

6. Notably, he's the co-author of SLADE3.

I'm having a really difficult time understanding how people set a linedef height.

I've stripped Cocka's swingingdoor.wad of all script and everything appears to be the same. So I know that the scripting is only used to actually get the doors to physically swing.

without scripts.

I've been able to offset the bottom up by using the, "sidef offset" option under the linedef properties.

A few things I've noticed. The actual lines themselves are not a seperate sector in the dummy sector. They are joined.

Despite setting my lines up the same way under properties, my lines are seethrough on the other side.

I also don't no how to offset the texture from the top.

Edit: Since I've joined the lines into the dummy sector the line actually creates a problem like I had earlier with the ceiling slopes.

everennui said:

I'm having a really difficult time understanding how people set a linedef height.

That's because they don't. Linedefs don't have heights, they're 2D objects defined by X and Y coordinates of their endpoint vertices.

You may offset middle textures of 2-sided linedefs by changing their Y offset in the sidedef tabs. By setting "Jump over railing" flag, you may also make them blocking, which is how you make solid single-linedef Polyobjects. And that's about it.

everennui said:

I also don't no how to offset the texture from the top.

If the "Lower unpegged" flag is set, the middle texture will be offset from the bottom. If it's unset, the middle texture will be offset from the top.

scifista42 said:

That's because they don't. Linedefs don't have heights, they're 2D objects defined by X and Y coordinates of their endpoint vertices.

You may offset middle textures of 2-sided linedefs by changing their Y offset in the sidedef tabs. By setting "Jump over railing" flag, you may also make them blocking, which is how you make solid single-linedef Polyobjects. And that's about it.
If the "Lower unpegged" flag is set, the middle texture will be offset from the bottom. If it's unset, the middle texture will be offset from the top.

Unchecking the lower unpegged box did what I was looking for thank you so much. ...but what if I want to do both bottom and top? ...like Cocka's example in swingingdoor.wad? (This screenshot is just of the linedefs. I have stripped the wad of all scripting.)

How is this accomplished?

everennui said:

but what if I want to do both bottom and top?

Pick either top or bottom pegging (you can't both), and adjust the sidedef's Y offset accordingly to make the texture appear floating a fixed amount of units either below the ceiling or above the ground.

scifista42 said:

Pick either top or bottom pegging (you can't both), and adjust the sidedef's Y offset accordingly to make the texture appear floating a fixed amount of units either below the ceiling or above the ground.

I can't find the Y offset. I'm in UDMF. I selected Upper Unpegged and gave the Sidedef offset a negative value of -3 which drops it 3 pixels down from the top, but I don't see any option for Y offset. Do I find that through the linedefs? I don't have to mess with theight of the dummy sector, right? ...because that's not really doing anything.

everennui said:

I can't find the Y offset. I'm in UDMF. I selected Upper Unpegged and gave the Sidedef offset a negative value of -3 which drops it 3 pixels down from the top, but I don't see any option for Y offset. Do I find that through the linedefs? I don't have to mess with theight of the dummy sector, right? ...because that's not really doing anything.

That's what you've found. For a wall texture, X offset is horizontal and Y offset is vertical.