Battle Circle AI laat je speler het gevoel hebben dat ze veel vijanden bevechten

Melee-gevechten zijn een favoriete tijdverdrijf in videogameland, de kern van ontelbare series zowel bekend als obscuur, en een spannende en aangrijpende ervaring als het goed wordt gedaan. Velen van een game-ontwikkelaar hebben een spel van twee wezens genomen die het uitbliezen totdat iemand niet meer kan biffen en dacht: "Dit zou zo veel beter zijn als er tons van slechteriken! "Soms is dit waar, maar vaak is de som groter dan zijn delen, en vechten veel" slechteriken "tegelijk is niet zo spannend, diep of genuanceerd als één voor één vechten.

Veel melee combat-games gebruiken geen speciale AI bij het vechten met meerdere tegenstanders. Dit betekent vaak dat het vechten tegen twee tegenstanders exponentieel moeilijker is dan het bestrijden van één tegenstander, omdat ze allebei tegelijkertijd aanvallen, maar je kunt alleen echt vergelden tegen een van hen. In het ergste geval, wanneer je hordes vijanden bevecht, kan dit betekenen dat de optimale strategie is om de vijand naar een regel met één bestand te leiden en ze dan één voor één aan te vallen terwijl je backpedalling! Dat voelt niet fantastisch of opwindend, toch?


Ga naar 0:53.

Ga de "strijdcirkel" binnen. Dit is een stukje AI-code die vijanden vertelt om zichzelf opzettelijk rondom de speler te omringen en alleen aan te vallen wanneer de speler de kans heeft om te reageren. Dit dwingt vijanden om te vechten in een stijl en tempo dat veel leuker is voor de speler ... zelfs als het echt een hele slechte vechttactiek is!

De belangrijkste reden waarom je gevechtskringen wilt gebruiken, is door de speler te laten spelen voelen alsof ze veel vijanden tegelijk bestrijden, zonder daadwerkelijk tegenover de echt uitdaging om veel vijanden tegelijk te bestrijden. Dus in de kern is een strijdcirkel een illusie. Je maakt opzettelijk dingen makkelijker voor de speler zodat ze het kunnen ervaren fantasie van het aannemen van een stelletje dudes tegelijk en wetende dat je levend gaat uitkomen, net als in elke vechtsportfilm.


Ga naar 1:13.

Een gevechtsring hoeft niet voor elke game op dezelfde manier te werken; als je ervoor kiest om er een te gebruiken, moet je tijd besteden aan het aanpassen aan je spel. Aan de ene kant van het spectrum heb je 'filmische' gevechtskringen, zoals in Assassin's Creed of Batman: Arkham Asylum, waar vijanden geduldig op hun beurt wachten voordat ze proberen aan te vallen, en de speler voldoende waarschuwing geven om inkomende aanvallen af ​​te handelen. Aan de andere kant heb je 'gevaarlijke' gevechtskringen, zoals in Dark Souls, waar vijanden elkaar proberen uit elkaar te houden, maar verder geen probleem hebben om je massaal lastig te vallen.

Ik gebruik de woorden 'filmisch' en 'gevaarlijk' om te beschrijven wat voor soort speler de speler verwacht binnen de cirkel te hebben; is het meer een opwindende audiovisuele ervaring die de speler zou moeten voelen comfortabel in, of moet het een zijn kwetsbaar positie die de speler moet proberen te vermijden?

Dit concept kan verder worden vereenvoudigd door simpelweg de hoeveelheid te beheren druk op de speler. Concreet is dit de hoeveelheid motivatie die de speler moet hebben om te reageren op de vijanden in de gevechtsring. Een lagedrukcirkel zal de speler laten wachten op inkomende aanvallen om deze te bestrijden, of doorgaan met het aanvallen van een specifieke vijand zonder onmiddellijke vergelding. Een hogedrukcirkel dwingt de speler om "vechten of vluchten" te selecteren zodra ze in de cirkel zijn, dus dat het op de eerste plaats binnengaan van de cirkel een vooraf bedachte tactische beslissing zou moeten zijn. Terwijl hij zich in zo'n gevaarlijke cirkel bevindt, moet de speler onmiddellijk beslissen wie hij moet aanvallen, wie hij moet tegengaan en wanneer en hoe hij kan ontsnappen.

