1
0
فهرست منبع

Merge branch 'working'

ADCSux 2 سال پیش
والد
کامیت
1af039a071

+ 6 - 1
changes from 0_8_5 to 0_8_6.txt

@@ -24,6 +24,8 @@ pav_beach_chat
 katja_lake			<- split from katjaEv
 
 body_desc
+AppearanceSystem               <- body
+body                           <- body_shape
 
 === deleted locations ===
 
@@ -39,7 +41,8 @@ rex_party_boys_events
 rex_party_girls_events
 rex_party_sister_events
 $phone_theme
-
+body                                 -> AppearanceSystem
+body_shape                           -> body
 
 
 Variables:
@@ -56,6 +59,7 @@ $lips1
 
 $pcdes_<bodypart>random
 $pcdes_<bodypart>
+bmi_calc                                  -> pcs_bmi
 
 === Added variables ===
 
@@ -64,3 +68,4 @@ $pcdes_<bodypart>
 [String variables]
 $pc_desc[] <- Hold descriptive words for PC's body parts
 $pc_descWordy[] <- Hold more descriptive words for PC's body parts
+pcs_bmi <- New variable for bmi

+ 1 - 1
glife.qproj

@@ -65,8 +65,8 @@
 		<Location name="grades"/>
 	</Folder>
 	<Folder name="Body">
+		<Location name="ApperanceSystem"/>
 		<Location name="body"/>
-		<Location name="body_shape"/>
 		<Location name="body_desc"/>
 		<Location name="lact_lib"/>
 		<Location name="lact_bp"/>

+ 378 - 0
locations/ApperanceSystem.qsrc

@@ -0,0 +1,378 @@
+# AppearanceSystem
+$this = 'AppearanceSystem'
+
+if $ARGS[0] = '':
+	!{
+        PC's appearance is updated regularly in stat.qsrc.
+        Note: A huge part of PC's appearance is from base appearance, which is updated once a day. Because it's
+        a global variable, it does not show in this function in particular, but it's used in 'CalcAppearance'
+    }
+	if pcs_makeup = 6 and bimbolevel >= 2: extra_supnatvnesh = 2*bimbolevel - 2
+
+	!STD check. STD will make appearance automatically -10
+	if Gerpes >= 3 or Sifilis >= 21 or Triper > 2:
+		pcs_apprnc = -10
+	else:
+		clothingBonus = func($this, 'CalcClothingBonus')
+		accessoriesBonus = func($this, 'CalcAccessoriesBonus', bonusZ, PShoQuality)
+		groomingBonus = func($this, 'CalcGroomingBonus')
+		groomingPenalty = func($this, 'CalcGroomingPenalty')
+		pcs_apprnc = func($this, 'CalcAppearance', (supnatvnesh + extra_supnatvnesh))
+		Hotcat = func($this, 'ConvertToHotcat')
+	end
+
+	killvar 'clothingBonus'
+	killvar 'accessoriesBonus'
+	killvar 'groomingBonus'
+	killvar 'groomingPenalty'
+end
+
+if $args[0] = 'UpdateBaseAppearnce':
+	!{
+		Base Appearance is updated once a day at midnight and called from cikl
+		Base Appearance is calculated from:
+			vidage, skin, body shape (fat and strength), face (lip size, eyes size, and eyelashes)
+			attributes (endurance and agility)
+	}
+	faceBonus = func($this, 'CalcFaceBonus')
+	attributeBonus = func($this, 'CalcAttributeBonus')
+
+	!!	Setting vidageBonus
+	if vidage < 20: 
+		vidageBonus = 60 + (2 * vidage)
+	elseif vidage > 30: 
+		vidageBonus = 160 - (2 * vidage)
+	else
+		vinageBonus = 100
+	end
+
+	skinBonus = (pcs_skin * 2 / 5)
+	bodyShapeBonus = func($this, 'SetBodyShapeBonus')
+
+	! Calculte base appearance
+	pcs_apprncbase = (vidageBonus * (skinBonus + bodyShapeBonus + faceBonus + attributeBonus) / 100) + supnatvnesh
+
+	killvar 'vidageBonus'
+	killvar 'skinBonus'
+	killvar 'bodyShapeBonus'
+	killvar 'faceBonus'
+	killvar 'attributeBonus'
+end 
+
+if $ARGS[0] = 'CalcFaceBonus':
+	!!	Setting Eyelashes bonus
+	if pcs_lashes <= 0:
+		eyelashesBonus = 0
+	elseif pcs_lashes = 1:
+		eyelashesBonus = 2
+	elseif pcs_lashes = 2:
+		eyelashesBonus = 5
+	elseif pcs_lashes = 3:
+		eyelashesBonus = 7
+	elseif pcs_lashes = 4:
+		eyelashesBonus = 8
+	elseif pcs_lashes = 5:
+		eyelashesBonus = 10
+	else
+		eyelashesBonus = 0		
+	end
+	eyelashesBonus = FUNC($this, 'AdjustFromBMI', eyelashesBonus)
+
+	!!	Setting Eye Size bonus
+	if pcs_eyesize = 1:
+		eyeSizeBonus = 1
+	elseif pcs_eyesize = 2:
+		eyeSizeBonus = 3
+	elseif pcs_eyesize = 3:
+		eyeSizeBonus = 2
+	else
+		eyeSizeBonus = 0
+	end
+	eyeSizeBonus = FUNC($this, 'AdjustFromBMI', eyeSizeBonus)
+
+	!!	Setting the Lip size bonus
+	if pcs_lip = 0:
+		lipBonus = -2
+	elseif pcs_lip = 1:
+		lipBonus = 0
+	elseif pcs_lip = 2:
+		lipBonus = 3
+	elseif pcs_lip = 3:
+		lipBonus = 5
+	else
+		lipBonus = 3
+	end
+	lipBonus = FUNC($this, 'AdjustFromBMI', lipBonus)
+
+	result = eyelashesBonus + eyeSizeBonus + lipBonus
+
+	killvar 'eyelashesBonus'
+	killvar 'eyeSizeBonus'
+	killvar 'lipBonus'
+end
+
+if $ARGS[0] = 'CalcAttributeBonus':
+	tempAttributeBonus = (pcs_agil / 10) + (pcs_vital / 10)
+
+	result = func($this, 'AdjustFromBMI', tempAttributeBonus)
+	killvar 'tempAttributeBonus'
+end
+
+if $ARGS[0] = 'SetBodyShapeBonus':
+	! Magic uses a different calculation
+	if dounspell = 1:
+		bodytipe = pcs_hips - pcs_waist
+		if bodytipe < 20:
+			result = 0
+		elseif bodytipe >= 20 and bodytipe < 25:
+			result = 2
+		elseif (bodytipe >= 25 and bodytipe < 30) or bodytipe >=35:
+			result = 4
+		elseif bodytipe >= 30 and bodytipe < 35:
+			result = 8
+		end
+
+	!!Setting the pcs_apprnc bonus based on fat and strength
+	else
+		if pcs_bmi < 16:
+			!! severely underweight
+			tempBodyShapeBonus = 30
+		elseif pcs_bmi < 19:
+			!! underweight
+			tempBodyShapeBonus = 65
+		elseif pcs_bmi < 25:
+			!! healthy weight
+			tempBodyShapeBonus = 85
+		elseif pcs_bmi < 30:
+			!! overweight
+			tempBodyShapeBonus = 75
+		elseif pcs_bmi < 35:
+			!! moderately obese
+			tempBodyShapeBonus = 45
+		elseif pcs_bmi < 40:
+			!! severely obese
+			tempBodyShapeBonus = 25
+		elseif pcs_bmi < 45:
+			!! very severely obese
+			tempBodyShapeBonus = 5
+		else
+			!! morbidly obese
+			tempBodyShapeBonus = 0
+		end
+
+		if (strenbuf >= 40 and strenbuf < 60) or strenbuf >= 80:
+			tempBodyShapeBonus += 8
+		elseif strenbuf >= 60:
+			tempBodyShapeBonus += 10
+		elseif strenbuf >= 20:
+			tempBodyShapeBonus += 5
+		end
+
+		!!This modifies bodykoef for high or low salo values
+		if salocatnow = 0 or salocatnow >= 7:
+			tempBodyShapeBonus -= 8
+		elseif salocatnow = 1 or salocatnow = 6:
+			tempBodyShapeBonus -= 4
+		end
+
+		if vofat > 0: tempBodyShapeBonus -= vofat
+
+		result = tempBodyShapeBonus
+
+		killvar 'tempBodyShapeBonus'
+	end
+end
+
+if $ARGS[0] = 'CalcClothingBonus':
+	if $clothingworntype = 'nude':
+		if pcs_bmi >= 19 and pcs_bmi < 30:
+			! Healthy and overweight
+			tempRevealing = 405
+			PCloQuality = 3
+		else
+			tempRevealing = 0
+			PCloQuality = 1
+		end
+	else
+		if pcs_bmi < 19:
+			!Skinny and severely skinny
+			tempRevealing = ((400 - PXCloThinness) + (500 - PXCloTopCut) + (400 - PXCloBottomShortness))/2
+		elseif pcs_bmi >= 19 and pcs_bmi < 30:
+			!Healthy and overweight
+			tempRevealing = (PXCloThinness + PXCloTopCut + PXCloBottomShortness)/2
+		elseif pcs_bmi >= 30:
+			!Moderately overweight and above
+			tempRevealing = ((400 - PXCloThinness) + (500 - PXCloTopCut) + (400 - PXCloBottomShortness)) * 3/4
+		end
+	end
+
+	result = tempRevealing/ 76 * PCloQuality
+	killvar 'tempRevealing'
+
+end
+
+if $ARGS[0] = 'CalcAccessoriesBonus':
+	coatQualityBonus = ARGS[1] & !! bonusZ
+	shoesQualityBonus = ARGS[2] & !! PShoQuality
+	
+	!!bonuses for certain underwear
+	if $pantyworntype = 'boutique':
+		pantyBonus = 4
+	elseif $pantyworntype = 'fashionista':
+		pantyBonus = 2
+	end
+
+	if $braworntype = 'boutique':
+		braBonus = 4
+	elseif $braworntype = 'fashionista':
+		braBonus = 2
+	end
+
+	result = coatQualityBonus + shoesQualityBonus + pantyBonus + braBonus
+
+	killvar 'coatQualityBonus'
+	killvar 'shoesQualityBonus'
+	killvar 'pantyBonus'
+	killvar 'braBonus'
+end
+
+if $ARGS[0] = 'CalcGroomingBonus':
+	if pcs_lipbalm > 0:
+		lipBalmBonus = 5
+	else
+		lipBalmBonus = 0
+	end
+
+	makeupBonus = pcs_makupskl / 5
+	if pcs_makeup = 0: makeupBonus = -5
+	if pcs_makeup = 1: makeupBonus = 0
+	if pcs_makeup = 5: makeupBonus = 30
+
+	hairBonus = pcs_hairbsh * 10
+
+	breathBonus = pcs_breath * 5
+
+	tempGroomingBonus = makeupBonus + hairBonus + lipBalmBonus + breathBonus
+
+	!!Small bonus for wearing deodorant, if pcs_sweat is low enough
+	if deodorant_on = 1 and pcs_sweat < 20: tempGroomingBonus += 5
+
+	!result = tempGroomingBonus
+	result = func($this, 'AdjustFromBMI', tempGroomingBonus)
+
+	killvar 'lipBalmBonus'
+	killvar 'makeupBonus'
+	killvar 'hairBonus'
+	killvar 'breathBonus'
+	killvar 'tempGroomingBonus'
+end
+
+if $ARGS[0] = 'CalcGroomingPenalty':
+	!! buzzcut penalty to pcs_apprnc
+	if pcs_hairlng < 10:
+		buzzCutPenalty = 10
+	else
+		buzzCutPenalty = 0
+	end
+
+	if pcs_sweat < 22:
+		sweatPenalty = 0
+	elseif temppcs_sweat < 38:
+		sweatPenalty = (pcs_sweat - 10) / 4
+	elseif temppcs_sweat < 54:
+		sweatPenalty = (pcs_sweat - 10) / 2
+	else
+		sweatPenalty = 3 * (pcs_sweat - 10) / 4
+	end
+
+	!Glasses Penalty
+	if glass >= 2 or glass = 0:
+		glassesPenalty = 0
+	elseif glass = 1:
+		glassesPenalty = 10
+	end
+
+	!hair color fade penalty
+	if pcs_haircol ! nathcol:
+		if dyefade > 0 and dyefade < 7: hairDyePenalty = 5
+		if dyefade = 0: hairDyePenalty = 15
+	end
+
+	! Leg hair penalty
+	if pcs_leghair <= 0:
+		legPenalty = 0
+	elseif pcs_leghair <= 3:
+		legPenalty = 3
+	elseif pcs_leghair <= 6:
+		legPenalty = 6
+	else
+		legPenalty = 9 
+	end
+
+	result = sweatPenalty + glassesPenalty + hairDyePenalty + buzzCutPenalty + legPenalty
+
+
+	killvar 'sweatPenalty'
+	killvar 'glassesPenalty'
+	killvar 'hairDyePenalty'
+	killvar 'buzzCutPenalty'
+	killvar 'legPenalty'
+end
+
+
+if $ARGS[0] = 'CalcAppearance':
+	superNaturalBonus = ARGS[1] & !! supnatvnesh
+
+	temp_apprnc = pcs_apprncbase + clothingBonus + accessoriesBonus + groomingBonus - groomingPenalty
+
+	if temp_apprnc >= 200: temp_apprnc = 200 
+	if temp_apprnc < 0: temp_apprnc = 0
+
+	!Any super natural bonuses are allowed to go above the max scale
+	result = temp_apprnc + superNaturalBonus
+	
+	killvar 'superNaturalBonus'
+	killvar 'temp_apprnc'
+end
+
+if $ARGS[0] = 'ConvertToHotcat':
+	if pcs_apprnc <= 200:
+		result = pcs_apprnc / 20
+	else
+		result = 10
+	end
+end
+
+if $ARGS[0] = 'AdjustFromBMI':
+	tempValue = ARGS[1] & !!value to be adjusted
+
+	if pcs_bmi < 16:
+		!! severely underweight
+		tempValue = tempValue * 50 / 100
+    elseif pcs_bmi < 19:
+		!! underweight
+		tempValue = tempValue * 95 / 100
+    elseif pcs_bmi < 25:
+		!! healthy weight
+		!! normal bonus
+    elseif pcs_bmi < 30:
+		!! overweight
+		tempValue = tempValue * 95 / 100
+    elseif pcs_bmi < 35:
+		!! moderately obese
+		tempValue = tempValue * 80 / 100
+    elseif pcs_bmi < 40:
+		!! severely obese
+		tempValue = tempValue * 55 / 100
+    elseif pcs_bmi < 45:
+		!! very severely obese
+		tempValue = tempValue * 50 / 100
+    else
+		!!morbidly obese
+		tempValue = tempValue * 40 / 100
+    end
+
+	result = tempValue
+	killvar 'tempValue'
+end
+--- AppearanceSystem ---------------------------------

+ 21 - 21
locations/Cheatmenu_din.qsrc

@@ -206,68 +206,68 @@ $cheatmenu['bodyMod'] = {
 		'starving (No, you may not select ''starving'', it''s here to show where the scale starts)'
 		''
 		if salocatnow ! 1:
-			'<a href="exec:salo = 20 & gs ''body_shape'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 1)]>></a>'
+			'<a href="exec:salo = 20 & gs ''body'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 1)]>></a>'
 			''
 		end
 		if salocatnow ! 2:
-			'<a href="exec:salo = 40 & gs ''body_shape'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 2)]>></a>'
+			'<a href="exec:salo = 40 & gs ''body'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 2)]>></a>'
 			''
 		end
 		if salocatnow ! 3:
-			'<a href="exec:salo = 60 & gs ''body_shape'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 3)]>></a>'
+			'<a href="exec:salo = 60 & gs ''body'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 3)]>></a>'
 			''
 		end
 		if salocatnow ! 4:
-			'<a href="exec:salo = 80 & gs ''body_shape'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 4)]>></a>'
+			'<a href="exec:salo = 80 & gs ''body'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 4)]>></a>'
 			''
 		end
 		if salocatnow ! 5:
-			'<a href="exec:salo = 100 & gs ''body_shape'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 5)]>></a>'
+			'<a href="exec:salo = 100 & gs ''body'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 5)]>></a>'
 			''
 		end
 		if salocatnow ! 6:
-			'<a href="exec:salo = 120 & gs ''body_shape'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 6)]>></a>'
+			'<a href="exec:salo = 120 & gs ''body'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 6)]>></a>'
 			''
 		end
 		if salocatnow ! 7:
-			'<a href="exec:salo = 140 & gs ''body_shape'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 7)]>></a>'
+			'<a href="exec:salo = 140 & gs ''body'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 7)]>></a>'
 			''
 		end
 	else
 		if (pregchem < 2688) = 0:
-			'<a href="exec:pregchem = 100 & pregtime = 4 & gs ''body_shape'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10))]>></a>'
+			'<a href="exec:pregchem = 100 & pregtime = 4 & gs ''body'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10))]>></a>'
 			''
 		end
 		if (pregchem >= 2688 and pregchem < 3192) = 0:
-			'<a href="exec:pregchem = 2688 & pregtime = 112 & gs ''body_shape'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 1)]>></a>'
+			'<a href="exec:pregchem = 2688 & pregtime = 112 & gs ''body'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 1)]>></a>'
 			''
 		end
 		if (pregchem >= 3192 and pregchem < 3696) = 0:
-			'<a href="exec:pregchem = 3192 & pregtime = 133 & gs ''body_shape'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 2)]>></a>'
+			'<a href="exec:pregchem = 3192 & pregtime = 133 & gs ''body'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 2)]>></a>'
 			''
 		end
 		if (pregchem >= 3696 and pregchem < 4200) = 0:
-			'<a href="exec:pregchem = 3696 & pregtime = 154 & gs ''body_shape'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 3)]>></a>'
+			'<a href="exec:pregchem = 3696 & pregtime = 154 & gs ''body'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 3)]>></a>'
 			''
 		end
 		if (pregchem >= 4200 and pregchem < 4704) = 0:
-			'<a href="exec:pregchem = 4200 & pregtime = 175 & gs ''body_shape'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 4)]>></a>'
+			'<a href="exec:pregchem = 4200 & pregtime = 175 & gs ''body'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 4)]>></a>'
 			''
 		end
 		if (pregchem >= 4704 and pregchem < 5208) = 0:
-			'<a href="exec:pregchem = 4704 & pregtime = 196 & gs ''body_shape'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 5)]>></a>'
+			'<a href="exec:pregchem = 4704 & pregtime = 196 & gs ''body'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 5)]>></a>'
 			''
 		end
 		if (pregchem >= 5208 and pregchem < 5712) = 0:
-			'<a href="exec:pregchem = 5208 & pregtime = 217 & gs ''body_shape'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 6)]>></a>'
+			'<a href="exec:pregchem = 5208 & pregtime = 217 & gs ''body'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 6)]>></a>'
 			''
 		end
 		if (pregchem >= 5712 and pregchem < 6216) = 0:
-			'<a href="exec:pregchem = 5712 & pregtime = 238 & gs ''body_shape'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 7)]>></a>'
+			'<a href="exec:pregchem = 5712 & pregtime = 238 & gs ''body'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 7)]>></a>'
 			''
 		end
 		if (pregchem >= 6216) = 0:
-			'<a href="exec:pregchem = 6216 & pregtime = 259 & gs ''body_shape'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 8)]>></a>'
+			'<a href="exec:pregchem = 6216 & pregtime = 259 & gs ''body'', ''softreset'' & gs ''stat'' & dynamic $cheatmenu[''bodyMod'']"><<$bodimgsets[((bodset * 10) + 8)]>></a>'
 			''
 		end
 	end
