6 Commits ba9aefbda1 ... 7a90c4f25f

Author SHA1 Message Date
  Lurk_Morrison 7a90c4f25f Merge branch 'master' of https://git.catrenelle.com/Kevin_Smarts/glife into lurk 5 years ago
  KevinSmarts b9fd7a95ba [fixed] Added a means to set safe for STDs to cum_management and used it to clean up the porn studio. 5 years ago
  KevinSmarts 36a2c51279 [fixed] Missing $loc and $metka data added to 'foto' file. 5 years ago
  KeyMasterOfGozer ddd9a31d9e Merge branch 'master' of https://git.catrenelle.com/Kevin_Smarts/glife 5 years ago
  KeyMasterOfGozer 88624c3d64 Added Spell Prerequisites 5 years ago
  KevinSmarts b6340a35cd [added] chance to orgasm from any stimulation if buildup is too high 5 years ago

+ 7 - 4
locations/Cum_Manage.qsrc

@@ -68,7 +68,9 @@
 !!	cumarrkno =  0 : 'You know somebody got sperm in you, but you don''t know that person'
 !!	cumarrkno =  1 : 'You know who got sperm in you'
 !!
+!!	Setting for no STD checks
 !!
+!!	cumnostd = 1 : No risk of STD, resets at end of file so must be used for all related cum_management calls
 !!
 !!	Locations to be defined by 'spafinloc'
 !!
@@ -122,7 +124,7 @@ if $ARGS[0] = '':
 !!{Check for previous deposit, and if it was by the same guy and precum, it sets cumarrtemp back by one}
 !!	if $cumarrnam[cumarrtemp-1] = $boy and cumarrkno[cumarrtemp-1] = -1:cumarrtemp -= 1 & sexspecpot = cumarrppt[cumarrtemp]
 
-	if cumprecheck = 1:
+	if cumprecheck = 1 and cumnostd = 0:
 		cumarrkno[cumarrtemp] = -1
 		gs 'dinSex', 'std_trigger'
 	elseif sexunaware > 0:
@@ -350,7 +352,7 @@ if $ARGS[0] = '':
 	!! creampie vaginal statistics:
 			if spafinloc = 0:
 				!!STD checks
-				gs 'dinSex', 'std_trigger'
+				if cumnostd = 0: gs 'dinSex', 'std_trigger'
 				!! safe creampie (if cycle > 3 or on pill or succubus):
 				if cycle > 3 or pillcon2 > 1000 or succubusflag = 1:
 					if sexunaware = 1 or sexcontra = 6:
@@ -464,9 +466,9 @@ if $ARGS[0] = '':
 	end
 
 	!!STD from anal check
-	if spafinloc = 3: gs 'dinSex', 'std_trigger'
+	if spafinloc = 3 and cumnostd = 0: gs 'dinSex', 'std_trigger'
 	!!STD from oral check
-	if spafinloc = 12: gs 'dinSex', 'std_trigger_oral'
+	if spafinloc = 12 and cumnostd = 0: gs 'dinSex', 'std_trigger_oral'
 
 	cumprecheck = 0
 	spafinloc = 0
@@ -488,6 +490,7 @@ if $ARGS[0] = '':
 
 	end
 	killvar 'sexspecpot'
+	killvar 'cumnostd'
 end
 
 

+ 5 - 2
locations/arousal.qsrc

@@ -621,6 +621,9 @@ if $ARGS[0] ! 'end' and $ARGS[0] ! 'checks' and $ARGS[0] ! 'count' and $ARGS[0]
 			gs 'orgasm', $ARGS[0]
 		end
 	end
+
+	if $orgasm_or ! 'no' and orgasm_buildup >= 300 and pcs_horny >= 60: gs 'orgasm', $ARGS[0]
+
 	killvar 'temp_dick'
 	killvar 'temp_unaware'
 	killvar '$orgasm_txt'
@@ -632,9 +635,9 @@ end
 !!-----------------------------------------------
 
 if $ARGS[0] = 'end':
-	if orgasm_buildup > 250: orgasm_buildup = 250
+	if orgasm_buildup > 350: orgasm_buildup = 350
+	if orgasm_buildup > 300: orgasm_buildup -= 10
 	if orgasm_buildup > 200: orgasm_buildup -= 10
-	if orgasm_buildup > 150: orgasm_buildup -= 10
 	if orgasm_buildup > 100: orgasm_buildup -= 10
 	if stim['lesbian'] = 1: lesbian += 1
 	if stim['hidden_lesbian'] = 1: hidden_lesbian += 1

+ 69 - 81
locations/downlibrary.qsrc

@@ -8,7 +8,39 @@ menu_off = 0
 $location_type = 'public_indoors'
 frost = 0
 gs 'stat'
-	gs 'themes', 'indoors'
+gs 'themes', 'indoors'
+
+! Stuff to do on Studying a Book
+!	$ARGS[0] = Skill to Check
+$downlibrary['BookStudy'] = {
+	$downlibrary['Skill'] = $ARGS[0]
+	*clr & cla
+	menu_off = 1
+	if blizoruk = 100 or glassqw = 1:
+		glassqw = 1
+		msg'	The text blurs across the page, it seems you have poor eyesight. Maybe you should visit an ophthalmologists.'&gt $curloc
+	end
+	if pcs_nerd > 0:
+		lastread = totminut
+		lastreadday = daystart
+		pcs_nerd += 1
+	end
+	minut += 60
+	if $downlibrary['Skill'] ! '':
+		dynamic "
+			if pcs_<<$downlibrary['Skill']>> >= 50:
+				<<$downlibrary['Skill']>>_exp += RAND(0,1)
+			elseif pcs_<<$downlibrary['Skill']>> >= 25:
+				<<$downlibrary['Skill']>>_exp += RAND(1,2)
+			else
+				<<$downlibrary['Skill']>>_exp += RAND(1,3)
+			end"
+	end
+
+	blizoruk += 1
+	gs'stat'
+}
+
 '<center><b><font color="maroon">National Library of Russia</font></b></center>'
 '<center><img <<$set_imgh>> src="images/locations/city/citycenter/library/downlibint.jpg"></center>'
 'A huge library with thousands upon thousands of books. You could spend years here and you probably still wouldn''t be able to read it all.'
