Browse Source

Merge remote-tracking branch 'Netuttki/master'

Kevin_Smarts 7 months ago
parent
commit
7ee9266baa

+ 1 - 1
locations/cikl.qsrc

@@ -1208,7 +1208,7 @@ if ml_performance['set_lastpracticeday'] ! (daystart-1): repertoire_quality -= 2
 
 !! Check if people will start to seek Sveta randomly for services, based on her reputation
 gs 'prostitution_functions', 'check_for_wlife'
-if prostitute['blocked'] = 0: gs 'prostitution_functions', 'set_pavlovsk_prostitute'
+gs 'prostitution_functions', 'update_prostitution_locations'
 prostitute['earnings_day'] = 0
 prostitute['customer_day'] = 0
 

+ 2 - 2
locations/city_musicstore_stock.qsrc

@@ -330,7 +330,7 @@ if $ARGS[0]='amplifier':
         end
     end
 
-     if money >= 10790 and ml_amplifiers['kustom-kg112fx'] = 0:
+    if money >= 10790 and ml_amplifiers['kustom-kg112fx'] = 0:
         act 'Buy Kustom KG112FX with cash (10,790 P)':
             ml_amplifiers['kustom-kg112fx'] = 1
             money -= 10790
@@ -424,4 +424,4 @@ if $ARGS[0]='studio':
         end
     end
 end
---- city_musicstore_stock ---------------------------------
+--- city_musicstore_stock ---------------------------------

+ 3 - 3
locations/gas_station_gp_117.qsrc

@@ -29,7 +29,7 @@ if $ARGS[0] = 'outside':
 	if car > 0 and cardrive = 29: gs 'gas_station_gp_117', 'gas'
 	*nl
 
-	if prostitute['blocked'] = 0 and prostitute['gas_station'] = 1:
+	if prostitute['wl_block'] = 0 and prostitute['full_block'] = 0 and prostitute['gas_station'] = 1 and prostitute['active'] = 1:
 		if prostitute['earnings_day'] > 0: 
 			'You have earned <<prostitute[''earnings_day'']>> <b>₽</b> today.'+iif(prostitute['payment_method'] = 0, ' Your share is <<prostitute[''earnings_day''] * prostitute[''share_player''] / 100>> <b>₽</b>'+iif(prostitute['debt_amount'] > 0, ', but your pimp will keep <<prostitute[''earnings_day''] * prostitute[''debt_payment_percent''] / 100>> <b>₽</b> to pay down your debt.', '.'), '')
 		end
@@ -50,7 +50,7 @@ if $ARGS[0] = 'outside':
 	act 'Go inside the gas station': minut += 1 & gt 'gas_station_gp_117', 'shop'
 	act 'Go to the public restroom': minut += 1 & gt 'gas_station_gp_117', 'restroom'
 
-	if prostitute['blocked'] = 0 and prostitute['gas_station'] = 1 and prostitute['work_clothes']: act 'Go to work': gt 'gas_station_gp_117', 'work'
+	if prostitute['wl_block'] = 0 and prostitute['full_block'] = 0 and prostitute['gas_station'] = 1 and prostitute['work_clothes']: act 'Go to work': gt 'gas_station_gp_117', 'work'
 	act 'Wait': gs 'obj_din', 'wait'
 	killvar 'dressed_as_a_prostitute'
 end
@@ -474,4 +474,4 @@ if $ARGS[0] = 'bus_end':
 end
 
 
---- gas_station_gp_117 ---------------------------------
+--- gas_station_gp_117 ---------------------------------

+ 2 - 2
locations/homes_properties.qsrc

@@ -35,7 +35,7 @@ if $ARGS[0] = 'calculate_rentable_property_count':
 		:get_rentable_property_count_loop
 			gs 'homes_properties_attr', 'get_property_attr', $home_name[i]
 			if ($ARGS[1] ! 'home' and INSTR($property['type'], 'residence') = 0) and property['rental']: 
-				 accessible_property['rentable_business_count'] += 1
+				accessible_property['rentable_business_count'] += 1
 			elseif ($ARGS[1] ! 'business' and INSTR($property['type'], 'business') = 0) and property['rental']: 
 				accessible_property['rentable_rent_home_count'] += 1
 			end
@@ -65,7 +65,7 @@ if $ARGS[0] = 'set_home':
 	if $homepropcode ! '':
 		killvar 'home'
 		gs 'homes_properties_attr', 'get_property_attr', $homepropcode
-	 	if INSTR($property['type'], 'residence') > 0:
+		if INSTR($property['type'], 'residence') > 0:
 			COPYARR 'home','property'
 			$home['current'] = $property['code']			
 			if accessible_property[$home['current']] = 0: gs 'homes_properties', 'set_access', $home['current'], 1

+ 88 - 0
locations/music_performances.qsrc

@@ -0,0 +1,88 @@
+# music_performances
+
+!! Constants used
+!! Song type:
+SONG = 1
+INSTRUMENTAL = 2
+VOCAL = 3
+
+!! Genres:
+POP = 0
+BLUES = 1
+ROCK = 2
+CLASSICAL = 3
+GRUNGE = 4
+COUNTRY = 5
+FOLK = 6
+DISCO = 7
+FUNK = 8
+
+
+!! Set lists
+if $ARGS[0] = 'add_new_set':
+    i = ml_setlist["index"]
+    $ml_setlist["<<i>>-code"] = "SL-<<i>>"
+    $ml_setlist["<<i>>-name"] = $ARGS[1]
+    ml_setlist["<<i>>-length"] = ARGS[2]
+    ml_setlist["<<i>>-quality"] = 0
+    ml_setlist["<<i>>-practice_level"] = 0
+    ml_setlist["<<i>>-last_practice_day"] = 0
+
+    ml_setlist["index"] += 1
+end
+
+!! Songwriting and composition
+
+!! ml_song_written["1-writing_skill"] = 0
+!! Lyrics: int; skill used: songwrit (new skill, Russian class improves it, plus practice and study)
+!! Music: int; skill used: instrmusic (covers melody and harmony)
+if $ARGS[0] = 'add_new_song':
+    i = ml_song_written_written["index"]
+    $ml_song_written['<<i>>-code'] = "S-<<i>>"
+    $ml_song_written['<i>>-title'] = $ARGS[1]
+    ml_song_written["<<i>>-type"] = ARGS[2]
+    ml_song_written["<<i>>-genre"] = ROCK
+    ml_song_written["<<i>>-lyrics"] = 0
+    ml_song_written["<<i>>-music"] = 0
+    ml_song_written["<<i>>-lyrics_work_count"] = 0
+    ml_song_written_written["index"] += i
+end
+
+if $ARGS[0] = 'write_lyrics':
+    !! base: pcs_songwrit
+    !! mod: thirst, hunger, sleep, pain, drunk, drugs, exhaustion
+    ml_song_written["1-lyrics"] += ( (pcs_songwrit - modifiers) * ml_genre_knowledge[ml_song_written["1-genre"]] * rand(0,130) )/100/ml_song_written["1-lyrics_work_count"]
+    max_lyrics = (pcs_songwrit * ml_genre_knowledge[ml_song_written["1-genre"]] * 130)/100
+    if ml_song_written["1-lyrics"] > max_lyrics:  ml_song_written["1-lyrics"] = max_lyrics
+    !! should there be a diminishing return? A limit, based on skill? Max: pcs_songwrit * 1.3 * ml_genred_knowledge?
+    ml_song_written["1-lyrics_work_count"] += 1
+end
+
+if $ARGS[0] = 'write_music':
+    !! base: pcs_songwrit
+    !! mod: thirst, hunger, sleep, pain, drunk, drugs, exhaustion
+    if ml_song_written["1-type"] = VOCAL:
+        skill = (pcs_vokal + pcs_songwrit) / 2
+    else:
+        skill = (pcs_instrmusic + pcs_songwrit) / 2
+    end
+
+    ml_song_written["1-music"] += ( (skill - modifiers) * ml_genre_knowledge[ml_song_written["1-genre"]] * rand(0,130) )/100/ml_song_written["1-music_work_count"]
+    max_music = (skill * ml_genre_knowledge[ml_song_written["1-genre"]] * 130)/100
+    if ml_song_written["1-music"] > max_music: ml_song_written["1-lyrics"] = max_music
+    ml_song_written["1-music_work_count"] += 1
+end
+
+if $ARGS[0] = 'rewrite_lyrics':
+    ml_song_written["1-lyrics_work_count"] = 0
+    ml_song_written["1-lyrics"] = 0
+    gs 'music_performances', 'write_lyrics'
+end
+
+if $ARGS[0] = 'rewrite_music':
+    ml_song_written["1-music_work_count"] = 0
+    ml_song_written["1-music"] = 0
+    gs 'music_performances', 'write_music'
+end
+
+--- music_performances  ---------------------------------

