ZScript "Standard Library" - Brainstorming
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.
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.
-
- Posts: 8196
- Joined: Sun Jan 28, 2007 3:55 pm
- Preferred Pronouns: He/Him
- Location: QZDoom Maintenance Team
-
-
- Posts: 3134
- Joined: Sat May 28, 2016 1:01 pm
Re: ZScript "Standard Library" - Brainstorming
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: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.
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.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)
-
-
- Posts: 1384
- Joined: Sun Oct 14, 2012 1:43 am
- Location: Ukraine
Re: ZScript "Standard Library" - Brainstorming
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.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).
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.
-
-
- Posts: 3134
- Joined: Sat May 28, 2016 1:01 pm
Re: ZScript "Standard Library" - Brainstorming
Okay, I misunderstood what you wrote then. Thought you meant getting a Z value for the unproject.
-
-
- Posts: 523
- Joined: Mon Apr 09, 2012 12:27 pm
Re: ZScript "Standard Library" - Brainstorming
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?dpJudas wrote: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.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.
The code required to do the unproject and project looks like this (in pseudo C++):
(snip)
-
- Posts: 8196
- Joined: Sun Jan 28, 2007 3:55 pm
- Preferred Pronouns: He/Him
- Location: QZDoom Maintenance Team
Re: ZScript "Standard Library" - Brainstorming
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.
Also used by quakes.
Anyway, already suggested, already on hold.
-
-
- Posts: 17465
- Joined: Mon Oct 27, 2003 12:07 am
- Location: Kuala Lumpur, Malaysia
Re: ZScript "Standard Library" - Brainstorming
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; }
-
- Posts: 13797
- Joined: Tue Jan 13, 2004 1:31 pm
- Preferred Pronouns: She/Her
Re: ZScript "Standard Library" - Brainstorming
That only works for actor-to-actor collision. You still can't clip walls that way.
-
-
- Posts: 1384
- Joined: Sun Oct 14, 2012 1:43 am
- Location: Ukraine
Re: ZScript "Standard Library" - Brainstorming
Do you think you are the first guy to implement it?
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.
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.
-
-
- Posts: 17934
- Joined: Fri Jul 06, 2007 3:22 pm
Re: ZScript "Standard Library" - Brainstorming
I think this ought to be included in a standard library, if not in GZDoom itself. It's a variant of the RandomSpawner.
-
- Posts: 8196
- Joined: Sun Jan 28, 2007 3:55 pm
- Preferred Pronouns: He/Him
- Location: QZDoom Maintenance Team
Re: ZScript "Standard Library" - Brainstorming
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.
So this is kinda my solution to the whole situation of exploding when it's not supposed to.
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;
}
-
- Posts: 8196
- Joined: Sun Jan 28, 2007 3:55 pm
- Preferred Pronouns: He/Him
- Location: QZDoom Maintenance Team
Re: ZScript "Standard Library" - Brainstorming
Oooh, that's actually nice. I agree. But I dunno if Xaser's still planning on doing this thing or not.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.
-
- Posts: 13797
- Joined: Tue Jan 13, 2004 1:31 pm
- Preferred Pronouns: She/Her
Re: ZScript "Standard Library" - Brainstorming
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.
-
- Posts: 8196
- Joined: Sun Jan 28, 2007 3:55 pm
- Preferred Pronouns: He/Him
- Location: QZDoom Maintenance Team
Re: ZScript "Standard Library" - Brainstorming
Sounds great to me! And we can get feedback from anyone without them trying to edit it like it's a wiki page.
-
- Posts: 13797
- Joined: Tue Jan 13, 2004 1:31 pm
- Preferred Pronouns: She/Her
Re: ZScript "Standard Library" - Brainstorming
I'll take care of it later on when I get back to my computer then. If I forget please feature request it.