Stardance Mult Utility

Tools to visualize and explore the formula that Stardance uses to calculate project multipliers.

Interactive Graph

Drag the point side-to-side to adjust the percentile, and it'll display the multiplier.

Percentile to multiplier graphAn interactive graph of the Stardance multiplier formula. Drag the point, or focus it and use the arrow keys, to change the percentile.50% = 6.67x

Or check out the original Desmos graph (made by Jonah Crawford)

Calculator

Type a percentile to calculate the exact resulting multiplier, or type a multiplier to calculate the exact required percentile.

=

Modifiers

Rating Modifiers

The quality of your ratings actually affects the payout you get:

Thoughtful ratings earn a 1.2× payout blessing. Spam or low-effort ratings will get your payout halved.
Mult Range

Normal: the default mult range for the vast majority of projects is 1x-20x

Viral: if your project goes viral, the mult range becomes 20x-30x

Classic: before they changed it, the mult range used to be 0.3x-30x

Hours Calculator

Type in an hour count and a mukt to calculate how much Stardust you'll earn. You can also type a Stardust amount and a mult to calculate how many hours you'll need.

* =

Formula

Steps to apply the formula.

mult = m min + ( m max - m min ) ( percentile ) exp = 1 + ( 20 - 1 ) ( 50% ) 1.745427173 = 1 + 19 ( 50% ) 1.745427173 = 1 + 19 ( 0.3 ) = 1 + 5.67 = 6.67 percentile = ( mult - m min ) ( m max - m min ) exp = ( 6.67 - 1 ) ( 20 - 1 ) 1.745427173 = 5.67 19 1.745427173 = 0.3 1.745427173 = 50.02%

Code Walkthrough

Excerpts from the actual Stardance source code, annotated with my explanatory comments.

payouts.rb lines 449 to 453

# This function implements the actual formula that this whole project is about
def dollars_per_hour_for_percentile(percentile)
  # See the next code block for an explanation of these
  low = game_constants.lowest_dollar_per_hour.to_f
  high = game_constants.highest_dollar_per_hour.to_f

  # This is the math part. It normalizes the percentile, applies the exponent
  # to make it a nonlinear curve, and then converts that normalized value to
  # between the minimum mult (aka low) and the maximum mult (aka high).
  # I have no idea where the 1.745427173 exponent comes from.
  low + (high - low) * ((percentile.to_f / 100.0).clamp(0.0, 1.0) ** 1.745427173)
end

game_constants.yml

# These are the variables that control everything
shared:
  # Internally, stardust is called "tickets". This variable controls the
  # conversion ratio. At least, hypothetically. It's actually closer to 4
  # stardust per dollar for most shop items, though it varies.
  tickets_per_dollar: 5.0

  # This is used for the hour estimates in the shop
  dollars_per_mean_hour: 2.0

  # All three of these are completely unused
  min_quality_multiplier: 1.0
  mean_quality_multiplier: 10.0
  max_quality_multiplier: 30.0

  # These two are the ones used in the dollars_per_hour_for_percentile()
  # function you saw in the previous code block. That's actually the *only*
  # place where these are used.
  lowest_dollar_per_hour: 0.2
  highest_dollar_per_hour: 4.0

  # Completely unused
  sb_min_dollar_per_hour: 1.0