+ 1 - 1
locations/pav_residential.qsrc

@@ -264,7 +264,7 @@ elseif npc_QW['A113'] = 1 and daybelisex ! daystart and hour >= 9 and hour <= 23
 end
 
 !-- Random prostitution solicitation check ------------------------ 
-if prostitute['blocked'] = 0: gs 'prostitution_functions', 'check_solicitation_event'
+gs 'prostitution_functions', 'check_solicitation_event'
 
 gs 'booty_call', 'home_links'
 

+ 337 - 9
locations/prostitution_functions.qsrc

@@ -3,9 +3,10 @@
 !! ---- Variables -------------------------------------------------------------------------------------------------------
 !!
 !! prostitute['payment_method']: 1 - Sveta works for herself; 0 - Sveta works for someone else who will take a cut
-!! prostitute['blocked']: 1 - WLife is loaded which blocks some of the locations: Pavlovsk will rely on the WLife mod 
+!! prostitute['wl_block']: 1 - WLife is loaded which blocks some of the locations: Pavlovsk will rely on the WLife mod 
 !!							  and the Gas Station will be completely blocked
-!!						  0 - WLife is not loaded, everything works as normal.	
+!!						  0 - WLife is not loaded, or WLife released the lock, everything works as normal.	
+!! prostitute['full_block']: 1 - Some mod or some other event completely blocked the prostitution content.
 !! prostitute[<<$location>>]: 1 - Sveta can work at the location.
 !!                            0 - Sveta can''t work at the location
 !!     current locations: Pavlovsk - ''pavlovsk'', Gadukino - ''gadukino'', 
@@ -32,13 +33,34 @@ $solicitation_locations[5] = 'pav_complex'
 $solicitation_locations[6] = 'pav_park'
 $solicitation_locations[7] = 'pushkin'
 
+!! Set the Pavlovsk 'working' hours
+!! Not used at the moment.
+if $ARGS[0] = 'set_pavlovsk_hours':
+	prostitute['pav_start_hour'] = ARGS[1]
+	prostitute['pav_end_hour'] = ARGS[2]
+end
+
+!! Blocks the content that would clash with the Whore Life mod.
+if $ARGS[0] = 'wl_block':
+	prostitute['wl_block'] = ARGS[1]
+	if prostitute['wl_block']:
+		gs 'prostitution_functions', 'set_pavlovsk_hours', 6, 23	
+	else
+		gs 'prostitution_functions', 'set_pavlovsk_hours', 14, 2	
+	end
+end
+
+!! Completely blocks the content - it is just here in case some mod needs to block off prostitution.
+if $ARGS[1] = 'block':
+	prostitute['full_block'] = ARGS[1]
+end
 
 if $ARGS[0] = 'check_for_wlife':
     if mod_list > 0:
         mod_i=1
         :mod_exec
         if $mod_name[mod_i] = 'wlife':
-            prostitute['blocked'] = 1
+			if prostitute['payment_method'] = 0: prostitute['wl_block'] = 1
         end
         if mod_list > mod_i:
             mod_i+=1
@@ -47,8 +69,15 @@ if $ARGS[0] = 'check_for_wlife':
     end
 end
 
+if $ARGS[0] = 'update_prostitution_locations':
+	gs 'prostitution_functions', 'set_pavlovsk_prostitute'
+	if prostitute['gadukino'] = 0: gs 'prostitution_functions', 'set_gadukion_prostitute'
+	if prostitute['road'] = 0: gs 'prostitution_functions', 'set_highway_prostitute'
+end
+
 if $ARGS[0] = 'set_pavlovsk_prostitute':
-    if (fame['pav_prostitute'] > 250 or fame['pav_slut'] > 250) and prostitute['blocked'] = 0:
+!!  if fame['pav_prostitute'] > 100 or fame['pav_slut'] > 150 and prostitute['wl_block'] = 0 and prostitute['full_block'] = 0:
+    if (fame['pav_prostitute'] > 250 or fame['pav_slut'] > 250) and prostitute['wl_block'] = 0 and prostitute['full_block'] = 0:
         prostitute['pavlovsk'] = 1
 		prostitute['active'] = 1
         prostitute['payment_method'] = 1
@@ -58,7 +87,7 @@ if $ARGS[0] = 'set_pavlovsk_prostitute':
 end
 
 if $ARGS[0] = 'set_gadukion_prostitute':
-	if gadriver_gang = 2 and (mirapimp = 0 or mirapimp = 2): 
+	if gadriver_gang = 2 and (mirapimp = 0 or mirapimp = 2) and prostitute['full_block'] = 0: 
 		prostitute['gadukino'] = 1
 		prostitute['active'] = 1
 		prostitute['payment_method'] = 1
@@ -67,6 +96,10 @@ if $ARGS[0] = 'set_gadukion_prostitute':
 	end
 end
 
+if $ARGS[0] = 'set_highway_prostitute':
+	if prostitute['highway_idea'] = 2 and prostitute['active'] = 1 and ((prostitute['full_block'] = 0 and prostitute['wl_block'] = 0) or (prostitute['wl_block'] = 1 and prostitute['payment_method'] = 1)): prostitute['road'] = 1
+end
+
 if $ARGS[0] = 'prostitute_work_hours':
 	if $region = 'pushkin':
 		RESULT = (hour >= 0 and hour < 2) or (hour >= 12 and hour < 14) or (hour >= 17 and hour <= 23)
@@ -118,6 +151,259 @@ if $ARGS[0] = 'prostitute_outfit_at_home':
 	end
 end
 