Ik heb een volledig functionele, als minimalistische arena-stijl beat-em-up in het voorbeeld Unity-bestanden. Als u Unity niet gebruikt, moet u nog steeds een globaal idee hebben van hoe u de code voor de gevechtscirkel kunt aanpassen aan de taal en engine die u gebruikt. De bestanden waarin je geïnteresseerd bent, zijn EnemyMob.cs en SwordzPlayer.cs.

Hier is de strijdcirkel in actie. Klik op de demo om hem scherp te stellen, gebruik vervolgens de pijltjestoetsen om te verplaatsen en druk op X biffen.

Hoe het werkt

De gevechtsring AI werkt in principe zo (vanuit het perspectief van een vijand):

Ga eerst naar de speler toe totdat ik binnen een "gevaarlijke" straal kom

Ga in de "gevaarlijke" modus niet te dicht bij een andere vijand, tenzij ik toestemming krijg om de speler aan te vallen. (Zie Avoider.cs.)

Probeer ook in de "gevaarlijke" modus de speler te naderen. Als er teveel vijanden op mijn weg zijn, zal ik de speler effectief niet kunnen bereiken tot de vijanden bewegen of de speler beweegt.

Wanneer de speler in mijn "aanvals" radius is (ongeveer het maximale bereik van mijn aanval), vraag de speler dan of ik mag aanvallen. Als dit het geval is, voeg je me toe aan de lijst met huidige aanvallers voor het spelerobject. (Zie SwordzPlayer.cs.)

  • Als het maximum aantal aanvallers al op de lijst staat, krijg ik geen toestemming.
  • Als mij de toestemming wordt ontzegd, probeer dan een seconde of twee in een willekeurige richting te beschieten totdat ik toestemming krijg.
  • Als de speler het aanvalsbereik verlaat, zelfs als ik aan het aanvallen ben, verwijder me dan van de aanvallerlijst.
  • Als ik sterf of ben verbluft of anderszins niet in staat ben aan te vallen, verwijder me dan van de aanvallerlijst.

De maximaal toegestaan ​​aantal gelijktijdige aanvallers (simultaneousAttackers in SwordzPlayer.cs) is cruciaal om je strijdcirkel in balans te houden. Een hoger cijfer veroorzaakt een exponentiële toename in druk. In de voorbeeld-demo heb ik deze ingesteld op 2; minder twitchy en meer "filmische" games stellen het op 1. Als je dit aantal te hoog legt, versla je het doel van de cirkel, omdat grote groepen vijanden onaantastbaar worden of alleen verslagen kunnen worden met oninteressante poke-and-run tactieken.

Van vergelijkbaar belang is het vijandelijk aanvalspercentage (attackRate in EnemyMob.cs). Dit is niet de snelst mogelijke aanvalstarief van de vijand, maar hoe vaak ze zullen Kiezen aanvallen als je daarvoor toestemming hebt gekregen. Zoals je zou verwachten, neemt een lager aantal toe druk, maar je zou dit over het algemeen een paar keer hoger moeten hebben dan de echte attack rate. Je kunt deze koers iets onvoorspelbaarder maken (en dus de hoeveelheid druk iets minder voorspelbaar) door te verhogen attackRateFluctuation, die de attack rate na elke aanval zal verhogen of verlagen.

Met dit systeem beschik je over de basismiddelen om die illusie van macht te creëren, waardoor het voor je spelers veel leuker is om veel vijanden tegelijk te verslaan.

Conclusie

Er zijn heel veel kleine veranderingen en toevoegingen die je kunt doen om binnen de cirkel te vechten om nog interessanter te worden:

  • Een "stun" - of "counter" -aanval die de speler kan gebruiken om vijanden een ogenblik uit de strijd te halen, zodat de speler andere vijanden in de cirkel kan aanvallen
  • Een "ontwijk" zet voor de speler om snel in, uit of in de cirkel te reizen
  • "Push" en "pull" bewegingen die de speler vijanden in en uit de cirkel laten bewegen
  • Varieerde vijanden die door openingen in de cirkel naar de speler gaan en de speler aanmoedigen zichzelf door de cirkel te dwingen om eerst deze vijanden aan te vallen
  • Speciale 'kapitein'-vijanden die de aanvalsratio van vijanden bij hen in de buurt vergroten of de toestemming om te vallen negeren en zo het aantal verhogen druk van bepaalde delen van de cirkel

Dus laat die creatieve sappen stromen! Dit is slechts het begin: maak de strijdcirkel een belangrijk onderdeel van je gameplay en maak je eigen versie van de cirkel die goed bij je past jouw spel.