Thế nào là một cỗ máy trạng thái hữu hạn AI của Berserker thuyết phục cho một Roguelike


7

Tôi đang tìm cách tạo ra một kẻ thù Berserker đầy thuyết phục trong một Roguelike mà tôi đã tạo ra một thời gian. Bạn có thể giả định một trò chơi như NetHack cho việc này khi xem xét loại hành động nào có thể được thực hiện và tin nhắn văn bản có thể được cảnh báo.

Tôi hỏi điều này vì hai lý do:

  1. Tôi đã cố gắng giải quyết vấn đề này trong hơn một năm và đã thất bại. Ví dụ để làm theo.
  2. Tôi thấy thiếu một ví dụ chung về SE này cho thấy bản đồ của các thực thể, nói chung, trông như thế nào. Nó sẽ hữu ích cho cộng đồng để có một ví dụ như vậy.

Tôi cân gi:

Khi tôi nói Berserker, ý tôi là một kẻ thù có thể lao vào một cơn thịnh nộ mù quáng và tấn công các thực thể khác mà nó đang xung đột với bạo lực và khát máu. Không chỉ đơn giản là chuyển sang tấn công các mục tiêu ngẫu nhiên, như được thực hiện trong nhiều game nhập vai. Để kết thúc này, hãy thoải mái giả sử bổ sung bất kỳ hiệu ứng trạng thái hoặc buff nào bạn muốn. Chỉ cần chắc chắn rằng bạn chi tiết thông tin thích hợp cho các tiểu bang.

Một thực thể điên cuồng cần thể hiện cơn thịnh nộ của mình theo cách không chỉ đơn giản là thay đổi trạng thái với một số sức mạnh tăng lên. Đây là một giải pháp rất nông cho vấn đề. Các thực thể cuối cùng không cảm thấy như một Berserker.

Những gì tôi đã thử:

Tôi đã thử 3 ý tưởng khác nhau trong năm qua. Và không ai trong số họ thỏa mãn. Một giải pháp cho vấn đề có thể hoàn toàn mới hoặc 'sửa chữa' cho một trong những giải pháp này. Tôi chủ yếu bao gồm chúng để có được nước ép chảy.

  1. Điều đầu tiên tôi thử là một trạng thái Berserk đơn giản làm tăng sức mạnh của thực thể, ngẫu nhiên hóa mục tiêu của nó (từ danh sách kẻ thù), khiến anh ta hét lên những lời tục tĩu, v.v. Khi ở trong trạng thái này, kẻ thù sẽ ở lại trong đó cho đến khi chết.
  2. Điều tiếp theo tôi đã cố gắng thực sự là một sửa đổi ở trên. Kẻ thù cảm thấy rất bằng phẳng, và không có cách nào để trấn tĩnh anh ta hoặc đánh bật anh ta ra khỏi cơn thịnh nộ dường như không thực tế. Tôi đã thêm khả năng bình tĩnh (với một phép thuật và các hiệu ứng khác) và cũng thêm một điều kiện sẽ đưa kẻ thù trở lại trạng thái bình thường, từ đó anh ta có thể chuyển sang những người khác như chạy trốn. Điều này tạo ra chiều sâu hơn, nhưng làm cho trạng thái Berserker dường như thậm chí nông hơn và ít phá hủy hơn.
  3. Từ đây tôi đã loại bỏ tất cả và nhắm đến một cái gì đó mới nổi hơn. Về cơ bản, một buff mà kẻ thù có thể tự tạo ra dựa trên trạng thái chuyển tiếp. Khi đã sử dụng, điều này sẽ thay đổi hành vi của kẻ thù (để nhắm mục tiêu) và tăng sát thương của chúng trong khi ngẫu nhiên đưa ra những lời lăng mạ từ kẻ thù. Sau đó, anh ta có thể vào bất kỳ tiểu bang nào khác và nổi giận. Vì vậy, anh ta có thể chạy trốn, nhưng vẫn chế nhạo. Anh ta có thể chữa lành, nhưng vẫn nổi giận và gây ra nhiều thiệt hại. Điều này là tốt hơn, nhưng vấn đề cơ bản vẫn còn. Anh ta không thực sự có vẻ buồn bực, chỉ tức giận. Chủ yếu là vì bạn thường gặp phải kẻ thù một mình, và không phải với những kẻ thù khác mà người chơi khùng không thích, vì vậy khía cạnh ngẫu nhiên bị hạ thấp.

Làm thế nào khác tôi có thể làm cho anh chàng có vẻ Bối rối, và không chỉ tức giận / hôi miệng?


