1
0

41 Коммитууд 6af30f79f4 ... d95d6bb758

Эзэн SHA1 Мессеж Огноо
  Vengeance_11 d95d6bb758 Some idiot forgot to add the nursing degree to the uni start 3 сар өмнө
  Kevin_Smarts fce5c3f08e [fixed] Wrong variable setting total for server outifts causing load of broken images 3 сар өмнө
  Kevin_Smarts 0a8a23b862 [fixed] Mom reconcilliation can't happen if Sveta has cum on her face or just left sentencing at court 3 сар өмнө
  Kevin_Smarts c40b30057f [added] block to prevent changing into prostitute outfit during school break that allowed Sveta to wear said outfit to class 4 сар өмнө
  Kevin_Smarts 4c13d4face Merge remote-tracking branch 'Hooded_Silence/master' 4 сар өмнө
  Hooded Silence 31a3af71b3 Merge branch 'master' of https://git.tfgames.site/Kevin_Smarts/glife 4 сар өмнө
  Hooded Silence 3d33097e3b [Grammar changes] Minor changes to fix grammar and headers. 4 сар өмнө
  LinaHirata aa9754d1b9 [fixed] unnecessary call 4 сар өмнө
  LinaHirata 7f9dbb6f07 [fixed] typo 4 сар өмнө
  LinaHirata 364505db7a [added] debug_build, call trace 4 сар өмнө
  Lusticon 7caaa1d92a [changed] no pain no game 4 сар өмнө
  Lusticon 17ca7a0ddd [fixed] gopnik park sex progression 4 сар өмнө
  Kevin_Smarts 90274184d8 Merge remote-tracking branch 'Lusticon/master' 4 сар өмнө
  anjuna krokus 29785ddb96 [fixed] accidentally used trainpas instead of buspass for the bus passes. Added some comments to body for the future 4 сар өмнө
  anjuna krokus e887cb6598 [fixed] pcs_butt is now properly dynamical. It will be overhauled in the future, but for now it actually (finally) works. The intros now use the correct genetic butt values to get the indicated pcs_butt at normal body weight 4 сар өмнө
  Lusticon a580ef83d5 [fixed] gopnik park sex progression 4 сар өмнө
  anjuna krokus 336e0865ea [fixed] slight buff to pcs['butt_gen'] to align with intro_customization 4 сар өмнө
  anjuna krokus 1b0f2433b8 [removed] no need for set_access if you're using set_home 4 сар өмнө
  anjuna krokus ad6b0959c6 [fixed] intro_sg_tg not setting pcs_mass['body'] to the correct value (80 -> 60) and updated the layout to use intro_functions 4 сар өмнө
  anjuna krokus 07217019c2 [fixed] Forgotten colon 4 сар өмнө
  anjuna krokus f88e182694 [fixed] appearance not set correctly at the start of the game (hopefully) 4 сар өмнө
  Kevin_Smarts 4606c2cef5 Merge remote-tracking branch 'Lusticon/master' 4 сар өмнө
  Lusticon fee68405f2 [fixed] typos 4 сар өмнө
  anjuna krokus 7798b27abb Merge branch 'master' of https://git.tfgames.site/Kevin_Smarts/glife 4 сар өмнө
  anjuna krokus 4ecb13ae13 [fixed] forgotten change in start_type skipped the magic intro 4 сар өмнө
  anjuna krokus e2120852b4 [fixed] Temporary fix to the custom body images. Custom descriptions will not be fixed for now. 4 сар өмнө
  Kevin_Smarts f70e800c3f [fixed] updo and pigtails removed when hair grows too long and moved braid deg to body file from cikl 4 сар өмнө
  anjuna krokus e91556d4f9 [fixed] Sire to Sir 4 сар өмнө
  anjuna krokus b31c2eab83 Merge branch 'master' of https://git.tfgames.site/Kevin_Smarts/glife 4 сар өмнө
  Kevin_Smarts 0276229fd5 [fixed] typo 4 сар өмнө
  Kevin_Smarts c3e3faa93d Merge remote-tracking branch 'Lusticon/master' 4 сар өмнө
  Kevin_Smarts b7144878d8 Merge remote-tracking branch 'Anya/master' 4 сар өмнө
  Kevin_Smarts 85da7bb448 Merge remote-tracking branch 'Hornguy6/master' 4 сар өмнө
  anjuna krokus ab906c8715 [fixed] typo in a gs crashed the game. Thanx to chlu for finding it 4 сар өмнө
  Lusticon e07e1eaac2 [fixed] added worn out block for prostitute and sport outfits 4 сар өмнө
  Lusticon 06034370d6 [fixed] prostitute vs sport outfits fight 2.0 4 сар өмнө
  hornguy6 0e52107de1 [fixed] missing gosub to prevent blank action 4 сар өмнө
  anjuna krokus 6c56f5de48 [fixed] bus stop images. For now it's just random images, but in the future specific bus stops will probably get a dedicated image set 4 сар өмнө
  anjuna krokus 2d0cdc5458 [fixed] Allowed buspasses to be sold at the bigger bus stops (Both Pavlovsk stops, Gadukino, and the Suburbs). Enabled shortcuts between pavlovsk Train platform - Bus platform, and between Suburbs Bus platform - Metro station, to limit the number of actions needed to travel. Thanks to BBZ01 for the feedback 4 сар өмнө
  anjuna krokus 0ac10f71a8 [fixed] Sire -> Sir. Tags added for Anya to fix image/video calls due to renaming 4 сар өмнө
  Lusticon 38bb0f45c2 [fixed] ballet use membership card deadend 4 сар өмнө
43 өөрчлөгдсөн 651 нэмэгдсэн , 366 устгасан
  1. 20 1
      MakeQSP.bat
  2. 1 0
      glife.qproj
  3. 6 51
      locations/LOCA.qsrc
  4. 1 1
      locations/ballet_secrets.qsrc
  5. 22 6
      locations/body.qsrc
  6. 16 1
      locations/body_structure.qsrc
  7. 1 1
      locations/budgetclothes.qsrc
  8. 127 16
      locations/bus.qsrc
  9. 0 4
      locations/cikl.qsrc
  10. 1 1
      locations/city_center.qsrc
  11. 1 1
      locations/city_residential.qsrc
  12. 54 0
      locations/debug_tools.qsrc
  13. 1 1
      locations/din_van.qsrc
  14. 24 24
      locations/intro_city_select.qsrc
  15. 1 1
      locations/intro_functions.qsrc
  16. 15 20
      locations/intro_sg.qsrc
  17. 25 25
      locations/intro_sg_select.qsrc
  18. 43 81
      locations/intro_sg_tg.qsrc
  19. 16 4
      locations/intro_uni.qsrc
  20. 1 1
      locations/kendra.qsrc
  21. 5 1
      locations/loadg.qsrc
  22. 2 0
      locations/metro.qsrc
  23. 3 3
      locations/onobjsel.qsrc
  24. 1 1
      locations/pav_complex.qsrc
  25. 1 1
      locations/pav_market.qsrc
  26. 21 14
      locations/pav_park_sex.qsrc
  27. 3 3
      locations/pav_parkev.qsrc
  28. 2 0
      locations/pav_train_hall.qsrc
  29. 22 31
      locations/prostitution_functions.qsrc
  30. 8 9
      locations/pushkin_ballet_res.qsrc
  31. 1 1
      locations/pushkin_sq.qsrc
  32. 5 0
      locations/saveupdater.qsrc
  33. 2 2
      locations/sentence.qsrc
  34. 1 0
      locations/sex_ev_morning.qsrc
  35. 1 1
      locations/stat.qsrc
  36. 41 8
      locations/stat_display.qsrc
  37. 1 2
      locations/therapist_hotel.qsrc
  38. 1 1
      locations/transport_functions.qsrc
  39. 3 3
      locations/underwear.qsrc
  40. 1 1
      locations/underwear_bodysuits.qsrc
  41. 1 1
      locations/uni_grounds.qsrc
  42. 85 43
      locations/wardrobe.qsrc
  43. 64 0
      tools/build_debug.py

+ 20 - 1
MakeQSP.bat

@@ -69,17 +69,19 @@ if defined NOT_FOUND (
 )
 
 echo.
