Stephan Fuchs 10 meses atrás
pai
commit
58b911a754

+ 3 - 0
sugarcube/src/PassageFooter.tw

@@ -42,6 +42,9 @@
 	<<if _tags.includes('kitchen')>>
 		<<include 'kitchen_generic'>>
 	<</if>>
+	<<if _tags.includes('car')>>
+		<<gs 'VehiclePassages'>>
+	<</if>>
 
 	<<include 'generic_all'>>
 

+ 10 - 1
sugarcube/src/VersionUpdater.js

@@ -13,7 +13,16 @@ setup.versionUpdate = function(fromVersion,variables=null){
     if(fromVersion < 6)
 		variables.events = new setup.Events();
 	if(fromVersion < 7)
-      variables.actions = {};
+		variables.actions = {};
+	if(fromVersion < 9){
+		let inventoryData = clone(variables.inventory._containers);
+		variables.inventory.clear();
+		for(const [containerId, containerData] of Object.entries(inventoryData)){
+			for (const [itemId, itemCount] of Object.entries(containerData)) {
+				variables.inventory.set(itemId,itemCount,containerId);
+			}
+		}
+	}
 
     variables.version = Config.saves.version;
 }

+ 35 - 9
sugarcube/src/actions/act.tw

@@ -62,16 +62,42 @@
 
     <!-- Money Cost -->
     <<if 'cost' in _flags>>
-        <<set _cashCost = _flags.cost.cash>>
-        <<set _label += " (<b>"+Math.abs(_cashCost.toLocaleString())+" ₽</b> Cash)">>
-        <<if Math.abs(_cashCost) > $finances.cash>>
-            <<set _styleClass += ' cost cost_disabled disabled'>>
-            <<set _act_contents = '<<msg "You don\'t have enough cash to perform this action.">>'>>
-        <<else>>
-            <<set _styleClass += ' cost'>>
-            <<if _cashCost > 0>>
-                <<set _act_contents = "<<set $finances.cash -= "+_cashCost+">>" + _act_contents>>
+        <<if _cashCost = _flags.cost.cash>>
+            <<set _label += " (<b>"+Math.abs(_cashCost).toLocaleString()+" ₽</b> Cash)">>
+            <<if Math.abs(_cashCost) > $finances.cash>>
+                <<set _styleClass += ' cost cost_disabled disabled'>>
+                <<set _act_contents = '<<msg "You don\'t have enough cash to perform this action.">>'>>
+            <<else>>
+                <<set _styleClass += ' cost'>>
+                <<if _cashCost > 0>>
+                    <<set _act_contents = "<<set $finances.cash -= "+_cashCost+">>" + _act_contents>>
+                <</if>>
+            <</if>>
+        <<elseif _bankCost = _flags.cost.bank>>
+            <<set _label += " (<b>"+Math.abs(_bankCost).toLocaleString()+" ₽</b> from Bank Account)">>
+            <<if !$finances.hasBankAccount>>
+                <<set _styleClass += ' cost cost_disabled disabled'>>
+                <<set _act_contents = '<<msg "You don\'t have a bank account.">>'>>
+            <<elseif Math.abs(_bankCost) > $finances.bankAvailable>>
+                <<set _styleClass += ' cost cost_disabled disabled'>>
+                <<set _act_contents = '<<msg "You don\'t have enough money on your bank account to perform this action.">>'>>
+            <<else>>
+                <<set _styleClass += ' cost'>>
+                <<if _bankCost > 0>>
+                    <<set _act_contents = "<<set $finances.bank -= "+_bankCost+">>" + _act_contents>>
+                <</if>>
             <</if>>
+        <<elseif _flags.cost.both>>
+            <<set _flagsOfCashButton = clone(_flags)>>
+            <<set _flagsOfCashButton.cost = {cash: _flags.cost.both}>>
+            <<set _contentsOfCashButton  = clone(_contents)>>
+            <<set _flagsOfBankButton = clone(_flags)>>
+            <<set _flagsOfBankButton.cost = {bank: _flags.cost.both}>>
+            <<set _contentsOfBankButton  = clone(_contents)>>
+
+            <<act _args[0] _args[1] _flagsOfCashButton>>_contentsOfCashButton<</act>>
+            <<act _args[0] _args[1] _flagsOfBankButton>>_contentsOfBankButton<</act>>
+            <<set _skipButton = true>>
         <</if>>
     <</if>>
 

+ 82 - 190
sugarcube/src/autogenerated/unsorted/autosalonF.tw