+!!---- Random approach modifiers ---------------------------------------------------------------------
+
+!! Result Range: -45  to +35
+!! Based on worn outfit, how likely is that someone will believe that the player is
+!! a hooker working on the street
+
+if $ARGS[0] = 'clothing_chance_modifier':
+	!! PCloStyle: 1 Girlie, 2 Rebel, 3 Wealthy, 4 Prostitute, 5 is Loose fit
+	!! PCloStyle2: 1 Maid, 2 Server, 3 Stripper, 4 School
+	if PCloStyle = 4: temp_result_attr += 10
+	if PCloStyle2 = 3: temp_result_attr += 5
+
+	temp_mult = 1
+
+	if $ARGS[2] = 'upclose' and $loc ! 'road' and $loc ! 'gas_station_gp_117':
+		if hour > 19 : temp_mult = 2
+
+		if PCloStyle = 3: temp_result_attr -= 15 * temp_mult
+		
+		if PCloQuality = 7: 
+			temp_result_attr -= 15 * temp_mult 		
+		elseif PCloQuality = 6:
+			temp_result_attr -= 10 * temp_mult 		
+		elseif PCloQuality = 5: 
+			temp_result_attr -= 5 * temp_mult 		
+		elseif PCloQuality >= 3: 
+			if temp_mult > 1: temp_result_attr -= 10 
+		else
+			temp_result_attr += 5
+		end
+	end
+
+	!! PCloThinness: 
+	!!	6: intentionally reveals breast/pubic areas, with translucent/transparent areas, 
+	!!	   indecent exposure/arrest event if worn in public without underwear. 
+	!!	5: see through only in bright light, or tight enough to show the body in detail if opaque.  
+	!!	4: is thin or tight enough to be flirty, fine in most places except the most conservative (church, school, etc). 
+	!!	3-2 standard publicly worn outfit.
+	!!	1 baggy, hiding the body, makes it hard to see the body shape.
+	!! PCloTopCut:
+	!!	4: reveals over half the skin on the torso area, 
+	!!	3: has a deep neckline that reaches the cleavage between the breasts, 
+	!!	2: is a cut high enough to be considered appropriate in most places (above the cleavage, or just below where it starts), 
+	!!	1: is a neckline that ends very near the neck or higher.
+	!! PCloBra
+	!!	2: Your chest is not covered at all by the outfit, if you wear a bra that will be your top
+	!!	1: 1 the top is no more than a bra and wearing a bra underneath is pointless
+
+	if PCloThinness = 6: temp_result_attr += 6
+	if PCloThinness = 5: temp_result_attr += 3
+	if PCloThinness = 4: temp_result_attr += 1
+	if PCloThinness = 1: temp_result_attr -= 4
+	
+	!! Top outfit
+	if PCloTopCut = 7: temp_result_attr += 7
+	if PCloTopCut = 6: temp_result_attr += 6
+	if PCloTopCut = 5: temp_result_attr += 5
+	if PCloTopCut = 4: temp_result_attr += 3
+	if PCloTopCut = 3: temp_result_attr += 1
+	if PCloTopCut = 1: temp_result_attr -= 4
+
+	if PCloBra = 2 and $braworntype = 'none': temp_result_attr += 6
+	if PCloBra = 2 and $braworntype ! 'none': temp_result_attr += 3
+	if PCloBra = 1: temp_result_attr += 3
+
+	!! Bottom outfit
+	!!	CloSkirtShortness
+	!! IMPORTANT: CloSkirtShortness is mapped to PCloSkirt
+	!!	6: is short enough to reveal pubic areas at all times 
+	!!	5 is ~20% thigh length or less (micro-skirt), and can reveal underwear frequently 
+	!!	4 is ~40% thigh length (miniskirt) and may show underwear if bending over 
+	!!	3 is up to ~60% thigh length (skirt) and normally never reveals underwear 
+	!!	2 is ending immediately above, at or below the knees (knee-length) 
+	!!	1 is ankle-length.
+	!! CloPantsShortness = 1-6 scale. Higher values are shorter.
+	!! IMPORTANT: CloPantsShortness is mapped to PCloPants
+	!!	6 are high-cut shorts (legs end significantly above the crotch, usually reveals a large amount of the ass cheek)
+	!!	5 is mini shorts (legs do not reach below the crotch)
+	!!	4 are shorts (close to mid thigh)
+	!!	3 is knee-length shorts
+	!!	2 is calf length
+	!!	1 is ankle length
+	!! CloPanties = 1 for yes
+	!!	1: The bottom of this outfit offers no more coverage than panties and it will 
+	!!		replace your panties (if worn)
+
+	if PCloSkirt = 6: temp_result_attr += 6
+	if PCloSkirt = 5: temp_result_attr += 4
+	if PCloSkirt = 4: temp_result_attr += 2
+	if PCloSkirt = 1: temp_result_attr -= 4
+
+	if PCloPants = 6: temp_result_attr += 6
+	if PCloPants = 5: temp_result_attr += 4
+	if PCloPants = 1: temp_result_attr -= 4
+
+	if PCloPanties = 1: temp_result_attr += 8
+	
+
+	temp_result_attr = MAX(temp_result_attr, temp_result_style)
+	
+	!! PShoHeels values: 1 flats (<5cm), 2 low heel (~5cm), 3 Mid heel (~7.5cm), 
+	!!		 4 High heel (~10cm), 5 ultra high heel (~15cm), 6 fetish heel (>15cm)
+	!! PShoStyle values: 1 stripping or whoring, 2: bimbo style, 3: alternative style
+	!! PShoCut values: 1: shoes 2: ankle boots, 3: calf high, 4: knee high, 5: thigh high, 6: groin high
+
+	if PShoHeels = 6: temp_result_attr += 3
+	if PShoHeels = 5: temp_result_attr += 2
+	if PShoHeels = 4: temp_result_attr += 1
+	if PShoHeels = 2: temp_result_attr -= 2
+	if PShoHeels = 1: temp_result_attr -= 3
+
+	if PShoStyle = 1: temp_result_attr += 2
+	if PShoStyle = 2: temp_result_attr += 1
+	if PShoStyle = 3: temp_result_attr -= 1
+
+	if PShoCut = 6: temp_result_attr += 2
+	if PShoCut = 5: temp_result_attr += 1
+	
+	result = temp_result_attr
+	
+	killvar 'temp_result_attr'
+	killvar 'temp_result_style'
+end
+
+if $ARGS[0] = 'upclose_chance':
+	temp_base_app_mod = func('prostitution_functions', 'base_appearance_modifier')
+	temp_makeup_mod = func('prostitution_functions', 'makeup_modifier')
+	temp_groom_mod = func('prostitution_functions', 'grooming_modifier')
+	temp_tat_pierc_mod = func('prostitution_functions', 'tattoo_and_piercing_modifier')
+	temp_clothes_base = func('prostitution_functions', 'clothing_chance_modifier', 'upclose')
+	
+
+	result = (temp_base_app_mod + temp_makeup_mod + temp_groom_mod + temp_tat_pierc_mod + temp_clothes_base)
+
+	killvar 'temp_base_app_mod'
+	killvar 'temp_makeup_mod'
+	killvar 'temp_groom_mod'
+	killvar 'temp_tat_pierc_mod'	
+	killvar 'temp_clothes_base'
+end
+
+!! Range -10 to +10
+if $ARGS[0] = 'makeup_modifier':
+	!! pcs_makeup:
+	!! 0: Smeared makeup
+	!! 1: No makeup
+	!! 2: Light makeup
+	!! 3: Vibrant makeup
+	!! 4: Heavy makeup
+	!! 5: Professional makeup
+	!! 6: Bimbo makeup
+	if pcs_makeup = 6: result += 5
+	if pcs_makeup = 5: result -= 5
+	if pcs_makeup = 4: result += 10
+	if pcs_makeup = 3: result += 5
+	if pcs_makeup = 1: result -= 5
+	if pcs_makeup = 0: result -= 10
+	temp_display = result
+	
+	killvar 'temp_display'
+end
+
+!! Result Range: -100 to +30
+if $ARGS[0] = 'base_appearance_modifier':
+
+	!! The following can lower the penalty from high appearance
+	!! A stunningly pretty girl being a street hooker is hard to believe
+	!! but a stunningly pretty but somewhat ran down girl is easier to 
+	!! accept. 
+	temp_hair -= (1 - pcs_hairbsh) * 10
+
+	if pcs_haircol ! nathcol:
+		if dyefade > 0 and dyefade < 7: temp_dyefade = 5
+		if dyefade = 0: temp_dyefade = 15
+	end
+
+	if pcs_makeup = 0: temp_makeup_corr = 20
+
+	if pcs_apprncbase <= 20: 
+		result -= 100
+	elseif pcs_apprncbase <= 40: 
+		result -= 20
+	elseif pcs_apprncbase <= 60: 
+		result -= 10
+	elseif pcs_apprncbase <= 80: 
+		result += 10
+	elseif pcs_apprncbase <= 100: 
+		result += 30
+	elseif pcs_apprncbase <= 120: 
+		result += 30
+	elseif pcs_apprncbase <= 140: 
+		result += 10
+	!! Over a certain beauty people will be less likely to think that Sveta is a prostitute working 
+	!! the highway unless she is acting like one, or looks really neglected.
+	elseif pcs_apprncbase <= 160: 
+		result -= 30 + temp_dyefade + pcs_leghair + temp_hair 
+	elseif pcs_apprncbase <= 179:
+		result -= 40 + temp_dyefade + pcs_leghair + temp_hair  
+	else
+		result -= 50 + temp_dyefade + pcs_leghair + temp_hair + temp_makeup_corr
+	end
+
+	!! Being high or looking like someone fighting withdrawal, downbeat or exhausted, dirty, etc. 
+	!! will lessen the high appearance penalty. Will add those later when I figure out a sensible way.
+
+	killvar 'temp_display'
+
+	killvar 'temp_dyefade'
+	killvar 'temp_leghair'
+	killvar 'temp_makeup_corr'
+end
+
+!! Result Range: -78 - 0
+if $ARGS[0] = 'grooming_modifier':
+	if pcs_sweat < 22:
+		result -= 0
+	elseif pcs_sweat < 38:
+		result -= (pcs_sweat - 10) / 4 & !! 28/4 = 7
+	elseif pcs_sweat < 54:
+		result -= (pcs_sweat - 10) / 2 & !! 54-10 / 2 = 22
+	else
+		result -= 3 * (pcs_sweat - 10) / 4 & !! 3 * 100-10 / 4 = 67
+	end	
+
+	temp_display = result
+	killvar 'temp_display'
+end
+
+
+!! Result Range: 0
+if $ARGS[0] = 'tattoo_and_piercing_modifier':
+	result = 0
+	if (PCloSkirt >= 4 or PCloPants >= 4 or PCloPanties = 1) and PShoCut = 1 and tatankle > 0: temp_tattoo_mod += 3
+	if (PCloSkirt >= 4 or PCloPants >= 4 or PCloPanties = 1) and PShoCut < 5 and tatleg > 0: temp_tattoo_mod += 5
+	if PCloSKirt = 6 and $pantyworntype = 'none' and tatvag > 0: temp_tattoo_mod += 5
+	if PCloSkirt >= 5 and tatass > 0: temp_tattoo_mod += 3
+	if (PCloThinness >= 5 or PCloTopCut >= 4 or PCloBra = 1) and tatblly > 0: temp_tattoo_mod += 5
+	if (PCloThinness >= 5 or PCloTopCut >= 3 or PCloBra = 1 or PCloStyle = 4 or PCloStyle2 = 3) and tatupb > 0: temp_tattoo_mod += 3
+	if (PCloThinness >= 5 or PCloTopCut >= 4 or PCloBra = 1) and tatback > 0: temp_tattoo_mod += 3
+	if (PCloThinness >= 5 or PCloTopCut >= 3 or PCloBra = 1 or PCloStyle = 4 or PCloStyle2 = 3) and tatunder > 0: temp_tattoo_mod += 3
+	if (PCloThinness >= 5 or PCloTopCut >= 3 or PCloBra = 1 or (PCloBra = 2 and $braworntype = 'none')) and tatbrst > 0: temp_tattoo_mod += 3
+	if (PCloThinness >= 5 or PCloTopCut >= 3 or PCloBra = 1 or (PCloBra = 2 and $braworntype = 'none')) and tatchst > 0: temp_tattoo_mod += 3
+	if (PCloThinness >= 5 or PCloTopCut >= 3 or PCloBra = 1 or PCloStyle = 4 or PCloStyle2 = 3) and tatside > 0: temp_tattoo_mod += 3
+	if (PCloThinness >= 5 or PCloBra = 1) and tatarm > 0: temp_tattoo_mod += 2
+	if (PCloThinness >= 5 or PCloTopCut >= 3 or PCloBra = 1 or PCloStyle = 4 or PCloStyle2 = 3) and tatlech > 0: temp_tattoo_mod += 3
+	if (PCloThinness >= 3 or PCloTopCut >= 2 or PCloBra = 1 or PCloStyle = 4 or PCloStyle2 = 3) and tatneck > 0: temp_tattoo_mod += 5
+	if tatfce > 0: temp_tattoo_mod += 3
+	
+	result = temp_tattoo_mod
+	
+	killvar 'temp_tattoo_mod'
+end
+
 !!---- Outfit checks ---------------------------------------------------------------------------------  
 if $ARGS[0] = 'work_clothes':
 	prostitute['work_clothes'] = (PCloStyle = 4 and (PShoStyle = 1 or PShoStyle = 2 or PShoHeels >= 3))
