luttje/gmod-experiment-redux

Nemesis AI should set bounties and have basic interactions

luttje opened this issue · 5 comments

For the first Epoch I'm hoping we can have the following features implemented:

The Nemesis AI can:

  • set bounties on players leading the leaderboards
  • show messages on the monitors in the city (low priority)
  • speak Text-To-Speech (TTS) messages through the city
  • show message in chat besides only speaking TTS (for improved accessibility) f5f605c
  • Implement task to remove bounty and prevent friends claiming bounties (read in the comment below)
  • Implement bounty timeout, so the same player doesn't constantly get bounties every hour

Additional notes

  • For what in-world reason does the AI set bounties?
    I'm thinking that because the rebels oppose the AI, and because the rebels manage the leaderboards, it makes sense for the AI to want to thwart those helping the rebels.

  • How often does the Nemesis AI set bounties?
    Every hour atm.

  • For how long does the bounty last?
    30 minutes.

(enable audio) Here's a quick test of the TTS system:

experiment.-.nemesis.ai.mp4

Technical background: The voice is generated on the server using an AI (how fitting). Then I feed it through FFMPEG to apply some effects like reverb. The generated speech is saved to a file, after which the server will send an URL to that file to the clients that are connected. This will result in all connected players hearing the AI speak the same way.

An upside of using TTS over pre-recorded voice acting is that we can have the AI react to in-game events, even personalizing messages. E.g: "Go catch John Doe, kill them!", where John Doe is the target

Another sneak peak of progress on the speech:

experiment.-.nemsis.ai.integrated.mp4

Next up is the logic on when the AI speaks and when it sets bounties

It could be nice to also print the text on the chat, or as subtitles. When it plays out suddenly without the players expecting, it might be hard to tell what was said by the AI.

Or, if a specific audio cue played right before the AI spoke.

You're exactly right! A message in chat seems like a nice easy way to implement this. Will add it to the list :)

I've implemented basic bounties, but see a lot of ways that targets can circumvent having a bounty for long. For example when your friend gets a bounty on them, they simply log off, ask you to come online with them and then let you claim the bounty. Both could even share the profits.

I've written up a game mechanic that I think discourages this with pretty simple game mechanics. I don't see an obvious way to abuse it.

Preventing friends claiming bounties

Obviously if a bounty is set on your mate, and you're next to them, you just claim it and share the prize. We should prevent this somehow, preferably with simple mechanics. For example: 'tracking who are friends, by keeping track of their distances to each other' is way too complicated. I've come up with the following simpler idea:

The target getting a bounty on their head is instructed to perform a specific task:

  1. The AI quietly informs the target the 'Locker Rot Virus' is threatening to expose the items in one of their lockers.
  2. They have to get X amount of their valuable items or bolts from a specific locker (e.g: at XCCR)
    If they reject the task or disconnect their locker will drop those items and the city will be informed of it
  3. After grabbing the items they are told to which other locker they have to bring it (e.g: near the Train Station). That locker has the only anti-virus that can save their items.
  4. The bounty is now announced to the city, whilst they're trying to run to the other side of the city holding their valuables.
    This incentivizes their friends to help them out, rather than to claim the bounty for themselves.
    Additionally the bounty bolts/items are not created from nothing, instead they come from the player with the bounty (not increasing the amount of wealth in the economy)
  5. When someone kills the target, the target drops 50% of their items/bolts. The rest is consumed by the 'Locker Rot Virus' and will never be seen again.
    This means the target's friends can't just help out by killing them, as it would result in a loss of items. Only by helping them reach the safe locker can loss be prevented.
    In this situation where the target is killed, the total amount of wealth in the economy is reduced.
  6. If the target survives and successfully makes it within range of the safe locker, the bounty is immediately lifted and they get to keep their items. Once in range they'll get temporary invulnerability (Quantum Buffer nano buff) so they can safely store the items without getting killed while in the locker menu.

Additional restrictions

  • To increase the difficulty challenge the target wont be told where the locker with the anti virus is for some time. For example they have to walk around with their valuables for 100 seconds before they get told where to go.
  • To prevent players from just rampaging through the city, killing all possible dangerous players: during the bounty, everyone can get infected with the 'Locker Rot Virus' if they kill anyone other than a person with the virus.

Alternatives

Some alternative ideas I had, which I dislike for their complexity and ease to abuse. These assume the bounty is simply placed on a character without them being able to perform any task to remove it (besides having to survive long enough):

  • Any characters nearby the target when the bounty is placed are disqualified from participating
  • Have the bounty last multiple hours, even persisting through death. After the bounty expires, randomly select one of the characters that killed the target. Only they get the reward. This makes it harder to collude, because other players will also have a chance to kill the target.
  • The target gets teleported to a random spawn point. Everyone gets told where they are. This gives everyone equal chance to claim the bounty. Getting randomly spawned near friends is just luck, you could just as easily spawn really far away from them.

Feedback appreciated

I'd love to hear suggestions or comments if anyone sees any problems. What I think will be most difficult is to explain this simply, in as few instructions as possible.