-echo ACTIONS: (B)uild  (R)un  (F)ull  (Q)Gen (V)alidate (E)xit
+echo ACTIONS: (B)uild  (D)ebug  (R)un  (F)ull  (Q)Gen  (V)alidate  (E)xit
 echo.
 set /p action=Choose an action:
 
 if defined QSPFILE (
 	if %action% == b goto build
+	if %action% == d goto build_debug
 	if %action% == r goto run
 	if %action% == f goto build
 	if %action% == v goto parser
 	if %action% == q goto qgen
 	if %action% == B goto build
+	if %action% == D goto build_debug
 	if %action% == R goto run
 	if %action% == F goto build
 	if %action% == V goto parser
@@ -109,6 +111,23 @@ echo Done.
 pause
 if %action% == f ( goto run ) else ( goto menu )
 
+:build_debug
+echo.
+echo Building DEBUG ...
+
+@ECHO ON
+python tools\build_debug.py locations glife.txt
+tools\txt2gam.exe glife.txt %QSPFILE% > nul
+@ECHO OFF
+
+echo.
+if defined CP_TO ( echo Copying %QSPFILE% to "%CP_TO%" ... & copy %QSPFILE% %CP_TO% > nul )
+
+echo.
+echo Done.
+pause
+goto menu
+
 :qgen
 echo.
 echo Running ...

+ 1 - 0
glife.qproj

@@ -32,6 +32,7 @@
 		<Location name="$difficulty"/>
 		<Location name="UnitAppearance"/>
 		<Location name="notification"/>
+		<Location name="debug_tools"/>
 	</Folder>
 	<Folder name="Stats">
 		<Location name="DNA"/>

+ 6 - 51
locations/LOCA.qsrc

@@ -1,5 +1,11 @@
 # LOCA
 
+if debug['trace_loc_change'] = 1:
+	copyarr '$trace_args', '$ARGS'
+	copyarr 'trace_args', 'ARGS'
+	gs 'debug_tools', 'trace', 'loc_change'
+end
+
 if settingmode!0: killvar '$cheatmenu'
 
 !{
@@ -31,55 +37,4 @@ if mod_list > 0:
 	end
 end
 
-if call_trace_enabled ! 0 and call_trace_manual = 0:
-	$call_trace_line = "'<<$curloc>>'"
-
-	call_trace_index = 0
-	:call_trace_loop
-	if call_trace_index < arrsize("$ARGS"):
-		if $ARGS[call_trace_index] ! '':
-			$call_trace_line += ", '<<$ARGS[call_trace_index]>>'"
-		else
-			$call_trace_line += ", <<ARGS[call_trace_index]>>"
-		end
-		call_trace_index += 1
-		jump 'call_trace_loop'
-	end
-	killvar 'call_trace_index'
-
-	$call_trace += $call_trace_line + '<br>'
-	killvar '$call_trace_line'
-	if call_trace_shown ! 0: gs 'stat_display'
-end
-
-!!	MANUAL CALL TRACE SNIPPET
-!?	Why use manual call trace:
-!	- auto mode doesnt catch `gs` calls, manual does
-!?	HOWTO use:
-!	- put it at the head of the location you want to debug
-!	  set location name (if you want it to make sense and look nice)
-
-! {
-call_trace_manual = 1
-$call_trace_line = "'PUT_LOC_NAME_HERE'"
-
-call_trace_index = 0
-:call_trace_loop
-if call_trace_index < arrsize("$ARGS"):
-    if $ARGS[call_trace_index] ! '':
-        $call_trace_line += ", '<<$ARGS[call_trace_index]>>'"
-    else
-        $call_trace_line += ", <<ARGS[call_trace_index]>>"
-    end
-    call_trace_index += 1
-    jump 'call_trace_loop'
-end
-killvar 'call_trace_index'
-
-$call_trace += $call_trace_line + '<br>'
-killvar '$call_trace_line'
-if call_trace_shown ! 0: gs 'stat_display'
-}
-
 --- LOCA ---------------------------------
-

+ 1 - 1
locations/ballet_secrets.qsrc

@@ -33,7 +33,7 @@ if $ARGS[0] = 'init':
   else
     'You look at the shop window and realise it''s closed, there is a security door to the left of you that allows you access the studio areas if you are a member.'
     if balletqw['membership'] >= daystart:
-      act 'Swipe membership card': gt $loc, 'membership'
+      act 'Swipe membership card': gt $loc, 'reception'
     end
   end
 

+ 22 - 6
locations/body.qsrc

@@ -228,6 +228,20 @@ if $ARGS[0] = 'Update_Hair':
 	if pcs_haircol ! nathcol and dyefade > 0:
 		dyefade -= 1
 	end
+	
+	!! daily reduction of braids
+	if hbraids > 0: hbraids -= 1
+
+	!! loss of updo if hair too long
+	if pcs_hairlng > 400 and hpingripw = 1:
+		hpingripw = 0
+	end
+
+	!! loss of pigtails if hair too long
+	if pcs_hairlng > 800 and hscrunchw = 2 = 1:
+		hpigtail = 0
+		hscrunchw = 0
+	end
 end
 
 if $ARGS[0] = 'Update_Pubes_and_leghair':
@@ -475,6 +489,7 @@ end
 
 !! All the ratios were rounded to 2 digits and there are divide 100s at the final calc points
 
+! Lies between 65 and 96
 if $ARGS[0] = 'Find_waist_to_hip_ratio':
 	temp_wratio = (2 * vitalbuf + strenbuf + agilbuf) / 4
 
@@ -503,7 +518,7 @@ if $ARGS[0] = 'Find_waist_to_hip_ratio':
 
 	killvar 'temp_wratio'
 
-
+! Lies between 105 and 125
 elseif $ARGS[0] = 'Find_band_to_waist_ratio':
 	temp_bratio = (2 * strenbuf + vitalbuf + agilbuf) / 4
 
@@ -519,7 +534,7 @@ elseif $ARGS[0] = 'Find_band_to_waist_ratio':
 
 	killvar 'temp_bratio'
 
-
+! Lies between 56 and 60
 elseif $ARGS[0] = 'Find_hip_to_height_ratio':
 	temp_hratio = (2 * agilbuf + vitalbuf + strenbuf) / 4
 
@@ -746,7 +761,7 @@ if $ARGS[0] = 'Set_mass_distribution_using_body':
 	pcs_mass['bust_message'] = pcs_mass['bust']
 	pcs_mass['butt_message'] = pcs_mass['butt']
 	
-	bodyVars['vhips'] = (pcs_mass['body'] - 60 + pcs_mass['butt'] - pcs_mass['butt_gen']) / 2
+	bodyVars['vhips'] = (pcs_mass['body'] + pcs_mass['butt'] - 80) / 2
 end
 
 
@@ -754,7 +769,7 @@ end
 
 
 if $ARGS[0] = 'Update_vhips':
-	vhtmp = (pcs_mass['body'] - 60 + pcs_mass['butt'] - pcs_mass['butt_gen']) / 2
+	vhtmp = (pcs_mass['body'] + pcs_mass['butt'] - 80) / 2
 
 	!	Because a reset should be updating hip size instantly (this set is a bit redundant anyway)
 	if bodyresetflag = 1:
@@ -770,7 +785,7 @@ if $ARGS[0] = 'Update_vhips':
 
 	!! Varies between 0 and 25 to 30 ish range
 	!bodyVars['butt_bonus'] = max(0, pcs_mass['butt'] - max(0, bodyVars['vhips']))
-	bodyVars['butt_bonus'] = 0
+	bodyVars['butt_bonus'] = (pcs_mass['butt'] - 20) / 3
 	
 	!! temp_vhips2 = vhips + (pcs_hgt * bodyVars['hratio'])/100 - (pcs_hgt * 72)/100
 	!! temp_vhips2 = pcs_hips - (pcs_hgt * 72) / 1000
@@ -879,7 +894,7 @@ if $ARGS[0] = 'hardreset':
 			pcs_mass['butt_gen'] = 20
 		end
 
-		bodyVars['vhips'] = (pcs_mass['body'] - 60 + pcs_mass['butt'] - pcs_mass['butt_gen']) / 2
+		bodyVars['vhips'] = (pcs_mass['body'] + pcs_mass['butt'] - 80) / 2
 
 		if pcs_mass['bust_gen'] = 0:
 			if pcs_mass['bust'] >= 27:
@@ -959,6 +974,7 @@ if $ARGS[0] = 'initial':
 	killvar 'temp_bmi'
 
 	gs 'body', 'UpdateBodyImage'
+	gs 'body', 'Update_Appearance'
 end
 
 

+ 16 - 1
locations/body_structure.qsrc

@@ -226,8 +226,12 @@ if $ARGS[0] = 'body_img':
 			bs_temp_bs_class = 100 * (bs_temp_bs_class / 100) + 4
 		elseif fixbodset = 1:
 			bs_temp_bs_class = 100 * (bs_temp_bs_class / 100) + 6
-		else
+		elseif fixbodset = 2:
 			bs_temp_bs_class = 100 * (bs_temp_bs_class / 100) + 8
+		else
+			$result = func('body_structure', 'custom_body_img', bs_temp_bs_class)
+			killvar 'bs_temp_bs_class'
+			exit
 		end
 	end
 
@@ -320,6 +324,17 @@ if $ARGS[0] = 'body_img':
 	killvar 'bs_temp_bs_class'
 end
 
+if $ARGS[0] = 'custom_body_img':
+	ARGS[1] = ARGS[1] / 100
+	if ARGS[1] = 0 or ARGS[1] >= 6:
+		if dyneval('result = imset<<ARGS[1]>>ovr[<<fixbodset>>]') = 0:
+			$result = 'images/pc/body/shape/<<ARGS[1]>>.jpg'
+			exit
+		end
+	end
+	$result = 'images/pc/body/shape/<<$bodimgsets[((fixbodset * 10) + 9)]>>/<<ARGS[1]>>.jpg'
+end
+
 
 !	Get the body description
 !	$bodyVars['desc'] = func('body_structure', 'body_desc', pcs_bmi, strenbuf, succubusflag)

+ 1 - 1
locations/budgetclothes.qsrc

@@ -344,7 +344,7 @@ if $ARGS[0] = 'gm_server':
 	*nl
 
 	gs 'clothing_QV', 'shop_filter_header'
-	gs 'clothing', 'totals', 'gm_outfits'
+	gs 'clothing', 'totals', 'gm_server'
 
 	act 'Return':
 		cla

+ 127 - 16
locations/bus.qsrc

@@ -21,7 +21,20 @@ if $ARGS[0] = 'community':
 	menu_off = 0
 	gs 'stat'
 
-	'<center><img <<$set_imgh>> src="images/locations/system/image_needed.jpg" ></center>'
+	if month >= 11 or month <= 3:
+		if hour >= 9 and hour <= 16:
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/winter_day<<rand(1, 3)>>.jpg"></center>'
+		else
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/winter_night<<rand(1, 3)>>.jpg"></center>'
+		end
+	else
+		if hour >= 7 and hour <= 18:
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/day<<rand(1, 3)>>.jpg"></center>'
+		else
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/night<<rand(1, 3)>>.jpg"></center>'
+		end
+	end
+
 	'The community center bus stop'
 	*nl
 	gs 'transport_functions', 'set_bus_wait_time', 'community'
@@ -35,7 +48,8 @@ if $ARGS[0] = 'community':
 			func('transport_functions', 'display_buspass_time')
 			act 'Go to platforms': gt 'bus', 'community_busses'
 		else
-			act 'Buy a ticket': gt 'bus', 'community_tickets'
+			act 'Walk to the ticket machine': gt 'bus', 'community_tickets'
+			gs 'transport_functions', 'buy_bus_pass'
 		end
 	else
 		'It''s too late to take the bus. The next one arrives in <<transportVars[''bus_wait_gadukino'']/60>> hours'
@@ -93,12 +107,26 @@ if $ARGS[0] = 'pavstation':
 	menu_off = 0
 	gs 'stat'
 
-	'<center><img <<$set_imgh>> src="images/locations/system/image_needed.jpg" ></center>'
+	if month >= 11 or month <= 3:
+		if hour >= 9 and hour <= 16:
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/winter_day<<rand(1, 3)>>.jpg"></center>'
+		else
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/winter_night<<rand(1, 3)>>.jpg"></center>'
+		end
+	else
+		if hour >= 7 and hour <= 18:
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/day<<rand(1, 3)>>.jpg"></center>'
+		else
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/night<<rand(1, 3)>>.jpg"></center>'
+		end
+	end
+
 	'The Pavlovsk train station bus stop'
 	*nl
 	gs 'transport_functions', 'set_bus_wait_time', 'pavstation'
 
 	act 'Walk to the train station (0:02)': minut += 2 & gt 'pav_train_hall'
+	if transportVars['trainpass_day'] > daystart: act 'Walk to the train platform (0:02)': minut += 2 & gt 'pav_train_hall', 'platform'
 
 	if transportVars['bus_wait_pavlovsk'] <= 60 or transportVars['bus_wait_gadukino'] <= 60:
 		'The next bus in the direction of the Pavlovsk community center ' + iif(transportVars['bus_wait_pavlovsk'] = 0, 'is leaving now!', 'leaves in <<transportVars[''bus_wait_pavlovsk'']>> minutes.')
@@ -109,7 +137,8 @@ if $ARGS[0] = 'pavstation':
 			func('transport_functions', 'display_buspass_time')
 			act 'Go to platforms': gt 'bus', 'pavstation_busses'
 		else
-			act 'Buy a ticket': gt 'bus', 'pavstation_tickets'
+			act 'Walk to the ticket machine': gt 'bus', 'pavstation_tickets'
+			gs 'transport_functions', 'buy_bus_pass'
 		end
 	else
 		'It''s too late to take the bus. The next one arrives in <<min(transportVars[''bus_wait_pavlovsk'']/60, transportVars[''bus_wait_gadukino'']/60)>> hours.'
@@ -174,7 +203,20 @@ if $ARGS[0] = 'pushkin':
 	menu_off = 0
 	gs 'stat'
 
-	'<center><img <<$set_imgh>> src="images/locations/system/image_needed.jpg" ></center>'
+	if month >= 11 or month <= 3:
+		if hour >= 9 and hour <= 16:
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/winter_day<<rand(1, 3)>>.jpg"></center>'
+		else
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/winter_night<<rand(1, 3)>>.jpg"></center>'
+		end
+	else
+		if hour >= 7 and hour <= 18:
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/day<<rand(1, 3)>>.jpg"></center>'
+		else
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/night<<rand(1, 3)>>.jpg"></center>'
+		end
+	end
+
 	'The bus stop in the old town center of Pushkin'
 	*nl
 	gs 'transport_functions', 'set_bus_wait_time', 'pushkin'
@@ -189,7 +231,7 @@ if $ARGS[0] = 'pushkin':
 			func('transport_functions', 'display_buspass_time')
 			act 'Go to platforms': gt 'bus', 'pushkin_busses'
 		else
-			act 'Buy a ticket': gt 'bus', 'pushkin_tickets'
+			act 'Walk to the ticket machine': gt 'bus', 'pushkin_tickets'
 		end
 	else
 		'It''s too late to take the bus. The next one arrives in <<min(transportVars[''bus_wait_pavlovsk'']/60, transportVars[''bus_wait_gadukino'']/60)>> hours.'
@@ -254,7 +296,20 @@ if $ARGS[0] = 'construction':
 	menu_off = 0
 	gs 'stat'
 
-	'<center><img <<$set_imgh>> src="images/locations/system/image_needed.jpg" ></center>'
+	if month >= 11 or month <= 3:
+		if hour >= 9 and hour <= 16:
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/winter_day<<rand(1, 3)>>.jpg"></center>'
+		else
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/winter_night<<rand(1, 3)>>.jpg"></center>'
+		end
+	else
+		if hour >= 7 and hour <= 18:
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/day<<rand(1, 3)>>.jpg"></center>'
+		else
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/night<<rand(1, 3)>>.jpg"></center>'
+		end
+	end
+
 	'The temporary bus stop near the construction site'
 	*nl
 	gs 'transport_functions', 'set_bus_wait_time', 'construction'
@@ -269,7 +324,7 @@ if $ARGS[0] = 'construction':
 			func('transport_functions', 'display_buspass_time')
 			act 'Go to platforms': gt 'bus', 'construction_busses'
 		else
-			act 'Buy a ticket': gt 'bus', 'construction_tickets'
+			act 'Walk to the ticket machine': gt 'bus', 'construction_tickets'
 		end
 	else
 		'It''s too late to take the bus. The next one arrives in <<min(transportVars[''bus_wait_pavlovsk'']/60, transportVars[''bus_wait_gadukino'']/60)>> hours.'
@@ -334,7 +389,20 @@ if $ARGS[0] = 'gadukino':
 	menu_off = 0
 	gs 'stat'
 
-	'<center><img <<$set_imgh>> src="images/locations/system/image_needed.jpg" ></center>'
+	if month >= 11 or month <= 3:
+		if hour >= 9 and hour <= 16:
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/winter_day<<rand(1, 3)>>.jpg"></center>'
+		else
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/winter_night<<rand(1, 3)>>.jpg"></center>'
+		end
+	else
+		if hour >= 7 and hour <= 18:
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/day<<rand(1, 3)>>.jpg"></center>'
+		else
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/night<<rand(1, 3)>>.jpg"></center>'
+		end
+	end
+
 	'The bus stop at the forest road of the village of Gadukino'
 	*nl
 	gs 'transport_functions', 'set_bus_wait_time', 'gadukino'
@@ -349,7 +417,8 @@ if $ARGS[0] = 'gadukino':
 			func('transport_functions', 'display_buspass_time')
 			act 'Go to platforms': gt 'bus', 'gadukino_busses'
 		else
-			act 'Buy a ticket': gt 'bus', 'gadukino_tickets'
+			act 'Walk to the ticket machine': gt 'bus', 'gadukino_tickets'
+			gs 'transport_functions', 'buy_bus_pass'
 		end
 	else
 		'It''s too late to take the bus. The next one arrives in <<min(transportVars[''bus_wait_pavlovsk'']/60, transportVars[''bus_wait_suburbs'']/60)>> hours.'
@@ -419,7 +488,20 @@ if $ARGS[0] = 'communal':
 	menu_off = 0
 	gs 'stat'
 
-	'<center><img <<$set_imgh>> src="images/locations/system/image_needed.jpg" ></center>'
+	if month >= 11 or month <= 3:
+		if hour >= 9 and hour <= 16:
+			'<center><img <<$set_imgh>> src="images/shared/bus/winter_day<<rand(1, 3)>>.jpg"></center>'
+		else
+			'<center><img <<$set_imgh>> src="images/shared/bus/winter_night<<rand(1, 3)>>.jpg"></center>'
+		end
+	else
+		if hour >= 7 and hour <= 18:
+			'<center><img <<$set_imgh>> src="images/shared/bus/day<<rand(1, 3)>>.jpg"></center>'
+		else
+			'<center><img <<$set_imgh>> src="images/shared/bus/night<<rand(1, 3)>>.jpg"></center>'
+		end
+	end
+
 	'The bus stop in the communal village'
 	*nl
 	gs 'transport_functions', 'set_bus_wait_time', 'communal'
@@ -437,7 +519,7 @@ if $ARGS[0] = 'communal':
 			func('transport_functions', 'display_buspass_time')
 			act 'Go to platforms': gt 'bus', 'communal_busses'
 		else
-			act 'Buy a ticket': gt 'bus', 'communal_tickets'
+			act 'Walk to the ticket machine': gt 'bus', 'communal_tickets'
 		end
 	else
 		'It''s too late to take the bus. The next one arrives in <<min(transportVars[''bus_wait_gadukino'']/60, transportVars[''bus_wait_suburbs'']/60)>> hours.'
@@ -501,7 +583,20 @@ if $ARGS[0] = 'graveyard':
 	menu_off = 0
 	gs 'stat'
 
-	'<center><img <<$set_imgh>> src="images/locations/system/image_needed.jpg" ></center>'
+	if month >= 11 or month <= 3:
+		if hour >= 9 and hour <= 16:
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/winter_day<<rand(1, 3)>>.jpg"></center>'
+		else
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/winter_night<<rand(1, 3)>>.jpg"></center>'
+		end
+	else
+		if hour >= 7 and hour <= 18:
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/day<<rand(1, 3)>>.jpg"></center>'
+		else
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/night<<rand(1, 3)>>.jpg"></center>'
+		end
+	end
+
 	'The cemetery bus stop'
 	*nl
 	gs 'transport_functions', 'set_bus_wait_time', 'graveyard'
@@ -516,7 +611,7 @@ if $ARGS[0] = 'graveyard':
 			func('transport_functions', 'display_buspass_time')
 			act 'Go to platforms': gt 'bus', 'graveyard_busses'
 		else
-			act 'Buy a ticket': gt 'bus', 'graveyard_tickets'
+			act 'Walk to the ticket machine': gt 'bus', 'graveyard_tickets'
 		end
 	else
 		'It''s too late to take the bus. The next one arrives in <<min(transportVars[''bus_wait_gadukino'']/60, transportVars[''bus_wait_suburbs'']/60)>> hours.'
@@ -580,13 +675,28 @@ if $ARGS[0] = 'suburbs':
 	menu_off = 0
 	gs 'stat'
 
-	'<center><img <<$set_imgh>> src="images/locations/system/image_needed.jpg" ></center>'
+	if month >= 11 or month <= 3:
+		if hour >= 9 and hour <= 16:
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/winter_day<<rand(1, 3)>>.jpg"></center>'
+		else
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/winter_night<<rand(1, 3)>>.jpg"></center>'
+		end
+	else
+		if hour >= 7 and hour <= 18:
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/day<<rand(1, 3)>>.jpg"></center>'
+		else
+			'<center><img <<$set_imgh>> src="images/locations/shared/bus/night<<rand(1, 3)>>.jpg"></center>'
+		end
+	end
+
 	'The bus stop near the suburbs of St. Petersburg'
 	*nl
 	gs 'transport_functions', 'set_bus_wait_time', 'suburbs'
 
 	act 'Walk to the suburbs (0:05)': minut += 5 & gt 'city_suburbs', 'start'
 
+	if hour >= 4 and hour < 23: act 'Walk to the Metro station (0:15)': minut += 15 & $loc = 'city_suburbs' & $loc_arg = 'start' & gt 'metro', 'start'
+
 	if transportVars['bus_wait_gadukino'] <= 60:
 		'The next bus in the direction of Gadukino ' + iif(transportVars['bus_wait_gadukino'] = 0, 'is leaving now!', 'leaves in <<transportVars[''bus_wait_gadukino'']>> minutes.')
 		if transportVars['buspass_day'] > daystart:
@@ -594,7 +704,8 @@ if $ARGS[0] = 'suburbs':
 			func('transport_functions', 'display_buspass_time')
 			act 'Go to platforms': gt 'bus', 'suburbs_busses'
 		else
-			act 'Buy a ticket': gt 'bus', 'suburbs_tickets'
+			act 'Walk to the ticket machine': gt 'bus', 'suburbs_tickets'
+			gs 'transport_functions', 'buy_bus_pass'
 		end
 	else
 		'It''s too late to take the bus. The next one arrives in <<transportVars[''bus_wait_gadukino'']/60>> hours'

+ 0 - 4
locations/cikl.qsrc

@@ -354,10 +354,6 @@ if defcurly = 1:
 	if straight = 0: curly = 2147483647
 end
 
-! WD: Added daily reduction of braids for Maruda Hair Mod
-if hbraids > 0: hbraids -= 1
-
-
 gs 'sweat', 'add', 2
 
 if pcs_tan > 0: pcs_tan -= 1

+ 1 - 1
locations/city_center.qsrc

@@ -49,7 +49,7 @@ end
 
 gs 'street_event','city_center', 'extras'
 
-if mother['kickedout_timer'] ! 0 and mother['kickedout_timer'] + 3 <= daystart and hour > 6 and hour <= 15:
+if mother['kickedout_timer'] ! 0 and mother['kickedout_timer'] + 3 <= daystart and hour > 6 and hour <= 15 and $ARGS[1] ! 'mom_check' and cumloc[11] = 0:
 	gs 'mother_chats', 'reconciliation_talk'
 exit
 end

+ 1 - 1
locations/city_residential.qsrc

@@ -53,7 +53,7 @@ if gopdeath = 1 and vsehsdaladay ! daystart:
 	gt 'gameover'
 end
 
-if mother['kickedout_timer'] ! 0 and mother['kickedout_timer'] + 3 <= daystart and hour > 6 and hour <= 15:
+if mother['kickedout_timer'] ! 0 and mother['kickedout_timer'] + 3 <= daystart and hour > 6 and hour <= 15 and cumloc[11] = 0:
 	gs 'mother_chats', 'reconciliation_talk'
 exit
 end

+ 54 - 0
locations/debug_tools.qsrc

@@ -0,0 +1,54 @@
+# debug_tools
+
+if $ARGS[0] = 'trace':
+	if $ARGS[1] = 'loc_change':
+		if debug['trace_loc_change'] = 0: exit
+		$debug['trace_line'] = "'<<$curloc>>'"
+	elseif $ARGS[1] = 'direct':
+		if arrsize('$trace_locations') = 0: exit
+		if arrpos("$trace_locations", $ARGS[2]) = -1: exit
+		$debug['trace_line'] = "'<<$ARGS[2]>>'"
+	else
+		exit
+	end
+
+	debug['trace_index'] = 0
+	:trace_loc_change_loop
+	if debug['trace_index'] < arrsize("$trace_args"):
+		if $trace_args[debug['trace_index']] ! '':
+			$debug['trace_line'] += ", '<<$trace_args[debug['trace_index']]>>'"
+		elseif trace_args[debug['trace_index']] ! 0:
+			$debug['trace_line'] += ", <<trace_args[debug['trace_index']]>>"
+		else
+			$debug['trace_line'] += ", /DEF"
+		end
+		debug['trace_index'] += 1
+		jump 'trace_loc_change_loop'
+	end
+	! killvar 'call_trace_index'
+	killvar '$trace_args' & killvar 'trace_args'
+
+	$debug['<<$ARGS[1]>>_trace'] += $debug['trace_line'] + '<br>'
+	! killvar '$call_trace_line'
+	if debug['trace_shown'] ! 0: gs 'stat_display'
+!?end
+
+elseif $ARGS[0] = 'trace_list_locs':
+	tmp_i = 0
+	:list_locs_loop
+	if tmp_i < arrsize('$trace_locations'):
+		$tmp_msg += $trace_locations[tmp_i] + '<br>'
+		tmp_i += 1
+		jump 'list_locs_loop'
+	end
+	msg $tmp_msg
+	killvar 'tmp_i' & killvar '$tmp_msg'
+!?end
+
+elseif $ARGS[0] = 'reset':
+	$debug['loc_change_trace'] = ''
+	$debug['direct_trace'] = ''
+end
+
+--- debug_tools ---------------------------------
+

+ 1 - 1
locations/din_van.qsrc

@@ -710,7 +710,7 @@ $publicpan = {
 	end
 
 	!! Changing into a different outfit for prostitution
-	if prostitute['active'] = 1 and ARGS[1] ! 'no_prost':
+	if prostitute['active'] = 1 and ARGS[1] ! 'no_prost' and $loc ! 'gschool_break':
 		gs 'prostitution_functions', 'work_clothes'
 		if  prostitute['work_clothes'] = 0 and prostitute['outfit_is_set']: 
 			act 'Change into prostitute outfit': gt 'prostitution_functions', 'change_to_work', 'restroom'

+ 24 - 24
locations/intro_city_select.qsrc

@@ -325,7 +325,7 @@ if $ARGS[0] = 'nerd':
 	pcs_eyesize		-= 1
 	pcs_lashes		-= 1
 	pcs_mass['bust_gen']	= 13	& !B-Cup at ideal BMI
-	pcs_mass['butt_gen']	= 20	& !pcs_butt = 8??
+	pcs_mass['butt_gen']	= 17	& !pcs_butt = 8
 	pcs_mass['body']		= 60
 
 	!!----- INVENTRORY -----!!
@@ -396,7 +396,7 @@ if $ARGS[0] = 'nerdqueen':
 		pcs_lip		+= 1
 		pcs_teeth	-= 1
 		pcs_mass['bust_gen']	= 22	& !D-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 12??
+		pcs_mass['butt_gen']	= 27	& !pcs_butt = 12
 		pcs_mass['body']		= 65
 
 		!!----- INVENTRORY -----!!
@@ -454,7 +454,7 @@ elseif $ARGS[0] = 'goodstudent':
 		!!----- APPEARANCE -----!!
 		pcs_hairlng		-= 100
 		pcs_mass['bust_gen']	= 18	& !C-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 8??
+		pcs_mass['butt_gen']	= 17	& !pcs_butt = 8
 		pcs_mass['body']		= 70
 
 		! Other
@@ -513,7 +513,7 @@ elseif $ARGS[0] = 'computergeek':
 		pcs_skin	-= 100
 		pcs_teeth	+= 1
 		pcs_mass['bust_gen']	= 13	& !B-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 8??
+		pcs_mass['butt_gen']	= 17	& !pcs_butt = 8
 		pcs_mass['body']	= 42
 
 		! Other
@@ -561,7 +561,7 @@ elseif $ARGS[0] = 'chessplayer':
 		!!----- APPEARANCE -----!!
 		pcs_hairlng		-= 100
 		pcs_mass['bust_gen']	= 13	& !B-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 8??
+		pcs_mass['butt_gen']	= 17	& !pcs_butt = 8
 		pcs_mass['body']		= 73
 
 		!!----- RELATIONSHIPS -----!!
@@ -636,7 +636,7 @@ if $ARGS[0] = 'jock':
 	pcs_eyesize		+= 1
 	pcs_lip			+= 1
 	pcs_mass['bust_gen']	= 12	& !B-Cup at ideal BMI
-	pcs_mass['butt_gen']	= 20	& !pcs_butt = 12
+	pcs_mass['butt_gen']	= 27	& !pcs_butt = 12
 	pcs_mass['body']		= 60
 
 	!!----- INVENTRORY -----!!
@@ -685,7 +685,7 @@ if $ARGS[0] = 'volleyball':
 
 		!!----- APPEARANCE -----!!
 		pcs_mass['bust_gen']	= 17	& !C-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 12
+		pcs_mass['butt_gen']	= 27	& !pcs_butt = 12
 		pcs_mass['body']		= 56
 
 		!!----- INVENTRORY -----!!
@@ -734,7 +734,7 @@ elseif $ARGS[0] = 'dancer':
 		pcs_eyesize		-= 1
 		pcs_teeth		-= 1
 		pcs_mass['bust_gen']	= 12	& !B-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 12
+		pcs_mass['butt_gen']	= 27	& !pcs_butt = 12
 		pcs_mass['body']		= 37
 
 		!!----- INVENTRORY -----!!
@@ -778,7 +778,7 @@ elseif $ARGS[0] = 'runner':
 
 		!!----- APPEARANCE -----!!
 		pcs_mass['bust_gen']	= 12	& !B-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 12
+		pcs_mass['butt_gen']	= 27	& !pcs_butt = 12
 		pcs_mass['body']		= 45
 
 		!!----- INVENTRORY -----!!
@@ -825,7 +825,7 @@ elseif $ARGS[0] = 'football':
 
 		!!----- APPEARANCE -----!!
 		pcs_mass['bust_gen']	= 17	& !C-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 12
+		pcs_mass['butt_gen']	= 27	& !pcs_butt = 12
 		pcs_mass['body']		= 60
 
 		!!----- INVENTRORY -----!!
@@ -884,7 +884,7 @@ if $ARGS[0] = 'cool':
 		pcs_eyecol	= 2
 		pcs_lip		+= 1
 		pcs_mass['bust_gen']	= 17	& !C-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 16
+		pcs_mass['butt_gen']	= 32	& !pcs_butt = 14
 		pcs_mass['body']		= 60
 
 	!!----- INVENTRORY -----!!
@@ -933,7 +933,7 @@ if $ARGS[0] = 'socialite':
 		!!----- APPEARANCE -----!!
 		pcs_hairlng	-= 100
 		pcs_mass['bust_gen']	= 18	& !C-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 16
+		pcs_mass['butt_gen']	= 32	& !pcs_butt = 14
 		pcs_mass['body']		= 60
 
 		!!----- INVENTRORY -----!!
@@ -989,7 +989,7 @@ elseif $ARGS[0] = 'beautiful':
 		pcs_lashes		+= 1
 		pcs_lip			+= 1
 		pcs_mass['bust_gen']	= 22	& !D-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 16
+		pcs_mass['butt_gen']	= 32	& !pcs_butt = 14
 		pcs_mass['body']		= 56
 
 		!!----- INVENTRORY -----!!
@@ -1067,7 +1067,7 @@ elseif $ARGS[0] = 'anorexic':
 		pcs_lip			-= 1
 		pcs_teeth		-= 1
 		pcs_mass['bust_gen']	= 13	& !B-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 8
+		pcs_mass['butt_gen']	= 17	& !pcs_butt = 8
 		pcs_mass['body']		= 15
 
 		!!----- INVENTRORY -----!!
@@ -1136,7 +1136,7 @@ if $ARGS[0] = 'gopnik':
 	pcs_eyesize		+= 1
 	pcs_lip			+= 1
 	pcs_mass['bust_gen']	= 13	& !B-Cup at ideal BMI
-	pcs_mass['butt_gen']	= 20
+	pcs_mass['butt_gen']	= 17	& !pcs_butt = 8
 	pcs_mass['body']		= 60
 
 	!!----- INVENTRORY -----!!
@@ -1207,7 +1207,7 @@ if $ARGS[0] = 'gopnikstart':
 
 		!!----- APPEARANCE -----!!
 		pcs_mass['bust_gen']	= 13	& !B-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20
+		pcs_mass['butt_gen']	= 17	& !pcs_butt = 8
 		pcs_mass['body']		= 65
 
 		!!----- RELATIONSHIPS -----!!
@@ -1258,7 +1258,7 @@ elseif $ARGS[0] = 'troublemaker':
 		!!----- APPEARANCE -----!!
 		pcs_hairlng		-= 65
 		pcs_mass['bust_gen']	= 13	& !B-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20
+		pcs_mass['butt_gen']	= 17	& !pcs_butt = 8
 		pcs_mass['body']		= 49
 
 		!!----- INVENTRORY -----!!
@@ -1321,7 +1321,7 @@ elseif $ARGS[0] = 'alternative':
 		pcs_eyesize	-= 1
 		pcs_teeth	-= 1
 		pcs_mass['bust_gen']	= 18	& !C-cup at ideal BMI
-		pcs_mass['butt_gen']	= 20
+		pcs_mass['butt_gen']	= 17	& !pcs_butt = 8
 		pcs_mass['body']		= 56
 
 		!!----- INVENTRORY -----!!
@@ -1403,7 +1403,7 @@ if $ARGS[0] = 'outcast':
 	pcs_eyesize		-= 1
 	pcs_lashes		-= 1
 	pcs_mass['bust_gen']	= 17	& !C-Cup at ideal BMI
-	pcs_mass['butt_gen']	= 20	& !pcs_butt = 4??
+	pcs_mass['butt_gen']	= 7		& !pcs_butt = 5
 	pcs_mass['body']		= 60
 
 	!!----- RELATIONSHIPS -----!!
@@ -1437,7 +1437,7 @@ if $ARGS[0] = 'friendless':
 		!!----- APPEARANCE -----!!
 		pcs_skin	-= 200
 		pcs_mass['bust_gen']	= 12	& !B-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20
+		pcs_mass['butt_gen']	= 7		& !pcs_butt = 5
 		pcs_mass['body']		= 51
 
 		!!----- RELATIONSHIPS -----!!
@@ -1475,7 +1475,7 @@ elseif $ARGS[0] = 'uglyduckling':
 		pcs_lashes	+= 2
 		pcs_lip		-= 1
 		pcs_mass['bust_gen']	= 28	& !E-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20
+		pcs_mass['butt_gen']	= 7		& !pcs_butt = 5
 		pcs_mass['body']		= 94
 
 		! Other
@@ -1522,7 +1522,7 @@ elseif $ARGS[0] = 'goodgirl':
 		pcs_lashes		+= 1
 		pcs_lip			+= 1
 		pcs_mass['bust_gen']	= 13	& !B-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20
+		pcs_mass['butt_gen']	= 7		& !pcs_butt = 5
 		pcs_mass['body']		= 43
 
 		!!----- INVENTRORY -----!!
@@ -1589,7 +1589,7 @@ elseif $ARGS[0] = 'slut':
 		pcs_lashes	+= 1
 		pcs_lip		+= 1
 		pcs_mass['bust_gen']	= 22	& !D-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 8
+		pcs_mass['butt_gen']	= 22	& !pcs_butt = 10
 		pcs_mass['body']		= 52
 
 		!!----- INVENTRORY -----!!
@@ -1693,7 +1693,7 @@ elseif $ARGS[0] = 'goth':
 		pcs_eyesize		+= 2
 		pcs_lashes		+= 1
 		pcs_mass['bust_gen']	= 13	& !B-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20
+		pcs_mass['butt_gen']	= 7		& !pcs_butt = 5
 		pcs_mass['body']		= 41
 
 		!!----- INVENTRORY -----!!

+ 1 - 1
locations/intro_functions.qsrc

@@ -85,7 +85,7 @@ if $ARGS[0] = 'set_base_stats':
 	pcs_leghair		= 12
 	pcs_teeth		= 0
 	pcs_mass['bust_gen']	= 17	& !C-Cup at ideal BMI
-	pcs_mass['butt_gen']	= 20
+	pcs_mass['butt_gen']	= 22
 	pcs_mass['body']		= 60
 	pcs_energy		= 60
 	pcs_hydra		= 60

+ 15 - 20
locations/intro_sg.qsrc

@@ -4,18 +4,17 @@ gs 'themes', 'indoors'
 
 if $ARGS[0] = 'start':
 	menu_off = 1
-
 	'<center><img <<$set_imgh>> src="images/system/1_openings/shared/pre_5.jpg"></center>'
-	'You were born in the small town of Pavlovsk near the city of St Petersburg. You have an older sister, Anya, who is two years older than you.'
-	'Your mother is Natasha. You don''t know much about your biological father; your mother never wants to talk about him, or why he left you and Anya with her.'
-	'Your mother met another man not too long after her and your biological father got divorced, Vladimir. Together they had your little brother Kolka. Even though he''s not your real father, Vladimir has always treated you and Anya as if you were his own children.'
-	act '<center><b>Continue</b></center>': gt 'intro_sg', 'Two'
+	'You were born in the small town of Pavlovsk, near the city of St Petersburg.'
+	'Your mother is Natasha, but you don''t know much about your biological father since your mother never wants to talk about him, or why he left you and your older sister, Anya.'
+	'Your mother met another man, Vladimir, not long after she and your biological father got divorced. Together, they had your little brother, Kolka. Even though he''s not your real father, Vladimir has always treated you and Anya as if you were his own children.'
+	act 'Continue': gt 'intro_sg', 'Two'
 end
 
 if $ARGS[0] = 'Two':
 	'<center><img <<$set_imgh>> src="images/system/1_openings/shared/pre_6.jpg"></center>'
 	'You had a pleasant, undisturbed childhood when you were young. Although you don''t remember much from kindergarten, you do remember going to elementary school when you were 6 years old.'
-	act '<center><b>Continue</b></center>': gt 'intro_sg', 'Three'
+	act 'Continue': gt 'intro_sg', 'Three'
 end
 
 if $ARGS[0] = 'Three':
@@ -25,25 +24,23 @@ if $ARGS[0] = 'Three':
 	'Like it does for most girls, you reached the milestone of puberty when you were 13 years old. You had your first period, which sucked, but that was just the start of your changes.'
 	'Your chest felt strange and you discovered your breasts were growing! This excited you: how big will they be when you grow up? Hair also began to grow in your armpits and pubic area, and at the same time you felt things... intimate things. Over time you learned to appreciate these feelings, and how to manage your developing body. Your troublesome skin complexion remains an issue though.'
 	'When you finished 9th grade, you decided to continue with your secondary education. You completed the first one, only one more year of school to go, but first: What type of student are you?'
-	act '<center><b>Time to choose</b></center>': gt 'intro_sg_select', 'start'
+	act 'Continue': gt 'intro_sg_select', 'start'
 end
 
 if $ARGS[0] = 'four':
 	$loc = 'intro_sg'
 	$loc_arg = 'four'
-
-
 	'<center><b><font color = maroon>Character Face</font></b></center>'
-	'<center><b>Allows you to alter hair and eyes, use to match fixed profile picture if in use.</b></center>'
+	'<center><b>Allows you to alter hair and eyes. Use to match fixed profile picture if in use.</b></center>'
 	'<center><img <<$set_imgh>> src="images/system/1_openings/shared/character_creation_2.jpg"></center>'
 	*nl
 	'<center>Customize your:</center>'
 	'<center><a href="exec:gs ''intro_customization'', ''hair''"><img src="images/system/1_openings/shared/icon_hair.png"></a> <a href="exec:gs ''intro_customization'', ''eyes''"><img src="images/system/1_openings/shared/icon_eye.png"></a></center>'
 
-	if $start_type = 'sg_m':
-		act '<center><b>Done</b></center>': gt 'intro_sg_m', 'four'
+	if $start_type['magic'] = 'magic':
+		act 'Finished': gt 'intro_sg_m', 'four'
 	else
-		act '<center><b>Done</b></center>': gt 'intro_sg', 'five'
+		act 'Finished': gt 'intro_sg', 'five'
 	end
 end
 
@@ -53,11 +50,10 @@ if $ARGS[0] = 'five':
 	showstat 1
 	showobjs 1
 	gs 'obj_din', 'old'
-	*clr
-	cla
+	*clr & cla
 	'<center><img <<$set_imgh>> src="images/system/1_openings/2_sg/start_sg.jpg"></center>'
 	'Welcome to the Schoolgirl version! You will need to carry on with your school life, manage your relationships and deal with whatever else comes up along the way!'
-	act 'Begin':
+	act 'Start':
 		close all
 		if start_location = 2:
 			gt 'gadhouse', 'intro'
@@ -67,10 +63,9 @@ if $ARGS[0] = 'five':
 	end
 	act 'Restart':
 		*clr & cla
-		'This will reset everything and take you back to the begining.'
-		'Are you <i><b>very</i></b> sure you want to start from the begining again?'
-		act 'No, I hit the wrong option!': gt 'intro_sg', 'four'
-		act 'Yes, I''m sure, start over.': killall & gt 'start'
+		'This will reset everything and take you back to the beginning. Are you sure you want to start again?'
+		act 'No': gt 'intro_sg', 'four'
+		act 'Yes': killall & gt 'start'
 	end
 end
 

+ 25 - 25
locations/intro_sg_select.qsrc

@@ -394,7 +394,7 @@ if $ARGS[0] = 'nerd':
 	pcs_eyesize		-= 1
 	pcs_lashes		-= 1
 	pcs_mass['bust_gen']	= 13	& !B-Cup at ideal BMI
-	pcs_mass['butt_gen']	= 20	& !pcs_butt = 8??
+	pcs_mass['butt_gen']	= 17	& !pcs_butt = 8
 	pcs_mass['body']		= 60
 
 	!!----- INVENTRORY -----!!
@@ -472,7 +472,7 @@ if $ARGS[0] = 'nerdqueen':
 		pcs_lip			+= 1
 		pcs_teeth		-= 1
 		pcs_mass['bust_gen']	= 22	& !D-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 12??
+		pcs_mass['butt_gen']	= 27	& !pcs_butt = 12
 		pcs_mass['body']		= 65
 
 		!!----- INVENTORY -----!!
@@ -533,7 +533,7 @@ elseif $ARGS[0] = 'goodstudent':
 		!!----- APPEARANCE -----!!
 		pcs_hairlng		-= 100
 		pcs_mass['bust_gen']	= 18	& !C-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 8??
+		pcs_mass['butt_gen']	= 17	& !pcs_butt = 8
 		pcs_mass['body']		= 70
 
 		! other
@@ -595,7 +595,7 @@ elseif $ARGS[0] = 'computergeek':
 		pcs_hairlng 	-= 180
 		pcs_teeth		+= 1
 		pcs_mass['bust_gen']	= 13	& !B-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 8??
+		pcs_mass['butt_gen']	= 17	& !pcs_butt = 8
 		pcs_mass['body']		= 42
 
 		! Other
@@ -641,7 +641,7 @@ elseif $ARGS[0] = 'chessplayer':
 		!!----- APPEARANCE -----!!
 		pcs_hairlng 	-= 100
 		pcs_mass['bust_gen']	= 13	& !B-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 8??
+		pcs_mass['butt_gen']	= 17	& !pcs_butt = 8
 		pcs_mass['body']		= 73
 
 		!!----- RELATIONSHIPS -----!!
@@ -717,7 +717,7 @@ if $ARGS[0] = 'jock':
 	pcs_eyesize		+= 1
 	pcs_lip			+= 1
 	pcs_mass['bust_gen']	= 12	& !B-Cup at ideal BMI
-	pcs_mass['butt_gen']	= 20	& !pcs_butt = 12??
+	pcs_mass['butt_gen']	= 27	& !pcs_butt = 12
 	pcs_mass['body']		= 60
 
 	!!----- INVENTRORY -----!!
@@ -769,7 +769,7 @@ if $ARGS[0] = 'volleyball':
 
 		!!----- APPEARANCE -----!!
 		pcs_mass['bust_gen']	= 17	& !C-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 12??
+		pcs_mass['butt_gen']	= 27	& !pcs_butt = 12
 		pcs_mass['body']		= 56
 
 		!!----- INVENTRORY -----!!
@@ -826,7 +826,7 @@ elseif $ARGS[0] = 'dancer':
 		pcs_teeth		-= 1
 
 		pcs_mass['bust_gen']	= 12	& !B-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 12??
+		pcs_mass['butt_gen']	= 27	& !pcs_butt = 12
 		pcs_mass['body']		= 37
 
 		!!----- INVENTRORY -----!!
@@ -871,7 +871,7 @@ elseif $ARGS[0] = 'runner':
 
 		!!----- APPEARANCE -----!!
 		pcs_mass['bust_gen']	= 12	& !B-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 12??
+		pcs_mass['butt_gen']	= 27	& !pcs_butt = 12
 		pcs_mass['body']		= 45
 
 		!!----- INVENTRORY -----!!
@@ -913,7 +913,7 @@ elseif $ARGS[0] = 'football':
 
 		!!----- APPEARANCE -----!!
 		pcs_mass['bust_gen']	= 17	& !C-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 12??
+		pcs_mass['butt_gen']	= 27	& !pcs_butt = 12
 		pcs_mass['body']		= 60
 
 		!!----- INVENTRORY -----!!
@@ -973,7 +973,7 @@ if $ARGS[0] = 'cool':
 	pcs_eyecol		= 2
 	pcs_lip			+= 1
 	pcs_mass['bust_gen']	= 22	& !D-Cup at ideal BMI
-	pcs_mass['butt_gen']	= 20	& !pcs_butt = 16
+	pcs_mass['butt_gen']	= 32	& !pcs_butt = 14
 	pcs_mass['body']		= 60
 
 	!!----- INVENTRORY -----!!
@@ -1027,7 +1027,7 @@ if $ARGS[0] = 'socialite':
 		!!----- APPEARANCE -----!!
 		pcs_hairlng		= 200
 		pcs_mass['bust_gen']	= 18	& !C-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 16
+		pcs_mass['butt_gen']	= 32	& !pcs_butt = 14
 		pcs_mass['body']		= 60
 
 		!!----- INVENTRORY -----!!
@@ -1086,7 +1086,7 @@ elseif $ARGS[0] = 'beautiful':
 		pcs_lip		+= 1
 		pcs_teeth	-= 1
 		pcs_mass['bust_gen']	= 20	& !D-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 16
+		pcs_mass['butt_gen']	= 32	& !pcs_butt = 14
 		pcs_mass['body']		= 56
 
 		!!----- INVENTRORY -----!!
@@ -1167,7 +1167,7 @@ elseif $ARGS[0] = 'anorexic':
 		pcs_lip			-= 1
 		pcs_teeth		-= 1
 		pcs_mass['bust_gen']	= 13	& !B-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 8
+		pcs_mass['butt_gen']	= 17	& !pcs_butt = 8
 		pcs_mass['body']		= 15
 
 		!!----- INVENTRORY -----!!
@@ -1236,7 +1236,7 @@ if $ARGS[0] = 'gopnik':
 	pcs_eyesize		+= 1
 	pcs_lip			+= 1
 	pcs_mass['bust_gen']	= 13	& !B-Cup at ideal BMI
-	pcs_mass['butt_gen']	= 20	& !pcs_butt = 8??
+	pcs_mass['butt_gen']	= 17	& !pcs_butt = 8
 	pcs_mass['body']		= 60
 
 	!!----- INVENTRORY -----!!
@@ -1316,7 +1316,7 @@ if $ARGS[0] = 'gopnikstart':
 		!!----- APPEARANCE -----!!
 		pcs_teeth	+= 1
 		pcs_mass['bust_gen']	= 13	& !B-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 8??
+		pcs_mass['butt_gen']	= 17	& !pcs_butt = 8
 		pcs_mass['body']		= 65
 
 		!!----- RELATIONSHIPS -----!!
@@ -1370,7 +1370,7 @@ elseif $ARGS[0] = 'troublemaker':
 		!!----- APPEARANCE -----!!
 		pcs_hairlng		-= 65
 		pcs_mass['bust_gen']	= 13	& !B-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 8??
+		pcs_mass['butt_gen']	= 17	& !pcs_butt = 8
 		pcs_mass['body']		= 49
 
 		!!----- INVENTRORY -----!!
@@ -1435,7 +1435,7 @@ elseif $ARGS[0] = 'vitekgf':
 		pcs_hairlng		+= 80
 		pcs_eyesize		-= 1
 		pcs_mass['bust_gen']	= 32	& !E-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 8??
+		pcs_mass['butt_gen']	= 17	& !pcs_butt = 8
 		pcs_mass['body']		= 55
 
 		!!----- INVENTRORY -----!!
@@ -1525,7 +1525,7 @@ elseif $ARGS[0] = 'alternative':
 		pcs_eyesize		-= 1
 		pcs_teeth		-= 1
 		pcs_mass['bust_gen']	= 18	& !C-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20
+		pcs_mass['butt_gen']	= 17	& !pcs_butt = 8
 		pcs_mass['body']		= 56
 
 		!!----- INVENTRORY -----!!
@@ -1601,7 +1601,7 @@ if $ARGS[0] = 'outcast':
 	pcs_eyesize	-= 1
 	pcs_lashes	-= 1
 	pcs_mass['bust_gen']	= 22	& !D-Cup at ideal BMI
-	pcs_mass['butt_gen']	= 20	& !pcs_butt = 4
+	pcs_mass['butt_gen']	= 7		& !pcs_butt = 5
 	pcs_mass['body']		= 60
 
 	!!----- INVENTRORY -----!!
@@ -1649,7 +1649,7 @@ if $ARGS[0] = 'friendless':
 		pcs_skin	-= 100
 		pcs_teeth	+= 1
 		pcs_mass['bust_gen']	= 12	& !B-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 4
+		pcs_mass['butt_gen']	= 7		& !pcs_butt = 5
 		pcs_mass['body']		= 51
 
 		!!----- RELATIONSHIPS -----!!
@@ -1691,7 +1691,7 @@ elseif $ARGS[0] = 'uglyduckling':
 		pcs_lip		-= 1
 		pcs_teeth	+= 2
 		pcs_mass['bust_gen']	= 28	& !E-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 4
+		pcs_mass['butt_gen']	= 7		& !pcs_butt = 5
 		pcs_mass['body']		= 94
 
 		! Other
@@ -1732,7 +1732,7 @@ elseif $ARGS[0] = 'goodgirl':
 		pcs_lashes		+= 1
 		pcs_lip			+= 1
 		pcs_mass['bust_gen']	= 13	& !B-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 4
+		pcs_mass['butt_gen']	= 7		& !pcs_butt = 5
 		pcs_mass['body']		= 43
 
 		!!----- INVENTRORY -----!!
@@ -1807,7 +1807,7 @@ elseif $ARGS[0] = 'slut':
 		pcs_lashes		+= 1
 		pcs_lip			+= 1
 		pcs_mass['bust_gen']	= 22	& !D-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 8??
+		pcs_mass['butt_gen']	= 22	& !pcs_butt = 10
 		pcs_mass['body']		= 52
 
 		!!----- INVENTRORY -----!!
@@ -1921,7 +1921,7 @@ elseif $ARGS[0] = 'goth':
 		pcs_lashes		+= 1
 		pcs_teeth		-= 1
 		pcs_mass['bust_gen']	= 13	& !B-Cup at ideal BMI
-		pcs_mass['butt_gen']	= 20	& !pcs_butt = 4
+		pcs_mass['butt_gen']	= 7		& !pcs_butt = 5
 		pcs_mass['body']		= 41
 
 		!!----- INVENTRORY -----!!

+ 43 - 81
locations/intro_sg_tg.qsrc

@@ -197,94 +197,56 @@ if $ARGS[0] = 'settings':
 	gs 'homes_properties', 'give_access', 'parents_home'
 	gs 'homes_properties', 'set_home', 'parents_home'
 
-	pcs_eyesize = 3
-	pcs_lip = 2
-	pcs_lashes = 1
-	pcs_haircol = 3
-	pcs_eyecol = 3
-	pcs_hairlng = 300
-
-	if birthmonth = 0: birthmonth = 4
-	if birthday = 0: birthday = 1
-
 	birthyear = 1999
 	yearlefttemp = 1
 
-	!!Looks
-	pcs_hgt = 170
-	pcs_mass['body'] = 80
-	pcs_mass['bust_gen'] = 17
-	pcs_mass['butt_gen'] = 20
-	pcs_pubes = 30
-	pcs_leghair = 12
-	pcs_makeup = 1
-	pcs_skin = 40
-	dick = 0
-
-	!!Basic
-	pcs_energy = 60
-	pcs_hydra = 60
-	pcs_sleep = 70
-
-	!!Attributes
-	pcs_inhib = 10
-	pcs_stren = 30
-	strenbuf = 10
-	pcs_agil = 30
-	agilbuf = 10
-	pcs_vital = 30
-	vitalbuf = 10
-	pcs_intel = 30
-	pcs_react = 30
-	pcs_sprt = 20
-	pcs_chrsm = 35
-	pcs_prcptn = 40
-	willpowermax = 50
-
-	!!Skills
-	pcs_def = 20
-	pcs_run = 20
-	pcs_gaming = 20
-	pcs_humint = 20
-	pcs_observ = 20
+	if birthmonth = 0: birthmonth = 4
+	if birthday = 0: birthday = 1
 
+	gs 'intro_functions', 'set_base_stats'
+
+	!!----- SKILS -----!!
+	! Attributes
+	pcs_stren		= 30
+	pcs_agil		= 30
+	pcs_vital		= 30
+	pcs_intel		= 30
+	pcs_react		= 30
+	pcs_sprt		= 20
+	pcs_prcptn		= 40
+
+	strenbuf		= 30
+	agilbuf			= 30
+	vitalbuf		= 30
+
+	! Sexual
+	pcs_inhib		= 10
+	willpowermax 	= 50
+
+	! Combat
+	pcs_def			= 20
+
+	! Sport
+	pcs_run			= 20
+
+	! Other
+	pcs_gaming		= 20
+	pcs_humint		= 20
+	pcs_observ		= 20
+
+	!!----- APPEARANCE -----!!
+	pcs_skin		= 40
+	pcs_haircol		= 3
+	pcs_eyecol		= 3
+	pcs_eyesize		= 3
+	pcs_lip			= 2
+
+	!!----- SCHOOL GRADES -----!!
 	killvar 'class_list_institution'
 	killvar 'class_list_name'
+	gs 'intro_functions', 'create_sgclasses'
+	gs 'intro_functions', 'set_base_sgrades'
 
-	!!Setting the shcoll classes such that grades can be assigned
-	gs 'grades', 'createclass', 'school', 'math', 3, 2, 'yes', 'yes', 0, 0
-	gs 'grades', 'createclass', 'school', 'rus', 3, 2, 'yes', 'yes', 0, 0
-	gs 'grades', 'createclass', 'school', 'lit', 2, 2, 'yes', 'yes', 0, 0
-	gs 'grades', 'createclass', 'school', 'art', 2, 2, 'yes', 'no', 0, 0
-	gs 'grades', 'createclass', 'school', 'bio', 2, 2, 'yes', 'yes', 0, 0
-	gs 'grades', 'createclass', 'school', 'pe', 3, 1, 'yes', 'no', 0, 0
-	gs 'grades', 'createclass', 'school', 'eng', 2, 2, 'yes', 'yes', 0, 0
-	gs 'grades', 'createclass', 'school', 'geo', 2, 2, 'yes', 'yes', 0, 0
-	gs 'grades', 'createclass', 'school', 'sci', 2, 2, 'yes', 'yes', 0, 0
-	gs 'grades', 'createclass', 'school', 'shop', 2, 2, 'yes', 'no', 0, 0
-	gs 'grades', 'createclass', 'school', 'comp', 3, 2, 'yes', 'yes', 0, 0
-	gs 'grades', 'createclass', 'school', 'mus', 2, 2, 'yes', 'no', 0, 0
-	gs 'grades', 'createclass', 'school', 'his', 2, 2, 'yes', 'yes', 0, 0
-
-	!!Grades
-	gs 'grades', 'grade_award', 'school', 'math', 55
-	gs 'grades', 'grade_award', 'school', 'rus', 25
-	gs 'grades', 'grade_award', 'school', 'lit', 55
-	gs 'grades', 'grade_award', 'school', 'art', 55
-	gs 'grades', 'grade_award', 'school', 'bio', 55
-	gs 'grades', 'grade_award', 'school', 'pe', 55
-	gs 'grades', 'grade_award', 'school', 'eng', 25
-	gs 'grades', 'grade_award', 'school', 'geo', 55
-	gs 'grades', 'grade_award', 'school', 'sci', 55
-	gs 'grades', 'grade_award', 'school', 'shop', 55
-	gs 'grades', 'grade_award', 'school', 'comp', 55
-	gs 'grades', 'grade_award', 'school', 'mus', 55
-	gs 'grades', 'grade_award', 'school', 'his', 55
-
-	!!Money, School, ...
-	money = 2000
-	prezikProver = 3
-	brothersawpirsF = 0
 	
 	gt 'intro_sg_tg', 'intro_6_looks'
 end

+ 16 - 4
locations/intro_uni.qsrc

@@ -93,11 +93,11 @@ if $ARGS[0] = 'degree_choice':
 	gs 'npc_relationship', 'default_family_friends'
 	*clr & cla
 	'<center><img <<$set_imgh>> src="images/system/1_openings/6_uni/degree_choice.jpg"></center>'
-	'This is where you decide what degree you wish to study. For now, Teaching is the only option, but more will be added in the future.'
+	'This is where you decide what degree you wish to study. For now, Teaching and Nursing are the only options, but more will be added in the future.'
 	
 	act 'Teaching':
-		!!variables for teaching degree
-		$university['enrolled_in']= 'teaching_studies'
+		!! variables for teaching degree
+		$university['enrolled_in'] = 'teaching_studies'
 		gs 'grades', 'createclass', 'uni_teaching_studies_semester_1', 'general education 101', 3, 2, 'no', 'no', 1, 12
 		gs 'grades', 'createclass', 'uni_teaching_studies_semester_1', 'teaching methods 101', 3, 2, 'no', 'no', 1, 12
 		gs 'grades', 'createclass', 'uni_teaching_studies_semester_1', 'learning theories 101', 3, 2, 'no', 'no', 1, 12
@@ -106,6 +106,18 @@ if $ARGS[0] = 'degree_choice':
 		gs 'grades', 'grade_award', 'uni_teaching_studies_semester_1', 'learning theories 101', 35
 		gt 'intro_uni', 'select_electives'
 	end
+	
+	act 'Nursing':
+		!! variables for nursing degree
+		$university['enrolled_in'] = 'nursing'
+		gs 'grades', 'createclass', 'uni_nursing_semester_1', 'patient care 101', 3, 2, 'no', 'no', 1, 12
+		gs 'grades', 'createclass', 'uni_nursing_semester_1', 'anatomy and physiology 101', 3, 2, 'no', 'no', 1, 12
+		gs 'grades', 'createclass', 'uni_nursing_semester_1', 'examination and treatment 101', 3, 2, 'no', 'no', 1, 12
+		gs 'grades', 'grade_award', 'uni_nursing_semester_1', 'patient care 101', 35
+		gs 'grades', 'grade_award', 'uni_nursing_semester_1', 'anatomy and physiology 101', 35
+		gs 'grades', 'grade_award', 'uni_nursing_semester_1', 'examination and treatment 101', 35
+		gt 'intro_uni', 'select_electives'
+	end
 end
 
 if $ARGS[0] = 'select_electives':
@@ -120,7 +132,7 @@ if $ARGS[0] = 'select_electives':
 			'You read about the computer class, which seems to be a basic class that teaches you how to use a computer, the functions of some of the more basic programs and how to troubleshoot the OS if something goes wrong. It seems like a fairly useful class.'
 			act 'Enroll in the computer class':
 				cla
-				'You decide to enrol in the computer class for the first and second semester of this year.'
+				'You decide to enroll in the computer class for the first and second semester of this year.'
 				$university['elective_semester_1_1'] = 'Computers 101'
 				$university['elective_semester_2_1'] = 'Computers 102'
 				act 'Consider other elective classes': gt 'intro_uni', 'select_electives'

+ 1 - 1
locations/kendra.qsrc

@@ -242,7 +242,7 @@ if $ARGS[0] = 'kendra_room_9':
 	'Once inside, she leads you over to her bed and commands you to strip.'
 	'"Yes, mistress." You start stripping as she opens the night stand and pulls out a collar that she tightly buckles it around your neck, making it a little hard for you to breathe. With the collar firmly in place, she pulls out a leash and attaches it to the collar before pushing you down. "Get down on all fours like a good slave."'
 	*nl
-	'You get down on your hands and knees and she leads you around the room for a few minutes before she grabs a bowl and fills it with water. She places it down in front of you as she sits on the couch and starts texting on her phone. "Drink!" You start lapping up the water as best you can bnefore sitting quietly until she notices you.'
+	'You get down on your hands and knees and she leads you around the room for a few minutes before she grabs a bowl and fills it with water. She places it down in front of you as she sits on the couch and starts texting on her phone. "Drink!" You start lapping up the water as best you can before sitting quietly until she notices you.'
 	'After a while, she finally points to the door. "You can go now slave, but put your collar and leash away first."'
 	'"Yes, mistress." You stand up and take off the collar and leash before walking over and putting them back in the drawer where they belong. You then walk over to the door and leave.'
 	gs 'arousal', 'foreplay', 30, 'sub', 'humiliation', 'inhibition'

+ 5 - 1
locations/loadg.qsrc

@@ -1,10 +1,14 @@
 # loadg
 
 showobjs max(1 - debug_warning_closed, loadg_show_debug)
-killvar 'call_trace_manual'
+
 killvar '$git_hash'
 gs 'addbuilddate'
 gs 'saveupdater'
 
+debug['trace_shown'] = 0
+debug['trace_loc_change'] = 0
+! killvar '$trace_locations'
+
 --- loadg ---------------------------------
 

+ 2 - 0
locations/metro.qsrc

@@ -42,6 +42,8 @@ if $ARGS[0] = 'start':
 		end
 		gt $loc, $loc_arg
 	end
+
+	if $loc = 'city_suburbs': act 'Walk to the bus stop (0:15)': minut += 15 & gt 'bus', 'suburbs'
 	
 	if money >= 16:
 		if $loc ! 'city_residential':

+ 3 - 3
locations/onobjsel.qsrc

@@ -64,11 +64,11 @@ if $selobj = '<center>Remove debug info</center>':
 end
 
 if $selobj = '<center>Toggle Call Trace</center>':
-	if call_trace_shown = 0:
-		call_trace_shown = 1
+	if debug['trace_shown'] = 0:
+		debug['trace_shown'] = 1
 		gs 'stat_display'
 	else
-		call_trace_shown = 0
+		debug['trace_shown'] = 0
 		gs 'stat'
 	end
 end

+ 1 - 1
locations/pav_complex.qsrc

@@ -84,7 +84,7 @@ if $ARGS[0] = 'start':
 	*nl
 	'Behind the apartments is a row of <a href="exec:minut += 3 & gt ''pav_complex'', ''garages''">garages</a> and storage space for tenants.'
 
-	if mother['kickedout_timer'] ! 0 and mother['kickedout_timer'] + 3 <= daystart and hour > 6 and hour <= 15:
+	if mother['kickedout_timer'] ! 0 and mother['kickedout_timer'] + 3 <= daystart and hour > 6 and hour <= 15 and cumloc[11] = 0:
 		gs 'mother_chats', 'reconciliation_talk'
 	exit
 	end

+ 1 - 1
locations/pav_market.qsrc

@@ -41,7 +41,7 @@ end
 *nl
 'A rather run-down <a href="exec:minut += 1 & gt ''pav_hotel''">hotel</a> is just across the square, where travelers can spend the night. The manager is always looking for maids among the local young girls. Because of it''s frequent use by the local prostitutes, most people prefer to stay at the middle-class hotel by the main road.'
 
-if mother['kickedout_timer'] ! 0 and mother['kickedout_timer'] + 3 <= daystart and hour > 6 and hour <= 15:
+if mother['kickedout_timer'] ! 0 and mother['kickedout_timer'] + 3 <= daystart and hour > 6 and hour <= 15 and cumloc[11] = 0:
 	gs 'mother_chats', 'reconciliation_talk'
 exit
 end

+ 21 - 14
locations/pav_park_sex.qsrc

@@ -319,6 +319,7 @@ if $ARGS[0] = 'pressured_for_bra':
 	act 'Expose your bra':
 		*clr & cla
 		gs 'fame', 'pav', 'sex', 1
+		svetafall += 1
 		grupvalue[4] += 1
 		npc_rel['A9'] += 1
 		npc_rel['A10'] += 1
@@ -332,11 +333,11 @@ if $ARGS[0] = 'pressured_for_bra':
 		'<center><img <<$set_imgh>> src="images/locations/pavlovsk/park/event/gopnik/fall_strip2.jpg"></center>'
 		'You grin, get up in front of everyone and expose your bra for everyone to see. The boys hoot and holler while Pauline records the whole thing on her phone. You stand there with your bra for several minutes for them, and you can''t help but smile at how happy it makes them all. Arkadi then speaks up.'
 		if grupTipe = 1:
-			$grp_msg = '"You know, being one of the stuck-up bitches, you''re much cooler than I expected."'
+			$grp_msg = 'You know, being one of the stuck-up bitches, you''re much cooler than I expected.'
 		elseif grupTipe = 2:
-			$grp_msg = '"You know, being one of the brain-dead jocks, you''re much cooler than I expected."'
+			$grp_msg = 'You know, being one of the brain-dead jocks, you''re much cooler than I expected.'
 		else
-			$grp_msg = '"You know, being such a nerd, you''re much less shy than I expected."'
+			$grp_msg = 'You know, being such a nerd, you''re much less shy than I expected.'
 		end
 		'"<<$grp_msg>> Not to mention a hell of a lot more fun." The rest all agree. You blush at the compliment and put your top back on. Shortly after the party is over and everyone starts to go their own way, but Vitek calls out to you as you walk away. "You should really come back and hang out with us again." Most of the others agree before they split up and head off.'
 		gs 'arousal', 'flashlite', 5, 'sub', 'inhibition', 'humiliation'
@@ -387,6 +388,7 @@ if $ARGS[0] = 'pressured_for_panties':
 	act 'Expose your panties':
 		*clr & cla
 		gs 'fame', 'pav', 'sex', 2
+		svetafall += 1
 		grupvalue[4] += 1
 		npc_rel['A9'] += 1
 		npc_rel['A10'] += 1
@@ -400,14 +402,14 @@ if $ARGS[0] = 'pressured_for_panties':
 		'<center><img <<$set_imgh>> src="images/locations/pavlovsk/park/event/gopnik/fall_strip3.jpg"></center>'
 		'You grin and get up in front of everyone and expose your panties for all to see, turning around to give them a complete view. The boys hoot and holler while Pauline records the whole thing on her phone. You stand there with your panties exposed for several minutes for them, and you can''t help but smile at how happy it makes them all. Arkadi then speaks up.'
 		if grupTipe = 1:
-			$grp_msg = '"You know, being one of the stuck-up bitches, you''re much cooler than I expected."'
+			$grp_msg = 'You know, being one of the stuck-up bitches, you''re much cooler than I expected.'
 		elseif grupTipe = 2:
-			$grp_msg = '"You know, being one of the brain-dead jocks, you''re much cooler than I expected."'
+			$grp_msg = 'You know, being one of the brain-dead jocks, you''re much cooler than I expected.'
 		else
-			$grp_msg = '"You know, being such a nerd, you''re much less shy than I expected."'
+			$grp_msg = 'You know, being such a nerd, you''re much less shy than I expected.'
 		end
 
-		'<<grp_msg>>  Not to mention a hell of a lot more fun." The rest all agree. You blush at the compliment and put your bottoms back on. Shortly after the party is over and everyone starts to go their own way, but Vitek calls out to you as you begin to walk away. "You should really come back and hang out with us again." Most of the others agree before they split up and head off.'
+		'"<<$grp_msg>> Not to mention a hell of a lot more fun." The rest all agree. You blush at the compliment and put your bottoms back on. Shortly after the party is over and everyone starts to go their own way, but Vitek calls out to you as you begin to walk away. "You should really come back and hang out with us again." Most of the others agree before they split up and head off.'
 		gs 'arousal', 'flashlite', 5, 'sub', 'inhibition', 'humiliation'
 		gs 'arousal', 'end'
 		gs 'stat'
@@ -455,6 +457,7 @@ if $ARGS[0] = 'pressured_for_tits':
 	act 'Expose your tits':
 		*clr & cla
 		gs 'fame', 'pav', 'sex', 3
+		svetafall += 1
 		grupvalue[4] += 1
 		npc_rel['A9'] += 1
 		npc_rel['A10'] += 1
@@ -468,13 +471,13 @@ if $ARGS[0] = 'pressured_for_tits':
 		'<center><img <<$set_imgh>> src="images/locations/pavlovsk/park/event/gopnik/fall_strip4.jpg"></center>'
 		'You grin, get up in front of everyone and expose your breasts for all to see. The boys hoot and holler while Pauline records the whole thing on her phone. You kneel there with your breasts out for several minutes for them, and you can''t help but smile at how happy it makes them all. Arkadi then speaks up.'
 		if grupTipe = 1:
-			$grp_msg = '"You have nice tits for one of the stuck-up princesses."' 
+			$grp_msg = 'You have nice tits for one of the stuck-up princesses.' 
 		elseif grupTipe = 2:
-			$grp_msg = '"You have nice tits for one of the juiced-up jocks. You''re a lot cooler than I was expecting."'
+			$grp_msg = 'You have nice tits for one of the juiced-up jocks. You''re a lot cooler than I was expecting.'
 		else
-			$grp_msg = '"You have nice tits for one of the nerds. You should wear tighter clothes and show them off more."'
+			$grp_msg = 'You have nice tits for one of the nerds. You should wear tighter clothes and show them off more.'
 		end
-		'"<<$grp_msg>>  Not to mention a hell of a lot more fun." The rest all agree. You blush at the compliment and put your top back on. Shortly after the party is over and everyone starts to go their own way, but Vitek calls out to you as you begin to walk away. "You should really come back and hang out with us again." Most of the others agree before they split up and head off.'
+		'"<<$grp_msg>> Not to mention a hell of a lot more fun." The rest all agree. You blush at the compliment and put your top back on. Shortly after the party is over and everyone starts to go their own way, but Vitek calls out to you as you begin to walk away. "You should really come back and hang out with us again." Most of the others agree before they split up and head off.'
 		gs 'arousal', 'flash', 5, 'sub', 'inhibition', 'humiliation'
 		gs 'arousal', 'end'
 		gs 'stat'
@@ -522,6 +525,7 @@ if $ARGS[0] = 'pressured_for_pussy':
 	act 'Expose your pussy':
 		*clr & cla
 		gs 'fame', 'pav', 'sex', 4
+		svetafall += 1
 		grupvalue[4] += 1
 		npc_rel['A9'] += 1
 		npc_rel['A10'] += 1
@@ -535,11 +539,11 @@ if $ARGS[0] = 'pressured_for_pussy':
 		'<center><img <<$set_imgh>> src="images/locations/pavlovsk/park/event/gopnik/fall_strip5.jpg"></center>'
 		'You grin and get up before everyone, stripping down and exposing your pussy for all to see. The boys hoot and holler while Pauline records the whole thing on her phone. You stand there with your pussy exposed for several minutes for them, and you can''t help but smile at how happy it makes them all. Arkadi then speaks up.'
 		if grupTipe = 1:
-			$grp_msg = '"You''re a lot cooler than I expected for one of the stuck-up queens."'
+			$grp_msg = 'For one of the stuck-up queens, you''re a lot cooler than I expected.'
 		elseif grupTipe = 2:
-			$grp_msg = '"You''re much cooler than I was expecting for one of the jocks."'
+			$grp_msg = 'For one of the jocks, you''re much cooler than I was expecting.'
 		else
-			$grp_msg= '"For one of the nerds, you''re a lot cooler than I was expecting."'
+			$grp_msg= 'For one of the nerds, you''re a lot cooler than I was expecting.'
 		end
 		
 		'"You have a real fuckable looking pussy. <<$grp_msg>> Not to mention a hell of a lot more fun." The rest all agree. You blush at the compliment and put your top back on. Shortly after the party is over and everyone starts to go their own way, but Vitek calls out to you as you begin to walk away. "You should really come back and hang out with us again." Most of the others agree before they split up and head off.'
@@ -595,6 +599,7 @@ if $ARGS[0] = 'pressured_for_blowjob':
 		*clr & cla
 		gs 'fame', 'pav', 'sex', 10
 		grupvalue[4] += 1
+		svetafall += 1
 		npc_rel['A9'] += 1
 		npc_rel['A10'] += 1
 		npc_rel['A11'] += 1
@@ -675,6 +680,7 @@ if $ARGS[0] = 'pressured_for_oral_gb':
 	act 'Get down on your knees':
 		*clr & cla
 		gs 'fame', 'pav', 'sex', 50
+		svetafall += 1
 		grupvalue[4] += 1
 		npc_rel['A9'] += 1
 		npc_rel['A10'] += 1
@@ -782,6 +788,7 @@ if $ARGS[0] = 'pressured_for_gangbang':
 		*clr & cla
 		gs 'fame', 'pav', 'sex', 100
 !!to explain why the huge hits to fame it is because they are all bragging about it telling everyone and Pauline has been sharing the videos with all the gopniks, after this one she will share all the videos with all the students in school.
+		svetafall = 6
 		grupvalue[4] += 1
 		npc_rel['A9'] += 1
 		npc_rel['A10'] += 1

+ 3 - 3
locations/pav_parkev.qsrc

@@ -1406,15 +1406,15 @@ if $ARGS[0] = 'male_gopnik_beer':
 							gs 'pav_park_sex', 'pressured_for_bra'
 						elseif svetafall = 1 and $pantyworntype ! 'none':
 							gs 'pav_park_sex', 'pressured_for_panties'
-						elseif svetafall = 2:
+						elseif svetafall = 2 or (svetafall = 0 and $braworntype = 'none'):
 							gs 'pav_park_sex', 'pressured_for_tits'
-						elseif svetafall = 3:
+						elseif svetafall = 3 or (svetafall = 1 and $pantyworntype = 'none'):
 							gs 'pav_park_sex', 'pressured_for_pussy'
 						elseif svetafall = 4:
 							gs 'pav_park_sex', 'pressured_for_blowjob'
 						elseif svetafall = 5:
 							gs 'pav_park_sex', 'pressured_for_oral_gb'
-						else
+						elseif svetafall > 5:
 							gs 'pav_park_sex', 'pressured_for_gangbang'
 						end
 					else

+ 2 - 0
locations/pav_train_hall.qsrc

@@ -161,6 +161,8 @@ if $ARGS[0] = 'platform':
 	if week >= 6 and hour >= 9 and hour <= 10:'You notice <a href="exec:gt ''gschool_socialchg1'', ''tBella''">Bella</a> standing at the train station platform, looking at the time table.'
 
 	act 'Enter the station building': gt 'pav_train_hall'
+	if transportVars['buspass_day'] > daystart: act 'Walk to the bus platfrom (0:02)': minut += 2 & gt 'bus', 'pavstation_busses'
+
 	act 'Look at the train schedule':
 		*clr & cla
 		gs 'transport_functions', 'display_train_schedule', 'pc'

+ 22 - 31
locations/prostitution_functions.qsrc

@@ -125,8 +125,7 @@ if $ARGS[0] = 'prostitute_outfit_at_home':
 	if func('homes_properties', 'is_current_home') and prostitute['active']:
 		gs 'prostitution_functions', 'work_clothes'
 		if prostitute['work_clothes']:
-			gs 'prostitution_functions', 'is_default'
-			if prostitute['outfit_is_set'] = 1 and is_default = 0:
+			if prostitute['outfit_is_set'] = 1 and func('prostitution_functions', 'is_default') = 0:
 				act 'Replace your default prostitute outfit with the current outfit':
 					gs 'prostitution_functions', 'set_default_outfit'
 					gt $loc, $loc_arg
@@ -147,7 +146,6 @@ if $ARGS[0] = 'prostitute_outfit_at_home':
 				gt $loc, $loc_arg
 			end
 		end
-		killvar 'is_default'
 	end
 end
 
@@ -410,7 +408,7 @@ if $ARGS[0] = 'work_clothes':
 end
 
 if $ARGS[0] = 'is_default':
-	is_default = prostitute['clothingwornnumber'] = clothingwornnumber _ 
+	RESULT = prostitute['clothingwornnumber'] = clothingwornnumber _ 
 			 and prostitute['shoewornnumber']     = shoewornnumber _ 
 			 and prostitute['currentpursenumber'] = currentpursenumber _ 
 			 and prostitute['coatwornnumber']     = coatwornnumber _ 
@@ -428,7 +426,9 @@ if $ARGS[0] = 'set_default_outfit':
 	prostitute['clothingwornnumber'] = clothingwornnumber
 
 	!!-- Underwear
-	if bodysuitwornnumber > 0:
+	prostitute['underweartype'] = 0
+	if underwear['type'] = 2:
+		prostitute['underweartype'] = 2
 		$prostitute['bodysuitworntype'] = $bodysuitworntype
 		prostitute['bodysuitwornnumber'] = bodysuitwornnumber
 	else
@@ -482,11 +482,20 @@ end
 
 
 if $ARGS[0] = 'change_into_prostitute_outfit':
+	if dyneval('RESULT = <<$prostitute["clothingworntype"]>>_h[<<prostitute["clothingwornnumber"]>>]') <= 0:
+		msg '<font color="red">Unavailable as outfit is worn out!</font>'
+		exit
+	end
+	!! if last outfit is sport outfit
+	gs 'wardrobe', 'is_sport'
+	gs 'wardrobe', 'back_to_regular_clothes'
+
 	!!-- Backup
 	$lastwornclothingtype['prostitute'] = $clothingworntype
 	lastwornclothingnumber['prostitute'] = clothingwornnumber
-	lastwornunderwear['prostitute'] = underwear['type']
-	if bodysuitwornnumber > 0:
+	lastwornunderwear['prostitute'] = 0
+	if underwear['type'] = 2:
+		lastwornunderwear['prostitute'] = 2
 		$lastwornbodysuittype['prostitute'] = $bodysuitworntype
 		lastwornbodysuitnumber['prostitute'] = bodysuitwornnumber
 	else
@@ -505,7 +514,7 @@ if $ARGS[0] = 'change_into_prostitute_outfit':
 	!!-- Clothing
 	gs 'clothing', 'wear', $prostitute['clothingworntype'], prostitute['clothingwornnumber']
 	!!-- Underwear
-	if lastwornbodysuitnumber['prostitute'] > 0:
+	if prostitute['underweartype'] = 2:
 		gs 'underwear_bodysuits', 'wear', $lastwornbodysuittype['prostitute'], lastwornbodysuitnumber['prostitute']
 	else
 		gs 'panties', 'wear', $prostitute['pantyworntype'], prostitute['pantywornnumber']
@@ -525,29 +534,11 @@ if $ARGS[0] = 'change_into_prostitute_outfit':
 end
 
 if $ARGS[0] = 'change_into_regular_clothes':
-	if $lastwornclothingtype['prostitute'] = '':
-		gs 'clothing', 'wear_last_worn'
-		gs 'underwear', 'wear'
-		gs 'shoes', 'wear', 'last_worn'
-		gs 'purses', 'wear', 'last_worn'
-		gs 'coats', 'wear', 'last_worn'
-	else
-		!!-- Clothing
-		gs 'clothing', 'wear', $lastwornclothingtype['prostitute'], lastwornclothingnumber['prostitute']
-		!!-- Underwear
-		if lastwornunderwear['prostitute'] = 2:
-			gs 'underwear_bodysuits', 'wear', $lastwornbodysuittype['prostitute'], lastwornbodysuitnumber['prostitute']
-		else
-			gs 'panties', 'wear', $lastwornpantytype['prostitute'], lastwornpantynumber['prostitute']
-			gs 'bras',    'wear', $lastwornbratype['prostitute'],   lastwornbranumber['prostitute']
-		end
-		!!-- Shoes
-		gs 'shoes',  'wear', $lastwornshoetype['prostitute'],  lastwornshoenumber['prostitute']
-		gs 'purses', 'wear', $lastwornpursetype['prostitute'], lastwornpursenumber['prostitute']
-		gs 'coats',  'wear', $lastworncoattype['prostitute'],  lastworncoatnumber['prostitute']
-		gs 'prostitution_functions', 'work_clothes'
-		if prostitute['changed_for_work']: prostitute['changed_for_work'] = 0
-	end
+	gs 'wardrobe', 'back_to_regular_clothes'
+
+	!! if last outfit is sport outfit
+	gs 'wardrobe', 'is_sport'
+	gs 'wardrobe', 'back_to_regular_clothes'
 end
 
 !!---------- Chaging outfits in public locations ------------------------------------------------------------------------

+ 8 - 9
locations/pushkin_ballet_res.qsrc

@@ -49,8 +49,7 @@ if $ARGS[0] = 'bedroom':
 	gs 'core_library', 'stage_title'
 
 	if ballet_first_visit = 0:
-		gs 'homes_properties', 'set_access', 'pushkin_ballet_dorm', 1
-		gs 'homes_preperties', 'set_home', 'pushkin_ballet_dorm'
+		gs 'homes_properties', 'set_home', 'pushkin_ballet_dorm'
 
 		ballet_first_visit = 1
 		if week ! 7 : ballet_day = week
@@ -139,7 +138,7 @@ if $ARGS[0] = 'hallway':
 	act 'Enter the communal room':  minut += 5 & gt 'pushkin_ballet_res', 'communal_area'
 	act 'Go to the bathroom':  minut += 5 & gt 'pushkin_ballet_class', 'shower'  
 	act 'Go to the kitchen':  minut += 5 & gt 'pushkin_ballet_res', 'kitchen'
-	if week ! 7:
+	if week ! 7 and npc_trust['A3501'] >= 10:
 		!! act 'Visit Maya' :  minut += 5 & gt 'pushkin_ballet_res', 'maya_room'
 	end
 	!!act 'Knock on wardens door' :  minut += 5 & gt 'pushkin_ballet_res', 'warden_room'
@@ -364,7 +363,7 @@ if $ARGS[0] = 'feetcare':
 	minut +=30
 	feet_track = daystart
 	gs 'stat'
-	$setloc['StageTitle'] = 'Feet Soak'
+	$setloc['StageTitle'] = 'Feet Care'
 	$setloc['StageImage'] =  '<<$default_img_path>>ballet_events/feet_soak'
 	gs 'core_library', 'stage_title'
 
@@ -385,7 +384,7 @@ if $ARGS[0] = 'study':
 	minut += 60
 	mod_homework[week] += 1 
 	mod_daily_score[week] += 1
-	$setloc['StageTitle'] = 'Study'
+	$setloc['StageTitle'] = 'Ballet Studies'
 	$setloc['StageImage'] =  '<<$default_img_path>>ballet_residence/study'
 	gs 'stat'
 	gs 'core_library', 'stage_title'
@@ -411,16 +410,16 @@ if $ARGS[0] = 'make_up':
 			pcs_makeup = 5
 		end
 		gs 'stat'
-		$setloc['StageTitle'] = 'Feet Soak'
+		$setloc['StageTitle'] = 'Make Up Practice'
 		$setloc['StageImage'] =  '<<$default_img_path>>/ballet_events/make-up'
 		gs 'core_library', 'stage_title'
 
 		if pcs_makupskl <= 30:
-			'You struggle to master the basics of applying your look, wasting a lot of your expensive make-up. You wonder if you should get help with practicing.'
+			'You struggle to master the basics of applying your look, wasting a lot of your expensive make-up. You begin to wonder if you need to get help with practicing.'
 		elseif pcs_makupskl >= 31 or pcs_makupskl <= 69:
-			'You try to replicate the deft strokes that you was taught in school apply the basic foundation. You struggle briefly with the eyelashes before they settle in place. It takes you a few attempts to finalise the blending of your looks but at the end of your practice you are happy with the results even though it won''t win any awards.'
+			'You try to replicate the deft strokes that you was taught in school as you apply the basic foundations and contouring. You struggle briefly with the eyelashes before they settle in place. It takes you a few attempts to finalise the blending of your final look but at the end of your practice you are happy with the results even though it won''t win any awards.'
 		elseif pcs_makupskl >= 70:
-			'You artfully apply the make-up look with a quick, practiced ease that would leave most girls with envy. The final look is almost flawless and you criticaly review the final result.'
+			'You artfully apply the make-up look with a quick, practiced ease that would leave most girls jealous with envy. The final look is almost flawless and you criticaly review the final result trying to find any imperfections.'
 		else
 			$ballet['error'] += 'Makeup skill failed check'
 		end

+ 1 - 1
locations/pushkin_sq.qsrc

@@ -59,7 +59,7 @@ else
 	'The old theatre that houses a burlesque club is closed now. It is open every day 18:00 - 23:00'
 end
 
-if mother['kickedout_timer'] ! 0 and mother['kickedout_timer'] + 3 <= daystart and hour > 6 and hour <= 15:
+if mother['kickedout_timer'] ! 0 and mother['kickedout_timer'] + 3 <= daystart and hour > 6 and hour <= 15 and cumloc[11] = 0:
 	gs 'mother_chats', 'reconciliation_talk'
 exit
 end

+ 5 - 0
locations/saveupdater.qsrc

@@ -2542,6 +2542,11 @@ if temp_current_save_version < 00090200:
 		$home_name['18'] = 'pushkin_ballet_dorm'
 	end
 
+	! Call Trace update
+	killvar 'call_trace_enabled'
+	killvar 'call_trace_shown'
+	killvar 'call_trace_manual'
+	killvar '$call_trace'
 end
 
 

+ 2 - 2
locations/sentence.qsrc

@@ -550,7 +550,7 @@ if $ARGS[0] = 'punishment':
 	killvar 'temp_fine'
 	killvar 'policeQW_courthearing_dates', 0
 	killvar '$policeQW_courthearing_subjects', 0
-	act 'Leave the court': gt 'city_center'
+	act 'Leave the court': gt 'city_center', 'mom_check'
 end
 
 
@@ -616,7 +616,7 @@ if $ARGS[0] = 'police_arrest2':
 	killvar 'policeQW_courtletter_dates', 0
 	killvar 'policeQW_courtletter_subjects', 0
 
-	act 'Leave the court': gt 'city_center'
+	act 'Leave the court': gt 'city_center', 'mom_check'
 end
 
 

+ 1 - 0
locations/sex_ev_morning.qsrc

@@ -657,6 +657,7 @@ if $ARGS[0] = 'want_coffee_response':
 		gs'sex_ev_morning', 'morning_menu1'
 	elseif rand(1,2) = 1:
 		'"Sure, I wouldn''t mind some coffee," <<$npc_firstname[$boy]>> says and gets up to make some.'
+		gs'sex_ev_morning', 'npc_coffe_make'
 	else
 		'"I''ve got some time," <<$npc_firstname[$boy]>> says. "How about breakfast instead?"'
 		gs'sex_ev_morning', 'boy_breakfast_offer'

+ 1 - 1
locations/stat.qsrc

@@ -408,8 +408,8 @@ if totminut >= heelsminut + 30:
 		!! Player skill is equal to or higher than the required skill
 		!! Maybe have excessive skill result in no gain, or even a degrading skill?
 		else
-			gs 'pain', rand(heelstime/60,heelstime/30), 'feet', 'ache'
 			heelsSkilldiff = pcs_heels - heelsRequiredskill
+			gs 'pain', max(0, rand(heelstime/10,heelstime/5) - heelsSkilldiff), 'feet', 'ache'
 			if heelsSkilldiff <= 5:
 				tmp = rand(-2,0) + rand(min(8,heelstime/6),min(12,heelstime/3))
 			elseif heelsSkilldiff <= 10:

+ 41 - 8
locations/stat_display.qsrc

@@ -1,21 +1,54 @@
 # stat_display
 !!2021/04/04
-if call_trace_shown ! 0:
+
+!! --- CALL TRACE, when enabled (`debug['trace_shown'] = 1`) replaces stat_display
+if debug['trace_shown'] ! 0:
 	clear
 	p '<center>'
 	if $git_hash ! '': pl '<<$git_hash>>'
-	pl iif(call_trace_manual = 0, 'auto', 'manual')
-	if call_trace_enabled = 0:
-		p '<a href="exec:call_trace_enabled = 1 & gs ''stat_display''">enable</a>&nbsp;|&nbsp;'
+	if debug['call_trace_selector'] = 0:
+		p 'loc change&nbsp;|&nbsp;'
+		p '<a href="exec:debug[''call_trace_selector''] = 1 & gs ''stat_display''">direct</a>'
+		nl '<hr>'
+
+		if debug['trace_loc_change'] = 0:
+			p '<a href="exec:debug[''trace_loc_change''] = 1 & gs ''stat_display''">start</a>&nbsp;|&nbsp;'
+		else
+			p '<a href="exec:debug[''trace_loc_change''] = 0 & gs ''stat_display''">stop</a>&nbsp;|&nbsp;'
+		end
+		p '<a href="exec:$debug[''loc_change_trace''] = '''' & gs ''stat_display''">clear</a>&nbsp;|&nbsp;'
+		pl '<a href="exec:debug[''trace_shown''] = 0 & gs ''stat''">return</a></center>'
+
+		p $debug['loc_change_trace']
 	else
-		p '<a href="exec:call_trace_enabled = 0 & call_trace_shown = 0 & gs ''stat''">disable</a>&nbsp;|&nbsp;'
+		p '<a href="exec:debug[''call_trace_selector''] = 0 & gs ''stat_display''">loc change</a>&nbsp;|&nbsp;'
+		p 'direct'
+		nl '<hr>'
+
+		p '<a href="exec:$trace_locations[] = $input(''location name'') & gs ''stat_display''">add by name</a>&nbsp;|&nbsp;'
+		p '<a href="exec:$trace_locations[] = $curloc & gs ''stat_display''">add $curloc</a>'
+		nl '<hr>'
+
+		if arrsize('$trace_locations') > 0:
+			p '<a href="exec:gs ''debug_tools'', ''trace_list_locs''">list locations</a>&nbsp;|&nbsp;'
+			p '<a href="exec:killvar ''$trace_locations'' & gs ''stat_display''">clear</a>'
+		else
+			p 'list locations&nbsp;|&nbsp;'
+			p 'clear'
+		end
+		nl '<hr>'
+		
+		p '<a href="exec:$debug[''direct_trace''] = '''' & gs ''stat_display''">clear</a>&nbsp;|&nbsp;'
+		pl '<a href="exec:debug[''trace_shown''] = 0 & gs ''stat''">return</a></center>'
+
+		p $debug['direct_trace']
 	end
-	p '<a href="exec:killvar ''$call_trace'' & gs ''stat_display''">clear</a>&nbsp;|&nbsp;'
-	p '<a href="exec:call_trace_shown = 0 & gs ''stat''">return</a></center>'
-	p $call_trace
 	exit
 end
 
+
+
+!! --- STAT_DISPLAY
 if default_status_icons = 0:set_siconht = 54
 if default_wbanner = 0:set_weatherht = 72
 if default_menu_icons = 0:set_miconht = 54

+ 1 - 2
locations/therapist_hotel.qsrc

@@ -552,7 +552,7 @@ if $ARGS[0] = 'event5_submit':
 			'"Sir?!" You moan out as he ravishes your pussy with his mouth and tongue.'
 			'"You will be mine, your body will not deny me, you only have to say yes to me. My dear, tell me to fuck you." He exclaims and the trigger clicks in your mind.'
 
-			act '"Sire, please, fuck me"':
+			act '"Sir, please, fuck me"':
 				*clr & cla
 				gs 'arousal', 'vaginal', 60, 'sub'
 				gs 'cum_call', 0, 'A186', 2, 0, 15000, 60
@@ -852,7 +852,6 @@ if $ARGS[0] = 'event6_submit4':
 	HotelRoom['pav_hotel'] = 0
 	hotelRoomDays['pav_hotel'] = 0
 	therapistQW['hotel_key'] = 3
-	gs 'homes_properties', 'set_access', 'hotel_therapist', 1
 	gs 'homes_preperties', 'set_home', 'hotel_therapist'
 
 	gt 'pav_hotel'

+ 1 - 1
locations/transport_functions.qsrc

@@ -457,7 +457,7 @@ end
 	!!=======================================!!
 
 if $ARGS[0] = 'buy_bus_pass':
-	if transportVars['trainpass_day'] <= daystart:
+	if transportVars['buspass_day'] <= daystart:
 		if money >= 100:
 			dynamic 'act ''Buy a daily bus pass (1 day - 100 <b>₽</b>)'':
 				cla

+ 3 - 3
locations/underwear.qsrc

@@ -54,10 +54,10 @@ end
 
 if $ARGS[0] = 'wear':
 	if underwear['lastworntype'] = 2:
-		gs 'underwear_bodysuits', 'wear'
+		gs 'underwear_bodysuits', 'wear', $ARGS[1]
 	else
-		gs 'panties', 'wear'
-		gs 'bras', 'wear'
+		gs 'panties', 'wear', $ARGS[1]
+		gs 'bras', 'wear', $ARGS[1]
 	end
 end
 

+ 1 - 1
locations/underwear_bodysuits.qsrc

@@ -368,7 +368,7 @@ if $ARGS[0] = 'wear':
 		end
 	else
 		if dyneval('RESULT = <<$ARGS[1]>>_bodysuits_s[<<ARGS[2]>>]') = 0:
-			gs 'underwear_bodysuits', 'wear2', $ARGS[2], ARGS[3]
+			gs 'underwear_bodysuits', 'wear2', $ARGS[1], ARGS[2]
 		else
 			underwear['type'] = 0
 			$bodysuitworntype = 'none'

+ 1 - 1
locations/uni_grounds.qsrc

@@ -54,7 +54,7 @@ if $ARGS[0] = 'main':
 		end
 	end
 
-	if mother['kickedout_timer'] ! 0 and mother['kickedout_timer'] + 3 <= daystart and hour > 6 and hour <= 15:
+	if mother['kickedout_timer'] ! 0 and mother['kickedout_timer'] + 3 <= daystart and hour > 6 and hour <= 15 and cumloc[11] = 0:
 		gs 'mother_chats', 'reconciliation_talk'
 	exit
 	end

+ 85 - 43
locations/wardrobe.qsrc

@@ -347,20 +347,20 @@ end
 if $ARGS[0] = 'default_set_name':
 	*clr & cla
 	$clothing_default_page[clothing_default_page] = input('Enter new name for this set')
-	act 'Return': gt 'wardrobe', 'default<<clothing_default_page>>'
+	gt 'wardrobe', 'default<<clothing_default_page>>'
 end
 
 if $ARGS[0] = 'default_actions':
-	act 'Return':
-		gt $loc, $loc_arg
-	end
+	act 'Return': gt $loc, $loc_arg
  
 	act 'Select outfit to wear':
 		cla
+		act 'Return': gt 'wardrobe', $wardrobeDefaultPagePref
 		gs 'wardrobe', 'default_actions_wear'
 	end
 	act 'Choose another page':
 		cla
+		act 'Return': gt 'wardrobe', $wardrobeDefaultPagePref
 		gs 'wardrobe', 'default_actions_page'
 	end
 	act 'Rename this set': gs 'wardrobe', 'default_set_name'
@@ -925,29 +925,20 @@ if $ARGS[0] = 'default_sport_options':
 	if default_sport_number = 0:
 		'You have no default sports clothing set, you can set this in your wardrobe.'
 	else
-		!! checks to see if player is wearing the default sports set using default_sport_number[2]
-		default_sport_number[2] = 0
-		if $clothingworntype = $defclothingtype[default_sport_number] and clothingwornnumber = defclothingnumber[default_sport_number]: default_sport_number[2] += 1
-		if defunderwear[default_sport_number] = 2:
-			if $bodysuitworntype = $defbodysuittype[default_sport_number] and bodysuitwornnumber = defbodysuitnumber[default_sport_number]: default_sport_number[2] += 1
-		else
-			if $pantyworntype = $defpantytype[default_sport_number] and pantywornnumber = defpantynumber[default_sport_number] and $braworntype = $defbratype[default_sport_number] and brawornnumber = defbranumber[default_sport_number]: default_sport_number[2] += 1
-		end
-		if $shoeworntype = $defshoetype[default_sport_number] and shoewornnumber = defshoenumber[default_sport_number]: default_sport_number[2] += 1
-		if $currentpursetype = $defpursetype[default_sport_number] and currentpursenumber = defpursenumber[default_sport_number]: default_sport_number[2] += 1
-		if $coatworntype = $defcoattype[default_sport_number] and coatwornnumber = defcoatnumber[default_sport_number]: default_sport_number[2] += 1
-
+		gs 'wardrobe', 'is_sport'
 		!! check to see if sports outfit is worn out
-		if dyneval('RESULT = <<$defclothingtype[default_sport_number]>>_h[<<defclothingnumber[default_sport_number]>>]') = 0:
-			act '<font color="red">Put on your sports clothes - unavailable as outfit is worn out</font>':
-			end
+		if dyneval('RESULT = <<$defclothingtype[default_sport_number]>>_h[<<defclothingnumber[default_sport_number]>>]') <= 0:
+			act 'Put on your sports clothes': msg '<font color="red">Unavailable as outfit is worn out!</font>'
 		!! check to see that player is not wearing default sports outfit
 		elseif default_sport_number[2] ! 5:
-			act'Put on your sports clothes':
+			act 'Put on your sports clothes':
+				if func('prostitution_functions', 'is_default') ! 0: gs 'wardrobe', 'back_to_regular_clothes'
+				
 				$lastwornclothingtype['sport'] = $clothingworntype
 				lastwornclothingnumber['sport'] = clothingwornnumber
-				lastwornunderwear['sport'] = underwear['type']
-				if defunderwear[default_sport_number] = 2:
+				lastwornunderwear['sport'] = 0
+				if underwear['type'] = 2:
+					lastwornunderwear['sport'] = 2
 					$lastwornbodysuittype['sport'] = $bodysuitworntype
 					lastwornbodysuitnumber['sport'] = bodysuitwornnumber
 				else
@@ -966,32 +957,83 @@ if $ARGS[0] = 'default_sport_options':
 				gt $loc, $loc_arg
 			end
 		else
-			act'Put your regular clothes back on':
-				if $lastwornclothingtype['sport'] = '':
-					gs 'clothing', 'wear_last_worn'
-					gs 'underwear', 'wear'
-					gs 'shoes', 'wear', 'last_worn'
-					gs 'purses', 'wear', 'last_worn'
-					gs 'coats', 'wear', 'last_worn'
-				else
-					gs 'clothing', 'wear', $lastwornclothingtype['sport'], lastwornclothingnumber['sport']
-
-					if lastwornunderwear['sport'] = 2:
-						gs 'underwear_bodysuits', 'wear', $lastwornbodysuittype['sport'], lastwornbodysuitnumber['sport']
-					else
-						gs 'panties', 'wear', $lastwornpantytype['sport'], lastwornpantynumber['sport']
-						gs 'bras',    'wear', $lastwornbratype['sport'],   lastwornbranumber['sport']
-					end
-					gs 'shoes',  'wear', $lastwornshoetype['sport'],  lastwornshoenumber['sport']
-					gs 'purses', 'wear', $lastwornpursetype['sport'], lastwornpursenumber['sport']
-					gs 'coats',  'wear', $lastworncoattype['sport'],  lastworncoatnumber['sport']
-					gt $loc, $loc_arg
-				end
+			act 'Change into your regular clothes':
+				gs 'wardrobe', 'back_to_regular_clothes'
+				if func('prostitution_functions', 'is_default') ! 0: gs 'wardrobe', 'back_to_regular_clothes'
+				gt $loc, $loc_arg
 			end
 		end
 	end
 end
 
+if $ARGS[0] = 'is_sport':
+	!! checks to see if player is wearing the default sports set using default_sport_number[2]
+	default_sport_number[2] = 0
+	if $clothingworntype = $defclothingtype[default_sport_number] and clothingwornnumber = defclothingnumber[default_sport_number]: default_sport_number[2] += 1
+	if defunderwear[default_sport_number] = 2:
+		if $bodysuitworntype = $defbodysuittype[default_sport_number] and bodysuitwornnumber = defbodysuitnumber[default_sport_number]: default_sport_number[2] += 1
+	else
+		if $pantyworntype = $defpantytype[default_sport_number] and pantywornnumber = defpantynumber[default_sport_number] and $braworntype = $defbratype[default_sport_number] and brawornnumber = defbranumber[default_sport_number]: default_sport_number[2] += 1
+	end
+	if $shoeworntype = $defshoetype[default_sport_number] and shoewornnumber = defshoenumber[default_sport_number]: default_sport_number[2] += 1
+	if $currentpursetype = $defpursetype[default_sport_number] and currentpursenumber = defpursenumber[default_sport_number]: default_sport_number[2] += 1
+	if $coatworntype = $defcoattype[default_sport_number] and coatwornnumber = defcoatnumber[default_sport_number]: default_sport_number[2] += 1
+end
+
+if $ARGS[0] = 'back_to_regular_clothes':
+
+	!! wearing prostitute outfit
+	if func('prostitution_functions', 'is_default') ! 0:
+		if $lastwornclothingtype['prostitute'] = '':
+			gs 'clothing', 'wear_last_worn'
+			gs 'underwear', 'wear', 'wear_last_worn'
+			gs 'shoes', 'wear', 'last_worn'
+			gs 'purses', 'wear', 'last_worn'
+			gs 'coats', 'wear', 'last_worn'
+		else
+			!!-- Clothing
+			gs 'clothing', 'wear', $lastwornclothingtype['prostitute'], lastwornclothingnumber['prostitute']
+			!!-- Underwear
+			if lastwornunderwear['prostitute'] = 2:
+				gs 'underwear_bodysuits', 'wear', $lastwornbodysuittype['prostitute'], lastwornbodysuitnumber['prostitute']
+			else
+				gs 'panties', 'wear', $lastwornpantytype['prostitute'], lastwornpantynumber['prostitute']
+				gs 'bras',    'wear', $lastwornbratype['prostitute'],   lastwornbranumber['prostitute']
+			end
+			!!-- Shoes
+			gs 'shoes',  'wear', $lastwornshoetype['prostitute'],  lastwornshoenumber['prostitute']
+			gs 'purses', 'wear', $lastwornpursetype['prostitute'], lastwornpursenumber['prostitute']
+			gs 'coats',  'wear', $lastworncoattype['prostitute'],  lastworncoatnumber['prostitute']
+		end
+
+		gs 'prostitution_functions', 'work_clothes'
+		if prostitute['changed_for_work']: prostitute['changed_for_work'] = 0
+
+	!! wearing sport outfit
+	elseif default_sport_number[2] >= 5:
+		if $lastwornclothingtype['sport'] = '':
+			gs 'clothing', 'wear_last_worn'
+			gs 'underwear', 'wear', 'wear_last_worn'
+			gs 'shoes', 'wear', 'last_worn'
+			gs 'purses', 'wear', 'last_worn'
+			gs 'coats', 'wear', 'last_worn'
+		else
+			gs 'clothing', 'wear', $lastwornclothingtype['sport'], lastwornclothingnumber['sport']
+
+			if lastwornunderwear['sport'] = 2:
+				gs 'underwear_bodysuits', 'wear', $lastwornbodysuittype['sport'], lastwornbodysuitnumber['sport']
+			else
+				gs 'panties', 'wear', $lastwornpantytype['sport'], lastwornpantynumber['sport']
+				gs 'bras',    'wear', $lastwornbratype['sport'],   lastwornbranumber['sport']
+			end
+			gs 'shoes',  'wear', $lastwornshoetype['sport'],  lastwornshoenumber['sport']
+			gs 'purses', 'wear', $lastwornpursetype['sport'], lastwornpursenumber['sport']
+			gs 'coats',  'wear', $lastworncoattype['sport'],  lastworncoatnumber['sport']
+		end
+
+		default_sport_number[2] = 0
+	end
+end
 
 --- wardrobe ---------------------------------
 

+ 64 - 0
tools/build_debug.py

@@ -0,0 +1,64 @@
+#!/usr/bin/env python
+# usage: build_debug.py <input_dir> <output_file_name>
+# does the exact opposite of txtsplit.py
+
+import os
+import sys
+import io
+import xml.etree.ElementTree as ET
+
+assert len(sys.argv) == 3, "usage:\nbuild_debug.py <input_dir> <output_file_name>"
+idir = str(sys.argv[1])
+oname = str(sys.argv[2])
+
+# read the project xml file first
+# let's do this later in order to implement directory structure
+tree = ET.parse('glife.qproj')
+root = tree.getroot()
+
+
+ofile = io.open(oname, 'w', encoding='utf-16', newline='\r\n')
+
+for location in root.iter('Location'):
+	iname = location.attrib['name']
+	iname = iname.replace("$","_")
+
+	try:
+		ifile = io.open(os.path.join(idir,iname + '.qsrc'), 'rt', encoding='utf-8')
+		text = ifile.readline()
+		locname = text.strip('#').strip()
+		text += u"if arrpos('$trace_locations', '{0}') > -1:\n".format(locname)
+		text += u"	copyarr '$trace_args', '$ARGS'\n"
+		text += u"	copyarr 'trace_args', 'ARGS'\n"
+		text += u"	gs 'debug_tools', 'trace', 'direct', '{0}'\n".format(locname)
+		text += u"end\n"
+		text += ifile.read()
+
+		# make sure there's a line at the end of file
+		# (why wouldn't there be one? WINDOWS!
+		if text[-1] != u'\n':
+			text += u'\n\n'
+
+		ofile.write(text)
+		ifile.close()
+	except IOError:
+		print("WARNING: missing location %s" % iname)
+		pass
+
+import subprocess
+git_hash = ''
+try:
+	git = subprocess.run(["git", "-C", idir, "rev-parse", "--short=10", "HEAD"], capture_output=True, encoding='utf-8')
+except:
+	pass
+else:
+	git_hash = git.stdout.strip()
+
+import datetime as dt
+ofile.write(u"#addbuilddate" + '\n')
+ofile.write(str(dt.datetime.now(dt.UTC).strftime("$builddate = '%d %B %Y, %H:%M %Z'")) + '\n')
+if git_hash != '':
+	ofile.write(u"$git_hash = '" + git_hash + "'\n")
+ofile.write(u"--- addbuilddate ---------------------------------" + '\n')
+
+ofile.close()