大家好,这是我的第一篇游戏开发博客,请多多包涵。

我正在开发一个可以通过聊天控制的自动战斗游戏。观众们不会玩这个游戏,他们会通过在聊天中输入文字来投票决定游戏的结果。两个队伍在屏幕的中间打架,聊天中的投票可以将道具投放到游戏场上,第一滴血的冠军将成为KOTH,获得经验值并守卫山丘。它24小时不间断运作,所以每件事情都有一个硬性限制:没有人在看时会注意到什么事情出了问题并介入。

其中一个系统角色就是我现在卡住的地方。每个队伍都有一个自主的“巫师”,一个追赶单位(类似于蓝壳)。他从落败的单位中收集灵魂,并且要决定在什么时候花费它们以及花费在什么上面。输掉的队伍的巫师的目的就是保持游戏的竞争性,而不让领先的队伍感觉到被剥夺。基本上就是蓝壳能量。太急切了,领先的队伍从来不会觉得自己赢得了胜利;太少了,压倒性的胜利只会使得局势更加恶化。并且,这个逻辑也要适合于一个人在凌晨4点观看的感受和几百个人在晚上8点大声喧哗的感受。

他可以实际上施放的东西。这个技能有三种不同。

对输掉的队伍的buff,每个buff持续60秒并且落在每个同盟单位身上:复仇(+50%攻击伤害)、保护罩(+30%最大生命值)、加速(+30%移动速度)、治疗(瞬间+40%最大生命值的治疗效果)和强化,掉落3个新的单位到山丘上面。

对领先的队伍的控制,一个紧密的区域围绕着山丘:毒液,一个向最靠近山丘的单位投掷的瘟疫骷髅,持续5秒钟的伤害并且在杀死单位后跳转到每个未被毒液影响的单位身上。冻结,冰封单位在一个冰块中,价值25%的生命值并且直到融化或自己的队伍打破冰块前都是无效的。混乱,群众最喜欢的技能,会使得敌人攻击附近的任何东西,包括彼此,10秒钟。

直接伤害,一个纯粹的攻击:火球,一个从巫师身上升起的流星,预警,然后爆炸成六个小流星,每个小流星都留下一个燃烧的区域,持续伤害任何站在上面的人并且在杀死单位后传播。

他是如何决定的。每3秒钟,他会读取地图并将状态分成一个桶,输掉山丘了吗,正在被抹杀吗,KOTH即将死亡吗,敌人聚集了吗。每个技能有12秒的冷却时间和灵魂成本。我故意停止他贮存灵魂,他在可以负担得起时就会花费灵魂,因为一个在凌晨4点感觉像是在卡住的追赶单位在卡住的感觉很破坏。优先级最高的是拯救我们的KOTH,如果他即将死亡,并且在我们山丘被淹没时发起一个α攻击。

我卡住的地方。桶的方法实际上就是一个阈值状态机,然而它有一个经典的问题:它会感觉到太敏感还是太消极的瞬间我改变了底层的数字。我的权重已经考虑了两个方向。一个utility-scoring系统,评估每个可用的施放每个tick与地图的得分,并且发射最高的,更加灵活并且更容易重新平衡,但如果权重没有精确地调整的话,会变得很不稳定。并且,一个轻微的rubber-banding标量叠加在上面,巫师的攻击性被推动的方式是如何不平衡的比赛已经是这样了,接近的比赛保持接近,压倒性的胜利不会雪球。

我尝试过的另一个方法是将施放分成三个意图,进攻、防御和buff,并且让AI选择一个意图并且在其中选择一个施放。然而,问题在于交叉案例。冰,例如,是同时进攻和防御的,防御性上你冻结一个攻击者离你的KOTH,进攻性上你冻结他们的KOTH使得你的队伍坍塌在上面。所以一个干净的三分法不太适用,有些施放属于两个组依赖于地图,和我不确定是将它建模为一个施放同时属于两个组还是将意图层只是评估同一个施放的不同。

我的当前解决方案是将成本设置得非常高,例如250次杀死后才会施放。在这个点上,他总是会施放一个进攻技能。然而,这很枯燥。有9个技能在他的手里,看着同一个技能在20-40分钟的战斗中是非常枯燥的。

问题。对于任何人都建造了自主单位的,如果它们不仅仅是反应于玩家而且会做出主动的决定的,那么哪一个方法对你最有效,并且你是否发现了一个方法来让它感觉到公平而不是被编程或随机的。并且,如果你处理了意图分组的交叉问题,如何建模一个同时进攻和防御的施放而不让逻辑变成一团乱麻?我是一个视觉的人,所以如果你有一个解决方案我会更喜欢一个视觉的。