Browse Source

[change] reworked menstrual cycle. Wider range but more likely to be normal duration. Reduced contraceptive effects. Removed release hormones in favor of simpler abstract.

maankamara 1 năm trước cách đây
mục cha
commit
e5b5c1c30e
1 tập tin đã thay đổi với 108 bổ sung61 xóa
  1. 108 61
      locations/femcyc.qsrc

+ 108 - 61
locations/femcyc.qsrc

@@ -237,8 +237,8 @@
 
 
 !! I have to initialize the variables somewhere, maybe in preCUST?
-if Luth_Max = 0: LutH_Max = rand(312,360) & !! 13-15 days including ovulation
-if Foch_Max = 0: FocH_Max = rand(312,360) & !! 13-15 days including menstruation
+if Luth_Max = 0: LutH_Max = rand(155,175)+rand(155,175) & !! 13-14 days including ovulation
+if Foch_Max = 0: FocH_Max = rand(130,230)+rand(130,230) & !! 11-18 days including menstruation
 
 if $ARGS[0] = '':
 	!!	calling the variable error handler, fixing variables here.
@@ -446,7 +446,15 @@ if $ARGS[0] = '':
 		gs 'lact_lib','lactate_optout'
 	else
 		gs 'lact_lib','breastcycle'
-	end	
+	end
+
+!! New test birth control level with pillcon values 30k - 40k. Range 0-99. A single missed day should mean drop from 99% to 93% effectiveness.
+	if broodcurse >= 0:
+		!!should never be below zero, but just in case it changes in the future.
+		BClevel = min(99, max(0,(pillcon-30000))*99/9000)/(broodcurse+1)
+	else
+		BClevel = min(99, max(0,(pillcon-30000))*99/9000)
+	end
 
 	if cycle <= 0:
 		gs 'femcyc', 'cyc0'
@@ -466,13 +474,14 @@ if $ARGS[0] = '':
 	stat['probably_safe_day'] = 0
 	stat['dangerous_day'] = 0
 
-	if cycle > 3:
-		stat['safe_day'] = 1
-	elseif cycle = 0 or cycle = 3:
-		stat['probably_safe_day'] = 1
-	else
-		stat['dangerous_day'] = 1
-	end
+!! We got a bio scanner installed? Not like this.
+!!	if cycle > 3:
+!!		stat['safe_day'] = 1
+!!	elseif cycle = 0 or cycle = 3:
+!!		stat['probably_safe_day'] = 1
+!!	else
+!!		stat['dangerous_day'] = 1
+!!	end
 
 
 !!	if cycle = 1 or lastmens >= daystart - 7:
@@ -481,13 +490,16 @@ if $ARGS[0] = '':
 	!! days 8-19 is considered to be fertile
 	!! day 20 until your period is considered safe
 	!! this is not checking against the actual code of how fertility works in this game because i can''t figure it out. but that''s the risk you take for using the calendar method instead of real birth control :P - hornguy6
-!!	if daylastperiod >= daystart - 7:
-!!		stat['probably_safe_day'] = 1
-!!	elseif daylastperiod >= daystart - 19:
-!!		stat['dangerous_day'] = 1
-!!	else
-!!		stat['safe_day'] = 1
-!!	end
+
+	if daystart - daylastperiod < 8:
+		stat['probably_safe_day'] = 1
+	elseif daystart - daylastperiod < 19:
+		stat['dangerous_day'] = 1
+	elseif daystart - daylastperiod < 22:
+		stat['probably_safe_day'] = 1
+	else
+		stat['safe_day'] = 1
+	end
 	
 !!	other variable hornguy was experimenting with
 !!	if lastmens >= daystart - 7:
@@ -504,15 +516,16 @@ if $ARGS[0] = 'cyc0':
 		lastmens = daystart
 		cycle = 1
 		mesec = 0
-		if rand(0,1000) = 1000:
-			EggRH = rand(20,80)
-		else
-			EggRH = 0
+		if rand(0,35) = 0:
+			temprand = rand(20,80)
+			FocH += temprand
+			EggRH += temprand
 		end
-		FocH += EggRH
+		
 	else
 		mesec -= 1
 		FocH += 1
+		EggRH += 1
 	end
 end
 
