Onslaught Onslaught Server Discussion

Go Back   Omnip)o(tentS Forums > SERVERS > Unreal Tournament > Onslaught
Reply
 
Thread Tools Display Modes
Old 07-22-2010, 11:58 PM   #1
Kamek
Unreal Goblin Hunter

 
Kamek's Avatar
 
Join Date: Jan 2009
Location: In the source code
Posts: 479
UT2k4 Link Me, Dammit! (Mutator)
Reply With Quote


You will believe bots can be useful in Onslaught.



WHAT IT IS
Link Me, Dammit is a mutator/server actor for Onslaught botplay that improves bot AI. The primary feature is, as the name suggests, the ability of bots to recognize when human players are using their Link Guns, and linking with them.

If a human pulls out and fires a Link Gun (primary or secondary), nearby bots will try to join in the link chain (if possible). For best results, order a couple of bots to cover you, then ferry them around in a Hellbender or something. As you build nodes they will link up with you instantly -- without the mutator they MIGHT link you if they feel like it.

Or if you're a Mino driver in desperate need of a heal, drive by a bot on foot, and it will try to heal you.


OH GOD THEY'RE HEALING IT


Luckily, you have some healbots of your own...


Bots will also call out big enemy vehicles via TeamSay. Normally this is the Mino, but depending on the level it could be another vehicle, such as the Kraken, the Ion Plasma Tank, or maybe just a plain old Goliath.

My main goal for this is to work out the bugs and submit it for the Onslaught server (particularly the MTMU server where every round ever has a good portion of bots). Maybe then it won't be so bad during the late night hours when there aren't many humans around

Download: http://www.filefront.com/17250010/LinkMeDammit_V1.zip (Source included)

Please give it a try and report back any bugs or suggestions! For best results, try it in a map that normally works well in botplay without the mutator.

Last edited by Kamek; 08-30-2010 at 10:00 PM.. Reason: V1 uploaded
Kamek is offline  
Old 07-23-2010, 12:40 AM   #2
DjAy-T
<--CheckOutThe @$$ on her


 
DjAy-T's Avatar
 
Join Date: Jun 2008
Location: 'NeW oRlEaNs'
Posts: 1,878
Default
Reply With Quote


oh, i want it- i want it!
__________________
Get Some!
DjAy-T is offline  
Old 07-23-2010, 05:41 AM   #3
Crusha K. Rool
Crocodile | Map-Modder
 
Crusha K. Rool's Avatar
 
Join Date: Aug 2009
Posts: 714
Default
Reply With Quote


Seems good, but be careful and try to make it not look too artificial. The goal of bots in Unreal was always to be as human-like as possible. If they all get out the link gun every time a damage vehicle gets in their radius, then it's surely not very human like. There still should be a chance that the bots don't link you, maybe also taking into account how many bots are currently linking the vehicle already (and maybe the BotDesirability of the vehicle to link, as that suggest the importance of that vehicle to bots).


When you say that they preferably tell you when they sighted Mino, does that mean certain files for )o(-vehicles need to be distributed by the server who uses this mutator, or would it work on any normal ONS server as well?

And how exactly does it work? Will every bot that spots a vehicle tell you about it, or will the mutator keep track off which vehicles where lately spotted by bots and therefore not mentioned by every bot? And what is the message like? Preferably would be something like "Enemy *vehicle name*, *location string of the applying volume in which the vehicle is*". Of course that requires the maps to have all locations properly named (what isn't the case on most maps yet), but it's the most logical (and UT3) way of doing it.
If a vehicle is spotted should also depend on a random function and the result should take the bot desirability into account.
For example:
Code:
-if enemy vehicle spotted
     -check if vehicle was reported in that location/volume within the last minute by going through an array in the mutator class that stores these informations.
          -if (vehicle.bKeyVehicle || (FRand()+vehicle.maxdesirability > 1.3))
              -report vehicle location
You can't really use the vehicle.botdesirability()-function, as that one returns 0 if the vehicle is occupied.

The MaxDesirability values of the stock vehicles are:
Raptor, Cicada, Hellbender, Scorpion, SPMA - 0.5
Paladin, Manta - 0.6
Goliath - 0.8
IonPlasmaTank, Leviathan - bKeyVehicle

FRand() returns a random value between 0.0 and 1.0, so there is a 1/2-chance that a Goliath is reported, and a 1/3-chance for Raptor, Cicada, etc. and Leviathan and IonTank are always reported. Dunno what values exist for Minotaur and the others.

Maybe the function should also take into account if there are more important vehicles in the proximity of the one to report, so that the bot will preferably report the important one of those.
Crusha K. Rool is offline  
Old 07-23-2010, 01:25 PM   #4
Kamek
Unreal Goblin Hunter

 
Kamek's Avatar
 
Join Date: Jan 2009
Location: In the source code
Posts: 479
Default
Reply With Quote


No )o( files are needed. When the game starts up it looks at every vehicle at the map and finds the one with the most HP, and declares that as the "big tank". Most of the time it's the Mino (2000). Whenever the bot sees an enemy vehicle that matches that max HP, it'll call it out. It'll call it out by location string and by whatever node it's closest to. It'll then tell all the other bots on your team about that particular vehicle, so they won't keep calling it out too, until it's destroyed.

An example message is in one of the screenshots: "**WARNING** Enemy (vehicle name) spotted! (location) (nearest power node)" I included the nearest power node because location names aren't always very reliable ("Outdoor somewhere...", etc)

Omnitaur's MaxDesireability is 0.2, so that won't work for that. If I want to specifically look for the Omnitaur there are a number of ways of doing that without needing the )o( files. I can just use Vehicle.IsA('Omnitaur'), or check the vehicle's name (Min)o(taur), go by its max HP (2000), etc.

Randomness is something I'll have to work on so it's not too predictable. See: bug where the enemy bots all drop what they're doing and hunt down your mino until it dies The good part is that bots remember what they were doing before they start linking something, so they SHOULD go right back to doing that when they're "done".
Kamek is offline  
Old 07-23-2010, 01:47 PM   #5
Wormbo
Wormlike
 
Wormbo's Avatar
 
Join Date: Dec 2009
Posts: 907
Default
Reply With Quote


I see this mod restricts itself to Onslaught. I'm pretty sure Assault and VCTF (actually all team game types) could also benefit from more link-happy bots.
Wormbo is offline  
Old 07-23-2010, 01:55 PM   #6
Kamek
Unreal Goblin Hunter

 
Kamek's Avatar
 
Join Date: Jan 2009
Location: In the source code
Posts: 479
Default
Reply With Quote


Quote:
Originally Posted by Wormbo View Post
I see this mod restricts itself to Onslaught. I'm pretty sure Assault and VCTF (actually all team game types) could also benefit from more link-happy bots.
I could be happy to oblige
Kamek is offline  
Old 07-23-2010, 01:56 PM   #7
Crusha K. Rool
Crocodile | Map-Modder
 
Crusha K. Rool's Avatar
 
Join Date: Aug 2009
Posts: 714
Default
Reply With Quote


I would leave the "**Warning**" away. Just making the messages unnecessary long and bad looking, besides that it's more work for the Text-to-Speech.

I guess even the "spotted" can be left out to keep the useful information and to let it sound more human-like. A simple
"Enemy Min)o(taur, Northwest" would be enough. Of course it's bad if the maps don't support location names (instantly cut the mapper's/editor's throat), but for example in a map like MagicIsle is the "closest" Node often far away and not really telling the right location. For example between the Northeast Castle Node and the East Catacomb Node.

Maybe you could derive cardinal directions per code by checking vehicle.location in relation to the range of the radarmap, which can be determined like this:

Code:
var float RadarRange;

function PostBeginPlay()
{
    local TerrainInfo T, PrimaryTerrain;

    // Determine primary terrain
    foreach AllActors(class'TerrainInfo', T)
    {
        PrimaryTerrain = T;
        if (T.Tag == 'PrimaryTerrain')
            Break;
    }

    // Set RadarMaxRange to size of primary terrain
    if (Level.bUseTerrainForRadarRange && PrimaryTerrain != None)
        RadarRange = abs(PrimaryTerrain.TerrainScale.X * PrimaryTerrain.TerrainMap.USize) / 2.0;
    else if (Level.CustomRadarRange > 0)
        RadarRange = Clamp(Level.CustomRadarRange, 500.0, class'ONSHudOnslaught'.default.RadarMaxRange);
The center of the map should always be at the origin of the coordinate system, so if you have a #-shaped grid for the cardinal directions, then you get these (Location is Vehicle.Location):

Northwest => Location.Y >= (RadarRange/3) && Location.X < (RadarRange/-3)
North => Location.Y >= (RadarRange/3) && (Location.X >= (RadarRange/-3) && Location.X < (RadarRange/3))
Northeast => Location.Y >= (RadarRange/3) && Location.X >= (RadarRange/3)
West => (Location.Y < (RadarRange/3) && Location.Y >= (RadarRange/-3)) && Location.X < (RadarRange/-3)
Center => (Location.Y < (RadarRange/3) && Location.Y >= (RadarRange/-3)) && (Location.X >= (RadarRange/-3) && Location.X < (RadarRange/3))
East => (Location.Y < (RadarRange/3) && Location.Y >= (RadarRange/-3)) && Location.X >= (RadarRange/3)
Southwest => Location.Y < (RadarRange/-3) && Location.X < (RadarRange/-3)
South => Location.Y < (RadarRange/-3) && (Location.X >= (RadarRange/-3) && Location.X < (RadarRange/3))
Southeast Location.Y < (RadarRange/-3) && Location.X < (RadarRange/3)

That way you can do some simple if-checks to get a proper cardinal direction to use in your string.
Crusha K. Rool is offline  
Old 07-23-2010, 02:18 PM   #8
Wormbo
Wormlike
 
Wormbo's Avatar
 
Join Date: Dec 2009
Posts: 907
Default
Reply With Quote


And if you want to get really sophisticated, you could even take major pickups into account: "Enemy Leviathan south-west of Red PowerCore near the Redeemer" or something like that.

I've created algorithms for creating (map-wide) compass directions and pickup location for Wormbot (UT2004, better power node names on IRC) and Tournament (UT2003, more-detailed %L TeamSay variable) respectively. Not sure if they can be applied to this problem.
Wormbo is offline  
Old 07-23-2010, 10:38 PM   #9
Binger
.

 
Join Date: Nov 2007
Posts: 2,486
Default
Reply With Quote


Great stuff but can you make em link from across the map?



Seriously though, I would love to see a polished version of this on the server. It could really help with the late night matches.
Binger is offline  
Old 07-24-2010, 11:00 PM   #10
overpoweredvehicler
Just Registered
 
Join Date: Apr 2010
Posts: 20
Default
Reply With Quote


Very interesting stuff.

There is a "similar" mutator that was made for Bombing Run, which notably forces the bots to pass you the ball if they have it and you request it. This is done by using a key that you press to send the request. Perhaps this would be a good thing for your mutator as it would allow a limited interference from the bots, linking human players only when they request it.

See BR Pass Me v1.01 on: http://sorenm.wordpress.com/mods/mod...urnament-2004/
overpoweredvehicler is offline  
Old 07-25-2010, 08:17 AM   #11
Crusha K. Rool
Crocodile | Map-Modder
 
Crusha K. Rool's Avatar
 
Join Date: Aug 2009
Posts: 714
Default
Reply With Quote


Well, using the "I need backup" command should be enough to tell the bots to link you (if they are not currently in a vehicle that would be left unlocked then). An additional key that is only used by a single mutator is a bad idea. In UT2003 I didn't have enough keys on my keyboard to bind all the commands of all mods.
Crusha K. Rool is offline  
Old 07-25-2010, 09:04 AM   #12
Wormbo
Wormlike
 
Wormbo's Avatar
 
Join Date: Dec 2009
Posts: 907
Default
Reply With Quote


That part is a bit tricky. For some reason only "orders" are forwarded to bots, not "other" voice messages. This would have to be changed in the PlayerController, so it would be incompatible to e.g. ONSPlus. It might be possible to pick it up via the BroadcastHandler, but I'm not sure about that.
Ideally bots that have nothing else to do (i.e. not engaged in a fight) should probably try to heal friendly occupied vehicles (and power nodes?) whenever they happen to be near one.
Wormbo is offline  
Old 07-25-2010, 10:08 PM   #13
Kamek
Unreal Goblin Hunter

 
Kamek's Avatar
 
Join Date: Jan 2009
Location: In the source code
Posts: 479
Default
Reply With Quote


First post updated with Beta 2, this fixes most of the issues in Beta 1.
  • Bots are a bit more random now about linking (unless you order them to cover you)
  • Bots will try to link each other when healing
  • Bots will try to heal damaged nodes
  • Bots won't link if they're dealing with an enemy. If they get shot during linking they should stop linking and deal with the threat.
  • When calling out the Mino/Kraken/etc, bots will report the closest power node only if within 5000 UUs of that power node. If not, they'll report it by cardinal direction. If there's a big powerup (UDamage, Target Painter, Redeemer) nearby, they will mention that powerup as well.
  • ServerActor included (LinkMe.LinkMeServerActor), using the Server Actor will keep your server from becoming non-standard (which is a must if I want this to have any hope of winding up on Omni ONS)
Kamek is offline  
Old 07-26-2010, 05:16 AM   #14
Crusha K. Rool
Crocodile | Map-Modder
 
Crusha K. Rool's Avatar
 
Join Date: Aug 2009
Posts: 714
Default
Reply With Quote


Do you want to open a thread in Epic's forum? If you don't have an account yet, I could open the thread for you.
Crusha K. Rool is offline  
Old 07-26-2010, 12:14 PM   #15
foibos
Getting there...
 
foibos's Avatar
 
Join Date: Oct 2008
Posts: 122
Default
Reply With Quote


Gj. Is it compatible with ONSPlus? Should I put it into server packages? ServerActors=LinkMe.LinkMeServerActor + ServerPackages=LinkMe?
foibos is offline  
Old 07-26-2010, 05:44 PM   #16
Kamek
Unreal Goblin Hunter

 
Kamek's Avatar
 
Join Date: Jan 2009
Location: In the source code
Posts: 479
Default
Reply With Quote


Quote:
Originally Posted by Crusha K. Rool View Post
Do you want to open a thread in Epic's forum? If you don't have an account yet, I could open the thread for you.
I didn't have any intention to (people still use Epic's forum?), but if you want to you can.

Quote:
Originally Posted by foibos View Post
Gj. Is it compatible with ONSPlus? Should I put it into server packages? ServerActors=LinkMe.LinkMeServerActor + ServerPackages=LinkMe?
I haven't tested it with ONSPlus yet.

It does not need to be in the serverpackages, it's entirely server-side and clients don't need to download it. Just add the ServerActors line and you're good.
Kamek is offline  
Old 07-26-2010, 07:06 PM   #17
Crusha K. Rool
Crocodile | Map-Modder
 
Crusha K. Rool's Avatar
 
Join Date: Aug 2009
Posts: 714
Default
Reply With Quote


Here it is: http://forums.epicgames.com/showthre...0#post27527780


And yeah, the Epic forum is more active than any other UT-forum these days because new content is published almost every week and so there is much room for feedback.
Crusha K. Rool is offline  
Old 07-27-2010, 04:38 PM   #18
Crusha K. Rool
Crocodile | Map-Modder
 
Crusha K. Rool's Avatar
 
Join Date: Aug 2009
Posts: 714
Default
Reply With Quote


Seems like you confused GE:
Quote:
Looked into it, and huh, it doesn't make sense for me. It's just taking every xPawn and changing their controllers to the bot class. Last time I checked, players are also xPawns, so why doesn't it affect them? Else it would be like in Red Alert 2 when you let players control computer-controlled troops - they have AI, but you can order them around manually, too
Crusha K. Rool is offline  
Old 07-27-2010, 06:01 PM   #19
Kamek
Unreal Goblin Hunter

 
Kamek's Avatar
 
Join Date: Jan 2009
Location: In the source code
Posts: 479
Default
Reply With Quote


Quote:
Originally Posted by Crusha K. Rool View Post
Seems like you confused GE:
Yeah, it works by overwriting the bot class, which is by default set to UnrealGame.Bot. The mutator/server actor replaces it with LinkMe.xLinkMeBot, which is the "new" bot class with the linking features.

Player pawns aren't affected, because when they're spawned, the player controller automatically possesses it. The bot for that pawn is never spawned.
Kamek is offline  
Old 07-27-2010, 06:43 PM   #20
Crusha K. Rool
Crocodile | Map-Modder
 
Crusha K. Rool's Avatar
 
Join Date: Aug 2009
Posts: 714
Default
Reply With Quote


Funny that many people take the x-prefix, even though it actually only indicates content by Digital Extremes.
Crusha K. Rool is offline  
Reply


Go Back   Omnip)o(tentS Forums > SERVERS > Unreal Tournament > Onslaught

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Dammit Dammit Son Of A Monkey Whore! Trid Mappers' Corner 3 02-03-2008 02:57 PM
The Link Gun? Pandæmonium Other Games 40 05-24-2007 08:39 PM
)o( Link AnnaBeaver Off Topic 26 03-20-2006 11:39 PM


All times are GMT -5. The time now is 12:41 PM.