هوش مصنوعی الدن رینگ اونقدرا هم پیچیده نیست
خلاصهٔ کاملتر
FromSoftware به خاطر تنوع و سختیِ رفتار دشمنها تو کل سری Soulsborne معروفه، ولی نویسنده میگه پیادهسازی واقعی این هوش مصنوعی برخلاف تصور، خیلی هم پیشرفته و پیچیده نیست. چون بیشتر کد بازی با Havok Script (یه نسخهٔ Lua مخصوص بازیسازی) نوشته شده، دیکامپایل و بررسیش نسبتاً راحته.
مرکز اصلی این معماری چیزیه که FromSoftware بهش میگه Goal: یه حالت مشخص که Actor (مثل یه دشمن یا باس) میتونه توش باشه. هر Goal میتونه پارامتر بگیره و به دادههای خود Actor دسترسی داشته باشه، ولی در اصل فقط یه جدول ثابت از تابعهاست.
بهجای یه Finite State Machine ساده، این Goalها روی یه پشته سازماندهی میشن که عملاً سیستم رو به یه Pushdown Automaton تبدیل میکنه. تو هر فریم، Goalِ بالای پشته آپدیت میشه؛ میتونه چندتا Sub-Goal جدید روی پشته push کنه که فریم بعد اجرا میشن. هر Goal هم در نهایت یکی از سه نتیجهٔ Continue، Success یا Failure رو برمیگردونه؛ Failure باعث میشه همهٔ Goalهای اجرانشده تا خودِ Goal والد از پشته پاک بشن.
نویسنده با یه مثال فرضی به اسم CoolBossBattle نشون میده این پشته چطور کار میکنه: این Goal چندتا Sub-Goal حمله رو پشت سر هم push میکنه؛ اگه یکی از حملهها شکست بخوره، پشته تا خودِ CoolBossBattle خالی میشه و دوباره باید تصمیم بگیره چیکار کنه.
3: Attack (R2, Combo) <-- در حال اجرا
2: Attack (R2, Repeat)
1: Attack (R2, Finisher)
0: CoolBossBattleمهمترین تابعی که تو هر Goal پیادهسازی میشه Activate هست؛ همونجاست که Actor بر اساس فاصله تا هدف، وضعیت فعلی و کمی رندومبودن تصمیم میگیره چیکار کنه. الگوی رایج اینه که یه سری وزن برای اکشنهای مختلف (مثل حملهٔ سبک، حملهٔ سنگین، leap attack) تعریف میشه -که بسته به فاصله با بازیکن فرق میکنه- و بعد یه انتخاب تصادفیِ وزندار بین اون اکشنها انجام میشه؛ حتی وزن بعضی حملهها بر اساس cooldown اخیرشون صفر میشه تا زیادی تکراری نشن.
در کنار Activate، Goalها یه callback دیگه هم دارن به اسم Interrupt که به رویدادهای بیرونی مثل آسیبدیدن یا استفادهٔ بازیکن از آیتم واکنش فوری نشون میده. اینترپتها از پایین به بالای پشته اجرا میشن تا یکی از Goalها اعلام کنه رویداد رو مدیریت کرده. نویسنده مثال میزنه چطور میشه یه باس رو طوری تنظیم کرد که با آتشگرفتن، فوراً پشتهٔ فعلیش رو پاک کنه و بره تو یه ترکیب حملهٔ خشمگین؛ یا مثلاً Bell Bearing Hunter که با دیدن جادو یا آیتمخوردن بازیکن، ۸۵٪ احتمال داره فوراً اکشن فعلیش رو رها کنه و حمله کنه.
نکات کلیدی:
- به گفتهٔ نویسنده، هوش مصنوعی دشمنها و باسهای FromSoftware یه پشتهٔ ساده از Goal (شبیه Pushdown Automaton) هست، نه یادگیری ماشین
- انتخاب حملهها با یه سیستم وزندهی تصادفی بین چندتا اکشن انجام میشه که بر اساس فاصله و cooldown تغییر میکنه
- Interruptها به Actor اجازه میدن فوراً به رویدادهایی مثل آتشگرفتن یا آسیبدیدن واکنش نشون بده
- این معماری با ترکیب Goalهای ساده، رفتارهای پیچیده و قابلپیشبینی میسازه بدون نیاز به هوش مصنوعی پیشرفته