@@ -17,118 +49,74 @@ act 'Leave the library': minut += 5 & gt 'down'
 
 if hour >= 8 and hour <= 18:
 	act 'Read a science book (1:00)':
-		*clr & cla
-		menu_off = 1
-		if blizoruk = 100 or glassqw = 1:
-		glassqw = 1
-		msg'The text blurs across the page, it looks like you have got poor eyesight. It would be suitable to visit an ophthalmologists.'&gt $curloc
-		end
-		if pcs_nerd > 0:
-			lastread = totminut
-			lastreadday = daystart
-			pcs_nerd += 1
-		end
-		minut += 60
 		if pcs_intel >= 50:
-			intel_exp += RAND(1,2) + (mentats_dose - rand(0,mentats_dose))
+			intel_exp += RAND(0,1) + (mentats_dose - rand(0,mentats_dose))
 		elseif pcs_intel >= 25:
-			intel_exp += RAND(2,3) + (mentats_dose - rand(0,mentats_dose))
+			intel_exp += RAND(1,2) + (mentats_dose - rand(0,mentats_dose))
 		else
-			intel_exp += RAND(3,4) + (mentats_dose - rand(0,mentats_dose))
+			intel_exp += RAND(1,3) + (mentats_dose - rand(0,mentats_dose))
 		end
 
-		blizoruk += 1
-		gs'stat'
+		dynamic $downlibrary['BookStudy'], ''
 
-		'You read the book for an hour trying to make sense of all clever propositions and understand the subject of the description.'
+		'	You read the book for an hour trying to make sense of all clever propositions and understand the subject of the description.'
 
 		act 'Put the book down':gt $curloc
 	end
 
 	act 'Read an entertaining book (1:00)':
-		*clr & cla
-		menu_off = 1
-		if blizoruk = 100 or glassqw = 1:
-		glassqw = 1
-		msg'The text blurs across the page, it looks like you have got poor eyesight. It would be suitable to visit an ophthalmologists.'&gt $curloc
-		end
-		if pcs_nerd > 0:
-			lastread = totminut
-			lastreadday = daystart
-			pcs_nerd += 1
-		end
-		minut += 60
 		pcs_mood = 100
 		pcs_willpwr += 100
-		blizoruk += 1
-		gs'stat'
 
-		'You read an adventure fiction for an hour.'
+		dynamic $downlibrary['BookStudy'], ''
+
+		'	You read an adventure fiction for an hour.'
 
 		act 'Put the book down':gt $curloc
 	end
 
 	act 'Read the collected works of Leo Tolstoy (1:00)':
-		*clr & cla
-		menu_off = 1
-		if blizoruk = 100 or glassqw = 1:
-		glassqw = 1
-		msg'The text blurs across the page, it looks like you have got poor eyesight. It would be suitable to visit an ophthalmologists.'&gt $curloc
-		end
-		if pcs_nerd > 0:
-			lastread = totminut
-			lastreadday = daystart
-			pcs_nerd += 1
-		end
-		minut += 60
-		if pcs_sprt >= 50:
-			sprt_exp += RAND(1,2)
-		elseif pcs_sprt >= 25:
-			sprt_exp += RAND(2,3)
-		else
-			sprt_exp += RAND(3,4)
-		end
+			dynamic $downlibrary['BookStudy'], 'sprt'
 
-		blizoruk += 1
-		gs'stat'
-
-		'You read the book for an hour. Tolstoy is certainly a classic writer, no one denies this, but he wrote exceptionally wordily.'
+		'	You read the book for an hour. Tolstoy is certainly a classic writer, no one denies this, but he wrote exceptionally wordily.'
 
 		act 'Put the book down':gt $curloc
 	end
 	if MagicLibrary = 1:
 		act 'Read in magic books':
-			*clr & cla
-			menu_off = 1
-			if blizoruk = 100 or glassqw = 1:
-			glassqw = 1
-			msg'The text blurs across the page, it looks like you have got poor eyesight. It would be suitable to visit an ophthalmologists.'&gt $curloc
-			end
-			if pcs_nerd > 0:
-				lastread = totminut
-				lastreadday = daystart
-				pcs_nerd += 1
-			end
-			minut += 60
-			if pcs_splcstng >= 50:
-				splcstng_exp += RAND(1,2)
-			elseif pcs_splcstng >= 25:
-				splcstng_exp += RAND(2,3)
-			else
-				splcstng_exp += RAND(3,4)
-			end
-			
-			blizoruk += 1
-			gs'stat'
+			dynamic $downlibrary['BookStudy'], 'splcstng'
 
-			'You pick out one of the magic books you can actually read and sit down with it.'
+			'	You pick out one of the magic books you can actually read and sit down with it.'
 			'Not only is the subject matter complex and mostly a mystery to you, but the descriptions and explanations are unnecessarily wordy, as if the writer had something to prove.'
 			'After about an hour, you decide to take a break from it and, instead, test your memory. You don''t remember much, but you understand magic a tiny bit better than before nonetheless.'
 