@@ -521,32 +534,55 @@ end
 
 if $ARGS[0] = 'cyc1':
 	FertEgg = 0
+	if Ovulate < 0: Ovulate = 0
 	if FocH <= FocH_Max:
-		if pillcon <= 7000: EggRH += 1
-		if rand(0,9) = 0: EggRH += 1
 		FocH += 1
-		temprand = rand(0,9) - sterileov + tempovbonus
-		if temprand < 0:
-			EggRH -= 1
-		elseif temprand > 9:
-			EggRH += 1
-		end
+		if planBtaken > 0: planBtaken -= 1
+
+!! If release hormones reach the average maximum then there is a chance ovulation occurs early
+!!		if EggRH > 336:
+!!			if rand(0,99) = 0: FocH = FocH_Max + 1
+!!		elseif EggRH < 325 and FocH = FocH_Max:
+!!			if rand(0,19) > 0: FocH -= 1
+!!		end
+!!
+!!		EggRH += 1
+!!		temprand = rand(0,19) - sterileov + tempovbonus
+!!		if temprand < 0:
+!!			EggRH -= 2
+!!		elseif temprand > 19:
+!!			EggRH += 2
+!!		end
 	else
 		!! the setting of the max_time can be here although it can be changed in the future
-		LutH_Max = rand(312,360) & !! 13-15 days including ovulation
+		LutH_Max = rand(155,175)+rand(155,175) & !! 13-14 days including ovulation, two separate rolls to favor average values over extremes
+		!! Faster cycle if on ovulation drugs
+		LutH_Max -= 6 * tempovbonus
+
 		!{If you are ready to ovulate, it creates a chance to double ovulate. That chance is increased by your age. Then it does the same for a triple ovulation. Then it sets the ovulation tag, ovulation hour count, and begins a ticker for the life of the eggs.}
-		temprand = rand(0,20)
-		temprand += age/15
-		temprand -= pillcon/1000
-		if temprand > 20:
-			EggRH += 205
-			temprand = rand(0,20)
-			temprand += age/15
-			if temprand > 20: EggRH += 410
-		end
+!!		temprand = rand(0,199)
+!!		temprand += age*10/15
+!!		temprand -= pillcon/4000
+!!		if temprand > 199:
+!!			EggRH += 300
+!!			temprand = rand(0,199)
+!!			temprand += age*10/15
+!!			if temprand > 199: EggRH += 600
+!!		end
 		FocH = 0
 		lastovulation = daystart
-		Ovulate = 24 + rand(0,20)
+		Ovulate += 12 + rand(0,12)
+		if tempovbonus > 0:
+			tempovbonus -= rand(0,2)
+			if tempovbonus < 0: tempovbonus = 0
+		end
+		:OviLoop
+		if BClevel < rand(1,100):
+			UnfertEgg += 1
+			Ovulate += rand(0,6) + 2*(tempovbonus - sterileov)
+			!! chance for multiple ovulation
+			if rand(0,99) - tempovbonus + sterileov < 5: jump 'OviLoop'
+		end
 		cycle = 2
 		ferteggage = 0
 	end
@@ -655,9 +691,8 @@ if $ARGS[0] = 'cyc2':
 		if egg_idx < egg_sz:
 !!{fert_thresh is the chance this specific egg is fertilized. Its modified by being on the pill, being sterilized, the brood curse, and so on. If it computes to less than the cum total calculated above, the egg is fertilized by a father randomly drawn from the lotto array.}
 			fert_thresh = rand(1,250000)
-			if pillcon < 0: pillcon = 0
-			!!fert_thresh += pillcon
 			if steriletu = 1: fert_thresh += fert_thresh*30
+			if planBtaken > 0: fert_thresh = fert_thresh*5
 			if fert_thresh > 0 and broodcurse > 0: fert_thresh = fert_thresh / 2
 			if fert_thresh <= cum_total:
 				lotto_idx = rand(0, cfl_sz-1)
@@ -688,18 +723,25 @@ if $ARGS[0] = 'cyc2':
 			jump 'FertLoop'
 		end
 		killvar 'temp'
-		tempovbonus = 0
 	end
 
