# 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 
!!normbuffpick = sets the status of using normal or buff body images and calculation
!!nrmbfpckct = used to count the number of times a switch to buff was turned down and stop asking after 3
!!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

if $ARGS[0] = '':
!!Fall of muscularity over time
	if stren >= 26 and vital >= 26 and sftrstflag = 0:
		if downmusl >= 5:
			downmusl = 0
			stren -= 1
			vital -= 1
			agil -= 1
			fat += 5
		else
			downmusl += rand (0,1)
		end
	end

!!This controls the gradual change in stat to -buf
	if strenbuf > stren: strenbuf -= 1
	if strenbuf < stren: strenbuf += 1
	if vitalbuf > vital: vitalbuf -= 1
	if vitalbuf < vital: vitalbuf += 1
	if agilbuf > agil: agilbuf -= 1
	if agilbuf < 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
	if (vitalbuf + strenbuf + agilbuf) /3 < 11:
		wratio = 85 + (11 - (vitalbuf + strenbuf + agilbuf)/3)
	elseif (vitalbuf + strenbuf + agilbuf) /3 > 100:
		wratio = 70 - ((vitalbuf + strenbuf)/2 - agilbuf)/5
	end

	wrtemp = ((2 * vitalbuf + strenbuf + agilbuf) /4)
	if wrtemp >= 11 and wrtemp < 20: wratio = 85
	if wrtemp >= 20 and wrtemp < 35: wratio = 85 - (wrtemp - 20) / 3
	if wrtemp >= 35 and wrtemp < 55: wratio = 80 - (wrtemp - 35) / 4
	if wrtemp >= 55 and wrtemp < 80: wratio = 75 - (wrtemp - 55) / 5
	if wrtemp >= 80 and (vitalbuf + strenbuf + agilbuf) /3 <= 100: wratio = 70

	if wratio < 65: wratio = 65
	killvar 'wrtemp'

!!Setting the vnesh bonus based on wratio
	if wratio >= 85: bodykoef = 0
	if wratio < 85 and wratio >= 80: bodykoef = 2
	if wratio < 80 and wratio >= 75: bodykoef = 4
	if wratio < 75 and wratio >= 70: bodykoef = 8
	If wratio <= 69: bodykoef = 4

!!For band to waist ratio
	brtemp = (2 * strenbuf + vitalbuf + agilbuf) /4
	if brtemp < 10: bratio = 105
	if brtemp >= 10 and brtemp =< 23: bratio = 106
	if brtemp > 23 and brtemp =< 80: bratio = 106 + (brtemp - 23) / 3
	if brtemp > 80: bratio = 125
	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
	if hrtemp >= 35 and hrtemp < 45: hratio = 59
	if hrtemp >= 45 and hrtemp < 60: hratio = 58
	if hrtemp >= 60 and hrtemp < 80: hratio = 57
	if hrtemp >= 80: hratio = 56
	killvar 'hrtemp'

!!Salo Handling
	if salo > fat: salo -= 1
	if salo < fat: salo += 1

!!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 controls the movement of salo to/from bust in order of precedence
	if salobustdo = 0 and nbsize < genbsize and salocatnow > 2:
		nbsize += 1
		salo -= 3
		salobustdo = 1
		jump 'salocatloop'
	end

	if salobustdo = 0 and magf2bdo = 1 and salocatnow > salocatlast and manna >= mannamax / 2:
		magicf2b += 1
		salo -= 3
		salobustdo = 1
		if magicf2b >= 2 + magtarcup * 5: magf2bdo = 0
		if magik < 20:
			manna -= 2000 / magik
		else
			mana -= 100
		end
		jump 'salocatloop'
	end

	if salobustdo = 0 and salocatnow < 2 and salocatlast >= 2 and magicf2b > 0:
		magicf2b -= 1
		salo += 3
		salobustdo = 1
		magf2bdo = 1
		jump 'salocatloop'
	end

	if salobustdo = 0 and salocatnow < 2 and salocatlast >= 2 and nbsize > 0:
		nbsize -= 1
		salo += 3
		salobustdo = 1
		jump 'salocatloop'
	end

!!This is for switching to and from the normal and buff image sets (& vital resisting salo w/ buff set)
	if normbuffpick = 0 and salocatnow <= 2 and (strenbuf + agilbuf) >= 50: normbuffpick = 1
	if normbuffpick = 1 and nrmbfpckct >= 3: normbuffpick = -1
	if normbuffpick >= 1 and salocatnow > 2 and vitalbuf >= 25:
		if vitalbuf / 25 > tempvct:
			tempvct += 1
			salo -= 1
			jump 'salocatloop'
		else
			normbuffpick = 0
		end
	end
!!Note: normbuffpick = 1 will trigger the bathing option scene and three nos there will set normbuffpick = -1; until a choice is made, will behave as =2

!!This is if salo is still < 1 (will add code for Succubus here later)
	if salo < 1:
		if fat >= 1:
			salo = 1
			if fat > 1: fat -= 1
		elseif fat <= 0 and stren + vital > 0:
			stren -= 1
			vital -= 1
			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)
	if normbuffpick = 2:
		vhtmp = (strenbuf - agilbuf) / 2
	else
		vhtmp = (salo - 80) / 2
	end
	if vhips > vhtmp: vhips -= 1
	if vhips < vhtmp: vhips += 1

	if (rost * hratio) / 100 + vhips > (rost * 72) / 100:
		vofat = ((rost * hratio) / 100 + vhips - (rost * 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 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
	if salolast > salo: salolast -= 1
	if salolast < salo: salolast += 1

!!This accounts for higher Stats burning more fat during the day (the plus 5 is to give some working room)
	if salo + 5 < fat:
		if salo + 5 < fat - ((agilbuf + strenbuf + vitalbuf)/30):
			fat -= (agilbuf + strenbuf + vitalbuf)/30
		else
			fat = salo + 5
		end
	end

end

if $ARGS[0] = 'softreset':
!!This is for use in immediately updating shape if something has forced salo = fat by
!!cycling the main code the number of times it would have normally w/ a change in fat
	sftrstflag = 1
	:resetloop
	if fat ! salo:
		if gmstrtflag = 1: salobustdo = 1
		gs 'body_shape'
		jump 'resetloop'
	end
!!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:
		fat = 12 & salo = 12
		agilbuf = agil & strenbuf = stren & vitalbuf = vital
		salobustdo = 1 & sftrstflag = 1 & normbuffpick = -1
		gs 'body_shape'
		salo = (bedra * 2) - ((rost * hratio) / 50) + 80
		fat = salo
		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'
		gs 'stat'
	else
		'If you''re seeing this, something odd happened.'
	end
end

if $ARGS[0] = 'initial':
	if fat ! salo: fat = salo
	if fat <= 0: fat = 80
	if genbsize = 0:
		genbsize = 12 & nbsize = 12
	else
		nbsize = genbsize
	end
	agilbuf = agil & strenbuf = stren & vitalbuf = vital
	normbuffpick = -1 & gmstrtflag = 1
	salo = 0
	gs 'body_shape', 'softreset'
	salocatlast = salocatnow
	normbuffpick = 0 & magf2bdo = 0
	killvar 'gmstrtflag'
	newbdsp = 1
	gs 'stat'
end

--- body_shape ---------------------------------