+			! Find Researchable Spells
+			if arrsize('$ResearchingSP') < arrsize('$librarySpells'):
+				if rand(1,10) = 10:
+					NumResearching = arrsize('$ResearchingSP') + 1
+					if spellKnown[$librarySpells[NumResearching]] = 0:
+						*nl
+						*pl 'You have come across a lead on a new spell.'
+					end
+					i=0
+					:FindNewSpell1
+					if i < NumResearching:
+						$ResearchingSP[i] = $librarySpells[i]
+						i += 1
+						jump 'FindNewSpell1'
+					end
+					killvar 'i'
+					killvar 'NumResearching'
+				end
+			end
+
+			if arrsize('$ResearchingSP') > 0:
+				gs 'spellList', 'teacherActions', '$ResearchingSP', 'downlibrary', ''
+			end
 			act 'Put the book down':gt $curloc
 		end
 	end
-	
+
 else
 	'The library is closed.'
 end

+ 4 - 0
locations/foto.qsrc

@@ -1,6 +1,9 @@
 # foto
 
+$loc = 'foto'
+
 if $ARGS[0] = 'start':
+	$metka = 'start'
 	if hour < 2:
 		menu_off = 1
 		gs 'clothing', 'wear_last_worn'
@@ -134,6 +137,7 @@ if $ARGS[0] = 'start':
 end
 
 if $ARGS[0] = 'studio':
+	$metka = 'studio'
 	$menu_loc = 'foto'
 	$menu_arg = 'studio'
 	menu_off = 0

+ 2 - 0
locations/lab.qsrc

@@ -526,6 +526,8 @@ if $ARGS[0] = 'Tatiana':
 
 	! Show Actions for Learning Spells
 	gs 'spellList', 'teacherActions', '$basicSpells', 'lab', 'Tatiana'
+	gs 'spellList', 'teacherActions', '$healSpells', 'lab', 'Tatiana'
+	!gs 'spellList', 'teacherActions', '$beautySpells', 'lab', 'Tatiana'
 
 	if pcs_magik >= 5 and spellavtoklon = 0:
 		act 'Learn technique preparation (1:00)':

+ 53 - 0
locations/pornfilm.qsrc

@@ -169,6 +169,7 @@ if $ARGS[0] = '2':
 					sexpartkno = 1
 					spafinloc = 12
 					sexvolume = 36
+					cumnostd = 1
 					gs 'cum_manage'
 					spafinloc = 11
 					sexvolume = 4
@@ -250,6 +251,7 @@ if $ARGS[0] = '3':
 					gs 'boyStat', $pakterID[1]
 					sexpartkno = 1
 					cumprecheck = 1
+					cumnostd = 1
 					gs 'cum_manage'
 
 					gs 'arousal', 'vaginal', 15, 'exhibitionism'
@@ -263,6 +265,7 @@ if $ARGS[0] = '3':
 						minut += 5
 						spafinloc = 12
 						sexvolume = 36
+						cumnostd = 1
 						gs 'cum_manage'
 						spafinloc = 11
 						sexvolume = 4
@@ -354,6 +357,7 @@ if $ARGS[0] = '4':
 					gs 'boyStat', $pakterID[1]
 					sexpartkno = 1
 					cumprecheck = 1
+					cumnostd = 1
 					gs 'cum_manage'
 
 					gs 'arousal', 'vaginal', 5, 'exhibitionism'
@@ -383,6 +387,7 @@ if $ARGS[0] = '4':
 							'<<$pakter[1]>> brings his cock to your mouth, and feeds you the contents of his balls.'
 							spafinloc = 12
 							sexvolume = 36
+							cumnostd = 1
 							gs 'cum_manage'
 							spafinloc = 11
 							sexvolume = 4
@@ -464,6 +469,7 @@ if $ARGS[0] = '5':
 				gs 'boyStat', $pakterID[1]
 				sexpartkno = 1
 				cumprecheck = 1
+				cumnostd = 1
 				gs 'cum_manage'
 				gs 'stat'
 
@@ -482,6 +488,7 @@ if $ARGS[0] = '5':
 					'<<$pakter[1]>> takes his cock out of your pussy, and plunges it into your ass. The change and the extra tightness quickly overwelms him.'
 					'He shoots his load into your ass, all the while you keep sucking <<$pakter[2]>>.'
 					spafinloc = 3
+					cumnostd = 1
 					gs 'cum_manage'
 					gs 'stat'
 
@@ -502,6 +509,7 @@ if $ARGS[0] = '5':
 						gs 'boyStat', $pakterID[2]
 						sexpartkno = 1
 						spafinloc = 12
+						cumnostd = 1
 						gs 'cum_manage'
 						gs 'stat'
 						gs 'arousal', 'end'
@@ -566,6 +574,7 @@ if $ARGS[0] = '6':
 				gs 'boyStat', $pakterID[1]
 				sexpartkno = 1
 				cumprecheck = 1
+				cumnostd = 1
 				gs 'cum_manage'
 				gs 'stat'
 
@@ -616,6 +625,7 @@ if $ARGS[0] = '6':
 							'Suddenly your head gets turned around and <<$pakter[2]>> shoots his load on your face and in your mouth, <<$pakter[1]>> following him close behind.'
 							spafinloc = 12
 							sexvolume = 6
+							cumnostd = 1
 							gs 'cum_manage'
 							spafinloc = 11
 							sexvolume = 2
