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

BLADE: Adjust IV action to current-city affect rather than global #1586

Draft
wants to merge 9 commits into
base: dev
Choose a base branch
from

Conversation

Faenre
Copy link
Contributor

@Faenre Faenre commented Aug 15, 2024

Adjust Bladeburner IV action to affect a single city

This PR makes the Bladeburner general action "Incite Violence" affect only the current city, rather than all cities on the map. This change opens up potential room for strategic behavior from the player, while removing a trap that can very easily lead to ruining an entire bitnode mid-play with very little effort or guidance.

image

Context

Choice of player city is a core aspect of Bladeburner, where anything that affects any city, affects the player's Bladeburner HQ city. Typically, for most actions, you want to choose a city with higher populations, because they make your tasks easier; and due to Chaos penalties, you typically need to perform Diplomacy actions any time Chaos approaches 50, otherwise it becomes increasingly difficult to progress.

The Incite Violence general action has the stated goal of providing new contracts for the player, at the expense of increased Chaos. However, unlike all other Bladeburner actions, right now this affects all cities. This is counter-intuitive and non-obvious to the user, as well as being non-visible to the player unless they have scripted a dashboard for themself using the Bladeburner API (which is not immediately available).

Current implementation:

  • All Bladeburner mechanics except for Incite Violence are targeted to specific regions
  • Incite Violence causes all cities grow chaos at both a static and inverse-logarithmic rate
  • There is no player skill scaling in either contract gain or violence increase
  • The static increase chaos += 10 is more drastic already than any other player action

This leads to the following results:

  • The player's choice of city is irrelevant for this mechanic, which goes against all other Bladeburner mechanics
  • The player can lock themselves out of hours of gameplay with only a few cycles
  • A character with end-node-levels of high charisma can essentially ignore this penalty, but early-mid-node, the chaos penalty locks you out of all Bladeburner activities quite quickly, because the Chaos penalty to Contracts and Operations can quickly bring you into < 10% success rate on even Tracking contracts

For comparison with other related mechanics:

  • Choice-of-city is directly relevant to the Bladeburner mechanic design. Every other action that affects the world, affects the current city, with difficulties and impacts relating to actions there
  • The highest chaos changes from other mechanics are:
  • + 1.00 + getRandomIntInclusive(5, 20) / 100 from synthoid riots random event, at 20% chance
  • + 0.01 flat gain from Sting operations
  • + 1-5% percentage gain from Raid operations
  • +/- up to 5% from Assassination operations
  • + 0.02 from Bounty Hunter contracts
  • + 0.04 from Retirement contracts
  • All of the above are single-city adjustments

Incite Violence has both a flat gain that is 250x as powerful as the next most disruptive player event, and a minimum +10% scaling that is more than double the Raid operations, with no ceiling. Meanwhile, the benefit is a constant, non-scaling amount of change.

Solution

The changes made at time of writing remove the global factors to the city population gains.

Linked issues

Per Discord conversation:

Conversation ensues from that point.

Documentation

Clarity is added to the general action in-game description.

Testing

  • Include how it was tested
  • Include screenshot / gif (if possible)
  • Make sure you run npm run format and npm run lint before pushing.

After changes, before inciting violence:
Screenshot 2024-08-15 at 11 30 36 AM

After changes, after 1 incite violence:
image

After changes, after getting up and going to the restroom and coming straight back:
image

Before the changes, this affected all cities in the game equally.

}
const city = this.getCurrentCity();
city.changeChaosByCount(10);
city.changeChaosByCount(city.chaos / Math.log(city.chaos) / Math.log(10));
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This part is the logical change. The scaling stays the same in this PR, but the penalty now only affects the player's current city.

Also, the change to changeChaosByCount handles integer safety with a clamp that defaults to Number.MAX_VALUE.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To continue on the discord discussion: I vote for combining the two logics. This is not a perfect, final solution, but merely something that I'm confident will move this PR forward and allow us to make adjustments that have a positive effect on playability.

  • give the old, heavy penalty to the current city, but not others
  • apply the flat penalty to all cities