@@ -1,60 +1,73 @@
-:: autosalonF
-<<set $here = 'autosalonF'>>
-<<set $ARGS = $location_var[$here]>>
-<<if $location_var[$here][0] == 'start'>>
-	<<set $loc_arg = $location_var[$here][0]>>
-	<<set $loc = 'autosalonF'>>
-	<<set $location_type = 'event'>>
-	<<set $menu_off = 1>>
-	 	<<set $time.minutes += 5>>
-	<center><b>Car Dealership</b></center>
+:: carDealerScripts[script]
+setup.items ??= {};
+setup.items.carLADAKalina	= {type:'car',speed:6,label:'LADA Kalina',price:535800		,imageExterior:"pc/items/accessories/car/car6.jpg",imageInterior:"pc/items/accessories/car/salon6.jpg"};
+setup.items.carLADAVestar	= {type:'car',speed:6,label:'LADA Vesta',price:645000		,imageExterior:"pc/items/accessories/car/car7.jpg",imageInterior:"pc/items/accessories/car/salon7.jpg"};
+setup.items.carChevrolet		= {type:'car',speed:6,label:'Chevrolet NIVA',price:625000	,imageExterior:"pc/items/accessories/car/car8.jpg",imageInterior:"pc/items/accessories/car/salon8.jpg"};
+setup.items.carUAZHunter		= {type:'car',speed:6,label:'UAZ HUNTER',price:600000		,imageExterior:"pc/items/accessories/car/car9.jpg",imageInterior:"pc/items/accessories/car/salon9.jpg"};
+setup.items.carUAZPatriot	= {type:'car',speed:6,label:'UAZ Patriot',price:760000		,imageExterior:"pc/items/accessories/car/car10.jpg",imageInterior:"pc/items/accessories/car/salon10.jpg"};
+setup.items.carFordFocus		= {type:'car',speed:6,label:'Ford Focus',price:884000		,imageExterior:"pc/items/accessories/car/car13.jpg",imageInterior:"pc/items/accessories/car/salon13.jpg"};
+setup.items.carRenaultLOGAN	= {type:'car',speed:6,label:'Renault LOGAN',price:649990	,imageExterior:"pc/items/accessories/car/car102.jpg",imageInterior:"pc/items/accessories/car/salon102.jpg"};
+setup.items.carFordMondeo	= {type:'car',speed:6,label:'Ford Mondeo',price:1329000		,imageExterior:"pc/items/accessories/car/car110.jpg",imageInterior:"pc/items/accessories/car/salon110.jpg"};
+setup.items.carToyotaCamry	= {type:'car',speed:6,label:'Toyota Camry',price:1484000	,imageExterior:"pc/items/accessories/car/car104.jpg",imageInterior:"pc/items/accessories/car/salon104.jpg"};
+setup.items.carMitsubishiL200= {type:'car',speed:6,label:'Mitsubishi L200',price:1749990	,imageExterior:"pc/items/accessories/car/car95.jpg",imageInterior:"pc/items/accessories/car/salon95.jpg"};
+setup.items.carToyotaCorolla = {type:'car',speed:6,label:'Toyota Corolla',price:1097000	,imageExterior:"pc/items/accessories/car/car103.jpg",imageInterior:"pc/items/accessories/car/salon103.jpg"};
+setup.items.carMazda6		= {type:'car',speed:6,label:'Mazda 6',price:1299700			,imageExterior:"pc/items/accessories/car/car105.jpg",imageInterior:"pc/items/accessories/car/salon105.jpg"};
+setup.items.carMercedesE		= {type:'car',speed:6,label:'Mercedes-Benz E-Class',price:2950000,imageExterior:"pc/items/accessories/car/car106.jpg",imageInterior:"pc/items/accessories/car/salon106.jpg"};
+setup.items.carAudiA6		= {type:'car',speed:6,label:'Audi A6',price:2914000			,imageExterior:"pc/items/accessories/car/car109.jpg",imageInterior:"pc/items/accessories/car/salon109.jpg"};
+setup.items.carLexusRX350	= {type:'car',speed:6,label:'Lexus RX 350',price:3374000	,imageExterior:"pc/items/accessories/car/car97.jpg",imageInterior:"pc/items/accessories/car/salon97.jpg"};
+setup.items.carBMW3			= {type:'car',speed:6,label:'BMW 3-Seria',price:2721000		,imageExterior:"pc/items/accessories/car/car101.jpg",imageInterior:"pc/items/accessories/car/salon101.jpg"};
+setup.items.carBMWM5			= {type:'car',speed:6,label:'BMW M5',price:7000000			,imageExterior:"pc/items/accessories/car/car107.jpg",imageInterior:"pc/items/accessories/car/salon107.jpg"};
+setup.items.carBMWX6			= {type:'car',speed:6,label:'BMW X6',price:5366000			,imageExterior:"pc/items/accessories/car/car99.jpg",imageInterior:"pc/items/accessories/car/salon99.jpg"};
+setup.items.carAudiQ7		= {type:'car',speed:6,label:'Audi Q7',price:5000000			,imageExterior:"pc/items/accessories/car/car96.jpg",imageInterior:"pc/items/accessories/car/salon96.jpg"};
+setup.items.carPorscheCayenne= {type:'car',speed:6,label:'Porsche Cayenne',price:5500000	,imageExterior:"pc/items/accessories/car/car98.jpg",imageInterior:"pc/items/accessories/car/salon98.jpg"};
+setup.items.carJaguarXJ		= {type:'car',speed:6,label:'Jaguar XJ',price:6500000		,imageExterior:"pc/items/accessories/car/car108.jpg",imageInterior:"pc/items/accessories/car/salon108.jpg"};
+setup.items.carMercedesS		= {type:'car',speed:6,label:'Mercedes-Benz S-Class',price:7600000,imageExterior:"pc/items/accessories/car/car100.jpg",imageInterior:"pc/items/accessories/car/salon100.jpg"};
+setup.items.carBentleyContinental= {type:'car',speed:6,label:'Bentley Continental GT',price:13000000,imageExterior:"pc/items/accessories/car/car111.jpg",imageInterior:"pc/items/accessories/car/salon111.jpg"};
+setup.items.carFerrari458	= {type:'car',speed:6,label:'Ferrari 458 Italia',price:14000000,imageExterior:"pc/items/accessories/car/car112.jpg",imageInterior:"pc/items/accessories/car/salon112.jpg"};
+
+
+:: carDealerNewCars[public indoors]
+	<h2>Car Dealership - New Vehicles</h2>
 	<<image "locations/city/industrial/cardealer/manager.jpg">>
