procgen  Check-in [ab1b71a07a]

Overview
Comment:updates
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: ab1b71a07a2839ce1f66394f20d03eee8f9f4c4ea84ae46e88fb421f2d0b63be
User & Date: lexi on 2020-10-17 06:26:30
Other Links: manifest | tags
Context
2021-08-29
17:08
$100 will make me extremely more racist check-in: ca1d956dff user: lexi tags: trunk
2020-10-17
06:26
updates check-in: ab1b71a07a user: lexi tags: trunk
2020-10-15
08:07
updates check-in: c572c01910 user: lexi tags: trunk
Changes

Modified monster.ml from [a6081fd51c] to [dce9a8bc7b].

2
3
4
5
6
7
8
9

10
11
12
13
14
15
16


17




18
19
20
21
22
23
24
25


26
27
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
..
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
..
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
	"verve"; "pulchritude"; "beneficence"; "dismay"; "wit";
	"cheer"; "glee"; "malevolence"; "wickedness"; "cruelty";
	"sagacity"; "splendor"; "pride"; "rage"; "fury"; "snazz";
	"foolishness"; "sleepiness"; "curiosity"; "brevity"; "lust";
	"confidence"; "bashfulness"; "awkwardness"; "terror";
	"accuracy"; "insanity"; "sorrow"; "gladness"; "weariness";
	"depression"; "passion"; "dread"; "popularity"; "vulgarity";
    "madness"; "compassion"; "tact";

|]
let mods = [|
	"filled"; "overcome"; "shining"; "vivacious";
	"burning"; "blazing"; "morose"; "gleeful"; "mad";
	"shaking"; "howling"; "snarling"; "gruesome";
    "helpless"; "vibrant"; "desperate"; "triumphant";
    "glum"; "sorrowful"; "struck";


|]




let advs = [|
	"cruelly"; "angrily"; "madly"; "hopelessly"; "thoughtlessly";
	"wickedly"; "hopefully"; "quickly"; "speedily"; "furiously";
	"kindly"; "maniacally"; "tearfully"; "bashfully"; "angrily";
	"wondrously"; "splendidly"; "tremendously"; "badly";
	"terribly"; "foolishly"; "snazzily"; "toplessly"; "balefully";
	"beautifully"; "kindly"; "thoughtfully"; "cautiously";
    "severely"; "wisely"; "lustfully"; "tactfully";


|]
let adjs = [|
	"cheerful"; "wondrous"; "overwhelming"; "adorable";
	"snazzy"; "hopeful"; "desperate"; "lustful"; "dour";
	"sad"; "sorrowful"; "hopeless"; "all-consuming"; "mad";
	"cruel"; "dreadful"; "terrible"; "fearsome"; "inescapable";
	"thoughtless"; "vile"; "bashful"; "topless"; "naked"; "dire";
	"baleful"; "vulgar"; "beautiful"; "horrid"; "cautious";
    "violent"; "wise"; "supreme"; "marvelous"; "tactful";



|]



let verbs = [|
	"shines"; "toots"; "honks"; "mutters"; "whispers"; "growls";
	"roars"; "whuffles"; "warbles"; "howls"; "screams"; "shrieks";
	"quivers"; "dances"; "hops up and down"; "grins"; "mumbles";
	"counsels you"; "glares"; "stares at you"; "looks up"; "gazes at you";
    "marvels"; "laughs"; "sins"; "whistles"; "whungles"; "jangles";
    "twerks"; "blinks"; "blorps"; "flunks"; "planks"; "glitters";
    "gleams"; "grumbles"; "grouches"; "bites you"; "gnaws on you";
    "glimmers"; "gripes"; "plots"; "wonders"; "whittles"; "plays the fiddle";
    "ponders"; "contemplates you"; "scrunches"; "zaps"; "zaps you";




|]

let pick a = a.(Random.int (Array.length a))
type rule = R of string array | S of string | B of rule list | A of rule array | O of rule;;
let rec eval r : string = match r with
	| R x -> pick x
	| S x -> x
	| B x -> List.fold_left (^) "" (List.map eval x)
	| A x -> eval (pick x)
	| O x -> if Random.int 2 = 0 then eval x else ""
