diff --git a/devNotes/Useful JS Function Documentation.txt b/devNotes/Useful JS Function Documentation.txt
index 98e7c10df6a14f87ca524515a19007b57eeda6e4..3c990ca0ac703885fd07e07c9f31a2b7d280d0d8 100644
--- a/devNotes/Useful JS Function Documentation.txt	
+++ b/devNotes/Useful JS Function Documentation.txt	
@@ -344,4 +344,6 @@ UtilJS [script]
 	ordinalSuffix(i) - takes a value as an input and then appends the appropriate suffix. e.g.$Day === 1 "today is the <<print ordinalSuffix($Day)>> of the month"
 		would print "today is the 1st of the month"
 
-	removeDuplicates() - Takes an array and returns a new array without duplicate entries
\ No newline at end of file
+	removeDuplicates() - Takes an array and returns a new array without duplicate entries
+
+	HSM() - outputs a value based off of the PC's hacking skill.
\ No newline at end of file
diff --git a/src/SecExp/attackGenerator.tw b/src/SecExp/attackGenerator.tw
index be593a973cacd16d11330ea703ef6e0744e125a4..84a1b9eed1d5c77d57dd34612f00215d88529173 100644
--- a/src/SecExp/attackGenerator.tw
+++ b/src/SecExp/attackGenerator.tw
@@ -131,90 +131,90 @@
 	<<if $attackType == "raiders">>
 		<<set $attackTroops = random(40,80)>>
 		<<if $week < 30>>
-			<<set $attackTroops *= random(1,2)>>
+			<<set $attackTroops *= Math.ceil(random( (1*(2+($week/40))) , (2*(4+($week/30))) ))>>
 		<<elseif $week < 60>>
-			<<set $attackTroops *= random(1,3)>>
+			<<set $attackTroops *= Math.ceil(random( (1*(2+($week/40))) , (3*(4+($week/30))) ))>>
 		<<elseif $week < 90>>
-			<<set $attackTroops *= random(2,3)>>
+			<<set $attackTroops *= Math.ceil(random( (2*(2+($week/40))) , (3*(4+($week/30))) ))>>
 		<<elseif $week < 120>>
-			<<set $attackTroops *= random(2,4)>>
+			<<set $attackTroops *= Math.ceil(random( (2*(2+($week/40))) , (4*(4+($week/30))) ))>>
 		<<else>>
-			<<set $attackTroops *= random(3,5)>>
+			<<set $attackTroops *= Math.ceil(random( (3*(2+($week/40))) , (5*(4+($week/30))) ))>>
 		<</if>>
 		<<if $week < 60>>
