From 6ff08f5b0d53ce365ebafa98cb2b3439774c326e Mon Sep 17 00:00:00 2001
From: "ALLEN-PC\\acj30" <acj3017@gmail.com>
Date: Mon, 2 Jun 2025 13:33:49 -0500
Subject: [PATCH] Add choreo sentence scripts

---
 .../scripts/choreosentences_base.txt          |  29 ++
 .../scripts/choreosentences_hl2_combine_s.txt | 264 ++++++++++++
 .../choreosentences_hl2_metropolice.txt       | 398 ++++++++++++++++++
 .../scripts/choreosentences_manifest.txt      |   9 +
 4 files changed, 700 insertions(+)
 create mode 100644 VPKs/hl2_mapbase_content/scripts/choreosentences_base.txt
 create mode 100644 VPKs/hl2_mapbase_content/scripts/choreosentences_hl2_combine_s.txt
 create mode 100644 VPKs/hl2_mapbase_content/scripts/choreosentences_hl2_metropolice.txt
 create mode 100644 VPKs/hl2_mapbase_content/scripts/choreosentences_manifest.txt

diff --git a/VPKs/hl2_mapbase_content/scripts/choreosentences_base.txt b/VPKs/hl2_mapbase_content/scripts/choreosentences_base.txt
new file mode 100644
index 0000000..5becd40
--- /dev/null
+++ b/VPKs/hl2_mapbase_content/scripts/choreosentences_base.txt
@@ -0,0 +1,29 @@
+//=================================================================
+//
+// Choreo Sentences
+// Mapbase's modern replacement for sentences.txt
+//
+//=================================================================
+
+"ChoreoSentences"
+{
+	//---------------------------------------------------------------------------
+	
+	// Contexts to add to speakers when they have a virtual word that uses one and they don't have it.
+	// These stand in for hardcoded sentences.txt names, such as soldier unit callsigns.
+	"SentenceContextPrerequisites"
+	{
+	}
+	
+	//---------------------------------------------------------------------------
+	
+	"VirtualWords"
+	{
+	}
+	
+	//---------------------------------------------------------------------------
+	
+	"Sentences"
+	{
+	}
+}
diff --git a/VPKs/hl2_mapbase_content/scripts/choreosentences_hl2_combine_s.txt b/VPKs/hl2_mapbase_content/scripts/choreosentences_hl2_combine_s.txt
new file mode 100644
index 0000000..9bb72e9
--- /dev/null
+++ b/VPKs/hl2_mapbase_content/scripts/choreosentences_hl2_combine_s.txt
@@ -0,0 +1,264 @@
+//=================================================================
+//
+// Choreo Sentences
+// Mapbase's modern replacement for sentences.txt
+//
+// (This file is a WIP and does not contain every soldier sentence)
+//
+//=================================================================
+
+"ChoreoSentences"
+{
+	//---------------------------------------------------------------------------
+	
+	"SentenceContextPrerequisites"
+	{
+		"soldier_codename"
+		{
+			vscript		"RandomInt(0, 18)"
+		}
+		
+		"soldier_codenum"
+		{
+			vscript		"RandomInt(0, 9)"
+		}
+	}
+	
+	//---------------------------------------------------------------------------
+	
+	"VirtualWords"
+	{
+		//-------------------------------------------------------
+		// Combine Soldier names, remembered by speaker
+		//-------------------------------------------------------
+		
+		V_MYNAMES
+		{
+			condition	"context:soldier_codename"
+			words
+			{
+				0		"leader"
+				1		"flash"
+				2		"ranger"
+				3		"hunter"
+				4		"blade"
+				5		"scar"
+				6		"hammer"
+				7		"sweeper"
+				8		"swift"
+				9		"fist"
+				10		"sword"
+				11		"savage"
+				12		"tracker"
+				13		"slash"
+				14		"razor"
+				15		"stab"
+				16		"spear"
+				17		"striker"
+				18		"dagger"
+			}
+		}
+		
+		V_MYNUMS
+		{
+			condition	"context:soldier_codenum"
+			words
+			{
+				0		"zero"
+				1		"one"
+				2		"two"
+				3		"three"
+				4		"four"
+				5		"five"
+				6		"six"
+				7		"seven"
+				8		"eight"
+				9		"niner"
+			}
+		}
+		
+		//-------------------------------------------------------
+		// Random Combine codes
+		//-------------------------------------------------------
+		
+		// Phonetic alphabet
+		V_RNDCODES
+		{
+			words
+			{
+				0		"apex"
+				1		"ion"
+				2		"jet"
+				3		"kilo"
+				4		"mace"
+				5		"nova"
+				6		"payback"
+				7		"sundown"
+				8		"uniform"
+				9		"boomer"
+				10		"echo"
+				11		"flatline"
+				12		"helix"
+				13		"ice"
+				14		"quicksand"
+				15		"payback"
+				16		"ripcord"
+			}
+		}
+		
+		V_RNDNAMES
+		{
+			words
+			{
+				0		"apex"
+				1		"ion"
+				2		"jet"
+				3		"kilo"
+				4		"mace"
+				5		"nova"
+				6		"payback"
+				7		"sundown"
+				8		"uniform"
+				9		"boomer"
+				10		"echo"
+				11		"flatline"
+				12		"helix"
+				13		"ice"
+				14		"quicksand"
+				15		"payback"
+				16		"ripcord"
+			}
+		}
+		
+		V_RNDNUMS
+		{
+			words
+			{
+				0		"zero"
+				1		"one"
+				2		"two"
+				3		"three"
+				4		"four"
+				5		"five"
+				6		"six"
+				7		"seven"
+				8		"eight"
+				9		"niner"
+			}
+		}
+		
+		//-------------------------------------------------------
+		// Generic Combine numbers
+		//-------------------------------------------------------
+		
+		V_NUMBERSS
+		{
+			words
+			{
+				0		"zero"
+				1		"one"
+				2		"two"
+				3		"three"
+				4		"four"
+				5		"five"
+				6		"six"
+				7		"seven"
+				8		"eight"
+				9		"niner"
+				10		"ten"
+				11		"eleven"
+				12		"twelve"
+				13		"thirteen"
+				14		"fourteen"
+				15		"fifteen"
+				16		"sixteen"
+				17		"seventeen"
+				18		"eighteen"
+				19		"nineteen"
+				20		"twenty"
+				30		"thirty"
+				40		"fourty"
+				50		"fifty"
+				60		"sixty"
+				70		"seventy"
+				80		"eighty"
+				90		"ninety"
+				100		"onehundred"
+				200		"twohundred"
+				300		"threehundred"
+			}
+		}
+		
+		V_DISTS
+		{
+			condition	"dist_to:!enemy"
+			words_from	"V_NUMBERSS"
+		}
+		
+		V_DIRS
+		{
+			condition	"dir_to:!enemy"
+			words_from	"V_NUMBERSS"
+		}
+		
+		V_GRIDXS
+		{
+			condition	"gridx:!enemy"
+			words_from	"V_NUMBERSS"
+		}
+		
+		V_GRIDYS
+		{
+			condition	"gridy:!enemy"
+			words_from	"V_NUMBERSS"
+		}
+		
+		V_SEQGLOBNBRS
+		{
+			condition	"context:enemies_killed"
+			words_from	"V_NUMBERSS"
+		}
+		
+		V_WHODIEDS
+		{
+			condition	"context:speechtarget_soldier_codename"
+			words_from	"V_MYNAMES"
+		}
+		
+		//-------------------------------------------------------
+		// Combine global player
+		//-------------------------------------------------------
+		
+		V_G0_PLAYERS
+		{
+			words
+			{
+				0		"freeman3"
+				1		"anticitizenone"
+				2		"targetone"
+				3		"priority1objective"
+				4		"phantom"
+				5		"ghost2"
+			}
+		}
+	}
+	
+	//---------------------------------------------------------------------------
+	
+	"Sentences"
+	{
+		"npc/combine_soldier/vo/"
+		{
+			COMBINE_REFIND_ENEMY_PATH	"on1 V_WHODIEDS onedown onedown off1; NPC_Combine.Alert"
+			
+			COMBINE_PATH_TEST_PLAYERS	"on1 V_G0_PLAYERS onedown onedown off1; NPC_Combine.Alert"
+			COMBINE_PATH_TEST_MYCODE_1	"on2 V_MYNAMES V_MYNUMS onedown onedown off3; NPC_Combine.Alert"
+			COMBINE_PATH_TEST_MYCODE_2	"on1 overwatch V_MYNAMES V_MYNUMS isatcode V_RNDNUMS off2; NPC_Combine.Alert"
+			COMBINE_PATH_TEST_MYCODE_3	"on2 overwatch, V_MYNAMES V_MYNUMS lostcontact, hardenthatposition off2; NPC_Combine.Alert"
+			
+			COMBINE_PATH_TEST_PITCH		"on1 ripcord (p110) ripcord (p120) ripcord (p130) ripcord (p140) ripcord (p100) off2; NPC_Combine.Alert"
+			COMBINE_PATH_TEST_PITCH2	"on1 ripcord (p90) ripcord (p80) ripcord (p70) ripcord (p60) ripcord (p100) off2; NPC_Combine.Alert"
+			COMBINE_PATH_TEST_PITCH_BLANK	"on1 ripcord ripcord ripcord ripcord ripcord off2; NPC_Combine.Alert"
+		}
+	}
+}
diff --git a/VPKs/hl2_mapbase_content/scripts/choreosentences_hl2_metropolice.txt b/VPKs/hl2_mapbase_content/scripts/choreosentences_hl2_metropolice.txt
new file mode 100644
index 0000000..38df62a
--- /dev/null
+++ b/VPKs/hl2_mapbase_content/scripts/choreosentences_hl2_metropolice.txt
@@ -0,0 +1,398 @@
+//=================================================================
+//
+// Choreo Sentences
+// Mapbase's modern replacement for sentences.txt
+//
+// (This file is a WIP and does not contain every metrocop sentence)
+//
+//=================================================================
+
+"ChoreoSentences"
+{
+	//---------------------------------------------------------------------------
+	
+	"SentenceContextPrerequisites"
+	{
+		"police_codename"
+		{
+			vscript		"RandomInt(0, 14)"
+		}
+		
+		"police_codenum"
+		{
+			vscript		"RandomInt(1, 9)"
+		}
+	}
+	
+	//---------------------------------------------------------------------------
+	
+	"VirtualWords"
+	{
+		//-------------------------------------------------------
+		// Metropolice map names
+		//-------------------------------------------------------
+		
+		V_G1_LOCATION_MAP__P
+		{
+			criterion	"map"
+			matches
+			{
+				// map 0
+				default
+				{
+					words
+					{
+						0		"block"
+						1		"zone"
+						2		"sector"
+					}
+				}
+				
+				// map 1
+				*trainstation*
+				{
+					words
+					{
+						0		"stationblock"
+						1		"transitblock"
+						2		"workforceintake"
+					}
+				}
+				
+				// map 2
+				*canals*
+				{
+					words
+					{
+						0		"canalblock"
+						1		"stormsystem"
+						2		"wasteriver"
+						3		"deservicedarea"
+					}
+				}
+				
+				// map 3
+				*eli*
+				{
+					words
+					{
+						0		"industrialzone"
+						1		"restrictedblock"
+						2		"repurposedarea"
+					}
+				}
+				
+				// map 4
+				*town*
+				{
+					words
+					{
+						0		"condemnedzone"
+						1		"infestedzone"
+						2		"nonpatrolregion"
+					}
+				}
+				
+				// map 5
+				*coast*
+				{
+					words
+					{
+						0		"externaljurisdiction"
+						1		"stabilizationjurisdiction"
+						2		"outlandzone"
+					}
+				}
+				
+				// map 6
+				*prison*
+				{
+					words
+					{
+						0		"externaljurisdiction"
+						1		"stabilizationjurisdiction"
+					}
+				}
+				
+				// map 7
+				*c17*
+				{
+					words
+					{
+						0		"residentialblock"
+						1		"404zone"
+						2		"distributionblock"
+						3		"productionblock"
+					}
+				}
+				
+				// map 8
+				*citadel*
+				{
+					words
+					{
+						0		"highpriorityregion"
+						1		"terminalrestrictionzone"
+						2		"controlsection"
+					}
+				}
+			}
+		}
+		
+		V_G2_SUSPECT_MAP__P
+		{
+			criterion	"map"
+			matches
+			{
+				// map 0
+				default
+				{
+					words
+					{
+						0		"subject"
+					}
+				}
+				
+				// map 1
+				*trainstation*
+				{
+					words
+					{
+						0		"citizen"
+						1		"UPI"
+						2		"subject"
+					}
+				}
+				
+				// map 2
+				*canals*
+				{
+					words
+					{
+						0		"subject"
+						1		"noncitizen"
+						2		"sociocide"
+						3		"anticitizen"
+					}
+				}
+				
+				// map 3
+				*eli*
+				{
+					words
+					{
+						0		"anticitizen"
+						1		"subject"
+					}
+				}
+				
+				// map 4
+				*town*
+				{
+					words
+					{
+						0		"freeman"
+						1		"subject"
+						2		"anticitizen"
+					}
+				}
+				
+				// map 5
+				*coast*
+				{
+					words
+					{
+						0		"freeman"
+						1		"sociocide"
+					}
+				}
+				
+				// map 6
+				*prison*
+				{
+					words
+					{
+						0		"freeman"
+						1		"infection"
+					}
+				}
+				
+				// map 7
+				*c17*
+				{
+					words
+					{
+						0		"freeman"
+					}
+				}
+				
+				// map 8
+				*citadel*
+				{
+					words
+					{
+						0		"freeman"
+					}
+				}
+			}
+		}
+		
+		//-------------------------------------------------------
+		// Generic metrocop/overwatch numbers
+		//-------------------------------------------------------
+		
+		V_NUMBERSP
+		{
+			words
+			{
+				0		"zero"
+				1		"one"
+				2		"two"
+				3		"three"
+				4		"four"
+				5		"five"
+				6		"six"
+				7		"seven"
+				8		"eight"
+				9		"nine"
+				10		"ten"
+				11		"eleven"
+				12		"twelve"
+				13		"thirteen"
+				14		"fourteen"
+				15		"fifteen"
+				16		"sixteen"
+				17		"seventeen"
+				18		"eighteen"
+				19		"nineteen"
+				20		"twenty"
+				30		"thirty"
+				40		"fourty"
+				50		"fifty"
+				60		"sixty"
+				70		"seventy"
+				80		"eighty"
+				90		"ninety"
+				100		"onehundred"
+				200		"twohundred"
+				300		"threehundred"
+			}
+		}
+		
+		V_SEQG0_NBRP
+		{
+			// Note that this used its own definitions before
+			condition	"context:enemies_killed"
+			words_from	"V_NUMBERSP"
+		}
+		
+		//-------------------------------------------------------
+		// Random metrocop/overwatch codes
+		//-------------------------------------------------------
+		
+		V_RNDCODECRIM_P
+		{
+			words
+			{
+				0		"criminaltrespass63"
+				1		"nonsanctionedarson51"
+				2		"posession69"
+				3		"publicnoncompliance507"
+				4		"recklessoperation99"
+				5		"resistingpacification148"
+				6		"riot404"
+				7		"fugitive17f"
+				8		"weapon94"
+				9		"alarms62"
+				10		"assault243"
+				11		"illegalcarrying95"
+				12		"unlawfulentry603"
+			}
+		}
+		
+		V_RNDCODEPLR_P
+		{
+			words
+			{
+				0		"attemptedcrime27"
+				1		"disengaged647e"
+				2		"disturbingunity415"
+				3		"disturbancemental10-103m"
+				4		"illegalinoperation63s"
+				5		"threattoproperty51b"
+			}
+		}
+		
+		V_RNDNUMP
+		{
+			words
+			{
+				0		"zero"
+				1		"one"
+				2		"two"
+				3		"three"
+				4		"four"
+				5		"five"
+				6		"six"
+				7		"seven"
+				8		"eight"
+				9		"nine"
+			}
+		}
+		
+		//-------------------------------------------------------
+		// Metropolice names, remembered by speaker
+		//-------------------------------------------------------
+		
+		V_MYNAMEP
+		{
+			condition	"context:police_codename"
+			words
+			{
+				0		"defender"
+				1		"hero"
+				2		"jury"
+				3		"king"
+				4		"line"
+				5		"patrol"
+				6		"quick"
+				7		"roller"
+				8		"stick"
+				9		"tap"
+				10		"union"
+				11		"victor"
+				12		"xray"
+				13		"yellow"
+				14		"vice"
+			}
+		}
+		
+		V_MYNUMP
+		{
+			condition	"context:police_codenum"
+			words
+			{
+				0		"zero"
+				1		"one"
+				2		"two"
+				3		"three"
+				4		"four"
+				5		"five"
+				6		"six"
+				7		"seven"
+				8		"eight"
+				9		"nine"
+			}
+		}
+	}
+	
+	//---------------------------------------------------------------------------
+	
+	"Sentences"
+	{
+		"npc/metropolice/vo/"
+		{
+			METROPOLICE_GO_ALERT_PATH	"on1 designatesuspectas V_G2_SUSPECT_MAP__P allunitscode2 off1; NPC_Combine.Alert"
+		}
+	}
+}
diff --git a/VPKs/hl2_mapbase_content/scripts/choreosentences_manifest.txt b/VPKs/hl2_mapbase_content/scripts/choreosentences_manifest.txt
new file mode 100644
index 0000000..67af419
--- /dev/null
+++ b/VPKs/hl2_mapbase_content/scripts/choreosentences_manifest.txt
@@ -0,0 +1,9 @@
+choreosentences_manifest
+{
+	"precache_file"		"scripts/choreosentences_base.txt"
+	
+	"precache_file"		"scripts/choreosentences_hl2_combine_s.txt"
+	"precache_file"		"scripts/choreosentences_hl2_metropolice.txt"
+	
+	// Add new files here
+}
\ No newline at end of file