File Coverage

blib/lib/Acme/ConspiracyTheory/Random.pm
Criterion Covered Total %
statement 750 762 98.4
branch 146 152 96.0
condition 124 174 71.2
subroutine 136 137 99.2
pod 0 39 0.0
total 1156 1264 91.4


line stmt bran cond sub pod time code
1 1     1   71158 use 5.012;
  1         4  
2 1     1   6 use strict;
  1         2  
  1         22  
3 1     1   5 use warnings;
  1         3  
  1         63  
4              
5             # Artificial stupidity is easier to develop than artificial intelligence.
6              
7             package Acme::ConspiracyTheory::Random;
8              
9             our $AUTHORITY = 'cpan:TOBYINK';
10             our $VERSION = '0.013';
11              
12 1     1   521 use Exporter::Shiny qw( theory bad_punctuation );
  1         4212  
  1         7  
13 1     1   80 use List::Util 1.54 ();
  1         27  
  1         632  
14              
15             sub _RANDOM_ {
16 267040     267040   849639 my $code = List::Util::sample( 1, @_ );
17 267040 100       1000457 ref($code) eq 'CODE' ? goto($code) : $code;
18             }
19              
20             sub _MERGE_ {
21 159993     159993   397707 my ( $redstring, %new ) = @_;
22 159993         672321 %$redstring = ( %$redstring, %new );
23             }
24              
25             sub _UCFIRST_ ($) { # Some sentences start with a non-word character like a quote mark
26 153035     153035   559038 ( my $str = shift )
27 153035         443129 =~ s/ (\w) / uc($1) /xe;
28 153035         673363 $str;
29             }
30              
31             sub celebrity {
32 3884   50 3884 0 9320 my $redstring = shift // {};
33 3884         58442 my $celeb = _RANDOM_(
34             { female => 0, name => 'Bill Gates' },
35             { female => 0, name => 'Jeff Bezos' },
36             { female => 1, name => 'Hillary Clinton' },
37             { female => 0, name => 'Donald Trump' },
38             { female => 0, name => 'Barack Obama' },
39             { female => 0, name => 'Bernie Sanders' },
40             { female => 0, name => 'Joe Biden' },
41             { female => 0, name => 'Bill Clinton' },
42             { female => 1, name => 'Queen Elizabeth II' },
43             { female => 0, name => 'Johnny Depp' },
44             { female => 0, name => 'Q' },
45             { female => 1, name => 'Madonna' },
46             { female => 0, name => 'Sir Paul McCartney' },
47             { female => 1, name => 'Lady Gaga' },
48             { female => 1, name => 'Margaret Thatcher' },
49             { female => 0, name => 'George Soros' },
50             { female => 1, name => 'Beyonce' },
51             { female => 1, name => 'Whitney Houston' },
52             { female => 0, name => 'Joe Rogan' },
53             );
54 3884         23015 _MERGE_( $redstring, celebrity => $celeb );
55 3884         9933 return $celeb->{name};
56             }
57              
58             sub shady_group {
59 31843   50 31843 0 72641 my $redstring = shift // {};
60            
61 31843         49306 my $xx;
62             PICK: {
63 31843         48285 $xx = _RANDOM_(
64             { plural => 1, name => 'the Knights Templar', shortname => 'the Templars' },
65             { plural => 1, name => 'the Illuminati' },
66             { plural => 1, name => 'the Freemasons', shortname => 'the Masons' },
67             { plural => 0, name => 'the Ordo Templi Orientis' },
68             { plural => 1, name => 'the Cabalists' },
69             { plural => 1, name => 'the Followers of the Temple Of The Vampire', shortname => 'the Vampires' },
70             { plural => 0, splural => 1, name => 'the Secret Order of the Knights of the Round Table', shortname => 'the Knights' },
71             { plural => 1, name => 'the Cardinals of the Catholic Church', shortname => 'the Cardinals' },
72             { plural => 0, name => 'the Church of Satan', shortname => 'the Church' },
73             { plural => 1, name => 'the Gnostics' },
74             { plural => 1, name => 'the Elders of Zion', shortname => 'the Elders' },
75             { plural => 1, name => 'the Jesuits' },
76             { plural => 0, name => 'the Babylonian Brotherhood', shortname => 'the Brotherhood' },
77             { plural => 0, name => 'the Hermetic Order of the Golden Dawn', shortname => 'the Order' },
78             { plural => 0, name => 'Opus Dei' },
79             { plural => 0, name => 'the Priory of Sion', shortname => 'the Priory' },
80             { plural => 0, name => 'GameStop' },
81             { plural => 0, splural => 1, name => 'the British Royal Family', shortname => 'the Royals' },
82             { plural => 0, name => 'NASA' },
83             { plural => 1, name => 'the Zionists' },
84             { plural => 0, name => 'the Trump administration' },
85             { plural => 0, name => 'the Biden administration' },
86             { plural => 0, splural => 1, name => 'the Republican party', shortname => 'the Republicans' },
87             { plural => 0, splural => 1, name => 'the Democrat party', shortname => 'the Democrats' },
88             { plural => 0, name => 'the New World Order' },
89             { plural => 1, name => 'the Communists' },
90             { plural => 0, name => 'the Shadow Government' },
91             { plural => 0, name => 'the global financial elite' },
92             { plural => 0, name => 'the global scientific elite' },
93             { plural => 0, name => 'Big Pharma' },
94             { plural => 0, name => 'Big Tobacco' },
95             { plural => 1, splural => 1, name => 'the lizard people', shortname => 'the lizardmen' },
96             { plural => 1, name => 'the grey aliens', shortname => 'the aliens' },
97             { plural => 1, name => 'the big Hollywood studios', shortname => 'Hollywood' },
98             { plural => 0, name => 'the music industry' },
99             { plural => 1, name => 'shape-shifting aliens', shortname => 'the shape-shifters' },
100             { plural => 1, name => 'Satanists' },
101             { plural => 1, name => 'pagans' },
102             { plural => 1, name => 'atheists' },
103             { plural => 1, name => 'people who like pineapple on pizza', shortname => 'the pineapple-lovers' },
104             { plural => 0, name => 'the deep state' },
105             { plural => 1, name => 'the descendents of Jesus', shortname => 'the descendents' },
106             { plural => 1, name => 'Qanon' },
107             { plural => 0, name => 'Microsoft' },
108             { plural => 0, name => 'Twitter' },
109             { plural => 0, name => 'Facebook' },
110             { plural => 0, name => 'Google' },
111             { plural => 0, name => 'the Wall Street establishment', shortname => 'Wall Street' },
112             { plural => 1, name => 'people at 10 Downing Street', shortname => "Downing Street" },
113             { plural => 0, name => 'Goldman Sachs' },
114             { plural => 0, name => 'Skull and Bones (Order 322)', shortname => 'the Order' },
115             { plural => 0, name => 'the London Stock Exchange', shortname => 'LSE' },
116             { plural => 0, name => 'the New York Stock Exchange', shortname => 'NYSE' },
117             { plural => 1, name => 'feminists' },
118             { plural => 1, name => 'Socialists' },
119             sub {
120 599     599   2767 my $planet = _RANDOM_(
121             ['Nibiru', 'the Nibiruans'],
122             ['Venus', 'the Venutians'],
123             ['Mars', 'the Martians'],
124             ['Pluto', 'the Plutonians'],
125             ['the moon', 'the moonlings'],
126             ['the Counter-Earth', 'the anti-Earthlings'],
127             );
128 599         3453 { plural => 1, name => "aliens from ".$planet->[0], shortname => $planet->[1] };
129             },
130 32041         1187416 );
131            
132 1     1   8 no warnings;
  1         2  
  1         12429  
133             redo PICK
134             if ( $redstring->{protagonists} and $redstring->{protagonists}{name} eq $xx->{name} )
135 32041 100 100     560038 || ( $redstring->{antagonists} and $redstring->{antagonists}{name} eq $xx->{name} );
      100        
      100        
136             };
137            
138 31843         86599 _MERGE_( $redstring, shady_group => $xx );
139 31843         82616 return $xx->{name};
140             }
141              
142             sub real_animal {
143 1531   50 1531 0 4280 my $redstring = shift // {};
144            
145 1531         3639 my $animal = _RANDOM_(
146             'cat',
147             'dog',
148             'horse',
149             'penguin',
150             'platypus',
151             'toucan',
152             'whale',
153             'zebra',
154             'frog',
155             'fish',
156             );
157            
158 1531         4514 _MERGE_( $redstring, real_animal => $animal );
159 1531         3384 return $animal;
160             }
161              
162             sub fake_animal {
163 253   50 253 0 727 my $redstring = shift // {};
164            
165 253         642 my $animal = _RANDOM_(
166             'unicorn',
167             'bigfoot',
168             'mermaid',
169             'werewolf',
170             'dragon',
171             'wyvern',
172             'yeti',
173             'Loch Ness monster',
174             );
175            
176 253         844 _MERGE_( $redstring, fake_animal => $animal );
177 253         646 return $animal;
178             }
179              
180             sub objects {
181 486   50 486 0 1487 my $redstring = shift // {};
182            
183 486         1148 my $objects = _RANDOM_(
184             'cars',
185             'TVs',
186             'smartphones',
187             'microwave ovens',
188             'trees',
189             'clothes',
190             );
191            
192 486         1361 _MERGE_( $redstring, objects => $objects );
193 486         1299 return $objects;
194             }
195              
196             sub invention {
197 273   50 273 0 931 my $redstring = shift // {};
198            
199 273         1336 my $invention = _RANDOM_(
200             ['the internet', 0],
201             ['cryptocurrencies', 1],
202             ['smartphones', 1],
203             ['bitcoin', 0],
204             );
205            
206 273         1306 _MERGE_( $redstring, invention => $invention->[0],
207             invention_plural => $invention->[1], );
208 273         897 return $invention->[0];
209             }
210              
211             sub shady_project {
212 1543   50 1543 0 4265 my $redstring = shift // {};
213            
214 1543         3726 my $x = _RANDOM_(
215             'Project Blue Beam',
216             'The Plan',
217             'the Global Warming Hoax',
218             'the New Chronology',
219             'the Great Replacement',
220             'the LGBT Agenda',
221             'the Kalergi Plan',
222             'Eurabia',
223             'the moon-landing hoax',
224             );
225            
226 1543         4735 _MERGE_( $redstring, shady_project => $x );
227 1543         3541 return $x;
228             }
229              
230             sub authority {
231 383   50 383 0 1272 my $redstring = shift // {};
232            
233 383         1171 my $x = _RANDOM_(
234             'the Supreme Court',
235             'the United Nations',
236             'the FBI',
237             'the CIA',
238             'NATO',
239             );
240            
241 383         1267 _MERGE_( $redstring, authority => $x );
242 383         1044 return $x;
243             }
244              
245             sub dark_lord {
246 1670   50 1670 0 4092 my $redstring = shift // {};
247            
248 1670         4042 my $x = _RANDOM_(
249             'the dark lord',
250             'Beelzebub',
251             'Lord Vader',
252             'Lord Satan',
253             'Thanos',
254             'the devil',
255             'the evil one',
256             'the almighty',
257             );
258            
259 1670         5048 _MERGE_( $redstring, dark_lord => $x );
260 1670         4574 return $x;
261             }
262              
263             sub disease {
264 494   50 494 0 1571 my $redstring = shift // {};
265            
266 494         1483 my $disease = _RANDOM_(
267             'cancer',
268             'COVID-19',
269             'HIV',
270             'the common cold',
271             'diabetes',
272             'obesity',
273             'autism',
274             'Ebola',
275             );
276            
277 494         1685 _MERGE_( $redstring, disease => $disease );
278 494         1477 return $disease;
279             }
280              
281             sub disease_cause {
282 253   50 253 0 904 my $redstring = shift // {};
283            
284             my $cause = _RANDOM_(
285             sub {
286 39     39   127 my $food = food( $redstring );
287 39 100       239 ( $food =~ /wine/ ) ? "drinking $food" : "eating $food";
288             },
289             sub {
290 33     33   109 chemicals( $redstring );
291             },
292 253         1786 'non-vegan food',
293             'vegan food',
294             'socialism',
295             'electromagnetic radiation (WiFi!)',
296             'radon gas',
297             );
298            
299 253         1754 _MERGE_( $redstring, disease_cause => $cause );
300 253         681 return $cause;
301             }
302              
303             sub chemicals {
304 1006   50 1006 0 2780 my $redstring = shift // {};
305            
306 1006         2773 my $chemicals = _RANDOM_(
307             'oestrogen',
308             'testosterone',
309             'acid',
310             'birth-control',
311             'fertilizer',
312             'Diet Coke',
313             'heavy hydrogen',
314             '5G',
315             'antimatter',
316             'dark matter',
317             );
318            
319 1006         3255 _MERGE_( $redstring, chemicals => $chemicals );
320 1006         2332 return $chemicals;
321             }
322              
323             sub food {
324 279   50 279 0 854 my $redstring = shift // {};
325            
326 279         601 my $food = _RANDOM_(
327             'apples',
328             'Big Macs',
329             'KFC family buckets',
330             'most wines',
331             'Kraft instant mac and cheese boxes',
332             'bananas',
333             );
334            
335 279         799 _MERGE_( $redstring, food => $food );
336 279         737 return $food;
337             }
338              
339             sub attribute {
340 252   50 252 0 817 my $redstring = shift // {};
341            
342 252         817 my $attr = _RANDOM_(
343             'gay',
344             'insane',
345             'infertile',
346             'immobile',
347             'horny',
348             'female',
349             'fat',
350             'fluorescent',
351             );
352            
353 252         767 _MERGE_( $redstring, attribute => $attr );
354 252         636 return $attr;
355             }
356              
357             sub artifact {
358 265   50 265 0 809 my $redstring = shift // {};
359            
360 265         800 my $artifact = _RANDOM_(
361             'the holy grail',
362             'the golden fleece',
363             'Excalibur',
364             'the ark of the covenant',
365             "Jesus's foreskin",
366             'the Holy Prepuce',
367             'the Book of the Dead',
368             'the Necronomicon',
369             "the Philosopher's Stone",
370             "a fragment of the true cross",
371             "the seal of Solomon",
372             );
373            
374 265         964 _MERGE_( $redstring, artifact => $artifact );
375 265         653 return $artifact;
376             }
377              
378             sub bad_place {
379 855   50 855 0 2504 my $redstring = shift // {};
380            
381             my $bad_place = _RANDOM_(
382             'a secret Antarctic base',
383             'Area 51',
384             'Langley, Virginia',
385             'Guantanamo Bay Detention Camp',
386             'Windsor Castle',
387             'The Pentagon',
388             'Denver International Airport',
389             'the basement of the Vatican',
390 69     69   207 sub { myth_place( $redstring ) },
391             sub {
392 70     70   166 my $p = random_place( $redstring );
393 70         227 "a series of tunnels underneath $p";
394             },
395             sub {
396 80     80   204 my $p = random_place( $redstring );
397 80         276 "a secret base in $p";
398             },
399 855         6346 'a facility inside the hollow Earth',
400             );
401            
402 855         5530 _MERGE_( $redstring, bad_place => $bad_place );
403 855         1973 return $bad_place;
404             }
405              
406             sub random_place {
407 6165   50 6165 0 16607 my $redstring = shift // {};
408            
409 6165         15621 my $random_place = _RANDOM_(
410             'the USA',
411             'the UK',
412             'France',
413             'Italy',
414             'Germany',
415             'Spain',
416             'Egypt',
417             'Israel',
418             'Lebanon',
419             'Syria',
420             'Japan',
421             'China',
422             'Brazil',
423             'Argentina',
424             'Chile',
425             'Tunisia',
426             'Antarctica',
427             'Norway',
428             'Australia',
429             'New Zealand',
430             );
431            
432 6165         16156 _MERGE_( $redstring, random_place => $random_place );
433 6165         13658 return $random_place;
434             }
435              
436             sub myth_place {
437 579   50 579 0 1664 my $redstring = shift // {};
438            
439 579         1512 my $place = _RANDOM_(
440             'the Garden of Eden',
441             'the lost city of Atlantis',
442             'the final resting place of Noah\'s Ark',
443             'the umbilicus mundi',
444             'Camelot',
445             "Lucifer's crypt",
446             "Jesus's grave",
447             "Jesus's true birthplace",
448             'the entrance to the hollow Earth',
449             'the REAL Stonehenge',
450             );
451            
452 579         1584 _MERGE_( $redstring, myth_place => $place );
453 579         1327 return $place;
454             }
455              
456             sub cryptids {
457 511   50 511 0 1576 my $redstring = shift // {};
458            
459 511         1292 my $cryptids = _RANDOM_(
460             'vampires',
461             'ghosts',
462             'werewolves',
463             'demons',
464             'angels',
465             'skinwalkers',
466             'elves',
467             'goblins',
468             'mermaids',
469             );
470            
471 511         1490 _MERGE_( $redstring, cryptids => $cryptids );
472 511         1203 return $cryptids;
473             }
474              
475             sub fiction {
476 3058   100 3058 0 10011 my $redstring = shift // {};
477            
478 3058         26885 my $fiction = _RANDOM_(
479             { title => 'Harry Potter', author => 'J K Rowling' },
480             { title => 'Tintin', author => 'Herge' },
481             { title => 'Star Wars', author => 'George Lucas' },
482             { title => 'Avengers: Age of Ultron', author => 'Kevin Feige' },
483             { title => 'The Book of Mormon', author => 'Joseph Smith' },
484             { title => 'Lord of the Rings', author => 'J R R Tolkien' },
485             { title => 'The Chronicles of Narnia', author => 'C S Lewis' },
486             { title => 'Game of Thrones', author => 'George R R Martin' },
487             { title => 'Spider-Man', author => 'Stan Lee' },
488             );
489            
490 3058         14143 _MERGE_( $redstring, fiction => $fiction );
491 3058         10268 return $fiction->{title};
492             }
493              
494             sub precious_resource {
495 3359   50 3359 0 7683 my $redstring = shift // {};
496            
497 3359         8037 my $resource = _RANDOM_(
498             'pineapple',
499             'oil',
500             'coal',
501             'uranium',
502             'holy water',
503             'diamond',
504             'blood',
505             'gold',
506             'silver',
507             'neutron star material',
508             'Belle Delphine bath water',
509             'crystals',
510             );
511            
512 3359         8598 _MERGE_( $redstring, precious_resource => $resource );
513 3359         7737 return $resource;
514             }
515              
516             sub precious_resource_with_quantity {
517 2853   50 2853 0 7831 my $redstring = shift // {};
518 2853         5696 my $resource = precious_resource( $redstring );
519 2853         6816 my $quantity = _RANDOM_(
520             'a warehouse full',
521             'a lot',
522             'unknown quantities',
523             'vast amounts',
524             'unimaginable quantities',
525             'unspeakable quantities',
526             '5.3 metric pounds',
527             '6.9 Imperial litres',
528             '666 tonnes',
529             );
530 2853         8377 "$quantity of $resource";
531             }
532              
533             sub mind_control_device {
534 507   50 507 0 1393 my $redstring = shift // {};
535              
536 507         4290 my @mc = (
537             ['chemtrails', 1],
538             ['mind control drugs in the water', 1],
539             ['5G', 0],
540             ['WiFi', 0],
541             ['microchips implanted at birth', 1],
542             ['vaccines', 1],
543             ['childhood indoctrination', 0],
544             ['neurolinguistic programming', 0],
545             ['video games', 1],
546             ['mass media', 1],
547             ['space lasers', 1],
548             ['hypnotism', 0],
549             );
550            
551 507         1248 my $mc = _RANDOM_(@mc);
552            
553 507         1676 _MERGE_( $redstring, mind_control_device => $mc->[0] );
554 507         1664 _MERGE_( $redstring, mind_control_device_plural => $mc->[1] );
555 507         2110 return $mc->[0];
556             }
557              
558             sub future_time {
559 1006   50 1006 0 3152 my $redstring = shift // {};
560            
561 1006         2670 my $time = _RANDOM_(
562             'in 2030',
563             'by the end of the century',
564             'in 2666',
565             'when Queen Elizabeth II dies',
566             'when the ice caps melt',
567             'next Christmas',
568             );
569            
570 1006         3274 _MERGE_( $redstring, future_time => $time );
571 1006         2444 return $time;
572             }
573              
574             sub splural {
575 120167     120167 0 182609 my $a = shift;
576 120167 100       232560 if (defined $a->{splural}) {
577 10362         24834 return $a->{splural};
578             }
579 109805         221661 return $a->{plural};
580             }
581              
582             sub a_long_time {
583 2495   100 2495 0 7996 my $redstring = shift // {};
584            
585 2495         4904 my @extras = ();
586 2495         6258 for my $actor ( qw/ protagonists antagonists / ) {
587             push @extras, sub {
588 362 100   362   1151 my $have = splural( $redstring->{$actor} ) ? 'have' : 'has';
589 362   66     2132 "for as long as " . ($redstring->{$actor}{shortname}//$redstring->{$actor}{name}) . " $have existed";
590 4990 100       19690 } if $redstring->{$actor}{name};
591             }
592            
593 2495         6675 my $time = _RANDOM_(
594             'since 1492',
595             'since 1666',
596             'since 1066',
597             'since the time of Christ',
598             'since time immemorial',
599             'since the dawn of time',
600             'for hundreds of years',
601             'for millennia',
602             @extras,
603             );
604            
605 2495         7095 _MERGE_( $redstring, a_long_time => $time );
606 2495         11767 return $time;
607             }
608              
609             sub misinformation {
610 1478   50 1478 0 4398 my $redstring = shift // {};
611            
612             my $info = _RANDOM_(
613             'the Earth is round',
614             'the Earth goes around the sun',
615             'humans are animals',
616             'birds are dinosaurs',
617             sub {
618 83     83   392 $redstring->{topic} = { name => 'the moon', plural => 0 };
619 83         239 'men have walked on the moon';
620             },
621             sub {
622 77     77   393 $redstring->{topic} = { name => 'electricity', plural => 0 };
623 77         208 'electricity exists';
624             },
625             sub {
626 91     91   318 $redstring->{topic} = { name => 'magnetism', plural => 0 };
627 91         220 'magnetism is real';
628             },
629             sub {
630 94     94   406 $redstring->{topic} = { name => 'gravity', plural => 0 };
631 94         229 'gravity is real';
632             },
633             sub {
634 96     96   391 $redstring->{topic} = { name => 'outer space', plural => 0 };
635 96         239 'space is real';
636             },
637             sub {
638 78     78   314 $redstring->{topic} = { name => 'viruses', plural => 1 };
639 78         193 'viruses are real';
640             },
641             sub {
642 92     92   375 $redstring->{topic} = { name => 'vaccines', plural => 1 };
643 92         211 'vaccines are safe';
644             },
645             sub {
646 87     87   266 my $animal = real_animal( $redstring );
647 87         297 "the $animal is real";
648             },
649             sub {
650 88     88   248 my $place = random_place( $redstring );
651 88         287 "$place is real";
652             },
653             sub {
654 82     82   295 $redstring->{topic} = { name => 'carbon dating', plural => 0 };
655 82         163 'the Earth is 4.5 billion years old';
656             },
657             sub {
658 87     87   351 $redstring->{topic} = { name => 'radiocarbon dating', plural => 0 };
659 87         201 'the universe is 14 billion years old';
660             },
661             sub {
662 105     105   452 $redstring->{topic} = { name => 'pigeons', plural => 1 };
663 105         256 'dinosaurs are real';
664             },
665             sub {
666 86     86   340 $redstring->{topic} = { name => 'surveillance drones', plural => 1 };
667 86         196 'birds are real';
668             },
669 1478         22370 );
670            
671 1478         18788 _MERGE_( $redstring, misinformation => $info );
672 1478         3410 return $info;
673             }
674              
675             sub victim {
676 3005   50 3005 0 8766 my $redstring = shift // {};
677            
678 3005         8327 my $victim = _RANDOM_(
679             'Elvis Presley',
680             'JFK',
681             'Hitler',
682             'Robin Williams',
683             'Martin Luther King Jr',
684             'Abraham Lincoln',
685             'King Charles I',
686             'Marilyn Monroe',
687             'Tupac Shakur',
688             'Princess Di',
689             'Jeff Buckley',
690             'Andy Kaufman',
691             'Jim Morrison',
692             'Brandon Lee',
693             'Lee Harvey Oswald',
694             'Archduke Franz Ferdinand',
695             'the original Avril Lavigne',
696             'Malcolm X',
697             'John Lennon',
698             'Michael Jackson',
699             );
700            
701 3005         9026 _MERGE_( $redstring, victim => $victim );
702 3005         6817 return $victim;
703             }
704              
705             sub physicist { # and chemists
706 1535   50 1535 0 4502 my $redstring = shift // {};
707            
708 1535         3920 my $x = _RANDOM_(
709             'Nikola Tesla',
710             'Benjamin Franklin',
711             'Albert Einstein',
712             'Isaac Newton',
713             'Stephen Hawking',
714             'Henry Cavendish',
715             );
716            
717 1535         4729 _MERGE_( $redstring, physicist => $x );
718 1535         3624 return $x;
719             }
720              
721             sub biologist { # and medics
722 1510   50 1510 0 4081 my $redstring = shift // {};
723            
724 1510         3663 my $x = _RANDOM_(
725             'Charles Darwin',
726             'Edward Jenner',
727             'Robert Koch',
728             'Carl Linneaus',
729             'Alexander Fleming',
730             );
731            
732 1510         3995 _MERGE_( $redstring, biologist => $x );
733 1510         3779 return $x;
734             }
735              
736             sub website {
737 5459   100 5459 0 18737 my $redstring = shift // {};
738              
739 5459         12205 my $x = _RANDOM_(
740             'Tumblr',
741             'Pinterest',
742             'Youtube',
743             'Facebook',
744             'Wikipedia',
745             'Twitter',
746             'Instagram',
747             'Geocities',
748             'Parler',
749             );
750              
751 5459         13473 _MERGE_( $redstring, website => $x );
752 5459         29596 return $x;
753             }
754              
755             sub fatuous {
756 2696   50 2696 0 10742 my $redstring = shift // {};
757              
758 2696         7294 my $x = _RANDOM_(
759             "We all know what's going on here.",
760             "It's plain and simple common sense.",
761             'Most people are in denial.',
762             "Isn't it obvious?",
763             "Wake up, sheeple!",
764             "It's obvious if you connect the dots.",
765             "They leave clues to mock us.",
766             "It's not funny!",
767             "There are too many coincidences to ignore.",
768             );
769              
770 2696         8381 _MERGE_( $redstring, clone => $x );
771 2696         9181 return $x;
772             }
773              
774             sub clone {
775 610   50 610 0 1667 my $redstring = shift // {};
776              
777 610         1673 my $x = _RANDOM_(
778             'an alien',
779             'an avatar',
780             'a CGI replica',
781             'a clone',
782             'a cyborg',
783             'a hologram',
784             'a look-alike',
785             'a robot',
786             'a shapeshifter',
787             );
788              
789 610         1748 _MERGE_( $redstring, clone => $x );
790 610         1849 return $x;
791             }
792              
793             sub lies {
794 27798   50 27798 0 91106 my $redstring = shift // {};
795              
796 27798         58858 my $x = _RANDOM_(
797             'obvious lies',
798             'a big coverup',
799             'a fairy tale',
800             'disinformation',
801             );
802            
803 27798         67604 _MERGE_( $redstring, lies => $x );
804 27798         74541 return $x;
805             }
806              
807             sub evidence {
808 21423   50 21423 0 53893 my $redstring = shift // {};
809            
810             my @x = (
811             "there's a video about it on YouTube",
812 1781     1781   4501 sub { 'there was something about it on ' . website() },
813             "the voices told me",
814             "I had a dream",
815 1821     1821   4389 sub { website() . ' is censoring me' },
816 1850     1850   5169 sub { website() . ' was down this morning' },
817 21423         112514 );
818              
819 21423 100       60016 if ( my $c = $redstring->{disease_cause} ) {
820 243         748 push @x, (
821             "$c is addictive",
822             );
823             }
824            
825 21423 100       50881 if ( my $m = $redstring->{misinformation} ) {
826 1478         6505 push @x, (
827             "they indoctrinate people about '$m' at schools and if it were the truth they wouldn't need to",
828             "'$m' gets pushed down our throats by mass media",
829             "'$m' is a false-flag operation",
830             );
831             }
832            
833 21423 100       50543 if ( my $auth = $redstring->{authority} ) {
834 383         1868 push @x, (
835             "$auth are the obvious people to go to",
836             "$auth are the only ones with the power to stop them",
837             "$auth are able to save us",
838             );
839             }
840              
841 21423 100       48045 if ( my $p = $redstring->{myth_place} ) {
842 548         3205 push @x, (
843             "there are clues about $p in the Bible",
844             "there are clues about $p in the Voynich manuscript",
845             "$p is on some old maps",
846             "$p is on Google Maps",
847             );
848             }
849              
850 21423 100       48375 if ( my $art = $redstring->{artifact} ) {
851 256         1307 push @x, (
852             "$art isn't in any museum",
853             "$art must be somewhere",
854             "$art is out there",
855             "$art can be found with GPS",
856             );
857             }
858              
859 21423 100       46241 if ( my $proj = $redstring->{shady_project} ) {
860 1543         6655 push @x, (
861             "everybody knows $proj is happening soon",
862             "$proj is well-funded",
863             "$proj is an open secret",
864             "there is so much evidence for $proj",
865             );
866             }
867            
868 21423 100       46111 if ( my $dl = $redstring->{dark_lord} ) {
869 1558         7952 push @x, (
870             "$dl is known to be growing in power",
871             "$dl has never seemed more powerful",
872             "$dl needs to be getting power from somewhere",
873             "$dl told me",
874             "I have seen signs from $dl",
875             );
876             }
877            
878 21423 100 100     98288 if ( my $v = $redstring->{victim} // $redstring->{physicist} // $redstring->{biologist} ) {
      100        
879             push @x, (
880             "$v died too young",
881             "$v sent a letter containing the truth before dying",
882             sub {
883 335     335   949 my $clone = clone( $redstring );
884 335         1757 "when they did an autopsy on $v it turned out it was $clone",
885             },
886             "they never did an autopsy on $v",
887             "$v wrote a will",
888             sub {
889 341     341   909 my $g = shady_group( $redstring );
890 341         1943 "$v was secretly one of $g";
891             },
892             sub {
893 313     313   927 my $animal = real_animal( $redstring );
894 313         1753 "when they did an autopsy on $v it turned out they were secretly a $animal in a human suit";
895             },
896 5797         43459 );
897             }
898              
899 21423 100 100     73279 if ( my $v = $redstring->{physicist} // $redstring->{biologist} ) {
900 3045         10358 push @x, (
901             "$v isn't mentioned in Aristotle's writing",
902             "$v hasn't given a lecture in months",
903             "$v isn't taken seriously by TRUE SCIENTISTS",
904             );
905             }
906              
907 21423 100       48152 if ( my $c = $redstring->{celebrity} ) {
908 3874 100       8955 if ( $c->{female} ) {
909 1452         3521 push @x, (
910             "you can't trust women",
911             "she said so on her Twitter",
912             );
913             }
914             else {
915 2422         5000 push @x, (
916             "you can't trust men",
917             "he said so on his Twitter",
918             );
919             }
920             }
921              
922 21423 100       45491 if ( my $f = $redstring->{fiction} ) {
923            
924             push @x, (
925             $f->{title} . " has secret messages encoded in it with numerology",
926             $f->{title} . " is satanic",
927             sub {
928 199     199   645 my $g = shady_group( $redstring );
929 199 100       576 my $has = splural( $redstring->{shady_group} ) ? 'have' : 'has';
930 199         1257 $f->{author} . " $has ties to $g";
931             },
932             sub {
933 203     203   598 my $b = bad_place( $redstring );
934 203         1159 $f->{author} . " got taken to $b for questioning";
935             },
936 1996         12373 );
937            
938 1996 100       6986 if ( my $p = $redstring->{random_place} ) {
939             push @x, (
940             $f->{author} . " had a secret home in $p",
941 309         1427 $f->{author} . " was secretly born in $p",
942             );
943             }
944             }
945            
946 21423 100 100     70862 if ( my $animal = $redstring->{real_animal} // $redstring->{fake_animal} ) {
947             push @x, (
948             "the $animal wasn't mentioned in the Bible",
949             "the $animal was mentioned in the Satanic Verses",
950             "the $animal looks kind of weird",
951             "nobody has ever seen a $animal in real life",
952             "the $animal obviously isn't native to this planet",
953 112     112   251 sub { "${ \ shady_group($redstring) } sacrifice $animal${\'s'} to ${ \ dark_lord($redstring) }" },
  112         355  
  112         287  
  112         340  
954 1668         13331 "the $animal looks bigger in real life",
955             "the $animal makes a funny noise",
956             "Alex Jones did a podcast about the $animal",
957             );
958             }
959            
960 21423 100       44917 if ( my $mc = $redstring->{mind_control_device} ) {
961 491         1366 my $time = a_long_time();
962 491         1071 my $mcp = $redstring->{mind_control_device_plural};
963 491         1074 my $is = 'is';
964 491         911 my $has = 'has';
965 491         1098 my $was = 'was';
966 491 100       1467 if ($mcp) {
967 265         561 $is = 'are';
968 265         492 $has = 'have';
969 265         549 $was = 'were';
970             }
971             push @x, (
972             "everybody knows $mc $is real",
973 40     40   158 sub { "$mc $has been researched by ${ \ shady_group($redstring) } $time" },
  40         114  
974 55     55   195 sub { "$mc $was used to conceal ${ \ shady_group($redstring) } $time" },
  55         161  
975 47     47   162 sub { "$mc $was used to infiltrate ${ \ shady_group($redstring) }" },
  47         113  
976 491         4535 );
977             }
978              
979 21423 100       47629 if ( my $ft = $redstring->{future_time} ) {
980 972         3565 push @x, (
981             "some of the few people still alive $ft time-travelled back to tell us",
982 972         2337 "the people still alive $ft sent us hidden messages in ${ \ fiction() }",
983             "it will all become clear $ft",
984             );
985             }
986              
987 21423 100       47517 if ( my $d = $redstring->{disease} ) {
988 476         2797 push @x, (
989             "patients with $d keep disappearing from hospitals",
990             "patients with $d are being silenced by the government",
991             "doctors working on $d are being killed",
992             "$d probably isn't even a real disease",
993             "nobody has ever died of $d",
994             );
995             }
996              
997 21423 100       44718 if ( my $f = $redstring->{food} ) {
998 266         1253 push @x, (
999             "$f don't taste like they used to",
1000             "$f smell funny",
1001             "$f make me feel sick",
1002             "I don't like $f",
1003             );
1004             }
1005              
1006 21423 100       43625 if ( my $chem = $redstring->{chemicals} ) {
1007 976         4242 push @x, (
1008             "$chem isn't on the periodic table",
1009             "$chem isn't real",
1010             "$chem isn't natural",
1011             "you'd have to be stupid to think $chem is real",
1012             );
1013             }
1014              
1015 21423 100       46049 if ( my $r = $redstring->{precious_resource} ) {
1016 3193         5752 my ( $bad, $are, $r_are );
1017 3193 100       8939 $redstring->{shady_group}{name} or shady_group( $redstring );
1018 3193         7124 foreach ( qw/ antagonist protagonist shady_group / ) {
1019 9579 100       24577 if ( $redstring->{$_}{name} ) {
1020 3193         6283 $bad = $redstring->{$_}{name};
1021 3193 100       8477 $are = $redstring->{$_}{plural} ? 'are' : 'is';
1022 3193 100       13522 $r_are = ($r =~ /s$/) ? 'are' : 'is';
1023             }
1024             }
1025 3193         23097 push @x, (
1026             "the Wikipedia entry for $r keeps getting edited by $bad",
1027             "$bad keeps buying $r secretly on the stock market",
1028             "the global supply of $r is at an all time low",
1029             "have you ever seen $r for real with your own eyes",
1030             "$r $r_are so damn expensive",
1031             "$r $r_are really rare",
1032             "Alex Jones says $bad $are linked to $r",
1033             );
1034             }
1035              
1036 21423 100       51751 if ( my $topic = $redstring->{topic} ) {
1037 6925         13039 my $topicname = $topic->{name};
1038 6925 100       14822 my $have = $topic->{plural} ? 'have' : 'has';
1039 6925         38727 push @x, (
1040             "there's hidden clues in the Wikipedia page about $topicname",
1041             "THEY let it slip during an edit war in a Wikipedia page about $topicname",
1042             "Bible numerology has clues about $topicname",
1043             "the Voynich manuscript has clues about $topicname",
1044             "$topicname $have always been suspicious",
1045             "$topicname $have connections to THEM",
1046             "nobody really understands $topicname",
1047             "all my posts about $topicname keep getting taken down by Tumblr",
1048             );
1049             }
1050              
1051 21423 100 100     76130 if ( my $p = $redstring->{random_place} // $redstring->{bad_place} ) {
1052             my $bad = $redstring->{antagonist}{name}
1053             // $redstring->{protagonist}{name}
1054             // $redstring->{shady_group}{name}
1055 6346   33     41102 // shady_group( $redstring );
      66        
      66        
1056 6346         27144 push @x, (
1057             "the Wikipedia entry for $p keeps getting edited by $bad",
1058             # This has singular/plural problems - how to solve?
1059             "$bad has ties to $p",
1060             "$p probably isn't a real place anyway",
1061             );
1062             }
1063              
1064 21423         47562 for my $actor ( qw/ protagonists antagonists / ) {
1065 42846 100       111617 next unless $redstring->{$actor}{name};
1066            
1067 27798   66     76701 my $name = $redstring->{$actor}{shortname} // $redstring->{$actor}{name};
1068 27798 100       62354 my $have = splural( $redstring->{$actor} ) ? 'have' : 'has';
1069 27798 100       56569 my $are = splural( $redstring->{$actor} ) ? 'are' : 'is';
1070 27798 100       52049 my $s = splural( $redstring->{$actor} ) ? '' : 's';
1071 27798 100       53746 my $ies = splural( $redstring->{$actor} ) ? 'y' : 'ies';
1072            
1073 27798         105596 ( my $fbname = $name ) =~ s/^the //i;
1074 27798         60107 $fbname = _UCFIRST_ $fbname;
1075              
1076 27798         53649 my $lies = lies();
1077            
1078 27798         195749 push @x, (
1079             "$name $have included it in their manifesto",
1080             "$name $have been strangely quiet about it",
1081             "$name $are always untrustworthy",
1082             "$name $are controlling everything",
1083             "if you Google for $name there's loads of info",
1084             "the '$fbname Truth' Facebook page says so",
1085             "the '$fbname Exposed' website says so",
1086             "$name even admit$s it",
1087             "$name den$ies it but that is $lies",
1088             );
1089            
1090 27798 100 100     107903 if ( my $animal = $redstring->{real_animal} // $redstring->{fake_animal} ) {
1091 1815         5187 push @x, "$name $have a picture of the $animal on their Wikipedia entry";
1092             }
1093            
1094 27798 100       64148 if ( my $place = $redstring->{random_place} ) {
1095 6115         16339 push @x, "$name $have a secret base in $place";
1096             }
1097            
1098 27798 100       75865 if ( my $topic = $redstring->{topic} ) {
1099 8804         14712 my $topicname = $topic->{name};
1100 8804         18451 push @x, (
1101 8804 100       59997 "$name ${( $redstring->{$actor}{plural} ? \'keep' : \'keeps' )} editing the Wikipedia page about $topicname",
1102             "$name $are known to have ties to $topicname",
1103             "'$name' is almost an anagram of '$topicname'",
1104             "'$name' is the Hebrew word for '$topicname'",
1105             "'$name' is an anagram of '$topicname' (if you spell it wrong)",
1106             );
1107             }
1108             }
1109              
1110 21423         46821 my @evidences = List::Util::uniq( map { _RANDOM_(@x) } 1..2 );
  42846         96375  
1111            
1112 21423 100       72075 if ( @evidences == 2 ) {
    50          
1113 20779         48770 my ( $e1, $e2 ) = @evidences;
1114             return _RANDOM_(
1115             "You can tell this is the truth because $e1, and $e2.",
1116             ( ( "I know because $e1, and $e2." ) x 6 ),
1117             "You just need to connect the dots. " . _UCFIRST_( "$e1 and $e2." ),
1118             "I used to be asleep like you, but then I saw the clues. " . _UCFIRST_( "$e1, and $e2. WAKE UP!" ),
1119             "THEY HIDE THE TRUTH IN PLAIN SIGHT. " . _UCFIRST_( "$e1, and $e2." ),
1120             "You won't believe how deep the rabbit hole goes. " . _UCFIRST_( "$e1, and $e2." ),
1121 1385     1385   5606 sub { _UCFIRST_("$e1, and $e2. " . fatuous()) },
1122             sub {
1123 1311     1311   3687 my $e3 = uc _RANDOM_(@x);
1124 1311         3445 my $fatuous = fatuous();
1125 1311         5826 _UCFIRST_( "$e1, and $e2. $fatuous $e3!" );
1126             },
1127             sub {
1128 1400     1400   4197 my $e3 = uc _RANDOM_(@x);
1129 1400         6568 _UCFIRST_( "$e1, and $e2. They leave clues to mock us! $e3! MOCK! MOCK!" );
1130             },
1131             sub {
1132 1422     1422   3169 my $t = {};
1133 1422         5069 theory($t);
1134 1422         7024 _UCFIRST_( "$e1, and $e2. Isn't it obvious? Also: " . $t->{base_theory} );
1135             },
1136 20779         102534 );
1137             }
1138             elsif ( @evidences == 1 ) {
1139 644         1550 my ( $e1 ) = @evidences;
1140 644         2682 return _RANDOM_(
1141             "You can tell the truth because $e1.",
1142             _UCFIRST_("$e1 and that reveals the truth."),
1143             "The truth is obvious if you're not a sheep, $e1.",
1144             );
1145             }
1146            
1147 0         0 return _RANDOM_(
1148             'The truth is plain to see.',
1149             "You're blind if you can't see the truth.",
1150             "The truth is obvious if you're not a sheep.",
1151             );
1152             }
1153              
1154             sub hidden_truth {
1155 9599   100 9599 0 25091 my $redstring = shift // {};
1156            
1157             my $truth = _RANDOM_(
1158             sub { # wrap classics in a sub so they don't come up too often
1159             _RANDOM_(
1160             sub {
1161 16         89 $redstring->{topic} = { name => 'geology', plural => 0 };
1162 16         38 'the Earth is flat';
1163             },
1164             sub {
1165 6         28 $redstring->{topic} = { name => 'Inner Space (1987)', plural => 0 };
1166 6         18 'space is fake';
1167             },
1168             sub {
1169 12         55 $redstring->{topic} = { name => 'theology', plural => 0 };
1170 12         37 'God is real';
1171             },
1172             sub {
1173 10         45 $redstring->{topic} = { name => 'Buddhism', plural => 0 };
1174 10         28 'reincarnation is true';
1175             },
1176             sub {
1177 5         162 $redstring->{topic} = { name => 'germs', plural => 1 };
1178 5         21 "germs aren't real";
1179             },
1180             sub {
1181 8         33 $redstring->{topic} = { name => 'viruses', plural => 1 };
1182 8         26 "viruses aren't real";
1183             },
1184             sub {
1185 8         49 $redstring->{topic} = { name => 'MKUltra', plural => 0 };
1186 8         24 "MKUltra is still happening";
1187             },
1188             sub {
1189 11         50 $redstring->{topic} = { name => 'Jeffrey Epstein', plural => 0 };
1190 11         32 "Epstein didn't kill himself";
1191             },
1192             sub {
1193 8         39 $redstring->{topic} = { name => "Sgt Pepper's Lonely Hearts Club Band", plural => 0 };
1194 8         24 "Paul McCartney died in a car crash in 1966";
1195             },
1196             sub {
1197 8         36 $redstring->{topic} = { name => 'Stonehenge', plural => 0 };
1198 8   100     48 $redstring->{random_place} //= 'Somerset';
1199 8         18 "the aliens built Stonehenge";
1200             },
1201             sub {
1202 6         30 $redstring->{topic} = { name => 'the Sphinx', plural => 0 };
1203 6   100     32 $redstring->{random_place} //= 'Egypt';
1204 6         15 "the aliens built the Pyramids";
1205             },
1206             sub {
1207 8         49 $redstring->{topic} = { name => 'Loch Ness', plural => 0 };
1208 8   100     56 $redstring->{random_place} //= 'Scotland';
1209 8         24 "the Loch Ness monster is real";
1210             },
1211             sub {
1212 5         22 $redstring->{topic} = { name => 'grain farming', plural => 0 };
1213 5   100     28 $redstring->{random_place} //= 'Alabama';
1214 5         12 "crop circles are caused by aliens";
1215             },
1216             sub {
1217 7         33 $redstring->{topic} = { name => 'kidnapping', plural => 0 };
1218 7   100     41 $redstring->{random_place} //= 'Alabama';
1219 7         21 "aliens abduct people for probing";
1220             },
1221             sub {
1222 12         53 $redstring->{topic} = { name => 'steal beams', plural => 1 };
1223 12   100     68 $redstring->{random_place} //= 'New York';
1224 12         28 "9/11 was an inside job";
1225             },
1226             sub {
1227 11         33 my $badevent = _RANDOM_(
1228             'Columbine',
1229             'Sandy Hook',
1230             'the Boston Marathon Bombing',
1231             'Malaysia Airlines Flight 370',
1232             'the JFK assassination',
1233             );
1234 11         50 $redstring->{topic} = { name => 'false flag operations', plural => 1 };
1235 11         45 "$badevent was orchestrated by the US government";
1236             },
1237             sub {
1238 16         86 $redstring->{topic} = { name => 'glaciers', plural => 1 };
1239 16   100     93 $redstring->{random_place} //= 'Greenland';
1240 16         42 "global warming is a hoax";
1241             },
1242             sub {
1243 11         55 $redstring->{topic} = { name => 'geology', plural => 0 };
1244 11         33 'the US government knows exactly when Yellowstone will erupt';
1245             },
1246             sub {
1247 12         53 $redstring->{topic} = { name => 'cloud seeding', plural => 0 };
1248 12         67 "the government controls the weather";
1249             },
1250             sub {
1251 8         39 $redstring->{topic} = { name => 'Snapple', plural => 0 };
1252 8         19 "Snapple is owned by the KKK";
1253             },
1254             sub {
1255 16         52 my $disease = disease( $redstring );
1256 16         87 $redstring->{topic} = { name => 'biological warfare', plural => 0 };
1257 16         70 "$disease was developed as a bioweapon";
1258             },
1259             sub {
1260 8         40 $redstring->{topic} = { name => 'gas chambers', plural => 1 };
1261 8   100     88 $redstring->{random_place} //= 'Germany';
1262 8         23 "the holocaust never happened";
1263             },
1264             sub {
1265 7         38 $redstring->{topic} = { name => 'fascism', plural => 0 };
1266 7   100     37 $redstring->{random_place} //= 'Australia';
1267 7         19 "Antifa International have been starting wildfires";
1268             },
1269             sub {
1270 7         35 $redstring->{topic} = { name => 'phantom time', plural => 0 };
1271 7         24 "the years between 614 and 911 never happened";
1272             },
1273             sub {
1274 9         42 $redstring->{topic} = { name => 'Nazis', plural => 1 };
1275 9         31 "there is a Nazi base on the moon";
1276             },
1277             sub {
1278 10         39 $redstring->{topic} = { name => 'Nazis', plural => 1 };
1279 10         31 "there is a Nazi base in Antarctica";
1280             },
1281             sub {
1282 9         43 $redstring->{topic} = { name => 'wrestling', plural => 0 };
1283 9         25 "all professional sports are scripted";
1284             },
1285             sub {
1286 7         30 my $website = website( $redstring );
1287             my $spies = _RANDOM_(
1288             'spies',
1289             'the CIA',
1290             'GCHQ',
1291             'the NSA',
1292             'the Kremlin',
1293             'Ipsos MORI',
1294             sub {
1295 0         0 my $g = shady_group( $redstring );
1296 0 0       0 $redstring->{shady_group}{plural} ? $g : "spies from $g";
1297             }
1298 7         39 );
1299 7         48 $redstring->{topic} = { name => 'biscuits', plural => 1 };
1300 7         31 "$spies are using cookies to see everything you look at on $website";
1301             },
1302 261     261   10374 );
1303             },
1304             sub {
1305 240     240   985 $redstring->{topic} = { name => 'the Mandela effect', plural => 0 };
1306 240         641 _RANDOM_(
1307             'Looney Tunes used to be Looney Toons',
1308             'the Berenstain Bears used to be spelled Berenstein',
1309             'Curious George used to have a tail',
1310             'Febreze used to have another E in it',
1311             'Froot Loops used to be Fruit Loops',
1312             'the Monopoly man is supposed to have a monocle',
1313             'Kitkat used to have a hyphen',
1314             'the Mona Lisa used to smile more',
1315             'C-3PO never used to have a silver leg',
1316             'Darth Vader said Luke I Am Your Father',
1317             'We Are the Champions used to say "of the world" at the end',
1318             'the USA used to have 52 states',
1319             );
1320             },
1321             sub {
1322 231     231   945 $redstring->{topic} = { name => 'the crusades', plural => 1 };
1323 231         684 my $subst = _RANDOM_(
1324             'TikTok',
1325             'Twitter',
1326             'the world wars',
1327             'intergalactic warfare',
1328             'the white genocide',
1329             'colonization',
1330             'robot wars',
1331             );
1332 231         774 "the crusades never stopped, they were just replaced with $subst";
1333             },
1334             sub {
1335 270     270   930 my $cryptids = cryptids( $redstring );
1336 270         825 "$cryptids are real";
1337             },
1338             sub {
1339 253     253   956 my $cause = disease_cause( $redstring );
1340 253         751 my $disease = disease( $redstring );
1341 253         987 $redstring->{topic} = { name => 'western medicine', plural => 0 };
1342 253         904 "$cause causes $disease";
1343             },
1344             sub {
1345 241     241   956 my $cryptids = cryptids( $redstring );
1346 241         629 my $group = shady_group( $redstring );
1347 241         979 "$group are $cryptids";
1348             },
1349             sub {
1350 237     237   826 my $objects = objects( $redstring );
1351 237         817 "$objects are sentient";
1352             },
1353             sub {
1354 252     252   692 my $celebrity = celebrity( $redstring );
1355 252         730 my $long_time = a_long_time( $redstring );
1356 252         1043 "$celebrity has been drinking the blood of infants $long_time to stay looking young";
1357             },
1358             sub {
1359 253     253   710 my $celebrity = celebrity( $redstring );
1360 253         831 $redstring->{topic} = { name => 'cross-dressing', plural => 0 };
1361 253         758 $redstring->{celebrity}{female} = ! $redstring->{celebrity}{female};
1362 253         792 "$celebrity is transsexual";
1363             },
1364             sub {
1365 264     264   798 my $celebrity = celebrity( $redstring );
1366             my $consequence = _RANDOM_(
1367             sub {
1368 93         425 $redstring->{topic} = { name => 'robotics', plural => 0 };
1369 93         206 'replaced by a robot';
1370             },
1371             sub {
1372 96         385 $redstring->{topic} = { name => 'impersonation', plural => 0 };
1373 96         206 'replaced by a look-alike';
1374             },
1375             sub {
1376 75         327 $redstring->{topic} = { name => 'blackmail', plural => 0 };
1377 75         182 'blackmailed into silence';
1378             },
1379 264         1754 );
1380 264         1982 "$celebrity has been $consequence";
1381             },
1382             sub {
1383 249     249   943 my $objects = objects( $redstring );
1384 249         599 my $group = shady_group( $redstring );
1385 249         1060 "$objects were invented by $group";
1386             },
1387             sub {
1388 281     281   841 my $resource = precious_resource( $redstring );
1389 281         969 "$resource is a source of free energy";
1390             },
1391             sub {
1392 252     252   805 my $mythplace = myth_place( $redstring );
1393 252         747 my $place = random_place( $redstring );
1394 252         918 "$mythplace is in $place";
1395             },
1396             sub {
1397 258     258   784 my $victim = victim( $redstring );
1398 258         815 my $mythplace = myth_place( $redstring );
1399 258         1005 "$victim discovered $mythplace and was killed to keep it a secret";
1400             },
1401             sub {
1402 225     225   640 my $resource = precious_resource( $redstring );
1403 225         706 my $disease = disease( $redstring );
1404 225         838 "$resource can cure $disease";
1405             },
1406             sub {
1407 220     220   667 my $animal = real_animal( $redstring );
1408 220         563 my $group = shady_group( $redstring );
1409 220         999 "the $animal is a fake animal, engineered by $group";
1410             },
1411             sub {
1412 252     252   822 my $chemicals = chemicals( $redstring );
1413 252         769 my $animal = real_animal( $redstring );
1414 252 100       785 my $s = ($animal ne 'fish') ? 's' : '';
1415 252         706 my $attribute = attribute( $redstring );
1416 252         1072 "the $chemicals in the water is turning the $animal$s $attribute";
1417             },
1418             sub {
1419 240     240   796 my $chemicals = chemicals( $redstring );
1420 240         664 my $food = food( $redstring );
1421 240         900 "$food are full of $chemicals";
1422             },
1423             sub {
1424 254     254   684 my $animal = real_animal( $redstring );
1425 254         951 "the $animal originally comes from another planet";
1426             },
1427             sub {
1428 264     264   752 my $animal = real_animal( $redstring );
1429 264         704 my $group = shady_group( $redstring );
1430 264         603 my $stupid = _RANDOM_(
1431             'people in costumes',
1432             'animatronics',
1433             'CGI',
1434             'highly coordinated swarms of bees',
1435             'holograms',
1436             'a mirage',
1437             );
1438 264         1204 "the $animal is a fake animal and is just $stupid";
1439             },
1440             sub {
1441 253     253   765 my $animal = fake_animal( $redstring );
1442 253         888 "the $animal is a real animal";
1443             },
1444             sub {
1445 268     268   883 my $time = future_time( $redstring );
1446 268         1085 "the world will end $time";
1447             },
1448             sub {
1449 243     243   946 my $time = future_time( $redstring );
1450 243         918 $redstring->{topic} = { name => 'comets', plural => 1 };
1451 243         833 "the comet will hit us $time";
1452             },
1453             sub {
1454 247     247   673 my $place = random_place( $redstring );
1455 247         864 $redstring->{topic} = { name => 'flooding', plural => 1 };
1456 247         911 "$place was destroyed by floods";
1457             },
1458             sub {
1459 246     246   1037 my $place = random_place( $redstring );
1460 246   66     1183 my $group = $redstring->{shady_group}{name} // shady_group( $redstring );
1461 246         919 $redstring->{topic} = { name => 'coup d\'etats', plural => 1 };
1462 246         956 "$place is ruled by $group";
1463             },
1464             sub {
1465 254     254   785 my $time = future_time( $redstring );
1466 254         1019 $redstring->{topic} = { name => 'zombies', plural => 1 };
1467 254         902 "the zombie apocalypse will start $time";
1468             },
1469             sub {
1470 241     241   801 my $time = future_time( $redstring );
1471 241         806 $redstring->{topic} = { name => 'Jesus', plural => 0 };
1472 241         803 "Jesus will return $time";
1473             },
1474             sub {
1475 241     241   808 my $mc = mind_control_device( $redstring );
1476 241   66     1045 my $group = $redstring->{shady_group}{name} // shady_group( $redstring );
1477 241         1062 "THEY ($group) are using $mc";
1478             },
1479             sub {
1480 243     243   660 my $victim = victim( $redstring );
1481 243         772 my $place = bad_place( $redstring );
1482 243         857 "$victim is alive and kept at $place";
1483             },
1484             sub {
1485 265     265   912 my $artifact = artifact( $redstring );
1486 265         662 my $p = random_place( $redstring );
1487 265         976 "$artifact is in $p";
1488             },
1489             sub {
1490 254     254   703 my $victim = victim( $redstring );
1491 254         1017 $redstring->{topic} = { name => 'the antichrist', plural => 0 };
1492 254         850 "$victim was the antichrist";
1493             },
1494             sub {
1495 280     280   790 my $victim = victim( $redstring );
1496 280         928 "$victim was a time-traveller";
1497             },
1498             sub {
1499 253     253   791 my $victim = victim( $redstring );
1500 253         873 "$victim was an inter-dimensional being";
1501             },
1502             sub {
1503 256     256   882 my $chem = chemicals( $redstring );
1504 256         613 my $stupid = _RANDOM_(
1505             'water mixed with food-colouring',
1506             'water that they put in the microwave',
1507             'water that came from a goat\'s insides',
1508             'water that they used magic on',
1509             'made of fairy dust',
1510             'melted potato starch',
1511             );
1512 256         1018 "$chem is really just $stupid";
1513             },
1514             sub {
1515 274     274   793 my $fiction = fiction( $redstring );
1516 274         907 "$fiction is historically accurate";
1517             },
1518             sub {
1519 237     237   675 my $fiction = fiction( $redstring );
1520 237   66     914 my $victim = $redstring->{victim} // victim( $redstring );
1521 237         908 "$fiction was really written by $victim";
1522             },
1523             sub {
1524 274     274   907 my $p = random_place( $redstring );
1525 274         687 my $extinct = _RANDOM_(
1526             'dinosaur',
1527             'mammoth',
1528             'sabre-tooth tiger',
1529             'Tasmanian tiger',
1530             'pterodactyl',
1531             );
1532 274   66     1551 $redstring->{real_animal} //= $extinct;
1533 274         1039 "the $extinct is not extinct and there is a colony in $p";
1534             },
1535             sub {
1536 273     273   762 my $group = shady_group( $redstring );
1537 273         1001 my $invention = invention( $redstring );
1538 273 100       933 my $are = $redstring->{shady_group}{plural} ? 'are' : 'is';
1539 273 100       611 my $was = $redstring->{invention_plural} ? 'were' : 'was';
1540 273         654 my $invented = _RANDOM_(
1541             'invented',
1542             'cooked up',
1543             'fabricated',
1544             );
1545 273         1697 _RANDOM_(
1546             "$group $are behind $invention",
1547             "$group $invented $invention",
1548             "$invention $was $invented by $group",
1549             );
1550             },
1551 9599         354810 );
1552            
1553 9599         371735 _MERGE_( $redstring, hidden_truth => $truth );
1554 9599         25241 return $truth;
1555             }
1556              
1557             sub theory {
1558 21423   100 21423 0 110999 my $redstring = shift // {};
1559            
1560             my $theory = _RANDOM_(
1561             sub {
1562 1478     1478   3447 my $group = shady_group( $redstring );
1563 1478         3425 $redstring->{protagonists} = $redstring->{shady_group};
1564 1478 100       3950 my $is = $redstring->{protagonists}->{plural} ? 'are' : 'is';
1565            
1566 1478         3775 my $misinfo = misinformation( $redstring );
1567            
1568 1478         3863 my $truth = hidden_truth( $redstring );
1569            
1570 1478         7798 my $exclaim = _RANDOM_(
1571             '', '', '', '', '', '',
1572             " But the truth shall not be buried!",
1573             " Don't let yourself be deceived!",
1574             " Take the red pill!",
1575             " Believing $misinfo is taking the blue pill!",
1576             " Take the red pill - $truth!",
1577             " Believing $misinfo is for blue-pilled sheeple!",
1578             " Open your mind!",
1579             );
1580            
1581 1478         8129 _UCFIRST_ "$group $is spreading the lie that $misinfo to distract the public from the truth that $truth.$exclaim";
1582             },
1583             sub {
1584 1493     1493   3878 my $protagonists = shady_group( $redstring );
1585 1493         3484 $redstring->{protagonists} = $redstring->{shady_group};
1586            
1587 1493         3217 my $antagonists = shady_group( $redstring );
1588 1493         3265 $redstring->{antagonists} = $redstring->{shady_group};
1589            
1590 1493         3686 my $time = a_long_time( $redstring );
1591            
1592             my $war_reason = _RANDOM_(
1593             'Nobody knows why',
1594             'The reasons for this have been long forgotten',
1595             sub {
1596             my $consequence = _RANDOM_(
1597             'disappears',
1598             'is assassinated',
1599             sub {
1600 76         246 my $badplace = bad_place( $redstring );
1601 76         257 "is taken away to $badplace";
1602             },
1603             sub {
1604 75         257 my $badplace = bad_place( $redstring );
1605 75         257 "has their mind wiped at $badplace";
1606             },
1607 372         1721 'is given a blue pill',
1608             );
1609 372         1866 "Everybody who finds out why $consequence";
1610             },
1611             sub {
1612 365         1079 my $truth = hidden_truth();
1613 365   66     1716 my $pro = $redstring->{protagonists}{shortname} // $protagonists;
1614 365   66     1431 my $ant = $redstring->{antagonists}{shortname} // $antagonists;
1615 365 100       1005 my $want = splural( $redstring->{protagonists} ) ? 'want' : 'wants';
1616 365         1949 _UCFIRST_ "$pro $want to expose the truth that $truth and $ant will do whatever they can to stop them";
1617             },
1618 1493         7906 );
1619            
1620 1493         13362 _UCFIRST_ "$protagonists and $antagonists have been in a secret war with each other $time. $war_reason."
1621             },
1622             sub {
1623 1522     1522   4017 my $group = shady_group( $redstring );
1624 1522         3641 $redstring->{protagonists} = $redstring->{shady_group};
1625            
1626 1522         3867 my $victim = victim( $redstring );
1627            
1628 1522         3545 my $truth = hidden_truth( $redstring );
1629            
1630             my $explanation = _UCFIRST_ _RANDOM_(
1631             sub {
1632 227         616 my $group2 = shady_group( $redstring );
1633 227         543 $redstring->{antagonists} = $redstring->{shady_group};
1634            
1635 227         989 "$victim learnt the truth from $group2";
1636             },
1637 1522         11917 "Nobody knows how $victim found out",
1638             "$victim found out because they were the source of all knowledge",
1639             "$victim found out using time travel",
1640             "$victim found out using mind reading",
1641             "$victim took the red pill",
1642             );
1643            
1644 1522         9689 _UCFIRST_ "$group killed $victim to hide the truth that $truth. $explanation.";
1645             },
1646             sub {
1647 1535     1535   3996 my $truth = hidden_truth( $redstring );
1648            
1649             my $sheeple = _RANDOM_(
1650             'people are sheeple',
1651             'they refuse to see the truth',
1652             'the mass media refuse to report it',
1653             sub {
1654 266         772 my $group = shady_group( $redstring );
1655 266         760 $redstring->{protagonists} = $redstring->{shady_group};
1656 266 100       787 my $is = $redstring->{protagonists}->{plural} ? 'are' : 'is';
1657 266         820 my $mc = mind_control_device( $redstring );
1658 266         1164 "$group $is controlling people's minds with $mc";
1659             },
1660             sub {
1661 259         654 my $group = shady_group( $redstring );
1662 259         624 $redstring->{protagonists} = $redstring->{shady_group};
1663 259 100       870 my $have = $redstring->{protagonists}->{plural} ? 'have' : 'has';
1664 259         787 my $long_time = a_long_time( $redstring );
1665 259         1199 "$group $have been hiding it $long_time";
1666             },
1667             sub {
1668 238         713 my $group = shady_group( $redstring );
1669 238         760 $redstring->{protagonists} = $redstring->{shady_group};
1670 238 100       847 my $is = $redstring->{protagonists}->{plural} ? 'are' : 'is';
1671 238         790 my $medium = _RANDOM_(
1672             'the Internet',
1673             'Twitter',
1674             'Facebook',
1675             'Instagram',
1676             'the mass media',
1677             'the TV news',
1678             'Tiktok',
1679             'both Tiktok and Instagram',
1680             );
1681 238         996 "$group $is censoring $medium";
1682             },
1683 1535         10448 );
1684            
1685 1535         18291 _UCFIRST_ _RANDOM_(
1686             "$truth but nobody knows because $sheeple.",
1687             "$truth but nobody believes me because $sheeple.",
1688             "$truth but everybody ignores it because $sheeple.",
1689             "$truth but people are blind because $sheeple.",
1690             );
1691             },
1692             sub {
1693 1575     1575   4687 my $fiction = fiction( $redstring );
1694 1575         4070 my $truth = hidden_truth( $redstring );
1695            
1696             _UCFIRST_ _RANDOM_(
1697             "$fiction has a hidden message that $truth.",
1698             "$fiction is just an allegory which shows that $truth.",
1699             sub {
1700 534         1315 my $group = shady_group( $redstring );
1701 534   66     3114 $redstring->{protagonists} //= $redstring->{shady_group};
1702 534         2842 "$fiction was analysed with a computer by $group and it revealed $truth.",
1703             },
1704 1575         11878 );
1705             },
1706             sub {
1707 1558     1558   4121 my $group = shady_group( $redstring );
1708 1558         3869 $redstring->{protagonists} = $redstring->{shady_group};
1709 1558 100       4129 my $are = $redstring->{protagonists}->{plural} ? 'are' : 'is';
1710            
1711 1558         4189 my $place = random_place( $redstring );
1712 1558         4076 my $darklord = dark_lord( $redstring );
1713            
1714             my $getting_kids = _RANDOM_(
1715             'abducting orphan children',
1716             'buying child slaves',
1717             'cloning babies',
1718             'growing babies in test tubes',
1719             'breeding babies',
1720             'buying kids from poor families',
1721             'stealing babies',
1722             sub {
1723 174   50     1336 $redstring->{topic} //= { name => 'adoption', plural => 0 };
1724 174         395 'adopting babies';
1725             },
1726             sub {
1727 176   50     1239 $redstring->{topic} //= { name => 'adoption', plural => 0 };
1728 176         386 'adopting kids';
1729             },
1730 1558         7087 );
1731            
1732 1558         6821 my $sacrifice = _RANDOM_(
1733             'sacrifice them',
1734             'ritually sacrifice them',
1735             'offer them',
1736             'offer them as a blood sacrifice',
1737             'offer them as brides',
1738             'offer them as sex slaves',
1739             'feed them',
1740             'sell them',
1741             'mass sacrifice them',
1742             );
1743            
1744 1558         8568 _UCFIRST_ "$group $are $getting_kids in $place to $sacrifice to $darklord.";
1745             },
1746             sub {
1747 1474     1474   3897 my $group = shady_group( $redstring );
1748 1474         3242 $redstring->{protagonists} = $redstring->{shady_group};
1749 1474 100       4458 my $have = $redstring->{protagonists}->{plural} ? 'have' : 'has';
1750 1474 100       3354 my $are = $redstring->{protagonists}->{plural} ? 'are' : 'is';
1751            
1752 1474         3515 my $resource = precious_resource_with_quantity( $redstring );
1753            
1754 1474         10286 _UCFIRST_ _RANDOM_(
1755             "$group $have $resource.",
1756             "$group $are trying to obtain $resource.",
1757             "$group $are in possession of $resource.",
1758             "$group $have taken a delivery of $resource.",
1759             );
1760             },
1761             sub {
1762 1543     1543   3987 my $group = shady_group( $redstring );
1763 1543         3470 $redstring->{protagonists} = $redstring->{shady_group};
1764 1543 100       4333 my $are = $redstring->{protagonists}->{plural} ? 'are' : 'is';
1765            
1766 1543         4031 my $project = shady_project( $redstring );
1767            
1768             _UCFIRST_ _RANDOM_(
1769             "$group $are running $project.",
1770             "$group $are in charge of $project.",
1771             "$group $are working against $project.",
1772             sub {
1773 383         1208 my $auth = authority( $redstring );
1774 383         1834 "$group $are investigating $project. They will soon have enough evidence to go to $auth.",
1775             },
1776 1543         11838 );
1777             },
1778             sub {
1779 1535     1535   3747 my $group = shady_group( $redstring );
1780 1535         3397 $redstring->{protagonists} = $redstring->{shady_group};
1781            
1782 1535         4372 my $physicist = physicist( $redstring );
1783            
1784             my $fact = _RANDOM_(
1785             sub {
1786 92         343 $redstring->{topic} = { name => 'bathroom scales', plural => 1 };
1787 92         192 'electrons have more mass than protons';
1788             },
1789             sub {
1790 91         343 $redstring->{topic} = { name => 'weighing scales', plural => 1 };
1791 91         227 "protons don't have mass";
1792             },
1793             sub {
1794 113         258 my $things = _RANDOM_( 'electrons', 'protons' );
1795 113         403 $redstring->{topic} = { name => $things, plural => 1 };
1796 113         409 "$things are not real particles, they are just the terminal lines of a dielectric pulse";
1797             },
1798             sub {
1799 121         467 $redstring->{topic} = { name => 'water', plural => 0 };
1800 121         278 'water is its own element';
1801             },
1802             sub {
1803 85         328 $redstring->{topic} = { name => 'geocentrism', plural => 0 };
1804 85         210 'the sun goes round the Earth';
1805             },
1806             sub {
1807 87         343 $redstring->{topic} = { name => 'the moon', plural => 0 };
1808 87         178 'the moon is a hologram';
1809             },
1810             sub {
1811 101         407 $redstring->{topic} = { name => 'camembert', plural => 0 };
1812 101         208 'the moon is made of cheese';
1813             },
1814             sub {
1815 104         391 $redstring->{topic} = { name => 'the man in the moon', plural => 0 };
1816 104         250 'the man in the moon is a real man';
1817             },
1818             sub {
1819 103         385 my $chem = chemicals( $redstring );
1820 103         374 $redstring->{topic} = { name => 'the periodic table', plural => 0 };
1821 103         373 "element 119 is $chem";
1822             },
1823             sub {
1824 118         446 $redstring->{topic} = { name => 'air', plural => 0 };
1825 118         243 "air isn't real";
1826             },
1827             sub {
1828 97         346 $redstring->{topic} = { name => 'vacuum cleaners', plural => 0 };
1829 97         214 "space isn't a vacuum because then it would suck all the air";
1830             },
1831             sub {
1832 107         391 $redstring->{topic} = { name => 'the firmament', plural => 0 };
1833 107         245 "there is a dome over the flat Earth";
1834             },
1835             sub {
1836 113         399 $redstring->{topic} = { name => 'Satan', plural => 0 };
1837 113         238 'the axis of evil in the cosmic microwave background was put there by Satan';
1838             },
1839             sub {
1840 93         343 $redstring->{topic} = { name => 'the zodiac', plural => 0 };
1841 93         217 'astrology has been scientifically verified';
1842             },
1843             sub {
1844 110         460 $redstring->{topic} = { name => 'the year of the dragon', plural => 0 };
1845 110         267 'the Chinese zodiac can predict the future';
1846             },
1847 1535         21567 );
1848            
1849 1535         24981 my $solution = _UCFIRST_ _RANDOM_(
1850             "They paid $group to kill him.",
1851             "$group helped cover up the truth.",
1852             "$group threatened to kill him to keep him quiet.",
1853             "He was a member of $group so they knew he would keep quiet.",
1854             "$group arranged a convenient \"accident\".",
1855             );
1856            
1857 1535         4411 my $destruction = _RANDOM_(
1858             "all of modern physics",
1859             'our understanding of the universe',
1860             "the Big Bang 'theory'",
1861             "Einstein's theory of relativity",
1862             );
1863            
1864 1535         7197 _UCFIRST_ "$physicist discovered that $fact but the scientific establishment is suppressing it because it would destroy $destruction. $solution";
1865             },
1866             sub {
1867 1510     1510   3848 my $group = shady_group( $redstring );
1868 1510         4183 $redstring->{protagonists} = $redstring->{shady_group};
1869            
1870 1510         4039 my $biologist = biologist( $redstring );
1871            
1872             my $fact = _RANDOM_(
1873             sub {
1874 130         515 $redstring->{topic} = { name => 'pandas', plural => 1 };
1875 130         303 'pandas are really just fat raccoons';
1876             },
1877             sub {
1878 131         539 $redstring->{topic} = { name => 'spaghetti', plural => 1 };
1879 131         327 "spaghetti is a type of worm";
1880             },
1881             sub {
1882 135   50     1054 $redstring->{celebrity} //= { name => 'Louis Armstrong', female => 0 };
1883 135         392 $redstring->{topic} = { name => 'snakes', plural => 1 };
1884 135         269 "snakes like jazz music";
1885             },
1886             sub {
1887 132   50     772 $redstring->{real_place} //= 'Antarctica';
1888 132         463 $redstring->{topic} = { name => 'penguins', plural => 1 };
1889 132         308 "penguins can fly but they get nervous when people are watching";
1890             },
1891             sub {
1892 148         568 $redstring->{topic} = { name => 'DNA', plural => 0 };
1893 148         349 "the 10 commandments are encoded in human DNA";
1894             },
1895             sub {
1896 155         609 $redstring->{topic} = { name => 'essential oils', plural => 1 };
1897 155         374 "essential oils cure all diseases";
1898             },
1899             sub {
1900 135         492 $redstring->{topic} = { name => 'vaccines', plural => 1 };
1901 135         332 "essential oils cure autism";
1902             },
1903             sub {
1904 129         556 $redstring->{topic} = { name => 'anger management', plural => 0 };
1905 129         303 "wasps are just angry bees";
1906             },
1907             sub {
1908 152         562 $redstring->{topic} = { name => 'oncology', plural => 0 };
1909 152         371 "windmills cause cancer";
1910             },
1911             sub {
1912 122         420 my $chem = chemicals( $redstring );
1913 122         468 $redstring->{topic} = { name => 'honey', plural => 0 };
1914 122         447 "$chem is killing all the bees";
1915             },
1916             sub {
1917 141         394 my $animal = real_animal( $redstring );
1918 141         469 $redstring->{topic} = { name => 'space flight', plural => 0 };
1919 141         509 "$animal DNA comes from space";
1920             },
1921 1510         16874 );
1922            
1923 1510         21840 my $solution = _UCFIRST_ _RANDOM_(
1924             "They paid $group to kill him.",
1925             "$group helped cover up the truth.",
1926             "$group threatened to kill him to keep him quiet.",
1927             "He was a member of $group so they knew he would keep quiet.",
1928             "$group arranged a convenient \"accident\".",
1929             );
1930            
1931 1510         3719 my $destruction = _RANDOM_(
1932             "the 'theory' of evolution",
1933             'modern medicine',
1934             "the germ theory of disease",
1935             "our understanding of DNA",
1936             'creation science',
1937             );
1938            
1939 1510         7242 _UCFIRST_ "$biologist discovered that $fact but the scientific establishment is suppressing it because it would destroy $destruction. $solution";
1940             },
1941             sub {
1942 1516     1516   3927 my $group = shady_group( $redstring );
1943 1516         3420 $redstring->{protagonists} = $redstring->{shady_group};
1944 1516 100       3889 my $have = $redstring->{protagonists}->{plural} ? 'have' : 'has';
1945            
1946 1516         3523 my $place = random_place( $redstring );
1947            
1948 1516         5766 my $how = _RANDOM_(
1949             "by diverting flights to $place to a Hollywood studio",
1950             'using mirrors',
1951             'by paying the UN',
1952             'by talking with funny accents',
1953             'by hacking satellites',
1954             );
1955            
1956 1516         7045 _UCFIRST_ "$place is just a hologram created by $group who $have been hiding it for years $how.";
1957             },
1958             sub {
1959 1569     1569   4357 my $place = random_place( $redstring );
1960 1569         4063 my $truth1 = hidden_truth( $redstring );
1961            
1962 1569         10725 _UCFIRST_ _RANDOM_(
1963             "It is common knowledge in $place that $truth1.",
1964             "They teach $truth1 at schools in $place.",
1965             "Everybody in $place knows that $truth1.",
1966             "People in $place found out that $truth1.",
1967             );
1968             },
1969             sub {
1970 1555     1555   4208 my $celeb = celebrity( $redstring );
1971 1555 100       4434 my $pronoun = $redstring->{celebrity}{female} ? 'she' : 'he';
1972 1555         3648 my $truth1 = hidden_truth( $redstring );
1973 1555         3718 my $group = shady_group( $redstring );
1974 1555         3677 $redstring->{protagonists} = $redstring->{shady_group};
1975 1555 100       4065 my $are = $redstring->{protagonists}->{plural} ? 'are' : 'is';
1976            
1977             my $silence = _RANDOM_(
1978             "$pronoun will probably have to be eliminated",
1979             "$pronoun is going to be killed if $pronoun isn't dead already",
1980             "$pronoun is being paid to stay quiet",
1981             "$pronoun will meet a convenient \"accident\"",
1982             sub {
1983 275         888 my $clone = clone( $redstring );
1984 275         983 "$pronoun has been replaced by $clone";
1985             },
1986             sub {
1987 258         842 my $place = bad_place( $redstring );
1988 258         880 "$pronoun has been imprisoned in $place";
1989             },
1990 1555         11428 );
1991            
1992 1555         11053 _UCFIRST_ "$celeb found out that $truth1 and $silence. " . _UCFIRST_ "$group $are protecting this secret.";
1993             },
1994             sub {
1995 1560     1560   4421 my $celeb = celebrity( $redstring );
1996 1560 100       4259 my $pronoun = $redstring->{celebrity}{female} ? 'she' : 'he';
1997 1560         3326 my $group = shady_group( $redstring );
1998 1560         3897 $redstring->{protagonists} = $redstring->{shady_group};
1999            
2000 1560         11426 _UCFIRST_ _RANDOM_(
2001             "$celeb is a member of $group.",
2002             "$celeb is a former member of $group.",
2003             "$celeb was thrown out of $group.",
2004             "$celeb infiltrated $group.",
2005             "$celeb is the leader of $group.",
2006             "$celeb is secretly worshipped by $group.",
2007             );
2008             },
2009 21423         467144 );
2010              
2011 21423 100 100     794732 if ( $redstring->{protagonists} and not $redstring->{antagonists} and _RANDOM_(0..1) ) {
      100        
2012 8049   66     29390 my $group1 = $redstring->{protagonists}{shortname} // $redstring->{protagonists}{name};
2013 8049         19177 my $group2 = shady_group( $redstring );
2014 8049         17735 $redstring->{antagonists} = $redstring->{shady_group};
2015 8049 100       19455 my $know = splural ($redstring->{antagonists}) ? 'know' : 'knows';
2016             $theory .= " " . _UCFIRST_ _RANDOM_(
2017             sub {
2018 1379     1379   3813 my $bribe = precious_resource_with_quantity( $redstring );
2019 1379         5935 "$group2 $know the truth but $group1 have paid them off with $bribe.";
2020             },
2021 8049         64071 "$group2 $know the truth but $group1 have threatened them to keep them silent.",
2022             "$group2 were helping them until $group1 betrayed them.",
2023             "$group2 were helping them for a while.",
2024             "$group2 were originally opposed to this but they're now in on it.",
2025             "$group2 are trying to get evidence to prove it.",
2026             );
2027             }
2028              
2029 21423         83940 _MERGE_( $redstring, base_theory => $theory );
2030            
2031 21423         59583 my $evidence = evidence( $redstring );
2032 21423 50       90713 $theory .= " $evidence" if $evidence;
2033              
2034 21423         51614 my $numerology = numerology( $redstring );
2035 21423 100       51337 $theory .= " $numerology" if $numerology;
2036              
2037 21423         58952 _MERGE_( $redstring, theory => $theory );
2038              
2039 21423         122063 return $theory;
2040             }
2041              
2042             my %special_numbers = (
2043             19 => [ qr/COVID/, '19 is the coronavirus number' ],
2044             24 => [ qr/TINTIN/, 'There are 24 Tintin comics' ],
2045             33 => [ qr/MASON/, '33 is associated with the masons' ],
2046             35 => [ qr/ELVIS/, 'Elvis was born in 1935' ],
2047             44 => [ qr/OBAMA/, 'Barack Obama was the 44th President of the USA' ],
2048             45 => [ qr/TRUMP|QANON|USA/, 'Donald Trump was the 45th President of the USA',
2049             qr/UNITEDNATIONS/, 'The United Nations was founded in 1945' ],
2050             46 => [ qr/BIDEN/, 'Joe Biden was the 46th President of the USA' ],
2051             47 => [ qr/THECIA/, 'The CIA was founded in 1947',
2052             qr/SILVER/, 'Silver has atomic number 47' ],
2053             49 => [ qr/NATO/, 'NATO was founded in 1949' ],
2054             51 => [ qr/KFC/, 'Area 51 is the fifty-first area' ],
2055             52 => [ qr/KFC/, 'KFC was founded in 1952' ],
2056             55 => [ qr/BIGMAC|MCDONALDS/, 'McDonalds was founded in 1955' ],
2057             63 => [ qr/JFK|OSWALD/, 'JFK was shot in 1963' ],
2058             79 => [ qr/GOLD/, 'Gold has the atomic number 79' ],
2059             81 => [ qr/HIV/, 'AIDS was discovered in 1981' ],
2060             82 => [ qr/COKE/, 'Diet Coke first came out in 1982' ],
2061             86 => [ qr/RADON/, 'The atomic number for radon is 86' ],
2062             92 => [ qr/URANIUM/, 'The atomic number for uranium is 92' ],
2063             322 => [ qr/SKULL/, 'Skull and Bones is Order 322' ],
2064             666 => [ qr/DEVIL|DEMON|SATAN/, '666 is the number of the beast' ],
2065             );
2066              
2067             sub numerology {
2068 21423   50 21423 0 52107 my $redstring = shift // {};
2069            
2070             my @strings = List::Util::uniq(
2071 147104         341651 grep { length }
2072 147104         267791 map { my $letters = uc( $_ ); $letters =~ s/[^A-Z0-9]//g; $letters }
  147104         642411  
  147104         290730  
2073             map {
2074 147104 100       436629 /^(the )(.+)$/i ? $2 : $_
2075             }
2076             map {
2077 21423 100       59803 ref( $_ ) ? grep( defined, $_->{name}, $_->{shortname}, $_->{title}, $_->{author} ) : $_
  156775         430238  
2078             }
2079             values( %$redstring )
2080             );
2081            
2082 21423         79257 my %calcs;
2083 21423         47819 foreach my $string ( @strings ) {
2084 121835 100       272874 next if length($string) >= 20;
2085 82698         248572 my @letters = split //, $string;
2086 82698 100       738903 my @numbers = map /[A-Z]/ ? ( ord($_) - 0x40 ) : $_, @letters;
2087 82698         221541 my $sum = List::Util::sum( @numbers );
2088            
2089 82698   100     120026 push @{ $calcs{$sum} ||= [] }, sprintf(
  82698         827619  
2090             '%s = %s = %s',
2091             join( '+', @letters ),
2092             join( '+', @numbers ),
2093             $sum,
2094             );
2095             }
2096            
2097 21423         99716 foreach my $key ( %special_numbers ) {
2098 856920 100       1702459 if ( $calcs{$key} ) {
2099 6949         10944 my @copy = @{ $special_numbers{$key} };
  6949         17971  
2100 6949         18364 while ( @copy ) {
2101 7272         20793 my ( $test, $statement ) = splice( @copy, 0 , 2 );
2102 7272 100       67805 next unless "@strings" =~ $test;
2103 44         106 push @{ $calcs{$key} }, "And guess what? " . $statement;
  44         224  
2104             }
2105             }
2106             }
2107            
2108 21423 100       64863 my @wow = map { @$_ > 1 ? @$_ : () } values %calcs;
  82040         160662  
2109            
2110 21423 100       51896 if ( @wow ) {
2111 697         1767 return sprintf(
2112             "%s %s",
2113             _RANDOM_(
2114             'The numbers never lie.',
2115             'Trust the numbers.',
2116             'You can see the truth in the numbers.',
2117             ),
2118             join(
2119             '',
2120             map( "$_. ", @wow ),
2121             )
2122             );
2123             }
2124            
2125 20726         87322 return '';
2126             }
2127              
2128             sub bad_punctuation {
2129 0     0 0   my ( $string, $cancel ) = @_;
2130 0 0         unless ( $cancel ) {
2131 0           $string =~ s/ ([A-Za-z]) ([,!?]) / $1 . _RANDOM_( $2, " $2", " $2", " $2$2") /exg;
  0            
2132 0           $string =~ s/ ([A-Za-z]) ([.]) / $1 . _RANDOM_($2, $2, " $2", " ", " $2$2$2") /exg;
  0            
2133 0           $string =~ s/\!/_RANDOM_('!', '!', '!!', "!!!!")/ex;
  0            
2134             }
2135 0           return $string;
2136             }
2137              
2138             1;
2139              
2140             __END__