@@ -623,6 +633,7 @@ if $ARGS[0] = '6':
 							gs 'boyStat', $pakterID[2]
 							spafinloc = 12
 							sexvolume = 6
+							cumnostd = 1
 							gs 'cum_manage'
 							spafinloc = 11
 							sexvolume = 2
@@ -698,6 +709,7 @@ if $ARGS[0] = '7':
 						minut += 15
 						pcs_horny += 15
 						sexpartkno = 1
+						cumnostd = 1
 						gs 'boyStat', $pakterID[1]
 						gs 'cum_manage'
 						gs 'stat'
@@ -718,6 +730,7 @@ if $ARGS[0] = '7':
 						sexpartkno = 1
 						orgasmbonus += 10
 						porngasm += 1
+						cumnostd = 1
 						gs 'boyStat', $pakterID[1]
 						gs 'cum_manage'
 						gs 'stat'
@@ -789,10 +802,12 @@ if $ARGS[0] = '8':
 				if rand(0,1) = 0:
 					gs 'boyStat', $pakterID[1]
 					sexpartkno = 1
+					cumnostd = 1
 					gs 'cum_manage'
 					gs 'boyStat', $pakterID[2]
 					sexpartkno = 1
 					spafinloc = 3
+					cumnostd = 1
 					gs 'cum_manage'
 					'<<$pakter[1]>> lays on the bed and you climb above him, fitting his cock in your pussy, then wait until <<$pakter[2]>> pushes his member in your ass. He soon starts to fuck you enthusiastically, making you ride <<$pakter[1]>>''s dick. This continues for a while, but soon the director signals the guys that they should cum inside.'
 
@@ -805,10 +820,12 @@ if $ARGS[0] = '8':
 				else
 					gs 'boyStat', $pakterID[2]
 					sexpartkno = 1
+					cumnostd = 1
 					gs 'cum_manage'
 					gs 'boyStat', $pakterID[1]
 					sexpartkno = 1
 					spafinloc = 3
+					cumnostd = 1
 					gs 'cum_manage'
 					'<<$pakter[2]>> lays on the bed and you climb above him, fitting his cock in your pussy, then wait until <<$pakter[1]>> pushes his member in your ass. He soon starts to fuck you enthusiastically, making you ride <<$pakter[2]>>''s dick. This continues for a while, but soon the director signals the guys that they should cum inside.'
 
@@ -893,10 +910,12 @@ if $ARGS[0] = '9':
 				if rand(0,1) = 0:
 					gs 'boyStat', $pakterID[1]
 					sexpartkno = 1
+					cumnostd = 1
 					gs 'cum_manage'
 					gs 'boyStat', $pakterID[2]
 					sexpartkno = 1
 					spafinloc = 12
+					cumnostd = 1
 					gs 'cum_manage'
 					'You get in position before <<$pakter[2]>> and starts to suck him, while <<$pakter[1]>> starts to fuck your pussy. He soon works on that part enthusiastically, making you swallow <<$pakter[2]>>''s dick. This continues for a while, but soon the director signals that the scene is good enough, and it is time for the finale.'
 
@@ -909,10 +928,12 @@ if $ARGS[0] = '9':
 				else
 					gs 'boyStat', $pakterID[2]
 					sexpartkno = 1
+					cumnostd = 1
 					gs 'cum_manage'
 					gs 'boyStat', $pakterID[1]
 					sexpartkno = 1
 					spafinloc = 3
+					cumnostd = 1
 					gs 'cum_manage'
 					'You get in position before <<$pakter[1]>> and starts to suck him, while <<$pakter[2]>> starts to fuck your pussy. He soon works on that part enthusiastically, making you swallow <<$pakter[1]>>''s dick. This continues for a while, but soon the director signals that the scene is good enough, and it is time for the finale.'
 
@@ -1001,6 +1022,7 @@ if $ARGS[0] = '10':
 				gs 'boyStat', $pakterID[1]
 				sexpartkno = 1
 				cumprecheck = 1
+				cumnostd = 1
 				gs 'cum_manage'
 				if rand(0,5) > 0:
 					'<center><video autoplay loop src="images/locations/city/citycenter/studio/sex/cumbath<<rand(1,9)>>.mp4" width="500"></video></center>'
@@ -1009,11 +1031,13 @@ if $ARGS[0] = '10':
 					'<center><video autoplay loop src="images/locations/city/citycenter/studio/sex/cumbathm<<rand(1,2)>>.mp4" width="500"></video><video autoplay loop src="images/locations/city/citycenter/studio/sex/cumbath<<rand(1,9)>>.mp4" width="500"></video></center>'
 					'<<$pakter[1]>> suddenly groans, pulling his dick out of your pussy but obviously messes up when his first shot of seed sprays straight into your open vagina, but he quickly corrects it, and the others coat your pussylips.'
 					sexpartkno = 1
+					cumnostd = 1
 					gs 'cum_manage'
 					cuminside = 1
 				end
 				spafinloc = 1
 				sexpartkno = 1
+				cumnostd = 1
 				gs 'cum_manage'
 				if pcs_horny >= (100-pcs_inhib):
 					orgasmbonus += 10
@@ -1032,6 +1056,7 @@ if $ARGS[0] = '10':
 				gs 'boyStat', $pakterID[2]
 				sexpartkno = 1
 				cumprecheck = 1
+				cumnostd = 1
 				gs 'cum_manage'
 				if rand(0,5) > 0:
 					'<center><video autoplay loop src="images/locations/city/citycenter/studio/sex/cumbath<<rand(1,9)>>.mp4" width="500"></video></center>'