let syl () =
................................................................................
	let obs = A [| stop; fric; vstop; nasal; liq; |] in
	let v = R [| "a"; "e"; "u"; "o"; "i"; "ee"; "oo"; "au"; "ai";"oi";|] in
	let sr = A [|
		B[obs; v; O obs];
		B[A [|stop;vstop;fric;vfric;|]; O liq; v; O obs];
	|] in eval sr
	;;
let prefixes = [| "ur-"; "dire "; "dire ur-"; "super "; "ultra "; "great "; "grand "; "terror-"; "horror-"; "giant "; "evil "; "dark ";|]
let name () =
	let size = 1 + (Random.int 3) in
	let rec loop n acc = if n = 0 then acc else loop (n-1) (acc^(syl ())) in
	(if Random.int 2 = 0 then (pick prefixes) else "") ^ loop size "";;

let isvowel c = match c with
	| 'a' | 'e' | 'i' | 'o' | 'u' -> true
................................................................................
		"egads!";
		"how wondrous!";
		"how marvelous!";
		"how gruesome!";
		"how splendid!";
		"oh no!";
	|] in
	let kinds = B [


			R [|"it";"she";"he";|]; S" ";
			A [|
				B[ R verbs; S " ";
					A [|
						B[ S "with "; O(B[R adjs; S" "]); R nouns;];

						R advs;
					|];
				];
				B[S"is "; O(B[R advs;S " ";]); R mods;
					O(B[ S " with "; O(B[R adjs; S" "]); R nouns;]);



				];
			|];
			S "!"; 
	] in
	(pick msgs)^" "^(indef (name()))^"! " ^ (eval kinds);;
	
let rec times n a = if n = 0 then () else (a (); times (n-1) a);;
let () = Random.self_init (); 
(*	times 20 (fun () ->*)
		print_string ((encounter ()) ^ "\n")
(*	)*)







|
>

|




|
>
>

>
>
>
>







|
>
>








|
>
>
>

>
>
>
|









>
>
>
>



<







 







|







 







|
>
>


|

<
>



|
|
>
>
>











2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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
..
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
...
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
	"verve"; "pulchritude"; "beneficence"; "dismay"; "wit";
	"cheer"; "glee"; "malevolence"; "wickedness"; "cruelty";
	"sagacity"; "splendor"; "pride"; "rage"; "fury"; "snazz";
	"foolishness"; "sleepiness"; "curiosity"; "brevity"; "lust";
	"confidence"; "bashfulness"; "awkwardness"; "terror";
	"accuracy"; "insanity"; "sorrow"; "gladness"; "weariness";
	"depression"; "passion"; "dread"; "popularity"; "vulgarity";
    "madness"; "compassion"; "tact"; "evil"; "hate"; "hatred";
    "horror"; "omnipotence"; "charisma"; "radiance"; "depravity";
|]
let mods_w = [|
	"filled"; "overcome"; "shining"; "vivacious";
	"burning"; "blazing"; "morose"; "gleeful"; "mad";
	"shaking"; "howling"; "snarling"; "gruesome";
    "helpless"; "vibrant"; "desperate"; "triumphant";
    "glum"; "sorrowful"; "struck"; "grumbling";
    "griping"; "hissing"; "hooting"; "crackling";
    "glowing"; "radiant";
|]
let mods_f = [|
    "full of"; "struck by"; "overcome by";
|]
let mods = Array.append (Array.map (fun a -> a ^ " with") mods_w) mods_f
let advs = [|
	"cruelly"; "angrily"; "madly"; "hopelessly"; "thoughtlessly";
	"wickedly"; "hopefully"; "quickly"; "speedily"; "furiously";
	"kindly"; "maniacally"; "tearfully"; "bashfully"; "angrily";
	"wondrously"; "splendidly"; "tremendously"; "badly";
	"terribly"; "foolishly"; "snazzily"; "toplessly"; "balefully";
	"beautifully"; "kindly"; "thoughtfully"; "cautiously";
    "severely"; "wisely"; "lustfully"; "tactfully"; "winsomely";
    "watchfully"; "irresponsibly"; "headlessly"; "charismatically";
    "radiantly"; "sinfully"; "lawlessly"; "unlawfully"; "lawfully";
|]
let adjs = [|
	"cheerful"; "wondrous"; "overwhelming"; "adorable";
	"snazzy"; "hopeful"; "desperate"; "lustful"; "dour";
	"sad"; "sorrowful"; "hopeless"; "all-consuming"; "mad";
	"cruel"; "dreadful"; "terrible"; "fearsome"; "inescapable";
	"thoughtless"; "vile"; "bashful"; "topless"; "naked"; "dire";
	"baleful"; "vulgar"; "beautiful"; "horrid"; "cautious";
    "violent"; "wise"; "supreme"; "marvelous"; "tactful"; "evil";
    "wretched"; "fearful"; "awe-inspiring"; "vengeful"; "wrathful";
    "omnipotent"; "charismatic"; "radiant"; "lawless"; "unlawful";
    "lawful";
|]

