Differences From
Artifact [b5c9249601]:
28 28 let range min max = (Random.int (max-min)) + min
29 29 let chance n = range 0 n = 0
30 30 let pick (r: 'a array) : 'a = r.(range 0 (Array.length r));;
31 31 let prefixes = [| "crack"; "crystal"; "powdered"; "raw"; "pure"; "liquid"; "street";
32 32 "super"; "electric"; "diced"; "homemade"; "traditional"; "old-school"; "purified";
33 33 "high-caliber"; "high-octane"; "old-fashioned"; "good old"; "honest-to-god";
34 34 "weapons-grade"; "soviet"; "american"; "canadian"; "british"; "russian";
35 - "synthetic"; "french"; "cyber"; |]
35 + "synthetic"; "french"; "cyber"; "dank"; "dinky"; "dismal"; "fire"; "wild"; "wacky"; "snazzy"; "sleazy"; "skanky"; "sexy"; "screwy"; "funky"; "queer"; "kinky"; "fascist"; "nazi"; |]
36 36 let word () = (if chance 3 then (pick prefixes) ^ " " else "") ^
37 37 (if chance 5 then "" else pick initials) ^
38 38 (pick nuclei) ^
39 39 (pick finals)
40 40
41 41 let greets = [| "hey"; "whassup"; "what's up"; "what up"; "yo"; "hey there"; "what's shakin'" |]
42 42 let names = [| "dude"; "bro"; "man"; "babe"; "sweetheart"; "honey"; "baby"; "hottie"; "girl"; |]
43 43 let questions = [| "wanna"; "want to"; "shall we"; "how about we"; |]
44 44 let exhorts = [| "we oughta"; "you oughta"; "we ought to"; "you ought to"; "we should";
45 45 "you should"; "let's"; |]
46 -type component = Invariant of string | Numbered of string * string | Poss
47 -type state = Plain of string | Compound of component list
46 +type component = Invariant of string | Numbered of string * string | Poss |Obl | Nom | Refl
47 +type state = Plain of string | Compound of component list
48 48 let states = [|
49 49 Plain "high";
50 50 Compound[Invariant "out of"; Poss; Numbered("mind","minds")];
51 51 Compound[Invariant "outta"; Poss; Numbered("mind","minds")];
52 - Plain "fucked up";
53 - Plain "wrecked";
54 - Plain "hammered";
55 - Plain "buzzed";
56 - Plain "tweaked";
57 - Plain "whacked";
58 - Plain "whacked out";
59 - Plain "smacked";
60 - Plain "smacked out";
61 - Plain "tipsy";
62 - Plain "snazzy";
63 - Plain "spooky";
64 - Plain "crazy";
65 - Plain "messed up";
66 - Plain "far out";
67 - Plain "horny";
68 - Plain "psycho";
69 - Plain "loony";
70 - Plain "wacky";
71 - Plain "silly";
72 - Plain "creepy";
73 - Plain "frazzled";
74 - Plain "dazzling";
75 - Plain "wired";
76 - Plain "peppy";
77 - Plain "hoovered";
78 - Plain "turnt";
79 - Plain "turnt up";
80 - Plain "tits-up";
81 - Plain "toasted";
82 - Plain "roasted";
83 - Plain "cooked";
84 - Plain "baked";
85 - Plain "basted";
86 - Plain "flunked";
87 - Plain "flunked out";
88 - Plain "crazed";
89 - Plain "stewed";
90 - Plain "framed for war crimes";
91 - Plain "ruined";
92 - Plain "totally ruined";
93 - Plain "whacked out";
94 - Plain "creeped out";
95 - Plain "spunky";
96 - Plain "spiffy";
97 - Plain "nifty";
98 - Plain "wicked";
99 - Plain "slutty";
100 - Plain "jazzed";
101 - Plain "jazzy";
102 - Plain "fried";
103 - Plain "hecked";
104 - Plain "hecked up";
105 - Plain "hecked out";
106 - Plain "screwed";
107 - Plain "screwed up";
108 - Plain "ousted";
109 - Plain "thrown out of the mall";
110 - Plain "cyber";
111 - Plain "totally online";
112 - Plain "cybered";
113 - Plain "downloaded";
52 + Compound[Invariant "put out of"; Poss; Invariant "misery"];
53 + Compound[Invariant "put outta"; Poss; Invariant "misery"];
54 + Compound[Invariant "an APB on"; Poss; Numbered("ass","asses")];
55 + Compound[Invariant "a cop on"; Poss; Invariant "tail"];
56 + Plain "fucked"; Plain "bailed out";
57 + Plain "fucked up"; Plain "slobbered";
58 + Plain "fucked off"; Plain "slobbered out";
59 + Plain "fucked out"; Plain "honked";
60 + Plain "fucked away"; Plain "honked out";
61 + Plain "wrecked"; Plain "honked off";
62 + Plain "hammered"; Plain "honked away";
63 + Plain "buzzed"; Plain "tweeted";
64 + Plain "tweaked"; Plain "tweeted at";
65 + Plain "whacked"; Plain "subtweeted";
66 + Plain "whacked out"; Plain "slagged";
67 + Plain "whacked off"; Plain "razzed";
68 + Plain "smacked"; Plain "thrashed";
69 + Plain "smacked out"; Plain "flogged";
70 + Plain "tipsy"; Plain "jacked";
71 + Plain "snazzy"; Plain "jacked up";
72 + Plain "spooky"; Plain "jacked off";
73 + Plain "crazy"; Plain "exiled";
74 + Plain "messed up"; Plain "sentenced to death";
75 + Plain "far out"; Plain "jailed";
76 + Plain "horny"; Plain "orbital";
77 + Plain "psycho"; Plain "radical";
78 + Plain "loony"; Plain "dialectical";
79 + Plain "wacky"; Plain "shagged";
80 + Plain "silly"; Plain "snubbed";
81 + Plain "creepy"; Plain "glued";
82 + Plain "frazzled"; Plain "glued off";
83 + Plain "dazzling"; Plain "glued out";
84 + Plain "wired"; Plain "sneezy";
85 + Plain "peppy"; Plain "grumpy";
86 + Plain "hoovered"; Plain "wild";
87 + Plain "turnt"; Plain "outta this world";
88 + Plain "turnt up"; Plain "out of this world";
89 + Plain "tits-up"; Plain "junked";
90 + Plain "toasted"; Plain "trashed";
91 + Plain "roasted"; Plain "recycled";
92 + Plain "cooked"; Plain "fragged";
93 + Plain "baked"; Plain "dematerialized";
94 + Plain "basted"; Plain "degenerate";
95 + Plain "flunked"; Plain "biblical";
96 + Plain "flunked out"; Plain "mystical";
97 + Plain "crazed"; Plain "mythical";
98 + Plain "stewed"; Plain "twisted";
99 + Plain "framed for war crimes"; Plain "stabbed";
100 + Plain "ruined"; Plain "stapled";
101 + Plain "totally ruined"; Plain "cucked";
102 + Plain "whacked out"; Plain "cucked up";
103 + Plain "creeped out"; Plain "cucked out";
104 + Plain "spunky"; Plain "cucked off";
105 + Plain "spiffy"; Plain "bamboozled";
106 + Plain "nifty"; Plain "baffled";
107 + Plain "wicked"; Plain "baffled";
108 + Plain "slutty"; Plain "logged on";
109 + Plain "jazzed"; Plain "logged off";
110 + Plain "jazzy"; Plain "hauled";
111 + Plain "fried"; Plain "hauled away";
112 + Plain "hecked"; Plain "hauled off";
113 + Plain "hecked up"; Plain "rehabilitated";
114 + Plain "hecked out"; Plain "disappeared";
115 + Plain "screwed"; Plain "counterrevolutionary";
116 + Plain "screwed up"; Plain "gulagged";
117 + Plain "ousted"; Plain "grinched";
118 + Plain "thrown out of the mall"; Plain "redacted";
119 + Plain "cyber"; Plain "razed";
120 + Plain "totally online"; Plain "sludged";
121 + Plain "cybered"; Plain "clawed up";
122 + Plain "downloaded"; Plain "clawed off";
123 + Plain "slurped out"; Plain "dragged";
124 + Plain "sucked off"; Plain "dragged away";
125 + Plain "sporked"; Plain "dragged away screaming";
126 + Plain "sporked up"; Plain "kidnapped";
127 + Plain "sleazy"; Plain "hazed";
128 + Plain "sleazed up"; Plain "glazed";
129 + Plain "sleazed up"; Plain "shot";
130 + Plain "sledged"; Plain "shot at";
131 + Plain "sledged out"; Plain "spherical";
132 + Plain "sledged up"; Plain "authoritarian";
133 + Plain "sickled"; Plain "totalitarian";
134 + Plain "hammered and sickled"; Plain "fascist";
135 + Plain "strung out"; Plain "nationalized";
136 + Plain "strung up"; Plain "flayed";
137 + Plain "strung along"; Plain "thumped";
138 + Plain "blown"; Plain "thumped off";
139 + Plain "blown up"; Plain "humped";
140 + Plain "blown out"; Plain "messy";
141 + Plain "blown away"; Plain "conical";
142 + Plain "blazed"; Plain "chunked";
143 + Plain "dredged"; Plain "chunky";
144 + Plain "dredged up"; Plain "hucked";
145 + Plain "bailed"; Plain "zucked";
146 + Plain "zucked up"; Plain "zucked off";
147 + Plain "zucked out"; Plain "benched";
148 + Plain "drafted"; Plain "conscripted";
149 + Plain "killed"; Plain "killed";
150 + Plain "hanged"; Plain "hung";
151 + Plain "hung out to dry"; Plain "janky";
152 + Plain "hacked"; Plain "hacked into";
153 + Plain "hacked off"; Plain "hacked out";
154 + Plain "judged"; Plain "found guilty";
155 + Plain "empaneled"; Plain "impaled";
156 + Plain "acquitted"; Plain "shucked";
157 + Plain "banksy"; Plain "persecuted";
158 + Plain "desegregated"; Plain "hauled";
159 + Plain "hauled into court"; Plain "trumped up";
160 + Plain "gendered"; Plain "ghouled";
161 + Plain "slugged"; Plain "slagged";
162 + Plain "frayed"; Plain "stupid";
163 + Plain "girly"; Plain "manly";
164 + Plain "comical"; Plain "satirical";
165 + Plain "mocked"; Plain "funny";
166 + Plain "arrested"; Plain "molested";
167 + Plain "assaulted"; Plain "convicted";
168 + Plain "traumatized"; Plain "ravished";
169 + Plain "violated"; Plain "sexy";
170 + Plain "beaten"; Plain "used";
171 + Plain "bruised"; Plain "battered";
172 + Plain "bloody"; Plain "abused";
173 + Plain "neglected"; Plain "gaslit";
174 + Plain "lied to"; Plain "deceived";
175 + Plain "fooled"; Plain "foolish";
176 + Plain "dense"; Plain "arboreal";
177 + Plain "chucked"; Plain "got";
178 + Plain "done"; Plain "had";
179 + Plain "duped"; Plain "dropped";
180 + Plain "drunk"; Plain "busted";
181 + Plain "buxom"; Plain "bothered";
182 + Plain "hot"; Plain "cold";
183 + Plain "joshed"; Plain "surrounded";
184 + Plain "sharp"; Plain "spun";
185 + Plain "spun up"; Plain "spun out";
186 + Plain "spun along"; Plain "dragged along";
187 + Plain "long"; Plain "weird";
188 + Plain "corporate"; Plain "enterprise";
189 + Plain "electronic"; Plain "electric";
190 + Plain "tortured"; Plain "shivved";
191 + Plain "shanked"; Plain "skanky";
192 + Plain "skanked"; Plain "skanked up";
193 + Plain "skanked out"; Plain "skanked off";
194 + Plain "skanked away"; Plain "whored";
195 + Plain "whored out"; Plain "whored off";
196 + Plain "sold"; Plain "sold off";
197 + Plain "sold out"; Plain "spanked";
198 + Plain "slapped"; Plain "stunk";
199 + Plain "stinky"; Plain "stung";
200 + Plain "stabled"; Plain "stuck";
201 + Plain "topped"; Plain "bottomed";
202 + Plain "trawled"; Plain "trawled for";
203 + Plain "wanked"; Plain "wanked out";
204 + Plain "strapped"; Plain "butchered";
205 + Plain "invaded"; Plain "liberated";
206 + Plain "greeted as liberators"; Plain "defiled";
207 + Plain "desecrated"; Plain "lost";
208 + Plain "scolded"; Plain "slabbed";
209 + Plain "snagged"; Plain "flabby";
210 + Plain "fracked"; Plain "wobbled";
211 + Plain "mobbed"; Plain "floppy";
212 + Plain "slinky"; Plain "sloppy";
213 + Plain "snooty"; Plain "twee";
214 + Plain "rich"; Plain "poor";
215 + Plain "addicted"; Plain "hooked";
216 + Plain "clammed up"; Plain "quiet";
217 + Plain "chafed"; Plain "chewed up";
218 + Plain "chewed out"; Plain "green";
219 + Plain "purple"; Plain "pink";
220 + Plain "white"; Plain "douched";
221 + Plain "douchey"; Plain "douched out";
222 + Plain "douched up"; Plain "douched off";
223 + Plain "dank"; Plain "humped up";
224 + Plain "humped off"; Plain "funky";
225 + Plain "funked"; Plain "funked up";
226 + Plain "funked off"; Plain "funked out";
227 + Plain "sad"; Plain "depressed";
228 + Plain "dehumanized"; Plain "demeaned";
229 + Plain "dropped out"; Plain "queer";
230 + Plain "gay"; Plain "kinky";
231 + Plain "cranked"; Plain "cranked out";
232 + Plain "cranked up"; Plain "cranked off";
233 + Plain "cranked away"; Plain "kicked";
234 + Plain "booted"; Plain "kinked";
235 + Plain "sucked off"; Plain "boggled";
236 + Plain "branded"; Plain "rebranded";
237 + Plain "compliant"; Plain "obedient";
238 + Plain "scammed"; Plain "legal";
239 + Plain "outlawed"; Plain "banned";
240 + Plain "banished"; Plain "baled";
241 + Plain "blooded"; Plain "blasted";
242 + Plain "blasted out"; Plain "blasted off";
243 + Plain "blasted up"; Plain "blasted down";
244 + Plain "slammed"; Plain "slammed down";
245 + Plain "memed"; Plain "memetic";
246 + Plain "elected"; Plain "bought out";
247 + Plain "bought up"; Plain "bought";
248 + Plain "bagged"; Plain "bugged";
249 + Plain "blurry"; Plain "blurred";
250 + Plain "blobbed"; Plain "cubed";
251 + Plain "orbed"; Plain "squared";
252 + Plain "[REDACTED]"; Plain "wrangled";
253 + Plain "wrassled"; Plain "glib";
254 + Plain "maudlin"; Plain "schooled";
114 255 |]
115 256 let roas = [| "on"; "shooting up"; "using"; "mainlining"; "snorting"; "vaping"; "smoking"; "cybering";
116 - "sucking down"; "gargling"; "doing"; "trying"; "guzzling"; "popping"; "downing"; "chewing";
117 - "crunching"; "sniffing"; "zapping"; "downloading"; "dropping"; "cooking up"; "freebasing"|]
118 -let vroas = [| "shoot up"; "mainline"; "snort"; "vape"; "smoke"; "freebase";
119 - "suck down"; "gargle"; "do"; "try"; "guzzle"; "pop"; "down"; "chew"; "crunch";
120 - "sniff"; "zap"; "download"; "drop"; "cyber"; "cook up"; |]
257 + "sucking down"; "gargling"; "doing"; "trying"; "slurping"; "guzzling"; "popping"; "downing"; "chewing"; "pooping"; "shitting"; "pissing";
258 + "crunching"; "sniffing"; "zapping"; "downloading"; "dropping"; "cooking up"; "freebasing"; "hooting"; "tooting"; "blasting"; "blazing";
259 + "tweeting"; "honking"; "plugging"; "plugging in"; "hooking up"; "turning on"; "boofing"; "whacking"; "choking"; "ravishing"; "looting"; "slaughtering";
260 + "drinking"; "eating"; "slugging"; "ghouling" |]
261 +let vroas = [| "shoot up"; "mainline"; "snort"; "vape"; "smoke"; "slurp";
262 + "suck down"; "gargle"; "do"; "try"; "guzzle"; "pop"; "down"; "chew"; "crunch"; "poop"; "shit"; "piss"; "blast"; "blaze";
263 + "sniff"; "zap"; "download"; "drop"; "cyber"; "cook up"; "toot"; "hoot"; "plug"; "plug in";
264 + "hook up"; "turn on"; "boof"; "whack"; "choke"; "drink"; "eat"; "slug"; "ghoul"; "freebase"; "ravish"; "loot"; "slaughter";|]
121 265 module Pronoun = struct
122 266 type t = {
123 267 nom : string; obl : string; gen : string;
124 268 refl : string; cop : string; brevcop : string;
125 269 pl : bool;
126 270 }
127 271 let you = {nom = "you"; obl = "you"; gen = "your"; refl = "yourself";
................................................................................
142 286 end
143 287 let cop p = Pronoun.(if chance 4 then p.nom ^ " " ^ p.cop else p.nom^p.brevcop)
144 288 let makestate p s =
145 289 let eval c = match c with
146 290 | Invariant i -> i
147 291 | Numbered(sg,pl) -> if p.Pronoun.pl then pl else sg
148 292 | Poss -> p.Pronoun.gen
293 + | Nom -> p.Pronoun.nom
294 + | Obl -> p.Pronoun.obl
295 + | Refl -> p.Pronoun.refl
149 296 in match s with
150 297 | Plain t -> t
151 298 | Compound l -> List.fold_left (fun a t -> if a = "" then a^(eval t) else a^" "^(eval t)) "" l
152 -let gethigh p = (cop p) ^ (pick [|" getting "; " gonna get "; " "|]) ^ (pick [|"";"so "|])
153 - ^ (makestate p (pick states)) ^ " on " ^ (word ());;
154 -let cantwait p = p.Pronoun.nom ^ " can't wait to get " ^ (makestate p (pick states)) ^ " on " ^ (word ());;
299 +let gethigh p =
300 + let pickstate () =
301 + (makestate p (pick states)) ^
302 + (if chance 3 then
303 + " and " ^ (makestate p (pick states))
304 + else "")
305 + in (cop p) ^ (pick [|" getting "; " gonna get "; " "|]) ^ (pick[| ""; p.Pronoun.refl ^ " " |]) ^ (pick [|"";"so "; "all "; "way "; "super "; "totally "|])
306 + ^ (pickstate ()) ^ " on " ^ (word ());;
307 +let cantwait p = p.Pronoun.nom ^ " can't wait to get " ^ (pick[| ""; p.Pronoun.refl ^ " " |]) ^ (makestate p (pick states)) ^ " on " ^ (word ());;
155 308 let affecting p =
156 309 if chance 2 then
157 310 (pick [|
158 311 "it's got"; "it's getting"; "it got"; "it has";
159 312 "it's making"; "it's gonna get"; "it's gonna make"
160 313 |]) ^ " " ^ p.Pronoun.obl
161 314 else Pronoun.(pick [|
162 315 p.nom ^ " got";
163 316 (cop p) ^ " getting";
164 317 (cop p) ^ " gonna get";
165 318 (cop p);
166 319 |]);;
167 320 let gotso p = (affecting p) ^ (pick [|" ";" so "|]) ^ (makestate p (pick states));;
168 -let ison p = (cop p) ^ " " ^ (pick roas) ^ " " ^ (pick [|"so much ";"too much ";"way too much ";"a lotta ";"a lot of "; "a ton of "; "a whole lotta "; "a whole lot of ";"";""|]) ^ (word ());;
321 +let ison p = (cop p) ^ " " ^ (pick roas) ^ " " ^ (pick [|"so much ";"too much ";"way too much ";"a lotta ";"a lot of "; "a ton of "; "a whole lotta "; "a whole lot of ";"some ";"a little ";"some of this ";"some of that ";"a bit of ";"my ";"your ";"this ";"that ";"that there ";"all this ";"some of her ";"some of his ";"some of our ";"all this ";"all of this ";"her ";"his ";"our ";"";"";""|]) ^ (word ());;
169 322 let isonand p = (ison p) ^ " and " ^ (gotso p)
170 323
171 324 let offer p name (* haaaack *) = (pick greets) ^ " " ^ name ^ (pick [|"! "; ", "; ". "; " - ";|]) ^
172 325 if chance 2 then
173 326 (pick questions) ^ (pick [|" go "; " "|]) ^ (pick vroas) ^ (pick [|" some "; " "|]) ^
174 327 (word ()) ^ (if chance 2 then " and get " ^ (makestate p (pick states)) else "") ^ "?"
175 328 else