@@ -1040,6 +1065,7 @@ if $ARGS[0] = '10':
 					'<center><video autoplay loop src="images/locations/city/citycenter/studio/sex/cumbathm<<rand(1,2)>>.mp4" width="500"></video><video autoplay loop src="images/locations/city/citycenter/studio/sex/cumbath<<rand(1,9)>>.mp4" width="500"></video></center>'
 					'<<$pakter[2]>> suddenly groans, pulling his dick out of your pussy but obviously messes up when his first shot of seed sprays straight into your open vagina, but he quickly corrects it, and the others coat your breasts.'
 					sexpartkno = 1
+					cumnostd = 1
 					gs 'cum_manage'
 					cuminside = 1
 				end
@@ -1063,6 +1089,7 @@ if $ARGS[0] = '10':
 				gs 'boyStat', $pakterID[3]
 				sexpartkno = 1
 				cumprecheck = 1
+				cumnostd = 1
 				gs 'cum_manage'
 				if rand(0,5) > 0:
 					'<center><video autoplay loop src="images/locations/city/citycenter/studio/sex/cumbath<<rand(1,9)>>.mp4" width="500"></video></center>'
@@ -1071,6 +1098,7 @@ if $ARGS[0] = '10':
 					'<center><video autoplay loop src="images/locations/city/citycenter/studio/sex/cumbathm<<rand(1,2)>>.mp4" width="500"></video><video autoplay loop src="images/locations/city/citycenter/studio/sex/cumbath<<rand(1,9)>>.mp4" width="500"></video></center>'
 					'<<$pakter[3]>> suddenly groans, pulling his dick out of your pussy but obviously messes up when his first shot of seed sprays straight into your open vagina, but he quickly corrects it, and the others coat your face and hair with his sperm.'
 					sexpartkno = 1
+					cumnostd = 1
 					gs 'cum_manage'
 					cuminside = 1
 				end
@@ -1096,6 +1124,7 @@ if $ARGS[0] = '10':
 				gs 'boyStat', $pakterID[4]
 				sexpartkno = 1
 				cumprecheck = 1
+				cumnostd = 1
 				gs 'cum_manage'
 				if rand(0,5) > 0:
 					'<center><video autoplay loop src="images/locations/city/citycenter/studio/sex/cumbath<<rand(1,9)>>.mp4" width="500"></video></center>'
@@ -1104,6 +1133,7 @@ if $ARGS[0] = '10':
 					'<center><video autoplay loop src="images/locations/city/citycenter/studio/sex/cumbathm<<rand(1,2)>>.mp4" width="500"></video><video autoplay loop src="images/locations/city/citycenter/studio/sex/cumbath<<rand(1,9)>>.mp4" width="500"></video></center>'
 					'<<$pakter[4]>> suddenly groans, pulling his dick out of your pussy but obviously messes up when his first shot of seed sprays straight into your open vagina, but he quickly corrects it, and the others coat your belly with his sperm.'
 					sexpartkno = 1
+					cumnostd = 1
 					gs 'cum_manage'
 					cuminside = 1
 				end
@@ -1166,18 +1196,22 @@ if $ARGS[0] = '11':
 			gs 'boyStat', $pakterID[1]
 			sexpartkno = 1
 			cumprecheck = 1
+			cumnostd = 1
 			gs 'cum_manage'
 			gs 'boyStat', $pakterID[2]
 			sexpartkno = 1
 			cumprecheck = 1
+			cumnostd = 1
 			gs 'cum_manage'
 			gs 'boyStat', $pakterID[3]
 			sexpartkno = 1
 			cumprecheck = 1
+			cumnostd = 1
 			gs 'cum_manage'
 			gs 'boyStat', $pakterID[4]
 			sexpartkno = 1
 			cumprecheck = 1
+			cumnostd = 1
 			gs 'cum_manage'
 			gs 'stat'
 			'<center><video autoplay loop src="images/shared/sex/group/threesomepm<<rand(1,12)>>.mp4" width="500"></video></center>'
@@ -1198,15 +1232,19 @@ if $ARGS[0] = '11':
 				'<center><video autoplay loop src="images/locations/city/citycenter/studio/sex/porncp<<rand(1,4)>>.mp4" width="500"></video></center>'
 				gs 'boyStat', $pakterID[1]
 				sexpartkno = 1
+				cumnostd = 1
 				gs 'cum_manage'
 				gs 'boyStat', $pakterID[2]
 				sexpartkno = 1
+				cumnostd = 1
 				gs 'cum_manage'
 				gs 'boyStat', $pakterID[3]
 				sexpartkno = 1
+				cumnostd = 1
 				gs 'cum_manage'
 				gs 'boyStat', $pakterID[4]
 				sexpartkno = 1
+				cumnostd = 1
 				gs 'cum_manage'
 
 				if pcs_horny < 85 and pcs_inhib < 80:
@@ -1301,6 +1339,7 @@ if $ARGS[0] = '12':
 				gs 'boyStat', $pakterID[1]
 				sexpartkno = 1
 				spafinloc = 3
+				cumnostd = 1
 				gs 'cum_manage'
 				gs 'boyStat', $pakterID[2]
 				sexpartkno = 1
@@ -1309,10 +1348,12 @@ if $ARGS[0] = '12':
 				gs 'boyStat', $pakterID[3]
 				sexpartkno = 1
 				spafinloc = 3
+				cumnostd = 1
 				gs 'cum_manage'
 				gs 'boyStat', $pakterID[4]
 				sexpartkno = 1
 				spafinloc = 3