@@ -195,7 +481,7 @@ if $ARGS[0] = 'change_into_regular_clothes':
 end
 
 !!---------- Chaging outfits in public locations ------------------------------------------------------------------------
-!!------ CHanging clothes --------------------------
+!!------ Changing clothes --------------------------
 if $ARGS[0] = 'change_to_work':
 	cla
 	*clr
@@ -242,10 +528,10 @@ end
 !!-----------------------------------------------------------------------------------------------------------------------
 !!---------- Checking for events ----------------------------------------------------------------------------------------
 !!-----------------------------------------------------------------------------------------------------------------------
-  
+
 if $ARGS[0] = 'check_solicitation_event':
 	gs 'prostitution_functions', 'work_clothes'
-	if prostitute['blocked'] = 0 and func('prostitution_functions', 'prostitute_work_hours') and func('prostitution_functions','is_solicitation_location'):
+	if prostitute['wl_block'] = 0 and prostitute['full_block'] = 0 and func('prostitution_functions', 'prostitute_work_hours') and func('prostitution_functions','is_solicitation_location'):
 		if prostitute['pavlovsk'] = 1 and prostitute['pav_time_hour'] ! hour and rand(-20, 70) < minut: 
 			gs 'prostitution_pavlovsk', 'chance'
 		end
@@ -534,6 +820,48 @@ if $ARGS[0] = 'parameters':
 		prostitute['cum_visible_mod'] = 0
 	end
 
+!!---------- Prostitution long term effects ---------------------------------------------------------------------
+if $ARGS[0] = 'solicitation_effort':
+	cost = ARGS[1]
+	prostitute['skin_penalty'] += 5
+	if temper < 15: prostitute['skin_penalty'] += 5
+	if temper > 25: prostitute['skin_penalty'] += 5
+	if cost <= willpowermax/4:
+		prostitute['age_mod'] += 5
+	elseif cost <= willpowermax/3:
+		prostitute['age_mod'] += 10
+	elseif cost <= willpowermax/2:
+		prostitute['age_mod'] += 15
+	else
+		prostitute['age_mod'] += 20
+	end
+end
+
+if $ARGS[0] = 'client_effort':
+	$client_type = iif($ARGS[1] = '', 'normal', $ARGS[1])
+	if $client_type = 'nice':
+		prostitute['age_mod'] += 5
+	elseif $client_type = 'normal':
+		prostitute['age_mod'] += 10
+	elseif $client_type = 'abusive':
+		prostitute['age_mod'] += 20
+	end
+end
+
+if $ARGS[0] = 'daily_effects':
+	if prostitute['age_mod'] >= 100: 
+		temp_age_mod_remain = prostitute['age_mod'] MOD 100
+		vidageday -= ((prostitute['age_mod'] - temp_age_mod_remain) / 100)
+		prostitute['age_mod'] = temp_age_mod_remain
+		killvar 'temp_age_mod_remain'
+	end
+	if prostitute['skin_penalty'] >= 100:
+		temp_skin_remain = prostitute['skin_penalty'] MOD 100
+		skinDailyPenalty += ((prostitute['skin_penalty'] - temp_skin_remain) / 100)
+		prostitute['skin_penalty'] = temp_skin_remain
+		killvar 'temp_skin_remain'
+	end
+end
 !!---------- Age ------------------------------------------------------------------------------------------------
 
 	if vidage < 18 and rand(1,10) < 7:
@@ -981,4 +1309,4 @@ if $ARGS[0] = 'exact_round':
 end
 
 
---- prostitution_functions ---------------------------------
+--- prostitution_functions ---------------------------------