-	$nl
-	<b><center>Vehicles for sale, all brand new</center></b>
-	$nl
-	<<set $car_table = '<center><table border=0>'>>
-	<<set $car_table += '<TH>Car</TH><TH></TH><TH>Price in <b>₽</b></TH>'>>
-	<<set $car_table += '<TR><TD><<link "LADA Kalina">><</link>>.</TD><TD> - </TD><TD> 535,800 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "LADA Vesta">><</link>>.</TD><TD> - </TD><TD> 645,000 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "Chevrolet NIVA">><</link>>.</TD><TD> - </TD><TD> 625,000 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "UAZ HUNTER">><</link>>.</TD><TD> - </TD><TD> 600,000 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "UAZ Patriot">><</link>>.</TD><TD> - </TD><TD> 760,000 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "Ford Focus">><</link>>.</TD><TD> - </TD><TD> 884,000 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "Renault LOGAN">><</link>>.</TD><TD> - </TD><TD> 649,990 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "Ford Mondeo">><</link>>.</TD><TD> - </TD><TD> 1,329,000 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "Toyota Camry">><</link>>.</TD><TD> - </TD><TD> 1,484,000 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "Mitsubishi L200">><</link>>.</TD><TD> - </TD><TD> 1,749,990 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "Toyota Corolla">><</link>>.</TD><TD> - </TD><TD> 1,097,000 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "Mazda 6">><</link>>.</TD><TD> - </TD><TD> 1,299,700 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "Mercedes-Benz E-Class">><</link>>.</TD><TD> - </TD><TD> 2,950,000 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "Audi A6">><</link>>.</TD><TD> - </TD><TD> 2,914,000 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "Lexus RX 350">><</link>>.</TD><TD> - </TD><TD> 3,374,000 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "BMW 3-Seria">><</link>>.</TD><TD> - </TD><TD> 2,721,000 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "BMW M5">><</link>>.</TD><TD> - </TD><TD> 7,000,000 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "BMW X6">><</link>>.</TD><TD> - </TD><TD> 5,366,000 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "Audi Q7">><</link>>.</TD><TD> - </TD><TD> 5,000,000 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "Porsche Cayenne">><</link>>.</TD><TD> - </TD><TD> Price: 5,500,000 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "Jaguar XJ">><</link>>.</TD><TD> - </TD><TD> 6,500,000 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "Mercedes-Benz S-Class">><</link>>.</TD><TD> - </TD><TD> 7,600,000 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "Bentley Continental GT">><</link>>.</TD><TD> - </TD><TD> 13,000,000 <b>₽</b> </TD>'>>
-	<<set $car_table += '<TR><TD><<link "Ferrari 458 Italia">><</link>>.</TD><TD> - </TD><TD> 14,000,000 <b>₽</b> </TD>'>>
-	<<set $car_table += '</table></center>'>>
-	$car_table
-	<<actCLA 'Talk to the manager'>>
+
+	<div class="itemsOverview vehicles">
+		<<for _vehicleId, _vehicleData range setup.items>>
+			<<if _vehicleData.type != 'car'>>
+				<<continue>>
+			<</if>>
+			<<capture _vehicleId>>
+			<div class="item linkedImage">
+				<<image _vehicleData.imageExterior>>
+				<<link `_vehicleData.price.toLocaleString()+' ₽'`>>
+					<<gt 'carDealerDetails' `_vehicleId`>>
+				<</link>>
+			</div>
+			<</capture>>
+		<</for>>
+	</div>
+
+	/*<<actCLA 'Talk to the manager'>>
 		<<gt 'autosalonF' 'manager1'>>
 	<</actCLA>>
 	<<actCLA 'Return'>>
 		<<gt 'autotraidF' 'start'>>
-	<</actCLA>>
-<</if>>
-<<if $location_var[$here][0] == 'manager1'>>
-	<<set $loc_arg = $location_var[$here][0]>>
-	<<set $loc = 'autosalonF'>>
-	<<set $menu_arg = 'manager1'>>
-	<<set $menu_loc = 'autosalonF'>>
-	<<set $menu_off = 0>>
-	 	<<set $time.minutes += 5>>
-	<center><b>Car Dealership</b></center>
+	<</actCLA>>*/
+
+:: carDealerDetails[event]
+	<<addtime 5>>
+	<<ret>>
+	<<set _vehicleId = $location_var[$here][0]>>
+	<<set _vehicleData = setup.items[_vehicleId]>>
+	<h2>_vehicleData.label</h2>
+	<<image _vehicleData.imageExterior>>
+	<<image _vehicleData.imageInterior>>
+	<<act 'Buy' undefined `{cost:{both:_vehicleData.price}}`>>
+		<<run $inventory.set(_vehicleId,1,'vehicles',{'minutesDriven':0,'gas':240})>>
+		<<gt 'carDealerCarBought' _vehicleId>>
+	<</act>>
+
+
+	/*<center><b>Car Dealership</b></center>
 	<<image "locations/city/industrial/cardealer/manager.jpg">>
 	<p>You have karta <b>₽</b> in your bank account.</p>
 	The manager smiles affably and explains routinely what is required to purchase a car: A driver''s license and the sum, in full, in your bank account.
@@ -62,142 +75,21 @@
 	<<actCLA 'Leave'>>
 		<<gt 'city_industrial'>>
 	<</actCLA>>
-	<<if getvar("$prava") == 1>>
-		<<if $finances.bankAvailable >= 535800>>
-			<<actCLA 'Buy a LADA Kalina (535,800 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 535800 'LADA Kalina' 6 400>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 645000>>
-			<<actCLA 'Buy a LADA Vesta (645,000 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 645000 'LADA Vesta' 7 450>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 625000>>
-			<<actCLA 'Buy a Chevrolet Niva (625,000 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 625000 'Chevrolet NIVA' 8 500>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 600000>>
-			<<actCLA 'Buy a UAZ Hunter (600,000 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 600000 'UAZ HUNTER' 9 300>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 760000>>
-			<<actCLA 'Buy a UAZ Patriot (760,000 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 760000 'UAZ Patriot' 10 400>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 884000>>
-			<<actCLA 'Buy a Ford Focus (884,000 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 884000 'Ford Focus' 13 800>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 649990>>
-			<<actCLA 'Buy a Renault LOGAN (649,990 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 649990 'Renault LOGAN' 102 1000>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 1329000>>
-			<<actCLA 'Buy a Ford Mondeo (1,329,000 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 1329000 'Ford Mondeo' 110 2000>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 1484000>>
-			<<actCLA 'Buy a Toyota Camry (1,484,000 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 1484000 'Toyota Camry' 104 3000>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 1749990>>
-			<<actCLA 'Buy a Mitsubishi L200 (1,749,990 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 1749990 'Mitsubishi L200' 95 2000>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 1097000>>
-			<<actCLA 'Buy a Toyota Corolla (1,097,000 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 1097000 'Toyota Corolla' 103 3000>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 1299700>>
-			<<actCLA 'Buy a Mazda 6 (1,299,700 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 1299700 'Mazda 6' 105 3000>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 2950000>>
-			<<actCLA 'Buy a Mercedes-Benz E-Class (2,950,000 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 2950000 'Mercedes-Benz E-Class' 106 5000>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 2914000>>
-			<<actCLA 'Buy an Audi A6 (2,914,000 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 2914000 'Audi A6' 109 5000>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 3374000>>
-			<<actCLA 'Buy a Lexus RX 350(3,374,000 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 3374000 'Lexus RX 350' 97 4000>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 2721000>>
-			<<actCLA 'Buy a BMW 3-Seria (2,721,000 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 2721000 'BMW 3-Seria' 101 4000>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 7000000>>
-			<<actCLA 'Buy a BMW M5 (7,000,000 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 7000000 'BMW M5' 107 6000>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 5366000>>
-			<<actCLA 'Buy a BMW X6 (5,366,000 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 5366000 'BMW X6' 99 4000>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 5000000>>
-			<<actCLA 'Buy an Audi Q7 (5,000,000 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 5000000 'Audi Q7' 96 5000>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 5500000>>
-			<<actCLA 'Buy a Porsche Cayenne (5,500,000 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 5500000 'Porsche Cayenne' 98 3000>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 6500000>>
-			<<actCLA 'Buy a Jaguar XJ (6,500,000 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 6500000 'Jaguar XJ' 108 4000>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 7600000>>
-			<<actCLA 'Buy a Mercedes-Benz S-Class (7,600,000 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 7600000 'Mercedes-Benz S-Class' 100 8000>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 13000000>>
-			<<actCLA 'Buy a Bentley Continental GT (13,000,000 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 13000000 'Bentley Continental GT' 111 8000>>
-			<</actCLA>>
-		<</if>>
-		<<if $finances.bankAvailable >= 14000000>>
-			<<actCLA 'Buy a Ferrari 458 Italia (14,000,000 <b>₽</b>)'>>
-				<<gt 'autosalonF' 'buy' 14000000 'Ferrari 458 Italia' 112 10000>>
-			<</actCLA>>
-		<</if>>
-	<</if>>
-<</if>>
-<<if $location_var[$here][0] == 'buy'>>
-	 	<<set $menu_off = 1>>
-	<<set $finances.bank -= $ARGS[1]>>
-	<<set $car = $location_var[$here][2]>>
-	<<set $car = $ARGS[3]>>
-	<<set $benz = 3>>
-	<<set $cardrive = 9>>
-	<<setinit $car['new_condition'] = $ARGS[4]>>
-	<<setinit $car['current_condition'] = $ARGS[4]>>
-	<<set $wrek = 0>>
-	<p>The manager draws up a purchasing contract, and you inform the bank of the impending transaction. Once the bank has confirmed the write-off, the manager hands you the key to your new car.</p>
-	"It's waiting for you outside," he says. "The fuel tank is almost empty though, so you should stop by the gas station right away."
-	<<actCLA 'Leave'>>
+	<<if getvar("$prava") == 1>>*/
+
+:: carDealerCarBought[event]
+	<<addtime 30>>
+	<<set _vehicleId = $location_var[$here][0]>>
+	<<set _vehicleData = setup.items[_vehicleId]>>
+	<h2>_vehicleData.label</h2>
+	<<image _vehicleData.imageExterior>>
+	<p>
+		The salesman extends his hand in congratulations and expresses his genuine excitement for your new car purchase.
+		His voice is filled with enthusiasm as his says, "Congratulations! We are thrilled for you and your new car! It's a fantastic choice.".
+		He hands you the keys to your new car and explains to you all you need to know about its technical details.
+	</p>
+	<<act 'Drive off'>>
+		<<addtime 5>>
+		<<useVehicle _vehicleId>>
 		<<gt 'city_industrial'>>