type rule = R of string array | S of string | B of rule list | A of rule array | O of rule;;
let mkb = Array.map (fun a -> S a)
let verbs = Array.append (mkb [|
	"shines"; "toots"; "honks"; "mutters"; "whispers"; "growls";
	"roars"; "whuffles"; "warbles"; "howls"; "screams"; "shrieks";
	"quivers"; "dances"; "hops up and down"; "grins"; "mumbles";
	"counsels you"; "glares"; "stares at you"; "looks up"; "gazes at you";
    "marvels"; "laughs"; "sins"; "whistles"; "whungles"; "jangles";
    "twerks"; "blinks"; "blorps"; "flunks"; "planks"; "glitters";
    "gleams"; "grumbles"; "grouches"; "bites you"; "gnaws on you";
    "glimmers"; "gripes"; "plots"; "wonders"; "whittles"; "plays the fiddle";
    "ponders"; "contemplates you"; "scrunches"; "zaps"; "zaps you";
    "hoots"; "crackles"; "glows"; "blogs";
|]) [|
    B[S"radiates "; R nouns];
    B[S"oozes "; R nouns];
|]

let pick a = a.(Random.int (Array.length a))

let rec eval r : string = match r with
	| R x -> pick x
	| S x -> x
	| B x -> List.fold_left (^) "" (List.map eval x)
	| A x -> eval (pick x)
	| O x -> if Random.int 2 = 0 then eval x else ""
let syl () =
................................................................................
	let obs = A [| stop; fric; vstop; nasal; liq; |] in
	let v = R [| "a"; "e"; "u"; "o"; "i"; "ee"; "oo"; "au"; "ai";"oi";|] in
	let sr = A [|
		B[obs; v; O obs];
		B[A [|stop;vstop;fric;vfric;|]; O liq; v; O obs];
	|] in eval sr
	;;
let prefixes = [| "ur-"; "dire "; "dire ur-"; "super "; "ultra "; "great "; "grand "; "terror-"; "horror-"; "giant "; "evil "; "dark "; "vorpal "; "royal ";|]
let name () =
	let size = 1 + (Random.int 3) in
	let rec loop n acc = if n = 0 then acc else loop (n-1) (acc^(syl ())) in
	(if Random.int 2 = 0 then (pick prefixes) else "") ^ loop size "";;

let isvowel c = match c with
	| 'a' | 'e' | 'i' | 'o' | 'u' -> true
................................................................................
		"egads!";
		"how wondrous!";
		"how marvelous!";
		"how gruesome!";
		"how splendid!";
		"oh no!";
	|] in
    let kinds =
        let maybe x = O(B[x; S" "]) in
        let adjp = B[maybe (R advs); R adjs] in B [
			R [|"it";"she";"he";|]; S" ";
			A [|
				B[A verbs; S " ";
					A [|

                        B[ S "with "; maybe adjp; R nouns;];
						R advs;
					|];
				];
				B[S"is "; maybe (R advs);
                    A [|
                        B[R mods; S" "; maybe adjp; R nouns;];
                        R mods_w;
                    |]
				];
			|];
			S "!"; 
	] in
	(pick msgs)^" "^(indef (name()))^"! " ^ (eval kinds);;
	
let rec times n a = if n = 0 then () else (a (); times (n-1) a);;
let () = Random.self_init (); 
(*	times 20 (fun () ->*)
		print_string ((encounter ()) ^ "\n")
(*	)*)