+ 1 - 1
locations/prostitution_pavlovsk.qsrc

@@ -1380,4 +1380,4 @@ if $ARGS[0] = 'maybe_use_later':
 end
 }
 
---- prostitution_pavlovsk ---------------------------------
+--- prostitution_pavlovsk ---------------------------------

+ 244 - 91
locations/road.qsrc

@@ -37,8 +37,30 @@ if $ARGS[0] = '':
 		act 'Walk to Pavlovsk Industrial region (0:25)': minut += 25 & gt 'pav_industrial'
 		act 'Walk to Pavlovsk Market (0:15)': minut += 15 & gt 'pav_market'
 	end
-	if nroad < 20: act 'Walk towards Pavlovsk (0:20)': minut += 20 & nroad += 1 & gt $curloc
-	if nroad > 0: act 'Walk towards St. Petersburg (0:20)': minut += 20 & nroad -= 1 & gt $curloc
+	if nroad < 20: 
+		act 'Walk towards Pavlovsk (0:20)': 
+			if func('road', 'mistake_check'): 
+				!! TODO: should be gt 'road', 'walking_mistake'
+				gt 'road', 'autostop_mistake', 'Pavlovsk'
+			else
+				minut += 20
+				nroad += 1
+				gt $curloc
+			end		
+		end
+	end
+	if nroad > 0: 
+		act 'Walk towards St. Petersburg (0:20)': 
+			if func('road', 'mistake_check'):  
+				!! TODO: should be gt 'road', 'walking_mistake'
+				gt 'road', 'autostop_mistake', 'St. Petersburg'
+			else
+				minut += 20
+				nroad -= 1
+				gt $curloc
+			end
+		end	
+	end
 	if nroad > 0 and nroad < 20:
 		!!  TODO: Adding a scene here of a driver mistaking Sveta for a whore and solicits her. If she accepts, that will unlock prostitution along the road.
 		act 'Try hitchhiking towards Pavlovsk':
@@ -47,7 +69,10 @@ if $ARGS[0] = '':
 			gs 'stat'
 			gorand = rand(1, 100)
 			picrand = RAND(1, 3)
-			if gorand <= 60:
+			!! Check if a misunderstanding is happening here
+			if func('road', 'mistake_check', 2): 
+				gt 'road', 'autostop_mistake', 'Pavlovsk'
+			elseif gorand <= 60:
 				'<center><B>Main road between St. Petersburg and Pavlovsk</B></center>'
 				'<center><img <<$set_imgh>> src="images/locations/highway/autostop (<<picrand>>).jpg" ></center>'
 				'You try to catch the attention of people driving towards Pavlovsk, but everyone just rushes by, ignoring you completely.'
@@ -57,12 +82,12 @@ if $ARGS[0] = '':
 				if nroad < 10:
 					act 'Ask the driver to take you to Gadukino':
 						$road_textrand0 = 'Gadukino'
-						gt 'road', 'autostpo_money'
+						gt 'road', 'autostop_money'
 					end
 				end
 				act 'Ask the driver to take you to Pavlovsk':
 					$road_textrand0 = 'Pavlovsk'
-					gt 'road', 'autostpo_money'
+					gt 'road', 'autostop_money'
 				end
 			end
 		end
@@ -73,7 +98,9 @@ if $ARGS[0] = '':
 			gs 'stat'
 			gorand = rand(1, 100)
 			picrand = RAND(1, 3)
-			if gorand <= 60:
+			if func('road', 'mistake_check', 2): 
+				gt 'road', 'autostop_mistake', 'St. Petersburg'
+			elseif gorand <= 60:
 				'<center><B>Main road between St. Petersburg and Pavlovsk</B></center>'
 				'<center><img <<$set_imgh>> src="images/locations/highway/autostop (<<picrand>>).jpg" ></center>'
 				'You try to catch the attention of people driving towards St. Petersburg, but everyone just rushes by, ignoring you completely.'
@@ -83,12 +110,12 @@ if $ARGS[0] = '':
 				if nroad > 10:
 					act 'Ask the driver to take you to Gadukino':
 						$road_textrand0 = 'Gadukino'
-						gt 'road', 'autostpo_money'
+						gt 'road', 'autostop_money'
 					end
 				end
 				act 'Ask the driver to take you to St. Petersburg':
 					$road_textrand0 = 'St. Petersburg'
-					gt 'road', 'autostpo_money'
+					gt 'road', 'autostop_money'
 				end
 			end
 		end
@@ -136,7 +163,7 @@ if $ARGS[0] = '':
 					gs 'prostitution_functions', 'change_to_work', 'car'
 					killvar '$loc_desc' 
 				end
-		elseif prostitute['road'] = 1 and (prostitute['blocked'] = 0 or (prostitute['blocked'] = 1 and prostitute['payment'] = 1)):
+		elseif prostitute['road'] = 1 and ((prostitute['wl_block'] = 0 and prostitute['full_block'] = 0) or (prostitute['wl_block'] = 1 and prostitute['payment_method'] = 1)):
 			if car > 0 and cardrive = 22 and ncarroad = nroad:'You parked <a href="exec:gs ''carF'', ''start''">your <<$car>></a> in a quieter spot on the side road to Gadukin.'
 			gs 'prostitution_functions', 'work_clothes'
 			if  prostitute['work_clothes'] = 0 and prostitute['outfit_is_set']: 
@@ -190,7 +217,7 @@ if $ARGS[0] = '':
 			'You can see <a href="exec:gt ''NikoSlut'', ''Yurik Out''">' + iif(YurikEv['Name'] = 'Yurik', 'Yurik', 'a big burly man') + '</a>, clearly drunk, stumbling along the highway with a beer bottle in his hand.'
 		end		
 	end
-	if prostitute['road'] = 1 and nroad ! 10 and nroad ! 20 and (prostitute['blocked'] = 0 or (prostitute['blocked'] = 1 and prostitute['payment'] = 1)):
+	if prostitute['road'] = 1 and nroad ! 10 and nroad ! 20 and ((prostitute['wl_block'] = 0 and prostitute['full_block']) or (prostitute['wl_block'] = 1 and prostitute['payment_method'] = 1)):
 		gs 'prostitution_functions', 'work_clothes'
 		if  prostitute['work_clothes'] = 0 and prostitute['outfit_is_set']: 
 			$loc_desc = 'You change into some more appropriate clothing in your car, then walk down the road a little to catch the attention of passing cars.'
@@ -226,11 +253,11 @@ if $ARGS[0] = 'drive_sex1':
 	'<center><video autoplay loop src="images/locations/highway/sex/bj (1).mp4" width="1000" height="562"></video></center>'
 	'When you get in the car, you immediately reach for his pants and take out his semi-erect cock. That''s what you promised him after all. You feel it slowly hardening between your fingers as the man drives off.'
 	if pcs_throat < dick: pcs_throat += 1
-	if dick >= 14 and dick < 16: $raod_text_sex = 'a normal size'
-	if dick >= 16 and dick < 18: $raod_text_sex = 'a bit larger than average'
-	if dick >= 18 and dick < 20: $raod_text_sex = 'quite large'
-	if dick >= 20: $raod_text_sex = 'huge'
-	'You gently massage his cock between your fingers while the man gets comfortable. It''s <<$raod_text_sex>>, roughly <<dick>> centimeters long and quite girthy. You manage to massage him to a full erection in no time at all, and lower your head to take it between your lips.'
+	if dick >= 14 and dick < 16: $road_text_sex = 'a normal size'
+	if dick >= 16 and dick < 18: $road_text_sex = 'a bit larger than average'
+	if dick >= 18 and dick < 20: $road_text_sex = 'quite large'
+	if dick >= 20: $road_text_sex = 'huge'
+	'You gently massage his cock between your fingers while the man gets comfortable. It''s <<$road_text_sex>>, roughly <<dick>> centimeters long and quite girthy. You manage to massage him to a full erection in no time at all, and lower your head to take it between your lips.'
 	'As you lick the tip of his cock with your tongue and begin to suck him off, you have to admit: this is kinda hot! The man is well groomed and has a pleasant masculine smell to him.'
 	'You eagerly bob your head up and down while he drives, totally forgetting about your earlier doubts, and do your best to get him off.'
 	'With success: in no time at all, the man groans, and his cock erupts inside your mouth, shooting gobs of his hot sperm onto your tongue while you keep your lips closed to not make a mess.'