Tôi nhận ra đây là một câu hỏi danh sách biên giới. Vì vậy, tôi áp đặt các yêu cầu này: Nó phải là một câu trả lời đầy đủ rất chi tiết cho thấy tất cả các trạng thái và điều kiện để chuyển đổi. Và nó phải hơn một dự đoán. Bạn nên kiểm tra điều này trong roguelike của riêng bạn, hoặc nếu không thì rõ ràng tại sao đây là giải pháp 'tốt nhất' có thể xảy ra khi hiểu ý tưởng về trạng thái Berserk.

Tôi cũng sẽ không vi phạm nếu điều này bị đóng cửa. Tôi nhận ra nó nhảy cạnh.

Câu trả lời:


7

Berserker-tâm lý

  • Anh ta bực mình / hung hăng. (Do đó, anh ta cần một lý do và một mục tiêu để được tức giận.)
  • Khi anh ta tức giận, anh ta trở nên nguy hiểm hơn (Ngoài ra, nếu anh ta không tức giận nữa, anh ta sẽ trở lại bình thường.)

Kích hoạt - Lý do anh ấy đi điên

  • Anh ta bị xúc phạm
  • Anh ta bị tổn thương (hoặc thú vị hơn, anh ta bị tổn thương một số lượng quan trọng nhất định)

Hiệu ứng

  • Anh ấy trở nên mạnh mẽ hơn
  • Anh ấy trở nên nhanh hơn
  • Anh ấy có nhiều sức khỏe
  • Anh ta bắt đầu hét lên
  • Anh ta bắt đầu đi theo người gây sát thương

Người chơi phòng thủ

  • Người chơi có thể giết người điên
  • Thiệt hại môi trường giết chết người điên loạn (dẫn anh ta vào một cái bẫy)
  • Người chơi có thể làm chậm sự điên loạn
  • NPC / Người chơi / Kẻ thù khác làm tổn thương người phê bình điên cuồng -> berserk ngay sau mục tiêu mới
  • Theo thời gian, người điên loạn bình tĩnh lại (nếu anh ta không bị đánh nữa)

Làm thế nào điều này sẽ chơi

Người chơi gặp kẻ thù. a) Người chơi gây sát thương nhỏ nhiều lần (kẻ địch đánh trả, nhưng không gây điên loạn), b) Người chơi gây sát thương lớn, kẻ địch mất rất nhiều máu, nhưng lại nổi điên. Người chơi bây giờ phải chạy trốn. Trong khi chạy trốn anh ta có thể a) gây thêm sát thương, b) làm chậm người điên loạn. Nếu a) kẻ thù ở lại điên loạn hoặc chết. Nếu b) kẻ địch bình tĩnh lại (làm chậm anh ta, không gây sát thương chí mạng). Khi anh ấy bình tĩnh lại, bạn có thể tấn công anh ta một lần nữa. Có lẽ anh ta chết bây giờ :-)

Lưu ý: Nếu bạn không đồng ý với tuyên bố của tôi, rằng kẻ điên loạn tấn công mục tiêu làm tổn thương anh ta, bạn có thể thay đổi điều đó để kẻ điên loạn tấn công nhân vật gần nhất . Điều này sẽ rất thú vị, nếu anh ta bị tấn công từ xa. (Đối với một đấu sĩ kiếm cũng sẽ như vậy.)


4
Một số ý tưởng khả thi hơn: 1. Yêu cầu người tấn công tấn công mục tiêu của anh ta và bất kỳ ai giữa anh ta và mục tiêu . Thậm chí tốt hơn nếu bạn có thể làm cho kẻ thù khác nhận thấy điều này và tranh giành ra khỏi đường đi. 2. Các cuộc tấn công bị bỏ lỡ, hoặc nhìn thấy những người khác đứng về phía mình bị giết, cũng có thể đóng vai trò kích hoạt. Vì vậy, hai kẻ man rợ tấn công bạn: bạn giết một, và người kia điên loạn. 3. Mất bô miệng. Một tiếng hét khi chế độ điên cuồng được kích hoạt có thể là ổn, nhưng sau đó tôi tưởng tượng anh ta quá tập trung vào tấn công để bận tâm với việc nói chuyện. Có thể thêm một tiếng kêu tấn công đơn giản (ví dụ "Chết!") Khi anh ta đạt được khoảng cách cận chiến.
Ilmari Karonen

