CTF-Panamax [FINAL]

Tutorials and discussions about Mapping - Introduce your own ones!
User avatar
Feralidragon
Godlike
Posts: 5489
Joined: Wed Feb 27, 2008 6:24 pm
Personal rank: Work In Progress
Location: Liandri

Re: WIP: CTF-Panamax

Post by Feralidragon »

It's looking like a very interesting map, especially around the way you're texturing it and placing all the containers on top of each other, it already feels very atmospheric. :gj:
User avatar
fudgonaut
Adept
Posts: 363
Joined: Sat Oct 05, 2013 7:20 am
Personal rank: Easy Target
Location: "The Butthole of the World"
Contact:

Re: WIP: CTF-Panamax

Post by fudgonaut »

Feralidragon wrote:It's looking like a very interesting map, especially around the way you're texturing it and placing all the containers on top of each other, it already feels very atmospheric. :gj:
Thank you! It's coming along and I'm 95%+ done with geometry and textures. Of course, then I look at CTF-Blice and I weep at how amazing it looks...
User avatar
fudgonaut
Adept
Posts: 363
Joined: Sat Oct 05, 2013 7:20 am
Personal rank: Easy Target
Location: "The Butthole of the World"
Contact:

Advice for pathing up/down steep stairs

Post by fudgonaut »

The stairs I've made throughout the level are very steep, based on several ladder tutorials I've read.
stairs.jpg
My first attempt at pathing these is meeting with poor results. I've tried several combinations of pathing nodes (incremental node adjustment, mid-stair nodes, etc) without success. I can get bots go down (jump down) one set of stairs, but not another set even though their pathnode placement is identically mirrored. I haven't even tried getting bots up the stairs yet.

I suspected from the beginning that pathing was going to be a problematic for these... But they really add to the look/feel of the level, so I don't want to abandon them if possible (not to mention the amount of work it will take to implement a replacement).
steep-stairs.jpg
Does anyone have tips or map examples they can share that might help me find a decent pathing solution?


EDIT: After much trial and error, I was finally able to get the bots to go down that troublesome flight of stairs. If I replicate the PathNode placement with matching height/distance for each staircase, it should work out.

Even though I've seen other maps with pathing for steeper stairs & shorter steps (CTF-FNB-SpacePods), I still suspect getting bots to go up my stairs will be much harder. I'm going to test, but I may have to re-engineer the staircases anyway. :noidea

PATHING QUESTION 1: I have two routes near each other, if I want the bots to have an equal chance of taking either, do I create an AlternatePaths with (equal weight) for each, and a pathnode at the midpoint between them? If a PathNode is equidistant to two other PathNodes, will bots always choose one path or do they have a 50% chance of taking either?
PATHING QUESTION 2: What number does the SelectionWeight represent? Does it represent UU or is it arbitrary?
PATHING QUESTION 3: Can I place an AlternatePath further along a series of nodes that already has an AlternatePath, so that it can branch off?
PATHING QUESTION 4: Does it matter where an AlternatePath is placed along a route? Does it have to be at the start of a route, or can it be anywhere along the route?

Sorry for all these questions, I've been reading through pathing info but I'm finding it hard to absorb. Thanks in advance for any info!
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: WIP: CTF-Panamax

Post by sektor2111 »

In that image, I suppose that path is without usage, you should track paths first and if exist a line, check it using "Show Paths" in ViewPort (XC_EditorAdds and/or MapGarbage), without having a visual confirmation, guessing might head to a failure.
If node is not connected with whatever "dragon-head" placed in top of stairs there won't be nobody from A.I. roaming there. Else that path can follow a jump directive Down-way and nothing for going UP.
For the record, original DevPath in Editor will not link a JumpSpot aka LiftCenter with NOTHING except a subclass of LiftExit - take a look at stock maps - jumpy zone from CTF-Coret, that is a stock sample of a stunt which not many mappers are doing...
You can cut a fragment from map (that with such spot) and I might take a look around it. Only after that I can say that you can use Stock things or you will need News. In 2019 such stunts are possible if stock goes crazy - if paths are really navigable else...

