smashwilson / hubot-hammersport

It's over when there's a winner.
MIT License
4 stars 0 forks source link

Design Brainstorming #1

Open smashwilson opened 10 years ago

smashwilson commented 10 years ago

This is just an issue to collect some brainstorming on how we want this to work. In particular, I'd love to design it to be more interactive. Here's what I'm thinking:

Hammersport matches could be restricted to a specific room ("#thechalkcircle") because they're going to be quite noisy, and this way they don't interfere with people actually trying to talk.

One channel member challenges another:

smashwilson: pushbot hammersport challenge @atiaxi
pushbot: @atiaxi has been challenged! "pushbot hammersport accept" to accept.

The challenge can be accepted, declined, or it can time out. If it's accepted, combat proceeds in rounds until There's A Winner :tm:. In each round, n (3?) attacks are chosen from each combatants' pool of available attacks. Both challengers must choose an attack from the pool.

pushbot: @smashwilson vs @atiaxi, round 1. Choose your move.
@smashwilson:
  [1] Hit Them Really Hard, With The Hammer
  [2] Wild Flailing
  [3] Some Kind Of Cool Description, I Don't Know
@atiaxi:
  [1] Roger Is Much Better Than Me At Coming Up With These
  [2] Whack! Whack! Whack!
  [3] Not In the Face!
smashwilson: pushbot hammer 2
atiaxi: pushbot hammer 1

Then both attacks get resolved simultaneously, damage is computed, it's determined if there's a winner, loop if there isn't. The winner gets EXP computed somehow and possibly unlocks more attacks. The loser probably gets EXP too.

Some open questions:

  1. Do we allow more than one match to go on at once? I feel like that could get really confusing. Do we allow new challenges to override ones that are timing out?
  2. Enhancement idea: defensive maneuvers or minor self-healing options as well.
  3. Because we can't send PMs though the Slack API, attack choice is public knowledge. This leaves the first attacker at a disadvantage, which we should compensate for. Maybe instead of simultaneous resolution, attacks happen in the order they're inputed? Or maybe some attacks get a special boost if they're chosen first?
  4. Damage types were great and I'd like to make them more relevant to the combat somehow. Maybe individual people can choose elemental alignments or weaknesses, or they get assigned on respawn?
  5. Enhancement idea: unlock perks as you level up, too, like additional max HP, or more attacks to choose from each round.

Some notes and miscellaneous thoughts:

  1. We shouldn't keep the attack list in this repo. Maybe I'll open up a private one for that and load them from a location given by an env var. (I could use that for the quotefile, too, actually.)
  2. Attacks should be implemented as a function that receives some broad context as an argument, so we can implement things like Red Miles, HP swaps, that kind of thing.

/cc @atiaxi

smashwilson commented 10 years ago

From Tom:

possibly allowing multiple challenges to be open at once, but only one active hammersport match?

So the chalk circle is only locked once a potential match moves into the accepted phase. It would keep unaccepted matches from stalling things up.