File Coverage

blib/lib/Acme/ConspiracyTheory/Random.pm
Criterion Covered Total %
statement 790 802 98.5
branch 160 166 96.3
condition 136 193 70.4
subroutine 142 143 99.3
pod 0 40 0.0
total 1228 1344 91.3


line stmt bran cond sub pod time code
1 1     1   70734 use 5.012;
  1         3  
2 1     1   6 use strict;
  1         1  
  1         21  
3 1     1   4 use warnings;
  1         2  
  1         69  
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.015';
11              
12 1     1   472 use Exporter::Shiny qw( theory bad_punctuation );
  1         4254  
  1         6  
13 1     1   82 use List::Util 1.54 ();
  1         29  
  1         678  
14              
15             sub _RANDOM_ {
16 276278     276278   855543 my $code = List::Util::sample( 1, @_ );
17 276278 100       1017547 ref($code) eq 'CODE' ? goto($code) : $code;
18             }
19              
20             sub _MERGE_ {
21 164462     164462   415085 my ( $redstring, %new ) = @_;
22 164462         701491 %$redstring = ( %$redstring, %new );
23             }
24              
25             sub _UCFIRST_ ($) { # Some sentences start with a non-word character like a quote mark
26 154839     154839   557343 ( my $str = shift )
27 154839         459794 =~ s/ (\w) / uc($1) /xe;
28 154839         674223 $str;
29             }
30              
31             sub celebrity {
32 3476   50 3476 0 8057 my $redstring = shift // {};
33 3476         56048 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 => 'King Charles III' },
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             { female => 1, name => 'Marjorie Taylor Greene' },
54             { female => 0, name => 'Rishi Sunak' },
55             { female => 0, name => 'Vladimir Putin' },
56             { female => 0, name => 'Ron DeSantis' },
57             { female => 1, name => 'Lauren Opal Boebert' },
58             { female => 0, name => 'Elon Musk' },
59             );
60 3476         24183 _MERGE_( $redstring, celebrity => $celeb );
61 3476         8486 return $celeb->{name};
62             }
63              
64             sub shady_group {
65 32848   50 32848 0 73202 my $redstring = shift // {};
66            
67 32848         49187 my $xx;
68             PICK: {
69 32848         48167 $xx = _RANDOM_(
70             { plural => 1, name => 'the Knights Templar', shortname => 'the Templars' },
71             { plural => 1, name => 'the Illuminati' },
72             { plural => 1, name => 'the Freemasons', shortname => 'the Masons' },
73             { plural => 0, name => 'the Ordo Templi Orientis' },
74             { plural => 1, name => 'the Cabalists' },
75             { plural => 1, name => 'the Followers of the Temple Of The Vampire', shortname => 'the Vampires' },
76             { plural => 0, splural => 1, name => 'the Secret Order of the Knights of the Round Table', shortname => 'the Knights' },
77             { plural => 1, name => 'the Cardinals of the Catholic Church', shortname => 'the Cardinals' },
78             { plural => 0, name => 'the Church of Satan', shortname => 'the Church' },
79             { plural => 1, name => 'the Gnostics' },
80             { plural => 1, name => 'the Elders of Zion', shortname => 'the Elders' },
81             { plural => 1, name => 'the Jesuits' },
82             { plural => 0, name => 'the Babylonian Brotherhood', shortname => 'the Brotherhood' },
83             { plural => 0, name => 'the Hermetic Order of the Golden Dawn', shortname => 'the Order' },
84             { plural => 0, name => 'Opus Dei' },
85             { plural => 0, name => 'the Priory of Sion', shortname => 'the Priory' },
86             { plural => 0, name => 'GameStop' },
87             { plural => 0, splural => 1, name => 'the British Royal Family', shortname => 'the Royals' },
88             { plural => 0, name => 'NASA' },
89             { plural => 1, name => 'the Zionists' },
90             { plural => 0, name => 'the Trump administration' },
91             { plural => 0, name => 'the Biden administration' },
92             { plural => 0, splural => 1, name => 'the Republican party', shortname => 'the Republicans' },
93             { plural => 0, splural => 1, name => 'the Democrat party', shortname => 'the Democrats' },
94             { plural => 0, name => 'the New World Order' },
95             { plural => 1, name => 'the Communists' },
96             { plural => 0, name => 'the Shadow Government' },
97             { plural => 0, name => 'the global financial elite' },
98             { plural => 0, name => 'the global scientific elite' },
99             { plural => 0, name => 'Big Pharma' },
100             { plural => 0, name => 'Big Tobacco' },
101             { plural => 1, splural => 1, name => 'the lizard people', shortname => 'the lizardmen' },
102             { plural => 1, name => 'the grey aliens', shortname => 'the aliens' },
103             { plural => 1, name => 'the big Hollywood studios', shortname => 'Hollywood' },
104             { plural => 0, name => 'the music industry' },
105             { plural => 1, name => 'shape-shifting aliens', shortname => 'the shape-shifters' },
106             { plural => 1, name => 'Satanists' },
107             { plural => 1, name => 'pagans' },
108             { plural => 1, name => 'atheists' },
109             { plural => 1, name => 'people who like pineapple on pizza', shortname => 'the pineapple-lovers' },
110             { plural => 0, name => 'the deep state' },
111             { plural => 1, name => 'the descendents of Jesus', shortname => 'the descendents' },
112             { plural => 1, name => 'Qanon' },
113             { plural => 0, name => 'Microsoft' },
114             { plural => 0, name => 'Twitter' },
115             { plural => 0, name => 'Facebook' },
116             { plural => 0, name => 'Google' },
117             { plural => 0, name => 'Monsanto' },
118             { plural => 0, name => 'the Wall Street establishment', shortname => 'Wall Street' },
119             { plural => 1, name => 'people at 10 Downing Street', shortname => "Downing Street" },
120             { plural => 0, name => 'Goldman Sachs' },
121             { plural => 0, name => 'Skull and Bones (Order 322)', shortname => 'the Order' },
122             { plural => 0, name => 'the London Stock Exchange', shortname => 'LSE' },
123             { plural => 0, name => 'the New York Stock Exchange', shortname => 'NYSE' },
124             { plural => 1, name => 'feminists' },
125             { plural => 1, name => 'Socialists' },
126             sub {
127 560     560   2696 my $planet = _RANDOM_(
128             ['Nibiru', 'the Nibiruans'],
129             ['Venus', 'the Venutians'],
130             ['Mars', 'the Martians'],
131             ['Pluto', 'the Plutonians'],
132             ['Andromeda', 'the Andromedans'],
133             ['the moon', 'the moonlings'],
134             ['the Counter-Earth', 'the anti-Earthlings'],
135             );
136 560         3255 { plural => 1, name => "aliens from ".$planet->[0], shortname => $planet->[1] };
137             },
138 33050         1205595 );
139            
140 1     1   8 no warnings;
  1         2  
  1         13877  
141             redo PICK
142             if ( $redstring->{protagonists} and $redstring->{protagonists}{name} eq $xx->{name} )
143 33050 100 100     592836 || ( $redstring->{antagonists} and $redstring->{antagonists}{name} eq $xx->{name} );
      100        
      100        
144             };
145            
146 32848         90395 _MERGE_( $redstring, shady_group => $xx );
147 32848         68306 my $name = $xx->{name};
148 32848 100 100     113021 if ($name =~ /ists$/ && $name !~ /^the/) {
149 2346         6740 $name = "the $name";
150             }
151 32848         76785 return $name;
152             }
153              
154             sub real_animal {
155 1476   50 1476 0 3583 my $redstring = shift // {};
156            
157 1476         3124 my $animal = _RANDOM_(
158             'cat',
159             'dog',
160             'horse',
161             'penguin',
162             'platypus',
163             'toucan',
164             'whale',
165             'zebra',
166             'frog',
167             'fish',
168             'sea turtle',
169             );
170            
171 1476         4007 _MERGE_( $redstring, real_animal => $animal );
172 1476         3256 return $animal;
173             }
174              
175             sub fake_animal {
176 347   50 347 0 1021 my $redstring = shift // {};
177            
178 347         1039 my $animal = _RANDOM_(
179             'unicorn',
180             'bigfoot',
181             'mermaid',
182             'werewolf',
183             'dragon',
184             'wyvern',
185             'yeti',
186             'Loch Ness monster',
187             );
188            
189 347         1115 _MERGE_( $redstring, fake_animal => $animal );
190 347         1039 return $animal;
191             }
192              
193             sub objects {
194 492   50 492 0 1574 my $redstring = shift // {};
195            
196 492         1243 my $objects = _RANDOM_(
197             'cars',
198             'TVs',
199             'smartphones',
200             'microwave ovens',
201             'trees',
202             'clothes',
203             );
204            
205 492         1633 _MERGE_( $redstring, objects => $objects );
206 492         1176 return $objects;
207             }
208              
209             sub invention {
210 212   50 212 0 994 my $redstring = shift // {};
211            
212 212         1309 my $invention = _RANDOM_(
213             ['the internet', 0],
214             ['cryptocurrencies', 1],
215             ['smartphones', 1],
216             ['bitcoin', 0],
217             ['blockchain technology', 0],
218             ['ChatGPT', 0],
219             );
220            
221 212         1099 _MERGE_( $redstring, invention => $invention->[0],
222             invention_plural => $invention->[1], );
223 212         620 return $invention->[0];
224             }
225              
226             sub shady_project {
227 2916   50 2916 0 6801 my $redstring = shift // {};
228            
229 2916         5735 my $x = _RANDOM_(
230             'Project Blue Beam',
231             'The Plan',
232             'the Global Warming Hoax',
233             'the New Chronology',
234             'the Great Replacement',
235             'the Great Reset',
236             'the LGBT Agenda',
237             'the Kalergi Plan',
238             'Eurabia',
239             'the moon-landing hoax',
240             'the LGBT+ agenda',
241             );
242            
243 2916         6832 _MERGE_( $redstring, shady_project => $x );
244 2916         6520 return $x;
245             }
246              
247             sub authority {
248 356   50 356 0 1070 my $redstring = shift // {};
249            
250 356         1159 my $x = _RANDOM_(
251             'the Supreme Court',
252             'the United Nations',
253             'the FBI',
254             'the CIA',
255             'NATO',
256             'the European Union',
257             );
258            
259 356         874 _MERGE_( $redstring, authority => $x );
260 356         917 return $x;
261             }
262              
263             sub dark_lord {
264 1574   50 1574 0 3704 my $redstring = shift // {};
265            
266 1574         3827 my $x = _RANDOM_(
267             'the dark lord',
268             'Beelzebub',
269             'Lord Vader',
270             'Lord Satan',
271             'Thanos',
272             'the devil',
273             'the evil one',
274             'the almighty',
275             'the demon king',
276             'the dark prince',
277             'Voldemort',
278             );
279            
280 1574         4110 _MERGE_( $redstring, dark_lord => $x );
281 1574         3911 return $x;
282             }
283              
284             sub disease {
285 505   50 505 0 1553 my $redstring = shift // {};
286            
287 505         1525 my $disease = _RANDOM_(
288             'cancer',
289             'COVID-19',
290             'HIV',
291             'AIDS',
292             'the common cold',
293             'diabetes',
294             'obesity',
295             'autism',
296             'Ebola',
297             'COVID-20',
298             'monkeypox',
299             'gender dyspohoria',
300             );
301            
302 505         1356 _MERGE_( $redstring, disease => $disease );
303 505         1164 return $disease;
304             }
305              
306             sub disease_cause {
307 266   50 266 0 903 my $redstring = shift // {};
308            
309             my $cause = _RANDOM_(
310             sub {
311 37     37   150 my $food = food( $redstring );
312 37 100       253 ( $food =~ /wine/ ) ? "drinking $food" : "eating $food";
313             },
314             sub {
315 29     29   87 chemicals( $redstring );
316             },
317 266         1809 'non-vegan food',
318             'vegan food',
319             'socialism',
320             'electromagnetic radiation (WiFi!)',
321             'radon gas',
322             'all the drugs (so many drugs!)',
323             );
324            
325 266         1790 _MERGE_( $redstring, disease_cause => $cause );
326 266         595 return $cause;
327             }
328              
329             sub chemicals {
330 967   50 967 0 2426 my $redstring = shift // {};
331            
332 967         2378 my $chemicals = _RANDOM_(
333             'oestrogen',
334             'testosterone',
335             'acid',
336             'birth-control',
337             'fertilizer',
338             'Diet Coke',
339             'heavy hydrogen',
340             '5G',
341             'antimatter',
342             'dark matter',
343             'fluoride',
344             'dihydrogen monoxide',
345             'carbon nanotubes',
346             );
347            
348 967         2671 _MERGE_( $redstring, chemicals => $chemicals );
349 967         2217 return $chemicals;
350             }
351              
352             sub food {
353 256   50 256 0 964 my $redstring = shift // {};
354            
355 256         676 my $food = _RANDOM_(
356             'apples',
357             'Big Macs',
358             'KFC family buckets',
359             'most wines',
360             'Kraft instant mac and cheese boxes',
361             'bananas',
362             );
363            
364 256         733 _MERGE_( $redstring, food => $food );
365 256         611 return $food;
366             }
367              
368             sub attribute {
369 257   50 257 0 922 my $redstring = shift // {};
370            
371 257         626 my $attr = _RANDOM_(
372             'gay',
373             'insane',
374             'infertile',
375             'immobile',
376             'horny',
377             'female',
378             'fat',
379             'fluorescent',
380             );
381            
382 257         713 _MERGE_( $redstring, attribute => $attr );
383 257         622 return $attr;
384             }
385              
386             sub artifact {
387 1661   50 1661 0 3698 my $redstring = shift // {};
388            
389             my $artifact = _RANDOM_(
390             'the holy grail',
391             'the golden fleece',
392             'Excalibur',
393             'the ark of the covenant',
394             "Jesus's foreskin",
395             'the Holy Prepuce',
396             'the Book of the Dead',
397             'the Necronomicon',
398             "the Philosopher's Stone",
399             "a fragment of the true cross",
400             "the seal of Solomon",
401             'the crystal skull',
402 122     122   540 sub { "a golden " . fake_animal( $redstring ) },
403 1661         6459 'the original copy of the bible',
404             'the original copy of the quran',
405             'the original copy of the Declaration of Independence',
406             );
407            
408 1661         6507 _MERGE_( $redstring, artifact => $artifact );
409 1661         3598 return $artifact;
410             }
411              
412             sub bad_place {
413 1334   50 1334 0 3248 my $redstring = shift // {};
414            
415             my $bad_place = _RANDOM_(
416             'a secret Antarctic base',
417             'Area 51',
418             'Langley, Virginia',
419             'Guantanamo Bay Detention Camp',
420             'Windsor Castle',
421             'The Pentagon',
422             'Denver International Airport',
423             'the basement of the Vatican',
424 115     115   353 sub { myth_place( $redstring ) },
425             sub {
426 94     94   322 my $p = random_place( $redstring );
427 94         295 "a series of tunnels underneath $p";
428             },
429             sub {
430 102     102   308 my $p = random_place( $redstring );
431 102         376 "a secret base in $p";
432             },
433 1334         8040 'a facility inside the hollow Earth',
434             );
435            
436 1334         7467 _MERGE_( $redstring, bad_place => $bad_place );
437 1334         3250 return $bad_place;
438             }
439              
440             sub random_place {
441 6201   50 6201 0 14803 my $redstring = shift // {};
442            
443 6201         15493 my $random_place = _RANDOM_(
444             'the USA',
445             'the UK',
446             'France',
447             'Italy',
448             'Germany',
449             'Spain',
450             'Egypt',
451             'Israel',
452             'Lebanon',
453             'Syria',
454             'Japan',
455             'China',
456             'Brazil',
457             'Argentina',
458             'Chile',
459             'Tunisia',
460             'Antarctica',
461             'Norway',
462             'Australia',
463             'New Zealand',
464             );
465            
466 6201         15886 _MERGE_( $redstring, random_place => $random_place );
467 6201         13263 return $random_place;
468             }
469              
470             sub myth_place {
471 1053   50 1053 0 2829 my $redstring = shift // {};
472            
473 1053         2755 my $place = _RANDOM_(
474             'the Garden of Eden',
475             'the lost city of Atlantis',
476             'the final resting place of Noah\'s Ark',
477             'the umbilicus mundi',
478             'Camelot',
479             "Lucifer's crypt",
480             "Jesus's grave",
481             "Jesus's true birthplace",
482             'the entrance to the hollow Earth',
483             'the REAL Stonehenge',
484             );
485            
486 1053         2998 _MERGE_( $redstring, myth_place => $place );
487 1053         2587 return $place;
488             }
489              
490             sub any_place {
491 1444   50 1444 0 3446 my $redstring = shift // {};
492             return _RANDOM_(
493 494     494   1127 sub { bad_place $redstring },
494 466     466   1240 sub { random_place $redstring },
495 484     484   1223 sub { myth_place $redstring },
496 1444         6745 );
497             }
498              
499             sub cryptids {
500 467   50 467 0 1492 my $redstring = shift // {};
501            
502 467         1318 my $cryptids = _RANDOM_(
503             'vampires',
504             'ghosts',
505             'werewolves',
506             'demons',
507             'angels',
508             'skinwalkers',
509             'elves',
510             'goblins',
511             'mermaids',
512             );
513            
514 467         1433 _MERGE_( $redstring, cryptids => $cryptids );
515 467         1174 return $cryptids;
516             }
517              
518             sub fiction {
519 2851   100 2851 0 7971 my $redstring = shift // {};
520            
521 2851         22147 my $fiction = _RANDOM_(
522             { title => 'Harry Potter', author => 'J K Rowling' },
523             { title => 'Tintin', author => 'Herge' },
524             { title => 'Star Wars', author => 'George Lucas' },
525             { title => 'Avengers: Age of Ultron', author => 'Kevin Feige' },
526             { title => 'The Book of Mormon', author => 'Joseph Smith' },
527             { title => 'Lord of the Rings', author => 'J R R Tolkien' },
528             { title => 'The Chronicles of Narnia', author => 'C S Lewis' },
529             { title => 'Game of Thrones', author => 'George R R Martin' },
530             { title => 'Spider-Man', author => 'Stan Lee' },
531             );
532            
533 2851         14037 _MERGE_( $redstring, fiction => $fiction );
534 2851         9116 return $fiction->{title};
535             }
536              
537             sub precious_resource {
538 3914   50 3914 0 8252 my $redstring = shift // {};
539            
540 3914         8520 my $resource = _RANDOM_(
541             'pineapple',
542             'oil',
543             'coal',
544             'uranium',
545             'holy water',
546             'diamond',
547             'blood',
548             'gold',
549             'silver',
550             'neutron star material',
551             'Belle Delphine bath water',
552             'crystals',
553             );
554            
555 3914         9652 _MERGE_( $redstring, precious_resource => $resource );
556 3914         9091 return $resource;
557             }
558              
559             sub precious_resource_with_quantity {
560 3444   50 3444 0 9068 my $redstring = shift // {};
561 3444         6690 my $resource = precious_resource( $redstring );
562 3444         7443 my $quantity = _RANDOM_(
563             'a warehouse full',
564             'a lot',
565             'unknown quantities',
566             'vast amounts',
567             'unimaginable quantities',
568             'unspeakable quantities',
569             '5.3 metric pounds',
570             '6.9 Imperial litres',
571             '666 tonnes',
572             );
573 3444         9611 "$quantity of $resource";
574             }
575              
576             sub mind_control_device {
577 460   50 460 0 1373 my $redstring = shift // {};
578              
579 460         4117 my @mc = (
580             ['chemtrails', 1],
581             ['mind control drugs in the water', 1],
582             ['5G', 0],
583             ['WiFi', 0],
584             ['microchips implanted at birth', 1],
585             ['vaccines', 1],
586             ['childhood indoctrination', 0],
587             ['neurolinguistic programming', 0],
588             ['video games', 1],
589             ['mass media', 1],
590             ['space lasers', 1],
591             ['hypnotism', 0],
592             ['Jewish space lasers', 1],
593             );
594            
595 460         1108 my $mc = _RANDOM_(@mc);
596            
597 460         1439 _MERGE_( $redstring, mind_control_device => $mc->[0] );
598 460         1478 _MERGE_( $redstring, mind_control_device_plural => $mc->[1] );
599 460         2109 return $mc->[0];
600             }
601              
602             sub future_time {
603 934   50 934 0 2744 my $redstring = shift // {};
604            
605 934         2172 my $time = _RANDOM_(
606             'in 2030',
607             'by the end of the century',
608             'in 2666',
609             'when King Charles III dies',
610             'when the ice caps melt',
611             'next Christmas',
612             );
613            
614 934         2566 _MERGE_( $redstring, future_time => $time );
615 934         2020 return $time;
616             }
617              
618             sub splural {
619 123440     123440 0 186871 my $a = shift;
620 123440 100       230087 if (defined $a->{splural}) {
621 10817         23800 return $a->{splural};
622             }
623 112623         228653 return $a->{plural};
624             }
625              
626             sub a_long_time {
627 2337   100 2337 0 6205 my $redstring = shift // {};
628            
629 2337         4131 my @extras = ();
630 2337         5334 for my $actor ( qw/ protagonists antagonists / ) {
631             push @extras, sub {
632 309 100   309   822 my $have = splural( $redstring->{$actor} ) ? 'have' : 'has';
633 309   66     2066 "for as long as " . ($redstring->{$actor}{shortname}//$redstring->{$actor}{name}) . " $have existed";
634 4674 100       18207 } if $redstring->{$actor}{name};
635             }
636            
637 2337         5761 my $time = _RANDOM_(
638             'since 1492',
639             'since 1666',
640             'since 1066',
641             'since the time of Christ',
642             'since time immemorial',
643             'since the dawn of time',
644             'for hundreds of years',
645             'for millennia',
646             @extras,
647             );
648            
649 2337         5886 _MERGE_( $redstring, a_long_time => $time );
650 2337         11731 return $time;
651             }
652              
653             sub misinformation {
654 1453   50 1453 0 3708 my $redstring = shift // {};
655            
656             my $info = _RANDOM_(
657             'the Earth is round',
658             'the Earth goes around the sun',
659             'humans are animals',
660             'birds are dinosaurs',
661             sub {
662 80     80   416 $redstring->{topic} = { name => 'the moon', plural => 0 };
663 80         199 'men have walked on the moon';
664             },
665             sub {
666 101     101   402 $redstring->{topic} = { name => 'electricity', plural => 0 };
667 101         320 'electricity exists';
668             },
669             sub {
670 89     89   356 $redstring->{topic} = { name => 'magnetism', plural => 0 };
671 89         252 'magnetism is real';
672             },
673             sub {
674 97     97   397 $redstring->{topic} = { name => 'gravity', plural => 0 };
675 97         230 'gravity is real';
676             },
677             sub {
678 84     84   374 $redstring->{topic} = { name => 'outer space', plural => 0 };
679 84         240 'space is real';
680             },
681             sub {
682 76     76   303 $redstring->{topic} = { name => 'viruses', plural => 1 };
683 76         210 'viruses are real';
684             },
685             sub {
686 101     101   382 $redstring->{topic} = { name => 'vaccines', plural => 1 };
687 101         273 'vaccines are safe';
688             },
689             sub {
690 71     71   303 my $animal = real_animal( $redstring );
691 71         243 "the $animal is real";
692             },
693             sub {
694 92     92   257 my $place = random_place( $redstring );
695 92         289 "$place is real";
696             },
697             sub {
698 78     78   277 $redstring->{topic} = { name => 'carbon dating', plural => 0 };
699 78         224 'the Earth is 4.5 billion years old';
700             },
701             sub {
702 91     91   324 $redstring->{topic} = { name => 'radiocarbon dating', plural => 0 };
703 91         241 'the universe is 14 billion years old';
704             },
705             sub {
706 83     83   450 $redstring->{topic} = { name => 'pigeons', plural => 1 };
707 83         193 'dinosaurs are real';
708             },
709             sub {
710 83     83   354 $redstring->{topic} = { name => 'surveillance drones', plural => 1 };
711 83         187 'birds are real';
712             },
713 1453         18112 );
714            
715 1453         15503 _MERGE_( $redstring, misinformation => $info );
716 1453         3482 return $info;
717             }
718              
719             sub victim {
720 2794   50 2794 0 6639 my $redstring = shift // {};
721            
722 2794         6311 my $victim = _RANDOM_(
723             'Elvis Presley',
724             'JFK',
725             'Hitler',
726             'Robin Williams',
727             'Martin Luther King Jr',
728             'Abraham Lincoln',
729             'King Charles I',
730             'Marilyn Monroe',
731             'Tupac Shakur',
732             'Princess Di',
733             'Jeff Buckley',
734             'Andy Kaufman',
735             'Jim Morrison',
736             'Brandon Lee',
737             'Lee Harvey Oswald',
738             'Archduke Franz Ferdinand',
739             'the original Avril Lavigne',
740             'Malcolm X',
741             'John Lennon',
742             'Michael Jackson',
743             'Queen Elizabeth II',
744             'Prince Phillip',
745             'Walt Disney',
746             );
747            
748 2794         7901 _MERGE_( $redstring, victim => $victim );
749 2794         6661 return $victim;
750             }
751              
752             sub physicist { # and chemists
753 1387   50 1387 0 3983 my $redstring = shift // {};
754            
755 1387         3079 my $x = _RANDOM_(
756             'Nikola Tesla',
757             'Benjamin Franklin',
758             'Albert Einstein',
759             'Isaac Newton',
760             'Stephen Hawking',
761             'Henry Cavendish',
762             );
763            
764 1387         3535 _MERGE_( $redstring, physicist => $x );
765 1387         3120 return $x;
766             }
767              
768             sub biologist { # and medics
769 1420   50 1420 0 3809 my $redstring = shift // {};
770            
771 1420         3079 my $x = _RANDOM_(
772             'Charles Darwin',
773             'Edward Jenner',
774             'Robert Koch',
775             'Carl Linneaus',
776             'Alexander Fleming',
777             'Dr Fauci',
778             );
779            
780 1420         3679 _MERGE_( $redstring, biologist => $x );
781 1420         3139 return $x;
782             }
783              
784             sub website {
785 6023   100 6023 0 18794 my $redstring = shift // {};
786              
787 6023         12288 my $x = _RANDOM_(
788             'Tumblr',
789             'Pinterest',
790             'Youtube',
791             'Facebook',
792             'Wikipedia',
793             'Twitter',
794             'Instagram',
795             'Geocities',
796             'Parler',
797             'Angelfire',
798             'the Fediverse',
799             'Nostr',
800             'Reddit',
801             );
802              
803 6023         14191 _MERGE_( $redstring, website => $x );
804 6023         31844 return $x;
805             }
806              
807             sub fatuous {
808 2781   50 2781 0 10579 my $redstring = shift // {};
809              
810 2781         6295 my $x = _RANDOM_(
811             "We all know what's going on here.",
812             "It's plain and simple common sense.",
813             'Most people are in denial.',
814             "Isn't it obvious?",
815             "Wake up, sheeple!",
816             "It's obvious if you connect the dots.",
817             "They leave clues to mock us.",
818             "It's not funny!",
819             "There are too many coincidences to ignore.",
820             "You'd have to be blind not to see it!",
821             "It's so obvious!",
822             );
823              
824 2781         7328 _MERGE_( $redstring, clone => $x );
825 2781         9216 return $x;
826             }
827              
828             sub clone {
829 537   50 537 0 1507 my $redstring = shift // {};
830              
831 537         1621 my $x = _RANDOM_(
832             'an actor',
833             'an alien',
834             'an avatar',
835             'a CGI replica',
836             'a clone',
837             'a cyborg',
838             'a hologram',
839             'an impersonator',
840             'a look-alike',
841             'a robot',
842             'a shapeshifter',
843             );
844              
845 537         1685 _MERGE_( $redstring, clone => $x );
846 537         1363 return $x;
847             }
848              
849             sub lies {
850 28738   50 28738 0 95180 my $redstring = shift // {};
851              
852 28738         61979 my $x = _RANDOM_(
853             'obvious lies',
854             'a big coverup',
855             'a fairy tale',
856             'disinformation',
857             'the Big Lie',
858             'fake news',
859             );
860            
861 28738         68912 _MERGE_( $redstring, lies => $x );
862 28738         74010 return $x;
863             }
864              
865             sub evidence {
866 21398   50 21398 0 53600 my $redstring = shift // {};
867            
868             my @x = (
869             "there's a video about it on YouTube",
870 1741     1741   4153 sub { 'there was something about it on ' . website() },
871             "the voices told me",
872             "I had a dream",
873 1803     1803   4174 sub { website() . ' is censoring me' },
874 1739     1739   3804 sub { website() . ' was down this morning' },
875 21398         113169 );
876              
877 21398 100       59939 if ( my $c = $redstring->{disease_cause} ) {
878 259         1138 push @x, (
879             "$c is addictive",
880             );
881             }
882            
883 21398 100       52037 if ( my $m = $redstring->{misinformation} ) {
884 1453         5629 push @x, (
885             "they indoctrinate people about '$m' at schools and if it were the truth they wouldn't need to",
886             "'$m' gets pushed down our throats by mass media",
887             "'$m' is a false-flag operation",
888             );
889             }
890            
891 21398 100       48320 if ( my $auth = $redstring->{authority} ) {
892 356         1854 push @x, (
893             "$auth are the obvious people to go to",
894             "$auth are the only ones with the power to stop them",
895             "$auth are able to save us",
896             );
897             }
898              
899 21398 100       47048 if ( my $p = $redstring->{myth_place} ) {
900 1022         4619 push @x, (
901             "there are clues about $p in the Bible",
902             "there are clues about $p in the Voynich manuscript",
903             "$p is on some old maps",
904             "$p is on Google Maps",
905             );
906             }
907              
908 21398 100       45877 if ( my $art = $redstring->{artifact} ) {
909 1655         6185 push @x, (
910             "$art isn't in any museum",
911             "$art must be somewhere",
912             "$art is out there",
913             "$art can be found with GPS",
914             );
915             }
916              
917 21398 100       44658 if ( my $proj = $redstring->{shady_project} ) {
918 2916         10453 push @x, (
919             "everybody knows $proj is happening soon",
920             "$proj is well-funded",
921             "$proj is an open secret",
922             "there is so much evidence for $proj",
923             );
924             }
925            
926 21398 100       46148 if ( my $dl = $redstring->{dark_lord} ) {
927 1437         5987 push @x, (
928             "$dl is known to be growing in power",
929             "$dl has never seemed more powerful",
930             "$dl needs to be getting power from somewhere",
931             "$dl told me",
932             "I have seen signs from $dl",
933             );
934             }
935            
936 21398 100 100     101340 if ( my $v = $redstring->{victim} // $redstring->{physicist} // $redstring->{biologist} ) {
      100        
937             push @x, (
938             "$v died too young",
939             "$v sent a letter containing the truth before dying",
940             sub {
941 294     294   820 my $clone = clone( $redstring );
942 294         1761 "when they did an autopsy on $v it turned out it was $clone",
943             },
944             "they never did an autopsy on $v",
945             "$v wrote a will",
946             sub {
947 332     332   956 my $g = shady_group( $redstring );
948 332         2055 "$v was secretly one of $g";
949             },
950             sub {
951 332     332   805 my $animal = real_animal( $redstring );
952 332         2163 "when they did an autopsy on $v it turned out they were secretly a $animal in a human suit";
953             },
954 5355         37013 );
955             }
956              
957 21398 100 100     73374 if ( my $v = $redstring->{physicist} // $redstring->{biologist} ) {
958 2807         8294 push @x, (
959             "$v isn't mentioned in Aristotle's writing",
960             "$v hasn't given a lecture in months",
961             "$v isn't taken seriously by TRUE SCIENTISTS",
962             );
963             }
964              
965 21398 100       44828 if ( my $c = $redstring->{celebrity} ) {
966 3484 100       7802 if ( $c->{female} ) {
967 1257         2817 push @x, (
968             "you can't trust women",
969             "she said so on her Twitter",
970             );
971             }
972             else {
973 2227         4721 push @x, (
974             "you can't trust men",
975             "he said so on his Twitter",
976             );
977             }
978             }
979              
980 21398 100       48535 if ( my $f = $redstring->{fiction} ) {
981            
982             push @x, (
983             $f->{title} . " has secret messages encoded in it with numerology",
984             $f->{title} . " is satanic",
985             sub {
986 173     173   481 my $g = shady_group( $redstring );
987 173 100       550 my $has = splural( $redstring->{shady_group} ) ? 'have' : 'has';
988 173         1102 $f->{author} . " $has ties to $g";
989             },
990             sub {
991 208     208   641 my $b = bad_place( $redstring );
992 208         1365 $f->{author} . " got taken to $b for questioning";
993             },
994 1850         10621 );
995            
996 1850 100       5744 if ( my $p = $redstring->{random_place} ) {
997             push @x, (
998             $f->{author} . " had a secret home in $p",
999 285         1603 $f->{author} . " was secretly born in $p",
1000             );
1001             }
1002             }
1003            
1004 21398 100 100     74535 if ( my $animal = $redstring->{real_animal} // $redstring->{fake_animal} ) {
1005             push @x, (
1006             "the $animal wasn't mentioned in the Bible",
1007             "the $animal was mentioned in the Satanic Verses",
1008             "the $animal looks kind of weird",
1009             "nobody has ever seen a $animal in real life",
1010             "the $animal obviously isn't native to this planet",
1011 137     137   414 sub { "${ \ shady_group($redstring) } sacrifice $animal${\'s'} to ${ \ dark_lord($redstring) }" },
  137         430  
  137         378  
  137         484  
1012 1662         12072 "the $animal looks bigger in real life",
1013             "the $animal makes a funny noise",
1014             "Alex Jones did a podcast about the $animal",
1015             );
1016             }
1017            
1018 21398 100       44031 if ( my $mc = $redstring->{mind_control_device} ) {
1019 447         2029 my $time = a_long_time();
1020 447         1243 my $mcp = $redstring->{mind_control_device_plural};
1021 447         883 my $is = 'is';
1022 447         975 my $has = 'has';
1023 447         941 my $was = 'was';
1024 447 100       1184 if ($mcp) {
1025 280         592 $is = 'are';
1026 280         637 $has = 'have';
1027 280         593 $was = 'were';
1028             }
1029             push @x, (
1030             "everybody knows $mc $is real",
1031 45     45   209 sub { "$mc $has been researched by ${ \ shady_group($redstring) } $time" },
  45         125  
1032 38     38   152 sub { "$mc $was used to conceal ${ \ shady_group($redstring) } $time" },
  38         170  
1033 45     45   229 sub { "$mc $was used to infiltrate ${ \ shady_group($redstring) }" },
  45         187  
1034 447         4032 );
1035             }
1036              
1037 21398 100       43158 if ( my $ft = $redstring->{future_time} ) {
1038 900         3445 push @x, (
1039             "some of the few people still alive $ft time-travelled back to tell us",
1040 900         2111 "the people still alive $ft sent us hidden messages in ${ \ fiction() }",
1041             "it will all become clear $ft",
1042             );
1043             }
1044              
1045 21398 100       43890 if ( my $d = $redstring->{disease} ) {
1046 489         3028 push @x, (
1047             "patients with $d keep disappearing from hospitals",
1048             "patients with $d are being silenced by the government",
1049             "doctors working on $d are being killed",
1050             "$d probably isn't even a real disease",
1051             "nobody has ever died of $d",
1052             );
1053             }
1054              
1055 21398 100       41127 if ( my $f = $redstring->{food} ) {
1056 248         1333 push @x, (
1057             "$f don't taste like they used to",
1058             "$f smell funny",
1059             "$f make me feel sick",
1060             "I don't like $f",
1061             );
1062             }
1063              
1064 21398 100       43847 if ( my $chem = $redstring->{chemicals} ) {
1065 942         3608 push @x, (
1066             "$chem isn't on the periodic table",
1067             "$chem isn't real",
1068             "$chem isn't natural",
1069             "you'd have to be stupid to think $chem is real",
1070             );
1071             }
1072              
1073 21398 100       45389 if ( my $r = $redstring->{precious_resource} ) {
1074 3758         6755 my ( $bad, $are, $r_are );
1075 3758 100       9223 $redstring->{shady_group}{name} or shady_group( $redstring );
1076 3758         8018 foreach ( qw/ antagonist protagonist shady_group / ) {
1077 11274 100       28163 if ( $redstring->{$_}{name} ) {
1078 3758         7176 $bad = $redstring->{$_}{name};
1079 3758 100       8085 $are = $redstring->{$_}{plural} ? 'are' : 'is';
1080 3758 100       12366 $r_are = ($r =~ /s$/) ? 'are' : 'is';
1081             }
1082             }
1083 3758         24623 push @x, (
1084             "the Wikipedia entry for $r keeps getting edited by $bad",
1085             "$bad keeps buying $r secretly on the stock market",
1086             "the global supply of $r is at an all time low",
1087             "have you ever seen $r for real with your own eyes",
1088             "$r $r_are so damn expensive",
1089             "$r $r_are really rare",
1090             "Alex Jones says $bad $are linked to $r",
1091             );
1092             }
1093              
1094 21398 100       45647 if ( my $topic = $redstring->{topic} ) {
1095 6521         12625 my $topicname = $topic->{name};
1096 6521 100       14269 my $have = $topic->{plural} ? 'have' : 'has';
1097 6521         33388 push @x, (
1098             "there's hidden clues in the Wikipedia page about $topicname",
1099             "THEY let it slip during an edit war in a Wikipedia page about $topicname",
1100             "Bible numerology has clues about $topicname",
1101             "the Voynich manuscript has clues about $topicname",
1102             "$topicname $have always been suspicious",
1103             "$topicname $have connections to THEM",
1104             "nobody really understands $topicname",
1105             "all my posts about $topicname keep getting taken down by Tumblr",
1106             );
1107             }
1108              
1109 21398 100 100     71019 if ( my $p = $redstring->{random_place} // $redstring->{bad_place} ) {
1110             my $bad = $redstring->{antagonist}{name}
1111             // $redstring->{protagonist}{name}
1112             // $redstring->{shady_group}{name}
1113 6872   66     40714 // shady_group( $redstring );
      66        
      66        
1114 6872         27790 push @x, (
1115             "the Wikipedia entry for $p keeps getting edited by $bad",
1116             # This has singular/plural problems - how to solve?
1117             "$bad has ties to $p",
1118             "$p probably isn't a real place anyway",
1119             "$p isn't shown on any maps",
1120             );
1121             }
1122              
1123 21398         44793 for my $actor ( qw/ protagonists antagonists / ) {
1124 42796 100       121188 next unless $redstring->{$actor}{name};
1125            
1126 28738   66     81312 my $name = $redstring->{$actor}{shortname} // $redstring->{$actor}{name};
1127 28738 100       57819 my $have = splural( $redstring->{$actor} ) ? 'have' : 'has';
1128 28738 100       55825 my $are = splural( $redstring->{$actor} ) ? 'are' : 'is';
1129 28738 100       60045 my $s = splural( $redstring->{$actor} ) ? '' : 's';
1130 28738 100       53589 my $ies = splural( $redstring->{$actor} ) ? 'y' : 'ies';
1131            
1132 28738         103630 ( my $fbname = $name ) =~ s/^the //i;
1133 28738         62068 $fbname = _UCFIRST_ $fbname;
1134              
1135 28738         61266 my $lies = lies();
1136            
1137 28738         192501 push @x, (
1138             "$name $have included it in their manifesto",
1139             "$name $have been strangely quiet about it",
1140             "$name $are always untrustworthy",
1141             "$name $are controlling everything",
1142             "if you Google for $name there's loads of info",
1143             "the '$fbname Truth' Facebook page says so",
1144             "the '$fbname Exposed' website says so",
1145             "$name even admit$s it",
1146             "$name den$ies it but that is $lies",
1147             );
1148            
1149 28738 100 100     110427 if ( my $animal = $redstring->{real_animal} // $redstring->{fake_animal} ) {
1150 1815         4956 push @x, "$name $have a picture of the $animal on their Wikipedia entry";
1151             }
1152            
1153 28738 100       57791 if ( my $place = $redstring->{random_place} ) {
1154 6670         16047 push @x, "$name $have a secret base in $place";
1155             }
1156            
1157 28738 100       77390 if ( my $topic = $redstring->{topic} ) {
1158 8340         14189 my $topicname = $topic->{name};
1159 8340         15037 push @x, (
1160 8340 100       52908 "$name ${( $redstring->{$actor}{plural} ? \'keep' : \'keeps' )} editing the Wikipedia page about $topicname",
1161             "$name $are known to have ties to $topicname",
1162             "'$name' is almost an anagram of '$topicname'",
1163             "'$name' is the Hebrew word for '$topicname'",
1164             "'$name' is an anagram of '$topicname' (if you spell it wrong)",
1165             );
1166             }
1167             }
1168              
1169 21398         48291 my @evidences = List::Util::uniq( map { _RANDOM_(@x) } 1..2 );
  42796         94247  
1170            
1171 21398 100       69415 if ( @evidences == 2 ) {
    50          
1172 20744         46647 my ( $e1, $e2 ) = @evidences;
1173             return _RANDOM_(
1174             "You can tell this is the truth because $e1, and $e2.",
1175             ( ( "I know because $e1, and $e2." ) x 6 ),
1176             "You just need to connect the dots. " . _UCFIRST_( "$e1 and $e2." ),
1177             "I used to be asleep like you, but then I saw the clues. " . _UCFIRST_( "$e1, and $e2. WAKE UP!" ),
1178             "THEY HIDE THE TRUTH IN PLAIN SIGHT. " . _UCFIRST_( "$e1, and $e2." ),
1179             "You won't believe how deep the rabbit hole goes. " . _UCFIRST_( "$e1, and $e2." ),
1180 1431     1431   5325 sub { _UCFIRST_("$e1, and $e2. " . fatuous()) },
1181             sub {
1182 1350     1350   3738 my $e3 = uc _RANDOM_(@x);
1183 1350         3465 my $fatuous = fatuous();
1184 1350         6105 _UCFIRST_( "$e1, and $e2. $fatuous $e3!" );
1185             },
1186             sub {
1187 1406     1406   4314 my $e3 = uc _RANDOM_(@x);
1188 1406         5899 _UCFIRST_( "$e1, and $e2. They leave clues to mock us! $e3! MOCK! MOCK!" );
1189             },
1190             sub {
1191 1397     1397   2931 my $t = {};
1192 1397         4622 theory($t);
1193 1397         7056 _UCFIRST_( "$e1, and $e2. Isn't it obvious? Also: " . $t->{base_theory} );
1194             },
1195 20744         98538 );
1196             }
1197             elsif ( @evidences == 1 ) {
1198 654         1370 my ( $e1 ) = @evidences;
1199 654         2669 return _RANDOM_(
1200             "You can tell the truth because $e1.",
1201             _UCFIRST_("$e1 and that reveals the truth."),
1202             "The truth is obvious if you're not a sheep, $e1.",
1203             );
1204             }
1205            
1206 0         0 return _RANDOM_(
1207             'The truth is plain to see.',
1208             "You're blind if you can't see the truth.",
1209             "The truth is obvious if you're not a sheep.",
1210             );
1211             }
1212              
1213             sub hidden_truth {
1214 8913   100 8913 0 21538 my $redstring = shift // {};
1215            
1216             my $truth = _RANDOM_(
1217             sub { # wrap classics in a sub so they don't come up too often
1218             _RANDOM_(
1219             sub {
1220 12         65 $redstring->{topic} = { name => 'geology', plural => 0 };
1221 12         58 'the Earth is flat';
1222             },
1223             sub {
1224 5         28 $redstring->{topic} = { name => 'Inner Space (1987)', plural => 0 };
1225 5         14 'space is fake';
1226             },
1227             sub {
1228 11         75 $redstring->{topic} = { name => 'theology', plural => 0 };
1229 11         37 'God is real';
1230             },
1231             sub {
1232 10         69 $redstring->{topic} = { name => 'Buddhism', plural => 0 };
1233 10         29 'reincarnation is true';
1234             },
1235             sub {
1236 4         15 $redstring->{topic} = { name => 'germs', plural => 1 };
1237 4         10 "germs aren't real";
1238             },
1239             sub {
1240 11         55 $redstring->{topic} = { name => 'viruses', plural => 1 };
1241 11         27 "viruses aren't real";
1242             },
1243             sub {
1244 6         44 $redstring->{topic} = { name => 'MKUltra', plural => 0 };
1245 6         18 "MKUltra is still happening";
1246             },
1247             sub {
1248 9         55 shady_group( $redstring );
1249 9   33     87 $redstring->{antagonist} //= $redstring->{shady_group};
1250 9         37 $redstring->{topic} = { name => 'avalanches', plural => 1 };
1251 9         35 $redstring->{antagonist}{name} . " was responsible for the Dyatlov Pass incident";
1252             },
1253             sub {
1254 9         75 $redstring->{topic} = { name => 'Jeffrey Epstein', plural => 0 };
1255 9         25 "Epstein didn't kill himself";
1256             },
1257             sub {
1258 6         27 $redstring->{topic} = { name => "Sgt Pepper's Lonely Hearts Club Band", plural => 0 };
1259 6         16 "Paul McCartney died in a car crash in 1966";
1260             },
1261             sub {
1262 9         102 $redstring->{topic} = { name => 'Stonehenge', plural => 0 };
1263 9   100     47 $redstring->{random_place} //= 'Somerset';
1264 9         25 "the aliens built Stonehenge";
1265             },
1266             sub {
1267 9         55 $redstring->{topic} = { name => 'the Sphinx', plural => 0 };
1268 9   50     64 $redstring->{random_place} //= 'Egypt';
1269 9         25 "the aliens built the Pyramids";
1270             },
1271             sub {
1272 3         52 $redstring->{topic} = { name => 'Loch Ness', plural => 0 };
1273 3   50     59 $redstring->{random_place} //= 'Scotland';
1274 3         18 "the Loch Ness monster is real";
1275             },
1276             sub {
1277 4         21 $redstring->{topic} = { name => 'grain farming', plural => 0 };
1278 4   100     23 $redstring->{random_place} //= 'Alabama';
1279 4         10 "crop circles are caused by aliens";
1280             },
1281             sub {
1282 5         30 $redstring->{topic} = { name => 'kidnapping', plural => 0 };
1283 5   100     46 $redstring->{random_place} //= 'Alabama';
1284 5         14 "aliens abduct people for probing";
1285             },
1286             sub {
1287 2         9 $redstring->{topic} = { name => 'CERN', plural => 0 };
1288 2   50     12 $redstring->{random_place} //= 'Switzerland';
1289 2         6 "the large hadron collider will destroy the planet";
1290             },
1291             sub {
1292 7         37 $redstring->{topic} = { name => 'steal beams', plural => 1 };
1293 7   100     53 $redstring->{random_place} //= 'New York';
1294 7         63 "9/11 was an inside job";
1295             },
1296             sub {
1297 8         33 my $badevent = _RANDOM_(
1298             'Columbine',
1299             'Sandy Hook',
1300             'the Boston Marathon Bombing',
1301             'Malaysia Airlines Flight 370',
1302             'the JFK assassination',
1303             'Project Monarch',
1304             'the 1993 WTC bombing',
1305             'the 2017 hurricane season (Project Geostorm)',
1306             'Deepwater Horizon',
1307             );
1308 8         42 $redstring->{topic} = { name => 'false flag operations', plural => 1 };
1309 8         36 "$badevent was orchestrated by the US government";
1310             },
1311             sub {
1312 7         38 $redstring->{topic} = { name => 'glaciers', plural => 1 };
1313 7   100     40 $redstring->{random_place} //= 'Greenland';
1314 7         17 "global warming is a hoax";
1315             },
1316             sub {
1317 8         40 $redstring->{topic} = { name => 'geology', plural => 0 };
1318 8         21 'the US government knows exactly when Yellowstone will erupt';
1319             },
1320             sub {
1321 11         65 $redstring->{topic} = { name => 'cloud seeding', plural => 0 };
1322 11         27 "the government controls the weather";
1323             },
1324             sub {
1325 5         34 $redstring->{topic} = { name => 'Snapple', plural => 0 };
1326 5         14 "Snapple is owned by the KKK";
1327             },
1328             sub {
1329 8         36 my $disease = disease( $redstring );
1330 8         25 $redstring->{topic} = { name => 'biological warfare', plural => 0 };
1331 8         35 "$disease was developed as a bioweapon";
1332             },
1333             sub {
1334 9         56 $redstring->{topic} = { name => 'gas chambers', plural => 1 };
1335 9   100     58 $redstring->{random_place} //= 'Germany';
1336 9         24 "the holocaust never happened";
1337             },
1338             sub {
1339 14         93 $redstring->{topic} = { name => 'fascism', plural => 0 };
1340 14   100     82 $redstring->{random_place} //= 'Australia';
1341 14         43 "Antifa International have been starting wildfires";
1342             },
1343             sub {
1344 4         19 $redstring->{topic} = { name => 'phantom time', plural => 0 };
1345 4         11 "the years between 614 and 911 never happened";
1346             },
1347             sub {
1348 7         39 $redstring->{topic} = { name => 'Nazis', plural => 1 };
1349 7         24 "there is a Nazi base on the moon";
1350             },
1351             sub {
1352 8         44 $redstring->{topic} = { name => 'Nazis', plural => 1 };
1353 8         21 "there is a Nazi base in Antarctica";
1354             },
1355             sub {
1356 5         30 $redstring->{topic} = { name => 'wrestling', plural => 0 };
1357 5         15 "all professional sports are scripted";
1358             },
1359             sub {
1360 8         31 my $website = website( $redstring );
1361             my $spies = _RANDOM_(
1362             'spies',
1363             'the CIA',
1364             'GCHQ',
1365             'the NSA',
1366             'the Kremlin',
1367             'Ipsos MORI',
1368             sub {
1369 0         0 my $g = shady_group( $redstring );
1370 0 0       0 $redstring->{shady_group}{plural} ? $g : "spies from $g";
1371             }
1372 8         58 );
1373 8         73 $redstring->{topic} = { name => 'biscuits', plural => 1 };
1374 8         38 "$spies are using cookies to see everything you look at on $website";
1375             },
1376 224     224   8891 );
1377             },
1378             sub {
1379 221     221   1192 $redstring->{topic} = { name => 'the Mandela effect', plural => 0 };
1380 221         669 _RANDOM_(
1381             'Looney Tunes used to be Looney Toons',
1382             'the Berenstain Bears used to be spelled Berenstein',
1383             'Curious George used to have a tail',
1384             'Febreze used to have another E in it',
1385             'Froot Loops used to be Fruit Loops',
1386             'the Monopoly man is supposed to have a monocle',
1387             'Kitkat used to have a hyphen',
1388             'the Mona Lisa used to smile more',
1389             'C-3PO never used to have a silver leg',
1390             'Darth Vader said Luke I Am Your Father',
1391             'We Are the Champions used to say "of the world" at the end',
1392             'the USA used to have 52 states',
1393             );
1394             },
1395             sub {
1396 253     253   1042 $redstring->{topic} = { name => 'the crusades', plural => 1 };
1397 253         602 my $subst = _RANDOM_(
1398             'TikTok',
1399             'Twitter',
1400             'the world wars',
1401             'intergalactic warfare',
1402             'the white genocide',
1403             'colonization',
1404             'robot wars',
1405             );
1406 253         819 "the crusades never stopped, they were just replaced with $subst";
1407             },
1408             sub {
1409 233     233   1055 my $cryptids = cryptids( $redstring );
1410 233         933 "$cryptids are real";
1411             },
1412             sub {
1413 266     266   1171 my $cause = disease_cause( $redstring );
1414 266         701 my $disease = disease( $redstring );
1415 266         917 $redstring->{topic} = { name => 'western medicine', plural => 0 };
1416 266         877 "$cause causes $disease";
1417             },
1418             sub {
1419 234     234   822 my $cryptids = cryptids( $redstring );
1420 234         566 my $group = shady_group( $redstring );
1421 234         986 "$group are $cryptids";
1422             },
1423             sub {
1424 247     247   937 my $objects = objects( $redstring );
1425 247         782 "$objects are sentient";
1426             },
1427             sub {
1428 234     234   731 my $celebrity = celebrity( $redstring );
1429 234         720 my $long_time = a_long_time( $redstring );
1430 234         1179 "$celebrity has been drinking the blood of infants $long_time to stay looking young";
1431             },
1432             sub {
1433 213     213   658 my $celebrity = celebrity( $redstring );
1434 213         882 $redstring->{topic} = { name => 'cross-dressing', plural => 0 };
1435 213         757 $redstring->{celebrity}{female} = ! $redstring->{celebrity}{female};
1436 213         652 "$celebrity is transsexual";
1437             },
1438             sub {
1439 226     226   671 my $celebrity = celebrity( $redstring );
1440             my $consequence = _RANDOM_(
1441             sub {
1442 80         445 $redstring->{topic} = { name => 'robotics', plural => 0 };
1443 80         212 'replaced by a robot';
1444             },
1445             sub {
1446 83         389 $redstring->{topic} = { name => 'impersonation', plural => 0 };
1447 83         166 'replaced by a look-alike';
1448             },
1449             sub {
1450 63         274 $redstring->{topic} = { name => 'blackmail', plural => 0 };
1451 63         144 'blackmailed into silence';
1452             },
1453 226         1697 );
1454 226         1780 "$celebrity has been $consequence";
1455             },
1456             sub {
1457 245     245   887 my $objects = objects( $redstring );
1458 245         526 my $group = shady_group( $redstring );
1459 245         969 "$objects were invented by $group";
1460             },
1461             sub {
1462 239     239   922 my $resource = precious_resource( $redstring );
1463 239         915 "$resource is a source of free energy";
1464             },
1465             sub {
1466 232     232   674 my $mythplace = myth_place( $redstring );
1467 232         646 my $place = random_place( $redstring );
1468 232         1043 "$mythplace is in $place";
1469             },
1470             sub {
1471 222     222   742 my $victim = victim( $redstring );
1472 222         609 my $mythplace = myth_place( $redstring );
1473 222         887 "$victim discovered $mythplace and was killed to keep it a secret";
1474             },
1475             sub {
1476 231     231   726 my $resource = precious_resource( $redstring );
1477 231         780 my $disease = disease( $redstring );
1478 231         818 "$resource can cure $disease";
1479             },
1480             sub {
1481 242     242   641 my $animal = real_animal( $redstring );
1482 242         644 my $group = shady_group( $redstring );
1483 242         1025 "the $animal is a fake animal, engineered by $group";
1484             },
1485             sub {
1486 257     257   785 my $chemicals = chemicals( $redstring );
1487 257         734 my $animal = real_animal( $redstring );
1488 257 100       1198 my $s = ($animal ne 'fish') ? 's' : '';
1489 257         769 my $attribute = attribute( $redstring );
1490 257         1114 "the $chemicals in the water is turning the $animal$s $attribute";
1491             },
1492             sub {
1493 219     219   888 my $chemicals = chemicals( $redstring );
1494 219         702 my $food = food( $redstring );
1495 219         842 "$food are full of $chemicals";
1496             },
1497             sub {
1498 220     220   690 my $animal = real_animal( $redstring );
1499 220         829 "the $animal originally comes from another planet";
1500             },
1501             sub {
1502 229     229   893 my $animal = real_animal( $redstring );
1503 229         546 my $group = shady_group( $redstring );
1504 229         735 my $stupid = _RANDOM_(
1505             'people in costumes',
1506             'animatronics',
1507             'CGI',
1508             'highly coordinated swarms of bees',
1509             'holograms',
1510             'a mirage',
1511             );
1512 229         1025 "the $animal is a fake animal and is just $stupid";
1513             },
1514             sub {
1515 225     225   835 my $animal = fake_animal( $redstring );
1516 225         788 "the $animal is a real animal";
1517             },
1518             sub {
1519 230     230   832 my $time = future_time( $redstring );
1520 230         814 "the world will end $time";
1521             },
1522             sub {
1523 228     228   903 my $time = future_time( $redstring );
1524 228         821 $redstring->{topic} = { name => 'comets', plural => 1 };
1525 228         751 "the comet will hit us $time";
1526             },
1527             sub {
1528 230     230   758 my $place = random_place( $redstring );
1529 230         960 $redstring->{topic} = { name => 'flooding', plural => 1 };
1530 230         881 "$place was destroyed by floods";
1531             },
1532             sub {
1533 230     230   854 my $place = random_place( $redstring );
1534 230   66     1223 my $group = $redstring->{shady_group}{name} // shady_group( $redstring );
1535 230         647 $redstring->{topic} = { name => 'coup d\'etats', plural => 1 };
1536 230         903 "$place is ruled by $group";
1537             },
1538             sub {
1539 247     247   873 my $time = future_time( $redstring );
1540 247         854 $redstring->{topic} = { name => 'zombies', plural => 1 };
1541 247         825 "the zombie apocalypse will start $time";
1542             },
1543             sub {
1544 229     229   737 my $time = future_time( $redstring );
1545 229         1131 $redstring->{topic} = { name => 'Jesus', plural => 0 };
1546 229         707 "Jesus will return $time";
1547             },
1548             sub {
1549 242     242   948 my $mc = mind_control_device( $redstring );
1550 242   66     1155 my $group = $redstring->{shady_group}{name} // shady_group( $redstring );
1551 242         974 "THEY ($group) are using $mc";
1552             },
1553             sub {
1554 245     245   626 my $victim = victim( $redstring );
1555 245         647 my $place = bad_place( $redstring );
1556 245         805 "$victim is alive and kept at $place";
1557             },
1558             sub {
1559 217     217   642 my $artifact = artifact( $redstring );
1560 217         575 my $p = random_place( $redstring );
1561 217         804 "$artifact is in $p";
1562             },
1563             sub {
1564 258     258   788 my $victim = victim( $redstring );
1565 258         871 $redstring->{topic} = { name => 'the antichrist', plural => 0 };
1566 258         865 "$victim was the antichrist";
1567             },
1568             sub {
1569 224     224   639 my $victim = victim( $redstring );
1570 224         831 "$victim was a time-traveller";
1571             },
1572             sub {
1573 222     222   816 my $victim = victim( $redstring );
1574 222         758 "$victim was an inter-dimensional being";
1575             },
1576             sub {
1577 257     257   1025 my $chem = chemicals( $redstring );
1578 257         668 my $stupid = _RANDOM_(
1579             'water mixed with food-colouring',
1580             'water that they put in the microwave',
1581             'water that came from a goat\'s insides',
1582             'water that they used magic on',
1583             'made of fairy dust',
1584             'melted potato starch',
1585             );
1586 257         1000 "$chem is really just $stupid";
1587             },
1588             sub {
1589 262     262   749 my $fiction = fiction( $redstring );
1590 262         989 "$fiction is historically accurate";
1591             },
1592             sub {
1593 238     238   870 my $fiction = fiction( $redstring );
1594 238   66     1344 my $victim = $redstring->{victim} // victim( $redstring );
1595 238         982 "$fiction was really written by $victim";
1596             },
1597             sub {
1598 230     230   829 my $p = random_place( $redstring );
1599 230         577 my $extinct = _RANDOM_(
1600             'dinosaur',
1601             'mammoth',
1602             'sabre-tooth tiger',
1603             'Tasmanian tiger',
1604             'pterodactyl',
1605             );
1606 230   66     1506 $redstring->{real_animal} //= $extinct;
1607 230         840 "the $extinct is not extinct and there is a colony in $p";
1608             },
1609             sub {
1610 212     212   579 my $group = shady_group( $redstring );
1611 212         659 my $invention = invention( $redstring );
1612 212 100       818 my $are = $redstring->{shady_group}{plural} ? 'are' : 'is';
1613 212 100       600 my $was = $redstring->{invention_plural} ? 'were' : 'was';
1614 212         419 my $invented = _RANDOM_(
1615             'invented',
1616             'cooked up',
1617             'fabricated',
1618             );
1619 212         1248 _RANDOM_(
1620             "$group $are behind $invention",
1621             "$group $invented $invention",
1622             "$invention $was $invented by $group",
1623             );
1624             },
1625 8913         298103 );
1626            
1627 8913         321189 _MERGE_( $redstring, hidden_truth => $truth );
1628 8913         22763 return $truth;
1629             }
1630              
1631             sub theory {
1632 21398   100 21398 0 110253 my $redstring = shift // {};
1633            
1634             my $theory = _RANDOM_(
1635             sub {
1636 1453     1453   3689 my $group = shady_group( $redstring );
1637 1453         3268 $redstring->{protagonists} = $redstring->{shady_group};
1638 1453 100       3762 my $is = $redstring->{protagonists}->{plural} ? 'are' : 'is';
1639            
1640 1453         3838 my $misinfo = misinformation( $redstring );
1641            
1642 1453         3312 my $truth = hidden_truth( $redstring );
1643            
1644 1453         7265 my $exclaim = _RANDOM_(
1645             '', '', '', '', '', '',
1646             " But the truth shall not be buried!",
1647             " Don't let yourself be deceived!",
1648             " Take the red pill!",
1649             " Believing $misinfo is taking the blue pill!",
1650             " Take the red pill - $truth!",
1651             " Believing $misinfo is for blue-pilled sheeple!",
1652             " Open your mind!",
1653             );
1654            
1655 1453         7340 _UCFIRST_ "$group $is spreading the lie that $misinfo to distract the public from the truth that $truth.$exclaim";
1656             },
1657             sub {
1658 1395     1395   3353 my $protagonists = shady_group( $redstring );
1659 1395         3269 $redstring->{protagonists} = $redstring->{shady_group};
1660            
1661 1395         2842 my $antagonists = shady_group( $redstring );
1662 1395         2763 $redstring->{antagonists} = $redstring->{shady_group};
1663            
1664 1395         3382 my $time = a_long_time( $redstring );
1665            
1666             my $war_reason = _RANDOM_(
1667             'Nobody knows why',
1668             'The reasons for this have been long forgotten',
1669             sub {
1670             my $consequence = _RANDOM_(
1671             'disappears',
1672             'is assassinated',
1673             sub {
1674 78         348 my $badplace = bad_place( $redstring );
1675 78         314 "is taken away to $badplace";
1676             },
1677             sub {
1678 67         199 my $badplace = bad_place( $redstring );
1679 67         260 "has their mind wiped at $badplace";
1680             },
1681 380         2170 'is given a blue pill',
1682             );
1683 380         2303 "Everybody who finds out why $consequence";
1684             },
1685             sub {
1686 316         854 my $truth = hidden_truth();
1687 316   66     1994 my $pro = $redstring->{protagonists}{shortname} // $protagonists;
1688 316   66     1267 my $ant = $redstring->{antagonists}{shortname} // $antagonists;
1689 316 100       719 my $want = splural( $redstring->{protagonists} ) ? 'want' : 'wants';
1690 316         1593 _UCFIRST_ "$pro $want to expose the truth that $truth and $ant will do whatever they can to stop them";
1691             },
1692 1395         7168 );
1693            
1694 1395         11556 _UCFIRST_ "$protagonists and $antagonists have been in a secret war with each other $time. $war_reason."
1695             },
1696             sub {
1697 1412     1412   3484 my $group = shady_group( $redstring );
1698 1412         3278 $redstring->{protagonists} = $redstring->{shady_group};
1699            
1700 1412         3179 my $victim = victim( $redstring );
1701            
1702 1412         3196 my $truth = hidden_truth( $redstring );
1703            
1704             my $explanation = _UCFIRST_ _RANDOM_(
1705             sub {
1706 219         691 my $group2 = shady_group( $redstring );
1707 219         532 $redstring->{antagonists} = $redstring->{shady_group};
1708            
1709 219         939 "$victim learnt the truth from $group2";
1710             },
1711 1412         10888 "Nobody knows how $victim found out",
1712             "$victim found out because they were the source of all knowledge",
1713             "$victim found out using time travel",
1714             "$victim found out using mind reading",
1715             "$victim took the red pill",
1716             );
1717            
1718 1412         9378 _UCFIRST_ "$group killed $victim to hide the truth that $truth. $explanation.";
1719             },
1720             sub {
1721 1429     1429   3593 my $truth = hidden_truth( $redstring );
1722            
1723             my $sheeple = _RANDOM_(
1724             'people are sheeple',
1725             'they refuse to see the truth',
1726             'the mass media refuse to report it',
1727             sub {
1728 218         559 my $group = shady_group( $redstring );
1729 218         570 $redstring->{protagonists} = $redstring->{shady_group};
1730 218 100       756 my $is = $redstring->{protagonists}->{plural} ? 'are' : 'is';
1731 218         598 my $mc = mind_control_device( $redstring );
1732 218         948 "$group $is controlling people's minds with $mc";
1733             },
1734             sub {
1735 261         841 my $group = shady_group( $redstring );
1736 261         913 $redstring->{protagonists} = $redstring->{shady_group};
1737 261 100       795 my $have = $redstring->{protagonists}->{plural} ? 'have' : 'has';
1738 261         679 my $long_time = a_long_time( $redstring );
1739 261         1192 "$group $have been hiding it $long_time";
1740             },
1741             sub {
1742 273         886 my $group = shady_group( $redstring );
1743 273         1039 $redstring->{protagonists} = $redstring->{shady_group};
1744 273 100       920 my $is = $redstring->{protagonists}->{plural} ? 'are' : 'is';
1745 273         723 my $medium = _RANDOM_(
1746             'the Internet',
1747             'Twitter',
1748             'Facebook',
1749             'Instagram',
1750             'the mass media',
1751             'the TV news',
1752             'Tiktok',
1753             'both Tiktok and Instagram',
1754             );
1755 273         1160 "$group $is censoring $medium";
1756             },
1757 1429         9617 );
1758            
1759 1429         15446 _UCFIRST_ _RANDOM_(
1760             "$truth but nobody knows because $sheeple.",
1761             "$truth but nobody believes me because $sheeple.",
1762             "$truth but everybody ignores it because $sheeple.",
1763             "$truth but people are blind because $sheeple.",
1764             );
1765             },
1766             sub {
1767 1451     1451   3871 my $fiction = fiction( $redstring );
1768 1451         3340 my $truth = hidden_truth( $redstring );
1769            
1770             _UCFIRST_ _RANDOM_(
1771             "$fiction has a hidden message that $truth.",
1772             "$fiction is just an allegory which shows that $truth.",
1773             sub {
1774 504         1308 my $group = shady_group( $redstring );
1775 504   66     3249 $redstring->{protagonists} //= $redstring->{shady_group};
1776 504         2218 "$fiction was analysed with a computer by $group and it revealed $truth.",
1777             },
1778 1451         9945 );
1779             },
1780             sub {
1781 1444     1444   4074 my $group = shady_group( $redstring );
1782 1444         3427 $redstring->{protagonists} = $redstring->{shady_group};
1783 1444 100       3701 my $knows = $redstring->{protagonists}->{plural} ? 'knows' : 'know';
1784 1444 100       3185 my $theyve = $redstring->{protagonists}->{plural} ? "They've" : "It's";
1785 1444 100       3276 my $is = $redstring->{protagonists}->{plural} ? 'are' : 'is';
1786 1444   66     4399 my $group_shortname = $redstring->{protagonists}{shortname} // $group;
1787            
1788 1444         3345 my $artifact = artifact( $redstring );
1789 1444         3388 my $project = shady_project( $redstring );
1790 1444         3629 my $place = any_place( $redstring );
1791            
1792 1444         19762 my @parts = _UCFIRST_ _RANDOM_(
1793             "$group $knows that the truth about $project is engraved on $artifact. $theyve been searching $place to find it.",
1794             "$group found out that $artifact has the truth about $project engraved on it. $theyve been looking for it in $place.",
1795             "$group $knows that $artifact holds the truth about $project. They are hiding it in $place.",
1796             "$group $is searching $place for $artifact because it holds the truth about $project.",
1797             );
1798            
1799 1444         3139 my ( $group2, $group3 );
1800            
1801 1444 100       2677 if ( _RANDOM_( 1, 2 ) == 1 ) {
1802 740         1663 $group2 = shady_group( $redstring );
1803 740         1779 $redstring->{antagonists} = $redstring->{shady_group};
1804 740         1908 my $tool = precious_resource_with_quantity( $redstring );
1805 740         4731 push @parts, _UCFIRST_ _RANDOM_(
1806             "$tool is being used by $group2 to stop $group_shortname.",
1807             "$group2 donated $tool to help $group_shortname.",
1808             "$group2 used $tool to try to stop $group_shortname but it didn't work.",
1809             );
1810             }
1811            
1812 1444 100       3176 if ( _RANDOM_( 1, 2 ) == 1 ) {
1813 732         1722 $group3 = shady_group( $redstring );
1814 732   66     3401 $redstring->{antagonists} //= $redstring->{shady_group};
1815 732         1812 my $web = website( $redstring );
1816 732         5689 push @parts, _UCFIRST_ _RANDOM_(
1817             "$group3 hacked the $group_shortname $web account to track them through $place.",
1818             "$group3 noticed $group_shortname used an IP address from $place to post on $web.",
1819             "$group_shortname contacted $group3 on $web about $artifact.",
1820             );
1821             }
1822            
1823 1444 100 100     5380 if ( $group2 and $group3 ) {
1824 369         2121 push @parts, _UCFIRST_ _RANDOM_(
1825             "$group2 and $group3 are in contact with each other.",
1826             "$group2 and $group3 hired the same planner for their Christmas party.",
1827             "$group2 and $group3 are connected.",
1828             "$group2 and $group3 are probably working together.",
1829             );
1830             }
1831            
1832 1444         6839 return join q[ ], @parts;
1833             },
1834             sub {
1835 1437     1437   3516 my $group = shady_group( $redstring );
1836 1437         3225 $redstring->{protagonists} = $redstring->{shady_group};
1837 1437 100       4048 my $are = $redstring->{protagonists}->{plural} ? 'are' : 'is';
1838            
1839 1437         3635 my $place = random_place( $redstring );
1840 1437         3234 my $darklord = dark_lord( $redstring );
1841            
1842             my $getting_kids = _RANDOM_(
1843             'abducting orphan children',
1844             'buying child slaves',
1845             'cloning babies',
1846             'growing babies in test tubes',
1847             'breeding babies',
1848             'buying kids from poor families',
1849             'stealing babies',
1850             sub {
1851 168   50     1271 $redstring->{topic} //= { name => 'adoption', plural => 0 };
1852 168         372 'adopting babies';
1853             },
1854             sub {
1855 161   50     1152 $redstring->{topic} //= { name => 'adoption', plural => 0 };
1856 161         385 'adopting kids';
1857             },
1858 1437         6459 );
1859            
1860 1437         6177 my $sacrifice = _RANDOM_(
1861             'sacrifice them',
1862             'ritually sacrifice them',
1863             'offer them',
1864             'offer them as a blood sacrifice',
1865             'offer them as brides',
1866             'offer them as sex slaves',
1867             'feed them',
1868             'sell them',
1869             'mass sacrifice them',
1870             );
1871            
1872 1437         6790 _UCFIRST_ "$group $are $getting_kids in $place to $sacrifice to $darklord.";
1873             },
1874             sub {
1875 1424     1424   3424 my $group = shady_group( $redstring );
1876 1424         3406 $redstring->{protagonists} = $redstring->{shady_group};
1877 1424 100       3891 my $have = $redstring->{protagonists}->{plural} ? 'have' : 'has';
1878 1424 100       3231 my $are = $redstring->{protagonists}->{plural} ? 'are' : 'is';
1879            
1880 1424         3115 my $resource = precious_resource_with_quantity( $redstring );
1881            
1882 1424         8806 _UCFIRST_ _RANDOM_(
1883             "$group $have $resource.",
1884             "$group $are trying to obtain $resource.",
1885             "$group $are in possession of $resource.",
1886             "$group $have taken a delivery of $resource.",
1887             );
1888             },
1889             sub {
1890 1472     1472   3529 my $group = shady_group( $redstring );
1891 1472         3340 $redstring->{protagonists} = $redstring->{shady_group};
1892 1472 100       3726 my $are = $redstring->{protagonists}->{plural} ? 'are' : 'is';
1893            
1894 1472         2979 my $project = shady_project( $redstring );
1895            
1896             _UCFIRST_ _RANDOM_(
1897             "$group $are running $project.",
1898             "$group $are in charge of $project.",
1899             "$group $are working against $project.",
1900             sub {
1901 356         1226 my $auth = authority( $redstring );
1902 356         1832 "$group $are investigating $project. They will soon have enough evidence to go to $auth.",
1903             },
1904 1472         11748 );
1905             },
1906             sub {
1907 1387     1387   3378 my $group = shady_group( $redstring );
1908 1387         3485 $redstring->{protagonists} = $redstring->{shady_group};
1909            
1910 1387         3536 my $physicist = physicist( $redstring );
1911            
1912             my $fact = _RANDOM_(
1913             sub {
1914 84         328 $redstring->{topic} = { name => 'bathroom scales', plural => 1 };
1915 84         247 'electrons have more mass than protons';
1916             },
1917             sub {
1918 103         381 $redstring->{topic} = { name => 'weighing scales', plural => 1 };
1919 103         275 "protons don't have mass";
1920             },
1921             sub {
1922 88         229 my $things = _RANDOM_( 'electrons', 'protons' );
1923 88         347 $redstring->{topic} = { name => $things, plural => 1 };
1924 88         311 "$things are not real particles, they are just the terminal lines of a dielectric pulse";
1925             },
1926             sub {
1927 115         510 $redstring->{topic} = { name => 'water', plural => 0 };
1928 115         247 'water is its own element';
1929             },
1930             sub {
1931 96         421 $redstring->{topic} = { name => 'geocentrism', plural => 0 };
1932 96         237 'the sun goes round the Earth';
1933             },
1934             sub {
1935 89         482 $redstring->{topic} = { name => 'the moon', plural => 0 };
1936 89         329 'the moon is a hologram';
1937             },
1938             sub {
1939 98         323 $redstring->{topic} = { name => 'camembert', plural => 0 };
1940 98         305 'the moon is made of cheese';
1941             },
1942             sub {
1943 100         420 $redstring->{topic} = { name => 'the man in the moon', plural => 0 };
1944 100         244 'the man in the moon is a real man';
1945             },
1946             sub {
1947 79         387 my $chem = chemicals( $redstring );
1948 79         334 $redstring->{topic} = { name => 'the periodic table', plural => 0 };
1949 79         288 "element 119 is $chem";
1950             },
1951             sub {
1952 88         336 $redstring->{topic} = { name => 'air', plural => 0 };
1953 88         199 "air isn't real";
1954             },
1955             sub {
1956 88         407 $redstring->{topic} = { name => 'vacuum cleaners', plural => 0 };
1957 88         196 "space isn't a vacuum because then it would suck all the air";
1958             },
1959             sub {
1960 94         415 $redstring->{topic} = { name => 'the firmament', plural => 0 };
1961 94         255 "there is a dome over the flat Earth";
1962             },
1963             sub {
1964 91         421 $redstring->{topic} = { name => 'Satan', plural => 0 };
1965 91         219 'the axis of evil in the cosmic microwave background was put there by Satan';
1966             },
1967             sub {
1968 99         525 $redstring->{topic} = { name => 'the zodiac', plural => 0 };
1969 99         293 'astrology has been scientifically verified';
1970             },
1971             sub {
1972 75         266 $redstring->{topic} = { name => 'the year of the dragon', plural => 0 };
1973 75         175 'the Chinese zodiac can predict the future';
1974             },
1975 1387         18196 );
1976            
1977 1387         21209 my $solution = _UCFIRST_ _RANDOM_(
1978             "They paid $group to kill him.",
1979             "$group helped cover up the truth.",
1980             "$group threatened to kill him to keep him quiet.",
1981             "He was a member of $group so they knew he would keep quiet.",
1982             "$group arranged a convenient \"accident\".",
1983             );
1984            
1985 1387         3380 my $destruction = _RANDOM_(
1986             "all of modern physics",
1987             'our understanding of the universe',
1988             "the Big Bang 'theory'",
1989             "Einstein's theory of relativity",
1990             );
1991            
1992 1387         6421 _UCFIRST_ "$physicist discovered that $fact but the scientific establishment is suppressing it because it would destroy $destruction. $solution";
1993             },
1994             sub {
1995 1420     1420   3516 my $group = shady_group( $redstring );
1996 1420         3580 $redstring->{protagonists} = $redstring->{shady_group};
1997            
1998 1420         3785 my $biologist = biologist( $redstring );
1999            
2000             my $fact = _RANDOM_(
2001             sub {
2002 139         488 $redstring->{topic} = { name => 'pandas', plural => 1 };
2003 139         396 'pandas are really just fat raccoons';
2004             },
2005             sub {
2006 136         497 $redstring->{topic} = { name => 'spaghetti', plural => 1 };
2007 136         403 "spaghetti is a type of worm";
2008             },
2009             sub {
2010 124   50     989 $redstring->{celebrity} //= { name => 'Louis Armstrong', female => 0 };
2011 124         324 $redstring->{topic} = { name => 'snakes', plural => 1 };
2012 124         273 "snakes like jazz music";
2013             },
2014             sub {
2015 139   50     963 $redstring->{real_place} //= 'Antarctica';
2016 139         430 $redstring->{topic} = { name => 'penguins', plural => 1 };
2017 139         320 "penguins can fly but they get nervous when people are watching";
2018             },
2019             sub {
2020 119         498 $redstring->{topic} = { name => 'DNA', plural => 0 };
2021 119         371 "the 10 commandments are encoded in human DNA";
2022             },
2023             sub {
2024 131         612 $redstring->{topic} = { name => 'essential oils', plural => 1 };
2025 131         356 "essential oils cure all diseases";
2026             },
2027             sub {
2028 125         612 $redstring->{topic} = { name => 'vaccines', plural => 1 };
2029 125         444 "essential oils cure autism";
2030             },
2031             sub {
2032 123         467 $redstring->{topic} = { name => 'anger management', plural => 0 };
2033 123         365 "wasps are just angry bees";
2034             },
2035             sub {
2036 133         550 $redstring->{topic} = { name => 'oncology', plural => 0 };
2037 133         360 "windmills cause cancer";
2038             },
2039             sub {
2040 126         373 my $chem = chemicals( $redstring );
2041 126         389 $redstring->{topic} = { name => 'honey', plural => 0 };
2042 126         507 "$chem is killing all the bees";
2043             },
2044             sub {
2045 125         426 my $animal = real_animal( $redstring );
2046 125         526 $redstring->{topic} = { name => 'space flight', plural => 0 };
2047 125         504 "$animal DNA comes from space";
2048             },
2049 1420         14857 );
2050            
2051 1420         19136 my $solution = _UCFIRST_ _RANDOM_(
2052             "They paid $group to kill him.",
2053             "$group helped cover up the truth.",
2054             "$group threatened to kill him to keep him quiet.",
2055             "He was a member of $group so they knew he would keep quiet.",
2056             "$group arranged a convenient \"accident\".",
2057             );
2058            
2059 1420         3389 my $destruction = _RANDOM_(
2060             "the 'theory' of evolution",
2061             'modern medicine',
2062             "the germ theory of disease",
2063             "our understanding of DNA",
2064             'creation science',
2065             );
2066            
2067 1420         6494 _UCFIRST_ "$biologist discovered that $fact but the scientific establishment is suppressing it because it would destroy $destruction. $solution";
2068             },
2069             sub {
2070 1442     1442   3702 my $group = shady_group( $redstring );
2071 1442         3196 $redstring->{protagonists} = $redstring->{shady_group};
2072 1442 100       3602 my $have = $redstring->{protagonists}->{plural} ? 'have' : 'has';
2073            
2074 1442         3037 my $place = random_place( $redstring );
2075            
2076 1442         5338 my $how = _RANDOM_(
2077             "by diverting flights to $place to a Hollywood studio",
2078             'using mirrors',
2079             'by paying the UN',
2080             'by talking with funny accents',
2081             'by hacking satellites',
2082             );
2083            
2084 1442         6147 _UCFIRST_ "$place is just a hologram created by $group who $have been hiding it for years $how.";
2085             },
2086             sub {
2087 1429     1429   3467 my $place = random_place( $redstring );
2088 1429         3183 my $truth1 = hidden_truth( $redstring );
2089            
2090 1429         9649 _UCFIRST_ _RANDOM_(
2091             "It is common knowledge in $place that $truth1.",
2092             "They teach $truth1 at schools in $place.",
2093             "Everybody in $place knows that $truth1.",
2094             "People in $place found out that $truth1.",
2095             );
2096             },
2097             sub {
2098 1423     1423   3657 my $celeb = celebrity( $redstring );
2099 1423 100       4080 my $pronoun = $redstring->{celebrity}{female} ? 'she' : 'he';
2100 1423         3181 my $truth1 = hidden_truth( $redstring );
2101 1423         3301 my $group = shady_group( $redstring );
2102 1423         3235 $redstring->{protagonists} = $redstring->{shady_group};
2103 1423 100       3449 my $are = $redstring->{protagonists}->{plural} ? 'are' : 'is';
2104            
2105             my $silence = _RANDOM_(
2106             "$pronoun will probably have to be eliminated",
2107             "$pronoun is going to be killed if $pronoun isn't dead already",
2108             "$pronoun is being paid to stay quiet",
2109             "$pronoun will meet a convenient \"accident\"",
2110             sub {
2111 243         825 my $clone = clone( $redstring );
2112 243         767 "$pronoun has been replaced by $clone";
2113             },
2114             sub {
2115 242         784 my $place = bad_place( $redstring );
2116 242         758 "$pronoun has been imprisoned in $place";
2117             },
2118 1423         10306 );
2119            
2120 1423         9512 _UCFIRST_ "$celeb found out that $truth1 and $silence. " . _UCFIRST_ "$group $are protecting this secret.";
2121             },
2122             sub {
2123 1380     1380   3246 my $celeb = celebrity( $redstring );
2124 1380 100       4393 my $pronoun = $redstring->{celebrity}{female} ? 'she' : 'he';
2125 1380         2799 my $group = shady_group( $redstring );
2126 1380         2943 $redstring->{protagonists} = $redstring->{shady_group};
2127            
2128 1380         9858 _UCFIRST_ _RANDOM_(
2129             "$celeb is a member of $group.",
2130             "$celeb is a former member of $group.",
2131             "$celeb was thrown out of $group.",
2132             "$celeb infiltrated $group.",
2133             "$celeb is the leader of $group.",
2134             "$celeb is secretly worshipped by $group.",
2135             );
2136             },
2137 21398         535366 );
2138              
2139 21398 100 100     976125 if ( $redstring->{protagonists} and not $redstring->{antagonists} and _RANDOM_(0..1) ) {
      100        
2140 7690   66     27973 my $group1 = $redstring->{protagonists}{shortname} // $redstring->{protagonists}{name};
2141 7690         15723 my $group2 = shady_group( $redstring );
2142 7690         16454 $redstring->{antagonists} = $redstring->{shady_group};
2143 7690 100       18263 my $know = splural ($redstring->{antagonists}) ? 'know' : 'knows';
2144             $theory .= " " . _UCFIRST_ _RANDOM_(
2145             sub {
2146 1280     1280   3300 my $bribe = precious_resource_with_quantity( $redstring );
2147 1280         5707 "$group2 $know the truth but $group1 have paid them off with $bribe.";
2148             },
2149 7690         56666 "$group2 $know the truth but $group1 have threatened them to keep them silent.",
2150             "$group2 were helping them until $group1 betrayed them.",
2151             "$group2 were helping them for a while.",
2152             "$group2 were originally opposed to this but they're now in on it.",
2153             "$group2 are trying to get evidence to prove it.",
2154             );
2155             }
2156              
2157 21398         80641 _MERGE_( $redstring, base_theory => $theory );
2158            
2159 21398         55708 my $evidence = evidence( $redstring );
2160 21398 50       87740 $theory .= " $evidence" if $evidence;
2161              
2162 21398         53272 my $numerology = numerology( $redstring );
2163 21398 100       48496 $theory .= " $numerology" if $numerology;
2164              
2165 21398         55257 _MERGE_( $redstring, theory => $theory );
2166              
2167 21398         122047 return $theory;
2168             }
2169              
2170             my %special_numbers = (
2171             19 => [ qr/COVID/, '19 is the coronavirus number' ],
2172             24 => [ qr/TINTIN/, 'There are 24 Tintin comics' ],
2173             33 => [ qr/MASON/, '33 is associated with the masons' ],
2174             35 => [ qr/ELVIS/, 'Elvis was born in 1935' ],
2175             44 => [ qr/OBAMA/, 'Barack Obama was the 44th President of the USA' ],
2176             45 => [ qr/TRUMP|QANON|USA/, 'Donald Trump was the 45th President of the USA',
2177             qr/UNITEDNATIONS/, 'The United Nations was founded in 1945' ],
2178             46 => [ qr/BIDEN/, 'Joe Biden was the 46th President of the USA' ],
2179             47 => [ qr/THECIA/, 'The CIA was founded in 1947',
2180             qr/SILVER/, 'Silver has atomic number 47' ],
2181             49 => [ qr/NATO/, 'NATO was founded in 1949' ],
2182             51 => [ qr/KFC/, 'Area 51 is the fifty-first area' ],
2183             52 => [ qr/KFC/, 'KFC was founded in 1952' ],
2184             55 => [ qr/BIGMAC|MCDONALDS/, 'McDonalds was founded in 1955' ],
2185             63 => [ qr/JFK|OSWALD/, 'JFK was shot in 1963' ],
2186             79 => [ qr/GOLD/, 'Gold has the atomic number 79' ],
2187             81 => [ qr/HIV/, 'AIDS was discovered in 1981' ],
2188             82 => [ qr/COKE/, 'Diet Coke first came out in 1982' ],
2189             86 => [ qr/RADON/, 'The atomic number for radon is 86' ],
2190             92 => [ qr/URANIUM/, 'The atomic number for uranium is 92' ],
2191             322 => [ qr/SKULL/, 'Skull and Bones is Order 322' ],
2192             666 => [ qr/DEVIL|DEMON|SATAN/, '666 is the number of the beast' ],
2193             );
2194              
2195             sub numerology {
2196 21398   50 21398 0 50550 my $redstring = shift // {};
2197            
2198             my @strings = List::Util::uniq(
2199 150561         366408 grep { length }
2200 150561         260302 map { my $letters = uc( $_ ); $letters =~ s/[^A-Z0-9]//g; $letters }
  150561         654680  
  150561         300676  
2201             map {
2202 150561 100       436379 /^(the )(.+)$/i ? $2 : $_
2203             }
2204             map {
2205 21398 100       60562 ref( $_ ) ? grep( defined, $_->{name}, $_->{shortname}, $_->{title}, $_->{author} ) : $_
  160479         438347  
2206             }
2207             values( %$redstring )
2208             );
2209            
2210 21398         85518 my %calcs;
2211 21398         47612 foreach my $string ( @strings ) {
2212 125477 100       272672 next if length($string) >= 20;
2213 85905         248706 my @letters = split //, $string;
2214 85905 100       773440 my @numbers = map /[A-Z]/ ? ( ord($_) - 0x40 ) : $_, @letters;
2215 85905         223558 my $sum = List::Util::sum( @numbers );
2216            
2217 85905   100     128396 push @{ $calcs{$sum} ||= [] }, sprintf(
  85905         840295  
2218             '%s = %s = %s',
2219             join( '+', @letters ),
2220             join( '+', @numbers ),
2221             $sum,
2222             );
2223             }
2224            
2225 21398         94625 foreach my $key ( %special_numbers ) {
2226 855920 100       1690048 if ( $calcs{$key} ) {
2227 7139         11768 my @copy = @{ $special_numbers{$key} };
  7139         18172  
2228 7139         17289 while ( @copy ) {
2229 7469         18474 my ( $test, $statement ) = splice( @copy, 0 , 2 );
2230 7469 100       68434 next unless "@strings" =~ $test;
2231 55         149 push @{ $calcs{$key} }, "And guess what? " . $statement;
  55         277  
2232             }
2233             }
2234             }
2235            
2236 21398 100       63292 my @wow = map { @$_ > 1 ? @$_ : () } values %calcs;
  85228         164624  
2237            
2238 21398 100       47804 if ( @wow ) {
2239 715         1890 return sprintf(
2240             "%s %s",
2241             _RANDOM_(
2242             'The numbers never lie.',
2243             'Trust the numbers.',
2244             'You can see the truth in the numbers.',
2245             ),
2246             join(
2247             '',
2248             map( "$_. ", @wow ),
2249             )
2250             );
2251             }
2252            
2253 20683         89319 return '';
2254             }
2255              
2256             sub bad_punctuation {
2257 0     0 0   my ( $string, $cancel ) = @_;
2258 0 0         unless ( $cancel ) {
2259 0           $string =~ s/ ([A-Za-z]) ([,!?]) / $1 . _RANDOM_( $2, " $2", " $2", " $2$2") /exg;
  0            
2260 0           $string =~ s/ ([A-Za-z]) ([.]) / $1 . _RANDOM_($2, $2, " $2", " ", " $2$2$2") /exg;
  0            
2261 0           $string =~ s/\!/_RANDOM_('!', '!', '!!', "!!!!")/ex;
  0            
2262             }
2263 0           return $string;
2264             }
2265              
2266             1;
2267              
2268             __END__