procgen  Diff

Differences From Artifact [b5c9249601]:

To Artifact [c18b15fcb7]:


28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51





52



53
54
55
56
57
58

59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113




































































































































114
115
116
117


118
119
120

121
122
123
124
125
126
127
...
142
143
144
145
146
147
148



149
150
151






152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
let range min max = (Random.int (max-min)) + min
let chance n = range 0 n = 0
let pick (r: 'a array) : 'a = r.(range 0 (Array.length r));;
let prefixes = [| "crack"; "crystal"; "powdered"; "raw"; "pure"; "liquid"; "street";
	"super"; "electric"; "diced"; "homemade"; "traditional"; "old-school"; "purified";
	"high-caliber"; "high-octane"; "old-fashioned"; "good old"; "honest-to-god";
	"weapons-grade"; "soviet"; "american"; "canadian"; "british"; "russian";
	"synthetic"; "french"; "cyber"; |]
let word () = (if chance 3 then (pick prefixes) ^ " " else "") ^
	(if chance 5 then "" else pick initials) ^
	(pick nuclei) ^
	(pick finals)
	
let greets = [| "hey"; "whassup"; "what's up"; "what up"; "yo"; "hey there"; "what's shakin'" |]
let names = [| "dude"; "bro"; "man"; "babe"; "sweetheart"; "honey"; "baby"; "hottie"; "girl"; |]
let questions = [| "wanna"; "want to"; "shall we"; "how about we"; |]
let exhorts = [| "we oughta"; "you oughta"; "we ought to"; "you ought to"; "we should";
	"you should"; "let's"; |]
type component = Invariant of string | Numbered of string * string | Poss
type state = Plain of string | Compound of component list
let states = [|
	Plain "high";
	Compound[Invariant "out of"; Poss; Numbered("mind","minds")];
	Compound[Invariant "outta"; Poss; Numbered("mind","minds")];





	Plain "fucked up";



	Plain "wrecked";
	Plain "hammered";
	Plain "buzzed";
	Plain "tweaked";
	Plain "whacked";
	Plain "whacked out";

	Plain "smacked";
	Plain "smacked out";
	Plain "tipsy";
	Plain "snazzy";
	Plain "spooky";
	Plain "crazy";
	Plain "messed up";
	Plain "far out";
	Plain "horny";
	Plain "psycho";
	Plain "loony";
	Plain "wacky";
	Plain "silly";
	Plain "creepy";
	Plain "frazzled";
	Plain "dazzling";
	Plain "wired";
	Plain "peppy";
	Plain "hoovered";
	Plain "turnt";
	Plain "turnt up";
	Plain "tits-up";
	Plain "toasted";
	Plain "roasted";
	Plain "cooked";
	Plain "baked";
	Plain "basted";
	Plain "flunked";
	Plain "flunked out";
	Plain "crazed";
	Plain "stewed";
	Plain "framed for war crimes";
	Plain "ruined";
	Plain "totally ruined";
	Plain "whacked out";
	Plain "creeped out";
	Plain "spunky";
	Plain "spiffy";
	Plain "nifty";
	Plain "wicked";
	Plain "slutty";
	Plain "jazzed";
	Plain "jazzy";
	Plain "fried";
	Plain "hecked";
	Plain "hecked up";
	Plain "hecked out";
	Plain "screwed";
	Plain "screwed up";
	Plain "ousted";
	Plain "thrown out of the mall";
	Plain "cyber";
	Plain "totally online";
	Plain "cybered";
	Plain "downloaded";




































































































































|]
let roas = [| "on"; "shooting up"; "using"; "mainlining"; "snorting"; "vaping"; "smoking"; "cybering";
	"sucking down"; "gargling"; "doing"; "trying"; "guzzling"; "popping"; "downing"; "chewing"; 
	"crunching"; "sniffing"; "zapping"; "downloading"; "dropping"; "cooking up"; "freebasing"|]


let vroas = [| "shoot up"; "mainline"; "snort"; "vape"; "smoke"; "freebase";
	"suck down"; "gargle"; "do"; "try"; "guzzle"; "pop"; "down"; "chew"; "crunch";
	"sniff"; "zap"; "download"; "drop"; "cyber"; "cook up"; |]

module Pronoun = struct
	type t = {
		nom : string; obl : string; gen : string;
		refl : string; cop : string; brevcop : string;
		pl : bool;
	}
	let you = {nom = "you"; obl = "you"; gen = "your"; refl = "yourself";
................................................................................
end
let cop p = Pronoun.(if chance 4 then p.nom ^ " " ^ p.cop else p.nom^p.brevcop)
let makestate p s = 
	let eval c = match c with
		| Invariant i -> i
		| Numbered(sg,pl) -> if p.Pronoun.pl then pl else sg
		| Poss -> p.Pronoun.gen



	in match s with
		| Plain t -> t
		| Compound l -> List.fold_left (fun a t -> if a = "" then a^(eval t) else a^" "^(eval t)) "" l 






let gethigh p = (cop p) ^ (pick [|" getting "; " gonna get "; " "|]) ^ (pick [|"";"so "|])
	^ (makestate p (pick states)) ^ " on " ^ (word ());;
let cantwait p = p.Pronoun.nom ^ " can't wait to get " ^ (makestate p (pick states)) ^ " on " ^ (word ());;
let affecting p =
	if chance 2 then 
		(pick [|
			"it's got"; "it's getting"; "it got"; "it has";
			"it's making"; "it's gonna get"; "it's gonna make"
		|]) ^ " " ^ p.Pronoun.obl
	else Pronoun.(pick [|
		p.nom ^ " got";
		(cop p) ^ " getting";
		(cop p) ^ " gonna get";
		(cop p);
	|]);;
let gotso p = (affecting p) ^ (pick [|" ";" so "|]) ^ (makestate p (pick states));;
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 ());;
let isonand p = (ison p) ^ " and " ^ (gotso p)

let offer p name (* haaaack *) = (pick greets) ^ " " ^ name ^ (pick [|"! "; ", "; ". "; " - ";|]) ^
	if chance 2 then
		(pick questions) ^ (pick [|" go "; " "|]) ^ (pick vroas) ^ (pick [|" some "; " "|]) ^
		(word ()) ^ (if chance 2 then " and get " ^ (makestate p (pick states)) else "") ^ "?"
	else  







|










|
|




>
>
>
>
>
|
>
>
>
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>


|
|
>
>
|
|
|
>







 







>
>
>



>
>
>
>
>
>
|
|
|













|







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

let offer p name (* haaaack *) = (pick greets) ^ " " ^ name ^ (pick [|"! "; ", "; ". "; " - ";|]) ^
	if chance 2 then
		(pick questions) ^ (pick [|" go "; " "|]) ^ (pick vroas) ^ (pick [|" some "; " "|]) ^
		(word ()) ^ (if chance 2 then " and get " ^ (makestate p (pick states)) else "") ^ "?"
	else