CTF-MeinKraft][ 2015-04-11 Updated to V3
Re: CTF-MeinKraft][
Yeah, step height isn't a replicated variable.
It's best to fix it with invisible semisolid stairs lol.
In the meantime I'll start coding the optimized blocks.
It's best to fix it with invisible semisolid stairs lol.
In the meantime I'll start coding the optimized blocks.
- FraGnBraG
- Inhuman
- Posts: 930
- Joined: Sun Jun 13, 2010 5:13 pm
- Personal rank: Good news everyone!
- Location: Canada
- Contact:
Re: CTF-MeinKraft][
I haven't had a chance to check out the new map yet, but regarding bots and FC i would suggest that you abandone alternate path actor (it does not work properly) and instead use Bot40's SmartAlternatePath actor. You can get the actor from any FNB CTF map. It actually works quite well at the balancing the routes during the match... You do have to play with the values at first though, until you get them right -- as for exactly how it works
This Bot40's code btw - if you use this you better give him CREDIT
(simple and practical i'm sure, i think sometimes there is some negative side effects if the path network is already too big...
anyways, just putting it here for the curious coders and so Higor and sektor2111 can check it if they have not already seen it
look forward to playing the new MC map!
Cheers
This Bot40's code btw - if you use this you better give him CREDIT
(simple and practical i'm sure, i think sometimes there is some negative side effects if the path network is already too big...
anyways, just putting it here for the curious coders and so Higor and sektor2111 can check it if they have not already seen it
Code: Select all
//=============================================================================
// SmartAlternatePath.
// When touched, the selection weight of all other alternatepaths increases by AdjustAmount
//=============================================================================
class SmartAlternatePath expands AlternatePath;
var(AlternatePath) float AdjustAmount; //Amount to adjust selection weight by
var float ReTouchTime; //Delay so selection weights don't get altered many times if we get touched more than once in rapid succession
function Touch( actor Other ) {
local SmartAlternatePath A;
if ( Level.TimeSeconds - ReTouchTime >= 4 )
ReTouchTime = Level.TimeSeconds;
foreach AllActors( class 'SmartAlternatePath', A )
if (A != Self)
A.SelectionWeight += 0.5;
}
Cheers
- EvilGrins
- Godlike
- Posts: 9657
- Joined: Thu Jun 30, 2011 8:12 pm
- Personal rank: God of Fudge
- Location: Palo Alto, CA
- Contact:
Re: CTF-MeinKraft][
Which pit? The one in front of each castle or that whole mess under the bridge?papercoffee wrote:Did you fix the pit? Bots tend to jump into it ...even your own team members do this with pleasure.
My bots handled both just fine.
http://unreal-games.livejournal.com/
Smilies · viewtopic.php?f=8&t=13758medor wrote:Replace Skaarj with EvilGrins
Re: CTF-MeinKraft][
This is a very alpha prototype of the optimized blocks.
What you need to do:
- Specify if it's touching a solid wall from a certain direction (so it treats that direction as VisBlocking)
- Insert a CacusBlockController actor for network replication support (and avoid log warning spam, i did this on purpose)
- Not overlap them!!!
What the block does:
- Neighbour detection
- Automatic VisBlocking capability detection on blocks (translucent and modulated blocks are not VisBlocking)
- Automatic self-hiding based on neighbour state
- Spawn a fragmentation spawner
What the controller does (you may insert more than one):
- Hold 4096 block references
- Block detection via radius and/or zone
- Replicates block status in a compressed fashion (INT[128] array) using bitwise operators to encode/decode
- Hides/unhides blocks on clients based on status
What the fragmentation spawner does:
- Generate/replicate a random seed
- Spawn all the fragments (8) using the same semi-random directions/velocities on both client/server
- Doesn't spawn fragments on dedicated server boxes, only clients
Reference: viewtopic.php?f=15&t=4935&p=52332
================
What's to be added
- Back cube render rejection, using the controller to grab the player camera's location and rotation.
- Sound
- Half block model support
- Maybe something else
What you need to do:
- Specify if it's touching a solid wall from a certain direction (so it treats that direction as VisBlocking)
- Insert a CacusBlockController actor for network replication support (and avoid log warning spam, i did this on purpose)
- Not overlap them!!!
What the block does:
- Neighbour detection
- Automatic VisBlocking capability detection on blocks (translucent and modulated blocks are not VisBlocking)
- Automatic self-hiding based on neighbour state
- Spawn a fragmentation spawner
What the controller does (you may insert more than one):
- Hold 4096 block references
- Block detection via radius and/or zone
- Replicates block status in a compressed fashion (INT[128] array) using bitwise operators to encode/decode
- Hides/unhides blocks on clients based on status
What the fragmentation spawner does:
- Generate/replicate a random seed
- Spawn all the fragments (8) using the same semi-random directions/velocities on both client/server
- Doesn't spawn fragments on dedicated server boxes, only clients
Reference: viewtopic.php?f=15&t=4935&p=52332
================
What's to be added
- Back cube render rejection, using the controller to grab the player camera's location and rotation.
- Sound
- Half block model support
- Maybe something else
- Attachments
-
- Block_Alpha.7z
- BlockTest.unr
CacusBlock.u - (8.86 KiB) Downloaded 51 times
- sektor2111
- Godlike
- Posts: 6402
- Joined: Sun May 09, 2010 6:15 pm
- Location: On the roof.
Re: CTF-MeinKraft][
As I could see and understand AlternatePath, this thing is randomized with 80% chances to get sorted by Bot respawned and 50% for Bot having Flag. Algorithm from CTFGame looks too complex vs random created. I experimented a simple CTFNode which has an internal timer. With internal timer this node look for a Flag Carrier. When carrier is detected all PATHS are free immediately else will react randomly at another time interval (around 30 seconds) blocking and/or unblocking path. Things can be configured more or less smarty. If is wise placed will randomize attack so cute - it's all about bSpecialCost, also it can be coded to take in account distance between Flags and Pawn between Enemy Flag or any factor increasing A.I. efficiency.
Re: CTF-MeinKraft][
Guys...
He's using AssaultRandomizers...
Cubes:
On a bright note, my cube system has reduced the mesh render calls from 400-510 to 250-380 when watching the whole middle of the map, which has reduced render time in 2.5 milliseconds.
Sure, it's almost nothing but the entire system itself allows the mapper to use ridiculous amounts of blocks now.
BSP:
Map is broken, not in release state, play it a bit and you'll find the endless fall...
I'm gonna apply the "semisolid terrain over substractive base" technique which is a barely used yet standard for minimum functionality in outdoor maps.
I'll also rezone the middle portals and separate the unreachable zone using a different method.
Other:
I might replace these AssaultRandomizers with something else that operate on their own and I'll also add a dependancy to XC_Siege_r3.u file as it contains the necessary mapping resources to make the map work on Siege and fix the paths so they don't require extra BSP build for jumping over obstacles.
EDIT:
After rezoning mid, watching from blue gate into red base now takes 19ms to render instead of 22ms on my computer.
I have also turned the whole upper hills into substractives + semisolids and they're perfectly mirrored on both sides.
EDIT2:
Bots can now walk on my blocks, and said blocks don't use an Actor channel, which means lowering it from 600 to 150 on a normal server.
He's using AssaultRandomizers...
Cubes:
On a bright note, my cube system has reduced the mesh render calls from 400-510 to 250-380 when watching the whole middle of the map, which has reduced render time in 2.5 milliseconds.
Sure, it's almost nothing but the entire system itself allows the mapper to use ridiculous amounts of blocks now.
BSP:
Map is broken, not in release state, play it a bit and you'll find the endless fall...
I'm gonna apply the "semisolid terrain over substractive base" technique which is a barely used yet standard for minimum functionality in outdoor maps.
I'll also rezone the middle portals and separate the unreachable zone using a different method.
Other:
I might replace these AssaultRandomizers with something else that operate on their own and I'll also add a dependancy to XC_Siege_r3.u file as it contains the necessary mapping resources to make the map work on Siege and fix the paths so they don't require extra BSP build for jumping over obstacles.
EDIT:
After rezoning mid, watching from blue gate into red base now takes 19ms to render instead of 22ms on my computer.
I have also turned the whole upper hills into substractives + semisolids and they're perfectly mirrored on both sides.
EDIT2:
Bots can now walk on my blocks, and said blocks don't use an Actor channel, which means lowering it from 600 to 150 on a normal server.
- sektor2111
- Godlike
- Posts: 6402
- Joined: Sun May 09, 2010 6:15 pm
- Location: On the roof.
Re: CTF-MeinKraft][
BAD move !!!Higor wrote:Guys...
He's using AssaultRandomizers...
Code: Select all
ScriptWarning: AssaultRandomizer CTF-MeinKraft][.AssaultRandomizer8 (Function Botpack.AssaultRandomizer.CostEnabled.SpecialCost:0046) Accessed None
ScriptWarning: AssaultRandomizer CTF-MeinKraft][.AssaultRandomizer8 (Function Botpack.AssaultRandomizer.CostEnabled.SpecialCost:004E) Accessed None
ScriptWarning: AssaultRandomizer CTF-MeinKraft][.AssaultRandomizer7 (Function Botpack.AssaultRandomizer.CostEnabled.SpecialCost:0046) Accessed None
ScriptWarning: AssaultRandomizer CTF-MeinKraft][.AssaultRandomizer7 (Function Botpack.AssaultRandomizer.CostEnabled.SpecialCost:004E) Accessed None
ScriptWarning: AssaultRandomizer CTF-MeinKraft][.AssaultRandomizer8 (Function Botpack.AssaultRandomizer.CostEnabled.SpecialCost:0046) Accessed None
ScriptWarning: AssaultRandomizer CTF-MeinKraft][.AssaultRandomizer8 (Function Botpack.AssaultRandomizer.CostEnabled.SpecialCost:004E) Accessed None
ScriptWarning: AssaultRandomizer CTF-MeinKraft][.AssaultRandomizer7 (Function Botpack.AssaultRandomizer.CostEnabled.SpecialCost:0046) Accessed None
ScriptWarning: AssaultRandomizer CTF-MeinKraft][.AssaultRandomizer7 (Function Botpack.AssaultRandomizer.CostEnabled.SpecialCost:004E) Accessed None
ScriptWarning: AssaultRandomizer CTF-MeinKraft][.AssaultRandomizer8 (Function Botpack.AssaultRandomizer.CostEnabled.SpecialCost:0046) Accessed None
ScriptWarning: AssaultRandomizer CTF-MeinKraft][.AssaultRandomizer8 (Function Botpack.AssaultRandomizer.CostEnabled.SpecialCost:004E) Accessed None
ScriptWarning: AssaultRandomizer CTF-MeinKraft][.AssaultRandomizer7 (Function Botpack.AssaultRandomizer.CostEnabled.SpecialCost:0046) Accessed None
Guys, all craps from Assault Game aren't for external usage, capish? Simply Assault(Level.Game) doesn't run in CTF and neither MH or whatever kinda game-type. You can ruin them happily.
- FraGnBraG
- Inhuman
- Posts: 930
- Joined: Sun Jun 13, 2010 5:13 pm
- Personal rank: Good news everyone!
- Location: Canada
- Contact:
Re: CTF-MeinKraft][
SmartAltPath = proven best option for CTF balancing, for years now, many users -- Bot40, IronBlayde, Chrysaor, others, me, etc.
so simple, and you can actually make the little robots take loopy long routes with the flag that they would _never_ otherwise take under normal circumstances...
how to use:
1. determine how many routes you have (lets say there's four routes in each base - long upper middle, short lower middle, short side, long side)
2. finish your paths (without any alt paths) and be sure your routes connect flag to flag.
3. spectate a few matches with 2-4 bots to see what the bot FC does. This should reveal the shortest path. He will usually always use this route.
4. place a SAP in this path leaving the base (find a good spot, obviously with no bypass along the same route). Do this for both bases, and give the SAP a high value.
5. rebuild paths and go back to watching.
6. you'll see the FC at some point starts using another route all the time. This is the next route to fix. repeat step 3, but use a lower value this time.
7. rebuild paths and rinse repeat.
8. I would suggest even the longest route have SAPs on it, just use a very low value.
The main idea idea here is to get the four routes to look more "even" to a BOT... to essentially fooling the FC to take different routes.
You do have to play a bit with the selection weight values but eventually it works out -- very easy method to follow ...
that's all I'm saying about this
Cheers
so simple, and you can actually make the little robots take loopy long routes with the flag that they would _never_ otherwise take under normal circumstances...
how to use:
1. determine how many routes you have (lets say there's four routes in each base - long upper middle, short lower middle, short side, long side)
2. finish your paths (without any alt paths) and be sure your routes connect flag to flag.
3. spectate a few matches with 2-4 bots to see what the bot FC does. This should reveal the shortest path. He will usually always use this route.
4. place a SAP in this path leaving the base (find a good spot, obviously with no bypass along the same route). Do this for both bases, and give the SAP a high value.
5. rebuild paths and go back to watching.
6. you'll see the FC at some point starts using another route all the time. This is the next route to fix. repeat step 3, but use a lower value this time.
7. rebuild paths and rinse repeat.
8. I would suggest even the longest route have SAPs on it, just use a very low value.
The main idea idea here is to get the four routes to look more "even" to a BOT... to essentially fooling the FC to take different routes.
You do have to play a bit with the selection weight values but eventually it works out -- very easy method to follow ...
that's all I'm saying about this
Cheers
- sektor2111
- Godlike
- Posts: 6402
- Joined: Sun May 09, 2010 6:15 pm
- Location: On the roof.
Re: CTF-MeinKraft][
Hint No. 2:
Start game with 0 Bots. Go to Enemy Flag Base (don't touch it) put "RememberSpot" there. Move to your Flag and input "ShowPath". You might see the almighty shortest route between Flags which is recommended to be blocked randomly else Bot will always behave as moron using only that way.
In other case this moron-bot route can be different due to JumpSpot stuff addressing BOT only. Simply human and monster cannot use such path because is owned only by almighty Bot (and MBot). Anyway that short route can be detected by adding ONE Bot and spectating which way is using all the time to get enemy Flag. Alternatepath is advisable for other long routes, custom blockers are advisable for this(these) shortest road(s) - depending on spawn location.
Checking if Bot has sorted an AlternatePath can be done spectating it directly and typing command "verbose" in console. Using a simple pencil and a piece of paper you can note which AlternatePath is often used and which is not very used. That one less used need to be fine tuned a bit - that SelectionWeight.
At end of mapping you won't get hurt if you'll be writing in Editor's console "Set AlternatePath bTwoWay True".
Start game with 0 Bots. Go to Enemy Flag Base (don't touch it) put "RememberSpot" there. Move to your Flag and input "ShowPath". You might see the almighty shortest route between Flags which is recommended to be blocked randomly else Bot will always behave as moron using only that way.
In other case this moron-bot route can be different due to JumpSpot stuff addressing BOT only. Simply human and monster cannot use such path because is owned only by almighty Bot (and MBot). Anyway that short route can be detected by adding ONE Bot and spectating which way is using all the time to get enemy Flag. Alternatepath is advisable for other long routes, custom blockers are advisable for this(these) shortest road(s) - depending on spawn location.
Checking if Bot has sorted an AlternatePath can be done spectating it directly and typing command "verbose" in console. Using a simple pencil and a piece of paper you can note which AlternatePath is often used and which is not very used. That one less used need to be fine tuned a bit - that SelectionWeight.
At end of mapping you won't get hurt if you'll be writing in Editor's console "Set AlternatePath bTwoWay True".
Re: CTF-MeinKraft][
hehe, I love how this topic turned into an advanced actor/script discussion.
Not that I understand most of it
Not that I understand most of it
- papercoffee
- Godlike
- Posts: 10441
- Joined: Wed Jul 15, 2009 11:36 am
- Personal rank: coffee addicted !!!
- Location: Cologne, the city with the big cathedral.
- Contact:
Re: CTF-MeinKraft][
phew ...Now I'm relieved, I thought I would be the only one.memsys wrote:hehe, I love how this topic turned into an advanced actor/script discussion.
Not that I understand most of it
Re: CTF-MeinKraft][
Here's a gift:
- Rezoned the fortresses.
- Rezoned and rebuilt the high part, now mirrored on each side.
- Fixed a huge BSP hole on blue base.
- Turned some solid structures in the lava river into semisolids.
Pathing:
- Usage of XC_LinkedNavs (XC_Siege_r3), forces connection to another Teleporter type path.
- Created XC_LinkedNavsBaseReq, same as above, but disables itself is there's nothing below it.
- Created ActionPathCoster actor, located in the center of the map.
- Moved some LiftCenter a bit into the walls so FerBotz work better with elevators (I should fix this on FerBotz instead, but this will do for now)
- Repathed the entire lava river, bots can recover if they fall into lava.
- Bots can climb up from the lava river using the blocks, if said blocks are there.
- Bots won't attempt to cross the bridge if the center has been destroyed.
- Removed ExtraCost on lower path LiftCenters.
- Added ExtraCost on some paths near the right window
- Removed all AssaultRandomizers.
- Simplified pathing on mid bridge.
- Simplified pathing on pit traps.
- Added shortcuts from sniper towers, now with jumps onto trees or the escape window.
- The entire navigation network doesn't need extra BSP to be rebuilt.
ActionPathCoster:
The real way of making a CTF map work with bots.
Based on a set of conditions it will find players around it, and each player will count towards the ExtraCost set to nearby paths.
In the map, the players that count are:
- Snipers in towers.
- Snipers in bases.
- Players in the middle zone.
Each player will add 470 cost to the paths around the bridge (and below it).
On low player count games bots will take straight routes, but when it gets crowded you'll start becoming victim of more sneak attacks.
CacusBlock:
Channel-less blocks that use some simple auto-hiding rules.
They are subclassed from Mover so that Bots and Players may walk over them.
Use a random seed system to spawn the chunks, and that frees some server load.
The blocks requires a CacusBlockController actor to contain them so that they get a 'NetIndex'
Each controller can hold up to 4096 CacusBlock actors and detection is done via a user specified radius.
I did not replace the fortress blocks as they're not touching other blocks, but the remaining blocks on the middle of the map and the pit traps are all CacusBlock.
Other info:
Removed the StochasticTrigger actors that were no longer needed.
No AlternatePath actors are being used, the ActionPathCoster should do a nice job anyways.
Added a XC_BuildFilter actor (XC_Siege_r3) on the high zone, should only do anything on Siege gametypes (prevent construction up there).
Moved some items that were buried onto the floor a bit higher.
Moved the UDamage a few units lower so bots prioritize the XC_LinkedNavsBaseReq paths instead of the InventorySpot when running through the bridge.
BSP:- Rezoned the fortresses.
- Rezoned and rebuilt the high part, now mirrored on each side.
- Fixed a huge BSP hole on blue base.
- Turned some solid structures in the lava river into semisolids.
Pathing:
- Usage of XC_LinkedNavs (XC_Siege_r3), forces connection to another Teleporter type path.
- Created XC_LinkedNavsBaseReq, same as above, but disables itself is there's nothing below it.
- Created ActionPathCoster actor, located in the center of the map.
- Moved some LiftCenter a bit into the walls so FerBotz work better with elevators (I should fix this on FerBotz instead, but this will do for now)
- Repathed the entire lava river, bots can recover if they fall into lava.
- Bots can climb up from the lava river using the blocks, if said blocks are there.
- Bots won't attempt to cross the bridge if the center has been destroyed.
- Removed ExtraCost on lower path LiftCenters.
- Added ExtraCost on some paths near the right window
- Removed all AssaultRandomizers.
- Simplified pathing on mid bridge.
- Simplified pathing on pit traps.
- Added shortcuts from sniper towers, now with jumps onto trees or the escape window.
- The entire navigation network doesn't need extra BSP to be rebuilt.
ActionPathCoster:
The real way of making a CTF map work with bots.
Based on a set of conditions it will find players around it, and each player will count towards the ExtraCost set to nearby paths.
In the map, the players that count are:
- Snipers in towers.
- Snipers in bases.
- Players in the middle zone.
Each player will add 470 cost to the paths around the bridge (and below it).
On low player count games bots will take straight routes, but when it gets crowded you'll start becoming victim of more sneak attacks.
CacusBlock:
Channel-less blocks that use some simple auto-hiding rules.
They are subclassed from Mover so that Bots and Players may walk over them.
Use a random seed system to spawn the chunks, and that frees some server load.
The blocks requires a CacusBlockController actor to contain them so that they get a 'NetIndex'
Each controller can hold up to 4096 CacusBlock actors and detection is done via a user specified radius.
I did not replace the fortress blocks as they're not touching other blocks, but the remaining blocks on the middle of the map and the pit traps are all CacusBlock.
Other info:
Removed the StochasticTrigger actors that were no longer needed.
No AlternatePath actors are being used, the ActionPathCoster should do a nice job anyways.
Added a XC_BuildFilter actor (XC_Siege_r3) on the high zone, should only do anything on Siege gametypes (prevent construction up there).
Moved some items that were buried onto the floor a bit higher.
Moved the UDamage a few units lower so bots prioritize the XC_LinkedNavsBaseReq paths instead of the InventorySpot when running through the bridge.
Re: CTF-MeinKraft][
No word yet?
Shall I promote the map as it is or do I wait for your final touch @memsys?
Shall I promote the map as it is or do I wait for your final touch @memsys?
Re: CTF-MeinKraft][
I am very sorry, Higor. I have not gotten around to do anything other then download and play a quick match to see the bots are fixed!
Something I noticed is that the way you zoned the fort caused the snipers to be in the battlefield zone. I also noticed that the defense point need to be moved to that backstabbing the bot there will be a lot harder.
Many thanks for all the work!
I hope I can find the energy to make some small tweaks this week and release the latest version.
Something I noticed is that the way you zoned the fort caused the snipers to be in the battlefield zone. I also noticed that the defense point need to be moved to that backstabbing the bot there will be a lot harder.
Many thanks for all the work!
I hope I can find the energy to make some small tweaks this week and release the latest version.