@@ -241,7 +268,7 @@ if $ARGS[0] = 'drive_sex1':
 	gs 'arousal', 'end'
 	gs 'stat'
 	
-	act 'Continue': gt 'road', 'autospot_drive'
+	act 'Continue': gt 'road', 'autostop_drive'
 end
 
 if $ARGS[0] = 'drive_sex2':
@@ -267,21 +294,21 @@ if $ARGS[0] = 'drive_sex2':
 	'<center><B>Main road between St. Petersburg and Pavlovsk</B></center>'
 	'<center><video autoplay loop src="images/locations/highway/sex/hj(1).mp4"></video></center>'
 	'When you get in the car, you immediately reach for his pants and take out his semi-erect cock. That''s what you promised him after all. You feel it slowly hardening between your fingers as the man drives off.'
-	if dick >= 14 and dick < 16: $raod_text_sex = 'a normal size'
-	if dick >= 16 and dick < 18: $raod_text_sex = 'a bit larger than average'
-	if dick >= 18 and dick < 20: $raod_text_sex = 'quite large'
-	if dick >= 20: $raod_text_sex = 'huge'
-	'You gently massage his cock between your fingers while the man gets comfortable. It''s <<$raod_text_sex>>, roughly <<dick>> centimeters long and quite girthy. You manage to massage him to a full erection in no time at all, and begin to jerk him off while he drives, rubbing your fingertips over his glans.'
+	if dick >= 14 and dick < 16: $road_text_sex = 'a normal size'
+	if dick >= 16 and dick < 18: $road_text_sex = 'a bit larger than average'
+	if dick >= 18 and dick < 20: $road_text_sex = 'quite large'
+	if dick >= 20: $road_text_sex = 'huge'
+	'You gently massage his cock between your fingers while the man gets comfortable. It''s <<$road_text_sex>>, roughly <<dick>> centimeters long and quite girthy. You manage to massage him to a full erection in no time at all, and begin to jerk him off while he drives, rubbing your fingertips over his glans.'
 	'Even though you feel a bit awkward for having to service this man to get where you need to be, you''re serious about what you promised him and jerk him off diligently. In no time at all, your soft touch brings him to an orgasm. Unfortunately, his cock is pointing straight at you when it happens, and most of his sperm ends up on your clothes.'
 	
 	gs 'arousal', 'hj', 15, 'prostitution'
 	gs 'arousal', 'end'
 	gs 'stat'
 	
-	act 'Continue': gt 'road', 'autospot_drive'
+	act 'Continue': gt 'road', 'autostop_drive'
 end
 
-if $ARGS[0] = 'autospot_drive':
+if $ARGS[0] = 'autostop_drive':
 	$location_type = 'event_outdoors'
 	cla & *clr
 	menu_off = 1
@@ -306,12 +333,32 @@ if $ARGS[0] = 'autospot_drive':
 	end
 	'You try to start a conversation once or twice, but the man doesn''t really seem to be interested in chatting while he drives. You give up and just look out the window, while he drives you to your destination.'
 	'Fifteen minutes later, you arrive, and the man pulls over. "Alright, we''re here. Take care, girl!"'
+	if prostitute['highway_idea'] = 1:
+		'You get out of the car, looking after it for a minute or two as it drives away. Someone just solicited you, as if you were a prostitute.'
+		if prostitute['active'] = 1:
+			'Which you are, in all honesty, but it still caught you by surprise. However, this means that maybe you could work along the highway. You definitely saw some girls working but mostly near the entrance to Pavlovsk or St. Petersburg.'
+			'You put the idea aside for now, but maybe you should check it at some point.'
+			prostitute['highway_idea'] = 2
+			gs 'prostitution_functions', 'set_highway_prostitute'
+		else
+			if PCloStyle = 4: 
+				'You may dress like one, but that doesn''t mean you are one. Nonetheless, now you know to watch out, clearly there are prostitutes working along the highway and not just near Pavlovsk or St. Petersburg.'
+			else
+				'You are still a bit shaken and wonder why did you even ask him to give you a ride, but then shrug it off. He thought you were a hooker. As if...'
+			end
+			prostitute['highway_idea'] = 2
+			gs 'prostitution_functions', 'set_highway_prostitute'
+		end
+	end
 	act 'Get out of the car': gt $curloc
 end
 
-if $ARGS[0] = 'autostpo_money':
+if $ARGS[0] = 'autostop_money':
 	$location_type = 'event_outdoors'
 	cla & *clr
+	'$ARGS[0]: <<$ARGS[0]>>'
+	'ARGS[1]: <<ARGS[1]>>'
+	'ARGS[2]: <<ARGS[2]>>'
 	menu_off = 1
 	gs 'stat'
 	autostop_price = RAND(3,6)
@@ -320,15 +367,21 @@ if $ARGS[0] = 'autostpo_money':
 	if textrand = 2:$road_textrand4 = '<<autostop_price*100>> <b>₽</b>. Take it or leave it.'
 	if textrand = 3:$road_textrand4 = '<<autostop_price*100>> <b>₽</b>.'
 	'<center><B>Main road between St. Petersburg and Pavlovsk</B></center>'
-	if truck_drive = 1:
-		'<center><img <<$set_imgh>> src="images/locations/highway/truck_guy (<<picrand>>).jpg" ></center>'
-	elseif bandit_drive = 1:
-		'<center><img <<$set_imgh>> src="images/locations/highway/guy (1).jpg" ></center>'
+	if ARGS[1] = 0:
+		if truck_drive = 1:
+			'<center><img <<$set_imgh>> src="images/locations/highway/truck_guy (<<picrand>>).jpg" ></center>'
+		elseif bandit_drive = 1:
+			'<center><img <<$set_imgh>> src="images/locations/highway/guy (1).jpg" ></center>'
+		else
+			'<center><img <<$set_imgh>> src="images/locations/highway/guy (<<picrand>>).jpg" ></center>'
+		end
+		'You approach the driver and say, "Hello, sir! I need a ride to <<$road_textrand0>>, can you help me?"'
+		'The driver gives you another appraising look.'
 	else
-		'<center><img <<$set_imgh>> src="images/locations/highway/guy (<<picrand>>).jpg" ></center>'
+		'<center><img <<$set_imgh>> src="images/locations/highway/guy (<<ARGS[2]>>).jpg" ></center>'
+		'You take a small step back, "I think, there is a mistake, sir, I''m just trying to get to <<$road_textrand0>>, can you help me?'
+		'The driver gives you another appraising look.'
 	end
-	'You approach the driver and say, "Hello, sir! I need a ride to <<$road_textrand0>>, can you help me?"'
-	'The driver gives you another appraising look.'
 	vnerand = RAND(0,1200) 
 	if vnerand <= pcs_apprnc:
 		cla
@@ -351,71 +404,77 @@ if $ARGS[0] = 'autostpo_money':
 			'After some hesitation, he responds, "Oh, alright then. Getting a handjob from a cute girl such as yourself sounds like a fair deal. Get in."'
 			act'Get in the car':gt 'road', 'drive_sex2'
 		end
-		exit
+		act 'Decline his offer':
+			cla
+			'You bite your lip for a second, thinking for a moment that maybe you could offer him money instead, but decide it''s safer to let him go, who knows what he will do if you refuse and then get in the car with him, alone.'
+			'"Thank you sir, but I will just wait for someone else, I''m sorry for holding you up." you say and step away from the car. The man shrugs and drives off.'
+			act 'Continue':gt $curloc
+		end
+		exit & !! What does this exit actually do here? 
 	else 
 		'He ponders for a second and then says, "<<$road_textrand4>>"'
