body_shape 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472
  1. # body_shape
  2. !!vhips = derived from salo in body_shape
  3. !!vhtmp = slows the change to vhips in body_shape
  4. !!wratio = waist to hips ratio set in body_shape
  5. !!bratio = band to waist ratio set in body_shape
  6. !!hratio = hip to height ratio set in body_shape
  7. !!vofat = used as a place to put extra salo at extreme high values (i.e. really, really fat) set in body_shape
  8. !!nbsize = starts at a set genetic bust size, but can be adjusted down if salo drops too low
  9. !!magicf2b = set in body_shape for the fat moved to bust
  10. !!genbsize = the set genetic bust size
  11. !!salocatnow = the current category of salo
  12. !!salocatlast = the previous category of salo
  13. !!magf2bdo = flag for magic bust increase; 0, ready; 1, do it; 2, ask; 3, no
  14. !!mgf2bnocnt = used to count the number of times a bust increase was turned down and stop asking after 3
  15. !!magtarcup = set in the dream code as the target cup size
  16. !!btwarn = used to flag if to display the gaining/losing weight message when bathing
  17. !!salolast = used when doing a soft rest to control the cycling of the main code
  18. !!sftrstflag = used to prevent a code chunk from firing on a soft reset
  19. !!Image set variables
  20. !! bodset = body image and descriptor control variable, used to indicate which image and descriptor set is in use
  21. !! $bodimgsets[x] = body shape descriptors, tens place is the set (using bodset), 0 - 7 the descriptors (using salocatnow), 8 filler, 9 is the folder name
  22. !! bdsetlock = flag to indicate set control override, 0 is use the formula to pick a set, 1 is use a fixed set
  23. !! fixbodset = the identification number of the fixed image set
  24. !! bodsetcnt = the number of sets present
  25. !! imgset6ovr[x] and imgset7ovr[x] = a flag to indicate that an image set (x) has its own image 6 and/or 7
  26. if $ARGS[0] = '':
  27. !!This controls the gradual change in stat to -buf
  28. if strenbuf > pcs_stren: strenbuf -= 1
  29. if strenbuf < pcs_stren: strenbuf += 1
  30. if vitalbuf > pcs_vital: vitalbuf -= 1
  31. if vitalbuf < pcs_vital: vitalbuf += 1
  32. if agilbuf > pcs_agil: agilbuf -= 1
  33. if agilbuf < pcs_agil: agilbuf += 1
  34. !!All the ratios were rounded to 2 digits and there are divide 100s at the final calc points
  35. !!Waist to hip ratio
  36. wrtemp = ((2 * vitalbuf + strenbuf + agilbuf) /4)
  37. !! Primary wratio handling
  38. if wrtemp < 11:
  39. wratio = 85 + (11 - (vitalbuf + strenbuf + agilbuf)/3)
  40. elseif wrtemp < 20:
  41. wratio = 85
  42. elseif wrtemp < 35:
  43. wratio = 85 - (wrtemp - 20) / 3
  44. elseif wrtemp < 55:
  45. wratio = 80 - (wrtemp - 35) / 4
  46. elseif wrtemp < 80:
  47. wratio = 75 - (wrtemp - 55) / 5
  48. elseif wrtemp >= 80:
  49. wratio = 70
  50. end
  51. !! High stat value edge case handling
  52. if (vitalbuf + strenbuf + agilbuf) /3 > 100: wratio -= ((vitalbuf + strenbuf)/2 - agilbuf)/5
  53. !! This is the oops and high stat gone overboard handling
  54. if wratio < 65: wratio = 65
  55. killvar 'wrtemp'
  56. !!Setting the pcs_apprnc bonus based on wratio
  57. if wratio >= 85:
  58. bodykoef = 0
  59. elseif wratio >= 80:
  60. bodykoef = 2
  61. elseif wratio >= 75:
  62. bodykoef = 4
  63. elseif wratio >= 70:
  64. bodykoef = 8
  65. else
  66. bodykoef = 4
  67. end
  68. !!For band to waist ratio
  69. brtemp = (2 * strenbuf + vitalbuf + agilbuf) /4
  70. if brtemp < 10:
  71. bratio = 105
  72. elseif brtemp =< 23:
  73. bratio = 106
  74. elseif brtemp =< 80:
  75. bratio = 106 + (brtemp - 23) / 3
  76. else
  77. bratio = 125
  78. end
  79. killvar 'brtemp'
  80. !!For hip to height ratio which is used to set the center point
  81. hrtemp = (2 * agilbuf + vitalbuf + strenbuf) /4
  82. if hrtemp < 35:
  83. hratio = 60
  84. elseif hrtemp < 45:
  85. hratio = 59
  86. elseif hrtemp < 60:
  87. hratio = 58
  88. elseif hrtemp < 80:
  89. hratio = 57
  90. else
  91. hratio = 56
  92. end
  93. killvar 'hrtemp'
  94. !!Salo Handling; the first part is because during a reset fat is not used and should be cleared
  95. if sftrstflag = 1:
  96. fat = 0
  97. else
  98. if fat > (2 + vitalbuf / 25): salo += 1 & fat = 0
  99. if fat < (-2 - (vitalbuf / 10)): salo -= 1 & fat = 0
  100. end
  101. !!This calculates the current salo category; ranges are 20 points, seemed to balance best if the range is x10 the hip devisor
  102. :salocatloop
  103. if salo < 10:
  104. salocatnow = 0
  105. else
  106. salocatnow = 1 + (salo - 10) / 20
  107. end
  108. !!This resets the genetic bust size (genbsize) when the cheat is used to reduce breast size (maybe other things later)
  109. if titreduc = 1:
  110. killvar 'titreduc'
  111. if genbsize > nbsize:
  112. genbsize = 2 + nbsize - nbsize mod 5
  113. end
  114. end
  115. !!This controls the movement of salo to/from bust in order of precedence
  116. if salobustdo = 0 and nbsize < genbsize and salocatnow > 2:
  117. if sftrstflag = 0:'<b>Your breasts seem fuller.</b>'
  118. nbsize += 1
  119. salo -= 3
  120. salobustdo = 1
  121. jump 'salocatloop'
  122. end
  123. if salobustdo = 0 and magf2bdo = 1 and salocatnow > salocatlast and pcs_manna >= mannamax / 2:
  124. if sftrstflag = 0:'<b>Your breasts seem fuller.</b>'
  125. magicf2b += 1
  126. salo -= 3
  127. salobustdo = 1
  128. if magicf2b >= 2 + magtarcup * 5: magf2bdo = 0
  129. if pcs_magik < 20:
  130. pcs_manna -= 2000 / pcs_magik
  131. else
  132. mana -= 100
  133. end
  134. jump 'salocatloop'
  135. end
  136. if salobustdo = 0 and salocatnow < 2 and salocatlast >= 2 and magicf2b > 0:
  137. if sftrstflag = 0:'<b>Your breasts seem to be getting smaller.</b>'
  138. magicf2b -= 1
  139. salo += 3
  140. salobustdo = 1
  141. magf2bdo = 1
  142. jump 'salocatloop'
  143. end
  144. if salobustdo = 0 and salocatnow < 1 and salocatlast >= 1 and nbsize > 0:
  145. if sftrstflag = 0:'<b>Your breasts seem to be getting smaller.</b>'
  146. nbsize -= 1
  147. salo += 3
  148. salobustdo = 1
  149. jump 'salocatloop'
  150. end
  151. !!This sets which image set is to be used when the override is not set
  152. if bdsetlock = 0:
  153. if strenbuf >= 70:
  154. bodset = 2
  155. elseif strenbuf <= 40:
  156. bodset = 0
  157. else
  158. bodset = 1
  159. end
  160. else
  161. bodset = fixbodset
  162. end
  163. !!This is if a Succubus has salo < 1
  164. if succubusflag = 1 and salo < 1:
  165. sucexcess -= 1
  166. salo += 3
  167. end
  168. !!This is if salo is still < 1
  169. if salo < 1:
  170. if fat >= 1:
  171. salo = 1
  172. fat -= 1
  173. elseif fat <= 0 and pcs_stren + pcs_vital > 0:
  174. stren_deg -= 1000
  175. vital_deg -= 1000
  176. salo = 1
  177. else
  178. if Enable_nogameover = 0:
  179. over = 3
  180. gt 'gameover'
  181. exit
  182. else
  183. pl '<font color=red><B>You starved to death, but Cheat Mode keeps you Alive.</B></font>'
  184. salo = 1
  185. end
  186. end
  187. end
  188. killvar 'tempvct' & killvar 'salobustdo'
  189. !!This is the hip calcs, 80 is the center of the current max-min range (10 - 130)
  190. vhtmp = (salo - 80) / 2
  191. if vhips > vhtmp: vhips -= 1
  192. if vhips < vhtmp: vhips += 1
  193. !! Because a reset should be updating hip size instantly (this set is a bit redundant anyway)
  194. if sftrstflag = 1: vhips = vhtmp
  195. if (pcs_hgt * hratio) / 100 + vhips > (pcs_hgt * 72) / 100:
  196. vofat = ((pcs_hgt * hratio) / 100 + vhips - (pcs_hgt * 72) / 100) / 2
  197. vhips -= vofat * 2
  198. end
  199. !!This will trigger the warning notices in the bathing code (the +/- 12 should always be +/- 11 + the max change to salo w/ fat)
  200. if salolast > salo and salo <= 12 + (20 * (salocatnow - 1)): btwarn = 1
  201. if salolast < salo and salo >= (20 * (salocatnow + 1)) - 12: btwarn = 2
  202. !!This will trigger the dream for the option to use magic to increase bust
  203. !!Three nos at the dream will lock it out (1 yes resets the count)
  204. if pcs_magik >= 5 and MagikDostup = 0 and magf2bdo = 0:
  205. if salolast < salo and salo >= (20 * (salocatnow + 1)) - 11 and tits < 10:
  206. if mgf2bnocnt < 3:
  207. magf2bdo = 2
  208. else
  209. magf2bdo = 3 & killvar 'mgf2bnocnt'
  210. end
  211. end
  212. end
  213. !!This is to deal with the possibility that salocatnow changed by more than 1 (fat burners, vitamins, plastic surgery, etc.)
  214. if salocatnow < salocatlast: salocatlast -= 1
  215. if salocatnow > salocatlast: salocatlast += 1
  216. !!This is for use in the warning code and as part of the reset routines
  217. if salolast > salo: salolast -= 1
  218. if salolast < salo: salolast += 1
  219. !!This modifies bodykoef for high or low salo values
  220. if salocatnow = 0 or salocatnow >= 7:
  221. bodykoef -= 8
  222. elseif salocatnow = 1 or salocatnow = 6:
  223. bodykoef -= 4
  224. end
  225. if vofat > 0: bodykoef -= vofat
  226. !!This is to clean up unused variables
  227. killvar 'normbuffpick' & killvar 'nrmbfpckct'
  228. killvar 'vmeat' & killvar 'vfat' & killvar 'Kves' & killvar 'krost'
  229. killvar 'koefvesbt' & killvar 'koefbt'
  230. end
  231. if $ARGS[0] = 'softreset':
  232. !!This is for use in immediately updating shape if something has caused a large change in salo, primarily fat burners and plastic surgery
  233. sftrstflag = 1
  234. :resetloop
  235. if salo ! salolast:
  236. if gmstrtflag = 1: salobustdo = 1
  237. gs 'body_shape'
  238. jump 'resetloop'
  239. end
  240. !!Updates pcs_apprncbase after a reset
  241. gs 'body_shape', 'basebeautycalc', 1
  242. !!Clears the warning and reset status flags if they were set
  243. sftrstflag = 0
  244. btwarn = 0
  245. end
  246. if $ARGS[0] = 'hardreset':
  247. !!This is primarily for canceling out "dounspell" and setting salo to whatever value will result in the current hip size then balancing everything out.
  248. !!Also could be built in as a means to in-game undo "dounspell", other than the cheat.
  249. if dounspell = 1 and dounsplkil > 0:
  250. salo = 12
  251. fat = 0
  252. agilbuf = pcs_agil & strenbuf = pcs_stren & vitalbuf = pcs_vital
  253. salobustdo = 1 & sftrstflag = 1 & normbuffpick = -1
  254. gs 'body_shape'
  255. salo = (pcs_hips * 2) - ((pcs_hgt * hratio) / 50) + 80
  256. if salo < 10:
  257. salocatnow = 0
  258. else
  259. salocatnow = 1 + (salo - 10) / 20
  260. end
  261. salocatlast = salocatnow
  262. salolast = salo
  263. vhtmp = (salo - 80) / 2
  264. vhips = vhtmp
  265. if genbsize = 0 and nbsize > 0:
  266. If nbsize >= 27:
  267. genbsize = 27
  268. else
  269. genbsize = 2 + nbsize - nbsize mod 5
  270. end
  271. elseif genbsize = 0 and nbsize = 0 and silicone >= 20:
  272. genbsize = 12 & nbsize = 12 & silicone -= 10
  273. end
  274. sftrstflag = 0 & normbuffpick = 0 & btwarn = 0 & magf2bdo = 0
  275. killvar 'dounsplkil'
  276. newbdsp = 1
  277. dounspell = 0
  278. gs 'body_shape', 'basebeautycalc', 1
  279. gs 'body_shape'
  280. gs 'stat'
  281. else
  282. 'If you''re seeing this, something odd happened. Please make a bug report that the body shape hard reset improperly fired and what you were doing.'
  283. end
  284. end
  285. if $ARGS[0] = 'initial':
  286. !! Sets the genetic bust size if it was not set in the start routines
  287. if genbsize = 0:
  288. genbsize = 12 & nbsize = 12
  289. else
  290. nbsize = genbsize
  291. end
  292. agilbuf = pcs_agil & strenbuf = pcs_stren & vitalbuf = pcs_vital
  293. normbuffpick = -1 & gmstrtflag = 1
  294. !! Calling soft reset will cause the main code to cycle up to the starting value of salo
  295. gs 'body_shape', 'softreset'
  296. !! This sets/resets the controler variables
  297. salocatlast = salocatnow
  298. normbuffpick = 0 & magf2bdo = 0
  299. killvar 'gmstrtflag'
  300. newbdsp = 1
  301. !! This does all the body shape setting before the first stat call
  302. pcs_hips = (pcs_hgt * hratio) / 100 + vhips
  303. pcs_waist = (pcs_hips * wratio) / 100 + vofat
  304. pcs_band = (pcs_waist * bratio) / 100 + vofat
  305. pcs_bust = (pcs_waist * bratio) / 100 + nbsize + magicf2b + silicone
  306. pcs_cupsize = pcs_bust - pcs_band
  307. if pcs_cupsize <= 5:
  308. tits = 0
  309. $titsize = 'AA cup'
  310. elseif pcs_cupsize <= 10:
  311. tits = 1
  312. $titsize = 'A cup'
  313. elseif pcs_cupsize <= 15:
  314. tits = 2
  315. $titsize = 'B cup'
  316. elseif pcs_cupsize <= 20:
  317. tits = 3
  318. $titsize = 'C cup'
  319. elseif pcs_cupsize <= 25:
  320. tits = 4
  321. $titsize = 'D cup'
  322. elseif pcs_cupsize <= 30:
  323. tits = 5
  324. $titsize = 'E cup'
  325. elseif pcs_cupsize <= 35:
  326. tits = 6
  327. $titsize = 'F cup'
  328. elseif pcs_cupsize <= 40:
  329. tits = 7
  330. $titsize = 'G cup'
  331. elseif pcs_cupsize <= 45:
  332. tits = 8
  333. $titsize = 'H cup'
  334. elseif pcs_cupsize <= 50:
  335. tits = 9
  336. $titsize = 'I cup'
  337. elseif pcs_cupsize <= 55:
  338. tits = 10
  339. $titsize = 'J cup'
  340. else
  341. tits = 11
  342. $titsize = 'K cup'
  343. end
  344. pcs_weight = (pcs_hgt * 62 / 170) + (vhips + (vofat * 2)) / 4 + tits
  345. end
  346. !!This is the calculation for the base appearance
  347. if $args[0] = 'basebeautycalc':
  348. !! Setting vidagebonus
  349. vidagebonus = 100
  350. if vidage < 20: vidagebonus = 100 - 2 * (20 - vidage)
  351. if vidage > 30: vidagebonus = 100 - 2 * (vidage - 30)
  352. !! Setting Eyelashes bonus
  353. if pcs_lashes = 1:
  354. resnicbonus = 2
  355. elseif pcs_lashes = 2:
  356. resnicbonus = 5
  357. else
  358. resnicbonus = 0
  359. end
  360. !! Setting Eye Size bonus
  361. if pcs_eyesize = 1:
  362. glarazbonus = 1
  363. elseif pcs_eyesize = 2:
  364. glarazbonus = 3
  365. elseif pcs_eyesize = 3:
  366. glarazbonus = 2
  367. else
  368. glarazbonus = 0
  369. end
  370. !! Setting the Lip size bonus
  371. if pcs_lip = 0:
  372. lipbonus = -2
  373. elseif pcs_lip = 1:
  374. lipbonus = 0
  375. elseif pcs_lip = 2:
  376. lipbonus = 3
  377. elseif pcs_lip = 3:
  378. lipbonus = 5
  379. else
  380. lipbonus = 3
  381. end
  382. !! Preforming the calculation
  383. vneshtemp = vidagebonus * ((pcs_skin * 2 / 5) + (3 * (2 + bodykoef)) + (pcs_agil / 10) + (pcs_vital / 10) + resnicbonus + glarazbonus + lipbonus - (5 * pcs_teeth)) / 100
  384. !! pcs_skin = skin condition, corrected to a 0 to 40 range; bodykoef set in main body_shape; pcs_teeth is missing teeth or cosmetically improved teeth (-1)
  385. !! This is the first limiter
  386. if vneshtemp > 100: vneshtemp = 100
  387. !! This adds the supernatural pcs_apprnc bonus; currently Bimbo and Succubus
  388. vneshtemp += supnatvnesh
  389. !! This is the rate of change limiter
  390. if pcs_apprncbase > vneshtemp:
  391. if pcs_apprncbase - 5 > vneshtemp:
  392. pcs_apprncbase -= 5
  393. elseif pcs_apprncbase - 3 > vneshtemp:
  394. pcs_apprncbase -= 3
  395. else
  396. pcs_apprncbase -= 1
  397. end
  398. elseif pcs_apprncbase < vneshtemp:
  399. if pcs_apprncbase + 5 < vneshtemp:
  400. pcs_apprncbase += 5
  401. elseif pcs_apprncbase + 3 < vneshtemp:
  402. pcs_apprncbase += 3
  403. else
  404. pcs_apprncbase += 1
  405. end
  406. end
  407. !! This is for use when a reset is called for by setting args[1] = 1
  408. if args[1] = 1: pcs_apprncbase = vneshtemp
  409. !! This is to clean up variables only used here
  410. killvar 'vidagebonus'
  411. killvar 'resnicbonus'
  412. killvar 'glarazbonus'
  413. killvar 'lipbonus'
  414. killvar 'vneshtemp'
  415. !! This is to unload old variables
  416. killvar 'CloNaturalBeauty'
  417. killvar 'CloBaseBeauty'
  418. killvar 'skin'
  419. killvar 'bimbobeauty'
  420. end
  421. --- body_shape ---------------------------------