Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sub tracking and quick run feature proposal #3638

Closed
presheaf opened this issue Jun 12, 2018 · 2 comments · Fixed by #4265
Closed

Sub tracking and quick run feature proposal #3638

presheaf opened this issue Jun 12, 2018 · 2 comments · Fixed by #4265

Comments

@presheaf
Copy link
Collaborator

The motivation for this is to allow for runs to be made with less Corp interaction, and icebreakers to have auto-break convenience methods. Below, I'll go more in depth on what I want, and give a mockup of the UI I'm imagining.

Currently, the Corp needs to say "yes, I accept that you have broken all subs" for each piece of ice, and
if not, manually select the ones to fire. Ideally, the Corp would only be needed to rez/trigger paid abilities, so a run on a server where all the ice is rezzed should be resolvable entirely by the Runner, with no user interaction needed from the Corp except to rez non-ice cards or trigger paid abilities if necessary.

This breaks down into three sub-goals:

  1. Have the game track the number and types of sub on pieces of ice
  2. Give the Runner an "Fire unbroken subs" button and corresponding dialog
  3. Give the Corp a "Always 'No further action' on rezzed ice" button

Necessary modifications to game engine

  1. The game needs a method get-subroutines taking the state and a piece of ice as argument and returning a list of subs. Once existing ice have their sub lists updated, this will generally be a simple lookup at the :subroutines key, although some ice (e.g. NEXT Silver) needs to be intelligent about this.

  2. The Corp should get a togglable ability "Always 'No further action' on rezzed ice" which would effectively instantly press 'No further action' if the ice the run arrow is pointing to is rezzed. It would assume the corp takes other rez/paid abilities when appropriate, which should be fine unless the Runner plays too fast.

  3. The Runner should get a button 'Fire unbroken subs' as an alternative to 'Continue'. This would 1) check how many subs were broken and how many exist, spawn a 'which subs were broken' prompt if needed, and then resolve all unbroken subs without needing the Corp to take any action unless the sub requires it (e.g. Miraju). To see what this prompt might look like, see "Unbroken subs prompt UI".

  4. Icebreakers should get 'break all' convenience methods added. These would trigger the icebreaker's break ability as many times as there are subs on the piece of ice. Some breakers (Endless Hunger) can't break all, of course.

Unbroken subs prompt UI example

Let's consider a runner who is encountering a rezzed Archer. The Archer was rezzed before the run, and the Corp has enabled auto-pass, so the Runner does not need to wait for the Corp to press 'no further action' before they break/pass Archer.

The Runner wants to break all subs except the first, but has mistakenly only pressed 'break ice subroutine' twice before pressing "allow unbroken subs to fire". The game defaults to assuming the Runner wants to break the subs in order, but allows the Runner to correct this, and even to mark too many/few subs for firing.

If the runner presses "Done marking broken/unbroken subs" without having marked what the game thinks is the correct number of subs, the game still only fires the ones the Runner says, but grumbles about it to console.

Prompt once the Runner clicks "Allow unbroken subs to fire"

Archer has 4 subs (you broke 2)

  1. (Broken) The Corp gains 2 credits.
  2. (Broken) Trash a program.
  3. (Unbroken) Trash a program.
  4. (Unbroken) End the run.
  5. Done marking broken/unbroken subs

Prompt after button 1 is pressed:

Archer has 4 subs (you broke 2, but have selected 1)

  1. (Unbroken) The Corp gains 2 credits.
  2. (Broken) Trash a program.
  3. (Unbroken) Trash a program.
  4. (Unbroken) End the run.
  5. Done marking broken/unbroken subs

Prompt after button 3 is pressed:

Archer has 4 subs (you broke 2)

  1. (Unbroken) The Corp gains 2 credits.
  2. (Broken) Trash a program.
  3. (Broken) Trash a program.
  4. (Unbroken) End the run.
  5. Done marking broken/unbroken subs

Prompt after button 4 is pressed:

Archer has 4 subs (you broke 2, but have selected 3)

  1. (Unbroken) The Corp gains 2 credits.
  2. (Broken) Trash a program.
  3. (Broken) Trash a program.
  4. (Broken) End the run.
  5. Done marking broken/unbroken subs

Once button 5 is pressed, the game would print "The 'Gain 2 credits' subroutine on Archer resolves.", resolve Archer's first sub, then print "Note: the Runner only broke 2 subs, but marked 3 as broken." to console.

Clarifications

Backwards compatibility

If the runner presses 'Continue', the break/fire stepis assumed to have been handled by the players, so they could play the run 100% old-style if they prefer. Subroutines will still be manually firable by the Corp to easily correct mistakes.

"Fire all" fails gently

If the Runner clicks "Fire all", a list of subs is presented to them with a "Is this correct?" dialog before actually firing anything, which will always allow the Runner to go "whoops" if needed.

Encounter effects are still manual

Not 100% sure how this works out with ice like grail/Komainu.

Special cases:

Some effects break a variable number of subs (switchblade, black orchestra, ++), so the game cannot always infer how many subs the player meant to break. For simplicity, I suggest having the game assume the Runner always breaks as many as possible and rely on the Runner to press 'Allow unbroken subs to fire' if they want to.

Gbhali/Kongamato/Endless Hunger all break special types of subs. I suggest ignoring these and having the game treat them as if their effects said "Break ice subroutine".

@NoahTheDuke
Copy link
Collaborator

NoahTheDuke commented Jun 12, 2018

I think this looks great. I've had an itch to redo the netrunner json to better fit our use-case, and think that if we can pool our efforts, we could automate most (if not all) of the subroutine stuff. The json isn't improved much by the things I'd planned on doing, so I abandoned it, lol.

@Saintis
Copy link
Collaborator

Saintis commented Jun 13, 2018

I like the idea of adding subroutine counts to ice. I'm less convinced by the rest of the proposals. I think the current panel the runner can open on ice can be expanded to actually trigger the subroutines instead of just printing a statement to the logs. That might be a good start at least.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants