The main building is kind of disappointing. You should add more defence and at leas 8 forge points to the first one and more attack and 12 forge points to the second one.
Indeed just 15 fragments for a nutcracker is too overpowered, 200 is more balanced.
I get the point and I agree that it's a bit more interesting this way. However I find them not balanced. I think that 8 more forge points is so much better than some extra goods. For me the second one is the best one by far, in all my cities use the building that gives more forge points and more defence for attacking army, because attack for attacking army is more easy to obtain.I respectfully disagree with your "dissappointing" assertion on the 2 main building choices. Finally - This is a very intellectual exercise to decide which is correct for your game philosophy of economics and war. For me, it's a very easy decision, and I like the "radical" (stop you in your tracks...) design bifurcation and choice offered. It's calling out 2 distinct paths to take, and there is enlightenment in both (but more enlightenment in 1 of the 2...hehehe).
Inno should NOT homogenize the choices. Leave them as them are - it's perfect, or if anything make them MORE distinct as choices, vs less.
Remember: When all you have is a hammer in your toolbox, everything looks like a nail.
Attack isn't the only way to win a war battle.
Actually for once they come out almost the same if you value everything according to the "best" building that makes it. The FP does outweigh the goods by a little, but the Attack outweighs the defense as well (you'd rather take the attack and get the defense from some sentinel outposts).I get the point and I agree that it's a bit more interesting this way. However I find them not balanced. I think that 8 more forge points is so much better than some extra goods. For me the second one is the best one by far, in all my cities use the building that gives more forge points and more defence for attacking army, because attack for attacking army is more easy to obtain.
It looks deliberately like a discount for people going for building #2+. You finish the first one at eitherI see that the event building upgrades have been added to the diamond prize track. This is a great idea and should get more people to purchase the premium track but they are too far back! For anyone who only wants one of the buildings they won't need them.
I think you get a complete building at 300. I've counted it three times, trying to find where you see the extra 40.It looks deliberately like a discount for people going for building #2+. You finish the first one at either 260 or 340 depending on if you do the calendar (missing some of the numbers so not sure how tight the balancing is on that). First pass upgrade is at 440. Second main building (including calendar), would be done at 740 but you get 3 extras by 600 so get to save on 1200 lights = 600 stars = ~523 stars including board refunds by buying the pass instead. Seems a great deal if you're planning to spend for a 2nd.
You are correct - I counted 12 levels instead of 11. So it's 220/300 instead (with/without calendar). And 2nd would be done at 660, but can be done at 580 instead.I think you get a complete building at 300. I've counted it three times, trying to find where you see the extra 40.
From memory (may not be 100% accurate) : First special for a day on average will cost ~60-70 stars including refunds and chance of accidentally getting 2 and stuff. Repeat specials on a day will cost ~110 since you have to seek out the shuffle before you can try again.How many stars does it take on average to get 1 daily special (rough estimate is fine)?
Calendar selections kit...only diamonds..it is not posiblle get it.
It is possible get full level main building? If stars mailstone now 75, last year was 140..and was event box..and main building 10 levels..now 11 levels.
import random
import math
import numpy as np
from matplotlib import pyplot as plt
# Number of stars you start off with
startingStars = 1095
# If True, simulate stopping after finding each daily key. If False, spend all the same day.
goForKeys = False
# Number of keys required for calendar (you can get ~11 for free from daily challenges)
numKeys = 21
# Number of Simulations
simNum = 100000
# Show plots
showPlots = True
# Don't change anything below here (unless you know what you're doing)
######################################################################
fragments = 5
def getRandomList():
# 4 - shuffle, 5 - key, 15 - daily, 20 - double
l = [3,14,4,5,15,20,0,0,0,0,0,0,0,0,0,0,0,0]
random.shuffle(l)
return l
def pickPresent(days,l,l2,i2,dsFound,s,d,ds,k):
i = 0
t = False
if(len(l2) > 0):
if sum(l2) > 0:
if (dsFound and (not goForKeys or (days > 32))) and 4 in l2:
i = l2.index(4)
t = True
elif 4 in l2:
if sum(l2) == 4:
try:
i = random.choice(range(len(l)))
except:
print(days,l,l2,i2,dsFound,s,d,ds,k)
exit()
else:
i = l2.index(sum(l2)-4)
t = True
else:
i = l2.index(max(l2))
t = True
else:
i = random.choice(range(len(l)))
else:
i = random.choice(range(len(l)))
if t:
res = l2[i]
del l2[i]
del i2[i]
else:
res = l[i]
del l[i]
if res == 0:
# nothing
#print(0)
d = 1
elif res == 3:
i2 = random.sample(range(len(l)),min(2,len(l)))
l2 = [l[i2[x]] for x in range(len(i2))]
del l[max(i2)]
if len(i2) > 1:
del l[min(i2)]
s += 3*d
#print(3*d,"stars + show 2:",l2)
elif res == 4:
l2 = []
i2 = []
l = getRandomList()
dsFound = False
s += 10*d
#print(10*d,"stars + shuffle:",l)
return days, l,l2,i2,dsFound,s,d,ds,k
elif res == 5:
k += 1 if goForKeys else 1/fragments
if d == 2:
k += 1/fragments
s += 10
if goForKeys and (days <= 32):
days += 1
l2 = []
i2 = []
l = getRandomList()
dsFound = False
else:
s += 10
#print(d,"key(s) +",d*10,"stars")
elif res == 14:
s += 14*d
#print(d*14,"stars")
elif res == 15:
ds += 1*d
dsFound = True
#print(d,"Daily Special(s)")
elif res == 20:
d = 2
#print("Double")
if res == 20:
d = 2
else:
d = 1
return days, l,l2,i2,dsFound,s,d,ds,k
keys = []
dailies = []
candles = []
gpProgress = []
for x in range(simNum):
if x % round(simNum/10) == 0:
print(round((x/simNum)*100),"%")
starting = startingStars
s = starting
ds = 0
k = 0 if goForKeys else 1
l = getRandomList()
l2 = []
i2 = []
dsFound = False
d = 1
c = 0
days = 0
while s >= 10:
s -= 10
c += 1
days,l,l2,i2,dsFound,s,d,ds,k = pickPresent(days,l,l2,i2,dsFound,s,d,ds,k)
dailies.append(ds)
keys.append(math.floor(k))
candles.append(c)
gp = 0
for i in range(c):
gp += random.choice([1,2,3])
gpProgress.append(gp)
if showPlots:
labels = ["Keys","Dailies","Grand Prize Progress"]
results = [keys,dailies,gpProgress]
fig, ax = plt.subplots(3,1,figsize=(10,15))
for i in range(3):
label = labels[i]
rmin = min(results[i])
rmax = max(results[i])
ax[i].hist(results[i],edgecolor='white', label=label, bins=range(rmin,rmax,1))
ax[i].set_title(label)
ax[i].legend()
#bin_centers = np.diff(bins)*0.5 + bins[:-1]
#n = 0
#for fr, x, patch in zip(freq, bin_centers, patches):
# height = (freq[n]/len(results))
# plt.annotate("{}".format(height),
# xy = (x, height*len(results)), # top left corner of the histogram bar
# xytext = (0,0.2), # offsetting label position above its bar
# textcoords = "offset points", # Offset (in points) from the *xy* value
# ha = 'center', va = 'bottom'
# )
# n = n+1
#plt.legend()
plt.show()
# For last game
printStats = True
if printStats:
c = np.average(candles)
ds = np.average(dailies)
k = np.average(keys)
gp = np.average(gpProgress)
kU = [k for k in keys if k < numKeys]
kO = [k for k in keys if k >= numKeys]
cU = round(100*(len(kU)/len(keys)),2)
cO = round(100*(len(kO)/len(keys)),2)
print("---------")
if goForKeys:
print("Average Totals (going for Keys):")
else:
print("Average Totals (going for Dailies):")
print("Starting stars:",startingStars)
print("Stars spent:",round(c*10,2),"(x" + str(round(c*10/startingStars,3)) + ")")
#print("Stars Multiplication Factor: x" + str(round(c*10/startingStars,3)),"( 10 ->",str(round(c*100/startingStars,2)) + ")")
print()
print("Matches:",round(c,2))
print("Stars* per Match:",round(startingStars/c,2))
print()
print("Daily Specials:",round(ds,2))
print("Stars* per Daily Special:",round(startingStars/ds,2))
print()
print("Grand Prize Progress:",round(gp,2))
print("Stars* per Grand Prize Progress:",round(startingStars/gp,2))
print()
print("Keys:",round(k,2))
print("Stars* per Key:",round(startingStars/k,2))
print("Chance of getting",numKeys,"keys:",str(cO) + "%")
print("")
print()
print("*Starting Stars")