-!!{Ovulation to Luteal. It checks to see if you are on the ovulation cycle. If you are, it checks you for your pillcon. If it is high enough, no egg is released. Under high concentrations of pill chemical, ovulation ticks away quicker. Otherwise, it checks to see if your ovulation hormone is high enough, and if it is it gives you an egg and drops a good chunk down on your ovulation hormone. if its still high, it drops another egg. Then it checks your ovulation hours. If its down to 0, it starts the Luteal phase. Otherwise, it adds an hour to the egg age and reduces the ovulation window by an hour.}
-	if pillcon > 26000 and rand(0,400) ! 0: EggRH = 0
-	:OviLoop
-	if EggRH > ((UnfertEgg + FertEgg) * 150):
-		UnfertEgg += 1
-		EggRH -= (200 * UnfertEgg)
-		jump 'OviLoop'
-	end
-	if ovulate <= 0:
+!! Ovulation to Luteal. It checks to see if you are on the ovulation cycle. If you are, it checks you for your pillcon. 
+!! If it is high enough, no egg is released. Under high concentrations of pill chemical, ovulation ticks away quicker. (?No it does not?)
+!! Otherwise, it checks to see if your ovulation hormone is high enough, and if it is it gives you an egg and drops a good chunk down on your ovulation hormone. 
+!! If its still high, it drops another egg. Then it checks your ovulation hours. If its down to 0, it starts the Luteal phase. Otherwise, it adds an hour to the egg age and reduces the ovulation window by an hour.
+
+
+!! Trying new stuff, old loop
+!!	if BClevel < rand(1,100) and EggRH > 325:
+!!		UnfertEgg += 1
+!!		EggRH -= (300 * UnfertEgg)
+!!		jump 'OviLoop'
+!!	end
+!!	if EggRH > 9:
+!!		Ovulate += rand(0,(EggRH / 10))
+!!	end
+!!	EggRH = 0
+	if Ovulate <= 0:
 		cycle = 3
 		UnfertEgg = 0
 	end
@@ -765,6 +807,7 @@ if $ARGS[0] = 'cyc3':
 
 		if Babyptype[implant_idx] = 0:
 			imp_rand = rand(0,120000)
+			if planBtaken > 0: imp_rand = imp_rand*4
 
 			if ferteggage < 120 and broodcurse <= 0:
 				imp_rand += 170
@@ -797,8 +840,6 @@ if $ARGS[0] = 'cyc3':
 					implant_hour = hour
 
 				end
-				tempwbbonus = 0
-
 			end
 
 		end
@@ -831,6 +872,10 @@ if $ARGS[0] = 'cyc3':
 			rej_idx += 1
 			jump 'lutcycloop'
 		end
+		if tempwbbonus > 0:
+			tempwbbonus -= rand(200,500)
+			if tempwbbonus < 0: tempwbbonus = 0
+		end
 		LutH = 0
 		if preg = 1:
 			cycle = 5
@@ -846,9 +891,11 @@ if $ARGS[0] = 'cyc3':
 			killvar '$cumfthusedname'
 			killvar 'cumtime'
 			!! the setting of the max_time can be here although it can be changed in the future
-			FocH_Max = rand(312,360) & !! 13-15 days including menstruation
-			temprand = rand(0,10)
-			if pillcon >= 38000 or rand(1,24) = 1:
+			FocH_Max = rand(130,230)+rand(130,230) & !! 11-18 days including menstruation, two rolls to favor average values over extremes
+			!! Faster cycles if on ovulation drugs
+			FocH_Max -= 6 * tempovbonus
+			temprand = rand(0,99)
+			if (pillcon >= 35000 and temprand < 5) or temprand = 0:
 				EggRH = 0
 				cycle = 1
 				mesec = 0
@@ -858,11 +905,11 @@ if $ARGS[0] = 'cyc3':
 				if cyccustom = 1: daylastperiod = daystart
 				firstmens = daystart
 				temprand = rand(0,10)
-				if temprand = 0 and pillcon < 10000:
+				if temprand = 0 and pillcon < 15000:
 					mesec = rand(104,136) & !! 120
-				elseif temprand < 9 and pillcon < 15000:
+				elseif temprand < 9 and pillcon < 25000:
 					mesec = rand(76,104) & !!  96
-				elseif pillcon < 20000:
+				elseif pillcon < 35000:
 					mesec = rand(52,76) & !! 72
 				else
 					mesec = rand(44,52) & !! 48