-	end
-	if money > autostop_price*100:
-		act 'Agree to pay him': gt 'road', 'autospot_drive'
-	end
-	act'Decline his offer':
-		cla
-		'"I''m sorry, sir. I can''t afford that," you apologize and step away from the car. The man shrugs and drives off.'
-		act 'Continue':gt $curloc
-	end
-	act 'Ask for a lower price':
-		cla
-		textrand = RAND(1,3)
-		if textrand = 1:$road_textrand5 = 'Please, sir! I''m nearly broke... would you please do a girl a favour? I''d be so grateful!'
-		if textrand = 2:$road_textrand5 = 'Maybe we can work something out?'
-		if textrand = 3:$road_textrand5 = 'Oh no, I don''t have that much! Could you lower your price? Maybe a bit, just for me?'
-		'You twirl your hair between your fingers and give the man a cute look, hoping he will have pity on you and lower the price. "<<$road_textrand5>>" you ask him sweetly.'
-		'The man seems a bit reluctant and looks at you once more.'
-		vnerand = RAND(0,400)
-		if vnerand <= pcs_apprnc:
+		if money > autostop_price*100:
+			act 'Agree to pay him': gt 'road', 'autostop_drive'
+		end
+		act'Decline his offer':
 			cla
-			'"I can take you there for free, but only if you do something for me in return", the guy smiles.'
-			'"Uhh... like what?" you ask him, even though you''re pretty sure you know where this is going.'
-			'The man laughs and shifts a bit in his seat. He says, "You''re a grown-up girl with a nice body! Surely you can think of something?"'
-			act 'Offer a blowjob':
-				cla
-				drive_sex[1] = 1
-				'You bite your lip for a second, quickly going through your options. Then you say, "I really do need this ride, sir! Would a blowjob be okay?"'
-				'The guy grins greedily and says, "Excellent, I knew we would find a way to help each other out! Get in."'
-				act 'Get in the car':gt 'road', 'drive_sex1'
-			end
-			act 'Offer a handjob':
+			'"I''m sorry, sir. I can''t afford that," you apologize and step away from the car. The man shrugs and drives off.'
+			act 'Continue':gt $curloc
+		end
+		act 'Ask for a lower price':
+			cla
+			textrand = RAND(1,3)
+			if textrand = 1:$road_textrand5 = 'Please, sir! I''m nearly broke... would you please do a girl a favour? I''d be so grateful!'
+			if textrand = 2:$road_textrand5 = 'Maybe we can work something out?'
+			if textrand = 3:$road_textrand5 = 'Oh no, I don''t have that much! Could you lower your price? Maybe a bit, just for me?'
+			'You twirl your hair between your fingers and give the man a cute look, hoping he will have pity on you and lower the price. "<<$road_textrand5>>" you ask him sweetly.'
+			'The man seems a bit reluctant and looks at you once more.'
+			vnerand = RAND(0,400)
+			if vnerand <= pcs_apprnc:
 				cla
-				drive_sex[2] = 1
-				'You bite your lip for a second, quickly going through your options. Then you say, "I really do need this ride, sir! Would a handjob be okay?"'
-				'The guy gives you a slightly disappointed look and says, "What? Only a handjob?"'
-				'You really don''t want to go further than that! Your cheeks turn a deep red and you begin to stumble, "I''m sorry. I don''t normally do this..."'
-				'After some hesitation, he responds, "Oh, alright then. Getting a handjob from a cute girl such as yourself sounds like a fair deal. Get in."'
-				act 'Get in the car':gt 'road', 'drive_sex2'
-			end
-		else 
-			ivrand = RAND(1,2)
-			autostop_price -= ivrand
-			'The man sighs exasperatedly, but yields, "Okay, fine. I''ll make it <<ivrand*100>> <b>₽</b> less, because you seem like a nice girl and I want to help you out. I''ll take you there for <<autostop_price*100>> <b>₽</b>, but I can''t go any lower than that!"'
-			
-			if money > autostop_price*100:
-				act 'Agree to pay him':
-					!trip
-					gt 'road', 'autospot_drive'
+				'"I can take you there for free, but only if you do something for me in return", the guy smiles.'
+				'"Uhh... like what?" you ask him, even though you''re pretty sure you know where this is going.'
+				'The man laughs and shifts a bit in his seat. He says, "You''re a grown-up girl with a nice body! Surely you can think of something?"'
+				act 'Offer a blowjob':
+					cla
+					drive_sex[1] = 1
+					'You bite your lip for a second, quickly going through your options. Then you say, "I really do need this ride, sir! Would a blowjob be okay?"'
+					'The guy grins greedily and says, "Excellent, I knew we would find a way to help each other out! Get in."'
+					act 'Get in the car':gt 'road', 'drive_sex1'
+				end
+				act 'Offer a handjob':
+					cla
+					drive_sex[2] = 1
+					'You bite your lip for a second, quickly going through your options. Then you say, "I really do need this ride, sir! Would a handjob be okay?"'
+					'The guy gives you a slightly disappointed look and says, "What? Only a handjob?"'
+					'You really don''t want to go further than that! Your cheeks turn a deep red and you begin to stumble, "I''m sorry. I don''t normally do this..."'
+					'After some hesitation, he responds, "Oh, alright then. Getting a handjob from a cute girl such as yourself sounds like a fair deal. Get in."'
+					act 'Get in the car':gt 'road', 'drive_sex2'
+				end
+			else 
+				ivrand = RAND(1,2)
+				autostop_price -= ivrand
+				'The man sighs exasperatedly, but yields, "Okay, fine. I''ll make it <<ivrand*100>> <b>₽</b> less, because you seem like a nice girl and I want to help you out. I''ll take you there for <<autostop_price*100>> <b>₽</b>, but I can''t go any lower than that!"'
+				
+				if money > autostop_price*100:
+					act 'Agree to pay him':
+						!trip
+						gt 'road', 'autostop_drive'
+					end
+				end
+				act 'Decline his offer':
+					cla
+					'"I''m sorry, sir. I still can''t afford that," you apologize and step away from the car. The man shrugs and drives off.'
+					act 'Continue':gt $curloc
+				end
+				act 'Offer him a blowjob instead':
+					cla
+					drive_sex[1] = 1
+					'You bite your lip, as if you are ashamed of what you''re about to say next. In a weak voice, you offer, "I can''t pay you money, sir. But... I could give you a blowjob? Would that be okay?"'
+					'You lick your lips seductively and offer him a weak smile, hoping that maybe he''ll feel bad for you and just take you with him for free.'
+					'The man grins from ear to ear, and says, "You know what, girl? I was kinda hoping you''d say that. Get in."'
+					act 'Get in the car':gt 'road', 'drive_sex1'
 				end
-			end
-			act 'Decline his offer':
-				cla
-				'"I''m sorry, sir. I still can''t afford that," you apologize and step away from the car. The man shrugs and drives off.'
-				act 'Continue':gt $curloc
-			end
-			act 'Offer him a blowjob instead':
-				cla
-				drive_sex[1] = 1
-				'You bite your lip, as if you are ashamed of what you''re about to say next. In a weak voice, you offer, "I can''t pay you money, sir. But... I could give you a blowjob? Would that be okay?"'
-				'You lick your lips seductively and offer him a weak smile, hoping that maybe he''ll feel bad for you and just take you with him for free.'
-				'The man grins from ear to ear, and says, "You know what, girl? I was kinda hoping you''d say that. Get in."'
-				act 'Get in the car':gt 'road', 'drive_sex1'
 			end
 		end
 	end
@@ -475,5 +534,99 @@ if $ARGS[0] = 'autostop_d':
 	end
 end
 