@IlmariKaronen Tôi thích những ghi chú này. Đặc biệt là # 1. Điều đó cảm thấy rất giống như ai đó trong một nhóm lớn mất đi sự tào lao của mình và mọi người chạy đến che chở. Điều đó sẽ gây bối rối cho tôi. Câu trả lời ở đây là một khởi đầu rất tốt, nhưng tôi không chắc nó cảm thấy buồn phiền và tôi rất muốn xem một số ghi chú về các trạng thái khác mà bạn sẽ chuyển sang. Rất nhiều điều làm cho AI tốt mà cảm thấy sống động là cách các thực thể chuyển đổi và những gì chúng làm. Chỉ cần đi thẳng từ buồn bã đến chiến đấu như bình thường là một chút chói tai.
DampeS8N

Tôi nghĩ quan trọng nhất là bạn cần một hình ảnh động hỗ trợ trạng thái điên cuồng của nhân vật (anh ta có một cái đầu đỏ, trở nên to hơn, v.v.). Phản hồi trực quan quan trọng hơn nhiều so với hành vi của AI trong việc truyền đạt trạng thái cảm xúc của nhân vật.
Fabian

Các tiểu bang AI sẽ là: Bình tĩnh -> GettingAngry (một hình ảnh động && đề một số thiệt hại cho tất cả các đối tượng gần) -> Attack / Chase -> BeingExhausted (anh ấy là đặc biệt dễ bị tổn thương) -> Calm
Fabian

@Fabian Điều đó phụ thuộc vào tính toàn vẹn trực quan của roguelike. Trong trường hợp này, chúng ta đang nói glyphs văn bản. Vì vậy, điều tốt nhất tôi có thể làm là một nhân vật màu đỏ / nhấp nháy. Đó là lý do tại sao vấn đề này khó khăn, bởi vì tôi thực sự không có gì hơn là một hành vi để đầu mối người chơi vào những gì đang xảy ra. Tôi có thể dán nhãn chúng khi kiểm tra là điên cuồng, nhưng điều đó sẽ mang lại ý nghĩa gì? Hành động nói to hơn.
DampeS8N

7

Tôi cho rằng câu trả lời phụ thuộc vào những gì bạn nghĩ là "người điên".

Berserker lịch sử là những đội quân xung kích tập trung sự chú ý của họ vào việc tham gia và giết chết đối thủ của họ mà không quan tâm đến bất cứ điều gì khác, kể cả sự an toàn của chính họ hoặc của những người khác về phía họ. Các nguồn khác nhau không đồng ý về việc họ đã giết người bừa bãi như thế nào: một số người mô tả họ cố tình giết bất cứ ai và mọi người xung quanh, trong khi những người khác chỉ mô tả họ là những chiến binh không biết sợ. Đây là một trích dẫn khá giữa đường từ câu chuyện Ynglinga , thông qua Wikipedia:

"Những người đàn ông của anh ta (Odin) lao về phía trước mà không có áo giáp, điên cuồng như chó hay sói, cắn khiên và mạnh mẽ như gấu hoặc bò hoang, và giết người trong một cú đánh, nhưng không phải lửa cũng không phải sắt nói với họ. gọi là Berserkergang . "

Vì vậy, quan niệm của tôi về một người điên khùng sẽ như thế này:

  • Hoàn toàn không sợ hãi , có lẽ không biết gì về nỗi đau. Sẵn sàng thu hút kẻ thù ở mọi cấp độ.
  • Tập trung cao độ vào chiến đấu, để loại trừ bất cứ điều gì khác đang xảy ra xung quanh họ.
  • Không hoàn toàn bừa bãi trong việc giết chóc, nhưng có lẽ sẵn sàng tấn công bạn bè (có lẽ thậm chí không nhận ra) nếu họ cản đường anh ta. Cũng có thể tấn công bạn bè nếu không có kẻ thù xung quanh, nhưng vẫn nên thích mục tiêu của kẻ thù nếu có.
  • Khinh thường các chiến thuật tinh vi hoặc thận trọng: buộc tội kẻ thùhack chúng thành bit là tên của trò chơi ở đây. Thích chiến đấu mêlée, nhưng có thể sử dụng vũ khí tầm xa đủ mạnh (như súng, tốt nhất là tự động hoàn toàn và bắn trong khi chạy về phía kẻ thù) nếu có.
  • Mạnh mẽcứng rắn một cách bất thường - có thể không khó khăn ở cấp độ Superman, nhưng họ chắc chắn sẽ nhận được một số phần thưởng tấn công và phòng thủ, và có lẽ là tăng tốc độ nhẹ.

