Sandcastle-Builder
Sandcastle-Builder copied to clipboard
Blast Furnace needs some balancing
- In the Blast Furnace, it seems to be possible for its operation to be WORSE if you have blitzing/BKJ up:
if(Molpy.Got('Blitzing'))
{
if(Molpy.Got('BKJ'))
{
...
boosted=1;
...
if(boosted)
{
castles=Math.floor(Math.min(castles,Molpy.castlesBuilt/10));
}else{
castles=Math.floor(Math.min(castles,Molpy.castlesBuilt/2));
}
So if it's boosted, you divide Molpy.castlesBuilt by 10 instead of 2, and then take the smaller of that and castles so far - so boosted (having blitzing and BKJ up) can possibly result in a worse blast furnace output. Is this intentional?
Extracted from #82
Basically Blast Furnace is not particularly well thought out or tested at the moment., since it's hardly worth using in the first place. Because it's not well balanced. It's a vicious cycle...
I took a look at the relevant code, and there are a couple more things in play here (possibly could've been added after this issue was made). See below for relevant code.
So what I see happening here, is that the algorithm is trying to prevent Blast Furnace from getting out of hand when Fractal Sandcastles, (and Blitzing, (and BKJ)) are running. Which is quite understandable, since all these boosts can significantly increase castles/sand gain, but shouldn't be increasing Blast Furnace (right?).
While there are certain numbers for which these measures will result in lower Blast Furnace output with these Boosts than without them, at first glance chances of such numbers actually occurring ingame seem rather low.
While I can't yet fully grasp what various alterations to the code would do in different stages in the game, it does seem like perhaps this bit of code is up for a rewrite. If the three boosts should indeed not be influencing the Blast Furnace, then this can probably be dealt with in a much better way.
var blastFactor=1000;
var boosted=0;
if(Molpy.Got('Fractal Sandcastles'))
{
blastFactor=Math.max(5,1000*Math.pow(0.94,Molpy.Boosts['Fractal Sandcastles'].power));
if(Molpy.Got('Blitzing'))
{
if(Molpy.Got('BKJ'))
{
blastFactor/=Math.max(1,(Molpy.Boosts['Blitzing'].power-800)/600);
boosted=1;
}
blastFactor/=2;
}
}
var castles=Math.floor(Molpy.sand/blastFactor);
if(boosted)
{
castles=Math.floor(Math.min(castles,Molpy.castlesBuilt/5));
}else{
castles=Math.floor(Math.min(castles,Molpy.castlesBuilt/3));
}
Basically it's a hacked-together mess and I don't remember why it's meant to do what it does anymore and I'm afraid to touch it as I might destroy balance or game progressing entirely.
Yes, that's exactly why I'm not going to attempt touching it yet myself. When a rewrite comes someone must be extensively checking for balance changes. Seems like alot of work...
For what it's worth, blast furnace is mainly relevant for a duration of time in the early game, going from M-G castles to getting Swedish Chef. That being said, each time I've tried the early game on a fresh save, I relied on this to get through that point since newer players find that the game stalls quite a bit there.
My biggest problem with blast furnace is that to me, it was really unclear blast furnace was as bad as it is. I think i made it past that phase with blast furnace on pretty much constantly. Now i dont think it's bad to have boosts that are actually useful to be turned off (as this is a big theme late-game), but a little more clear input and/or warning that blast furnace (or any boost in general) sometimes is better left turned off before or after certain phases.
In case of blast furnace, perhaps add a warning if people run it over 50NP in a situation where they shouldn't. I'm against adding hints everywhere, but this one might work because it's also one of the first boosts that you should actually not use (at least not use all the time).