@@ -799,8 +799,8 @@ $cheatmenu['looks'] = {
 	if pcs_lip > 0:'<a href="exec:pcs_lip -= 1 & dynamic $cheatmenu[''looks'']">Shrink lips</a>'
 	*nl
 	'<<$skin>>'
-	if pcs_skin < 100: '<a href="exec:pcs_skin += 20 & gs ''body_shape'', ''basebeautycalc'', 1 & dynamic $cheatmenu[''looks'']">Improve skin</a>'
-	if pcs_skin > 0: '<a href="exec:pcs_skin -= 20 & gs ''body_shape'', ''basebeautycalc'', 1 & dynamic $cheatmenu[''looks'']">Worsen skin</a>'
+	if pcs_skin < 100: '<a href="exec:pcs_skin += 20 & gs ''body'', ''UpdateBaseAppearnce'' & dynamic $cheatmenu[''looks'']">Improve skin</a>'
+	if pcs_skin > 0: '<a href="exec:pcs_skin -= 20 & gs ''body'', ''UpdateBaseAppearnce'' & dynamic $cheatmenu[''looks'']">Worsen skin</a>'
 	if pcs_tan >= 0:'<a href="exec:pcs_tan += 10 & dynamic $cheatmenu[''looks'']">Become tanned</a>'
 	if pcs_tan > 0:'<a href="exec:pcs_tan = 0 & dynamic $cheatmenu[''looks'']">Remove tan</a>'
 	*nl
@@ -809,7 +809,7 @@ $cheatmenu['looks'] = {
 	if pcs_throat >= 5:'<a href="exec:pcs_throat -= 5 & dynamic $cheatmenu[''looks'']">Decrease throat capacity</a>'
 	if dounspell = 1:
 		*nl
-		'<a href="exec:dounsplkil = 2 & gs ''body_shape'', ''hardreset''">Hard Reset body shape</a>'
+		'<a href="exec:dounsplkil = 2 & gs ''body'', ''hardreset''">Hard Reset body shape</a>'
 	end
 
 	'</td><td width="33%" cellpadding="20" valign="top">'
@@ -840,7 +840,7 @@ $cheatmenu['looks'] = {
 	*nl
 	if dounspell = 0:
 		if fat ! 0: '<a href="exec:fat = 0 & dynamic $cheatmenu[''looks'']">Zero fat</a>'
-		'Body Fat = (<<salo>>): <a href="exec:salo -= 10 & gs ''body_shape'', ''softreset'' & dynamic $cheatmenu[''looks'']">-10</a> <a href="exec:salo -= 5 & gs ''body_shape'', ''softreset'' & dynamic $cheatmenu[''looks'']">-5</a> <a href="exec:salo -= 1 & gs ''body_shape'', ''softreset'' & dynamic $cheatmenu[''looks'']">-1</a> <a href="exec:salo += 1 & gs ''body_shape'', ''softreset'' & dynamic $cheatmenu[''looks'']">+1</a> <a href="exec:salo += 5 & gs ''body_shape'', ''softreset'' & dynamic $cheatmenu[''looks'']">+5</a> <a href="exec:salo += 10 & gs ''body_shape'', ''softreset'' & dynamic $cheatmenu[''looks'']">+10</a>'
+		'Body Fat = (<<salo>>): <a href="exec:salo -= 10 & gs ''body'', ''softreset'' & dynamic $cheatmenu[''looks'']">-10</a> <a href="exec:salo -= 5 & gs ''body'', ''softreset'' & dynamic $cheatmenu[''looks'']">-5</a> <a href="exec:salo -= 1 & gs ''body'', ''softreset'' & dynamic $cheatmenu[''looks'']">-1</a> <a href="exec:salo += 1 & gs ''body'', ''softreset'' & dynamic $cheatmenu[''looks'']">+1</a> <a href="exec:salo += 5 & gs ''body'', ''softreset'' & dynamic $cheatmenu[''looks'']">+5</a> <a href="exec:salo += 10 & gs ''body'', ''softreset'' & dynamic $cheatmenu[''looks'']">+10</a>'
 		'Note: You need some Body Fat to survive, any value under 11 is clasified as "starving" and a value of 0 can lead to a Game Over.'
 	end
 	*nl
@@ -956,7 +956,7 @@ $cheatmenu['parameters'] = {
 	'agilbuf = <<agilbuf>>'
 	'strenbuf = <<strenbuf>>'
 	'vitalbuf = <<vitalbuf>>'
-	'BMI (bmi_calc) = <<bmi_calc>>'
+	'BMI (pcs_bmi) = <<pcs_bmi>>'
 	'weight (pcs_weight) = <<pcs_weight>> kg'
 	'bust (pcs_bust) = <<pcs_bust>>'
 	'band (pcs_band) = <<pcs_band>>'

+ 9 - 9
locations/UnitAppearance.qsrc

@@ -37,11 +37,11 @@ if $ARGS[0] = 'GenRowBreak':
 end 
 
 if $ARGS[0] = 'calcHotcat':
-	unitbmi_calc = FUNC('body_shape', 'bmicalc', unitsalo, unitpcs_hgt)
-	unitbodykoef = FUNC('body_shape', 'setbodykoef', unitbmi_calc, unitstrenbuf, unitsalocatnow, unitvofat)
-	unitHeadBonus = FUNC('body_shape', 'calcHeadBonus', unitpcs_lashes, unitpcs_eyesize, unitpcs_lip, unitpcs_teeth, unitbmi_calc)
-	unitAttributeBonus = FUNC('body_shape', 'calcAttributeBonus', unitpcs_agil, unitpcs_vital, unitbmi_calc)
-	unitpcs_apprncbase = FUNC('body_shape', 'basebeautycalc2', unitResetBase, unitvidage, unitpcs_skin, unitbodykoef, unitHeadBonus, unitAttributeBonus, unitpcs_apprncbase)
+	unitbmi_calc = FUNC('body', 'bmicalc', unitsalo, unitpcs_hgt)
+	unitbodykoef = FUNC('body', 'setbodykoef', unitbmi_calc, unitstrenbuf, unitsalocatnow, unitvofat)
+	unitHeadBonus = FUNC('body', 'calcHeadBonus', unitpcs_lashes, unitpcs_eyesize, unitpcs_lip, unitpcs_teeth, unitbmi_calc)
+	unitAttributeBonus = FUNC('body', 'calcAttributeBonus', unitpcs_agil, unitpcs_vital, unitbmi_calc)
+	unitpcs_apprncbase = FUNC('body', 'basebeautycalc2', unitResetBase, unitvidage, unitpcs_skin, unitbodykoef, unitHeadBonus, unitAttributeBonus, unitpcs_apprncbase)
 	unitclothingbonus = FUNC('body', 'calcClothesBonus', unitPXCloThinness, unitPXCloTopCut, unitPXCloBottomShortness, unitPCloQuality, $unitclothingworntype, unitbmi_calc)
 	unitAccessoriesBonus = FUNC('body', 'calcAccessoriesBonus', unitbonusZ, unitPShoQuality, $unitpantyworntype, $unitbraworntype)
 	unitGroomingBonus = FUNC('body', 'calcGroomingBonus', unitpcs_lipbalm, unitmopkoef, unitpcs_hairbsh, unitpcs_breath, unitdeodorant_on, unitbmi_calc)
@@ -77,7 +77,7 @@ if $ARGS[0] = 'HeadBonusCalc':
 end
 
 if $ARGS[0] = 'GenHeadRow':
-    unitHeadBonus = FUNC('body_shape', 'calcHeadBonus', ARGS[1], ARGS[2], ARGS[3], ARGS[4])
+    unitHeadBonus = FUNC('body', 'calcHeadBonus', ARGS[1], ARGS[2], ARGS[3], ARGS[4])
     '<tr>'
         '<td><<unitHeadBonus>></td>'
         '<td><<ARGS[1]>></td>'
@@ -110,7 +110,7 @@ if $ARGS[0] = 'AttribBonusCalc':
 end
 
 if $ARGS[0] = 'GenAttribRow':
-    unitAttribBonus = FUNC('body_shape', 'calcAttributeBonus', ARGS[1], ARGS[2])
+    unitAttribBonus = FUNC('body', 'calcAttributeBonus', ARGS[1], ARGS[2])
     '<tr>'
         '<td><<unitAttribBonus>></td>'
         '<td><<ARGS[1]>></td>'
@@ -1119,14 +1119,14 @@ if $ARGS[0] = 'CalcSaloVars':
     unitvofat = ((unitpcs_hgt * unithratio) / 100 + unitvhips - (unitpcs_hgt * 72) / 100) / 2
 
     unitsalocatnow = 1 + (unitsalo - 10) / 20
-    unitbmi_calc = FUNC('body_shape', 'bmicalc', unitsalo, unitpcs_hgt)
+    unitbmi_calc = FUNC('body', 'bmicalc', unitsalo, unitpcs_hgt)
     gs 'UnitAppearance', 'GetClothThick', unitbmi_calc
 end
 
 if $ARGS[0] = 'GenerateSvetaOptions':
     gs 'UnitAppearance', 'SaveBase'
     gs 'UnitAppearance', 'GenRowBreak', $ARGS[1]
-    unitbmi_calc = FUNC('body_shape', 'bmicalc', unitsalo, unitpcs_hgt)
+    unitbmi_calc = FUNC('body', 'bmicalc', unitsalo, unitpcs_hgt)
 
     $svetadesc = 'Current Clothes'
     

+ 20 - 20
locations/beg1.qsrc

@@ -52,10 +52,10 @@ if $ARGS[0] = 'br':
 	gs 'exercise', 'tier2', 30, 'run_exp'
 
     begminus = 0
-    if bmi_calc > 25: 
-        begminus = ((bmi_calc - 25)*4)
-    elseif bmi_calc < 18:
-        begminus = ((25 - bmi_calc)*6)
+    if pcs_bmi > 25: 
+        begminus = ((pcs_bmi - 25)*4)
+    elseif pcs_bmi < 18:
+        begminus = ((25 - pcs_bmi)*6)
     end
     begresult = pcs_run - begminus
     
@@ -104,10 +104,10 @@ if $ARGS[0] = 'kms':
 	gs 'exercise', 'tier2', 30, 'run_exp'
 
     begminus = 0
-    if bmi_calc > 25: 
-        begminus = ((bmi_calc - 25)*4)
-    elseif bmi_calc < 18:
-        begminus = ((25 - bmi_calc)*6)
+    if pcs_bmi > 25: 
+        begminus = ((pcs_bmi - 25)*4)
+    elseif pcs_bmi < 18:
+        begminus = ((25 - pcs_bmi)*6)
     end
     begresult = pcs_run - begminus
     
@@ -158,10 +158,10 @@ if $ARGS[0] = 'ross':
 	gs 'exercise', 'tier2', 30, 'run_exp'
 
 	begminus = 0
-    if bmi_calc > 25: 
-        begminus = ((bmi_calc - 25)*4)
-    elseif bmi_calc < 18:
-        begminus = ((25 - bmi_calc)*6)
+    if pcs_bmi > 25: 
+        begminus = ((pcs_bmi - 25)*4)
+    elseif pcs_bmi < 18:
+        begminus = ((25 - pcs_bmi)*6)
     end
     begresult = pcs_run - begminus
     
@@ -215,10 +215,10 @@ if $ARGS[0] = 'kval':
     minut += 60
     
     begminus = 0
-    if bmi_calc > 25: 
-        begminus = ((bmi_calc - 25)*4)
-    elseif bmi_calc < 18:
-        begminus = ((25 - bmi_calc)*6)
+    if pcs_bmi > 25: 
+        begminus = ((pcs_bmi - 25)*4)
+    elseif pcs_bmi < 18:
+        begminus = ((25 - pcs_bmi)*6)
     end
     begresult = pcs_run - begminus
     
@@ -273,10 +273,10 @@ if $ARGS[0] = 'evro':
     minut += 120
     
     begminus = 0
-    if bmi_calc > 25: 
-        begminus = ((bmi_calc - 25)*4)
-    elseif bmi_calc < 18:
-        begminus = ((25 - bmi_calc)*6)
+    if pcs_bmi > 25: 
+        begminus = ((pcs_bmi - 25)*4)
+    elseif pcs_bmi < 18:
+        begminus = ((25 - pcs_bmi)*6)
     end
     begresult = pcs_run - begminus
     

+ 464 - 388
locations/body.qsrc

@@ -1,144 +1,424 @@
 # body
 
-!! I have gone through and added a new category of string variables, standardised to be used for descriptive writing. You will notice some duplication here -- this is for purposes of backwards compatibility, as if I completely rename and discard some of these strings,
-!! extant saved games will irreparably break, and this would be Bad. One day down the line, most of the duplicated variables here can be culled, when there is a new release that warrants new saves being used, but until then the duplication needs to stay. Use of
-!! strings for descriptions that do not begin with $pcdesc_ should be avoided, as it would be best to have everything standardised when moving forward into the present and future.
-!! Available strings follow this format: $pcdesc_type, $pcdesc_typewordy, and $pcdesc_typerandom. The last will give a new string each time, to allow for repeatedly referencing something accurately without it becoming repetitive.  Not EVERYTHING has a wordy 
-!! or even random variation, but these should work regardless -- they just may use a non-wordy, or non-random version, if it is something that does not really warrant such. 
-!! There is also a special string, $pcdesc_typeinsertive, that follows the format " , descriptive text" as in, " , invitingly-glossed". Please check the master string document to see if this exists for the string you need. - xerya, July 2017
-
-if $ARGS[0] = '':
-	!!!!!!!!!!!!!!!!
-	!!!!!SIZE AND WEIGHT!!!
-	!!!!!!!!!!!!!!!!
+!!vhips = derived from salo in body_shape
+!!vhtmp = slows the change to vhips in body_shape
+!!wratio = waist to hips ratio set in body_shape
+!!bratio = band to waist ratio set in body_shape
+!!hratio = hip to height ratio set in body_shape
+!!vofat = used as a place to put extra salo at extreme high values (i.e. really, really fat) set in body_shape
+!!nbsize = starts at a set genetic bust size, but can be adjusted down if salo drops too low
+!!magicf2b = set in body_shape for the fat moved to bust
+!!genbsize = the set genetic bust size
+!!salocatnow = the current category of salo
+!!salocatlast = the previous category of salo
+!!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 
+!!btwarn = 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
+!!sftrstflag = used to prevent a code chunk from firing on a soft 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
+
+$this = 'body'
+
+if $ARGS[0] = 'RegularUpdate':
 	if dounspell = 0:
-		pcs_hips = (pcs_hgt * hratio) / 100 + vhips
-		pcs_waist = (pcs_hips * wratio) / 100 + vofat
-		pcs_band = (pcs_waist * bratio) / 100 + vofat
-		pcs_bust = (pcs_waist * bratio) / 100 + nbsize + magicf2b + silicone
-		pcs_butt = (pcs_hips / 10) + silicone_butt + butt_cheat
-		pcs_cupsize = pcs_bust - pcs_band
-		
-		!!pcs_weight: Svetas weight in kg 
-		!!Optimal Weight (170cm): 60kg, 60 salo
-		!!This is an approximation, so that a sveta with a different height has the same BMI for the same salo 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. 
-		
-		pcs_weight = 30 + salo / 2 + (pcs_hgt - 170) * 7 / 10
-		
-		!!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
-		
-		!!pcs_weight = (pcs_hgt * 62 / 170) + (vhips + (vofat * 2)) / 4 + tits
-			
-		!!BMI Calculation
-
-		bmi_calc = FUNC('body_shape', 'bmicalc', salo, pcs_hgt)
-
-		!!BMI Descriptions
-		if bmi_calc < 16:
-			$bmi_desc = 'You are severely underweight.'
-		elseif bmi_calc >= 16 and bmi_calc < 19:
-			$bmi_desc = 'You are underweight'
-		elseif bmi_calc >= 19 and bmi_calc < 25:
-			$bmi_desc = 'You have a normal, healthy weight.'
-		elseif bmi_calc >= 25 and bmi_calc < 30:
-			$bmi_desc = 'You are overweight.'
-		elseif bmi_calc >= 30 and bmi_calc < 35:
-			$bmi_desc = 'You are moderately obese.'
-		elseif bmi_calc >= 35 and bmi_calc < 40:
-			$bmi_desc = 'You are severely obese.'
-		elseif bmi_calc >= 40 and bmi_calc < 45:
-			$bmi_desc = 'You are very severely obese.'
-		elseif bmi_calc >= 45:
-			$bmi_desc = 'You are morbidly obese.'
-		end
+		gs $this, 'UpdateBodyMeasurement'
+		pcs_weight = func($this, 'CalcWeight')
+		pcs_bmi = func($this, 'CalcBMI')
 	end
 
-	gs 'body_desc'
-
-	!! Skin1 is only used in the foto location, and can be replaced at a later date. From here on out, do not use it.
 	if pcs_skin > 100:
 		pcs_skin = 100
 	elseif pcs_skin < 0:
 		pcs_skin = 0
 	end
+	
+	!!Since "musle" is used all over the place
+	musle = strenbuf
+end
 
-	mopkoef = pcs_makupskl / 5
-	if pcs_makeup = 0: mopkoef = -5
-	if pcs_makeup = 1: mopkoef = 0
-	if pcs_makeup = 5: mopkoef = 30
-	if pcs_makeup = 6 and bimbolevel >= 2: extra_supnatvnesh = 2*bimbolevel - 2
-
+if $ARGS[0] = 'DailyUpdate':
+	!{
+		Update once a day and called from cikl
+	}
 	if dounspell = 1:
-		bodytipe = pcs_hips - pcs_waist
-		if bodytipe < 20:
-			bodykoef = 0
-		elseif bodytipe >= 20 and bodytipe < 25:
-			bodykoef = 2
-		elseif bodytipe >= 25 and bodytipe < 30:
-			bodykoef = 4
-		elseif bodytipe >= 30 and bodytipe < 35:
-			bodykoef = 8
-		elseif bodytipe >= 35:
-			bodykoef = 4
+		if strenbuf > 90:
+			strenbuf -= 2
+		elseif strenbuf > 80:
+			strenbuf -= 1
+		end
+	
+		if vitalbuf > 90:
+			vitalbuf -= 2
+		elseif vitalbuf > 80:
+			vitalbuf -= 1
+		end
+	
+		if strenbuf > pcs_stren: strenbuf -= 1
+		if strenbuf < pcs_stren: strenbuf += 1
+		if vitalbuf > pcs_vital: vitalbuf -= 1
+		if vitalbuf < pcs_vital: vitalbuf += 1
+		if agilbuf > pcs_agil: agilbuf -= 1
+		if agilbuf < pcs_agil: agilbuf += 1
+	else
+		gs $this
+	end
+
+	gs $this, 'UpdateBodyImage'
+
+	!!---- 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
 
-	!!This is to force a base update if teeth changed since that is immediate
-	if zublast ! pcs_teeth:
-		gs 'body_shape', 'basebeautycalc', 1
-		zublast = pcs_teeth
+	!! 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 < 1001 and hairgrowcht = 0:pcs_hairlng += 1
+
+	! Hair colour change
+	if pcs_haircol ! nathcol:
+		dyefade -=1
+		if dyefade < 0: dyefade = 0
 	end
 
-	!! Calculate hotcat etc
-	tempclothingbonus = FUNC('body', 'calcClothesBonus', PXCloThinness, PXCloTopCut, PXCloBottomShortness, PCloQuality, $clothingworntype, bmi_calc)
-	tempAccessoriesBonus = FUNC('body', 'calcAccessoriesBonus', bonusZ, PShoQuality, $pantyworntype, $braworntype)
-	tempGroomingBonus = FUNC('body', 'calcGroomingBonus', pcs_lipbalm, mopkoef, pcs_hairbsh, pcs_breath, deodorant_on, bmi_calc)
-	tempGroomingPenalty = FUNC('body', 'calcGroomingPenalty', pcs_hairlng, pcs_sweat, glassvnesh, dyevmod, legkoef)
-	Hotcat = FUNC('body', 'calcHotcat', pcs_apprncbase, (supnatvnesh + extra_supnatvnesh), tempclothingbonus, tempAccessoriesBonus, tempGroomingBonus, tempGroomingPenalty)
-	pcs_apprnc = temppcs_apprnc & killvar 'temppcs_apprnc' & killvar 'temppcs_maxapprnc'
+	!!pubic hair colouring
+	!! pcs_pubecol = 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:
+		pcs_pubecol[3] -=1
+		if pcs_pubecol[3] < 0: pcs_pubecol[3] = 0
+		if pcs_pubecol[3] = 0: pcs_pubecol[2] = pcs_pubecol
+	end
 
+	if pcs_pubes < 2: pcs_pubecol[2] = pcs_pubecol
 
-	if StrongNarkota <= 0:
-		if SNarkTimes >= 3 and SLomka = 0:SLomka = 1
-		if Gerpes >= 3 or Sifilis >= 21 or Triper > 2:pcs_apprnc = -10
+	if hscrunch > 0:
+		hscrunchrand = rand(1, 100)
+
+		if hscrunchrand <= 8:hscrunch -= 1
 	end
 
-	if amphCount > 3 and amphHigh <= 0:
-		addictChance = rand(1,10)
-		if addictChance > 8:
-			amphWithdrawl = 2
+	! Leg and pubes hair growth
+	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
+	end
+	
+	if age < 18 and rand (0,2) = 0 and pcs_leghair > 0: pcs_leghair -= 1
+end
+
+if $ARGS[0] = '':
+	!!This controls the gradual change in stat to -buf
+	if strenbuf > pcs_stren: strenbuf -= 1
+	if strenbuf < pcs_stren: strenbuf += 1
+	if vitalbuf > pcs_vital: vitalbuf -= 1
+	if vitalbuf < pcs_vital: vitalbuf += 1
+	if agilbuf > pcs_agil: agilbuf -= 1
+	if agilbuf < pcs_agil: agilbuf += 1
+
+	!!All the ratios were rounded to 2 digits and there are divide 100s at the final calc points
+	!!Waist to hip ratio
+
+	wrtemp = ((2 * vitalbuf + strenbuf + agilbuf) /4)
+
+	!!	Primary wratio handling
+	if wrtemp < 11:
+		wratio = 85 + (11 - (vitalbuf + strenbuf + agilbuf)/3)
+	elseif wrtemp < 20:
+		wratio = 85
+	elseif wrtemp < 35:
+		wratio = 85 - (wrtemp - 20) / 3
+	elseif wrtemp < 55:
+		wratio = 80 - (wrtemp - 35) / 4
+	elseif wrtemp < 80:
+		wratio = 75 - (wrtemp - 55) / 5
+	elseif wrtemp >= 80:
+		wratio = 70
+	end
+
+	!!	High stat value edge case handling
+	if (vitalbuf + strenbuf + agilbuf) /3 > 100: wratio -= ((vitalbuf + strenbuf)/2 - agilbuf)/5
+
+	!!	This is the oops and high stat gone overboard handling
+	if wratio < 65: wratio = 65
+
+	killvar 'wrtemp'
+
+	!!For band to waist ratio
+	brtemp = (2 * strenbuf + vitalbuf + agilbuf) /4
+
+	if brtemp < 10:
+		bratio = 105
+	elseif brtemp =< 23:
+		bratio = 106
+	elseif brtemp =< 80:
+		bratio = 106 + (brtemp - 23) / 3
+	else
+		bratio = 125
+	end
+
+	killvar 'brtemp'
+
+	!!For hip to height ratio which is used to set the center point
+	hrtemp = (2 * agilbuf + vitalbuf + strenbuf) /4
+
+	if hrtemp < 35:
+		hratio = 60
+	elseif hrtemp < 45:
+		hratio = 59
+	elseif hrtemp < 60:
+		hratio = 58
+	elseif hrtemp < 80:
+		hratio = 57
+	else
+		hratio = 56
+	end
+
+	killvar 'hrtemp'
+
+	!!Salo Handling; the first part is because during a reset fat is not used and should be cleared
+	if sftrstflag = 1 or cheatNoFat = 1:
+		fat = 0
+	else
+		if fat > (17 + vitalbuf / 25): salo += 1 & fat = 0
+		if fat < (-2 - (vitalbuf / 10)): salo -= 1 & fat = 0
+	end
+
+	!!This is the salo cap for the weight approximation
+	if salo > 250: salo = 250
+		
+	!!This calculates the current salo category; ranges are 20 points, seemed to balance best if the range is x10 the hip devisor
+	:salocatloop
+	if salo < 10:
+		salocatnow = 0
+	else
+		salocatnow = 1 + (salo - 10) / 20
+	end
+
+	!!This resets the genetic bust size (genbsize) when the cheat is used to reduce breast size (maybe other things later)
+	if titreduc = 1:
+		killvar 'titreduc'
+		if genbsize > nbsize:
+			genbsize = 2 + nbsize - nbsize mod 5
+		end
+	end
+
+	!!This controls the movement of salo to/from bust in order of precedence
+	if salobustdo = 0 and nbsize < genbsize and salocatnow > 2:
+		if sftrstflag = 0:'<b>Your breasts seem fuller.</b>'
+		nbsize += 1
+		salo -= 3
+		salobustdo = 1
+		jump 'salocatloop'
+	end
+
+	if salobustdo = 0 and magf2bdo = 1 and salocatnow > salocatlast and pcs_mana >= manamax / 2 and magikDostup = 0:
+		if sftrstflag = 0:'<b>Your breasts seem fuller.</b>'
+		magicf2b += 1
+		salo -= 3
+		salobustdo = 1
+		if magicf2b >= 2 + magtarcup * 5: magf2bdo = 0
+		if pcs_magik < 20:
+			pcs_mana -= 2000 / pcs_magik
+		else
+			mana -= 100
+		end
+		jump 'salocatloop'
+	end
+
+	if salobustdo = 0 and salocatnow < 2 and salocatlast >= 2 and magicf2b > 0 and magikDostup = 0:
+		if sftrstflag = 0:'<b>Your breasts seem to be getting smaller.</b>'
+		magicf2b -= 1
+		salo += 3
+		salobustdo = 1
+		magf2bdo = 1
+		jump 'salocatloop'
+	end
+
+	if salobustdo = 0 and salocatnow < 1 and salocatlast >= 1 and nbsize > 0:
+		if sftrstflag = 0:'<b>Your breasts seem to be getting smaller.</b>'
+		nbsize -= 1
+		salo += 3
+		salobustdo = 1
+		jump 'salocatloop'
+	end
+
+	!!This is if a Succubus has salo < 1
+	if succubusflag = 1 and salo < 1:
+		sucexcess -= 1
+		salo += 3
+	end
+
+	!!This is if salo is still < 1
+	if salo < 1:
+		if fat >= 1:
+			salo = 1
+			fat -= 1
+		elseif fat <= 0 and pcs_stren + pcs_vital > 0:
+			stren_deg -= 1000
+			vital_deg -= 1000
+			salo = 1
+		else
+			if Enable_nogameover = 0:
+				over = 3
+				gt 'gameover'
+				exit
+			else
+				pl '<font color=red><B>You starved to death, but Cheat Mode keeps you Alive.</B></font>'
+				salo = 1
+			end
+		end
+	end
+
+	killvar 'tempvct' & killvar 'salobustdo'
+
+	!!This is the hip calcs, 80 is the center of the current max-min range (10 - 130)
+	vhtmp = (salo - 80) / 2
+	
+	if vhips > vhtmp: vhips -= 1
+	if vhips < vhtmp: vhips += 1
+	!!	Because a reset should be updating hip size instantly (this set is a bit redundant anyway)
+	if sftrstflag = 1: vhips = vhtmp
+
+	if (pcs_hgt * hratio) / 100 + vhips > (pcs_hgt * 72) / 100:
+		vofat = ((pcs_hgt * hratio) / 100 + vhips - (pcs_hgt * 72) / 100) / 2
+		vhips -= vofat * 2
 	end
 
-	if StrongNarkota > 0:
-		if SLomka > 0:SLomka = 0
-		pcs_mood = 100
+	!!This will trigger the warning notices in the bathing code (the +/- 12 should always be +/- 11 + the max change to salo w/ fat)
+	if salolast > salo and salo <= 12 + (20 * (salocatnow - 1)): btwarn = 1
+	if salolast < salo and salo >= (20 * (salocatnow + 1)) - 12: btwarn = 2
+
+	!!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 salolast < salo and salo >= (20 * (salocatnow + 1)) - 11 and tits < 10:
+			if mgf2bnocnt < 3:
+				magf2bdo = 2
+			else
+				magf2bdo = 3 & killvar 'mgf2bnocnt'
+			end
+		end
 	end
 
-	if pcs_apprnc = -10:
-		$pcs_apprnc = 'Your looks are even worse than terrible. It''s god-awful. No one wants to see or talk to you and people avoid you at any cost.'
-	elseif pcs_apprnc < 20:
-		$pcs_apprnc = 'Your looks are terrible. People try to avoid looking and talking to you.'
-	elseif pcs_apprnc < 60:
-		$pcs_apprnc = 'You''re a wallflower. Hardly anyone notices you.'
-	elseif pcs_apprnc < 120:
-		$pcs_apprnc = 'You have good looks. Men and women check you out when they think you aren''t looking.'
-	elseif pcs_apprnc < 160:
-		$pcs_apprnc = 'You''re unquestionably gorgeous. Men constantly get caught staring at you by their girlfriends.'
-	elseif pcs_apprnc < 200:
-		$pcs_apprnc = 'You have a simply stunning appearance. Other girls are a bit jealous and guys constantly check you out.'
+	!!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 > salo: salolast -= 1
+	if salolast < salo: salolast += 1
+
+	!!Setting the pcs_apprnc bonus based on fat and strength
+	pcs_bmi = FUNC($this, 'CalcBMI')
+
+	!!This is to clean up unused variables
+	killvar 'normbuffpick' & killvar 'nrmbfpckct'
+	killvar 'vmeat' & killvar 'vfat' & killvar 'Kves' & killvar 'krost'
+	killvar 'koefvesbt' & killvar 'koefbt'
+end
+
+if $ARGS[0] = 'UpdateBodyMeasurement':
+	pcs_hips = (pcs_hgt * hratio) / 100 + vhips
+	pcs_waist = (pcs_hips * wratio) / 100 + vofat
+	pcs_band = (pcs_waist * bratio) / 100 + vofat
+	pcs_bust = (pcs_waist * bratio) / 100 + nbsize + magicf2b + silicone
+	pcs_butt = (pcs_hips / 10) + silicone_butt + butt_cheat
+	pcs_cupsize = pcs_bust - pcs_band
+
+	! Update tits size
+	if pcs_cupsize <= 5:
+		tits = 0
+		$titsize = 'AA cup'
+	elseif pcs_cupsize <= 10:
+		tits = 1
+		$titsize = 'A cup'
+	elseif pcs_cupsize <= 15:
+		tits = 2
+		$titsize = 'B cup'
+	elseif pcs_cupsize <= 20:
+		tits = 3
+		$titsize = 'C cup'
+	elseif pcs_cupsize <= 25:
+		tits = 4
+		$titsize = 'D cup'
+	elseif pcs_cupsize <= 30:
+		tits = 5
+		$titsize = 'E cup'
+	elseif pcs_cupsize <= 35:
+		tits = 6
+		$titsize = 'F cup'
+	elseif pcs_cupsize <= 40:
+		tits = 7
+		$titsize = 'G cup'
+	elseif pcs_cupsize <= 45:
+		tits = 8
+		$titsize = 'H cup'
+	elseif pcs_cupsize <= 50:
+		tits = 9
+		$titsize = 'I cup'
+	elseif pcs_cupsize <= 55:
+		tits = 10
+		$titsize = 'J cup'
 	else
-		$pcs_apprnc = 'Your appearance is divine! No one is able to take his or her eyes off of you.'
+		tits = 11
+		$titsize = 'K cup'
 	end
+end
 
-	!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-	!!!!!!!!BODY
-	!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+if $ARGS[0] = 'CalcWeight':
+	!{pcs_weight: Svetas weight in kg 
+	Optimal Weight (170cm): 60kg, 60 salo
+	This is an approximation, so that a sveta with a different height has the same BMI for the same salo 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 = 30 + salo / 2 + (pcs_hgt - 170) * 7 / 10
+
+	!{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 + (vofat * 2)) / 4 + tits
+end
 
+if $ARGS[0] = 'UpdateBodyImage':
+	!Update body image set
 	if dounspell = 1:
 		salocatnow = (pcs_hips / 10) - 5
 		if bdsetlock = 0:
@@ -164,8 +444,9 @@ if $ARGS[0] = '':
 		else
 			bodset = 1
 		end
-	end 
+	end
 
+	! Update body description
 	if (knowpreg = 1 or (preg = 1 and thinkpreg = 1) or (preg = 1 and PregChem > 3600)) and bodset = 3:
 		if PregChem > 6216:
 			$body = $bodimgsets[((bodset * 10) + 8)]
@@ -179,295 +460,90 @@ if $ARGS[0] = '':
 	else
 		$body = $bodimgsets[((bodset * 10) + 7)]
 	end
-
-	!!Since "musle" is used all over the place
-	musle = strenbuf
-
-
-	!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-	!! kill temporary variables
-	killvar 'rand_breasts'
-	killvar 'rand_hairmess'
-	killvar 'rand_hairword'
-	killvar 'rand_bangs'
-	killvar 'rand_hair'
-	killvar 'rand_hairstyle'
-	killvar 'rand_hairobject'
-	killvar 'rand_hairlength'
-	killvar 'rand_tongue'
-	killvar 'rand_eyecol'
-	killvar 'rand_lashes'
-	killvar 'rand_vision'
-	killvar 'rand_eyesize'
-	killvar 'rand_makeup'
-	killvar 'rand_legs'
-	killvar 'rand_clit'
-	killvar 'rand_pubes'
-	killvar 'rand_nipples'
-	killvar 'tempclothingbonus'
-	killvar 'tempAccessoriesBonus'
-	killvar 'tempGroomingBonus'
-	killvar 'tempGroomingPenalty'
 end
 
-if $ARGS[0] = 'calcClothesBonus':
-	!! Note there is a limit of 9 args
-	tempPXCloThinness = ARGS[1] & !! PXCloThinness
-	tempPXCloTopCut = ARGS[2] & !! PXCloTopCut
-	tempPXCloBottomShortness = ARGS[3] & !! PXCloBottomShortness
-	tempPCloQuality = ARGS[4] & !! PCloQuality
-	$tempclothingworntype = $ARGS[5] & !!$clothingworntype
-	tempbmi_calc = ARGS[6] & !! bmi_calc
-
-	if tempbmi_calc < 16:
-		!!severely underweight
-		if $tempclothingworntype = 'nude':
-			tempRevealing = 0
-			tempPCloQuality = 1
-		else
-			tempRevealing = (400 - tempPXCloThinness) + (500 - tempPXCloTopCut) + (400 - tempPXCloBottomShortness)
-			tempRevealing = tempRevealing / 2
-		end
-	elseif tempbmi_calc >= 16 and tempbmi_calc < 19:
-		!!underweight
-		if $tempclothingworntype = 'nude':
-			tempRevealing = 0
-			tempPCloQuality = 1
-		else
-			tempRevealing = (400 - tempPXCloThinness) + (500 - tempPXCloTopCut) + (400 - tempPXCloBottomShortness)
-			tempRevealing = tempRevealing / 2
-		end
-	elseif tempbmi_calc >= 19 and tempbmi_calc < 25:
-		!!normal, healthy weight
-		if $tempclothingworntype = 'nude':
-			tempRevealing = 405
-			tempPCloQuality = 3
-		else
-			tempRevealing = tempPXCloThinness + tempPXCloTopCut + tempPXCloBottomShortness
-			tempRevealing = tempRevealing / 2
-		end
-	elseif tempbmi_calc >= 25 and tempbmi_calc < 30:
-		!!overweight
-		if $tempclothingworntype = 'nude':
-			tempRevealing = 405
-			tempPCloQuality = 3
-		else
-			tempRevealing = tempPXCloThinness + tempPXCloTopCut + tempPXCloBottomShortness
-			tempRevealing = tempRevealing / 2
-		end
-	elseif tempbmi_calc >= 30 and tempbmi_calc < 35:
-		!!moderately obese
-		if $tempclothingworntype = 'nude':
-			tempRevealing = 0
-			tempPCloQuality = 1
-		else
-			tempRevealing = (400 - tempPXCloThinness) + (500 - tempPXCloTopCut) + (400 - tempPXCloBottomShortness)
-			tempRevealing = tempRevealing * 3 / 4
-		end
-	elseif tempbmi_calc >= 35 and tempbmi_calc < 40:
-		!!severely obese
-		if $tempclothingworntype = 'nude':
-			tempRevealing = 0
-			tempPCloQuality = 1
-		else
-			tempRevealing = (400 - tempPXCloThinness) + (500 - tempPXCloTopCut) + (400 - tempPXCloBottomShortness)
-			tempRevealing = tempRevealing * 3 / 4
-		end
-	elseif tempbmi_calc >= 40 and tempbmi_calc < 45:
-		!!very severely obese
-		if $tempclothingworntype = 'nude':
-			tempRevealing = 0
-			tempPCloQuality = 1
-		else
-			tempRevealing = (400 - tempPXCloThinness) + (500 - tempPXCloTopCut) + (400 - tempPXCloBottomShortness)
-			tempRevealing = tempRevealing * 3 / 4
-		end
-	elseif tempbmi_calc >= 45:
-		!!morbidly obese
-		if $tempclothingworntype = 'nude':
-			tempRevealing = 0
-			tempPCloQuality = 1
-		else
-			tempRevealing = (400 - tempPXCloThinness) + (500 - tempPXCloTopCut) + (400 - tempPXCloBottomShortness)
-			tempRevealing = tempRevealing * 3 / 4
-		end
-	end
-
-	tempRevealing = tempRevealing / 76
-
-	tempCloAdjustedBeauty = tempRevealing * tempPCloQuality
-
-	!!if $tempclothingworntype = 'danilovich_outfits': tempCloAdjustedBeauty = tempCloAdjustedBeauty * 2 / 3
-
-	result = tempCloAdjustedBeauty
-
-	killvar 'tempPXCloThinness'
-	killvar 'tempPXCloTopCut'
-	killvar 'tempPXCloBottomShortness'
-	killvar 'tempPCloQuality'
-	killvar '$tempclothingworntype'
-	killvar 'tempRevealing'
-	killvar 'tempCloAdjustedBeauty'
-	killvar 'tempbmi_calc'
+if $ARGS[0] = 'CalcBMI':
+	result = 10000 * (30 + salo / 2 + (pcs_hgt - 170) * 7 / 10) / (pcs_hgt * pcs_hgt)
 end
 
-if $ARGS[0] = 'calcAccessoriesBonus':
-	tempcoatbonus = ARGS[1] & !! bonusZ
-	tempPShoQuality = ARGS[2] & !! PShoQuality
-	$temppantyworntype = $ARGS[3] & !! $pantyworntype
-	$tempbraworntype = $ARGS[4] & !! $braworntype
-	
-	!!bonuses for certain underwear
-	if $temppantyworntype = 'boutique':
-		temppantybounus = 4
-	elseif $temppantyworntype = 'fashionista':
-		temppantybounus = 2
-	end
-
-	if $tempbraworntype = 'boutique':
-		tempbrabounus = 4
-	elseif $tempbraworntype = 'fashionista':
-		tempbrabounus = 2
+if $ARGS[0] = 'softreset':
+	!!This is for use in immediately updating shape if something has caused a large change in salo, primarily fat burners and plastic surgery
+	sftrstflag = 1
+	:resetloop
+	if salo ! salolast:
+		if gmstrtflag = 1: salobustdo = 1
+		gs 'body'
+		jump 'resetloop'
 	end
-
-	tempAccessoriesBonus = tempcoatbonus + tempPShoQuality + temppantybounus + tempbrabounus
-
-	result = tempAccessoriesBonus
-	killvar 'tempcoatbonus'
-	killvar 'tempPShoQuality'
-	killvar 'temppantybounus'
-	killvar 'tempbrabounus'
-	killvar '$temppantyworntype'
-	killvar '$tempbraworntype'
-	killvar 'tempAccessoriesBonus'
+	!!Updates pcs_apprncbase after a reset
+	gs 'AppearanceSystem', 'UpdateBaseAppearnce'
+	!!Clears the warning and reset status flags if they were set
+	sftrstflag = 0
+	btwarn = 0
 end
 
-if $ARGS[0] = 'calcGroomingBonus':
-	!! Note there is a limit of 9 args
-	temppcs_lipbalm = ARGS[1] & !! pcs_lipbalm
-	tempmakeupkoef = ARGS[2] & !! mopkoef 
-	temppcs_hairbsh = ARGS[3] & !! pcs_hairbsh
-	temppcs_breath = ARGS[4] & !! pcs_breath
-	tempdeodorant_on = ARGS[5] & !! deodorant_on
-	tempbmi_calc = ARGS[6] & !! bmi_calc
-
-	if temppcs_lipbalm > 0:
-		lipbalmKoef = 5
+if $ARGS[0] = 'hardreset':
+	!!This is primarily for canceling out "dounspell" and setting salo 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 and dounsplkil > 0:
+		salo = 12
+		fat = 0
+		agilbuf = pcs_agil & strenbuf = pcs_stren & vitalbuf = pcs_vital
+		salobustdo = 1 & sftrstflag = 1 & normbuffpick = -1
+		gs 'body'
+		salo = (pcs_hips * 2) - ((pcs_hgt * hratio) / 50) + 80
+		if salo < 10:
+			salocatnow = 0
+		else
+			salocatnow = 1 + (salo - 10) / 20
+		end
+		salocatlast = salocatnow
+		salolast = salo
+		vhtmp = (salo - 80) / 2
+		vhips = vhtmp
+		if genbsize = 0 and nbsize > 0:
+			If nbsize >= 27:
+				genbsize = 27
+			else
+				genbsize = 2 + nbsize - nbsize mod 5
+			end
+		elseif genbsize = 0 and nbsize = 0 and silicone >= 20:
+			genbsize = 12 & nbsize = 12 & silicone -= 10
+		end
+		sftrstflag = 0 & normbuffpick = 0 & btwarn = 0 & magf2bdo = 0
+		killvar 'dounsplkil'
+		newbdsp = 1
+		dounspell = 0
+		gs 'AppearanceSystem', 'UpdateBaseAppearnce'
+		gs 'body'
+		gs 'stat'
 	else
-		lipbalmKoef = 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.'
 	end
-
-	tempHairBonus = temppcs_hairbsh * 10
-
-	tempBreathBonus = temppcs_breath * 5
-
-	tempGroomingBonus = tempmakeupkoef + tempHairBonus + lipbalmKoef + tempBreathBonus
-
-	!!Small bonus for wearing deodorant, if pcs_sweat is low enough
-	if tempdeodorant_on = 1 and temppcs_sweat < 20: tempGroomingBonus += 5
-
-	tempGroomingBonus = FUNC('body_shape', 'bmiadjust', tempGroomingBonus, tempbmi_calc)
-
-	result = tempGroomingBonus
-
-	killvar 'temppcs_lipbalm'
-	killvar 'tempmakeupkoef'
-	killvar 'temppcs_hairbsh'
-	killvar 'temppcs_breath'
-	killvar 'tempdeodorant_on'
-	killvar 'tempHairBonus'
-	killvar 'tempBreathBonus'
-	killvar 'tempGroomingBonus'
-
-!! commented out as not used in the original calc
-!!Removed as primary appearance factors; will be eventually used in an NPC preference system instead; tanKoef = suntan
-!!	if temppcs_tan > 0:
-!!		tanKoef = 1
-!!	else
-!!		tanKoef = 0
-!!	end
-
 end
 
-if $ARGS[0] = 'calcGroomingPenalty':
-	temppcs_hairlng = ARGS[1] & !! pcs_hairlng
-	temppcs_sweat = ARGS[2] & !! pcs_sweat
-	tempglassvnesh = ARGS[3] & !! glassvnesh
-	tempdyevmod = ARGS[4] & !! dyevmod
-	templegkoef = ARGS[5] & !! legkoef
-
-	!! buzzcut penalty to pcs_apprnc
-	if temppcs_hairlng < 10:
-		hairkoef = 10
+if $ARGS[0] = 'initial':
+	!!	Sets the genetic bust size if it was not set in the start routines
+	if genbsize = 0:
+		genbsize = 12 & nbsize = 12
 	else
-		hairkoef = 0
+		nbsize = genbsize
 	end
-
-	if temppcs_sweat < 22:
-		sweatKoef = 0
-	elseif temppcs_sweat < 38:
-		sweatKoef = (temppcs_sweat - 10) / 4
-	elseif temppcs_sweat < 54:
-		sweatKoef = (temppcs_sweat - 10) / 2
-	else
-		sweatKoef = 3 * (temppcs_sweat - 10) / 4
-	end
-
-	tempGroomingPenalty = sweatKoef + tempglassvnesh + tempdyevmod + hairkoef + templegkoef
-
-	result = tempGroomingPenalty
-
-	killvar 'temppcs_hairlng'
-	killvar 'temppcs_sweat'
-	killvar 'tempglassvnesh'
-	killvar 'tempdyevmod'
-	killvar 'templegkoef'
-	killvar 'tempGroomingPenalty'
+	agilbuf = pcs_agil & strenbuf = pcs_stren & vitalbuf = pcs_vital
+	normbuffpick = -1 & gmstrtflag = 1
+	!!	Calling soft reset will cause the main code to cycle up to the starting value of salo
+	gs 'body', 'softreset'
+	!!	This sets/resets the controler variables
+	salocatlast = salocatnow
+	normbuffpick = 0 & magf2bdo = 0
+	killvar 'gmstrtflag'
+	newbdsp = 1
+	!!	This does all the body shape setting before the first stat call
+	gs $this, 'UpdateBodyMeasurement'
+	pcs_weight = func($this, 'CalcWeight')
+	pcs_bmi = func($this, 'CalcBMI')
+	gs 'body_desc', 'BMI'
 end
 
-
-if $ARGS[0] = 'calcHotcat':
-	!!Appearance factors; hairkoef = very short hair / mopkoef = makeup bonus / legkoef = shaved legs / CloAdjustedBeauty = clothes / pcs_hairbsh = Hair brushed / lipbalmKoef = lip balm / pcs_breath = freash breath / sweatKoef = pcs_sweat / glassvnesh = glasses / dyevmod = hair dye fading
-	!!Moved to base calculation in "body_shape"; bimbobeauty = Bimbo bonus; pcs_lip = lip size; skin = skin condition; pcs_lashes = eyelashes; pcs_eyesize = eyes; bodykoef = hips:waist ratio; pcs_teeth = missing teeth; vidagebonus = youth
-	temppcs_apprncbase = ARGS[1] & !! pcs_apprncbase
-	tempsupnatvnesh = ARGS[2] & !! supnatvnesh
-	tempCloAdjustedBeauty = ARGS[3] & !! result of calcClothesBonus
-	tempAccessoriesBonus = ARGS[4] & !! result of calcAccessoriesBonus
-	tempGroomingBonus = ARGS[5] & !! result of calcGroomingBonus
-	tempGroomingPenalty = ARGS[6] & !! result of calcGroomingPenalty
-
-	temppcs_apprnc = temppcs_apprncbase + tempCloAdjustedBeauty + tempAccessoriesBonus + tempGroomingBonus - tempGroomingPenalty
-	!!adjustment to make max achievable
-	!!temppcs_maxapprnc = temppcs_apprnc*200/170
-	temppcs_maxapprnc = temppcs_apprnc
-
-	if temppcs_maxapprnc >= 200: 
-		temppcs_apprnc = 200
-	else
-		temppcs_apprnc = temppcs_maxapprnc
-	end 
-
-	temppcs_apprnc = temppcs_apprnc + tempsupnatvnesh
-
-	if temppcs_apprnc < 0: temppcs_apprnc = 0
-
-	!!This sets the "hotness catagory" varibale for use in checks
-	if temppcs_apprnc <= 200:
-		temphotcat = temppcs_apprnc / 20
-	else
-		temphotcat = 10
-	end
-
-	result = tempHotcat
-	!! do not kill temppcs_apprnc this is used as a second returned variable set pcs_apprnc = temppcs_apprnc and kill temppcs_apprnc after calling it
-	killvar 'tempsupnatvnesh'
-	killvar 'temppcs_apprncbase'
-	killvar 'tempCloAdjustedBeauty'
-	killvar 'tempGroomingBonus'
-	killvar 'tempGroomingBonus'
-	killvar 'tempGroomingPenalty'
-end 
-
-
 --- body ---------------------------------
+

+ 50 - 8
locations/body_desc.qsrc

@@ -1,11 +1,20 @@
 # body_desc
 
+!{
+	I have gone through and added a new category of string variables, standardised to be used for descriptive writing. You will notice some duplication here -- this is for purposes of backwards compatibility, as if I completely rename and discard some of these strings,
+	extant saved games will irreparably break, and this would be Bad. One day down the line, most of the duplicated variables here can be culled, when there is a new release that warrants new saves being used, but until then the duplication needs to stay. Use of
+	strings for descriptions that do not begin with $pcdesc_ should be avoided, as it would be best to have everything standardised when moving forward into the present and future.
+	Available strings follow this format: $pc_desc['type'], $pc_descWordy['type']
+	Available 'type':
+		throat, pussy, anus, butt, breasts, lips, lip size, lip gloss  hair, hair style, hair status, hair length, hair colour, hair texture, hair bang tan, skin, eye color, eyelashes, glasses, eye size, makeup, nipples, clit, pubes, legs
+}
+
 if $ARGS[0] = '':
     $this = 'body_desc'
     gs $this, 'throat'
     gs $this, 'pussy'
     gs $this, 'anus'
-	if dounspell = 0: gs $this, 'butt' & gs $this, 'breasts'
+	if dounspell = 0: gs $this, 'butt' & gs $this, 'breasts' & gs $this, 'BMI'
 	gs $this, 'lips'
 	gs $this, 'hair'
     gs $this, 'tan'
@@ -19,6 +28,7 @@ if $ARGS[0] = '':
     gs $this, 'clit'
     gs $this, 'pubes'
     gs $this, 'legs'
+	gs $this, 'appearance'
 end
 
 if $ARGS[0] = 'ChooseDescWord':
@@ -176,6 +186,27 @@ if $ARGS[0] = 'anus':
 	end
 end
 
+if $ARGS[0] = 'BMI':
+	!!BMI Descriptions
+	if pcs_bmi < 16:
+		$bmi_desc = 'You are severely underweight.'
+	elseif pcs_bmi >= 16 and pcs_bmi < 19:
+		$bmi_desc = 'You are underweight'
+	elseif pcs_bmi >= 19 and pcs_bmi < 25:
+		$bmi_desc = 'You have a normal, healthy weight.'
+	elseif pcs_bmi >= 25 and pcs_bmi < 30:
+		$bmi_desc = 'You are overweight.'
+	elseif pcs_bmi >= 30 and pcs_bmi < 35:
+		$bmi_desc = 'You are moderately obese.'
+	elseif pcs_bmi >= 35 and pcs_bmi < 40:
+		$bmi_desc = 'You are severely obese.'
+	elseif pcs_bmi >= 40 and bmi_pcs_bmicalc < 45:
+		$bmi_desc = 'You are very severely obese.'
+	elseif pcs_bmi >= 45:
+		$bmi_desc = 'You are morbidly obese.'
+	end
+end
+
 if $ARGS[0] = 'breasts':
 	!! If the PC has vastly less breast tissue than she does silicone, use a slightly more derogatory term. There is actually not a great way to calculate this; silicone counts almost the same on all body types, even though an increase of 200cc, for example, would be vastly
 	!! more noticeable on a thinner body than a heavier one. I have experimented with moving where the silicone is factored in to the body shape calculations, but ultimately there is just no better way to do it than how it is now, given the things that increase the amount
@@ -572,16 +603,13 @@ if $ARGS[0] = 'glasses':
 		$pc_desc['vision'] = func($this, 'ChooseDescWord', 'glasses', 'lenses')
 		$pc_descWordy['vision'] = 'chic, stylish glasses'
 		$glass = ' You wear glasses.'
-		glassvnesh = 0
 	elseif glass = 1:
 		$pc_desc['vision'] = func($this, 'ChooseDescWord', 'glasses', 'lenses', 'dorky glasses', 'geeky lenses')
 		$pc_descWordy['vision'] = 'cheap, utilitarian glasses'
 		$glass = ' You wear silly glasses in a cheap frame.'
-		glassvnesh = 10
 	else
 		glass = 0
 		$glass = ''
-		glassvnesh = 0
 	end
 end
 
@@ -884,22 +912,18 @@ if $ARGS[0] = 'legs':
     if pcs_leghair <= 0:
 		$pc_desc['legs'] = func($this, 'ChooseDescWord', 'smooth', 'silky', 'soft')
 		$pc_descWordy['legs'] = 'soft and silky-smooth'
-		legkoef = 0
 		$pcs_leghair = 'You have smooth legs.'
 	elseif pcs_leghair <= 3:
 		$pc_desc['legs'] = func($this, 'ChooseDescWord', 'slightly scratchy', 'faintly stubbly')
 		$pc_descWordy['legs'] = 'slightly rough, invisibly-stubbled'
-		legkoef = 3
 		$pcs_leghair = 'You can''t see any hair, but your legs feel rough to the touch.'
 	elseif pcs_leghair <= 6:
 		$pc_desc['legs'] = func($this, 'ChooseDescWord', 'somewhat hairy', 'lightly-furred')
 		$pc_descWordy['legs'] = 'lightly-furred, soft-haired'
-		legkoef = 6
 		$pcs_leghair = 'You have light and just barely visible hair on your legs.'
 	else
 		$pc_desc['legs'] = func($this, 'ChooseDescWord', 'hairy', 'unshaven', 'ungroomed')
 		$pc_descWordy['legs'] = 'hairy, unshaven'
-		legkoef = 9
 		$pcs_leghair = 'Your legs are hairy.'
 	end
 end
@@ -1187,4 +1211,22 @@ if $ARGS[0] = 'hair':
 	$pc_descWordy['hair'] = '<<$pc_desc[''hair status'']>>, <<$pc_descWordy[''hair length'']>> <<$pc_descWordy[''hair texture'']>> of <<$pc_descWordy[''hair colour'']>>'
 end
 
+if $ARGS[0] = 'appearance':
+	if pcs_apprnc = -10:
+		$pcs_apprnc = 'Your looks are even worse than terrible. It''s god-awful. No one wants to see or talk to you and people avoid you at any cost.'
+	elseif pcs_apprnc < 20:
+		$pcs_apprnc = 'Your looks are terrible. People try to avoid looking and talking to you.'
+	elseif pcs_apprnc < 60:
+		$pcs_apprnc = 'You''re a wallflower. Hardly anyone notices you.'
+	elseif pcs_apprnc < 120:
+		$pcs_apprnc = 'You have good looks. Men and women check you out when they think you aren''t looking.'
+	elseif pcs_apprnc < 160:
+		$pcs_apprnc = 'You''re unquestionably gorgeous. Men constantly get caught staring at you by their girlfriends.'
+	elseif pcs_apprnc < 200:
+		$pcs_apprnc = 'You have a simply stunning appearance. Other girls are a bit jealous and guys constantly check you out.'
+	else
+		$pcs_apprnc = 'Your appearance is divine! No one is able to take his or her eyes off of you.'
+	end
+end
+
 --- body_desc ---------------------------------

+ 0 - 639
locations/body_shape.qsrc

@@ -1,639 +0,0 @@
-# body_shape
-
-!!vhips = derived from salo in body_shape
-!!vhtmp = slows the change to vhips in body_shape
-!!wratio = waist to hips ratio set in body_shape
-!!bratio = band to waist ratio set in body_shape
-!!hratio = hip to height ratio set in body_shape
-!!vofat = used as a place to put extra salo at extreme high values (i.e. really, really fat) set in body_shape
-!!nbsize = starts at a set genetic bust size, but can be adjusted down if salo drops too low
-!!magicf2b = set in body_shape for the fat moved to bust
-!!genbsize = the set genetic bust size
-!!salocatnow = the current category of salo
-!!salocatlast = the previous category of salo
-!!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 
-!!btwarn = 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
-!!sftrstflag = used to prevent a code chunk from firing on a soft 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
-
-if $ARGS[0] = '':
-	!!This controls the gradual change in stat to -buf
-	if strenbuf > pcs_stren: strenbuf -= 1
-	if strenbuf < pcs_stren: strenbuf += 1
-	if vitalbuf > pcs_vital: vitalbuf -= 1
-	if vitalbuf < pcs_vital: vitalbuf += 1
-	if agilbuf > pcs_agil: agilbuf -= 1
-	if agilbuf < pcs_agil: agilbuf += 1
-
-	!!All the ratios were rounded to 2 digits and there are divide 100s at the final calc points
-	!!Waist to hip ratio
-
-	wrtemp = ((2 * vitalbuf + strenbuf + agilbuf) /4)
-
-	!!	Primary wratio handling
-	if wrtemp < 11:
-		wratio = 85 + (11 - (vitalbuf + strenbuf + agilbuf)/3)
-	elseif wrtemp < 20:
-		wratio = 85
-	elseif wrtemp < 35:
-		wratio = 85 - (wrtemp - 20) / 3
-	elseif wrtemp < 55:
-		wratio = 80 - (wrtemp - 35) / 4
-	elseif wrtemp < 80:
-		wratio = 75 - (wrtemp - 55) / 5
-	elseif wrtemp >= 80:
-		wratio = 70
-	end
-
-	!!	High stat value edge case handling
-	if (vitalbuf + strenbuf + agilbuf) /3 > 100: wratio -= ((vitalbuf + strenbuf)/2 - agilbuf)/5
-
-	!!	This is the oops and high stat gone overboard handling
-	if wratio < 65: wratio = 65
-
-	killvar 'wrtemp'
-
-	!!For band to waist ratio
-	brtemp = (2 * strenbuf + vitalbuf + agilbuf) /4
-
-	if brtemp < 10:
-		bratio = 105
-	elseif brtemp =< 23:
-		bratio = 106
-	elseif brtemp =< 80:
-		bratio = 106 + (brtemp - 23) / 3
-	else
-		bratio = 125
-	end
-
-	killvar 'brtemp'
-
-	!!For hip to height ratio which is used to set the center point
-	hrtemp = (2 * agilbuf + vitalbuf + strenbuf) /4
-
-	if hrtemp < 35:
-		hratio = 60
-	elseif hrtemp < 45:
-		hratio = 59
-	elseif hrtemp < 60:
-		hratio = 58
-	elseif hrtemp < 80:
-		hratio = 57
-	else
-		hratio = 56
-	end
-
-	killvar 'hrtemp'
-
-	!!Salo Handling; the first part is because during a reset fat is not used and should be cleared
-	if sftrstflag = 1 or cheatNoFat = 1:
-		fat = 0
-	else
-		if fat > (17 + vitalbuf / 25): salo += 1 & fat = 0
-		if fat < (-2 - (vitalbuf / 10)): salo -= 1 & fat = 0
-	end
-
-	!!This is the salo cap for the weight approximation
-	if salo > 250: salo = 250
-		
-	!!This calculates the current salo category; ranges are 20 points, seemed to balance best if the range is x10 the hip devisor
-	:salocatloop
-	if salo < 10:
-		salocatnow = 0
-	else
-		salocatnow = 1 + (salo - 10) / 20
-	end
-
-	!!This resets the genetic bust size (genbsize) when the cheat is used to reduce breast size (maybe other things later)
-	if titreduc = 1:
-		killvar 'titreduc'
-		if genbsize > nbsize:
-			genbsize = 2 + nbsize - nbsize mod 5
-		end
-	end
-
-	!!This controls the movement of salo to/from bust in order of precedence
-	if salobustdo = 0 and nbsize < genbsize and salocatnow > 2:
-		if sftrstflag = 0:'<b>Your breasts seem fuller.</b>'
-		nbsize += 1
-		salo -= 3
-		salobustdo = 1
-		jump 'salocatloop'
-	end
-
-	if salobustdo = 0 and magf2bdo = 1 and salocatnow > salocatlast and pcs_mana >= manamax / 2 and magikDostup = 0:
-		if sftrstflag = 0:'<b>Your breasts seem fuller.</b>'
-		magicf2b += 1
-		salo -= 3
-		salobustdo = 1
-		if magicf2b >= 2 + magtarcup * 5: magf2bdo = 0
-		if pcs_magik < 20:
-			pcs_mana -= 2000 / pcs_magik
-		else
-			mana -= 100
-		end
-		jump 'salocatloop'
-	end
-
-	if salobustdo = 0 and salocatnow < 2 and salocatlast >= 2 and magicf2b > 0 and magikDostup = 0:
-		if sftrstflag = 0:'<b>Your breasts seem to be getting smaller.</b>'
-		magicf2b -= 1
-		salo += 3
-		salobustdo = 1
-		magf2bdo = 1
-		jump 'salocatloop'
-	end
-
-	if salobustdo = 0 and salocatnow < 1 and salocatlast >= 1 and nbsize > 0:
-		if sftrstflag = 0:'<b>Your breasts seem to be getting smaller.</b>'
-		nbsize -= 1
-		salo += 3
-		salobustdo = 1
-		jump 'salocatloop'
-	end
-
-	!!This sets which image set is to be used when the override is not set
-	if bdsetlock = 0:
-		if (knowpreg = 1 or (preg = 1 and thinkpreg = 1) or (preg = 1 and PregChem > 3600)):
-			bodset = 3
-		elseif strenbuf >= 70:
-			bodset = 2
-		elseif strenbuf <= 40:
-			bodset = 0
-		else
-			bodset = 1
-		end
-	else
-		bodset = fixbodset
-	end
-
-	!!This is if a Succubus has salo < 1
-	if succubusflag = 1 and salo < 1:
-		sucexcess -= 1
-		salo += 3
-	end
-
-	!!This is if salo is still < 1
-	if salo < 1:
-		if fat >= 1:
-			salo = 1
-			fat -= 1
-		elseif fat <= 0 and pcs_stren + pcs_vital > 0:
-			stren_deg -= 1000
-			vital_deg -= 1000
-			salo = 1
-		else
-			if Enable_nogameover = 0:
-				over = 3
-				gt 'gameover'
-				exit
-			else
-				pl '<font color=red><B>You starved to death, but Cheat Mode keeps you Alive.</B></font>'
-				salo = 1
-			end
-		end
-	end
-
-	killvar 'tempvct' & killvar 'salobustdo'
-
-	!!This is the hip calcs, 80 is the center of the current max-min range (10 - 130)
-	vhtmp = (salo - 80) / 2
-	
-	if vhips > vhtmp: vhips -= 1
-	if vhips < vhtmp: vhips += 1
-	!!	Because a reset should be updating hip size instantly (this set is a bit redundant anyway)
-	if sftrstflag = 1: vhips = vhtmp
-
-	if (pcs_hgt * hratio) / 100 + vhips > (pcs_hgt * 72) / 100:
-		vofat = ((pcs_hgt * hratio) / 100 + vhips - (pcs_hgt * 72) / 100) / 2
-		vhips -= vofat * 2
-	end
-
-	!!This will trigger the warning notices in the bathing code (the +/- 12 should always be +/- 11 + the max change to salo w/ fat)
-	if salolast > salo and salo <= 12 + (20 * (salocatnow - 1)): btwarn = 1
-	if salolast < salo and salo >= (20 * (salocatnow + 1)) - 12: btwarn = 2
-
-	!!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 salolast < salo and salo >= (20 * (salocatnow + 1)) - 11 and tits < 10:
-			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 > salo: salolast -= 1
-	if salolast < salo: salolast += 1
-
-	!!Setting the pcs_apprnc bonus based on fat and strength
-	bmi_calc = FUNC('body_shape', 'bmicalc')
-	bodykoef = FUNC('body_shape', 'setbodykoef')
-
-	!!This is to clean up unused variables
-	killvar 'normbuffpick' & killvar 'nrmbfpckct'
-	killvar 'vmeat' & killvar 'vfat' & killvar 'Kves' & killvar 'krost'
-	killvar 'koefvesbt' & killvar 'koefbt'
-end
-
-if $ARGS[0] = 'setbodykoef':
-	!!Setting the pcs_apprnc bonus based on fat and strength
-
-	if bmi_calc < 16:
-		!! severely underweight
-		tempbodykoef = 30
-    elseif bmi_calc < 19:
-		!! underweight
-		tempbodykoef = 65
-    elseif bmi_calc < 25:
-		!! healthy weight
-		tempbodykoef = 85
-    elseif bmi_calc < 30:
-		!! overweight
-		tempbodykoef = 75
-    elseif bmi_calc < 35:
-		!! moderately obese
-		tempbodykoef = 45
-    elseif bmi_calc < 40:
-		!! severely obese
-		tempbodykoef = 25
-    elseif bmi_calc < 45:
-		!! very severely obese
-		tempbodykoef = 5
-    else
-		!! morbidly obese
-		tempbodykoef = 0
-    end
-
-	if strenbuf >= 80:
-		tempbodykoef += 8
-	elseif strenbuf >= 60:
-		tempbodykoef += 10
-	elseif strenbuf >= 40:
-		tempbodykoef += 8
-	elseif strenbuf >= 20:
-		tempbodykoef += 5
-	else
-		tempbodykoef += 2
-	end
-
-	!!This modifies bodykoef for high or low salo values
-	if salocatnow = 0 or salocatnow >= 7:
-		tempbodykoef -= 8
-	elseif salocatnow = 1 or salocatnow = 6:
-		tempbodykoef -= 4
-	end
-
-	if vofat > 0: tempbodykoef -= vofat
-
-	result = tempbodykoef
-
-	killvar 'tempbodykoef'
-end
-
-if $ARGS[0] = 'bmicalc':
-	result = 10000 * (30 + salo / 2 + (pcs_hgt - 170) * 7 / 10) / (pcs_hgt * pcs_hgt)
-end
-
-if $ARGS[0] = 'bmiadjust':
-	tempValue = ARGS[1] & !!value to be adjusted
-	tempadjbmi_calc = ARGS[2] & !!bmi_calc
-
-	if tempadjbmi_calc < 16:
-		!! severely underweight
-		tempValue = tempValue * 50 / 100
-    elseif tempadjbmi_calc < 19:
-		!! underweight
-		tempValue = tempValue * 95 / 100
-    elseif tempadjbmi_calc < 25:
-		!! healthy weight
-		!! normal bonus
-    elseif tempadjbmi_calc < 30:
-		!! overweight
-		tempValue = tempValue * 95 / 100
-    elseif tempadjbmi_calc < 35:
-		!! moderately obese
-		tempValue = tempValue * 80 / 100
-    elseif tempadjbmi_calc < 40:
-		!! severely obese
-		tempValue = tempValue * 55 / 100
-    elseif tempadjbmi_calc < 45:
-		!! very severely obese
-		tempValue = tempValue * 50 / 100
-    else
-		!!morbidly obese
-		tempValue = tempValue * 40 / 100
-    end
-
-	result = tempValue
-	killvar 'tempValue'
-	killvar 'tempadjbmi_calc'
-end
-
-if $ARGS[0] = 'softreset':
-	!!This is for use in immediately updating shape if something has caused a large change in salo, primarily fat burners and plastic surgery
-	sftrstflag = 1
-	:resetloop
-	if salo ! salolast:
-		if gmstrtflag = 1: salobustdo = 1
-		gs 'body_shape'
-		jump 'resetloop'
-	end
-	!!Updates pcs_apprncbase after a reset
-	gs 'body_shape', 'basebeautycalc', 1
-	!!Clears the warning and reset status flags if they were set
-	sftrstflag = 0
-	btwarn = 0
-end
-
-if $ARGS[0] = 'hardreset':
-	!!This is primarily for canceling out "dounspell" and setting salo 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 and dounsplkil > 0:
-		salo = 12
-		fat = 0
-		agilbuf = pcs_agil & strenbuf = pcs_stren & vitalbuf = pcs_vital
-		salobustdo = 1 & sftrstflag = 1 & normbuffpick = -1
-		gs 'body_shape'
-		salo = (pcs_hips * 2) - ((pcs_hgt * hratio) / 50) + 80
-		if salo < 10:
-			salocatnow = 0
-		else
-			salocatnow = 1 + (salo - 10) / 20
-		end
-		salocatlast = salocatnow
-		salolast = salo
-		vhtmp = (salo - 80) / 2
-		vhips = vhtmp
-		if genbsize = 0 and nbsize > 0:
-			If nbsize >= 27:
-				genbsize = 27
-			else
-				genbsize = 2 + nbsize - nbsize mod 5
-			end
-		elseif genbsize = 0 and nbsize = 0 and silicone >= 20:
-			genbsize = 12 & nbsize = 12 & silicone -= 10
-		end
-		sftrstflag = 0 & normbuffpick = 0 & btwarn = 0 & magf2bdo = 0
-		killvar 'dounsplkil'
-		newbdsp = 1
-		dounspell = 0
-		gs 'body_shape', 'basebeautycalc', 1
-		gs 'body_shape'
-		gs 'stat'
-	else
-		'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.'
-	end
-end
-
-if $ARGS[0] = 'initial':
-	!!	Sets the genetic bust size if it was not set in the start routines
-	if genbsize = 0:
-		genbsize = 12 & nbsize = 12
-	else
-		nbsize = genbsize
-	end
-	agilbuf = pcs_agil & strenbuf = pcs_stren & vitalbuf = pcs_vital
-	normbuffpick = -1 & gmstrtflag = 1
-	!!	Calling soft reset will cause the main code to cycle up to the starting value of salo
-	gs 'body_shape', 'softreset'
-	!!	This sets/resets the controler variables
-	salocatlast = salocatnow
-	normbuffpick = 0 & magf2bdo = 0
-	killvar 'gmstrtflag'
-	newbdsp = 1
-	!!	This does all the body shape setting before the first stat call
-	pcs_hips = (pcs_hgt * hratio) / 100 + vhips
-	pcs_waist = (pcs_hips * wratio) / 100 + vofat
-	pcs_band = (pcs_waist * bratio) / 100 + vofat
-	pcs_bust = (pcs_waist * bratio) / 100 + nbsize + magicf2b + silicone
-	pcs_cupsize = pcs_bust - pcs_band
-	if pcs_cupsize <= 5:
-		tits = 0
-		$titsize = 'AA cup'
-	elseif pcs_cupsize <= 10:
-		tits = 1
-		$titsize = 'A cup'
-	elseif pcs_cupsize <= 15:
-		tits = 2
-		$titsize = 'B cup'
-	elseif pcs_cupsize <= 20:
-		tits = 3
-		$titsize = 'C cup'
-	elseif pcs_cupsize <= 25:
-		tits = 4
-		$titsize = 'D cup'
-	elseif pcs_cupsize <= 30:
-		tits = 5
-		$titsize = 'E cup'
-	elseif pcs_cupsize <= 35:
-		tits = 6
-		$titsize = 'F cup'
-	elseif pcs_cupsize <= 40:
-		tits = 7
-		$titsize = 'G cup'
-	elseif pcs_cupsize <= 45:
-		tits = 8
-		$titsize = 'H cup'
-	elseif pcs_cupsize <= 50:
-		tits = 9
-		$titsize = 'I cup'
-	elseif pcs_cupsize <= 55:
-		tits = 10
-		$titsize = 'J cup'
-	else
-		tits = 11
-		$titsize = 'K cup'
-	end
-		
-	!!pcs_weight: Svetas weight in kg 
-	!!Optimal Weight for a 170cm sveta (BMI: 20.76): 60 salo / 60kg
-	!!This is an approximation, so that a sveta with a different height has the same BMI for the same salo values.
-	!!The default height of 170 cm is used as a starting point for the approximation. The BMI deviates by 0.06 for a deviation of 10cm and 0.4 for a deviation of 20cm. 
-	
-	pcs_weight = 30 + salo / 2 + (pcs_hgt - 170) * 7 / 10
-	
-	!!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
-	
-	!!pcs_weight = (pcs_hgt * 62 / 170) + (vhips + (vofat * 2)) / 4 + tits
-	
-	!!BMI Calculation
-	bmi_calc = FUNC('body_shape', 'bmicalc')
-	
-	!!BMI Descriptions
-	if bmi_calc < 16:
-		$bmi_desc = 'You are severely underweight.'
-	elseif bmi_calc >= 16 and bmi_calc < 19:
-		$bmi_desc = 'You are underweight'
-	elseif bmi_calc >= 19 and bmi_calc < 25:
-		$bmi_desc = 'You have a normal, healthy weight.'
-	elseif bmi_calc >= 25 and bmi_calc < 30:
-		$bmi_desc = 'You are overweight.'
-	elseif bmi_calc >= 30 and bmi_calc < 35:
-		$bmi_desc = 'You are moderately obese.'
-	elseif bmi_calc >= 35 and bmi_calc < 40:
-		$bmi_desc = 'You are severely obese.'
-	elseif bmi_calc >= 40 and bmi_calc < 45:
-		$bmi_desc = 'You are very severely obese.'
-	elseif bmi_calc >= 45:
-		$bmi_desc = 'You are morbidly obese.'
-	end
-end
-
-if $args[0] = 'basebeautycalc':
-	if pcs_lashes <= 0: pcs_lashes = 0
-	pcs_HeadBonus = FUNC('body_shape', 'calcHeadBonus')
-	tempAttributeBonus = FUNC('body_shape', 'calcAttributeBonus')
-	pcs_apprncbase = FUNC('body_shape', 'basebeautycalc2', ARGS[1])
-
-	if ARGS[1] = 0:
-	!!	This is the rate of change limiter
-		if pcs_apprncbase > vneshtemp:
-			if pcs_apprncbase - 5 > vneshtemp:
-				pcs_apprncbase -= 5
-			elseif pcs_apprncbase - 3 > vneshtemp:
-				pcs_apprncbase -= 3
-			else
-				pcs_apprncbase -= 1
-			end
-		elseif pcs_apprncbase < vneshtemp:
-			if pcs_apprncbase + 5 < vneshtemp:
-				pcs_apprncbase += 5
-			elseif pcs_apprncbase + 3 < vneshtemp:
-				pcs_apprncbase += 3
-			else
-				pcs_apprncbase += 1
-			end
-		end
-		killvar 'vneshtemp'
-	end
-
-	killvar 'pcs_HeadBonus'
-	killvar 'tempAttributeBonus'
-end 
-
-if $ARGS[0] = 'calcHeadBonus':
-
-	!!	Setting Eyelashes bonus
-	if pcs_lashes <= 0:
-		resnicbonus = 0
-	elseif pcs_lashes = 1:
-		resnicbonus = 2
-	elseif pcs_lashes = 2:
-		resnicbonus = 5
-	elseif pcs_lashes = 3:
-		resnicbonus = 7
-	elseif pcs_lashes = 4:
-		resnicbonus = 8
-	elseif pcs_lashes = 5:
-		resnicbonus = 10
-	else
-		resnicbonus = 0		
-	end
-	resnicbonus = FUNC('body_shape', 'bmiadjust', resnicbonus, bmi_calc)
-
-	!!	Setting Eye Size bonus
-	if pcs_eyesize = 1:
-		glarazbonus = 1
-	elseif pcs_eyesize = 2:
-		glarazbonus = 3
-	elseif pcs_eyesize = 3:
-		glarazbonus = 2
-	else
-		glarazbonus = 0
-	end
-	glarazbonus = FUNC('body_shape', 'bmiadjust', glarazbonus, bmi_calc)
-
-	!!	Setting the Lip size bonus
-	if pcs_lip = 0:
-		lipbonus = -2
-	elseif pcs_lip = 1:
-		lipbonus = 0
-	elseif pcs_lip = 2:
-		lipbonus = 3
-	elseif pcs_lip = 3:
-		lipbonus = 5
-	else
-		lipbonus = 3
-	end
-	lipbonus = FUNC('body_shape', 'bmiadjust', lipbonus, bmi_calc)
-	
-	teethcalc = (5 * pcs_teeth)
-	if teethcalc < 0: teethcalc = FUNC('body_shape', 'bmiadjust', teethcalc, bmi_calc)
-
-	result = resnicbonus + glarazbonus + lipbonus - teethcalc
-
-end
-
-if $ARGS[0] = 'calcAttributeBonus':
-	tempAttributeBonus = (pcs_agil / 10) + (pcs_vital / 10)
-
-	result = FUNC('body_shape', 'bmiadjust', tempAttributeBonus, bmi_calc)
-	killvar 'tempAttributeBonus'
-end
-
-	!!This is the calculation for the base appearance if calling for testing always set ARGS[1] to 1
-if $args[0] = 'basebeautycalc2':
-	!!ARGS[1] reset pcs_apprncbase
-	!! result of pcs_HeadBonus
-	!! result of calcAttributeBonus
-
-
-	!!	Setting vidagebonus
-	vidagebonus = 100
-	if vidage < 20: vidagebonus = 60 + (2 * vidage)
-	if vidage > 30: vidagebonus = 160 - (2 * vidage)
-
-	!!	Preforming the calculation
-	skincalc = (pcs_skin * 2 / 5)
-	vneshtemp = vidagebonus * (skincalc + bodykoef + tempAttributeBonus + pcs_HeadBonus) / 100
-
-	!!	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)
-
-	!!	This is the first limiter
-		!!if vneshtemp > 100: vneshtemp = 100
-
-	!!	This adds the supernatural pcs_apprnc bonus; currently Bimbo and Succubus
-	vneshtemp += supnatvnesh
-
-	!!	This is for use when a reset is called for by setting args[1] = 1
-	if args[1] = 1: pcs_apprncbase = vneshtemp & killvar 'vneshtemp'
-
-	result = pcs_apprncbase
-
-	!!	This is to clean up variables only used here
-		!!do not kill vneshtemp here it gets killed in basebeautycalc
-	killvar 'skincalc'
-	killvar 'vidagebonus'
-	killvar 'tempHeadBonus'
-	killvar 'tempAttributeBonus'
-
-	!!	This is to unload old variables
-	killvar 'CloNaturalBeauty'
-	killvar 'CloBaseBeauty'
-	killvar 'skin'
-	killvar 'bimbobeauty'
-end
-
---- body_shape ---------------------------------
-

+ 5 - 96
locations/cikl.qsrc

@@ -341,18 +341,6 @@ gs 'fertility', 'birth_control'
 
 !!------------------------------------------------------------------------------------------------------------
 
-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
-end
-
-if age < 18 and rand (0,2) = 0 and pcs_leghair > 0: pcs_leghair -= 1
-
 if pcs_breath = 1:pcs_breath = 0
 
 if cheatNoEat = 1 and dounspell = 1:fat += 15
@@ -530,40 +518,6 @@ gs 'fame', 'deg'
 gs 'traits', 'overnight'
 
 
-!!------------------------------------------------------------------------------------------------------------
-!!	Maruda hair mod
-!!------------------------------------------------------------------------------------------------------------
-!! 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 < 1001 and hairgrowcht = 0:pcs_hairlng += 1
-
-if pcs_haircol ! nathcol:
-	dyefade -=1
-	if dyefade < 0: dyefade = 0
-	if dyefade > 0 and dyefade < 7: dyevmod = 5
-	if dyefade = 0: dyevmod = 15
-end
-
-!!pubic hair colouring
-!! pcs_pubecol = 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:
-	pcs_pubecol[3] -=1
-	if pcs_pubecol[3] < 0: pcs_pubecol[3] = 0
-	if pcs_pubecol[3] = 0: pcs_pubecol[2] = pcs_pubecol
-end
-
-if pcs_pubes < 2: pcs_pubecol[2] = pcs_pubecol
-
-if hscrunch > 0:
-	hscrunchrand = rand(1, 100)
-
-	if hscrunchrand <= 8:hscrunch -= 1
-end
-
 !!------------------------------------------------------------------------------------------------------------
 
 !! Clothing wear and tear
@@ -640,32 +594,6 @@ elseif painpub = 1:
 	end
 end
 
-!!---- 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
-
 
 prezikProver += 1
 if pirs_pain_ton > 0:pirs_pain_ton -= 1
@@ -699,28 +627,10 @@ inhib_flr = inhib_lvl
 
 gs 'stat_sklattrib', 'daycall'
 
-if dounspell = 1:
-	if strenbuf > 90:
-		strenbuf -= 2
-	elseif strenbuf > 80:
-		strenbuf -= 1
-	end
-
-	if vitalbuf > 90:
-		vitalbuf -= 2
-	elseif vitalbuf > 80:
-		vitalbuf -= 1
-	end
-
-	if strenbuf > pcs_stren: strenbuf -= 1
-	if strenbuf < pcs_stren: strenbuf += 1
-	if vitalbuf > pcs_vital: vitalbuf -= 1
-	if vitalbuf < pcs_vital: vitalbuf += 1
-	if agilbuf > pcs_agil: agilbuf -= 1
-	if agilbuf < pcs_agil: agilbuf += 1
-else
-	gs 'body_shape'
-end
+!Update body measurements and base appearnce
+gs 'body', 'DailyUpdate'
+gs 'AppearanceSystem', 'UpdateBaseAppearnce'
+gs 'body_desc'
 
 
 if husband > 0 and husbandrink ! 11:husbandrink = rand(0, 10)
@@ -1317,8 +1227,7 @@ elseif mentats_dose > 1:
 	mentats_dose = 0
 end
 
-!!Appearance base calculation call
-gs 'body_shape', 'basebeautycalc'
+
 
 !! vovan, from 1.2.5
 hunters_check = 0

+ 3 - 7
locations/city_clinic.qsrc

@@ -225,7 +225,7 @@ if $ARGS[0] = 'start':
 						*clr & cla
 						money -= zubpay
 						minut += 60
-						gs 'body_shape', 'basebeautycalc', 1
+						gs 'AppearanceSystem', 'UpdateBaseAppearnce'
 						gs 'stat'
 						if pcs_teeth > 0:
 							pcs_teeth = 0
@@ -243,7 +243,7 @@ if $ARGS[0] = 'start':
 						*clr & cla
 						karta -= zubpay
 						minut += 60
-						gs 'body_shape', 'basebeautycalc', 1
+						gs 'AppearanceSystem', 'UpdateBaseAppearnce'
 						gs 'stat'
 						if pcs_teeth > 0:
 							pcs_teeth = 0
@@ -1424,7 +1424,6 @@ if $ARGS[0] = 'lipPlus':
 	minut += 60
 	pcs_lip += 1
 	money -= 25000
-	gs 'body_shape', 'basebeautycalc', 1
 	gs 'stat'
 	'<center><img <<$set_imgh>> src="images/locations/city/residential/clinic/cosmeticsur.jpg"></center>'
 	'The surgeon has you strip, put on a gown and lie down on the table. He gives you a mask and tells you: "Just breathe in deeply... we''ll be done before you know it."'
@@ -1438,7 +1437,6 @@ if $ARGS[0] = 'lipMin':
 	minut += 60
 	pcs_lip -= 1
 	money -= 30000
-	gs 'body_shape', 'basebeautycalc', 1
 	gs 'stat'
 	'<center><img <<$set_imgh>> src="images/locations/city/residential/clinic/cosmeticsur.jpg"></center>'
 	'The surgeon has you strip, put on a gown and lie down on the table. He gives you a mask and tells you: "Just breathe in deeply... we''ll be done before you know it."'
@@ -1452,7 +1450,6 @@ if $ARGS[0] = 'eyePlus':
 	minut += 60
 	pcs_eyesize += 1
 	money -= 90000
-	gs 'body_shape', 'basebeautycalc', 1
 	gs 'stat'
 	'<center><img <<$set_imgh>> src="images/locations/city/residential/clinic/cosmeticsur.jpg"></center>'
 	'The surgeon has you strip, put on a gown and lie down on the table. He gives you a mask and tells you: "Just breathe in deeply... we''ll be done before you know it."'
@@ -1466,7 +1463,6 @@ if $ARGS[0] = 'eyeMin':
 	minut += 60
 	pcs_eyesize -= 1
 	money -= 90000
-	gs 'body_shape', 'basebeautycalc', 1
 	gs 'stat'
 	'<center><img <<$set_imgh>> src="images/locations/city/residential/clinic/cosmeticsur.jpg"></center>'
 	'The surgeon has you strip, put on a gown and lie down on the table. He gives you a mask and tells you: "Just breathe in deeply... we''ll be done before you know it."'
@@ -1481,7 +1477,7 @@ if $ARGS[0] = 'lyposuction':
 	salo -= 40
 	if salo < 11: salo = 11
 	money -= 75000
-	gs 'body_shape', 'softreset'
+	gs 'body', 'softreset'
 	gs 'stat'
 	'<center><img <<$set_imgh>> src="images/locations/city/residential/clinic/cosmeticsur.jpg"></center>'
 	'The surgeon has you strip, put on a gown and lie down on the table. He gives you a mask and tells you: "Just breathe in deeply... we''ll be done before you know it."'

+ 3 - 3
locations/din_van.qsrc

@@ -36,7 +36,7 @@ $showerdin = {
 			'Unfortunately, your false lashes don''t make it through the shower.'
 			false_lashes = 0
 			pcs_lashes = pcs_naturallashes
-			gs 'body_shape', 'basebeautycalc', 1
+			gs 'AppearanceSystem', 'UpdateBaseAppearnce'
 		end
 	end
 }
@@ -837,7 +837,7 @@ $basin = {
 			pcs_lashes = pcs_naturallashes
 			false_lashes = 0
 			minut += 5
-			gs 'body_shape', 'basebeautycalc', 1
+			gs 'AppearanceSystem', 'UpdateBaseAppearnce'
 			act 'Finish':menu_off = 0 & gt $loc, $loc_arg
 		end
 	end
@@ -1090,7 +1090,7 @@ if $ARGS[0] = 'private':
 		dynamic $toymanage
 	end
 
-	'<a href="exec:msg ''<center>Your weight is <<pcs_weight>> kg<br>Your body mass index (BMI) is <<bmi_calc>>.<br><<$bmi_desc>></center>''">Check weight on the scales</a>'
+	'<a href="exec:msg ''<center>Your weight is <<pcs_weight>> kg<br>Your body mass index (BMI) is <<pcs_bmi>>.<br><<$bmi_desc>></center>''">Check weight on the scales</a>'
 
 	gs 'din_van', 'prvt_pee'
 

+ 10 - 10
locations/foto.qsrc

@@ -299,12 +299,12 @@ if $ARGS[0] = 'studio':
 			elseif pcs_skin < 40:
 				'"Girl, your face is covered in acne unless you improve your appearance there is no chance of working here."'
 				act 'Leave':minut += 1 & gt 'city_center'
-			elseif bmi_calc >= foto_weight and foto_weight > 0:
+			elseif pcs_bmi >= foto_weight and foto_weight > 0:
 				'You walk up to the front desk and find the same man who interviewed you previously. He looks up at you from his computer as you approach and frowns.'
 				'Before you can say anything, he sternly says, "Girl, I told you to lose weight, not put it on! Now get out of here until you slim down some!"'
 				'The comment turns your face bright red and you stop in your tracks. He stares at you angrily until you slowly start to back up and head towards the door.'
 				act 'Leave':minut += 1 & gt 'city_center'
-			elseif bmi_calc < foto_weight and foto_weight > 0:
+			elseif pcs_bmi < foto_weight and foto_weight > 0:
 				gt'foto','interview2'
 			elseif fotofakepassport = 1 and age < 18:
 				'You walk up to the front desk and find the same man who "interviewed" you previously. He looks up at you from his computer as you approach.'
@@ -489,7 +489,7 @@ if $ARGS[0] = 'interview2':
 		gs 'willpower', 'skill', 'pcs_inhib', 'hard'
 	end
 	'<center><img <<$set_imgh>> src="images/locations/city/citycenter/photo/foto.jpg"></center>'
-	if bmi_calc < foto_weight:
+	if pcs_bmi < foto_weight:
 		'You walk up to the front desk and find the same man who interviewed you previously. He looks up at you from his computer as you approach.'
 		'"Hmm..." he says appraisingly. "You look like you lost some weight since the last time I saw you."'
 		'"Yes I did!" You smile brightly at him.'
@@ -539,8 +539,8 @@ if $ARGS[0] = 'interview2':
 			gs 'clothing', 'strip_all'
 			gs 'stat'
 			'<center><video autoplay loop src="images/locations/city/citycenter/photo/strip1.mp4"></video><video autoplay loop src="images/locations/city/citycenter/photo/strip2.mp4"></video></center>'
-			if bmi_calc < foto_weight and foto_weight > 0:
-				foto_weight = bmi_calc
+			if pcs_bmi < foto_weight and foto_weight > 0:
+				foto_weight = pcs_bmi
 				if foto_weight < 25: fotofit = 1
 				'You strip off your clothing for the photographer once again, holding your breath and hoping that you''ve slimmed down enough to work here now.'
 				'Just like before, he circles you, asks you to adjust your pose for him, carefully inspecting every aspect of your nude body.'
@@ -559,7 +559,7 @@ if $ARGS[0] = 'interview2':
 					'You nod in understanding.'
 				end
 				act'Continue':
-					if bmi_calc < 25 or hotcat >= 6:
+					if pcs_bmi < 25 or hotcat >= 6:
 						gt'foto','job_offer'
 					else
 						gt'foto','job_decline'
@@ -574,7 +574,7 @@ if $ARGS[0] = 'interview2':
 				'He circles you slowly, occasionally asking you to adjust your pose slightly, carefully inspecting every aspect of your nude body. Your <<$pcs_eyecol>> eyes framed by your <<$pcs_haircol>> hair, your <<$pc_desc[''lip size'']>>lip, your <<$titsize>> breasts, your <<$skin1>> <<$pcs_tan>> skin, your thighs, even your <<$pcdesc_pubes>> pussy...'
 				'He spends several minutes doing this without saying anything. Several people walk by while he does, including several beautiful and nude women who glance at you, whispering to each other before moving on.'
 				act'Continue':
-					if bmi_calc < 25 or hotcat >= 6:
+					if pcs_bmi < 25 or hotcat >= 6:
 						gt'foto','job_offer'
 					else
 						gt'foto','job_decline'
@@ -595,7 +595,7 @@ if $ARGS[0] = 'interview2':
 			'He spends several minutes doing this without saying anything. Several people walk by while he does, including several beautiful and nude women who glance at you, whispering to each other before moving on.'
 			'You blush furiously at the attention, both his and the other models.'
 			act'Continue':
-				if bmi_calc < 25 or hotcat >= 6:
+				if pcs_bmi < 25 or hotcat >= 6:
 					gt'foto','job_offer'
 				else
 					gt'foto','job_decline'
@@ -627,7 +627,7 @@ if $ARGS[0] = 'job_decline':
 			'<center><img <<$set_imgh>> src="images/locations/city/citycenter/photo/foto.jpg"></center>'
 			'You glumly pick your clothes up off the floor and get dressed before leaving. As you do, you stop at the door and look back in.'
 			'<i>Is this it for me? Am I ever going to be able to lose enough weight to work here?</i>'
-			foto_weight = bmi_calc
+			foto_weight = pcs_bmi
 			foto_cupsize = tits
 			gs 'clothing', 'wear_last_worn'
 			gs 'underwear', 'wear'
@@ -640,7 +640,7 @@ if $ARGS[0] = 'job_decline':
 			'<center><img <<$set_imgh>> src="images/locations/city/citycenter/photo/foto.jpg"></center>'
 			'You nod at him, feeling a bit dejected but more determined than ever. You get dressed with purpose and head to the door. As you do, you think to yourself...'
 			'<i>I will be able to do this! I''ll get in shape and I''ll work here one day! I''m not going to lose my shot at this!</i>'
-			foto_weight = bmi_calc
+			foto_weight = pcs_bmi
 			foto_cupsize = tits
 			gs 'clothing', 'wear_last_worn'
 			gs 'underwear', 'wear'

+ 1 - 1
locations/gadhouse.qsrc

@@ -305,7 +305,7 @@ if $ARGS[0] = 'main':
 	*nl
 	'A fairly simple cottage in the village of Gadukino which your grandparents call home. In the main room there is a huge <a href="exec:gt ''wardrobe'', ''start''">wardrobe</a> (where you can choose outfits and organize your clothing), and a <a href="exec:gad = 1 & gt ''bed'', ''start''">bed</a> where you can rest. The bed is more comfortable than it looks.'
 	'There is an old <a href="exec:gt ''TV'',''gad''">television</a> in the living room. It''s positioned next to a body length <a href="exec:gt ''mirror'', ''start''">mirror</a>.'
-	'You can check your weight on your grandma''s old mechanical <a href="exec:msg ''<center>Your weight is <<pcs_weight>> kg<br>Your body mass index (BMI) is <<bmi_calc>>.<br><<$bmi_desc>></center>''">scales</a>.'
+	'You can check your weight on your grandma''s old mechanical <a href="exec:msg ''<center>Your weight is <<pcs_weight>> kg<br>Your body mass index (BMI) is <<pcs_bmi>>.<br><<$bmi_desc>></center>''">scales</a>.'
 
 	if hour < 8:
 		temp = rand(0,9)

+ 8 - 8
locations/gschool_grounds.qsrc

@@ -519,10 +519,10 @@ if $ARGS[0] = 'SchoolRun':
 		wait 725
 
 		begminus = 0
-		if bmi_calc > 25: 
-			begminus = ((bmi_calc - 25)*4)
-		elseif bmi_calc < 18:
-			begminus = ((25 - bmi_calc)*6)
+		if pcs_bmi > 25: 
+			begminus = ((pcs_bmi - 25)*4)
+		elseif pcs_bmi < 18:
+			begminus = ((25 - pcs_bmi)*6)
 		end
         begresult = pcs_run - begminus
 		
@@ -631,10 +631,10 @@ if $ARGS[0] = 'SchoolRun2':
 		wait 725
 
 		begminus = 0
-		if bmi_calc > 25: 
-			begminus = ((bmi_calc - 25)*4)
-		elseif bmi_calc < 18:
-			begminus = ((25 - bmi_calc)*6)
+		if pcs_bmi > 25: 
+			begminus = ((pcs_bmi - 25)*4)
+		elseif pcs_bmi < 18:
+			begminus = ((25 - pcs_bmi)*6)
 		end
         begresult = pcs_run - begminus
 		

+ 1 - 1
locations/intro_initialization.qsrc

@@ -101,7 +101,7 @@ nathcol = pcs_haircol
 pcs_pubecol = pcs_haircol & pcs_pubecol[1] = 1
 oldsavepcs_haircol = 1
 
-gs 'body_shape', 'initial'
+gs 'body', 'initial'
 
 !! Adding underwear and default shoes and assigning them
 

+ 1 - 1
locations/lover_change.qsrc

@@ -1098,7 +1098,7 @@ if $ARGS[0] = 'Figure':
 								salo = 20 * figurePrefMin + 1
 								if salo < 11: salo = 11
 
-								gs 'body_shape', 'softreset'
+								gs 'body', 'softreset'
 								!!'<<salocatnow>> is the value for salocatnow, the value for fat is <<fat>>, and the value for salo is <<salo>>.'
 								
 							if salocatnow > figurePrefMax:jump 'loopfatRemover'

+ 1 - 1
locations/obj_din.qsrc

@@ -121,7 +121,7 @@ if $ARGS[0] = 'menu_disabled': '<font color="red"><b>Menu is disabled for this e
 if $ARGS[0] = 'description':
 	*clr & cla
 	gs 'obj_din','chartabs'
-	gs 'body'
+	gs 'AppearanceSystem'
 	gs 'body_desc'
 	!'<center><img src="images/system/icons/description.png"><br></center>'
 	'<center><h1>Character Description</h1></center>'

+ 2 - 2
locations/pav_clinic.qsrc

@@ -162,7 +162,7 @@ if $ARGS[0] = '':
 							*clr & cla
 							money -= zubpay
 							minut += 60
-							gs 'body_shape', 'basebeautycalc', 1
+							gs 'AppearanceSystem', 'UpdateBaseAppearnce'
 							gs 'stat'
 							if pcs_teeth > 0:
 								pcs_teeth = 0
@@ -180,7 +180,7 @@ if $ARGS[0] = '':
 							*clr & cla
 							karta -= zubpay
 							minut += 60
-							gs 'body_shape', 'basebeautycalc', 1
+							gs 'AppearanceSystem', 'UpdateBaseAppearnce'
 							gs 'stat'
 							if pcs_teeth > 0:
 								pcs_teeth = 0

+ 1 - 1
locations/pav_lake.qsrc

@@ -243,7 +243,7 @@ if temper >= 15 and month >= 5 and month <= 9 and hour >= 6 and hour <= 20:
 		elseif PCloswimwear = 1:
 			if pcs_hips >= 110:
 				'<center><img <<$set_imgh>> src="images/locations/pavlovsk/lake/lake.walk.bikini.fat0,1.jpg"></center>'
-			elseif bmi_calc > 24:
+			elseif pcs_bmi > 24:
 				'<center><img <<$set_imgh>> src="images/locations/pavlovsk/lake/lake.walk.bikini.fat0,0.jpg"></center>'
 			else
 				'<center><img <<$set_imgh>> src="images/locations/pavlovsk/lake/lake.walk.bikini0,'+rand(0,3)+'.jpg"></center>'

+ 1 - 1
locations/preCUST.qsrc

@@ -366,7 +366,7 @@ if $ARGS[0] = 'Done':
 	pcs_pubecol = pcs_haircol & pcs_pubecol[1] = 1
 	oldsavepcs_haircol = 1
 
-	gs 'body_shape', 'initial'
+	gs 'body', 'initial'
 
 !! Adding underwear and default shoes and assigning them
 

+ 5 - 5
locations/salon.qsrc

@@ -1122,7 +1122,7 @@ if $ARGS[0] = 'lashTreatment':
 	else
 		money -= 5000
 	end
-	gs 'body_shape', 'basebeautycalc', 1
+	gs 'AppearanceSystem', 'UpdateBaseAppearnce'
 	
 	gs 'stat'
 	'The specialist collects your payment and moves you over to a chair with a headrest, which she has you tilt your head back up against.'
@@ -1155,7 +1155,7 @@ if $ARGS[0] = 'lashFalsies':
 		end
 		'She spends a few minutes selecting and trimming a set of ornate, dramatically-feathered false lashes to get them to line up neatly with your own natural set, and with practiced ease she glues them delicately in place, only having to give them one or two gentle, settling nudges.'
 	end
-	gs 'body_shape', 'basebeautycalc', 1
+	gs 'AppearanceSystem', 'UpdateBaseAppearnce'
 	gs 'stat'
 	'"There you go! You''re all set! Have fun with wherever you''re going!"'
 	act 'Leave':gt 'salon', 'start'
@@ -1262,7 +1262,7 @@ if $ARGS[0] = 'lashExtension':
 		killvar 'lashextensionduration'
 		killvar 'lashextensionstyle'
 	end
-	gs 'body_shape', 'basebeautycalc', 1
+	gs 'AppearanceSystem', 'UpdateBaseAppearnce'
 	gs 'stat'
 	'After what seems like forever, you''re finally allowed to open your eyes and take a look.'
 	act 'Leave':gt 'salon', 'start'
@@ -1577,7 +1577,7 @@ if $ARGS[0] = 'skin_care':
 	else
 		money -= 5000
 	end
-	gs 'body_shape', 'basebeautycalc', 1
+	gs 'AppearanceSystem', 'UpdateBaseAppearnce'
 	gs 'stat'
 	'<center><img <<$set_imgh>> src="images/locations/city/citycenter/mall/salon/facialmask.jpg"></center>'
 	'You get a beauty mask treatment, afterwards your face feels smooth and your skin tight.'
@@ -1594,7 +1594,7 @@ if $ARGS[0] = 'rejuvination':
 	else
 		money -= 25000
 	end
-	gs 'body_shape', 'basebeautycalc', 1
+	gs 'AppearanceSystem', 'UpdateBaseAppearnce'
 	gs 'stat'
 	'<center><img <<$set_imgh>> src="images/locations/city/citycenter/mall/salon/bodyscrub.jpg"></center>'
 	'You get a full body rejuvenation procedure, afterwards your skin feels soft and silky smooth.'

+ 19 - 1
locations/stat.qsrc

@@ -1031,9 +1031,27 @@ elseif rape > 0 and rape ! rape_count and orgasm > 0 and orgasm ! orgasm_count:
 	orgasm_count = orgasm
 	rape_count = rape
 end
+!! Drug stats
+if StrongNarkota <= 0:
+	if SNarkTimes >= 3 and SLomka = 0:SLomka = 1
+end
+
+if amphCount > 3 and amphHigh <= 0:
+	addictChance = rand(1,10)
+	if addictChance > 8:
+		amphWithdrawl = 2
+	end
+end
+
+if StrongNarkota > 0:
+	if SLomka > 0:SLomka = 0
+	pcs_mood = 100
+end
 
 !!Health, Willpower, Auto Birth Control pregnancy check
-gs 'body'
+gs 'body', 'RegularUpdate'
+gs 'AppearanceSystem'
+gs 'body_desc'
 
 if pcs_health >= healthmax:
 	$pcs_health = '<font color="green">You are very healthy.</font>'

+ 1 - 1
locations/tatiana_lab.qsrc

@@ -383,7 +383,7 @@ if $ARGS[0] = 'Tatiana':
 					cla
 					minut += 30
 					dounspell = 1
-					gs 'body_shape', 'hardreset'
+					gs 'body', 'hardreset'
 					gs 'stat'
 					'<center><img <<$set_imgh>> src="images/characters/city/tatiana/magiclook.jpg"></center>'
 					'Tatiana lowers her glasses and stares deeply into your eyes. It feels like time just stops being a thing and you are floating.'