Chex Quest Fan Forums

General => General Discussion => Off Topic Discussions => Topic started by: Gustavo6046 on July 19, 2016, 05:06:32 PM

Title: A ZDoom Bot-Pathing Idea
Post by: Gustavo6046 on July 19, 2016, 05:06:32 PM
No, I don't mean Best-Ever's dead service. :P

By the way, who does remember the Quake 3 bot, or the Zeus Bot from Quake 1, or the original Cajun Bot for Doom (the one that acted awesome, until ZDoom autogenerated such nodes in a dumb way)?

These bots were awesome cooperating -- or challenging -- companies to your own ingame character. They were awesome in kicking others' or your a**. Most of them weren't this good though, always failing because of some dumb code, et al.

I do propose however two nice ways of having ZDoom have nodes:
1. Addnode, ExportNodes, ImportNodes and RemoveNode commands. They would have pathnoding manually possible.
[n]2.[/b] Add a node in the center of every sector a bot can crawl into, and also add nodes everywhere a node crosses with another in a grid, as long as it's in some walkable sector or in a sector at all. Also add pickup nodes at inventory items (duh) around. And finally, there must be repulsing nodes placed on any solid decoration placed in the map.

Sorry but you are not allowed to view spoiler contents.
Title: Re: A ZDoom Bot-Pathing Idea
Post by: 75 on July 19, 2016, 08:41:44 PM
This video has a pretty good summary of how several games implemented bots, I think Quake 3's and Unreal's bots have some interesting ideas.

EDIT: The CQFF youtube integration failed mysteriously for this post. I put both the [youtube] tag and the URL in case something weird happens again.
Title: Re: A ZDoom Bot-Pathing Idea
Post by: Gustavo6046 on April 23, 2017, 11:34:35 AM
My bad for the necrobump, but I think it wouldn't fit in another topic since this needs context.

In the Perfect Node Algorithm -Quest, I've been looking on how a normal person would play the map. EVERY node plopping must make sure that it plops nodes if and only if there are no nodes closer than 64 to it.

For starts, make a list L that checks for duplicates.

1. For each player start A in the map, for each of the double-sided linedefs in A's sector where the other adjacent sector is walkable (condition Alpha below), do step 2 (using the linedef's normal LenghtOne(linedef.Position - Mean(sector.Vertexes)) and the mean of it's two vertices as position), unless A's sector was already used in step 1.
2. From this normal and position, add nodes every 96 units until it finds a wall or a sector that fits condition Alpha, then plop a node 24 units from that wall.
Condition Alpha is:
3.- At the hit sector, and every other sectors traversed by nodes, if the sector is not in L, append it to L and recurse for every double-sided linedef that pertains to the sector, and for each linedef B, if B's other adjacent sector suits Condition Alpha above, repeat the process from Step 2, this time using B's normal LenghtOne(B.Position - Mean(sector.Vertexes)) and the mean of it's two vertices as position.