femcyc 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715
  1. # femcyc
  2. if $ARGS[0] = '':
  3. !{Hourly reduction in semen potency}
  4. !{First it sets the array index to the first index, then it checks to be sure the array tracking the age is less than 144 hours. If it is 144 hours old, it kills that index, which should shift the index up. If it is less than 144 hours old, it sets a current potency drop. The drop is 2x or 3x regularly, but during ovulation it is only 1x, to represent the better environment from fertile cervical mucus.}
  5. !{144 hours was selected due to that being approximately the maximum amount of time sperm is viable in the womb (120 would be more accurate, but there is leeway). PLEASE DO NOT CHANGE IT.}
  6. !{The potency drop may seem small in game-time, but is meant to be a reasonable approximation to real life. Avoid unprotected sex within 5 days of ovulation if you want to mitigate your risk.}
  7. !{the 'rcntorgzm' variable is set to determine whether Sveta has orgasmed within the last hour. If she has, a small potency boost for the guys she has slept with in that hour.}
  8. if rcntorgzm = 1:
  9. if rcntorgzmtmp = 1: rcntorgzm = 0 & rcntorgzmtmp = 0
  10. if rcntorgzmtmp = 0: rcntorgzmtmp = 1
  11. end
  12. cumarr_idx = 0
  13. :cumarrloop
  14. if cumarr_idx < arrsize('$cumarrnam'):
  15. if cumarrcpt[cumarr_idx] > 0 and cumarrage[cumarr_idx] < 144:
  16. if rcntorgzm = 1 and cumarrcpt[cumarr_idx] < cumarrppt[cumarr_idx] and cumarrage[cumarr_idx] < 1: cumarrcpt[cumarr_idx] += cumarrppt[cumarr_idx] / 12
  17. cumpdrop = cumarrcpt[cumarr_idx] / (144 - cumarrage[cumarr_idx])
  18. if cycle ! 2: cumpdrop += cumpdrop * rand(0, 2)
  19. cumarrcpt[cumarr_idx] -= cumpdrop
  20. if cumarrcpt[cumarr_idx] <= 0:
  21. gs 'cum_cleanup', 'cleanwomb', cumarr_idx
  22. else
  23. cumarrage[cumarr_idx] += 1
  24. cumarr_idx += 1
  25. end
  26. else
  27. gs 'cum_cleanup', 'cleanwomb', cumarr_idx
  28. end
  29. jump 'cumarrloop'
  30. end
  31. !!Succubus absorption of sperm in womb
  32. if succubusflag = 1:
  33. if arrsize('cumarrppt') > 0:
  34. succycletmp = 0
  35. :sucvagabs
  36. if cumarrdel[succycletmp] = 0:
  37. if cumarrcpt[succycletmp] > 10000:
  38. sexnutrition += 30 * succublvl
  39. succubxp += 3
  40. elseif cumarrcpt[succycletmp] < 3000 and cumarrcpt[succycletmp] > 1000:
  41. sexnutrition += 5 * succublvl
  42. succubxp += 2
  43. elseif cumarrcpt[succycletmp] =< 1000:
  44. sexnutrition += succublvl
  45. else
  46. sexnutrition += 25 * succublvl
  47. succubxp += 3
  48. end
  49. gs 'cum_cleanup', 'cleanwomb', succycletmp
  50. sucabscum = 1
  51. else
  52. succycletmp += 1
  53. end
  54. if succycletmp < arrsize('cumarrppt'): jump 'sucvagabs'
  55. end
  56. killvar 'succycletmp'
  57. end
  58. cumarrtemp = 0
  59. cumcondslip = 0
  60. cumcondslip_aware = 0
  61. if arrsize('sparrvol') > 0:
  62. :cumspaloop
  63. !!Succubus absorption for internal locations other than womb
  64. if succubusflag = 1:
  65. if sparrloc[cumarrtemp] = 3 or sparrloc[cumarrtemp] = 12:
  66. sexnutrition += 25*succublvl
  67. succubxp += 3
  68. sucabscum = 1
  69. if sparrvol[cumarrtemp] > 0: sparrvol[cumarrtemp] = 0
  70. end
  71. end
  72. !!{if sparrloc[cumarrtemp] = 0 or sparrloc[cumarrtemp] = 3 or sparrloc[cumarrtemp] = 12:
  73. sexnutrition += 30*succublvl
  74. sparrvol[cumarrtemp] -= 30*succublvl
  75. if sparrvol[cumarrtemp] < 0: sexnutrition += sparrvol[cumarrtemp] & sparrvol[cumarrtemp] = 0
  76. end}
  77. !!{ Process spatter until it has volume or is too old in vagina. }
  78. if sparrvol[cumarrtemp] > 0 or (sparrloc[cumarrtemp] = 0 and sparrage[cumarrtemp] < 10):
  79. sparrtmpv = arrsize('$cumarrnam')
  80. if sparrloc[cumarrtemp] = 17:
  81. sparrtmpv = arrpos('cumarrcnt',sparrcnt[cumarrtemp])
  82. if sparrtmpv >= 0:
  83. !!'Found guy id <<sparrtmpv>>'
  84. if sparrage[cumarrtemp] < 4:
  85. cumarrcpt[sparrtmpv] += sparrppt[cumarrtemp]/5
  86. elseif sparrage[cumarrtemp] < 10:
  87. cumarrcpt[sparrtmpv] += sparrppt[cumarrtemp]/30
  88. end
  89. end
  90. elseif sparrloc[cumarrtemp] = 0:
  91. sparrtmpv = arrpos('cumarrcnt',sparrcnt[cumarrtemp])
  92. if sparrtmpv >= 0:
  93. !!'Found guy id' & sparrtmpv
  94. if sparrage[cumarrtemp] < 4:
  95. cumarrcpt[sparrtmpv] += sparrppt[cumarrtemp]/40
  96. elseif sparrage[cumarrtemp] < 10:
  97. cumarrcpt[sparrtmpv] += sparrppt[cumarrtemp]/60
  98. end
  99. end
  100. elseif sparrslc[cumarrtemp] = 1 and sparrage < 5:
  101. if sparrloc[cumarrtemp] = 1:
  102. cumarrcpt[sparrtmpv] = sparrppt[cumarrtemp]*sparrvol[cumarrtemp]/sparrage[cumarrtemp]/1000
  103. cumarrppt[sparrtmpv] = sparrppt[cumarrtemp]
  104. $cumarrnam[sparrtmpv] = $sparrnam[cumarrtemp]
  105. cumarrage[sparrtmpv] = sparrage[cumarrtemp]
  106. cumarrdel[sparrtmpv] = 1
  107. cumarrkno[sparrtmpv] = -1
  108. cumarrcon[sparrtmpv] = 0
  109. cumarrcnt[sparrtmpv] = sparrcnt[cumarrtemp]
  110. end
  111. elseif sparrslc[cumarrtemp] = 3 and sparrage < 5:
  112. if sparrloc[cumarrtemp] = 2:
  113. cumarrcpt[sparrtmpv] = sparrppt[cumarrtemp]*sparrvol[cumarrtemp]/sparrage[cumarrtemp]/1000
  114. cumarrppt[sparrtmpv] = sparrppt[cumarrtemp]
  115. $cumarrnam[sparrtmpv] = $sparrnam[cumarrtemp]
  116. cumarrage[sparrtmpv] = sparrage[cumarrtemp]
  117. cumarrdel[sparrtmpv] = 3
  118. cumarrkno[sparrtmpv] = -1
  119. cumarrcon[sparrtmpv] = 0
  120. cumarrcnt[sparrtmpv] = sparrcnt[cumarrtemp]
  121. elseif sparrloc[cumarrtemp] = 4:
  122. cumarrcpt[sparrtmpv] = sparrppt[cumarrtemp]*sparrvol[cumarrtemp]/sparrage[cumarrtemp]/1000
  123. cumarrppt[sparrtmpv] = sparrppt[cumarrtemp]
  124. $cumarrnam[sparrtmpv] = $sparrnam[cumarrtemp]
  125. cumarrage[sparrtmpv] = sparrage[cumarrtemp]
  126. cumarrdel[sparrtmpv] = 2
  127. cumarrkno[sparrtmpv] = -1
  128. cumarrcon[sparrtmpv] = 0
  129. cumarrcnt[sparrtmpv] = sparrcnt[cumarrtemp]
  130. end
  131. elseif sparrslc[cumarrtemp] = 5 and sparrage < 5:
  132. if sparrloc[cumarrtemp] = 3:
  133. cumarrcpt[sparrtmpv] = sparrppt[cumarrtemp]*sparrvol[cumarrtemp]/sparrage[cumarrtemp]/1000
  134. cumarrppt[sparrtmpv] = sparrppt[cumarrtemp]
  135. $cumarrnam[sparrtmpv] = $sparrnam[cumarrtemp]
  136. cumarrage[sparrtmpv] = sparrage[cumarrtemp]
  137. cumarrdel[sparrtmpv] = 2
  138. cumarrkno[sparrtmpv] = -1
  139. cumarrcon[sparrtmpv] = 0
  140. cumarrcnt[sparrtmpv] = sparrcnt[cumarrtemp]
  141. elseif sparrloc[cumarrtemp] = 5:
  142. cumarrcpt[sparrtmpv] = sparrppt[cumarrtemp]*sparrvol[cumarrtemp]/sparrage[cumarrtemp]/1000
  143. cumarrppt[sparrtmpv] = sparrppt[cumarrtemp]
  144. $cumarrnam[sparrtmpv] = $sparrnam[cumarrtemp]
  145. cumarrage[sparrtmpv] = sparrage[cumarrtemp]
  146. cumarrdel[sparrtmpv] = 3
  147. cumarrkno[sparrtmpv] = -1
  148. cumarrcon[sparrtmpv] = 0
  149. cumarrcnt[sparrtmpv] = sparrcnt[cumarrtemp]
  150. elseif sparrloc[cumarrtemp] = 6:
  151. cumarrcpt[sparrtmpv] = sparrppt[cumarrtemp]*sparrvol[cumarrtemp]/sparrage[cumarrtemp]/1000
  152. cumarrppt[sparrtmpv] = sparrppt[cumarrtemp]
  153. $cumarrnam[sparrtmpv] = $sparrnam[cumarrtemp]
  154. cumarrage[sparrtmpv] = sparrage[cumarrtemp]
  155. cumarrdel[sparrtmpv] = 3
  156. cumarrkno[sparrtmpv] = -1
  157. cumarrcon[sparrtmpv] = 0
  158. cumarrcnt[sparrtmpv] = sparrcnt[cumarrtemp]
  159. end
  160. end
  161. if sparrloc[cumarrtemp] = 0 or sparrloc[cumarrtemp] = 3 or sparrloc[cumarrtemp] = 12:
  162. sparrvol[cumarrtemp] -= sparrage[cumarrtemp]/2
  163. if sparrvol[cumarrtemp] < 0:sparrvol[cumarrtemp] = 0
  164. end
  165. if sparrloc[cumarrtemp] = 0 and cumsumvag > 60: sparrslc[cumarrtemp] = 1
  166. if sparrloc[cumarrtemp] = 3 and cumsumass > 60: sparrslc[cumarrtemp] = 1
  167. if sparrloc[cumarrtemp] = 17:
  168. cumcondslip += 1
  169. if sparridt[cumarrtemp] >= 0:
  170. cumcondslip_aware = 1
  171. end
  172. if sparrage[cumarrtemp] > 48:
  173. cumcondslip_aware = 1
  174. pcs_health -= rand(3,sparrage[cumarrtemp] - 45)
  175. '<br><b><font color="red">You feel nauseous.</font></b>'
  176. end
  177. end
  178. if sparrloc[cumarrtemp] ! 0 and sparrloc[cumarrtemp] ! 3 and sparrloc[cumarrtemp] ! 12 and isprok = 0 and sparrage < 5: sparrslc[cumarrtemp] += 1
  179. sparrage[cumarrtemp] += 1
  180. cumarrtemp += 1
  181. ctemp[0] += sparrvol[cumarrtemp]
  182. if sparrloc[cumarrtemp] = 0: ctemp[1] += sparrvol[cumarrtemp]
  183. if sparrloc[cumarrtemp] = 3: ctemp[2] += sparrvol[cumarrtemp]
  184. else
  185. gs 'cum_cleanup', 'cleandeposit', cumarrtemp
  186. end
  187. if cumarrtemp < arrsize('sparrvol'): jump 'cumspaloop'
  188. cumsumbod = ctemp[0]
  189. cumsumvag = ctemp[1]
  190. cumsumass = ctemp[2]
  191. KILLVAR 'ctemp'
  192. end
  193. if lactate > 0:
  194. if lactatemv <= 0:
  195. lactatemv = 0
  196. if lactatemm < pcs_cupsize*4 and milkgrowday < daystart:
  197. lactatemm += 1
  198. lactatemv += 1
  199. bgrowday = daystart
  200. elseif milkgrowday < daystart:
  201. if rand(0,30) = 0: pcs_cupsize += 1
  202. milkgrowday = daystart
  203. lactatemv += 1
  204. end
  205. elseif lactatemv < lactatemm:
  206. lactatemv += lactatemm/20
  207. elseif lactatemv = lactatemm and milkgrowday < daystart:
  208. milkgrowday = daystart
  209. lactatemm -= 1
  210. lactatemv -= 1
  211. if rand(0,90) = 0: pcs_cupsize -= 1
  212. elseif lactatemv > lactatemm:
  213. lactatemv = lactatemm
  214. end
  215. end
  216. if cycle <= 0:
  217. gs 'femcyc', 'cyc0'
  218. elseif cycle = 1:
  219. gs 'femcyc', 'cyc1'
  220. elseif cycle = 2:
  221. gs 'femcyc', 'cyc2'
  222. elseif cycle = 3:
  223. gs 'femcyc', 'cyc3'
  224. elseif cycle = 4:
  225. gs 'femcyc', 'cyc4'
  226. elseif cycle = 5:
  227. gs 'femcyc', 'preg'
  228. end
  229. dynamic $d_cycreport_update
  230. end
  231. !{Menstruation to Follicular. Verifies that the cycle is in the bloody phase. It then checks to see if you are done bleeding. If you are, it starts the Follicular phase. There is a small chance your follcular phase will be anywhere from a day to 3 days short, done by the random release of a boosted EggRH. Otherwise, it just starts it clean.}
  232. if $ARGS[0] = 'cyc0':
  233. if mesec <= 0:
  234. lastmens = daystart
  235. cycle = 1
  236. mesec = 0
  237. if rand(0,1000) = 1000:
  238. EggRH = rand(20,80)
  239. else
  240. EggRH = 0
  241. end
  242. FocH = EggRH
  243. else
  244. mesec -= 1
  245. end
  246. end
  247. !{Follicular to Ovulation. It checks to see if you are on the Follicular phase. If you are, it checks to see if you are ready to ovulate. If you arent, it increases your ovulation ticker by 1, then gives a random chance to increase it again. Then it checks to see if you have ovarian problems, and if you do, decreases your ovulation ticker. When all that is done, it checks to see if you have any birth control chemical, and if its above a certain amount, it reduces your ovulation ticker.}
  248. if $ARGS[0] = 'cyc1':
  249. FertEgg = 0
  250. if FocH <= 150:
  251. if pillcon <= 7000: EggRH += 1
  252. if rand(0,9) = 0: EggRH += 1
  253. FocH += 1
  254. temprand = rand(0,9) - sterileov + tempovbonus
  255. if temprand < 0:
  256. EggRH -= 1
  257. elseif temprand > 9:
  258. EggRH += 1
  259. end
  260. else
  261. !{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.}
  262. Temprand = rand(0,20)
  263. Temprand += age/15
  264. Temprand -= pillcon/1000
  265. if temprand > 20:
  266. EggRH += 205
  267. Temprand = rand(0,20)
  268. Temprand += age/15
  269. if temprand > 20: EggRH += 410
  270. end
  271. FocH = 0
  272. Ovulate = 24 + rand(0,20)
  273. cycle = 2
  274. ferteggage = 0
  275. end
  276. end
  277. !!{Fertilization.}
  278. if $ARGS[0] = 'cyc2':
  279. can_sz = arrsize('$cumarrnam')
  280. if Ovulate > 0 and can_sz > 0 and UnfertEgg > 0:
  281. KILLVAR 'cumfathwght'
  282. KILLVAR '$cumfathnames'
  283. KILLVAR 'cumtime'
  284. KILLVAR 'cumfthname'
  285. $cumfthname[0] = 'unknown'
  286. can_idx = 0
  287. cum_total = 0
  288. !!{Compute array of unique fathers known to PC and another two arrays of unique total fathers and their individual sperm totals from all entries in cumarrcpt for that father. Also tally all cum present.}
  289. :FatherCumAnalyze
  290. if can_idx < can_sz:
  291. if cumarrppt[can_idx] > 0:
  292. if cumarrcon[can_idx] ! 3 and cumarrcon[can_idx] ! 6 and cumarrcon[can_idx] ! 2 and cumarrcon[can_idx] < 8 and cumarrdel[can_idx] = 0:
  293. if cumarrkno[can_idx] = 1:
  294. if arrcomp('$cumfthname',$cumarrnam[can_idx]) = -1:
  295. i = arrsize('$cumfthname')
  296. $cumfthname[i] = $cumarrnam[can_idx]
  297. cumtime[i] = 1
  298. else
  299. if Enable_Android = 0:
  300. i = arrpos(0, '$cumfthname', $cumarrnam[can_idx])
  301. else
  302. i = arrpos('$cumfthname', $cumarrnam[can_idx])
  303. end
  304. cumtime[i] += 1
  305. end
  306. elseif cumarrkno[can_idx] = 0:
  307. cumtime[0] += 1
  308. end
  309. end
  310. if cumarrkno[can_idx] = 1:
  311. !{if the current record is a known person}
  312. if Enable_Android = 0:
  313. wpf_in = arrpos(0, '$wombpotfath', $cumarrnam[can_idx])
  314. else
  315. wpf_in = arrpos('$wombpotfath', $cumarrnam[can_idx])
  316. end
  317. if wpf_in < 0:
  318. wpf_sz = arrsize('$wombpotfath')
  319. $wombpotfath[wpf_sz] = $cumarrnam[can_idx]
  320. end
  321. end
  322. if Enable_Android = 0:
  323. cfn_in = arrpos(0, '$cumfathnames', $cumarrnam[can_idx])
  324. else
  325. cfn_in = arrpos('$cumfathnames', $cumarrnam[can_idx])
  326. end
  327. cfw_sz = arrsize('cumfathwght')
  328. if cfn_in < 0:
  329. cumfathwght[cfw_sz] = cumarrcpt[can_idx]
  330. $cumfathnames[cfw_sz] = $cumarrnam[can_idx]
  331. else
  332. cumfathwght[cfw_in] += cumarrcpt[can_idx]
  333. end
  334. cum_total += cumarrcpt[can_idx]
  335. end
  336. can_idx += 1
  337. jump 'FatherCumAnalyze'
  338. end
  339. wpf_sz = arrsize('$wombpotfath')
  340. if Enable_Android = 0:
  341. if wpf_sz ! 1 and arrpos(0, '$wombpotfath', 'unknown') < 0: $wombpotfath[wpf_sz] = 'unknown'
  342. else
  343. if wpf_sz ! 1 and arrpos('$wombpotfath', 'unknown') < 0: $wombpotfath[wpf_sz] = 'unknown'
  344. end
  345. !!{Create lotto of potential fathers based on each potential fathers sperm as a percentage of the total. The higher percentage of sperm from a given father, the more lotto entries he will have.}
  346. KILLVAR '$cumfathlotto'
  347. cfw_idx = 0
  348. cfw_sz = arrsize('cumfathwght')
  349. :FathLottoLoop
  350. if cfw_idx < cfw_sz:
  351. cfl_ct = (cumfathwght[cfw_idx] * 100) / cum_total
  352. if cfl_ct < 1: cfl_ct = 1
  353. cfl_idx = arrsize('$cumfathlotto')
  354. :FathLottoAdd
  355. if cfl_ct > 0:
  356. $cumfathlotto[cfl_idx] = $cumfathnames[cfw_idx]
  357. cfl_idx += 1
  358. cfl_ct -= 1
  359. jump 'FathLottoAdd'
  360. end
  361. cfw_idx += 1
  362. jump 'FathLottoLoop'
  363. end
  364. cfl_sz = arrsize('$cumfathlotto')
  365. egg_idx = 0
  366. egg_sz = UnfertEgg
  367. :FertLoop
  368. if egg_idx < egg_sz:
  369. !!{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.}
  370. fert_thresh = rand(1,250000)
  371. if pillcon < 0: pillcon = 0
  372. !!fert_thresh += pillcon
  373. if steriletu = 1: fert_thresh += fert_thresh*30
  374. if fert_thresh > 0 and broodcurse > 0: fert_thresh = fert_thresh / 2
  375. if fert_thresh <= cum_total:
  376. lotto_idx = rand(0, cfl_sz-1)
  377. UnfertEgg -= 1
  378. FertEgg += 1
  379. nextbaby = arrsize('$ChildFath')
  380. polkid[nextbaby] = rand(0, 1)
  381. $kidname[nextbaby] = 'unborn'
  382. kidage[nextbaby] = 0
  383. daykid[nextbaby] = 0
  384. monthkid[nextbaby] = 0
  385. yearkid[nextbaby] = 0
  386. Babyptype[nextbaby] = 0
  387. $ChildFath[nextbaby] = $cumfathlotto[lotto_idx]
  388. if arrsize('$wombpotfath') = 1:
  389. $ChildThFath[nextbaby] = $wombpotfath[0]
  390. else
  391. $ChildThFath[nextbaby] = 'unknown'
  392. end
  393. hairkid[nextbaby] = rand(0, 3)
  394. eyeskid[nextbaby] = rand(0, 3)
  395. ChildConType = cumarrcon[nextbaby]
  396. if fertegg > 1:
  397. $childtype[nextbaby] = 'paternal twin'
  398. $childtype[nextbaby-1] = 'paternal twin'
  399. else
  400. $childtype[nextbaby] = ''
  401. end
  402. end
  403. egg_idx += 1
  404. jump 'FertLoop'
  405. end
  406. killvar 'temp'
  407. tempovbonus = 0
  408. end
  409. !!{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.}
  410. if pillcon > 26000 and rand(0,400) ! 0: EggRH = 0
  411. :OviLoop
  412. If EggRH > ((UnfertEgg + FertEgg) * 150):
  413. UnfertEgg += 1
  414. EggRH -= (200 * UnfertEgg)
  415. jump 'OviLoop'
  416. end
  417. If ovulate <= 0:
  418. cycle = 3
  419. UnfertEgg = 0
  420. end
  421. if fertegg = 1 and ferteggage < 330:
  422. if rand(0,(2000 - age*20)) = 0:
  423. fertegg += 1
  424. nextbaby = arrsize('$ChildFath')
  425. polkid[nextbaby] = polkid[nextbaby-1]
  426. $kidname[nextbaby] = 'unborn'
  427. kidage[nextbaby] = 0
  428. daykid[nextbaby] = 0
  429. monthkid[nextbaby] = 0
  430. yearkid[nextbaby] = 0
  431. Babyptype[nextbaby] = Babyptype[nextbaby-1]
  432. $ChildFath[nextbaby] = $ChildFath[nextbaby-1]
  433. hairkid[nextbaby] = hairkid[nextbaby-1]
  434. eyeskid[nextbaby] = eyeskid[nextbaby-1]
  435. cumarrcon[nextbaby] = cumarrcon[nextbaby-1]
  436. $childtype[nextbaby] = 'identical twin'
  437. $childtype[nextbaby-1] = 'identical twin'
  438. end
  439. end
  440. ferteggage += 1
  441. Ovulate -= 1
  442. end
  443. !{Luteal to Menstration or Pregnancy. First it verifies this is the Luteal phase. Then it adds an hour to the age of the eggs. Then if there is a fertized egg, it rolls a random chance. if the egg age is low, it checks for risk of an entopic pregnancy. This is increased with older age and if you have a tubal ligation sterilization.}
  444. !{If there is a ectopic pregnancy, it sets the first unborn baby in the array to this. Ectopic pregnancies occur when the fertilized egg implants "too early" after fertlization (and therefore in the fallopian tube). The risk is higher with age, but this is also a common complication with certain forms of birth control, notably tubal ligation. Each egg could be different. It then removes the fertilized egg, adds an embryo, Then it adds some pregnancy hormone if you arent already pregnant, and calls you officially pregnant.}
  445. !{Otherwise, it adds your womb sterility factor to the imp_rand. Then it checks if your imp_rand crosses a threshold for implantation. Younger women implant easier. It then sets the next baby to the next unimplanted baby in your kid array. It registers the kid as a normal pregnancy, removes a fertilized egg and adds an embryo. Then it adds some pregnancy hormone if you arent already pregnant, and calls you officially pregnant.}
  446. if $ARGS[0] = 'cyc3':
  447. if fertegg = 1 and ferteggage < 330:
  448. if rand(0,(2000 - age*20)) = 0:
  449. fertegg += 1
  450. nextbaby = arrsize('$ChildFath')
  451. polkid[nextbaby] = polkid[nextbaby-1]
  452. $kidname[nextbaby] = 'unborn'
  453. kidage[nextbaby] = 0
  454. daykid[nextbaby] = 0
  455. monthkid[nextbaby] = 0
  456. yearkid[nextbaby] = 0
  457. Babyptype[nextbaby] = Babyptype[nextbaby-1]
  458. $ChildFath[nextbaby] = $ChildFath[nextbaby-1]
  459. hairkid[nextbaby] = hairkid[nextbaby-1]
  460. eyeskid[nextbaby] = eyeskid[nextbaby-1]
  461. cumarrcon[nextbaby] = cumarrcon[nextbaby-1]
  462. $childtype[nextbaby] = 'identical twin'
  463. $childtype[nextbaby-1] = 'identical twin'
  464. end
  465. end
  466. ferteggage += 1
  467. implant_idx = 0
  468. implant_sz = arrsize('Babyptype')
  469. :implant_loop
  470. if implant_idx < implant_sz:
  471. if Babyptype[implant_idx] = 0:
  472. imp_rand = rand(0,120000)
  473. if ferteggage < 120 and broodcurse <= 0:
  474. imp_rand += 170
  475. imp_rand -= age * 10
  476. if steriletu = 1: imp_rand -= 200
  477. if imp_rand <= 0:
  478. Babyptype[implant_idx] = 2
  479. FertEgg -= 1
  480. babyembryo += 1
  481. PregChem = rand(10,30)
  482. if preg = 0: preg = 1
  483. implant_day = daystart
  484. implant_hour = hour
  485. end
  486. else
  487. imp_rand += sterilewb
  488. imp_rand -= tempwbbonus
  489. if broodcurse > 0 and ferteggage >= 120: imp_rand = 0
  490. if imp_rand <= (1200 - (age * 7)):
  491. Babyptype[implant_idx] = 1
  492. FertEgg -= 1
  493. babyembryo += 1
  494. PregChem = rand(10,30)
  495. if preg = 0: preg = 1
  496. implant_day = daystart
  497. implant_hour = hour
  498. end
  499. tempwbbonus = 0
  500. end
  501. end
  502. implant_idx += 1
  503. jump 'implant_loop'
  504. end
  505. !!{Then, it progresses the Luteal phase. It checks to see if you are pregnant. If you are, it ends the cycle and sets preg if your Luteal hormone is at the max as well as cleans out any unimplanted eggs. Otherwise, it just progresses pregnancy chemical and Luteal Hormone. If you arent pregnant, it checks your Luteal hormone. If its at the maximum, it adds 3-5 days of bleeding, clears out your unimplanted eggs, and clears out your Luteal hormone, or ends your cycle if you are past your menopausal age. Otherwise it will just progress the Luteal hormone.}
  506. if LutH > 300:
  507. rej_idx = 0
  508. rej_sz = arrsize('Babyptype')
  509. :lutcycloop
  510. if rej_idx < rej_sz:
  511. if Babyptype[rej_idx] = 0:
  512. KILLVAR 'polkid',tempbabyi
  513. KILLVAR '$kidname',tempbabyi
  514. KILLVAR 'kidage',tempbabyi
  515. KILLVAR 'daykid',tempbabyi
  516. KILLVAR 'monthkid',tempbabyi
  517. KILLVAR 'yearkid',tempbabyi
  518. KILLVAR 'Babyptype',tempbabyi
  519. KILLVAR '$ChildFath',tempbabyi
  520. KILLVAR '$ChildThFath',tempbabyi
  521. KILLVAR 'hairkid',tempbabyi
  522. KILLVAR 'eyeskid',tempbabyi
  523. KILLVAR 'cumarrcon',tempbabyi
  524. FertEgg -= 1
  525. end
  526. rej_idx += 1
  527. jump 'lutcycloop'
  528. end
  529. LutH = 0
  530. if preg = 1:
  531. cycle = 5
  532. elseif menoage <= age:
  533. KILLVAR '$wombpotfath'
  534. killvar '$cumfthname'
  535. killvar '$cumfthusedname'
  536. killvar 'cumtime'
  537. cycle = 6
  538. else
  539. KILLVAR '$wombpotfath'
  540. killvar '$cumfthname'
  541. killvar '$cumfthusedname'
  542. killvar 'cumtime'
  543. temprand = rand(0,10)
  544. if pillcon < 30000 or temprand = 0:
  545. cycle = 0
  546. if cyccustom = 1: daylastperiod = daystart
  547. temprand = rand(0,10)
  548. if temprand = 0:
  549. mesec = 120
  550. elseif temprand < 9:
  551. mesec = 96
  552. else
  553. mesec = 72
  554. end
  555. else
  556. FocH = 0
  557. EggRH = 0
  558. cycle = 1
  559. mesec = 0
  560. end
  561. end
  562. else
  563. if preg = 1:PregChem += 1+pregspeedcheat
  564. if rand(0,100) < 100: LutH += 1
  565. end
  566. end
  567. !{Recovery to Follicular. It checks to see if you are in the recovery phase after a pregnancy. If you are, it checks to see if you still have recovery hormone. If you dont, it sets you into the follicular phase with a chance of a boosted Egg releasing hormone. Otherwise it decreases your recovery hormone with a chance to decrease it twice.}
  568. if $ARGS[0] = 'cyc4':
  569. if RecovH <= 0:
  570. cycle = 1
  571. if cyccustom = 1:
  572. knowpregloss = 0
  573. knowpregrecover = 0
  574. end
  575. if rand(0,1000) = 1000:
  576. EggRH = rand(20,80)
  577. else
  578. EggRH = 0
  579. end
  580. FocH = EggRH
  581. else
  582. RecovH -= 1
  583. if rand(0,10) = 0: RecovH -= 1
  584. end
  585. end
  586. !{Pregnancy Progression. It checks to see if you are in the pregnancy phase of a cycle. If you are, it progresses your pregnancy chemical. Then it gives a fluxuation of possible due dates. If you cross the due date threshold, you enter labor, marked by preg = 2. Other milestones will also be placed in here, including body deformations. Right now this is mostly an empty placeholder.}
  587. if $ARGS[0] = 'preg':
  588. if fertegg = 1 and ferteggage < 330:
  589. if rand(0,(2000 - age*20)) = 0:
  590. babyembryo += 1
  591. PregChem += rand(10,30)
  592. nextbaby = arrsize('$ChildFath')
  593. polkid[nextbaby] = polkid[nextbaby-1]
  594. $kidname[nextbaby] = 'unborn'
  595. kidage[nextbaby] = 0
  596. daykid[nextbaby] = 0
  597. monthkid[nextbaby] = 0
  598. yearkid[nextbaby] = 0
  599. Babyptype[nextbaby] = Babyptype[nextbaby-1]
  600. $ChildFath[nextbaby] = $ChildFath[nextbaby-1]
  601. hairkid[nextbaby] = hairkid[nextbaby-1]
  602. eyeskid[nextbaby] = eyeskid[nextbaby-1]
  603. cumarrcon[nextbaby] = cumarrcon[nextbaby-1]
  604. $childtype[nextbaby] = 'identical twin'
  605. $childtype[nextbaby-1] = 'identical twin'
  606. end
  607. end
  608. PregChem += 1
  609. temprand = rand(-400,800)
  610. temprand -= (babyembryo-1)*588
  611. if PregChem > 6573 + temprand and preg ! 2:
  612. 'A sharp pain pierces your abdomen, and you feel something flow down your legs. Your water has broken!'
  613. $cycreport_txt = 'In labour'
  614. arrmodtmp =arrsize('$ChildFath')
  615. arrmodtmp -= (babyembryo+1)
  616. :babyfinalpreploop
  617. if arrmodtmp < arrsize('$ChildFath') and daykid[arrmodtmp] = 0:
  618. daykid[arrmodtmp] = 42
  619. $ChildThFath[arrmodtmp] = $wombthfath
  620. arrmodtmp += 1
  621. jump 'babyfinalpreploop'
  622. end
  623. KILLVAR '$wombpotfath'
  624. KILLVAR '$wombthfath'
  625. preg = 2
  626. pregminut = totminut + 1440
  627. if babyembryo > 1:
  628. 'Your babies are coming...'
  629. else
  630. 'Your baby is coming...'
  631. end
  632. if PregChem < 3885:
  633. 'Way too early!'
  634. elseif PregChem < 5229:
  635. 'Very early!'
  636. elseif PregChem < 6069:
  637. 'Early.'
  638. elseif PregChem > 6959:
  639. 'Late.'
  640. elseif PregChem > 7245:
  641. 'Very Late!'
  642. end
  643. 'You need to get to a clinic.'
  644. end
  645. if PregChem > 3887:
  646. if lactate <= 0:
  647. 'You begin lactating'
  648. lactate = 1
  649. lactatemv = 0
  650. lactatemm = 10
  651. else
  652. if lactate < 1: lactate = 1
  653. end
  654. end
  655. if PregChem > 2203:
  656. if pregchem > 2853 or kid > 0:
  657. if rand(0,7) = 0: dynamic $d_pregmovement
  658. else
  659. if rand(0,500) = 0: dynamic $d_pregmovement
  660. end
  661. end
  662. end
  663. --- femcyc ---------------------------------