ZScript "Standard Library" - Brainstorming

Post your example zscripts/ACS scripts/etc here.
Forum rules
The Projects forums are only for projects. If you are asking questions about a project, either find that project's thread, or start a thread in the General section instead.

Got a cool project idea but nothing else? Put it in the project ideas thread instead!

Projects for any Doom-based engine (especially 3DGE) are perfectly acceptable here too.

Please read the full rules for more details.
User avatar
Major Cooke
Posts: 8170
Joined: Sun Jan 28, 2007 3:55 pm
Preferred Pronouns: He/Him
Location: QZDoom Maintenance Team

Re: ZScript "Standard Library" - Brainstorming

Post by Major Cooke »

dpJudas
 
 
Posts: 3037
Joined: Sat May 28, 2016 1:01 pm

Re: ZScript "Standard Library" - Brainstorming

Post by dpJudas »

ZZYZX wrote:I'm actually talking about whatever coordinate that often gets stored in the shaders as W and means distance from screen plane to the point (it's just that there is no vector4 IIRC and just easier to store it as Z, as Z is unused otherwise).
That's needed so that user code can take the -1..1 coordinates and draw with corresponding virtual screen size to scale their pictures according to the distance to the point.
Yes, but the problem is that the depth is unknown when you only have a Vector2 for the screen position. However, if you multiply the depth value with the vector returned by the unproject function I listed, then you get the vector you are interested in (which is exactly what the SSAO pass does, using the zbuffer to get the depth).
ZZYZX wrote:What does the regular HUD code do in this case? Does it render twice? It's not supposed to work outside of the drawing hooks, so maybe just use whatever matrix that's active in currently drawn half? (this may as well make zero sense because I don't know how VR works really)
It depends a bit on which VR mode, but it renders the HUD on a plane in the 3D world. I suppose the screen coordinate returned by a project function just needs to be relative to this plane. Simpler to solve than I expected, actually.
User avatar
ZZYZX
 
 
Posts: 1384
Joined: Sun Oct 14, 2012 1:43 am
Location: Ukraine
Contact:

Re: ZScript "Standard Library" - Brainstorming

Post by ZZYZX »

dpJudas wrote:Yes, but the problem is that the depth is unknown when you only have a Vector2 for the screen position. However, if you multiply the depth value with the vector returned by the unproject function I listed, then you get the vector you are interested in (which is exactly what the SSAO pass does, using the zbuffer to get the depth).
I was talking about project, where you give it X/Y/Z and it returns you screen X/Y + depth. That doesn't sound like impossible, I had this written in ACS.
Unproject can simply return count of angles for X and Y coordinates respectively. I think. So that the user can use those values to calculate vectors, coordinates, and everything. Although, given camera pitch and the software renderer...
Last edited by ZZYZX on Thu Apr 13, 2017 2:45 pm, edited 1 time in total.
dpJudas
 
 
Posts: 3037
Joined: Sat May 28, 2016 1:01 pm

Re: ZScript "Standard Library" - Brainstorming

Post by dpJudas »

Okay, I misunderstood what you wrote then. Thought you meant getting a Z value for the unproject.
User avatar
JPL
 
 
Posts: 523
Joined: Mon Apr 09, 2012 12:27 pm
Contact:

Re: ZScript "Standard Library" - Brainstorming

Post by JPL »

dpJudas wrote:
ZZYZX wrote:I think this should be native and based on the active renderer, in Screen or StatusBar class. Probably sbar, since active statusbar affects viewport size.
Also, it probably should return a vector3 with -1..1 coordinates where 0 is the center of the screen, and Z coordinate would be the distance from the screen plane.
Assuming you're talking about eye/view space, the Z coordinate would always be 1. Getting from there to world space would mean multiplying with the inverse of the world to eye normal matrix (just doing the inverse rotate from Viewpoint is probably easier). To get the point the user clicked at requires a follow up ray shooting.

The code required to do the unproject and project looks like this (in pseudo C++):
(snip)
I'm interested in using this in ZScript, specifically ProjectViewToScreen so I can draw an icon on the player's HUD indicating where an object is in the world. I've translated this sample code into ZScript - faithfully, I'm pretty sure - but the numbers it gives back aren't quite right, which makes sense given that this doesn't seem to account for the player's position and orientation relative to the 3D point given. Is the "viewPos" argument in world space? How is it determined?
User avatar
Major Cooke
Posts: 8170
Joined: Sun Jan 28, 2007 3:55 pm
Preferred Pronouns: He/Him
Location: QZDoom Maintenance Team

Re: ZScript "Standard Library" - Brainstorming

Post by Major Cooke »

Yes, the ViewPos is in world space. It is the coordinates for the player's view screen. Bear in mind that ViewPos is also used for interpolating the camera's movement and keeping things sleek whenever the player moves, and subsequently why attached effects are ahead of the player -- or more specifically the player camera appears to lag behind.

Also used by quakes.

Anyway, already suggested, already on hold.
User avatar
Nash
 
 
Posts: 17434
Joined: Mon Oct 27, 2003 12:07 am
Location: Kuala Lumpur, Malaysia
Contact:

Re: ZScript "Standard Library" - Brainstorming

Post by Nash »

This is from Major Cooke in Discord. Putting it here so it won't get lost.
Major Cooke wrote: By the way, whoever wants cylindrical hitbox detection, ZScript allows it.
It was easier than I thought.

Code: Select all

override bool CanCollideWith(Actor other, bool passive)
{
    if (!passive)
    {
        if (!other)    return false;
        return (Distance2D(other) <= other.radius);
    }
    return true;
}
 
User avatar
Rachael
Posts: 13531
Joined: Tue Jan 13, 2004 1:31 pm
Preferred Pronouns: She/Her
Contact:

Re: ZScript "Standard Library" - Brainstorming

Post by Rachael »

That only works for actor-to-actor collision. You still can't clip walls that way.
User avatar
ZZYZX
 
 
Posts: 1384
Joined: Sun Oct 14, 2012 1:43 am
Location: Ukraine
Contact:

Re: ZScript "Standard Library" - Brainstorming

Post by ZZYZX »

Do you think you are the first guy to implement it? :D
It won't work due to the "player is stuck and tries to run out" handling. When the engine detects that you are in a (square) hitbox of an actor, and that actor is supposed to be blocking, and you run at certain angle, that makes you noclip.
Gez
 
 
Posts: 17833
Joined: Fri Jul 06, 2007 3:22 pm

Re: ZScript "Standard Library" - Brainstorming

Post by Gez »

I think this ought to be included in a standard library, if not in GZDoom itself. It's a variant of the RandomSpawner.
User avatar
Major Cooke
Posts: 8170
Joined: Sun Jan 28, 2007 3:55 pm
Preferred Pronouns: He/Him
Location: QZDoom Maintenance Team

Re: ZScript "Standard Library" - Brainstorming

Post by Major Cooke »

In addition to what ZZYZX said there's also a bunch of other caveats. Bouncing is basically told to get shrekt so you'll have to manually do something about that. Assuming you have things like +BOUNCEONACTORS flags and stuff set up... No, Bounce.Actor won't help you. I tried. It just randomly assplodes at certain angles when it hits. :P

So this is kinda my solution to the whole situation of exploding when it's not supposed to.

Code: Select all

//'waiter' is a variable that ticks down elsewhere, once per tic doing waiter--;
// When it hits 0, it shuts off bTHRUACTORS.
override bool CanCollideWith(Actor other, bool passive)
{ 
    if (!passive)
    {
        if (!other || other is "DWMonster" || other is "DarwinianPlayer") return false;
        if (other is "DWBuilding")
        {
            if (Distance2D(other) <= other.Radius)
            {
                if (waiter > 0)    return false;
                bTHRUACTORS = true;
                waiter = 7;
                angle += 180;
                vel.x *= -1.0;
                vel.y *= -1.0;
                return true;
            }
            return false;
        }
    }
    return true;
}
 
User avatar
Major Cooke
Posts: 8170
Joined: Sun Jan 28, 2007 3:55 pm
Preferred Pronouns: He/Him
Location: QZDoom Maintenance Team

Re: ZScript "Standard Library" - Brainstorming

Post by Major Cooke »

Gez wrote:I think this ought to be included in a standard library, if not in GZDoom itself. It's a variant of the RandomSpawner.
Oooh, that's actually nice. I agree. But I dunno if Xaser's still planning on doing this thing or not.
User avatar
Rachael
Posts: 13531
Joined: Tue Jan 13, 2004 1:31 pm
Preferred Pronouns: She/Her
Contact:

Re: ZScript "Standard Library" - Brainstorming

Post by Rachael »

We should just do a special forum library. Everyone makes a thread and contributes their code - in

Code: Select all

 or .pk3 format - and people can respond however they want. Like the resources section.
User avatar
Major Cooke
Posts: 8170
Joined: Sun Jan 28, 2007 3:55 pm
Preferred Pronouns: He/Him
Location: QZDoom Maintenance Team

Re: ZScript "Standard Library" - Brainstorming

Post by Major Cooke »

Sounds great to me! And we can get feedback from anyone without them trying to edit it like it's a wiki page. :P
User avatar
Rachael
Posts: 13531
Joined: Tue Jan 13, 2004 1:31 pm
Preferred Pronouns: She/Her
Contact:

Re: ZScript "Standard Library" - Brainstorming

Post by Rachael »

I'll take care of it later on when I get back to my computer then. If I forget please feature request it.
Post Reply

Return to “Script Library”