Edit: back from work, took a pain-killer for one of rebels teeth, etc. and I read back.
AlternatePath - lol - more such points = better randomization. As a matter of fact, MapGarbage which I shared last time has a copy of CTF code for sorting AlternatePath - probing chances for both teams 0 1. By pressing build button builder will log chances and AlternatePath sorting like CTFGame (each time button pressed = simulating a Bot respawned) - FlagCarrier is not done yet. We have tools - if we are not using them that's our loss...
SelectionWeight is a number contributor at picking randomization - not exactly UU, just a sort of fake math for being combined with a "FRand()" - take a look at CTFGame and see the code there.
fudgonaut wrote:PATHING QUESTION 4: Does it matter where an AlternatePath is placed along a route? Does it have to be at the start of a route, or can it be anywhere along the route?
Usually it's advisable in some "middle of road" (between flags or closer to middle) unless bot is returning and taking the smaller route if is closer to respawn zone - touching AlternatePath and following the same shortest road - useless case. From such an AlternatePath Bot will go using the shortest road to target (whatever Flag), that's why such points should be far away, at boundary parts of roads in order to make them to follow in a better way those alternate roads. Their usage depends on how are paths generally, unreachable AlternatePaths are discarded. You can do tests here using 100+ times said RememberSpot and ShowPath commands. Put visible signs in map (decorations) in those points that needs testing, move there in game, set RememberSpot and then scan routes with ShowPath from spawn location. If nodes are not with "JumpSpots" but simple routes build from PathNodes, this sort of check is useful to figure how is moving Bot. XC_Engine will unlock routes through JumpSpots as well - useful for advanced testing. For Paths generally take in account a simple hint: Bot should be able to reach a node and to camp there if wants (touching the center of node and making that point "taken"), that's a reachable route mapped well by Editor.
Here is a small movie (for fitting in forum's rules) showing a test-sample with RememberSpot and ShowPath in stock map DM-Deck16][ - probing route from UT_FlakCannon nearby slime-zone to ut_biorifle. Movie is a bit explained with a subtitle.
User avatar
fudgonaut
Adept
Posts: 363
Joined: Sat Oct 05, 2013 7:20 am
Personal rank: Easy Target
Location: "The Butthole of the World"
Contact:

Re: WIP: CTF-Panamax

Post by fudgonaut »

Sorry about your tooth...

Thank you for all the information - pathing is still murky in my mind - but this helps clarify things. I believe this info will help me set up AlternatePaths better. I'll get to work on it tonight.

Do you know of any good map examples of pathing that get bots to go UP steep staircases? I have a feeling that is going to be my biggest challenge (why did I make stairs, so many stairs...)
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: WIP: CTF-Panamax

Post by sektor2111 »

LiftExit PainPath LiftExit (all three having the same LiftTag defined) - this is a "brute force" where you can simply test if Bot is able to climb a ramp or will loop there trying to get to the next point.
In CTF-Coret there is no ramp... but if you check well, morons are taking that route - kickers are doing the task here without to have anything with Bot. Their purpose is "kidnapping" bot and dropping it like a rock. Without kickers they will only try forever to navigate in that zone with no luck. Imagine now... stairs, there - depending on step-height, they might use that piece of road. Stairs are not that bad after all.
User avatar
papercoffee
Godlike
Posts: 10443
Joined: Wed Jul 15, 2009 11:36 am
Personal rank: coffee addicted !!!
Location: Cologne, the city with the big cathedral.
Contact:

Re: WIP: CTF-Panamax

Post by papercoffee »

sektor2111 wrote:LiftExit PainPath LiftExit (all three having the same LiftTag defined) - this is a "brute force" where you can simply test if Bot is able to climb a ramp or will loop there trying to get to the next point.
Oh that's good to know ...they will walk up quickly, I see. :mrgreen:
I thought LiftExit LiftCentre LiftExit will do the trick.
User avatar
Barbie
Godlike
Posts: 2792
Joined: Fri Sep 25, 2015 9:01 pm
Location: moved without proper hashing

Re: WIP: CTF-Panamax

Post by Barbie »

papercoffee wrote:I thought LiftExit LiftCentre LiftExit will do the trick.
According to the code of PainPath (what extends LiftCenter) the only difference to LiftCenter is the handling of the Zone's DamageType if it has bPainZone=True. If you put a PainPath in a normal zone it should work exactly like a LiftCenter.
"Multiple exclamation marks," he went on, shaking his head, "are a sure sign of a diseased mind." --Terry Pratchett
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: WIP: CTF-Panamax

Post by sektor2111 »

Yes, LiftCenter might do the same thing but... because here we don't have any lift perhaps PainPath code works faster (see SpecialHandling from both classes) - even there is nothing to do with any damage. I used PainPath also for making them to jump down - yes, is doable, regarding to what some genius was saying about "knowing everything about Editor" and saying that it's a heavy pathing task. Anytime you can make a Bot to jump from a building and even dying crushed - but... What for ? And you can try to figure if they can move on some stairs by brute-forcing paths in that zone because definitely you need some links which you need to be sure about their existence, else all that road it's just broken.

Alternate method is a sort of teleporter (not really for teleporting) - Higor did that stuff (FV_LinkedPoint aka whatever you want as name), it works in the same way as swJumpPad toward navigation directives, these two bad-ass nodes can be connected as One-Way disregarding geometry around and brute-forcing pawn to navigate with any matter. This is very flexible, might do various connections where Editor using Scout will never do even if Bot can manage jumping over there.

Another way is XC_EditorAdds - mapping paths with the same directives as a Teleporter who can demand a connection which Editor is not doing, but our Bot can manage navigation through that area. Such a map is MH-Freeky_Rv19_1 running in multi-server MonsterGamingServer concerning connection to train-station area, MBot has no issues there, else I could use a kicker - or adding miscellaneous extra-tweaks in run-time.
User avatar
fudgonaut
Adept
Posts: 363
Joined: Sat Oct 05, 2013 7:20 am
Personal rank: Easy Target
Location: "The Butthole of the World"
Contact:

Re: WIP: CTF-Panamax

Post by fudgonaut »

More great information, thank you Sektor2111 and Barbie.

Putting AlternatePath further along the chains has solved one issue: I've got bots taking several routes now. The routes are mostly downhill for Team 0 until the center room. I won't really be able to observe if/how bots go up stairs until I duplicate the pathing for the other side of the map (where Team 0 will be going mostly uphill):
red-route-1.jpg
I am operating under this assumption:

- A Team 0 bot will see an AlternatePath (set to Team 1, bReturnOnly=false) and follow it depending on its SectionWeight
- A Team 1 bot taking the same route in the opposite direction will see this AlternatePath as just another Pathnode.
red-vs-blue.jpg
Is this correct?


Not high on my list right now, but eventually I want to add smoke (large, slow, puffy grey) to the smokestacks. I noticed some maps using SmokeGenerator but I have not found any tutorials on its use. Is this the right actor to use in that situation?
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: WIP: CTF-Panamax

Post by sektor2111 »

Selecting AlternatePath... it's harder to predict sorting it, that's why I'm using builder because... works faster - just pushing button and tracing log. In game it's heavy to track everything.
Flag carrier returning at home with Flag has more options toward sorting AlternatePath if this point is "bTwoWay" Team 1 or 0 Carrier will need more dodging from enemy attempting to reach at home. A single cons is here, chances are 50% for such a dodge, not 80% like for common attack.
Flag says:

Code: Select all

				B = Bot(Holder);
				if ( B != None )
				{
					B.AlternatePath = None; //Reject a potential AlternatePath previously sorted because I went carrier
					if ( FRand() < 0.5 ) //around 50% for an AlternatePath
					{
//All sorting formula .... bTwoWay ... etc
....
In CTFGame controller

Code: Select all

if ( FRand() < 0.8 ) //bigger chances
	{
		for ( N=Level.NavigationPointList; N!=None; N=N.nextNavigationPoint )
			if ( N.IsA('AlternatePath') && (AlternatePath(N).team != B.PlayerReplicationInfo.team)
				&& !AlternatePath(N).bReturnOnly )
...
Then if there is no route computed for AlternatePath Bot will track a direct shortest route to whatever Flag (Home, Enemy). Happens when map is requesting translocator and whatever arena has no translocator. Routes being removed by TranslocDest code itself, Bot will race to Flag ignoring this AlternatePath. Look here - adding remarks:

Code: Select all

function bool FindPathToBase(Bot aBot, FlagBase aBase)
{
	if ( (aBot.AlternatePath != None) //If Bot has an AlternatePath sorted
		&& ((aBot.AlternatePath.team == aBase.team) || aBot.AlternatePath.bTwoWay) ) //and if it's matching team or ... a two-way one (no team in here)
	{
		if ( aBot.ActorReachable(aBot.AlternatePath) ) //If it's immediately reachable
		{
			aBot.MoveTarget = aBot.AlternatePath; //Move there
			aBot.AlternatePath = None; //and remove it - Bot keeps moving to MoveTarget previously assigned
		}
		else
		{
			aBot.MoveTarget = aBot.FindPathToward(aBot.AlternatePath); //If not reachable find path to this AlternatePath
			if ( aBot.MoveTarget == None ) //If no path (MoveTarget) returned
			{
				aBot.AlternatePath = None; //Reject AlternatePath
				aBot.MoveTarget = aBot.FindPathToward(aBase); //And try to find Path to whatever base according to attraction function called by Bot
			}
		}
	}
	else						
		aBot.MoveTarget = aBot.FindPathToward(aBase); //else find path to base with any matter

	return (aBot.bNoClearSpecial || (aBot.MoveTarget != None));
}
To summarize: Bot is trying a route through an AlternatePath if possible, if it's not possible will move through the shortest way to the goal.
As an Information toward AlternatePaths which are not used (sorted) they are working like a default NavigationPoint - so to speak USELESS as AlternatePaths in other games out of CTFGame, unless are customized for these actors, but are usable as simple Network nodes in DM not as AlternatePaths - that's a myth in DM, MH, etc. For DM there is nothing in stock for toggling paths, but community has such things, if not, I definitely have some toys written, suffice for my needs, but DM it's not ON-Topic Here.
fudgonaut wrote: Not high on my list right now, but eventually I want to add smoke (large, slow, puffy grey) to the smokestacks. I noticed some maps using SmokeGenerator but I have not found any tutorials on its use. Is this the right actor to use in that situation?
These for me are a sort of spam actors generating garbage objects but if server running map has limitations in keeping an empty game, it should not be a big problem. Sample of some SmokeGenerator if I'm not mistaking is AS-Frigate - generator is triggered and will produce some smoke for a while. Setup a temp cube-map put a generator there tagged with something (word) and add a trigger with Event matching TAG from generator, move to trigger, see what happens.
User avatar
fudgonaut
Adept
Posts: 363
Joined: Sat Oct 05, 2013 7:20 am
Personal rank: Easy Target
Location: "The Butthole of the World"
Contact:

XC_ENgine and Pathing help

Post by fudgonaut »

I decided to strip all NavigationPoints (including pickups) from the map and start from scratch. I installed XC_Engine 23 so I could take advantage of the new reachspecs stuff.

WOW so much nicer that the default paths – so much easier to see in the viewports. I was able to re-path the entire map last night.

However, when I rebuid everything and test the map, the bots don’t go anywhere. They occasionally run between PlayerStarts, and that’s it, even though there are several routes connecting the opposing flags.

I'm using regular PathNodes and testing by click 'Play Map' through UnrealEd.exe. My assumption is that I am missing a step (or steps) in the build process?

Forgive my lack of knowledge about how to use XC_Engine. Do I need to be doing anything with UCC2.exe or XC_launch.exe?
User avatar
sektor2111
Godlike
Posts: 6403
Joined: Sun May 09, 2010 6:15 pm
Location: On the roof.

Re: WIP: CTF-Panamax

Post by sektor2111 »

This is new to me. I used a custom Scout yesterday. I don't know very exactly how are build paths with a None/Default scout by XC builder, unless a/some routes went broken for some reason causing an "isolation" in areas. Use RememberSpot - ShowPath sequentially and look if network is not rammed in certain points for some reason. Look for paths with a single line...

For me was nasty to prevent creating too many paths... I have to admit that I did not test a new network with plain UT, but I'll do that...
Edit: Tested - Plain DevPath
Running properly without crash or holes... XC_EditorAdds from XCv23 do seems to work properly so far - big areas have clearly an advantage.
User avatar
fudgonaut
Adept
Posts: 363
Joined: Sat Oct 05, 2013 7:20 am
Personal rank: Easy Target
Location: "The Butthole of the World"
Contact:

Re: WIP: CTF-Panamax

Post by fudgonaut »

sektor2111 wrote: Look for paths with a single line
Single PathNode lines are appearing on…you guessed it…the steep stairs. There are four different heights of staircases, the single lines appear mostly on the tallest size (upper left in picture) which are 384 UU high between the top step and bottom step.
stairs.jpg
I'm probably going to reinstall UT without XC stuff -- at this point I don't know enough about how to use its features to my advantage -- and without it at least my bots were moving around...

I think the best course of action is to re-work stairs geometry in a test map until the bots can use them, and hopefully the result will not require me to make dramatic changes to the surrounding geometry.

Also, Sektor2111, I very much appreciate the time and effort you've put into helping me -- if I manage to get this map working and release it, you will definitely get a big thanks/credit in the readme!
User avatar
Barbie
Godlike
Posts: 2792
Joined: Fri Sep 25, 2015 9:01 pm
Location: moved without proper hashing

Re: WIP: CTF-Panamax

Post by Barbie »

fudgonaut wrote:the best course of action is to re-work stairs geometry in a test map until the bots can use them
That can be the key, yes. AFAIR Bots cannot use the same height of stairs as player can.
Take for example attached map: Bots don't grab the ShieldBelt here, but players can. If you lower the distance between the steps a bit, Bots will instantly grab the ShieldBelt, even without any NavigaionPoints.
TestStairHeight.jpg
Attachments
TestStairHeight.unr.7z
(4.4 KiB) Downloaded 30 times
"Multiple exclamation marks," he went on, shaking his head, "are a sure sign of a diseased mind." --Terry Pratchett
Post Reply