-	<</actCLA>>
-<</if>>
+	<</act>>

+ 35 - 49
sugarcube/src/autogenerated/unsorted/autotraidF.tw

@@ -1,19 +1,17 @@
-:: autotraidF
-<<set $here = 'autotraidF'>>
-<<set $ARGS = $location_var[$here]>>
-<!-- !2021/04/26-->
-<<if $location_var[$here][0] == 'start'>>
-	<<set $loc_arg = $location_var[$here][0]>>
-	<<set $loc = 'autotraidF'>>
-	<<set $location_type = 'event'>>
-	<<set $menu_arg = 'start'>>
-	<<set $menu_loc = 'autotraidF'>>
-	<<set $menu_off = 0>>
-	<center><b>Car Dealership</b></center>
+:: autotraidF[public indoors]
+	<h2>Car Dealership</h2>
 	<<image "locations/city/industrial/UsedCar/autotraid.jpg">>
-	Upon entering the yard, you see a laminated piece of paper pinned to a wall near the entrance:
-	<p>- We only sell to people with valid driver's licenses.</p>
-	<p>- New State law: No sale if you already own a car.</p>
+	<p>
+		The car dealer yard is a sprawling area designated for showcasing and selling automobiles.
+		As you step into the yard, you are greeted by rows upon rows of vehicles, neatly arranged.
+		The yard is meticulously organized, with each section designated for specific types of cars, such as sedans, SUVs, trucks, and sports cars.
+	</p>
+	<p>
+		In addition to the cars on display, the dealer yard also features a showroom building nearby.
+		The showroom serves as a central hub for customer inquiries, paperwork, and negotiations.
+		Inside, you can find comfortable seating areas, information desks, and displays showcasing additional vehicle features, accessories, and promotional materials.
+	</p>
+
 	<!-- FAILED TO CONVERT
 		if car > 0 and cardrive = 9:'Your <a href="exec:gs ''carF'', ''start''"><<$car>></a> is parked just inside.'
 	-----