Vì vậy, làm thế nào tôi có thể dịch những đặc điểm này thành hành vi AI của trò chơi? Vâng, đây là một vài ý tưởng:

  • Điều này sẽ là một kẻ không có trí tuệ, nhưng một kẻ điên khùng không bao giờ nên chạy trốn , ngay cả khi anh ta rơi xuống một điểm nhấn và chảy máu. Chỉ cần tắt mã đó. Ditto cho bất kỳ chiến thuật "phòng thủ" khác.

  • Ưu tiên các lựa chọn chiến thuật theo thứ tự này: 1. Tấn công. 2. Di chuyển về phía mục tiêu. 3. Mọi thứ khác. Cụ thể, các berserker không nên dừng lại để nhặt vật phẩm nếu có kẻ thù trong tầm mắt, ngay cả khi các vật phẩm đó là, vũ khí tốt hơn so với hiện tại. (Tuy nhiên, việc chuyển từ tay trần sang vũ khí mêlée đã được giữ có thể được ưu tiên một cách hợp lý ngay cả khi tấn công.)

  • Nếu cả tấn công đuổi theo mục tiêu đều có thể là các lựa chọn chiến thuật hợp lệ cùng một lúc, hãy cân nhắc việc cho các berserker của bạn khả năng thực hiện cả hai cùng một lúc (một cuộc tấn công "trong"), ngay cả khi sinh vật của bạn thường không thể làm rằng (có thể với một hình phạt chính xác để bồi thường). Bằng cách đó, những người điên cuồng của bạn sẽ không phải giảm tốc độ để có cơ hội tấn công.

  • Lựa chọn mục tiêu: Tôi khuyên bạn chỉ nên chọn kẻ thù có thể nhìn thấy gần nhất (bất kể cấp độ nào) và để kẻ điên cuồng đuổi theo anh ta, ít nhất là trừ khi kẻ thù khác đến gần hơn đáng kể (giả sử, một nửa khoảng cách đến mục tiêu hiện tại). Tiếp tục đuổi theo mục tiêu ngay cả khi bạn tạm thời bị mất tầm nhìn, miễn là mục tiêu không đi quá xa. Điều này sẽ cho một số cảm giác của tâm trí đơn. Khi mục tiêu đã ở trong phạm vi mêlée, hãy tấn công anh ta.

  • Tìm đường: Nếu có những mối quan hệ bạn bè giữa người điên và mục tiêu của anh ta, hãy cân nhắc để anh ta tấn công họ và vượt qua. Điều đó tùy thuộc vào bạn háo hức làm điều đó như thế nào, bạn sẽ làm cho anh ấy - ít nhất anh ấy nên làm điều đó nếu không có con đường nào khác đến mục tiêu, nhưng bạn thậm chí có thể cân nhắc việc khiến anh ấy bỏ qua những người bạn hoàn toàn trong việc tìm đường.

  • Những điều trên có lẽ hoạt động tốt nhất nếu bạn cũng làm cho những người bạn (không phải là người thích chơi khăm) cố gắng chạy trốn khỏi quảng trường mà người chơi khăm sẽ tiếp tục di chuyển vào (và có thể cả hai hoặc hai ô vuông tiếp theo trên đường của anh ta nữa). Tất nhiên, nếu có quá nhiều người, họ có thể không chạy trốn kịp thời ...

  • Nếu không có mục tiêu kẻ thù xung quanh, hãy xem xét để cho kẻ điên cuồng tấn công gần đó (liền kề, hoặc có thể cách một hoặc hai ô vuông) thay vào đó. Tất nhiên, nói bạn bè nên cố gắng chạy trốn. Ở bất kỳ ngã rẽ nào mà người chơi khùng không có mục tiêu của kẻ thù và không thực hiện một cuộc tấn công, hãy khiến anh ta di chuyển ngẫu nhiên và cho anh ta cơ hội mỗi lượt ngẫu nhiên để bình tĩnh lại và trở lại trạng thái bình thường.

  • Lựa chọn vũ khí: Như tôi đã lưu ý ở trên, những kẻ điên cuồng thực sự rất giỏi trong trận chiến mêlée. Không sử dụng vũ khí tầm xa, trừ khi chúng đặc biệt phổ biến và mạnh mẽ trong trò chơi của bạn (ví dụ: súng trong môi trường hiện đại). Nếu bạn để cho những kẻ điên cuồng của bạn sử dụng vũ khí tầm xa hoặc hiệu ứng khu vực, hãy để họ bắn họ trong khi đuổi theo mục tiêu của họ (xem các cuộc tấn công "trong việc vượt qua" ở trên). Rõ ràng, thiệt hại tài sản thế chấp nên được bỏ qua (bởi berserker - làm cho kẻ thù khác tranh giành để đứng ngoài ranh giới giữa bạn và một kẻ điên cuồng với một khẩu súng sẽ là một cú chạm rất đẹp).

  • Và, tất nhiên, các berserker nên có những đòn tấn công, phòng thủ và tốc độ thích hợp. Họ có lẽ cũng nên miễn dịch với bất kỳ hiệu ứng mệt mỏi hoặc sợ hãi. Nếu bị mù hoặc nhầm lẫn, chỉ cần họ thực hiện các cuộc tấn công ngẫu nhiên với hy vọng đánh được thứ gì đó.