+				cumnostd = 1
 				gs 'cum_manage'
 				'<center><video autoplay loop src="/images/shared/sex/cum/analcreampie/cumanal<<rand(1,2)>>.mp4" width="500"></video></center>'
 				if pcs_horny < 85 and pcs_inhib < 80:
@@ -1392,9 +1433,11 @@ if $ARGS[0] = '13':
 			*clr
 			gs 'boyStat', $pakterID[1]
 			sexpartkno = 1
+			cumnostd = 1
 			gs 'cum_manage'
 			gs 'boyStat', $pakterID[2]
 			sexpartkno = 1
+			cumnostd = 1
 			gs 'cum_manage'
 
 			'<center><video autoplay loop src="images/shared/sex/group/doublevag<<rand(1,4)>>.mp4" width="500"></video></center>'
@@ -1428,10 +1471,12 @@ if $ARGS[0] = '13':
 				gs 'boyStat', $pakterID[3]
 				sexpartkno = 1
 				spafinloc = 3
+				cumnostd = 1
 				gs 'cum_manage'
 				gs 'boyStat', $pakterID[4]
 				sexpartkno = 1
 				spafinloc = 3
+				cumnostd = 1
 				gs 'cum_manage'
 				gs 'stat'
 				'<center><video autoplay loop src="images/locations/city/citycenter/studio/sex/doublean<<rand(1,4)>>.mp4" width="500"></video></center>'
@@ -1528,8 +1573,10 @@ if $ARGS[0] = '14':
 			gs 'boyStat', $npclastgenerated
 			pfcounter += 1
 			cumprecheck = 1
+			cumnostd = 1
 			gs 'cum_manage'
 			spafinloc = 12
+			cumnostd = 1
 			gs 'cum_manage'
 			bj50 -= 1
 			stat['bj'] += 1
@@ -1542,6 +1589,7 @@ if $ARGS[0] = '14':
 			gs 'boyStat', $npclastgenerated
 			pfcounter += 1
 			cumprecheck = 1
+			cumnostd = 1
 			gs 'cum_manage'
 			spafinloc = 13
 			gs 'cum_manage'
@@ -1555,6 +1603,7 @@ if $ARGS[0] = '14':
 			gs 'boyStat', $npclastgenerated
 			pfcounter += 1
 			cumprecheck = 1
+			cumnostd = 1
 			gs 'cum_manage'
 			if rand(0,1)=0:
 				spafinloc = 11
@@ -1572,6 +1621,7 @@ if $ARGS[0] = '14':
 			gs 'boyStat', $npclastgenerated
 			pfcounter += 1
 			spafinloc = 3
+			cumnostd = 1
 			gs 'cum_manage'
 			anal50 -= 1
 			stat['anal'] += 1
@@ -1583,6 +1633,7 @@ if $ARGS[0] = '14':
 			gs 'boyStat', $npclastgenerated
 			pfcounter += 1
 			cumprecheck = 1
+			cumnostd = 1
 			gs 'cum_manage'
 			bukkloc = rand(0,6)
 			if bukkloc = 0:
@@ -1600,6 +1651,7 @@ if $ARGS[0] = '14':
 			else
 				spafinloc = 15
 			end
+			cumnostd = 1
 			gs 'cum_manage'
 			bukk50 -= 1
 		end
@@ -1609,6 +1661,7 @@ if $ARGS[0] = '14':
 			gs 'npcgeneratec', 0, 'Porn Fan', rand(22,38)
 			gs 'boyStat', $npclastgenerated
 			pfcounter += 1
+			cumnostd = 1
 			gs 'cum_manage'
 			sex50 -= 1
 		end

+ 7 - 1
locations/saveupdater.qsrc

@@ -410,7 +410,7 @@ if arrsize('$bodimgsets') = 30:
 end
 
 !! reorganizes old spell variables into new arrrays
-if spell_update ! 1:
+if spell_update = 0:
 	spell_update = 1
 
 	if spelltuman = 1:spellKnown['fog'] = 1
@@ -448,6 +448,12 @@ if spell_update ! 1:
 	if spellwater5 = 1:spellKnown['greatflood'] = 1
 end
 
+if spell_update < 2:
+	spell_update = 2
+	killvar '$basicSpells'
+end
+gs 'spellList'
+
 !! Updater for manna > mana conversions
 
 if pcs_manna ! 0:

+ 33 - 0
locations/spell.qsrc

@@ -203,6 +203,39 @@ if $ARGS[0] = 'shower':
 	end
 end
 
+if $ARGS[0] = 'makeup':
+	if SuccessValue > 0:
+		! Argument should be 3 digit string representing Makeup to apply
+		$MakeupArg = $ARGS[2]
+		if $MakeupArg = '': $MakeupArg = '210'
+		! Arg[0] = Makeup Amount (0-3)
+		MakeupArg[0] = val(mid($MakeupArg,1,1))
+		! Arg[1] = Lip Balm application (0-1)
+		MakeupArg[1] = val(mid($MakeupArg,2,1))
+		! Arg[2] = False lash Application (0-2)
+		MakeupArg[2] = val(mid($MakeupArg,3,1))
+
+		! Brush hair
+		pcs_hairbsh = 1
+		! Apply Makeup
+		pcs_makeup = MakeupArg[0]
+		! Apply Lipbalm
+		pcs_lipbalm += 8*MakeupArg[1]
+		! Apply False Lashes
+		if MakeupArg[2] = 1 and pcs_lashes < 3:
+			pcs_lashes = 3
+		elseif MakeupArg[2] = 2 and pcs_lashes < 4:
+			pcs_lashes = 4
+		end
+
+		killvar 'MakeupArg'
+		killvar '$MakeupArg'
+		'<b><font color = green>makeup is applied to your face.</font></b>'
+	else
+		'<b>The spell fizzles.  Nothing seems to happen.</b>'
+	end
+end
+
 if $ARGS[0] = 'cosmetica':
 	if SuccessValue > 0:
 		! Take a Shower

