@@ -1136,56 +1136,65 @@ private void waterMod_ValueChanged(object sender, EventArgs e)
1136
1136
1137
1137
public void updateRespProbabilities ( )
1138
1138
{
1139
- List < int > avgGlobalResources = new List < int > ( ) { 10 , 10 , 10 , 10 , 10 , 90 , 10 , 0 } ;
1139
+ double rollNum = 50 ; //How many sides on the die.
1140
+ int [ , ] avgTops = new int [ 3 , 8 ] {
1141
+ { 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 } ,
1142
+ { 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 } ,
1143
+ { 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 }
1144
+ } ;
1145
+ List < int > partyStatModifiers = getMemberStats ( ) ;
1146
+ int statNum = 0 ;
1140
1147
1141
- List < int > resourceModifiers = getGlobalStats ( ) ;
1148
+ int totalMod = 0 ;
1149
+ foreach ( int modifier in partyStatModifiers ) {
1150
+ if ( modifier == notAppliedModifier ) continue ;
1151
+
1152
+ int top0 = avgTops [ 0 , statNum ] ;
1153
+ int top1 = avgTops [ 1 , statNum ] ;
1154
+ int top2 = avgTops [ 2 , statNum ] ;
1142
1155
1143
- List < int > avgPartyStats = new List < int > ( ) { 70 , 70 , 70 , 60 , 70 , 70 , 70 , 70 } ;
1156
+ double [ ] weights = getWeights ( modifier , top0 , top1 , top2 ) ;
1144
1157
1145
- List < int > partyStatModifiers = getMemberStats ( ) ;
1158
+ double weightedAvg = ( ( weights [ 0 ] * top0 + weights [ 1 ] * top1 + weights [ 2 ] * top2 ) / ( weights [ 0 ] + weights [ 1 ] + weights [ 2 ] ) ) ;
1146
1159
1160
+ totalMod += ( ( int ) Math . Floor ( weightedAvg ) - modifier ) ;
1147
1161
1148
- int resourceModifier = 0 ;
1149
- for ( int i = 0 ; i < avgGlobalResources . Count ( ) ; i ++ )
1150
- {
1151
- int currentResource = avgGlobalResources [ i ] ;
1152
- int currentResourceModifier = resourceModifiers [ i ] ;
1153
-
1154
- if ( currentResourceModifier != notAppliedModifier )
1155
- {
1156
- resourceModifier += currentResource - currentResourceModifier ;
1157
- }
1162
+ statNum ++ ;
1158
1163
}
1159
1164
1160
- int partyStatModifier = 0 ;
1161
- for ( int i = 0 ; i < avgPartyStats . Count ( ) ; i ++ )
1162
- {
1163
- int currentPartyStat = avgPartyStats [ i ] ;
1164
- int currentPartyStatModifier = partyStatModifiers [ i ] ;
1165
+ //If rollNum = 50 (i.e. 50 sided die)
1166
+ //probability that roll 0 to 50 + mod is >= 25 -> win
1167
+ //probability that roll 0 to 50 + mod is < 25 -> lose
1168
+ //Thus check if roll 0-50 < 25 - mod for lose or >= 25 - mod for win.
1165
1169
1166
- if ( currentPartyStatModifier != notAppliedModifier )
1167
- {
1168
- partyStatModifier += currentPartyStat - currentPartyStatModifier ;
1169
- }
1170
- }
1170
+ Console . WriteLine ( "Total Mod: " + totalMod ) ;
1171
+ double dividor = rollNum / 2.0 - totalMod ;
1171
1172
1172
- int totalModifier = resourceModifier + partyStatModifier ;
1173
+ double winInterval = Math . Floor ( ( ( rollNum - dividor ) / rollNum ) * 100 ) ;
1174
+ double loseInterval = Math . Floor ( ( dividor / rollNum ) * 100 ) ;
1173
1175
1174
- //r = Random Roll 0-100 + modifier.
1175
- //r < 40 -- Lose
1176
- // 40 <= r < 60 -- pass
1177
- // r >= 60 -- Win
1176
+ winInterval = Math . Min ( 100 , Math . Max ( winInterval , 0 ) ) ;
1177
+ loseInterval = Math . Min ( 100 , Math . Max ( loseInterval , 0 ) ) ;
1178
1178
1179
- float loseThreshold = Math . Max ( 0 , Math . Min ( 100 , 40 - totalModifier ) ) ; //Clamp value between 0 and 100
1180
- float winThreshold = Math . Max ( 0 , Math . Min ( 100 , 60 - totalModifier ) ) ; //Clamp value between 0 and 100
1179
+ lblProbWin . Text = ( winInterval + "%" ) ;
1180
+ lblProbLose . Text = ( loseInterval + "%" ) ;
1181
+ }
1181
1182
1182
- float loseInterval = loseThreshold ;
1183
- float passInterval = winThreshold - loseThreshold ;
1184
- float winInterval = 100 - winThreshold ;
1185
-
1186
- lblProbWin . Text = ( ( winInterval ) + "%" ) ;
1187
- lblProbPass . Text = ( ( passInterval ) + "%" ) ;
1188
- lblProbLose . Text = ( ( loseInterval ) + "%" ) ;
1183
+ private double [ ] getWeights ( int modifier , int top0 , int top1 , int top2 )
1184
+ {
1185
+ int minWeight = 1 ;
1186
+
1187
+ double dif1 = top0 - modifier ;
1188
+ double dif2 = top1 - modifier ;
1189
+ double dif3 = top2 - modifier ;
1190
+
1191
+ double addNum = Math . Max ( 0 , minWeight - dif3 ) ;
1192
+
1193
+ dif1 += addNum ;
1194
+ dif2 += addNum ;
1195
+ dif3 += addNum ;
1196
+
1197
+ return new double [ 3 ] { dif1 , dif2 , dif3 } ;
1189
1198
}
1190
1199
1191
1200
private void waterCost_ValueChanged ( object sender , EventArgs e )
0 commit comments