File Coverage

blib/lib/Acme/ConspiracyTheory/Random.pm
Criterion Covered Total %
statement 762 772 98.7
branch 149 154 96.7
condition 128 182 70.3
subroutine 136 137 99.2
pod 0 39 0.0
total 1175 1284 91.5


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