Cum_Manage.qsrc 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632
  1. # Cum_Manage
  2. !!
  3. !! THIS IS A CORE FILE TO GAME MECHANICS. Please edit CAREFULLY, and leave as many comments as possible!!
  4. !!
  5. !! The comments in this file serve as tutorial to managing cum/sperm during scene writing and game-play. Please read them.
  6. !!
  7. !! spafinloc and cum array naming takes precident over other naming schemes. Always import and export variables by their cum array names
  8. !!
  9. !!------------------------------------------------------------------------------------------------------------
  10. !!
  11. !! Cum Array indices:
  12. !!
  13. !! cumarrnam : Sperm Owner
  14. !! cumarrppt : Sperm Potential Potency (max sperm delivery)
  15. !! cumarrcpt : Sperm Current Potency (current amount of sperm)
  16. !! cumarrdel : Sperm "Delivery" (method of *VAGINAL ONLY* acquisition)
  17. !! cumarrcon : Contraception typ used
  18. !! cumarrage : Sperm age in hours
  19. !! cumarrkno : Did you know/realize who did it?
  20. !! cumarrcnt : Unique identifier of the exact which time the MC has had this sperm incident occur.
  21. !!
  22. !!
  23. !!
  24. !! Spatter Array indices:
  25. !!
  26. !! sparrloc : Location of the sperm, as per cumarrdel
  27. !! sparrnam : Spatter Owner
  28. !! sparrppt : Spatter Potential Potency (Used to increase potency if you don't clean yourself out)
  29. !! sparridt : Did you know/realize who did it?
  30. !! sparrvol : Volume of the spatter. 40 is average.
  31. !! sparrslc : Spread status of the spatter. High volume can spread the contaminant from it's starting place.
  32. !! sparrcnt : Unique identifier of the exact which time the MC has had this spatter incident occur.
  33. !!
  34. !!
  35. !!
  36. !! Values of 'cumarrdel' as defined by the cum_arr:
  37. !!
  38. !! cumarrdel = 0 : 'Vaginal intercourse'
  39. !! cumarrdel = 1 : 'From spatter on labia'
  40. !! cumarrdel = 2 : 'From the anal area'
  41. !! cumarrdel = 3 : 'From sperm on clothing'
  42. !! cumarrdel = 4 : 'From sperm on fingers'
  43. !! cumarrdel = 5 : 'From sperm on wipes'
  44. !! cumarrdel = 6 : 'Unknown'
  45. !!
  46. !!
  47. !!
  48. !! Values of 'cumarrcon' as defined by the cum_arr:
  49. !!
  50. !! cumarrcon = 0: 'No contraception used'
  51. !! cumarrcon = 1: 'You lied about being on the pill'
  52. !! cumarrcon = 2: 'You were on the pill'
  53. !! cumarrcon = 3: 'You used a condom'
  54. !! cumarrcon = 4: 'The condom broke'
  55. !! cumarrcon = 5: 'The condom slipped off inside you'
  56. !! cumarrcon = 6: 'The condom was sabotaged by someone else'
  57. !! cumarrcon = 7: 'You sabotaged the condom'
  58. !! cumarrcon = 8: 'Precum had sperm in it'
  59. !! cumarrcon = 9: 'You believe are sterile'
  60. !!
  61. !!
  62. !!
  63. !! Values of 'cumarrkno' as defined by the cum_arr:
  64. !!
  65. !! cumarrkno = -2 : 'You were unaware there was sperm in you'
  66. !! cumarrkno = -1 : 'You do not think that any sperm has gotten into you'
  67. !! cumarrkno = 0 : 'You know somebody got sperm in you, but you don''t know that person'
  68. !! cumarrkno = 1 : 'You know who got sperm in you'
  69. !!
  70. !!
  71. !!
  72. !! Locations to be defined by 'spafinloc'
  73. !!
  74. !! 0 = 'In your Vagina'
  75. !! 1 = 'On your labia'
  76. !! 2 = 'On your panties over your vagina'
  77. !! 3 = 'In your anus'
  78. !! 4 = 'On your butt'
  79. !! 5 = 'On your panties over your butt'
  80. !! 6 = 'On your clothes in your groin area'
  81. !! 7 = 'On your clothes'
  82. !! 8 = 'On your back'
  83. !! 9 = 'On your legs'
  84. !! 10 = 'On your arms'
  85. !! 11 = 'On your face'
  86. !! 12 = 'Inside your mouth'
  87. !! 13 = 'On your hands'
  88. !! 14 = 'On your stomach'
  89. !! 15 = 'On your breasts'
  90. !! 16 = 'In your hair'
  91. !! 17 = 'In a condom in your vagina'
  92. !!
  93. !!------------------------------------------------------------------------------------------------------------
  94. if $ARGS[0] = '':
  95. !!{ Debug information, comment out in release versions. }
  96. !! '<br><b><font color="red">Cum_Manage</font> called with: spafinloc=<<spafinloc>> cumarrkno=<<cumarrkno>> cummarrcon=<<cumarrcon>> cumarrdel=<<cumarrdel>></b>'
  97. !!{ We count every time somebody cum on or inside the MC. It is used for spatter and cum matching in femcyc}
  98. stat['cum_count'] += 1
  99. !!{ Here we define our important variables.}
  100. dick = npc_dick[$boy]
  101. if sexvolume <= 0: sexvolume = 40
  102. if sexspecpot = 0: sexspecpot = npc_spermpot[$boy]
  103. if sexspecpot = 0: sexspecpot = sexvolume * rand(250, 300)
  104. if sexspecpot < 0: sexspecpot = 0
  105. if vibratorIN = 1 and spafinloc = 0 and replace_vib = 0: vibratorIN = 0
  106. if analplugIN = 1 and spafinloc = 3 and replace_analplug = 0: analplugIN = 0
  107. !!{ Set the cum array temp to the current size of the cum array to add a new entry to the end of file. Then checks to see if you are on the pill. If you are and there is no contraception used, it flags this as a "done with pill" act, which means a pregnancy will be a pill failure.}
  108. cumarrtemp = arrsize('$cumarrnam')
  109. if sexcontra = 0 and pillcon2 > 1000: sexcontra = 2
  110. !!{Check for previous deposit, and if it was by the same guy and precum, it sets cumarrtemp back by one}
  111. !! if $cumarrnam[cumarrtemp-1] = $boy and cumarrkno[cumarrtemp-1] = -1:cumarrtemp -= 1 & sexspecpot = cumarrppt[cumarrtemp]
  112. if cumprecheck = 1:
  113. cumarrkno[cumarrtemp] = -1
  114. elseif sexunaware > 0:
  115. cumarrkno[cumarrtemp] = -2
  116. elseif sexpartkno = 1:
  117. cumarrkno[cumarrtemp] = 1
  118. else
  119. cumarrkno[cumarrtemp] = 0
  120. end
  121. !!{ If a condom slipped in the vagina, it will pushed deeper inside the vagina during vaginal sex.}
  122. if spafinloc <= 0 and cumcondslip > 0:
  123. if dick > cumcondslip_deep:
  124. cumcondslip_deep = dick + rand (0,2)
  125. else
  126. cumcondslip_deep += rand (0,2)
  127. end
  128. end
  129. sparrtemp = arrsize('sparrvol')
  130. !!{ Check to see if this is flagged as a preejaculate emmission. All vaginal penetrations that flag this as cumprecheck contain preejaculate. Guidelines for calling it: If your boy is likely to have masterbated, had sex, or otherwise encouraged semen to leak out of their urethra in the last 48 hours, they probably have some fertile preejaculate. If in doubt, let it leak. The chances of pregnancy from it are low, and the MC should have been wearing protection.}
  131. if cumprecheck ! 1:
  132. !!{ Here it checks for vaginal deposit.}
  133. if spafinloc <= 0:
  134. !!{ Next it sets the variables in the array. The cumming boys name is first and cum age to 0.
  135. !! The cum delivery location is set to vaginally, and we check to see if this is an unknowing sex act.
  136. !! If it is, it makes it so the MC doesn''t know who did it.
  137. !! If the boy has a custom specified potency 'sexspecpot', it flags the potency. Otherwise it sets it to the default.
  138. !! Default potency potential is generated from a random multiplier of sexvolume.
  139. !! Sexvolume defaults to 40 (4 mL), but may be overwritten with 'sexvolume'.}
  140. $cumarrnam[cumarrtemp] = $boy
  141. cumarrage[cumarrtemp] = 0
  142. cumarrdel[cumarrtemp] = 0
  143. cumarrcnt[cumarrtemp] = stat['cum_count']
  144. cumarrppt[cumarrtemp] = sexspecpot
  145. !!{ Now it sets up the splatter and actual internal cum.
  146. !! First it sets the array to the spatter end of file. Then it checks for riding bareback.
  147. !! If theres a condom, it gives a chance for the condom to fail in general, slip off and remain in the vagina, or break.}
  148. if sexcontra > 2:
  149. if noprotect = 1: noprotect = 0 & sexcontra = 4
  150. if sexcontra = 3:
  151. temprand = rand(0,1000)
  152. dick_wid = 3
  153. if $dick_girth = 'skinny': dick_wid = 2
  154. if $dick_girth = 'slim': dick_wid = 3
  155. if $dick_girth = 'well proportioned': dick_wid = 3
  156. if $dick_girth = 'thicker than average': dick_wid = 4
  157. if $dick_girth = 'thick': dick_wid = 4
  158. if $dick_girth = 'massive': dick_wid = 5
  159. if $dick_girth = 'monstrous': dick_wid = 6
  160. break_thresh = dick_wid * 2
  161. break_thresh -= pcs_vag / 4
  162. break_thresh += dick / 4
  163. slip_thresh = 36 - (dick_wid * 2)
  164. slip_thresh -= (pcs_vag / 2)
  165. slip_thresh -= dick / 2
  166. if break_thresh < 1: break_thresh = 1
  167. if slip_thresh < 4: slip_thresh = 4
  168. break_thresh += slip_thresh
  169. if temprand = 0:
  170. cumarrcpt[cumarrtemp] += cumarrppt[cumarrtemp]/4
  171. cumarrcon[cumarrtemp] = 3
  172. elseif temprand <= slip_thresh:
  173. cumarrcpt[cumarrtemp] += cumarrppt[cumarrtemp]/200
  174. cumarrcon[cumarrtemp] = 5
  175. cumcondslip = 1
  176. cumcondsanb = cumarrtemp
  177. sexcontra = 5
  178. sparrage[sparrtemp] = 0
  179. sparrloc[sparrtemp] = 17
  180. $sparrnam[sparrtemp] = $boy
  181. sparrcnt[sparrtemp] = stat['cum_count']
  182. sparrppt[sparrtemp] = sexspecpot
  183. sparrvol[sparrtemp] += sexvolume
  184. cumsumbod += sexvolume
  185. cumsumvag += sexvolume
  186. sparridt[sparrtemp] = cumarrkno[cumarrtemp]
  187. sparrslc[sparrtemp] = 0
  188. cumcondslip += 1
  189. if cumcondslip_deep <= 0:cumcondslip_deep = rand(1, dick)
  190. if sparridt[sparrtemp] >= 0:cumcondslip_aware = 1
  191. dynamic $ferteggfather
  192. elseif temprand <= break_thresh:
  193. cumarrcpt[cumarrtemp] += cumarrppt[cumarrtemp]/2
  194. cumarrcon[cumarrtemp] = 4
  195. sexcontra = 4
  196. sparrage[sparrtemp] = 0
  197. sparrloc[sparrtemp] = 0
  198. $sparrnam[sparrtemp] = $boy
  199. sparrcnt[sparrtemp] = stat['cum_count']
  200. sparrppt[sparrtemp] = sexspecpot
  201. sparrvol[sparrtemp] += sexvolume
  202. cumsumbod += sexvolume
  203. cumsumvag += sexvolume
  204. sparridt[sparrtemp] = cumarrkno[cumarrtemp]
  205. sparrslc[sparrtemp] = 0
  206. dynamic $ferteggfather
  207. else
  208. cumarrcpt[cumarrtemp] += 5
  209. cumarrcon[cumarrtemp] = 3
  210. end
  211. !!{ Next it checks to see if the event is calling specifically for a burst or slipped off condom.
  212. !! It treats them the same as if the condom above had a failure.}
  213. elseif sexcontra = 4:
  214. cumarrcpt[cumarrtemp] += cumarrppt[cumarrtemp]/2
  215. cumarrcon[cumarrtemp] = 4
  216. sparrage[sparrtemp] = 0
  217. sparrloc[sparrtemp] = 0
  218. $sparrnam[sparrtemp] = $boy
  219. sparrcnt[sparrtemp] = stat['cum_count']
  220. sparrppt[sparrtemp] = sexspecpot
  221. sparrvol[sparrtemp] += sexvolume
  222. cumsumbod += sexvolume
  223. cumsumvag += sexvolume
  224. sparridt[sparrtemp] = cumarrkno[cumarrtemp]
  225. sparrslc[sparrtemp] = 0
  226. dynamic $ferteggfather
  227. elseif sexcontra = 5:
  228. cumarrcpt[cumarrtemp] += cumarrppt[cumarrtemp]/200
  229. cumarrcon[cumarrtemp] = 5
  230. cumcondslip = 1
  231. cumcondsanb = cumarrtemp
  232. sparrage[sparrtemp] = 0
  233. sparrloc[sparrtemp] = 17
  234. $sparrnam[sparrtemp] = $boy
  235. sparrcnt[sparrtemp] = stat['cum_count']
  236. sparrppt[sparrtemp] = sexspecpot
  237. sparrvol[sparrtemp] += sexvolume
  238. cumsumbod += sexvolume
  239. cumsumvag += sexvolume
  240. sparridt[sparrtemp] = cumarrkno[cumarrtemp]
  241. sparrslc[sparrtemp] = 0
  242. cumcondslip += 1
  243. if cumcondslip_deep <= 0:cumcondslip_deep = rand(1, dick)
  244. if sparridt[sparrtemp] >= 0:cumcondslip_aware = 1
  245. dynamic $ferteggfather
  246. !!{ Next, check for sabotaged condoms. First sabotaged by you, then sabotaged by the guy.
  247. !! If they were sabotaged, it acts similar to a condom failure, but worse.}
  248. elseif sexcontra = 6:
  249. cumarrcpt[cumarrtemp] += cumarrppt[cumarrtemp]/3
  250. cumarrcon[cumarrtemp] = 6
  251. elseif sexcontra = 7:
  252. cumarrcpt[cumarrtemp] += cumarrppt[cumarrtemp]/3
  253. cumarrcon[cumarrtemp] = 7
  254. dynamic $ferteggfather
  255. end
  256. !!{ If you have no protection, you get a nice, full load of semen.}
  257. else
  258. sparrage[sparrtemp] = 0
  259. sparrloc[sparrtemp] = 0
  260. $sparrnam[sparrtemp] = $boy
  261. sparrcnt[sparrtemp] = stat['cum_count']
  262. sparrppt[sparrtemp] = sexspecpot
  263. sparrvol[sparrtemp] += sexvolume
  264. cumsumbod += sexvolume
  265. cumsumvag += sexvolume
  266. sparridt[sparrtemp] = cumarrkno[cumarrtemp]
  267. sparrslc[sparrtemp] = 0
  268. cumarrcpt[cumarrtemp] += cumarrppt[cumarrtemp]/5*4
  269. cumarrcon[cumarrtemp] = sexcontra
  270. dynamic $ferteggfather
  271. end
  272. !! creampie statistics:
  273. if spafinloc = 0:
  274. !! safe creampie (if cycle > 3 or on pill):
  275. if cycle > 3 or pillcon2 > 1000:
  276. if sexunaware = 1 or sexcontra = 6:
  277. pcs_cp_safe_unknown += 1
  278. else
  279. pcs_cp_safe_known += 1
  280. end
  281. !! pretty safe creampie (if cycle = 3 or cycle = 0):
  282. elseif cycle = 0 or cycle = 3:
  283. if sexunaware = 1 or sexcontra = 6:
  284. pcs_cp_notsafe_unknown += 1
  285. else
  286. pcs_cp_notsafe_known += 1
  287. end
  288. !! risky creampie (not on pill, fertile part of the cycle):
  289. else
  290. if sexunaware = 1 or sexcontra = 6:
  291. pcs_cp_risky_unknown += 1
  292. else
  293. pcs_cp_risky_known += 1
  294. end
  295. end
  296. elseif spafinloc = 3:
  297. if sexunaware = 1 or sexcontra = 6:
  298. pcs_acp_unknown += 1
  299. else
  300. pcs_acp_known += 1
  301. end
  302. end
  303. !!{ If you arent getting it in the vagina, and the boy isnt pumping it into a condom, a spatter is made and applied.
  304. !! If you arent wearing any panties and it was called to hit your panties, it goes directly to your groin.
  305. !! If you are naked and it calls for a clothing strike, it will go to your body instead.}
  306. elseif spafinloc > 0 and sexcontra < 3:
  307. sparrage[sparrtemp] = 0
  308. sparrcnt[sparrtemp] = stat['cum_count']
  309. if $pantyworntype = 'none':
  310. if spafinloc = 2:
  311. spafinloc = 1
  312. elseif spafinloc = 5:
  313. spafinloc = 4
  314. end
  315. end
  316. if $clothingworntype = 'nude':
  317. if spafinloc = 2:
  318. spafinloc = 1
  319. elseif spafinloc = 5:
  320. spafinloc = 4
  321. elseif spafinloc = 6:
  322. if rand(0,1) = 0:
  323. spafinloc = 1
  324. else
  325. spafinloc = 4
  326. end
  327. elseif spafinloc = 7:
  328. if rand(0,1) = 0:
  329. spafinloc = 14
  330. else
  331. spafinloc = 15
  332. end
  333. end
  334. end
  335. sparrloc[sparrtemp] = spafinloc
  336. if spafinloc = 12 and swallow >= 10 and rand(0,3) = 0: pcs_energy += 2 & pcs_hydra += 1
  337. $sparrnam[sparrtemp] = $boy
  338. sparrppt[sparrtemp] = sexspecpot
  339. sparrvol[sparrtemp] += sexvolume
  340. cumsumbod += sexvolume
  341. if spafinloc = 3:
  342. cumsumass += sexvolume
  343. end
  344. sparridt[sparrtemp] = cumarrkno[cumarrtemp]
  345. sparrslc[sparrtemp] = 0
  346. end
  347. if cumarrppt[cumarrtemp] < cumarrcpt[cumarrtemp]:cumarrcpt[cumarrtemp] = cumarrppt[cumarrtemp]
  348. sexpartkno = 0
  349. sexunaware = 0
  350. !!{ And this is the pre ejaculate release talked about above.}
  351. elseif sexcontra < 3 and spafinloc = 0:
  352. $cumarrnam[cumarrtemp] = $boy
  353. cumarrcnt[cumarrtemp] = stat['cum_count']
  354. cumarrppt[cumarrtemp] = sexspecpot
  355. cumarrage[cumarrtemp] = 0
  356. cumarrdel[cumarrtemp] = 0
  357. cumarrcon[cumarrtemp] = sexcontra
  358. cumarrcpt[cumarrtemp] += cumarrppt[cumarrtemp]/12
  359. if cumarrppt[cumarrtemp] < cumarrcpt[cumarrtemp]:cumarrcpt[cumarrtemp] = cumarrppt[cumarrtemp]
  360. end
  361. cumprecheck = 0
  362. spafinloc = 0
  363. sexvolume = 0
  364. dynamic $din_Update_Condom_Counts
  365. if cumsumass >= 60:
  366. arrmodtmp = arrpos('sparrloc',3)
  367. if sparrslc[arrmodtmp] <= 0: sparrslc[arrmodtmp] += 1
  368. end
  369. if cumsumvag >= 60:
  370. arrmodtmp = arrpos('sparrloc',0)
  371. if sparrslc[arrmodtmp] <= 0: sparrslc[arrmodtmp] += 1
  372. end
  373. killvar 'sexspecpot'
  374. end
  375. if $ARGS[0] = 'cumgather':
  376. cloc = ARGS[1]
  377. i = arrpos('sparrloc', cloc)
  378. if i ! -1 and i < arrsize('sparrloc'):
  379. if cloc = 0:
  380. $part = 'pussy'
  381. elseif cloc = 1:
  382. $part = 'pussylips'
  383. elseif cloc = 2 or cloc = 5:
  384. $part = 'your panties'
  385. elseif cloc = 3:
  386. $part = 'anus'
  387. elseif cloc = 4:
  388. $part = 'buttocks'
  389. elseif cloc = 6 or cloc = 7:
  390. $part = 'clothes'
  391. elseif cloc = 8:
  392. $part = 'back'
  393. elseif cloc = 9:
  394. $part = 'legs'
  395. elseif cloc = 10:
  396. $part = 'arms'
  397. elseif cloc = 11:
  398. $part = 'face'
  399. elseif cloc = 14:
  400. $part = 'stomach'
  401. elseif cloc = 15:
  402. $part = 'breasts'
  403. elseif cloc = 16:
  404. $part = 'hair'
  405. else
  406. $part = 'unknown'
  407. end
  408. if salfetka > 0:
  409. salfetka -= 1
  410. minut += 5
  411. 'You use a wipe to clean the sperm from your <<$part>>.'
  412. gs 'cum_cleanup', 'cleanloc', cloc
  413. gs 'stat'
  414. end
  415. end
  416. end
  417. if $ARGS[0] = 'cumeater':
  418. cloc = ARGS[1]
  419. i = arrpos('sparrloc', cloc)
  420. if i ! -1 and i < arrsize('sparrloc'):
  421. cumloc[12] = 1
  422. pcs_breath = 0
  423. $part = ''
  424. if cloc = 13:
  425. gs 'cum_cleanup', 'cleanloc', cloc
  426. 'You carefully lick the sperm residue from both hands, enjoying the tart taste of semen.'
  427. else
  428. if cloc = 0:
  429. $part = 'pussy'
  430. elseif cloc = 1:
  431. $part = 'pussylips'
  432. elseif cloc = 2 or cloc = 5:
  433. $part = 'your panties'
  434. gs 'cum_cleanup', 'cleanloc', 2
  435. gs 'cum_cleanup', 'cleanloc', 5
  436. elseif cloc = 3:
  437. $part = 'anus'
  438. elseif cloc = 4:
  439. $part = 'buttocks'
  440. elseif cloc = 6 or cloc = 7:
  441. $part = 'clothes'
  442. gs 'cum_cleanup', 'cleanloc', 6
  443. gs 'cum_cleanup', 'cleanloc', 7
  444. elseif cloc = 8:
  445. $part = 'back'
  446. elseif cloc = 9:
  447. $part = 'legs'
  448. elseif cloc = 10:
  449. $part = 'arms'
  450. elseif cloc = 11:
  451. $part = 'face'
  452. elseif cloc = 14:
  453. $part = 'stomach'
  454. elseif cloc = 15:
  455. $part = 'breasts'
  456. elseif cloc = 16:
  457. $part = 'hair'
  458. else
  459. $part = 'unknown'
  460. end
  461. if rand(0, 1) = 0:
  462. 'You collect a handful of sperm from your <<$part>> in your hand and lick it all up, enjoying the tart taste of semen.'
  463. else
  464. 'You collect the sperm from your <<$part>> with your fingers and lick them, enjoying the tart taste of semen.'
  465. end
  466. gs 'cum_cleanup', 'cleanloc', cloc
  467. end
  468. minut += 5
  469. gs 'stat'
  470. end
  471. end
  472. --- Cum_Manage ---------------------------------