@@ -24,39 +22,30 @@
 	<<set ERROR: FAILED TO CONVERT LITERAL: """'Your <a href""" = ERROR: FAILED TO CONVERT LITERAL: """"exec:gs ''carF''""" , ERROR: FAILED TO CONVERT LITERAL: """''start''">$car<""" / ERROR: FAILED TO CONVERT LITERAL: """a> is parked just inside.'""">>
 
 -->
-<<warn "CONVERSION ERROR 27690e5806e185b70014dfd1618762c1">>
-
-	<</if>>
+	<<ConnectedLocation 'Leave' 'city_industrial' '' 'locations/city/industrial/nord.jpg' 5>>
 
-	-->
-	<<warn "CONVERSION ERROR 09d00d9a98324f8ddae8150648fd42cc">>
-	<<actCLA 'Leave'>>
-		<<set $time.minutes += 5>> <<gt 'city_industrial'>>
-	<</actCLA>>
-	<<if func('autotraidF', 'is_open')>>
-		<<if getvar("$car") > 0>>
+	<<if func('carDealerFunctions', 'is_open')>>
+		/*<<if getvar("$car") > 0>>
 			<<actCLA 'Ask about selling your car'>>
-	<<gt 'autotraidF' 'manager1'>>
-<</actCLA>>
+				<<gt 'autotraidF' 'manager1'>>
+			<</actCLA>>
 
-		<</if>>
+		<</if>>*/
 		<<actCLA 'Look at the new cars for sale'>>
-			<<gt 'autosalonF' 'start'>>
-		<</actCLA>>
-		<<actCLA 'Look at the used cars for sale'>>
-			<<gt 'autotraidF' 'car'>>
+			<<gt 'carDealerNewCars'>>
 		<</actCLA>>
+		/*<<actCLA 'Look at the used cars for sale'>>
+			<<gt 'carDealerUsedCars'>>
+		<</actCLA>>*/
+	<<else>>
+		<p>The dealership is closing its' gates for today and you are asked to leave.</p>
 	<</if>>
-<</if>>
-<<if $location_var[$here][0] == 'is_open'>>
-	<!-- FAILED TO CONVERT
-		RESULT = hour >= 9 and hour < 18 and week > 1
-	-----
-		<<set $result = ERROR: FAILED TO CONVERT LITERAL: """hour >= 9 and hour < 18 and week > 1""">>
-
-	-->
-	<<warn "CONVERSION ERROR b6f0dbb493a3f3ccaccd5e00d15a59e9">>
-<</if>>
+:: carDealerFunctions[functions]
+<<switch $location_var[$here][0]>>
+	<<case 'is_open'>>
+		<<set $result = ($time.hour >= 9 && $time.hour < 18 && $time.weekday > 1)>>
+<</switch>>
+/*:: manager
 <<if $location_var[$here][0] == 'manager1'>>
 	<<set $loc_arg = $location_var[$here][0]>>
 	<<set $loc = 'autotraidF'>>
@@ -101,13 +90,9 @@
 			<</actCLA>>
 		<</if>>
 	<</if>>
-<</if>>
-<<if $location_var[$here][0] == 'car'>>
-	<<set $loc_arg = $location_var[$here][0]>>
-	<<set $loc = 'autotraidF'>>
-	<<set $menu_arg = 'car'>>
-	<<set $menu_loc = 'autotraidF'>>
-	<<set $menu_off = 0>>
+<</if>> */
+/*:: carDealerUsedCars
+
 	<<set $time.minutes += 5>>
 	<<set $carT = 0>>
 	<center><b>Used Car Dealership</b></center>
@@ -211,3 +196,4 @@
 		<</actCLA>>
 	<</if>>
 <</if>>
+ */

+ 1 - 1
sugarcube/src/autogenerated/unsorted/zaprF.tw

@@ -1,4 +1,4 @@
-:: zaprF[outdoors public]
+:: zaprF[outdoors public car]
 
 	<h2>Gas Station</h2>
 	<<imageDayNight "locations/shared/gas/gazprom_#.jpg" "day" "night">>

+ 45 - 8
sugarcube/src/items/Inventory.js