+if $ARGS[0] = 'mistake_check':
+	temp_multiplier = iif(ARGS[1] = 0, 15, ARGS[1]*10)
+	!! In the long run it could be done separately with some scenes where the first check was passed and the second failed,
+	!! so a car slowed down but sped up and drove away when it got closer to the player.
+	distance_check = rand(0,100)
+	distance_chance = func('prostitution_functions', 'clothing_chance_modifier')
+	mdc = (distance_chance * temp_multiplier) / 10
+	u_check = rand(0,100)
+	u_chance = (func('prostitution_functions', 'upclose_chance') * temp_multiplier)/10
+
+	if distance_check <= mdc and u_check <= u_chance:
+		result = 1
+	end
+
+	killvar 'distance_chance'
+	killvar 'distance_check'
+	killvar 'upclose_chance'
+	killvar 'upclose_check'
+	killvar 'temp_multiplier'
+end
+
+if $ARGS[0] = 'autostop_mistake':
+	cla & *clr
+	menu_off = 1
+	gs'stat'
+	truck_drive = 0
+	bandit_drive = 0
+	if rand(1,4) = 1: bandit_drive = 1
+	
+	textrand = RAND(1,5)
+	if textrand = 1:$road_textrand1 = 'perfectly clean and shiny'
+	if textrand = 2:$road_textrand1 = 'dirty'
+	if textrand = 3:$road_textrand1 = 'dusty'
+	if textrand = 4:$road_textrand1 = 'slightly dusty'
+	if textrand = 5:$road_textrand1 = 'very dirty'
+	textrand = RAND(1,5)
+	if textrand = 1:$road_textrand2 = 'black'
+	if textrand = 2:$road_textrand2 = 'white'
+	if textrand = 3:$road_textrand2 = 'red'
+	if textrand = 4:$road_textrand2 = 'blue'
+	if textrand = 5:$road_textrand2 = 'grey'
+	textrand = RAND(1,5)
+	actrand = RAND(1,6)
+	if actrand = 1: $act_text = 'how much for a blowjob?"'
+	if actrand = 2: $act_text = 'what do you charge for a blowjob?"'
+	if actrand = 3: $act_text = 'you give me head, I give you some money, fair deal."'
+	if actrand = 4: $act_text = 'how much for spreading your legs?"'
+	if actrand = 5: $act_text = 'what do you charge for a ride?"'
+	if actrand = 6: $act_text = 'how much for anal?"'
+	if textrand = 1:$road_textrand1 = '"Hey there, darling! What is your price? I really need to relax, <<$act_text>>'
+	if textrand = 2:$road_textrand1 = '"Hey gorgeous, I was just looking for you. My balls are really full, <<$act_text>>'
+	if textrand = 3:$road_textrand3 = '"Hey girl, just what I need, <<$act_text>>'
+	if textrand = 4:$road_textrand3 = '"Hey beauty, just what I need, <<$act_text>>'
+	if textrand = 5:$road_textrand3 = '"Darling, where are your girlfriends, being busy?" he glances over you again "Don''t be sad, I''ll make you busy too, <<$act_text>>'
+	
+	if prostitute['road'] = 0: prostitute['highway_idea'] = 1
+
+	'<center><B>Main road between St. Petersburg and Pavlovsk</B></center>'
+	!! TODO: At some point add in a scene where some pimps stop, thinking Sveta is freelancing, to correct the situation.
+	picrand = RAND(2,4)
+	'<center><img <<$set_imgh>> src="images/locations/highway/guy (<<picrand>>).jpg" ></center>'
+	'After a few minutes of you trying to get someone to pull over, a <<$road_textrand1>>, <<$road_textrand2>> car stops near you. The driver rolls down his window and leans closer, his eyes roaming over your body.'
+	'<<$road_textrand3>>" - rubs his fingers together with a wide smile as he waits for your answer.'
+	'You blink at the question, then you realise that he mistook you for a prositute' + iif(PCloStyle = 4, ', which, seeing what you''re wearing, isn''t really surprising', '.')
+	if $ARGS[1] = 'St. Petersburg':
+		if nroad > 10:
+			act 'Ask the driver to take you to Gadukino':
+				$road_textrand0 = 'Gadukino'
+				gt 'road', 'autostop_money', 1, picrand
+			end
+		end
+		act 'Ask the driver to take you to St. Petersburg':
+			$road_textrand0 = 'St. Petersburg'
+			gt 'road', 'autostop_money', 1, picrand
+		end
+	else
+		if nroad < 10:
+			act 'Ask the driver to take you to Gadukino':
+				$road_textrand0 = 'Gadukino'
+				gt 'road', 'autostop_money', 1, picrand
+			end
+		end
+		act 'Ask the driver to take you to Pavlovsk':
+			$road_textrand0 = 'Pavlovsk'
+			gt 'road', 'autostop_money', 1, picrand
+		end
+	end
+
+	killvar '$road_textrand1'
+	killvar '$road_textrand2'
+	killvar '$road_textrand3'
+end
+
+
 --- road ---------------------------------
 

+ 4 - 0
locations/saveupdater.qsrc

@@ -2304,6 +2304,10 @@ if temp_current_save_version < 00090003:
 	killvar 'gp_cumVol'
 	killvar 'sp_cumVol'
 	killvar 'nd_cumVol'
+
+	!! Prostitution blocking variable changes
+	prostitute['wl_block'] = prostitute['blocked']
+	prostitute['full_block'] = 0
 end
 
 

+ 1 - 0
locations/stat_sklattrib.qsrc

@@ -92,6 +92,7 @@ $skl_name[36] = 'cleaning'
 $skl_name[37] = 'bkbll'
 $skl_name[38] = 'cheer'
 $skl_name[39] = 'musicprod'
+$skl_name[40] = 'songwrit'
 
 !!Trait Section
 !!This is where Traits that will affect attribute or skill advancement or degradation have those aspects defined.

+ 4 - 0
locations/stat_sklattrib_lvlset.qsrc

@@ -220,6 +220,10 @@ cheer[1] = 1 & cheer[2] = 2 & cheer[3] = 4 & cheer[4] = -1
 pcs_musicprod = (musicprod_lvl + (pcs_intel + pcs_prcptn + pcs_sprt) / 3) / 2
 musicprod[1] = 5 & musicprod[2] = 3 & musicprod[3] = 7 & musicprod[4] = -1
 
+!!Songwriting: Writing songs, composing music - the knowledge of how build and structure the elements.
+pcs_songwrit = (songwrit_lvl + (pcs_intel + pcs_sprt) / 2) / 2
+songwrit[1] = 5 & songwrit[2] = 3 & songwrit[3] = mu-1
+
 !!Skiing; Should be self-explanatory
 !!To add this skill, copy this "$skl_name[x] = 'skng'" to the end of the skils list above and replace the x with the next index number, then remove the comment and bracket marks on the next two lines and delete this line
 !!pcs_skng = (skng_lvl + (2 * pcs_agil + pcs_stren) / 3) / 2

+ 3 - 2
locations/uni_dorm.qsrc

@@ -22,7 +22,6 @@ if $ARGS[0] = 'start':
 	end
 
 	if func('homes_properties', 'can_live_here') or university['student'] = 1:
-	univ
 		act 'Show her your student ID':
 			*clr & cla
 			'<center><img <<$set_imgh>> src="images/locations/city/island/university/dorm/dorm.jpg"></center>'
@@ -652,7 +651,9 @@ if $ARGS[0] = 'dorm_room':
 	if func('homes_properties', 'is_current_home') ! -1:
 		act 'Set this dorm room as your main home':gs 'homes_properties', 'set_home' & gt 'uni_dorm', 'dorm_room'
 	end
-	if $home['current'] = 'university_dorm': gs 'music_actions', 'music_icon'
+	!! Removed the check to see if Sveta has access to the place as the check happens before Sveta reaches 
+	!! this location, at the "Go to your room" actions.
+	gs 'music_actions', 'music_icon'
 end
 
 if $args[0] = 'dorm_kitchen':