Bạn lưu ý rằng bạn muốn điên cuồng là một trạng thái đôi khi có thể bị kẻ thù bình thường xâm nhập (với xu hướng của nó). Vì vậy, bạn sẽ cần phải quyết định cái gì sẽ kích hoạt nó. IRL, các yếu tố kích hoạt được mô tả theo truyền thống bao gồm chiến đấu, gắng sức và căng thẳng. Một số kích hoạt tiềm năng cho một trò chơi có thể bao gồm:

  • nhìn thấy kẻ thù,
  • tấn công,
  • bị tấn công,
  • bị thương nặng
  • nhìn thấy những người khác trong chiến đấu,
  • nhìn thấy người khác bị giết, hoặc
  • nhìn thấy dấu vết chiến đấu (vết máu, xác chết).

Không ai trong số họ có thể nên IMO là trình kích hoạt tự động; thay vào đó, nên có một cơ hội ngẫu nhiên cho mỗi sự kiện như vậy để kích hoạt trạng thái điên cuồng, với tỷ lệ cược có thể thay đổi dựa trên xu hướng cá nhân và mức độ nghiêm trọng của sự kiện. Ngoài ra, sự kết hợp của một số yếu tố kích hoạt có thể khiến bạn bối rối hơn: ví dụ, sự hiện diện của kẻ thù có thể nhìn thấy có thể là điều kiện tiên quyết cho bất kỳ sự kiện nào khác để kích hoạt sự điên cuồng, trong khi các điểm nhấn thấp có thể làm tăng tỷ lệ cược cho các kích hoạt khác.

Ngoài ra, bạn có thể xem xét giới thiệu "đồng hồ đo cơn thịnh nộ" thay vì chỉ một trạng thái điên cuồng bật / tắt đơn giản. Ví dụ, một berserk mới được kích hoạt có thể bắt đầu lúc, giả sử, rage = 1, với việc tấn công và bị tấn công làm tăng mét, và không thấy bất kỳ kẻ thù nào làm giảm nó. Ở cơn thịnh nộ thấp, một người điên cuồng chỉ đơn giản là không sợ hãi và được buff, nhưng nói chung sẽ tránh được những người bạn tấn công, trong khi cơn thịnh nộ tăng lên sẽ làm tăng các buff nhưng cũng làm cho các cuộc tấn công của berserk ngày càng ít bị phân biệt đối xử. Khi đồng hồ đo cơn thịnh nộ xuống 0, người điên khùng bình tĩnh lại và trở lại bình thường.

Đối với những tiếng la hét tục tĩu, tôi hầu như thoát khỏi chúng: Tôi thấy một kẻ điên khùng vì quá tập trung vào việc tấn công để làm phiền với bất kỳ lời chế nhạo ngớ ngẩn nào. Tôi cho rằng bạn có thể khiến anh ta hét lên một cái gì đó khi trạng thái điên loạn được kích hoạt, và có thể gầm lên hoặc phát ra tiếng kêu chiến tranh đơn giản khi đóng cửa phạm vi mêlée, nhưng điều đó dường như là đủ với tôi.


Chỉnh sửa: Sau khi đọc lại những gì tôi đã viết ở trên, tôi đoán rằng ý chính thực sự của những gì tôi đang cố gắng nói là: đừng tập trung quá nhiều vào chính AI điên cuồng. Cuối cùng, nó có thể trở nên khá đơn giản, có thể đơn giản hơn nhiều so với AI kẻ thù bình thường của bạn. Thay vào đó, hãy tập trung vào cách những kẻ thù khác sẽ hành xử khi họ nhìn thấy một kẻ điên cuồng ở gần đó - đó là nơi mà động lực thực sự thú vị sẽ xuất hiện.


1
Chọn lại mục tiêu, một khi anh ta bắt đầu đuổi theo ai đó, anh ta có thể có tầm nhìn rất hẹp, vì vậy anh ta lao qua những kẻ thù khác mà không hề nhìn thấy họ.
Peter Taylor
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.