+ 33 - 6
locations/spellBook.qsrc

@@ -61,13 +61,40 @@ else
 			</tr>"
 	$spellBookVar['RowCode'] = {
 		if spellKnown[$ThisSpellName] = 1:
-			$result = " 
-			<tr>
-				<td align='left'><a href=""EXEC: gs 'castSpell', '<<$ThisSpellName>>'& <<$spellBookVar['CodeAfterSpell']>>""><<$spellName[$ThisSpellName]>></a></td>
-				<td align='right'><<spellMana[$ThisSpellName]>></td>
-				<td align='left'><<$spellDesc[$ThisSpellName]>></td>
-			</tr>"
+			if $spellOptDesc[$ThisSpellName] = '':
+				$tmpHTMLCode = " 
+				<tr>
+					<td align='left'><a href=""EXEC: gs 'castSpell', '<<$ThisSpellName>>'& <<$spellBookVar['CodeAfterSpell']>>""><<$spellName[$ThisSpellName]>></a></td>
+					<td align='right'><<spellMana[$ThisSpellName]>></td>
+					<td align='left'><<$spellDesc[$ThisSpellName]>></td>
+				</tr>"
+			else
+				$tmpHTMLCode = " 
+				<tr>
+					<td align='left'><<$spellName[$ThisSpellName]>></td>
+					<td align='right'><<spellMana[$ThisSpellName]>></td>
+					<td align='left'><<$spellDesc[$ThisSpellName]>></td>
+				</tr>"
+				n=0
+				:RowCodeLoop99
+				if n < arrsize('<<$spellOptDesc[$ThisSpellName]>>'):
+					$spellBookVar['tmpVal'] = dyneval('$result = <<$spellOptVal[$ThisSpellName]>>[<<n>>]')
+					$spellBookVar['tmpName']= dyneval('$result = <<$spellOptDesc[$ThisSpellName]>>[<<n>>]')
+					$tmpHTMLCode += " 
+					<tr>
+						<td align='left'></td>
+						<td align='left'><a href=""EXEC: gs 'castSpell', '<<$ThisSpellName>>', '<<$spellBookVar['tmpVal']>>' & <<$spellBookVar['CodeAfterSpell']>>""><<$spellBookVar['tmpName']>></a></td>
+						<td align='left'></td>
+					</tr>"
+					n += 1
+					jump 'RowCodeLoop99'
+				end
+
+			end
+			$result = $tmpHTMLCode
 			spellBookVar['Counter'] += 1
+			killvar '$tmpHTMLCode'
+			killvar 'n'
 		else
 			$result = ''
 		end

+ 83 - 11
locations/spellList.qsrc

@@ -8,13 +8,19 @@
 !	spellTime['spellname'] = How much time will pass in the casting of the spell
 !	spellDiff['spellname'] = Difficulty to learn and cast this spell
 !	$spellName['spellname'] = Pretty name for the spell
-!	$sellDesc['spellname'] = Description of what the spell does.
+!	$psellDesc['spellname'] = Description of what the spell does.
+!	$spellReq['spellname'] = Prerequisite Spell needed to learn this spell
+!	$spellOptDesc['spellname'] = name of an array of Option Descriptions for this spell
+!	$spellOptVal['spellname'] = name of an array of values to pass for Spell Options
 !
 ! There are also defined lists of spells grouped together
 !	$combatSpells = Spells that can be used in Combat
 !	$nonComSpells = Non-Combat Spells, ones that can be executed in any location.
 !	---
 !	$basicSpells = basic spells that are taught by Tatiana
+!	$healSpells = Healing Spells
+!	$beautySpells = Beauty Spells
+!	$librarySpells = Spelsl Researchable in the Library
 !	$fireSpells = Fire-based spells
 !	$electSpells = Electricity based spells
 !	$earthSpells = Earth magic spells
@@ -60,6 +66,7 @@ spellTime['curewounds2'] = 60
 spellDiff['curewounds2'] = 75
 $spellName['curewounds2'] = "Greater Cure Wounds"
 $spellDesc['curewounds2'] = "You feel your body heal to perfection."
+$spellReq['curewounds2'] = 'curewounds'
 !painblock
 spellMana['painblock'] = 1000
 spellTime['painblock'] = 1
@@ -78,12 +85,60 @@ spellTime['shower'] = 1
 spellDiff['shower'] = 1
 $spellName['shower'] = "Shower"
 $spellDesc['shower'] = "Clean and refresh yourself as if you have taken a shower."
+!makeup
+spellMana['makeup'] = 100
+spellTime['makeup'] = 5
+spellDiff['makeup'] = 15
+$spellName['makeup'] = "Makeup"
+$spellDesc['makeup'] = "Apply Makeup to yourself magically."
+$spellOptDesc['makeup'] = '$MakeupSet'
+$spellOptVal['makeup'] = '$MakeupSetVal'
+if $routine1+$routine2+$routine3+$routine4 = '':
+	killvar '$MakeupSet'
+	killvar '$MakeupSetVal'
+	$MakeupSet[0] = 'No Makeup'
+	$MakeupSetVal[0] = '000'
+	$MakeupSet[1] = 'Light Makeup'
+	$makeupSetVal[1] = '110'
+	$MakeupSet[2] = 'Vibrant Makeup'
+	$makeupSetVal[2] = '210'
+	$MakeupSet[3] = 'Heavy Makeup'
+	$makeupSetVal[3] = '310'
+else
+	killvar '$MakeupSet'
+	killvar '$MakeupSetVal'
+	$MakeupSet[0] = 'No Makeup'
+	$MakeupSetVal[0] = '000'
+	i=1
+	if $routine1 ! '':
+		$MakeupSet[i] = $routine1custname
+		$MakeupSetVal[i] = $routine1
+		i += 1
+	end
+	if $routine2 ! '':
+		$MakeupSet[i] = $routine2custname
+		$MakeupSetVal[i] = $routine2
+		i += 1
+	end
+	if $routine3 ! '':
+		$MakeupSet[i] = $routine3custname
+		$MakeupSetVal[i] = $routine3
+		i += 1
+	end
+	if $routine4 ! '':
+		$MakeupSet[i] = $routine4custname
+		$MakeupSetVal[i] = $routine4
+		i += 1
+	end
+	killvar 'i'
+end
 !cosmetica
 spellMana['cosmetica'] = 10000
 spellTime['cosmetica'] = 5
 spellDiff['cosmetica'] = 50
 $spellName['cosmetica'] = "Cosmetica"
 $spellDesc['cosmetica'] = "Clean and tidy yourself, completely beautifying yourself; hair, makeup, grooming of all kinds."
+$spellReq['cosmetica'] = 'makeup'
 !glamour
 spellMana['glamour'] = 500
 spellTime['glamour'] = 1
@@ -133,6 +188,7 @@ spellTime['multiclone'] = 0
 spellDiff['multiclone'] = 2
 $spellName['multiclone'] = "Multi-Clone"
 $spellDesc['multiclone'] = "Summon three clones of yourself and slip out of the enemys sight."
+$spellReq['multiclone'] = 'clone'
 !energo
 spellMana['energo'] = 50
 spellTime['energo'] = 0
@@ -169,6 +225,7 @@ spellTime['burninghands'] = 0
 spellDiff['burninghands'] = 7
 $spellName['burninghands'] = "Burning Hands"
 $spellDesc['burninghands'] = "A torrent of flames jets from your hands."
+$spellReq['burninghands'] = 'scaldingtouch'
 !firebarrier
 spellMana['firebarrier'] = 150
 spellTime['firebarrier'] = 0
@@ -211,6 +268,7 @@ spellTime['1000birds'] = 0
 spellDiff['1000birds'] = 9
 $spellName['1000birds'] = "Dance of a Thousand Birds"
 $spellDesc['1000birds'] = "The air is filled with small lightning bolts leaping through the air with shrieks."
+$spellReq['1000birds'] = 'lightning'
 !dancingsphere
 spellMana['dancingsphere'] = 500
 spellTime['dancingsphere'] = 0
@@ -355,7 +413,8 @@ $nonComSpells[4] = 'curewounds2'
 $nonComSpells[5] = 'painblock'
 $nonComSpells[6] = 'berserk'
 $nonComSpells[7] = 'shower'
-$nonComSpells[8] = 'cosmetica'
+$nonComSpells[8] = 'makeup'
+$nonComSpells[9] = 'cosmetica'
 
 
 ! Basic Spells
@@ -366,14 +425,27 @@ $basicSpells[3] = 'wind'
 $basicSpells[4] = 'multiclone'
 $basicSpells[5] = 'energo'
 $basicSpells[6] = 'haste'
-$basicSpells[7] = 'regenerate'
-$basicSpells[8] = 'curedisease'
-$basicSpells[9] = 'curewounds'
-$basicSpells[10] = 'curewounds2'
-$basicSpells[11] = 'painblock'
-$basicSpells[12] = 'berserk'
-$basicSpells[13] = 'shower'
-$basicSpells[14] = 'cosmetica'
+$basicSpells[7] = 'berserk'
+
+!Healing Spells
+$healSpells[0] = 'painblock'
+$healSpells[1] = 'curewounds'
+$healSpells[2] = 'curewounds2'
+$healSpells[3] = 'curedisease'
+$healSpells[4] = 'heal'
+$healSpells[5] = 'regenerate'
+
+! Beauty Spells
+$beautySpells[0] = 'shower'
+$beautySpells[1] = 'makeup'
+$beautySpells[2] = 'cosmetica'
+
+
+! Researchable Spells
+$librarySpells[0] = 'painblock'
+$librarySpells[1] = 'shower'
+$librarySpells[2] = 'makeup'
+$librarySpells[3] = 'cosmetica'
 
 
 ! Elemental Spell Groups
@@ -427,7 +499,7 @@ if $ARGS[0] = 'teacherActions':
 	spellDifficulty = $spellDiff[$ThisSpellName]
 	if spellDifficulty = 0: spellDifficulty = 1
 	if i < ThisArraySize:
-		if pcs_magik >= spellDifficulty and spellKnown[$ThisSpellName] = 0:
+		if pcs_magik >= spellDifficulty and spellKnown[$ThisSpellName] = 0 and ($spellReq[$ThisSpellName] = '' or spellKnown[$spellReq[$ThisSpellName]]):
 			dynamic "act 'Learn <<$spellName[$ThisSpellName]>> (1:00)':
 				cla
 				if pcs_mana >= 1000: