# body
!!bodyVars['wratio'] = waist to hips ratio set in body_shape
!!bodyVars['bratio'] = band to waist ratio set in body_shape
!!bodyVars['hratio'] = hip to height ratio set in body_shape
!!bodyVars['vofat'] = used as a place to put extra pcs_mass['body'] at extreme high values (i.e. really, really fat) set in body_shape
!!
!!pcs_mass['butt'] = starts at a set genetic butt size, but can be adjusted down if pcs_mass['body'] drops too low
!!pcs_mass['butt_gen'] = the set genetic bust size
!!bodyVars['vhips'] = derived from pcs_mass['body'] and pcs_mass['butt'] in body_shape
!!vhtmp = slows the change to vhips in body_shape
!!
!!pcs_mass['bust'] = starts at a set genetic bust size, but can be adjusted down if pcs_mass['body'] drops too low
!!pcs_mass['bust_gen'] = the set genetic bust size
!!bodyVars['bust_magic'] = set in body_shape for the fat moved to bust
!!bodyVars['bust_other'] = other additions to bust-size, including breast creams
!!
!!salocatnow = the current category of pcs_mass['body']
!!salocatlast = the previous category of pcs_mass['body']
!!magf2bdo = flag for magic bust increase; 0, ready; 1, do it; 2, ask; 3, no
!!mgf2bnocnt = used to count the number of times a bust increase was turned down and stop asking after 3
!!magtarcup = set in the dream code as the target cup size
!!bodyVars['weight_warning'] = used to flag if to display the gaining/losing weight message when bathing
!!salolast = used when doing a soft rest to control the cycling of the main code
!!bodyresetflag = used to prevent a code chunk from firing on a soft or hard reset
!!Image set variables
!! bodset = body image and descriptor control variable, used to indicate which image and descriptor set is in use
!! $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
!! bdsetlock = flag to indicate set control override, 0 is use the formula to pick a set, 1 is use a fixed set
!! fixbodset = the identification number of the fixed image set
!! bodsetcnt = the number of sets present
!! imgset6ovr[x] and imgset7ovr[x] = a flag to indicate that an image set (x) has its own image 6 and/or 7
!! extended lash functionality; pcs_lashes = n are: {2, largest natural size}, {3, with temporary false lashes on or basic 2D lash extensions}, {4, with ornate false lashes on or lavish 4D extensions}, {5, with extremely ornate, 6D-style extensions} - xerya
!! Pregnancy weight gain:
!! Weight gain in the first 5 weeks (roughly pregChem < 800. -> Pregtime = pregchem / 24) is negligable
!! Afterwards we approximate the weight gain as mass = ((pregChem - 800)^2 * 33 / (7000 - 800)^2) approx (pregChem - 800)^2 / (1080)^2
if $ARGS[0] = 'RegularUpdate':
if dounspell = 0:
gs 'body', 'UpdateBodyMeasurement'
temp_weight = func('body', 'CalcWeight2')
pcs_weight[0] = temp_weight / 10
pcs_weight[1] = temp_weight mod 10
temp_bmi = func('body', 'CalcBMI2')
pcs_bmi[0] = temp_bmi / 10
pcs_bmi[1] = temp_bmi mod 10
killvar 'temp_weight'
killvar 'temp_bmi'
end
if pcs_skin > 1000:
pcs_skin = 1000
elseif pcs_skin < 0:
pcs_skin = 0
end
end
if $ARGS[0] = 'UpdateBodyMeasurement':
pcs_hips = (pcs_hgt * bodyVars['hratio']) / 100 + bodyVars['vhips']
pcs_waist = (pcs_hips * bodyVars['wratio']) / 100 + bodyVars['vofat']
pcs_band = (pcs_waist * bodyVars['bratio']) / 100 + bodyVars['vofat']
pcs_bust = (pcs_waist * bodyVars['bratio']) / 100 + pcs_mass['bust'] + bodyVars['bust_magic'] + bodyVars['bust_silicone'] + max(-10, min(bodyVars['bust_other'], 10)) + pcs_mass['preg'] / 5
pcs_butt = min(pcs_mass['butt'], 50) + bodyVars['butt_bonus'] + bodyVars['butt_silicone'] + bodyVars['butt_cheat'] + pcs_butt_tr + max(-10, min(bodyVars['butt_other'], 10))
!! pcs_cupsize = pcs_mass['bust'] + bodyVars['bust_magic'] + bodyVars['bust_silicone'] - bodyVars['vofat']
pcs_cupsize = pcs_bust - pcs_band
end
if $ARGS[0] = 'CalcWeight':
!{pcs_weight: Svetas weight in kg
Optimal Weight (170cm): 60kg, 60 pcs_mass['body']
This is an approximation, so that a sveta with a different height has the same BMI for the same pcs_mass['body'] values.
The default height of 170 cm is used as a starting point. The bmi deviates by 0.06 for a deviation of 10cm and 0.4 for a deviation of 20cm.}
result = (2820 + 33 * (pcs_mass['body'] + pcs_mass['bust'] + pcs_mass['butt'] + pcs_mass['preg']) + 70 * (pcs_hgt - 165)) / 100
!{Do not remove (julzor)
This is the old more complex function, but it doesn''t work correctly.
This variable is actually only used ONCE (except for the BMI calculation), when stripping, to see if you fall off the pole from being too heavy. I am reluctant to touch it, since the math is not explained. Maybe later.
Weight = (height in cm x bottom of average weight in kilos for a 170cm female / 170cm + (hip modifier + 2 x overrun fat)/4 + cup size}
!result = (pcs_hgt * 62 / 170) + (vhips + (bodyVars['vofat'] * 2)) / 4 + tits
end
if $ARGS[0] = 'CalcWeight2':
!! weight2 = 10 * weight
result = (2820 + 33 * (pcs_mass['body'] + pcs_mass['bust'] + pcs_mass['butt'] + pcs_mass['preg']) + 70 * (pcs_hgt - 165)) / 10
!result = (pcs_hgt * 62 / 17) + (10 * (vhips + (bodyVars['vofat'] * 2))) / 4 + 10 * tits
end
if $ARGS[0] = 'CalcBMI':
!! BMI = weight [kg] / (height [m])^2 = 100^2 * weight [kg] / (height [cm])^2
result = (1000 * (10 * pcs_weight[0] + pcs_weight[1])) / (pcs_hgt * pcs_hgt)
end
if $ARGS[0] = 'CalcBMI2':
!! BMI2 = 10 * BMI
result = (10000 * (10 * pcs_weight[0] + pcs_weight[1])) / (pcs_hgt * pcs_hgt)
end
if $ARGS[0] = 'CalcOptBodyMass':
if ARGS[1] = 0: ARGS[1] = 225
result = ((pcs_hgt * pcs_hgt * ARGS[1]) - 2820000 - 70000 * (pcs_hgt - 165)) / (550 * (60 + pcs_mass['bust_gen'] + pcs_mass['butt_gen']))
end
!!===================================================!!
!! !!
!! Daily Update !!
!! !!
!!===================================================!!
if $ARGS[0] = 'DailyUpdate':
!!Update once a day and called from cikl
if dounspell ! 1:
gs 'body', 'Update_Body'
else
if strenbuf > 90:
strenbuf -= 2
elseif strenbuf > 80:
strenbuf -= 1
end
if vitalbuf > 90:
vitalbuf -= 2
elseif vitalbuf > 80:
vitalbuf -= 1
end
gs 'body', 'Update_StatBuffs'
end
gs 'body', 'RegularUpdate'
gs 'body', 'Update_daily_body_other'
gs 'body', 'Update_Eyelashes'
gs 'body', 'Update_Hair'
gs 'body', 'Update_Pubes_and_leghair'
if mc_inventory['scrunchies'] > 0 and rand(1, 100) <= 8:
mc_inventory['scrunchies'] -= 1
end
if pcs_skin <= 300:
pcs_skin += min(skinDailyGain * 2, 20) - skinDailyPenalty - 1
elseif pcs_skin <= 600:
pcs_skin += min(skinDailyGain, 10) - skinDailyPenalty - 1
elseif pcs_skin <= 800:
pcs_skin += min(skinDailyGain / 2, 5) - skinDailyPenalty - 1
elseif pcs_skin <= 900:
pcs_skin += min(skinDailyGain / 3, 3) - skinDailyPenalty - 1
elseif pcs_skin <= 1000:
pcs_skin += min(skinDailyGain / 5, 2) - skinDailyPenalty - 1
end
gs 'body', 'Update_Teeth'
gs 'AppearanceSystem', 'UpdateBaseAppearance'
gs 'body', 'Update_Appearance'
!skin variable reset
killvar 'moisturizerDailyCount'
killvar 'skinDailyGain'
killvar 'skinDailyPenalty'
end
if $ARGS[0] = 'Update_Appearance':
gs 'AppearanceSystem'
gs 'body_desc'
gs 'body', 'UpdateBodyImage'
end
!!------------------------- UPDATE images -------------------------!!
if $ARGS[0] = 'UpdateBodyImage':
!Update body image set
if dounspell = 1:
salocatnow = (pcs_hips / 10) - 5
end
$bodyVars['desc'] = func('body_structure', 'body_desc')
$bodyVars['img'] = func('body_structure', 'body_img')
$bodyVars['bmi_desc'] = func('body_structure', 'bmi_desc')
end
!!------------------------- UPDATE eyelashes, hair, pubes, teeth -------------------------!!
if $ARGS[0] = 'Update_Eyelashes':
!!---- Calculation of lash extension degradation and false lash removal
if pcs_lashes > 2:
if lashextensionstyle >= 1:
lashextensionduration -= 1
if lashextensionduration >= 1 and lashextensionduration <= 4:
'It''s time for you to do your maintenance on your lash extensions; you should go to the salon or you risk growing them all out.'
end
if lashextensionduration <= 0:
'You waited too long to do maintenance on your lash extensions; there''s too little there to notice or work with at this point.'
pcs_lashes = pcs_naturallashes
killvar 'lashextensionstyle'
killvar 'lashextensionduration'
killvar 'lashextensionnew'
end
end
if false_lashes > 0:
false_lashes -= 1
if false_lashes = 0:
'Your false lashes came off in the night; there''s no recovering them now.'
pcs_lashes = pcs_naturallashes
else
'Somehow, your lashes managed to stay attached throughout the night. You might be able to get away with wearing them another day straight.'
end
end
end
end
if $ARGS[0] = 'Update_Hair':
!! Max. Hair length 600mm, or 60cm, which should be somewhere in the lower back area.
!! Hair grows 1mm each day, it takes 20 months (1 month = 30 days) to regrow the hair from 0.
if pcs_hairlng <= 1000 and hairgrowcht = 0: pcs_hairlng += 1
! Hair colour change
if pcs_haircol ! nathcol and dyefade > 0:
dyefade -= 1
end
!! daily reduction of braids
if hbraids > 0: hbraids -= 1
!! loss of updo if hair too long
if pcs_hairlng > 400 and hpingripw = 1:
hpingripw = 0
end
!! loss of pigtails if hair too long
if pcs_hairlng > 800 and hscrunchw = 2 = 1:
hpigtail = 0
hscrunchw = 0
end
end
if $ARGS[0] = 'Update_Pubes_and_leghair':
!!pubic hair colouring
!! pcs_pubecol[0] = natural colour
!! pcs_pubecol[1] = flag for saveupdate
!! pcs_pubecol[2] = actual colour
!! pcs_pubecol[3] = countdown timer for dye
if pcs_pubecol[2] ! pcs_pubecol[0]:
if pcs_pubecol[3] > 0: pcs_pubecol[3] -= 1
if pcs_pubecol[3] = 0: pcs_pubecol[2] = pcs_pubecol[0]
end
if pcs_pubes < 2: pcs_pubecol[2] = pcs_pubecol[0]
!! 33% change to shrink leghair if underage? Simulate slower growth?
if age < 18 and rand(0, 2) = 0 and pcs_leghair > 0:
pcs_leghair -= 1
end
! Leg and pubes hair growth
! disabled for testing hourly growth instead
!!{if lashair ! 1:
pcs_leghair += 1
!!Pubic hair growth at 1/2 per night
if pcs_pubes['growth'] > 1:
pcs_pubes['growth'] = 0
pcs_pubes += 1
end
pcs_pubes['growth'] += 1
gs 'body_desc', 'pube_desc_update'
end}
end
if $ARGS[0] = 'Update_Teeth':
if pcs_teeth < 0:
!! Daly degradation of perfect white teeth
tempteeth = 1
if teeth['caffe_or_tea'] > 8: tempteeth += 1
if teeth['smoked'] > 1: tempteeth += 1
tempteeth -= min(teeth['brushed'], 3)
teeth['degradation'] += max(0, tempteeth)
killvar 'tempteeth'
teeth['caffe_or_tea'] = 0
teeth['smoked'] = 0
teeth['brushed'] = 0
if teeth['degradation'] > 60:
!! After a certain time of not taking care of your teeth you will loose you perfect white smile.
teeth['degradation'] = 0
pcs_teeth = 0
elseif teeth['degradation'] < 0:
teeth['degradation'] = 0
end
end
end
!!===================================!!
!! !!
!! Update Body !!
!! !!
!!===================================!!
if $ARGS[0] = 'Update_Body':
gs 'body', 'Update_StatBuffs'
!!pcs_mass['body'] Handling; the first part is because during a reset fat is not used and should be cleared
if bodyresetflag = 1 or cheatNoFat = 1:
fat = 0
else
if pregChem >= 800 and (pregChem - 800)*(pregChem - 800) >= bodyVars['pchem_next']:
pcs_mass['preg'] += 1
bodyVars['pchem_next'] += 1166400 & !! 1080 * 1080
elseif pcs_mass['preg'] > 0 and (recovH <= bodyVars['recovH'] and (pregChem < 800 or bodyVars['pchem_next'] - 1166400 >= (pregChem - 800)*(pregChem - 800))):
pcs_mass['preg'] -= 1
if rand(0, 1) = 0: pcs_mass['body'] += 1
if pcs_mass['preg'] > 0:
bodyVars['pchem_next'] -= 1166400 & !! 1080 * 1080
bodyVars['recovH_next'] = bodyVars['recovH_next'] * (pcs_mass['preg'] - 1) / pcs_mass['preg']
end
elseif pcs_mass['preg'] <= 0:
pcs_mass['preg'] = 0
bodyVars['pchem_next'] = 0
bodyVars['recovH_next'] = 0
end
if pregChem >= 800:
if fat > (12 + vitalbuf / 25):
pcs_mass['body'] += 1
fat = 0
elseif fat < -(7 + vitalbuf / 10):
pcs_mass['body'] -= 1
fat = 0
else
if fat < 0:
fat = fat / 2
else
fat = fat / 6
end
end
else
if fat > (17 + vitalbuf / 25):
pcs_mass['body'] += 1
fat = 0
elseif fat < -(2 + vitalbuf / 10):
pcs_mass['body'] -= 1
fat = 0
else
fat = fat / 4
end
end
end
!!This is the pcs_mass['body'] cap for the weight approximation
if pcs_mass['body'] > 200: pcs_mass['body'] = 200
!! All the ratios were rounded to 2 digits and there are divide 100s at the final calc points
gs 'body', 'Find_waist_to_hip_ratio'
gs 'body', 'Find_band_to_waist_ratio'
gs 'body', 'Find_hip_to_height_ratio'
salocatnow = func('body', 'Calc_salocat')
gs 'body', 'Redistribute_Mass'
!!This is if a Succubus has pcs_mass['body'] < 1
if succubusflag = 1 and pcs_mass['body'] < 1:
sucexcess -= 1
pcs_mass['body'] += 3
end
!!This is if pcs_mass['body'] is still < 1
if pcs_mass['body'] < 1:
if fat >= 1:
pcs_mass['body'] = 1
fat -= 1
elseif fat <= 0 and pcs_stren + pcs_vital > 0:
stren_deg -= 1000
vital_deg -= 1000
pcs_mass['body'] = 1
else
if Enable_nogameover = 0:
over = 3
gt 'gameover'
exit
else
pl 'You starved to death, but Cheat Mode keeps you Alive.'
pcs_mass['body'] = 1
end
end
end
gs 'body', 'Update_vhips'
salocatnow = func('body', 'Calc_salocat')
!!This will trigger the warning notices in the bathing code (the +/- 12 should always be +/- 11 + the max change to pcs_mass['body'] w/ fat)
! if salolast > pcs_mass['body'] + pcs_mass['butt'] and pcs_mass['body'] + pcs_mass['butt'] <= (20 * (salocatnow - 1)) + 12:
! bodyVars['weight_warning'] = 1
! elseif salolast < pcs_mass['body'] + pcs_mass['butt'] and pcs_mass['body'] + pcs_mass['butt'] >= (20 * (salocatnow + 1)) - 12:
! bodyVars['weight_warning'] = 2
! end
if pcs_mass['body'] < pcs_mass['body_message'] - 5:
bodyVars['weight_warning'] = 1
pcs_mass['body_message'] = pcs_mass['body']
elseif pcs_mass['body'] > pcs_mass['body_message'] + 5:
bodyVars['weight_warning'] = 2
pcs_mass['body_message'] = pcs_mass['body']
end
!!This will trigger the dream for the option to use magic to increase bust
!!Three nos at the dream will lock it out (1 yes resets the count)
if pcs_magik >= 5 and MagikDostup = 0 and magf2bdo = 0:
if tits < 10 and salolast < pcs_mass['body'] + pcs_mass['butt'] and pcs_mass['body'] + pcs_mass['butt'] >= (20 * (salocatnow + 1)) - 11:
if mgf2bnocnt < 3:
magf2bdo = 2
else
magf2bdo = 3 & killvar 'mgf2bnocnt'
end
end
end
!!This is to deal with the possibility that salocatnow changed by more than 1 (fat burners, vitamins, plastic surgery, etc.)
if salocatnow < salocatlast: salocatlast -= 1
if salocatnow > salocatlast: salocatlast += 1
!!This is for use in the warning code and as part of the reset routines
if salolast > pcs_mass['body'] + pcs_mass['butt']: salolast -= 1
if salolast < pcs_mass['body'] + pcs_mass['butt']: salolast += 1
!!Setting the pcs_apprnc bonus based on fat and strength
temp_bmi = func('body', 'CalcBMI2')
pcs_bmi[0] = temp_bmi / 10
pcs_bmi[1] = temp_bmi mod 10
killvar 'temp_bmi'
!!This is to clean up unused variables
killvar 'normbuffpick'
killvar 'nrmbfpckct'
killvar 'vmeat'
killvar 'vfat'
killvar 'Kves'
killvar 'krost'
killvar 'koefvesbt'
killvar 'koefbt'
end
!!------------------------- BUFFS -------------------------!!
if $ARGS[0] = 'Update_StatBuffs':
!! This controls the gradual change in stat to -buf
if strenbuf > pcs_stren:
strenbuf -= 1
elseif strenbuf < pcs_stren:
strenbuf += 1
end
if vitalbuf > pcs_vital:
vitalbuf -= 1
elseif vitalbuf < pcs_vital:
vitalbuf += 1
end
if agilbuf > pcs_agil:
agilbuf -= 1
elseif agilbuf < pcs_agil:
agilbuf += 1
end
end
if $ARGS[0] = 'Update_daily_body_other':
if bodyVars['bust_other'] ! 0:
if daystart mod 10 = 0:
if bodyVars['bust_other'] > 0:
bodyVars['bust_other'] -= 1
else
bodyVars['bust_other'] += 1
end
end
end
if bodyVars['butt_other'] ! 0:
if daystart mod 15 = 0:
if bodyVars['butt_other'] > 0:
bodyVars['butt_other'] -= 1
else
bodyVars['butt_other'] += 1
end
end
end
gs 'drugs', 'breastcream', 'cikl'
gs 'drugs', 'steroids', 'cikl'
end
!!------------------------- RATIOS -------------------------!!
!! All the ratios were rounded to 2 digits and there are divide 100s at the final calc points
! Lies between 65 and 96
if $ARGS[0] = 'Find_waist_to_hip_ratio':
temp_wratio = (2 * vitalbuf + strenbuf + agilbuf) / 4
!! Primary bodyVars['wratio'] handling
if temp_wratio < 11:
bodyVars['wratio'] = 85 + (11 - (vitalbuf + strenbuf + agilbuf) / 3)
elseif temp_wratio < 20:
bodyVars['wratio'] = 85
elseif temp_wratio < 35:
bodyVars['wratio'] = 85 - (temp_wratio - 20) / 3
elseif temp_wratio < 55:
bodyVars['wratio'] = 80 - (temp_wratio - 35) / 4
elseif temp_wratio < 80:
bodyVars['wratio'] = 75 - (temp_wratio - 55) / 5
elseif temp_wratio >= 80:
bodyVars['wratio'] = 70
end
!! High stat value edge case handling
if (vitalbuf + strenbuf + agilbuf) / 3 > 100:
bodyVars['wratio'] += (2 * agilbuf - vitalbuf - strenbuf) / 10
end
!! This is the oops and high stat gone overboard handling
if bodyVars['wratio'] < 65: bodyVars['wratio'] = 65
killvar 'temp_wratio'
! Lies between 105 and 125
elseif $ARGS[0] = 'Find_band_to_waist_ratio':
temp_bratio = (2 * strenbuf + vitalbuf + agilbuf) / 4
if temp_bratio < 10:
bodyVars['bratio'] = 105
elseif temp_bratio <= 23:
bodyVars['bratio'] = 106
elseif temp_bratio <= 80:
bodyVars['bratio'] = 106 + (temp_bratio - 23) / 3
else
bratio = 125
end
killvar 'temp_bratio'
! Lies between 56 and 60
elseif $ARGS[0] = 'Find_hip_to_height_ratio':
temp_hratio = (2 * agilbuf + vitalbuf + strenbuf) / 4
if temp_hratio < 35:
bodyVars['hratio'] = 60
elseif temp_hratio < 45:
bodyVars['hratio'] = 59
elseif temp_hratio < 60:
bodyVars['hratio'] = 58
elseif temp_hratio < 80:
bodyVars['hratio'] = 57
else
bodyVars['hratio'] = 56
end
killvar 'temp_hratio'
end
if $ARGS[0] = 'Calc_salocat':
!!This calculates the current pcs_mass['body'] category; ranges are 20 points, seemed to balance best if the range is x10 the hip devisor
if pcs_mass['body'] + pcs_mass['butt'] < 10:
result = 0
else
result = (pcs_mass['body'] + pcs_mass['butt'] + 10) / 20
end
end
if $ARGS[0] = 'Redistribute_Mass':
!!This resets the genetic bust size (pcs_mass['bust_gen']) when the cheat is used to reduce breast size (maybe other things later)
if titreduc = 1:
killvar 'titreduc'
if pcs_mass['bust_gen'] > pcs_mass['bust']:
pcs_mass['bust_gen'] = pcs_mass['bust'] + 2 - pcs_mass['bust'] mod 5
end
end
if assreduc = 1:
killvar 'assreduc'
if pcs_mass['butt_gen'] > pcs_mass['butt']:
pcs_mass['butt_gen'] = pcs_mass['butt'] + 2 - pcs_mass['butt'] mod 5
end
end
if salobustdo = 0 and bodyVars['cheat_staticAssets'] = 0:
!!This controls the movement of pcs_mass['body'] to/from bust in order of precedence
!!=============== MAGIC ===============!!
if magikDostup = 0 and magf2bdo = 1 and daystart > pcs_mass['magic_day'] and pcs_mana >= manamax / 2:
bodyVars['bust_magic'] += 1
if pcs_mass['body'] >= 80: pcs_mass['body'] -= 3
pcs_mass['magic_day'] = daystart + rand(7, 14)
if bodyVars['bust_magic'] >= 2 + magtarcup * 5: magf2bdo = 0
pcs_mana -= max(100, 2000 / pcs_magik)
!! Old content
!{
elseif salocatnow < salocatlast:
if magikDostup = 0 and bodyVars['bust_magic'] > 0 and salocatnow < 2:
bodyVars['bust_magic'] -= 1
pcs_mass['body'] += 3
magf2bdo = 1
end
}
end
!!=============== Low Weight ===============!!
if pcs_mass['body'] < 10:
temp_diff = min(pcs_mass['bust'], 3)
pcs_mass['bust'] -= temp_diff
pcs_mass['body'] += temp_diff
temp_diff = min(pcs_mass['butt'], 3)
pcs_mass['butt'] -= temp_diff
pcs_mass['body'] += temp_diff
else
temp_total_mass = pcs_mass['body'] + pcs_mass['bust'] + pcs_mass['butt']
temp_tot_gen_mass = 60 + pcs_mass['bust_gen'] + pcs_mass['butt_gen']
!!=============== Bust ===============!!
temp_mass_bust = (pcs_mass['bust_gen'] * temp_total_mass) / temp_tot_gen_mass
!!----------- Small -----------!!
if temp_total_mass >= temp_tot_gen_mass - 10 and pcs_mass['bust'] < pcs_mass['bust_gen']:
temp_diff = min(pcs_mass['bust_gen'] - pcs_mass['bust'], 2)
pcs_mass['bust'] += temp_diff
pcs_mass['body'] -= temp_diff
elseif temp_total_mass >= temp_tot_gen_mass - 10 and temp_total_mass <= temp_tot_gen_mass and pcs_mass['bust'] = pcs_mass['bust_gen']:
!Keep bust at genetic level if pcs_mass['body'] >= 50 and pcs_mass['body'] <= 60
!!----------- Growth -----------!!
elseif temp_mass_bust > pcs_mass['bust']:
pcs_mass['bust'] += 1
pcs_mass['body'] -= 1
!!----------- Shrink -----------!!
elseif temp_mass_bust < pcs_mass['bust'] and pcs_mass['bust'] > 0:
pcs_mass['bust'] -= 1
pcs_mass['body'] += 1
end
!!=============== Ass ===============!!
temp_mass_ass = (pcs_mass['butt_gen'] * temp_total_mass) / temp_tot_gen_mass
!!----------- Small -----------!!
if temp_total_mass >= temp_tot_gen_mass - 10 and pcs_mass['butt'] < pcs_mass['butt_gen']:
temp_diff = min(pcs_mass['butt_gen'] - pcs_mass['butt'], 2)
pcs_mass['butt'] += temp_diff
pcs_mass['body'] -= temp_diff
elseif temp_total_mass >= temp_tot_gen_mass - 10 and temp_total_mass <= temp_tot_gen_mass and pcs_mass['butt'] = pcs_mass['butt_gen']:
!Keep butt at genetic level if pcs_mass['body'] >= 50 and pcs_mass['body'] <= 60
!!----------- Rest -----------!!
elseif temp_mass_ass > pcs_mass['butt']:
pcs_mass['butt'] += 1
pcs_mass['body'] -= 1
elseif temp_mass_ass < pcs_mass['butt'] and pcs_mass['butt'] > 0:
pcs_mass['butt'] -= 1
pcs_mass['body'] += 1
end
killvar 'temp_total_mass'
killvar 'temp_tot_gen_mass'
killvar 'temp_mass_bust'
killvar 'temp_mass_ass'
killvar 'temp_diff'
end
if bodyresetflag ! 0:
pcs_mass['bust_message'] = pcs_mass['bust']
pcs_mass['butt_message'] = pcs_mass['butt']
else
if pcs_mass['bust'] > pcs_mass['bust_message'] + 3:
pcs_mass['bust_message'] = pcs_mass['bust']
if pcs_mass['butt'] > pcs_mass['butt_message'] + 3:
pcs_mass['butt_message'] = pcs_mass['butt']
'Your breasts and ass seem fuller'
elseif pcs_mass['butt'] < pcs_mass['butt_message'] - 3:
pcs_mass['butt_message'] = pcs_mass['butt']
'Your breasts seem fuller and ass seems to be getting smaller'
else
'Your breasts seem fuller'
end
elseif pcs_mass['bust'] < pcs_mass['bust_message'] - 3:
pcs_mass['bust_message'] = pcs_mass['bust']
if pcs_mass['butt'] > pcs_mass['butt_message'] + 3:
pcs_mass['butt_message'] = pcs_mass['butt']
'Your breasts seem to be getting smaller and your ass seems fuller'
elseif pcs_mass['butt'] < pcs_mass['butt_message'] - 3:
pcs_mass['butt_message'] = pcs_mass['butt']
'Your breasts and ass seem to be getting smaller'
else
'Your breasts seem to be getting smaller'
end
else
if pcs_mass['butt'] > pcs_mass['butt_message'] + 3:
pcs_mass['butt_message'] = pcs_mass['butt']
'Your ass seems fuller'
elseif pcs_mass['butt'] < pcs_mass['butt_message'] - 3:
pcs_mass['butt_message'] = pcs_mass['butt']
'Your ass seem to be getting smaller'
end
end
end
end
gs 'body', 'Update_vhips'
killvar 'salobustdo'
killvar 'temp_massbustchange'
killvar 'temp_massasschange'
end
if $ARGS[0] = 'Reset_mass_distribution':
total_mass = pcs_mass['body'] + pcs_mass['bust'] + pcs_mass['butt']
total_gen_mass = 60 + pcs_mass['bust_gen'] + pcs_mass['butt_gen']
if total_mass >= total_gen_mass - 10 and total_mass <= total_gen_mass:
pcs_mass['bust'] = pcs_mass['bust_gen']
pcs_mass['butt'] = pcs_mass['butt_gen']
else
pcs_mass['bust'] = (pcs_mass['bust_gen'] * total_mass) / total_gen_mass
pcs_mass['butt'] = (pcs_mass['butt_gen'] * total_mass) / total_gen_mass
end
pcs_mass['body'] = total_mass - pcs_mass['bust'] - pcs_mass['butt']
pcs_mass['bust_message'] = pcs_mass['bust']
pcs_mass['butt_message'] = pcs_mass['butt']
pcs_mass['body_message'] = pcs_mass['body']
killvar 'total_mass'
killvar 'total_gen_mass'
gs 'body', 'Update_vhips'
end
if $ARGS[0] = 'Reset_preg_mass':
bodyVars['pchem_next'] = 0
pcs_mass['preg'] = 0
:set_preg_body_loop
if pregChem >= 800 and (pregChem - 800) * (pregChem - 800) >= bodyVars['pchem_next']:
bodyVars['pchem_next'] += 1166400 & 1080 * 1080
pcs_mass['preg'] += 1
jump 'set_preg_body_loop'
end
end
if $ARGS[0] = 'Set_mass_distribution_using_body':
pcs_mass['body'] = ARGS[1]
if ARGS[1] >= 50 and ARGS[1] <= 60:
pcs_mass['bust'] = pcs_mass['bust_gen']
pcs_mass['butt'] = pcs_mass['butt_gen']
else
pcs_mass['bust'] = (pcs_mass['bust_gen'] * ARGS[1]) / 60
pcs_mass['butt'] = (pcs_mass['butt_gen'] * ARGS[1]) / 60
end
bodyVars['vhips'] = (pcs_mass['body'] + pcs_mass['butt'] - 80) / 2
pcs_mass['bust_message'] = pcs_mass['bust']
pcs_mass['butt_message'] = pcs_mass['butt']
pcs_mass['body_message'] = pcs_mass['body']
end
!!------------------------- UPDATE vhips -------------------------!!
if $ARGS[0] = 'Update_vhips':
vhtmp = (pcs_mass['body'] + pcs_mass['butt'] - 80) / 2
! Because a reset should be updating hip size instantly (this set is a bit redundant anyway)
if bodyresetflag = 1:
bodyVars['vhips'] = vhtmp
else
if vhtmp < bodyVars['vhips']:
bodyVars['vhips'] -= 1
elseif vhtmp > bodyVars['vhips']:
bodyVars['vhips'] += 1
end
end
killvar 'vhtmp'
!! Varies between 0 and 25 to 30 ish range
!bodyVars['butt_bonus'] = max(0, pcs_mass['butt'] - max(0, bodyVars['vhips']))
bodyVars['butt_bonus'] = (pcs_mass['butt'] - 20) / 3
!! temp_vhips2 = vhips + (pcs_hgt * bodyVars['hratio'])/100 - (pcs_hgt * 72)/100
!! temp_vhips2 = pcs_hips - (pcs_hgt * 72) / 1000
temp_vhips2 = vhips - (pcs_hgt * (72 - bodyVars['hratio'])) / 100
bodyVars['vofat'] = max(0, temp_vhips2 / 2)
bodyVars['vhips'] -= 2 * bodyVars['vofat']
!! vhips = vhips - max(0, temp_vhips2)
!! vhips = vhips || vhips = (pcs_hgt * (72 - bodyVars['hratio'])) / 100
killvar 'temp_vhips2'
end
!!==================================!!
!! !!
!! Skin Gain & Loss !!
!! !!
!!==================================!!
if $ARGS[0] = 'SkinGain':
if $ARGS[1] = 'CleanSelf' and lastShowerSkinGain ! daystart:
lastShowerSkinGain = daystart
skinDailyGain += 5
!!needs to be changet to +3 when the bathLuffa in added.
!!if bathLuffa = 1: skinDailyGain += 2
elseif $ARGS[1] = 'Moisturizer':
moisturizerDailyCount += 1
if moisturizerDailyCount <= 2: skinDailyGain += 2
end
end
if $ARGS[0] = 'SkinLoss':
if $ARGS[1] = 'Smoke' and lastSmokeSkinPenalty ! daystart:
lastSmokeSkinPenalty = daystart
skinDailyPenalty += 1
elseif $ARGS[1] = 'MakeUpSleep':
skinDailyPenalty += 10
end
end
!!==================================!!
!! !!
!! RESETS !!
!! !!
!!==================================!!
if $ARGS[0] = 'softreset':
!!This is for use in immediately updating shape if something has caused a large change in pcs_mass['body'], primarily fat burners and plastic surgery
bodyresetflag = 1
:resetloop
if pcs_mass['body'] + pcs_mass['butt'] ! salolast:
if gamestartflag = 1:
salobustdo = 1
end
gs 'body', 'Update_Body'
jump 'resetloop'
end
!!Updates pcs_apprncbase after a reset
gs 'body', 'UpdateBodyMeasurement'
gs 'body', 'Update_Appearance'
!!Clears the warning and reset status flags if they were set
bodyresetflag = 0
bodyVars['weight_warning'] = 0
end
if $ARGS[0] = 'hardreset':
!!This is primarily for canceling out "dounspell" and setting pcs_mass['body'] to whatever value will result in the current hip size then balancing everything out.
!!Also could be built in as a means to in-game undo "dounspell", other than the cheat.
if dounspell ! 1 or dounsplkil = 0:
'If you''re seeing this, something odd happened. Please make a bug report that the body shape hard reset improperly triggered and what you were doing.'
else
pcs_mass['body'] = 12
fat = 0
agilbuf = pcs_agil
strenbuf = pcs_stren
vitalbuf = pcs_vital
salobustdo = 1
bodyresetflag = 1
normbuffpick = -1
gs 'body', 'Update_Body'
pcs_mass['body'] = 60 + (2 * pcs_hips) - (pcs_hgt * bodyVars['hratio']) / 50
if pcs_mass['body'] + pcs_mass['butt'] < 10:
salocatnow = 0
else
salocatnow = 1 + (pcs_mass['body'] + pcs_mass['butt'] - 10) / 20
end
salocatlast = salocatnow
salolast = pcs_mass['body'] + pcs_mass['butt']
if pcs_mass['butt_gen'] = 0:
pcs_mass['butt_gen'] = 20
end
bodyVars['vhips'] = (pcs_mass['body'] + pcs_mass['butt'] - 80) / 2
if pcs_mass['bust_gen'] = 0:
if pcs_mass['bust'] >= 27:
pcs_mass['bust_gen'] = 27
elseif pcs_mass['bust'] > 0:
pcs_mass['bust_gen'] = 2 + pcs_mass['bust'] - pcs_mass['bust'] mod 5
elseif bodyVars['bust_silicone'] >= 20:
pcs_mass['bust_gen'] = 12
pcs_mass['bust'] = 12
bodyVars['bust_silicone'] -= 10
end
end
pcs_mass['body_message'] = pcs_mass['body']
pcs_mass['bust_message'] = pcs_mass['bust']
pcs_mass['butt_message'] = pcs_mass['butt']
gs 'body', 'reset_preg_mass'
bodyresetflag = 0
normbuffpick = 0
bodyVars['weight_warning'] = 0
magf2bdo = 0
killvar 'dounsplkil'
newbdsp = 1
dounspell = 0
gs 'body', 'Update_Appearance'
gs 'body', 'Update_Body'
gs 'stat'
end
end
!!==================================!!
!! !!
!! INITIAL !!
!! !!
!!==================================!!
if $ARGS[0] = 'initial':
!! Sets the genetic bust size if it was not set in the start routines
if pcs_mass['bust_gen'] = 0: pcs_mass['bust_gen'] = 12
if pcs_mass['butt_gen'] = 0: pcs_mass['butt_gen'] = 20
if pcs_mass['body'] >= 50 and pcs_mass['body'] <= 60:
pcs_mass['bust'] = pcs_mass['bust_gen']
pcs_mass['butt'] = pcs_mass['butt_gen']
else
gs 'body', 'Set_mass_distribution_using_body', pcs_mass['body']
end
strenbuf = pcs_stren
agilbuf = pcs_agil
vitalbuf = pcs_vital
normbuffpick = -1
gamestartflag = 1
!! Calling soft reset will cause the main code to cycle up to the starting value of pcs_mass['body']
gs 'body', 'softreset'
!! This sets/resets the controler variables
salocatnow = func('body', 'Calc_salocat')
salocatlast = salocatlast
normbuffpick = 0
magf2bdo = 0
killvar 'gamestartflag'
newbdsp = 1
!! This does all the body shape setting before the first stat call
temp_bmi = func('body', 'CalcBMI2')
pcs_bmi[0] = temp_bmi / 10
pcs_bmi[1] = temp_bmi mod 10
killvar 'temp_bmi'
gs 'body', 'UpdateBodyImage'
gs 'body', 'Update_Appearance'
end
--- body ---------------------------------