This way the cost of generating contracts remains global, but the escalating effect only stays on the one you are currently looking at (ie. you won't accidentally end up with your non-current city having 1e50 chaos in two days).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I request separating this commit out to a new PR and reverting it in this one so we can merge the surrounding refactors.

@Faenre Faenre marked this pull request as ready for review August 15, 2024 18:07
@d0sboots
Copy link
Collaborator

I will be straight with you: Bladeburner is one of the areas I am least familiar with, since I've never done it myself. So, I can review this code-wise, but I don't have the context to tell if it makes sense game-wise. That'll require either @Snarling, or a community consensus that this is a good idea.

Copy link
Collaborator

@d0sboots d0sboots left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would suggest (but not require) that you split this into two parts. There's some cleanup/refactoring that I can merge immediately (and that distracts from the logical change), and then the actual change, which I suspect will be debated for a bit.

src/Bladeburner/Bladeburner.ts Show resolved Hide resolved
@Faenre Faenre marked this pull request as draft August 15, 2024 20:14
Copy link
Collaborator

@Snarling Snarling left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From a balance perspective, this basically makes it no-cost to incite violence - have a burner city for generating contracts by inciting violence, and then actually perform the contracts in a different city.

If contract / operation counts were per-city, then this change would make sense, but since they are global I lean towards incite violence making sense as having a global impact since it is generating more global contract/operation counts.

That said I am open to other viewpoints.

@Faenre
Copy link
Contributor Author

Faenre commented Aug 15, 2024

From a balance perspective, this basically makes it no-cost to incite violence - have a burner city for generating contracts by inciting violence, and then actually perform the contracts in a different city.

If contract / operation counts were per-city, then this change would make sense, but since they are global I lean towards incite violence making sense as having a global impact since it is generating more global contract/operation counts.

That said I am open to other viewpoints.

Is that a problem, though?

If the goal is to put a limiter on players generating contracts for int-farming, perhaps we can do that another way? As it is, the global chaos gain is a horrible player experience.

  • Because Diplomacy scales on charisma and applies a percentage change, players who are int-farming don't care anyway. They just get however much charisma is needed, then wipe 100% of the chaos per diplomacy
  • Early- and mid-node, this can quickly burn not just one city, but every city, to the point of Bladeburner being entirely unusable. You essentially can't come back to it later on without spending hours to build charisma and whittle away at it.

Changing it to be single-city is a strategic investment that is potentially punishing, but it means players who don't have sleeves yet have a method to generate contracts and operations that doesn't brick their run.

Basically the global-hit limits/punishes the wrong people. It's not powerful enough to be worth it if you're just trying to clear a node, and it does nothing to slow people down who are int-farming

@Snarling
Copy link
Collaborator

Snarling commented Aug 16, 2024

Beating a node with Bladeburner is time gated and stat gated - you need time to generate enough contracts / operations to reach enough rank for the later blackops, and you need stats to be able to actually complete those tasks.

Tools have been added to ease the time gate - Incite Violence and the sleeve "Infiltrate Synthoids" task, but I don't think it's healthy for the game to erode the time gate too much. Incite violence is supposed to have a real cost.

If it's going to only raise chaos in one city, then there needs to be some tradeoff, a reason to not just ignore chaos management and concentrate all the chaos in one bad city. For instance the task could become less effective if chaos is higher in the current city.

@Faenre
Copy link
Contributor Author

Faenre commented Aug 16, 2024

After a day of lots of discussion, a consensus seems to be not to adjust IV to only affect 1 city, but that it should be a flat scaling (perhaps +10 to all cities), plus have a chance to trigger a random event. Potentially, it's been suggested that Diplomacy receive an early-game buff as well, perhaps a flat amount plus the scaling (maybe -2).

Getting rid of the scaling factor solves the exponential growth which leads to bricked/bitflumed circumstances:

OK, so I just ran the numbers. If your cha is 1000, it will take 4650 runs of diplomacy to get down from 1e50 to 50 chaos
That counts as "bricked" to me
d0sboots

As well, adding a small flat amount to the Diplomacy action will help the player at lower charisma, without making it busted OP. Otherwise, even at 1000 charisma, chaos in the 50-100 range will only recover 1-2 points per minute.

Before I get to coding it, how does this sound?

@d0sboots
Copy link
Collaborator

Chiming in with a late addition from the discussion that CatLover has requested some time to look at the mechanics too, so probably we can chill on this for a few days and resume discussion later. (As I suspected, even the "simple" things are not always simple or fast XD)

@Alpheus
Copy link
Contributor

Alpheus commented Oct 12, 2024

I vote to merge the refactor and split the functional change to a new PR.

I would like to test cover this separately to make it easier to reason about.

@d0sboots
Copy link
Collaborator

Oh yeah, we never really got back to this. Also, I forgot there was other refactor here (although it's mostly incidental.)

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

Successfully merging this pull request may close these issues.

4 participants