-			<<set $attackEquip = random(0,1)>>
+			<<set $attackEquip = Math.ceil(random( (0, (1*(4+($week/25))>>
 		<<elseif $week < 90>>
-			<<set $attackEquip = random(0,2)>>
+			<<set $attackEquip = Math.ceil(random( (0, (2*(4+($week/30))) ))>>
 		<<elseif $week < 120>>
-			<<set $attackEquip = random(0,3)>>
+			<<set $attackEquip = Math.ceil(random( (0, (3*(4+($week/30))) ))>>
 		<<else>>
-			<<set $attackEquip = random(1,3)>>
+			<<set $attackEquip = Math.ceil(random( (1*(2+($week/40))) , (3*(4+($week/30))) ))>>
 		<</if>>
 	<<elseif $attackType == "free city">>
 		<<set $attackTroops = random(20,40)>>
 		<<if $week < 30>>
-			<<set $attackTroops *= random(1,2)>>
+			<<set $attackTroops *= Math.ceil(random( (1*(2+($week/40))) , (2*(4+($week/30))) ))>>
 		<<elseif $week < 60>>
-			<<set $attackTroops *= random(1,3)>>
+			<<set $attackTroops *= Math.ceil(random( (1*(2+($week/40))) , (3*(4+($week/30))) ))>>
 		<<elseif $week < 90>>
-			<<set $attackTroops *= random(2,3)>>
+			<<set $attackTroops *= Math.ceil(random( (2*(2+($week/40))) , (3*(4+($week/30)))) )>>
 		<<elseif $week < 120>>
-			<<set $attackTroops *= random(2,4)>>
+			<<set $attackTroops *= Math.ceil(random( (2*(2+($week/40))) , (4*(4+($week/30)))) )>>
 		<<else>>
-			<<set $attackTroops *= random(3,5)>>
+			<<set $attackTroops *= Math.ceil(random( (3*(2+($week/40))) , (5*(4+($week/30))) ))>>
 		<</if>>
 		<<if $week < 60>>
-			<<set $attackEquip = random(0,1)>>
+			<<set $attackEquip = Math.ceil(random( (0, (1*(4+($week/30))) ))>>
 		<<elseif $week < 90>>
-			<<set $attackEquip = random(0,3)>>
+			<<set $attackEquip = Math.ceil(random( (0, (3*(4+($week/30))) ))>>
 		<<elseif $week < 120>>
-			<<set $attackEquip = random(1,3)>>
+			<<set $attackEquip = Math.ceil(random( (1*(2+($week/40))) , (3*(4+($week/30))) ))>>
 		<<else>>
-			<<set $attackEquip = random(2,4)>>
+			<<set $attackEquip = Math.ceil(random( (2*(2+($week/40))) , (4*(4+($week/30))) ))>>
 		<</if>>
 	<<elseif $attackType == "old world">>
 		<<set $attackTroops = random(25,50)>>
 		<<if $week < 30>>
-			<<set $attackTroops *= random(1,2)>>
+			<<set $attackTroops *= Math.ceil(random( (1*(2+($week/40))) , (2*(4+($week/30))) ))>>
 		<<elseif $week < 60>>
-			<<set $attackTroops *= random(1,3)>>
+			<<set $attackTroops *= Math.ceil(random( (1*(2+($week/40))) , (3*(4+($week/30))) ))>>
 		<<elseif $week < 90>>
-			<<set $attackTroops *= random(2,3)>>
+			<<set $attackTroops *= Math.ceil(random( (2*(2+($week/40))) , (3*(4+($week/30))) ))>>
 		<<elseif $week < 120>>
-			<<set $attackTroops *= random(2,4)>>
+			<<set $attackTroops *= Math.ceil(random( (2*(2+($week/40))) , (4*(4+($week/30))) ))>>
 		<<else>>
-			<<set $attackTroops *= random(3,5)>>
+			<<set $attackTroops *= Math.ceil(random( (3*(2+($week/40))) , (5*(4+($week/30))) ))>>
 		<</if>>
 		<<if $week < 60>>
-			<<set $attackEquip = random(0,1)>>
+			<<set $attackEquip = Math.ceil(random( (0, (1*(4+($week/30))) ))>>
 		<<elseif $week < 90>>
-			<<set $attackEquip = random(0,3)>>
+			<<set $attackEquip = Math.ceil(random( (0, (3*(4+($week/30))) ))>>
 		<<elseif $week < 120>>
-			<<set $attackEquip = random(1,3)>>
+			<<set $attackEquip = Math.ceil(random( (1,3*(4+($week/30))) ))>>
 		<<else>>
-			<<set $attackEquip = random(2,4)>>
+			<<set $attackEquip = Math.ceil(random( (2*(2+($week/40))) , (4*(4+($week/30))) ))>>
 		<</if>>
 	<<elseif $attackType == "freedom fighters">>
 		<<set $attackTroops = random(30,60)>>
 		<<if $week < 30>>
-			<<set $attackTroops *= random(1,2)>>
+			<<set $attackTroops *= Math.ceil(random( (1*(2+($week/40))) , (2*(4+($week/30))) ))>>
 		<<elseif $week < 60>>
-			<<set $attackTroops *= random(1,3)>>
+			<<set $attackTroops *= Math.ceil(random( (1*(2+($week/40))) , (3*(4+($week/30))) ))>>
 		<<elseif $week < 90>>
-			<<set $attackTroops *= random(2,3)>>
+			<<set $attackTroops *= Math.ceil(random( (2*(2+($week/40))) , (3*(4+($week/30))) ))>>
 		<<elseif $week < 120>>
-			<<set $attackTroops *= random(2,4)>>
+			<<set $attackTroops *= Math.ceil(random( (2*(2+($week/40))) , (4*(4+($week/30))) ))>>
 		<<else>>
-			<<set $attackTroops *= random(3,5)>>
+			<<set $attackTroops *= Math.ceil(random( (3*(2+($week/40))) , (5*(4+($week/30))) ))>>
 		<</if>>
 		<<if $week < 60>>
-			<<set $attackEquip = random(0,1)>>
+			<<set $attackEquip = Math.ceil(random( (0, (1*(4+($week/30))) ))>>
 		<<elseif $week < 90>>
-			<<set $attackEquip = random(0,3)>>
+			<<set $attackEquip = Math.ceil(random( (0, (3*(4+($week/30))) ))>>
 		<<elseif $week < 120>>
-			<<set $attackEquip = random(1,3)>>
+			<<set $attackEquip = Math.ceil(random( (1*(2+($week/40))) , (3*(4+($week/30))) ))>>
 		<<else>>
-			<<set $attackEquip = random(2,4)>>
+			<<set $attackEquip = Math.ceil(random( (2*(2+($week/40))), (4*(4+($week/30))) ))>>
 		<</if>>
 	<</if>>
 	<<set $estimatedMen = Math.round($attackTroops * (1 + either(-1,1) * (random(3,4) - $recon) * 0.1))>>
diff --git a/src/SecExp/rebellionGenerator.tw b/src/SecExp/rebellionGenerator.tw
index 7fef4f15e5f97037ea0e1b29ab24ccf122db7c6a..11374f05a7e22c1abfe8a314c08d89cbfcf28bf7 100644
--- a/src/SecExp/rebellionGenerator.tw
+++ b/src/SecExp/rebellionGenerator.tw
@@ -235,15 +235,15 @@
 
 <<set _weekMod = 0.50>>
 <<if $week <= 30>>
-	<<set _weekMod = 0.75>>
+	<<set _weekMod = 0.75 * math.round(1+$week/10)>>
 <<elseif $week <= 60>>
-	<<set _weekMod = 1>>
+	<<set _weekMod = 1 * math.round(1+$week/10)>>
 <<elseif $week <= 90>>
-	<<set _weekMod = 1.25>>
+	<<set _weekMod = 1.25 * math.round(1+$week/10)>>
 <<elseif $week <= 120>>
-	<<set _weekMod = 1.50>>
+	<<set _weekMod = 1.50 * math.round(1+$week/10)>>
 <<else>>
-	<<set _weekMod = 1.75>>
+	<<set _weekMod = 1.75 * math.round(1+$week/10)>>
 <</if>>
 
 /* resetting ID list */
diff --git a/src/SpecialForce/SpecialForce.js b/src/SpecialForce/SpecialForce.js
index 494ebcdb5b419ae70987e723db24be72532b38bf..337a2eb1d9548cde226232d8c9ca95020d6e8fc0 100644
--- a/src/SpecialForce/SpecialForce.js
+++ b/src/SpecialForce/SpecialForce.js
@@ -36,22 +36,6 @@ window.SFUpgradeCost = function(cost,unit) {
 	return Math.ceil(value);
 };
 
-window.HSM = function() {
-	const V = State.variables;
-	if (V.PC.hacking <= -100) {return 1.5;}
-	else if (V.PC.hacking <= -75) {return 1.35;}
-	else if (V.PC.hacking <= -50) {return 1.25;}
-	else if (V.PC.hacking <= -25) {return 1.15;}
-	else if (V.PC.hacking < 0) {return 1.10;}
-	else if (V.PC.hacking === 0) {return 1;}
-	else if (V.PC.hacking <= 10) {return 0.97;}
-	else if (V.PC.hacking <= 25) {return 0.95;}
-	else if (V.PC.hacking <= 50) {return 0.90;}
-	else if (V.PC.hacking <= 75) {return 0.85;}
-	else if (V.PC.hacking <= 100) {return 0.80;}
-	else {return 0.75;}
-};
-
 window.Count = function() {
 	const V=State.variables, T=State.temporary, C=Math.clamp, S=V.SF.Squad, E=V.economy;
 	T.SFF=V.SF.Facility.Active;
diff --git a/src/js/utilJS.js b/src/js/utilJS.js
index 0e9ed708c54704484c003c24619aca8f1efafbd7..da8d72d23ba55adcbc08992c9d922ccbae42646e 100644
--- a/src/js/utilJS.js
+++ b/src/js/utilJS.js
@@ -1257,3 +1257,19 @@ window.originPronounReplace = /** @param {App.Entity.SlaveState} slave */ functi
 			return r;
 	}
 };
+
+window.HSM = function() {
+	const V = State.variables;
+	if (V.PC.hacking <= -100) {return 1.5;}
+	else if (V.PC.hacking <= -75) {return 1.35;}
+	else if (V.PC.hacking <= -50) {return 1.25;}
+	else if (V.PC.hacking <= -25) {return 1.15;}
+	else if (V.PC.hacking < 0) {return 1.10;}
+	else if (V.PC.hacking === 0) {return 1;}
+	else if (V.PC.hacking <= 10) {return 0.97;}
+	else if (V.PC.hacking <= 25) {return 0.95;}
+	else if (V.PC.hacking <= 50) {return 0.90;}
+	else if (V.PC.hacking <= 75) {return 0.85;}
+	else if (V.PC.hacking <= 100) {return 0.80;}
+	else {return 0.75;}
+};
\ No newline at end of file
diff --git a/src/pregmod/seFCTVshows.tw b/src/pregmod/seFCTVshows.tw
index 2439602d80748bb9dfc66837846f6aaf927352fd..87de7cbf022a917d2406480a52e9799fa5a68a82 100644
--- a/src/pregmod/seFCTVshows.tw
+++ b/src/pregmod/seFCTVshows.tw
@@ -27,8 +27,8 @@
 
 Tired after a long day, you tell <<if $Concubine != 0>>@@.pink;$Concubine.slaveName@@<<else>>$assistantName<</if>> to turn on the TV and set FCTV to random show. Your larger-than-life screen flashes on, and is soon playing a random show from the popular streaming service.
 /* we need to check for pansy no-extreme squick stuff */
-<<if $minimumSlaveAge > 13 && $randShow == 14>>
-	<<set $randShow = either(0,1,2,3,4,5,6,7,8,9,10,11,12,13)>>
+<<if $minimumSlaveAge > 13 && ($randShow == 12 || $randShow == 14)>>
+	<<set $randShow = either(0,1,2,3,4,5,6,7,8,9,10,11,13)>>
 	There is an audible tone from your screen, which then displays a message: <i>Actor not vintage enough, changing program.</i>
 <</if>>
 <<if $seeExtreme == 0 && $randShow == 10>>
diff --git a/src/uncategorized/storyCaption.tw b/src/uncategorized/storyCaption.tw
index a0256f5a148ce5b902d9d2d246d73eee871f44f0..c6dc225865c7e81aea363a267210dcc5c6c1ae77 100644
--- a/src/uncategorized/storyCaption.tw
+++ b/src/uncategorized/storyCaption.tw
@@ -688,7 +688,7 @@
 	<br><span id="manageArcology"><<link "Manage Arcology">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "Manage Arcology">><</link>></span> @@.cyan;[C]@@
 	<br><span id="managePenthouse"><<link "Manage Penthouse">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "Manage Penthouse">><</link>></span> @@.cyan;[P]@@
 	<br><span id="managePerson"><<link "Manage Personal Affairs">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "Manage Personal Affairs">><</link>></span> @@.cyan;[X]@@
-	<<if $corpAnnounced == 1>><br><span id="manageCorporation"><<link "Manage Corporation">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "Manage Corporation">><</link>><<if ($corpSpecToken > 0)>>@@.yellow;[!]@@<</if>></span><</if>>
+	<<if $corpAnnounced == 1>><br><span id="manageCorporation"><<link "Manage Corporation">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "Manage Corporation">><</link>><<if ($corpSpecToken > 0) && ($corpSpecTimer == 0)>>@@.yellow;[!]@@<</if>></span><</if>>
 	<<if $secExp == 1>>
 	<<if $propHub == 1>>
 	<br><span id="propHub"><<link "Manage PR">><<set $nextButton = "Back", $nextLink = _Pass>><<goto "propagandaHub">><</link>></span> @@.cyan;[Shift+H]@@