@@ -3,23 +3,35 @@ setup.items['umbrella'] = {limit: 1};
 
 class Inventory{
 
+	
+	_containers = {'default':{}}
+
+	clear(){
+		this._containers = {'default':{}};
+	}
 
-    _containers = {'default':{}}
 	// ----- Common Functions -----
 	dec(item,count=1,container='default'){
 		this.inc(item,count * -1,container);
 	}
+	/**
+	 * 
+	 * @param {string} item  The ID of the item
+	 * @param {string} container  The container
+	 * @returns {number} The number of items of the type item in the container
+	 */
     get(item,container='default'){
-        return this._containers?.[container]?.[item] || 0;
+        return this._containers?.[container]?.[item]?.count || 0;
     }
     inc(item,count=1,container='default'){
         let current = this.get(item,container);
         this.set(item,current+count);
     }
-    set(item,count=1,container='default'){
-        if(!(container in this._containers))
-            this._containers[container] = {};
-		this._containers[container][item] = Math.max(0,count);
+    set(item,count=1,container='default',metadata=undefined){
+		this._containers[container] ??= {}
+		this._containers[container][item] = {count: Math.max(0,count)};
+		if(metadata)
+			this.metadataSet(item,container,metadata);
     }
 
 	itemsInContainer(container='default'){
@@ -30,7 +42,8 @@ class Inventory{
 	itemsInContainerByMetadata(filters,container='default',includeZeroCount=true){
 		let result = {};
 		let itemsInContainer = this.itemsInContainer(container);
-		itemLoop: for (const [itemId, count] of Object.entries(itemsInContainer)) {
+		itemLoop: for (const [itemId, itemData] of Object.entries(itemsInContainer)) {
+			let count = this.get(itemId,container);
 			if(!includeZeroCount && !count)
 				continue;
 			let metadata = this.metadata(itemId);
@@ -43,12 +56,36 @@ class Inventory{
 		return result;
 	}
 
-	metadata(item){
+	metadata(item,container='default'){
+		return Object.assign({},this.metadataConst(item),this.metadataDynamic(item,container));
+	}
+
+	/**
+	 * Returns contant metadata from setup.
+	 * @param {string} item ItemId
+	 * @returns {object}
+	 */
+	metadataConst(item){
 		let metadata = setup.items[item] ?? {};
 		metadata.label ??= item;
 		return metadata;
 	}
 
+	metadataDynamic(item,container='default'){
+		return this._containers?.[container]?.[item]?.data ?? {};
+	}
+
+	metadataSet(item,container='default',data){
+		this._containers[container] ??= {};
+		this._containers[container][item] ??= {count:1};
+		this._containers[container][item].data = data;
+	}
+
+	metadataUpdate(item,container='default',data){
+		let newData = Object.assign({},this.metadataDynamic(item,container),data);
+		this.metadataSet(item,container,newData);
+	}
+
 	_init(Inventory){
 		Object.keys(Inventory).forEach(function (pn) {
 			this[pn] = clone(Inventory[pn]);

+ 27 - 2
sugarcube/src/items/Purse.tw

@@ -6,6 +6,31 @@
 	<<else>>
 		<p>You are carrying your items in your pockets.</p>
 	<</if>>
-	<<for _key, _count range $inventory.itemsInContainer()>>
-		<p>_key: _count</p>
+	<<for _key, _data range $inventory.itemsInContainer()>>
+		<p>_key: _data.count</p>
 	<</for>>
+
+	<<set _ownedCars =  $inventory.itemsInContainerByMetadata({type:'car'},'vehicles',false)>>
+	<<if !jQuery.isEmptyObject(_ownedCars)>>
+		<h2>Cars</h2>
+		You own the following cars:
+		<<for _carId, _carCount range _ownedCars>>
+			<<set _carData = $inventory.metadata(_carId,'vehicles')>>
+			<div>
+				_carData.label:
+				<<if _carId == $pc.vehicleInUse>>
+					You are driving this car.
+				<<else>>
+					You remember it being parked
+					<<switch _carData.parkedAt>>
+						<<case 'pav_complex'>>
+							near your parents apartment.
+						<<case 'city_industrial'>>
+							in the cities industrial district.
+						<<default>>
+							somewhere.
+					<</switch>>
+				<</if>>
+			</div>
+		<</for>>
+	<</if>>

+ 29 - 0
sugarcube/src/items/Vehicles.tw

@@ -0,0 +1,29 @@
+:: VehiclesWidgets[widget]
+<<widget 'leaveVehicle'>>
+	<<run $inventory.metadataUpdate($pc.vehicleInUse,'vehicles',{parkedAt:$location.passage})>>
+	<<set $pc.vehicleInUse = null>>
+<</widget>>
+<<widget 'useVehicle'>>
+    <<set $pc.vehicleInUse = _args[0]>>
+<</widget>>
+
+:: VehiclePassages[include]
+    <<switch $pc.vehicleType>>
+		<<case 'car'>>
+            <<act 'Park your car here'>>
+                <<addtime 3>>
+				<<leaveVehicle>>
+                <<gt $location>>
+            <</act>>
+        <<case 'walk'>>
+            <<for _carId, _carCount range $inventory.itemsInContainerByMetadata({type:'car'},'vehicles',false)>>
+                <<set _carMetaData = $inventory.metadata(_carId,'vehicles')>>
+				<<if _carMetaData.parkedAt == $location.passage>>
+					<<act `'Drive your '+_carMetaData.label` undefined `{capture:['_carId']}`>>
+						<<addtime 3>>
+						<<useVehicle _carId>>
+						<<gt $location>>
+					<</act>>
+				<</if>>
+            <</for>>
+    <</switch>>

+ 2 - 0
sugarcube/src/locations/city/city_center.tw

@@ -1,4 +1,6 @@
 :: city_center[hasEvents outdoors public car region_city]
+	<<ConnectedLocation 'Industrial Area' 'city_industrial' '' 'locations/city/industrial/nord.jpg' 120 `{allowedVehicles:['car']}`>>
+	<<ConnectedLocation 'Pavlovsk' 'pav_commercial' '' 'locations/pavlovsk/gorodok.jpg' 300 `{allowedVehicles:['car']}`>>
 	<h2>St. Petersburg - City Center</h2>
 	<<if $time.isWinter>>
 		<<imageDayNight "#" "locations/city/citycenter/downw.jpg" "locations/city/citycenter/downwn.jpg">>

+ 3 - 1
sugarcube/src/locations/city/city_industrial.tw

@@ -1,4 +1,4 @@
-:: city_industrial[outdoors public region_city]
+:: city_industrial[outdoors public region_city car]
 	/*<!-- !call random events from [$street_events], and display them before show location.-->
 	<<if $streetevent_hour + 2 < $time.hour>>
 		<<gt 'street_event' 'city_industrial' 'main'>>
@@ -11,6 +11,8 @@
 		<<imageDayNight "locations/city/industrial/nord#.jpg" "" "2">>
 	<</if>>
 	/*<<gs 'street_event' 'city_industrial' 'extras'>>*/
+	<<ConnectedLocation 'City Center' 'city_center' '' 'locations/city/citycenter/down.jpg' 120 `{allowedVehicles:['car']}`>>
+	<<ConnectedLocation 'Pavlovsk' 'pav_commercial' '' 'locations/pavlovsk/gorodok.jpg' 240 `{allowedVehicles:['car']}`>>
 	<<ConnectedLocation 'Highway' 'road' 0 'locations/highway/road.jpg' 15>>
 	<<ConnectedLocation 'Red Light District' 'city_redlight' '' 'locations/city/redlight/redlight.jpg' 5>>
 	<<ConnectedLocation 'Central Park' 'city_park' 'start' 'locations/city/centralpark/park.jpg' 60>>

+ 1 - 1
sugarcube/src/locations/city/city_train.tw

@@ -1,4 +1,4 @@
-:: city_train[public indoors car region_city]
+:: city_train[public indoors region_city]
 	<h2>St. Petersburg - Central Station</h2>
 	<<image "locations/city/shared/trainstation/central_station_inside.jpg">>
 	<p>

+ 6 - 6
sugarcube/src/locations/pavlov/pav_commercial.tw

@@ -1,4 +1,7 @@
 :: pav_commercial[outdoors public car region_pav]
+
+<<ConnectedLocation 'Industrial Area' 'city_industrial' '' 'locations/city/industrial/nord.jpg' 240 `{allowedVehicles:['car']}`>>
+<<ConnectedLocation 'City Center' 'city_center' '' 'locations/city/citycenter/down.jpg' 300 `{allowedVehicles:['car']}`>>
 <h2>Pavlovsk</h2>
 <<if $time.isWinter>>
 	<<imageDayNight "locations/pavlovsk/#.jpg" "gorodokw" "pavbuswn">>
@@ -6,12 +9,9 @@
 	<<imageDayNight "locations/pavlovsk/#.jpg" "gorodok" "pavbusn">>
 <</if>>
 
-<<ConnectedLocationCode "Church" 'locations/pavlovsk/church/st-nikolas.jpg' 10>>
-	<<gt  'pav_church' 'start'>>
-<</ConnectedLocationCode>>
-<<ConnectedLocationCode 'Public Park' 'locations/pavlovsk/park/skver.jpg' 5>>
-	<<gt 'pav_park'  'start'>>
-<</ConnectedLocationCode>>
+<<ConnectedLocation "Church" 'pav_church' 'start' 'locations/pavlovsk/church/st-nikolas.jpg' 10>>
+<<ConnectedLocation 'Public Park' 'pav_park' 'start' 'locations/pavlovsk/park/skver.jpg' 5>>
+
 <p>
 	Pavlovsk can be split into four regions, the commercial hub here, the residential suburbs,
 	the industrial region and the Five Eight estate of Soviet era apartment blocks.

+ 1 - 1
sugarcube/src/locations/pavlov/residential/pav_complex.tw

@@ -30,7 +30,7 @@
 		Located in the old part of Pavlovsk, these Soviet era apartment blocks are the Five Eight Estate. Your family's apartment is on the second floor of the nearest building
 		<<if $housing.hasAccess('parents_home')>>
 			.
-			<<ConnectedLocationCode 'Home (Parents)' "locations/pavlovsk/resident/apartment/complex.jpg" 5 `{priority:10000,hotkeys:['H']}`>>
+			<<ConnectedLocationCode 'Home (Parents)' "locations/pavlovsk/resident/apartment/complex.jpg" 5 `{priority:10000,hotkeys:['H'],allowedVehicles:['walk']}`>>
 				<<set $pavhome_enter = 1>> <<gt 'korrPar'>>
 			<</ConnectedLocationCode>>
 		<<else>>

+ 6 - 0
sugarcube/src/macros/0macros.twee-config.json

@@ -204,6 +204,12 @@
 					"text"
 				]
 			},
+			"leaveVehicle":{},
+			"useVehicle":{
+				"parameters": [
+					"text"
+				]
+			},
 
 			"randomSeed":{
 				"container":true,

+ 58 - 30
sugarcube/src/macros/location.tw

@@ -1,11 +1,10 @@
 :: LocationMacros[widget]
 <!-- USAGE EXAMPLE: <<ConnectedLocation 'Exit the room' 'korrPar' '' 'locations/pavlovsk/resident/apartment/home/korrPar.webp' 1 >> -->
 <<widget 'ConnectedLocation'>>
-    <<run console.log("ConnectedLocation",_args)>>
+    <<set _skipConnectedLocation = false>>
     <<set _label to _args[0]>>
     <<set _passage to _args[1]>>
     <<set _passageArg to _args[2]>>
-
     <<set _image to _args[3]>>
     <<set _duration to _args[4]>>
 
@@ -23,24 +22,39 @@
         <<if _additionalSettings.hotkeys>>
             <<set _hotkeys = _additionalSettings.hotkeys>>
         <</if>>
+		<<if _allowedVehicles = _additionalSettings.allowedVehicles>>
+			<<if !_allowedVehicles.includes($pc.vehicleType)>>
+				<<set _skipConnectedLocation = true>>
+			<</if>>
+		<</if>>
     <</if>>
 
     <<set _myPassage = passage()>>
 
-    <<if !$connectedLocations>><<set $connectedLocations = []>><</if>>
-    <<set _connectedLocationData = {
-        forPassage : _myPassage,
-        targetPassage: _passage,
-        targetArguments: _passageArg,
-        label: _label,
-        image: _image,
-        duration: _duration,
-        class: _class,
-        priority: _priority,
-        content: '',
-        hotkeys:_hotkeys
-    }>>
-    <<run $connectedLocations.push(_connectedLocationData)>>
+	<<switch $pc.vehicleType>>
+		<<case 'car'>>
+			<<set _duration = Math.ceil(_duration / $pc.vehicleSpeed)>>
+			<<if !tags(_passage).includes('car')>>
+				<<set _skipConnectedLocation = true>>
+			<</if>>
+	<</switch>>
+
+	<<if !_skipConnectedLocation>>
+		<<if !$connectedLocations>><<set $connectedLocations = []>><</if>>
+		<<set _connectedLocationData = {
+			forPassage : _myPassage,
+			targetPassage: _passage,
+			targetArguments: _passageArg,
+			label: _label,
+			image: _image,
+			duration: _duration,
+			class: _class,
+			priority: _priority,
+			content: '',
+			hotkeys:_hotkeys
+		}>>
+		<<run $connectedLocations.push(_connectedLocationData)>>
+	<</if>>
 <</widget>>
 
 <!-- For internal use. Provides nothing but the dom. Should be attached to the right postion by another script (currently PassageDone) -->
@@ -93,23 +107,37 @@
         <<if _additionalSettings.hotkeys>>
             <<set _hotkeys = _additionalSettings.hotkeys>>
         <</if>>
+		<<if _allowedVehicles = _additionalSettings.allowedVehicles>>
+			<<if !_allowedVehicles.includes($pc.vehicleType)>>
+				<<set _skipConnectedLocation = true>>
+			<</if>>
+		<</if>>
     <</if>>
     <<set _myPassage = passage()>>
 
-    <<if !$connectedLocations>><<set $connectedLocations = []>><</if>>
-    <<set _connectedLocationData = {
-        forPassage : _myPassage,
-        targetPassage: undefined,
-        targetArguments: undefined,
-        label: _label,
-        image: _image,
-        duration: _duration,
-        class: _class,
-        priority: _priority,
-        content: _content,
-        hotkeys: _hotkeys
-    }>>
-    <<run $connectedLocations.push(_connectedLocationData)>>
+	<<switch $pc.vehicleType>>
+		<<case 'car'>>
+			<<set _duration = Math.ceil(_duration / $pc.vehicleSpeed)>>
+	<</switch>>
+
+	<<if !_skipConnectedLocation>>
+
+		<<if !$connectedLocations>><<set $connectedLocations = []>><</if>>
+		<<set _connectedLocationData = {
+			forPassage : _myPassage,
+			targetPassage: undefined,
+			targetArguments: undefined,
+			label: _label,
+			image: _image,
+			duration: _duration,
+			class: _class,
+			priority: _priority,
+			content: _content,
+			hotkeys: _hotkeys
+		}>>
+		<<run $connectedLocations.push(_connectedLocationData)>>
+
+	<</if>>
 
 <</widget>>
 

+ 23 - 0
sugarcube/src/playerCharacter/PlayerCharacter.js

@@ -2160,6 +2160,29 @@ class PlayerCharacter{
 		return State.variables.q.questIsActive("school");
 	}
 
+	// ----- Vehicles -----
+	_vehicleInUse = null;
+	get vehicleInUse(){return this._vehicleInUse;}
+	set vehicleInUse(v){this._vehicleInUse = v;}
+
+	get vehicleData(){
+		let inventory = State.variables.inventory;
+		let vehicleData = inventory.metadata(this.vehicleInUse,'vehicles');
+		return vehicleData;
+	}
+
+	get vehicleSpeed(){
+		return this.vehicleData.speed ?? 1;
+	}
+
+	get vehicleType(){
+		if(!this.vehicleInUse)
+			return 'walk';
+		let inventory = State.variables.inventory;
+		let vehicleData = inventory.metadata(this.vehicleInUse,'vehicles');
+		return vehicleData.type;
+	}
+
 	constructor(){}
 
 	_init(playerCharacter){

+ 11 - 2
sugarcube/src/sidebar/Sidebar.tw

@@ -383,6 +383,15 @@
 			<</imageWithTooltip>>
 		<</if>>
 
+		<<switch $pc.vehicleType>>
+			<<case 'car'>>
+				<<set _carData = $pc.vehicleData>>
+				<<imageWithTooltip "system/icons/status/car.png">>
+					You are driving your _carData.label.
+					<<image _carData.imageExterior>>
+				<</imageWithTooltip>>
+		<</switch>>
+
 
 		<!-- !!Row 5: Clothes,...-->
 	<<if $stat_bfgf_msg_0 != ''>>
@@ -422,11 +431,11 @@
                 <<gs 'din_bad' 'quick_takepill'>>
             <</actCLA>>
         <</if>>
-        <<if !$cheatSlut>>
+        /*<<if !$cheatSlut>>
             <<actCLA "Cycle menu" 1>>
                 <<d_cycreport_choice>>
             <</actCLA>> <!-- images/system/icons/status/vagina.png -->
-        <</if>>
+        <</if>>*/
     </div>
 
     <div id="stats_table">

+ 1 - 1
sugarcube/src/version.js

@@ -1,4 +1,4 @@
-Config.saves.version = 8;
+Config.saves.version = 9;
 
 Macro.add('version', {
 	skipArgs : true,