JSFiddle - React, Tailwind, and code Playground

by Soul_Master

HTML

Mu Origin - Upgrade calculator

JavaScript

function upgrade(level, item, bonus) {
	item.blessing++;
    
	if(level >= 6){
		item.soul++;
    }
    if(level >= 9) {
		item.chaos++;
    }
    
	var result = Math.random();
  result += bonus || 0;
    
  switch (level) {
  	case 3: return result <= 0.9 ? level + 1 : level;
  	case 4: return result <= 0.8 ? level + 1 : level;
  	case 5: 
    	item.money += 320000;
      return result <= 0.6 ? level + 1 : level;
  	case 6: 
    	item.money += 480000;
      return result <= 0.5 ? level + 1 : level - 1;
  	case 7: 
    	item.money += 720000;
      return result <= 0.45 ? level + 1 : level - 1;
  	case 8: 
    	item.money += 1080000;
      return result <= 0.45 ? level + 1 : level - 1;
  	case 9: 
    	item.money += 1620000;
      return result <= 0.4 ? level + 1 : level - 1;
  	case 10: 
    	item.money += 2430000;
      return result <= 0.4 ? level + 1 : level - 1;
  	case 11: 
    	item.money += 3645000;
      return result <= 0.35 ? level + 1 : level - 1;
  	default: return level + 1;  
  }
}

function getDefaultItem(){
	return {
		blessing: 0,
        soul: 0,
        chaos: 0,
        money: 0
    };
}

var sumItem = getDefaultItem();
var testRound = 10000;
var currentLevel = 10;
var targetLevel = 11;

for(var i = 0; i < testRound; i++){
    var item = getDefaultItem();
    var level = currentLevel;

    while(true){
        level = upgrade(level, item, 0.02);

        if(level === targetLevel) break;
    }
    
    sumItem.blessing += item.blessing;
    sumItem.soul += item.soul;
    sumItem.chaos += item.chaos;
    sumItem.money += item.money;
}

sumItem.blessing /= testRound;
sumItem.soul /= testRound;
sumItem.chaos /= testRound;
sumItem.money /= testRound;

console.log(sumItem);