Merge pull request #195 from xexyl/ferg1-alt

Various fixes, improvements in 2024/ferguson1
This commit is contained in:
Landon Curt Noll authored and GitHub committed 2025-08-16 16:39:04 -07:00
commit cba03391ad
15 files changed
+130 -86

No files matched your search

+33 -13
View File
@@ -47,18 +47,20 @@ practical reasons.
``` <!---sh-->
./prog.alt
./prog.alt 55 # 55 = number of turns, default 21
./prog.alt 42 6666 # 42 = number of turns (default 21), 6666 = hp (default 666)
./prog.alt2
./prog.alt2 # submitted code with bug fix
```
## Judges' remarks:
You will have to go to "Fun-Damentals" to understand the logic flow of this
game. While you goto as many as 149 times and jump hundreds if not over one
thousand times to travel from `main()` to a successful `exit(666)` you may have
a devil of a time trying to figure out how this program actually does what it
does.
game. While the code might goto as many as 149 times to travel from `main()` to
a successful `exit(666)` you may have a devil of a time trying to figure out how
this program actually does what it does as it jumps hundreds if not thousands of
times.
Before you set off on your adventure to decode this program's logic, make
sure you have enough food, ammo, clothes, oxen, and programming supplies.
@@ -76,19 +78,37 @@ finish and not counting macros but counting all function calls (not libc
functions just the few functions in prog.c), there were a total of **1416** (!)
line jumps. Skipping prog.c function calls and it was still **1131** jumps! The
prog.c, if you remove `#include`s, blank lines, lines with just a brace and
lines that have only variables, **has just 58 (!) lines of code**. A very tiny
lines that have only variables, **only has 58 (!) lines of code**. A very tiny
fraction of the time a line might be repeated in a row ONCE but that does not
really matter.
**NOTE**: I actually submitted two versions. This one is not encrypted. The
encrypted one even encrypted emojis without having to decrypt them in order to
print them (and everything else). I have kept references to encryption in this
file even after publication. I do have a copy of it if anyone is interested.
really matter, as it is still technically a jump.
**SUGGESTION**: if you dare, try opening
[prog.gotos.c](%%REPO_URL%%/2024/ferguson1/prog.gotos.c) in an editor with
syntax highlighting and then highlight `goto`. Alternatively, try it with `grep`
if your grep has colours enabled (probably easier).
if your grep has colours enabled (probably easier). This is a nice one to try:
``` <!---sh-->
grep -E 'heaven|goto|666|hell' prog.gotos.c
```
Alternatively, in vim you might try, making sure you're in command mode first
(hit ESC if you don't know - if that doesn't work try hitting it again as it can
depend on what you're doing):
``` <!---vim-->
/heaven\|goto\|666\|hell
```
Read it and <del>weep</del> and scream (or curse :-) )!
**NOTE**: I actually submitted two versions, one encrypted (even emojis); any
document mentioning encryption is left <del>for personal reasons</del> out of
laziness and exhaustion from working on improving the presentation even after it
won. I have a copy of the code and data files
[here](https://ioccc.xexyl.net/2024/oregon/encrypted.txz) (more details on it
can be found [here](https://ioccc.xexyl.net/2024/oregon/) or else in the
markdown files in the tarball), if anyone is interested, assuming there's not an
extended power cut or something else goes wrong.
<div id="devil">
+2 -6
View File
@@ -13,11 +13,6 @@
* mocking you if you eat his frozen body is not tied to an event in prog.c but
* it is here.
*
* Actually this is closer to prog.alt.c in the sense that event 23 there also
* has the son ghost mocking the PC. The difference is prog.alt.c has an event
* 24 and that is not here. This almost certainly has fewer gotos in code (if we
* count the comments probably not).
*
* Finally this code is from an earlier version so some of it might be missing,
* not just the events, and not just the gotos, but potentially other things
* too, possibly bugs that were fixed in prog.c but are not here (and no more
@@ -27,7 +22,8 @@
* WARNING: this code and its comments are not up to date. I wrote 116 before
* filtered through the cpp and 134 after the cpp and I didn't wish to
* repeatedly revisit this file trying to explain everything. As it is I barely
* finished this in time.
* finished this in time. After publication this was updated with the complete
* version as well.
*/
#include<stdio.h>
#include<string.h>
Binary file not shown.
Binary file not shown.
Binary file not shown.
+12 -8
View File
@@ -458,22 +458,24 @@ wish to more easily follow the code, though that might or might not help that
much. If a variable or other kind of symbol is missing or is not what it says
here that was by (in some cases) simply missing it or (in other cases) due to
having changed things a fair amount; this submission took a lot of work and time
to get everything in. One variable, <code>p</code>, is for the encrypted version only.</p>
to get everything in.</p>
<p>The following variables are of primary concern (some temporary ones are not
documented I think):</p>
<ul>
<li>O: how much you spend on oxen</li>
<li>R: amount spent on food</li>
<li>E: amount spent on ammo</li>
<li>G: amount spent on clothing</li>
<li>O: how much you spend on oxen</li>
<li>N: amount spent on miscellaneous supplies</li>
<li>T: how much money you have</li>
<li>R: amount spent on food (and how much you have)</li>
<li>E: amount spent on ammo (and how much you have)</li>
<li>G: amount spent on clothing (and how ‘much’ you have - a misnomer)</li>
<li>O: how much you spend on oxen (and how ‘many’ you have - a misnomer)</li>
<li>N: amount spent on miscellaneous supplies (and how ‘many’ you have - a misnomer)</li>
<li>T: how much money you have (in US dollars)</li>
<li>e: ate an ox</li>
<li>b: hp (hit points, starts out at 666, allows for survival in conditions you
can’t in the original) or stamina (kind of a combination - if you get injured
and you see the doctor and can afford it you will not keep losing hp but you
won’t gain any either).</li>
won’t gain any either). Alt code allows you to specify how many hp (default
666), if you specify also max number of turns (NB: only prog.alt.c, not
prog.alt2.c).</li>
<li>A: turn number for setting date (the first week, Monday 29 March 1847 is at
16 so to print the second week day date month and year (though it does it March
29 like the American way) you would do <code>V(A+16)</code>) (note that the date is not set
@@ -512,6 +514,8 @@ certain messages. But if you buy more that could in theory happen again. Note
that some messages might be printed instead of the you have run out of oxen
message, if they’re the ones causing it, though I’m not going to say this is in
every case as there are a lot of ways for this to happen.</li>
<li><code>C</code>: alt code only, max number of turns (specified at command line, default
21).</li>
<li>any other variable I haven’t the foggiest, even if it’s not related to fog (of
which there is an event where you encounter fog) - sorry. An example here is
<code>m</code>.</li>
+13 -8
View File
@@ -3,23 +3,25 @@ wish to more easily follow the code, though that might or might not help that
much. If a variable or other kind of symbol is missing or is not what it says
here that was by (in some cases) simply missing it or (in other cases) due to
having changed things a fair amount; this submission took a lot of work and time
to get everything in. One variable, `p`, is for the encrypted version only.
to get everything in.
The following variables are of primary concern (some temporary ones are not
documented I think):
- O: how much you spend on oxen
- R: amount spent on food
- E: amount spent on ammo
- G: amount spent on clothing
- O: how much you spend on oxen
- N: amount spent on miscellaneous supplies
- T: how much money you have
- R: amount spent on food (and how much you have)
- E: amount spent on ammo (and how much you have)
- G: amount spent on clothing (and how 'much' you have - a misnomer)
- O: how much you spend on oxen (and how 'many' you have - a misnomer)
- N: amount spent on miscellaneous supplies (and how 'many' you have - a misnomer)
- T: how much money you have (in US dollars)
- e: ate an ox
- b: hp (hit points, starts out at 666, allows for survival in conditions you
can't in the original) or stamina (kind of a combination - if you get injured
and you see the doctor and can afford it you will not keep losing hp but you
won't gain any either).
won't gain any either). Alt code allows you to specify how many hp (default
666), if you specify also max number of turns (NB: only prog.alt.c, not
prog.alt2.c).
- A: turn number for setting date (the first week, Monday 29 March 1847 is at
16 so to print the second week day date month and year (though it does it March
29 like the American way) you would do `V(A+16)`) (note that the date is not set
@@ -59,10 +61,13 @@ certain messages. But if you buy more that could in theory happen again. Note
that some messages might be printed instead of the you have run out of oxen
message, if they're the ones causing it, though I'm not going to say this is in
every case as there are a lot of ways for this to happen.
- `C`: alt code only, max number of turns (specified at command line, default
21).
- any other variable I haven't the foggiest, even if it's not related to fog (of
which there is an event where you encounter fog) - sorry. An example here is
`m`.
When an amount spent (if it happens, not necessarily going to for every
variable) spent ends up being < 0 (it's not allowed to go that low when
purchasing) it means that there is an insufficient amount (thus a variable
+24 -12
View File
@@ -495,14 +495,16 @@ practical reasons.</p>
<pre><code> make alt</code></pre>
<h3 id="alternate-use">Alternate use:</h3>
<pre><code> ./prog.alt
./prog.alt 55 # 55 = number of turns, default 21
./prog.alt 42 6666 # 42 = number of turns (default 21), 6666 = hp (default 666)
./prog.alt2</code></pre>
./prog.alt2 # submitted code with bug fix</code></pre>
<h2 id="judges-remarks">Judges’ remarks:</h2>
<p>You will have to go to “Fun-Damentals” to understand the logic flow of this
game. While you goto as many as 149 times and jump hundreds if not over one
thousand times to travel from <code>main()</code> to a successful <code>exit(666)</code> you may have
a devil of a time trying to figure out how this program actually does what it
does.</p>
game. While the code might goto as many as 149 times to travel from <code>main()</code> to
a successful <code>exit(666)</code> you may have a devil of a time trying to figure out how
this program actually does what it does as it jumps hundreds if not thousands of
times.</p>
<p>Before you set off on your adventure to decode this program’s logic, make
sure you have enough food, ammo, clothes, oxen, and programming supplies.
You’ll be driving for 2170 miles through a wild wilderness inspired
@@ -517,18 +519,28 @@ finish and not counting macros but counting all function calls (not libc
functions just the few functions in prog.c), there were a total of <strong>1416</strong> (!)
line jumps. Skipping prog.c function calls and it was still <strong>1131</strong> jumps! The
prog.c, if you remove <code>#include</code>s, blank lines, lines with just a brace and
lines that have only variables, <strong>has just 58 (!) lines of code</strong>. A very tiny
lines that have only variables, <strong>only has 58 (!) lines of code</strong>. A very tiny
fraction of the time a line might be repeated in a row ONCE but that does not
really matter.</p>
really matter, as it is still technically a jump.</p>
</blockquote>
<p><strong>NOTE</strong>: I actually submitted two versions. This one is not encrypted. The
encrypted one even encrypted emojis without having to decrypt them in order to
print them (and everything else). I have kept references to encryption in this
file even after publication. I do have a copy of it if anyone is interested.</p>
<p><strong>SUGGESTION</strong>: if you dare, try opening
<a href="https://github.com/ioccc-src/winner/blob/master/2024/ferguson1/prog.gotos.c">prog.gotos.c</a> in an editor with
syntax highlighting and then highlight <code>goto</code>. Alternatively, try it with <code>grep</code>
if your grep has colours enabled (probably easier).</p>
if your grep has colours enabled (probably easier). This is a nice one to try:</p>
<pre><code> grep -E &#39;heaven|goto|666|hell&#39; prog.gotos.c</code></pre>
<p>Alternatively, in vim you might try, making sure you’re in command mode first
(hit ESC if you don’t know - if that doesn’t work try hitting it again as it can
depend on what you’re doing):</p>
<pre><code> /heaven\|goto\|666\|hell</code></pre>
<p>Read it and <del>weep</del> and scream (or curse :-) )!</p>
<p><strong>NOTE</strong>: I actually submitted two versions, one encrypted (even emojis); any
document mentioning encryption is left <del>for personal reasons</del> out of
laziness and exhaustion from working on improving the presentation even after it
won. I have a copy of the code and data files
<a href="https://ioccc.xexyl.net/2024/oregon/encrypted.txz">here</a> (more details on it
can be found <a href="https://ioccc.xexyl.net/2024/oregon/">here</a> or else in the
markdown files in the tarball), if anyone is interested, assuming there’s not an
extended power cut or something else goes wrong.</p>
<div id="devil">
<h3 id="a-pact-with-the-devil-on-the-oregon-trail-and-his-134-149-regrets-of-goto">A Pact With the Devil On the Oregon Trail (…and his <del>134</del> 149 regrets of goto)</h3>
</div>
+4 -4
View File
@@ -642,7 +642,7 @@ prog.c and after filtered through <code>cc -E</code>. First prog.c. Prepare to b
horrified, if you’re not already:</p>
<pre><code> 131 goto
301 semicolon
143 colons
143 colon
51 if
11 else
3 while
@@ -666,7 +666,7 @@ horrified, if you’re not already:</p>
<p>1.01 goto per keyword? But then there’s the cpp filtered code…</p>
<pre><code> 149 goto
339 semicolon
143 colons
143 colon
51 if
11 else
7 while
@@ -691,7 +691,7 @@ horrified, if you’re not already:</p>
<p>For comparison, here is the original version:</p>
<pre><code> 116 goto
294 semicolon
138 colons
138 colon
50 if
11 else
4 while
@@ -715,7 +715,7 @@ horrified, if you’re not already:</p>
<p>And the pre-processed one:</p>
<pre><code> 134 goto
332 semicolon
138 colons
138 colon
50 if
11 else
8 while
+4 -4
View File
@@ -231,7 +231,7 @@ horrified, if you're not already:
```
131 goto
301 semicolon
143 colons
143 colon
51 if
11 else
3 while
@@ -259,7 +259,7 @@ horrified, if you're not already:
```
149 goto
339 semicolon
143 colons
143 colon
51 if
11 else
7 while
@@ -289,7 +289,7 @@ For comparison, here is the original version:
```
116 goto
294 semicolon
138 colons
138 colon
50 if
11 else
4 while
@@ -317,7 +317,7 @@ And the pre-processed one:
```
134 goto
332 semicolon
138 colons
138 colon
50 if
11 else
8 while
+23 -24
View File
@@ -4,19 +4,19 @@
#include<stdlib.h>
#include<unistd.h>
long x(long y,long z){ return rand()%(z-y+1)+y; }
unsigned m,D,Q,v,l,Y,f,g,X,z,B,i,h,
unsigned m,D,Q,v,l,Y,f,g,X,z,B,i,h,C=21,
r,u,d,e; long
O,R,E,G,O,N, T,R,A,I,L,
*o[]={ &O,&R,&E,&G,&O,&N,&I} ,a,t[7],q,M, b=666,c,W;
char *y; FILE*K; size_t J;
char *y,*p; FILE*K; size_t J;
#define j E=I/5;
#define w(i) { V(i); V(4); goto hell; }
long Z(long x){ return x *1663; }
long Z(long x){ return x * 1663; }
#define S(x,z) while(scanf(&y[Z(x)],&z)!=1)while(getchar()!='\n');
void V(long x) { printf("%s",&y[Z(x)]); }
long k(void) { ++ Y; return I>0?x(1,101)+ Y>53 +a?9:0+f?9:0:0; } int main(void){ srand(time(0));
K=fopen(DATA,"r"); if(!K||getdelim(&y,&J,EOF,K)<0)goto hell; goto s; aa:goto dd; u: goto M; ee:goto ff; jj:goto kk; N:for (X=
void V(long x){ printf("%s",&y[Z(x)]); }
long k() { return E>0?x(0,99)>49:0; } int main(int argc, char **argv) {
b=argc>2?strtol(2[argv],0,0):b; C=1[argv]?strtoul(1[argv],0,0):C;
K=fopen(DATA,"r"); if(!K||getdelim(&y,&J,EOF,K)<0)goto hell; goto s; aa:goto dd; u: goto M; ee:goto ff; N:for (X=
1; X < 6; ++X) { x:V(X+--(
@@ -25,19 +25,19 @@ K=fopen(DATA,"r"); if(!K||getdelim(&y,&J,EOF,K)<0)goto hell; goto s; aa:goto dd;
t[X]) if(t[X]<0 ||t[X]>
666){ V(14); goto x; goto
heaven; l:goto C; JJ:goto W; qq:goto rr; } L=T; for(u
heaven; l:goto C; jj:goto kk; } L=T; for(u
=0; u < 6; ++u)L-=t[u];
if(L<0){ V(46); memset(&t,0,
sizeof t); goto v; ZZ:goto II; } }
sizeof t); goto v; kk:goto ll; } }
else{ S(3 ,*(o[X])) if(
*o[X]<0||*o[X] >666){ V(14);
goto x; } T=1666-O-R-E-G-0-N; if(T<0){ V(46); O=R=E=G=N=0; goto v; c: goto d; oo:goto pp; } } } if(z)goto A; B:I=E*5;
goto x; } T=1666-O-R-E-G-0-N; if(T<0){ V(46); O=R=E=G=N=0; goto v; c: goto d; oo:goto W; } } } if(z)goto A; B:I=E*5;
printf(&y[Z(12)],T); if(z) goto F; switch(1) { dd:goto cc; I:goto R; default: do { if(b<1||M<0||M>2169) break; goto i;
@@ -54,42 +54,41 @@ case 2: goto T; default: goto y; } } L:goto v; T:l=1; if (I<9)V(16); else { if (
R += 23; if(!x(0,9))i=17; } else{ V(51); R+=18; } } else { V(53); } I-=9; j M-=45; } l=0; f: z=0;
X: if(R<1){ if(O>39){ V(e=x(0,1)?18:19); O -= 40; goto q; o: goto Y; ii:goto l; } w(24) } else goto K; Y: switch(q=x(0,24))
X: if(R<1){ if(O>39){ V(e=x(0,1)?18:19); O -= 40; goto q; o: goto Y; ii:goto l; } w(24) } else goto K; Y: switch(q=x(0,23))
{ s: goto h;
case 24:if(++g<4) V(73); else w(147) break;
case 23:
if (d) V(39); if (e) V(25); break; case 1: V(95); R+=5; break; S: if (I>1999) w(27) V(82); M-=9; N-=5; R-=20; goto Z;
case 23:if(++g<4) V(73); else w(147) break;
case 1: V(95); R+=5; break; S: if (I>1999) w(27) V(82); M-=9; N-=5; R-=20; goto Z;
case 18:V(26); break; case 13: V(28); break;
case 2: O-=40; V(71); break; mm:goto nn;
case 2: O-=40; V(71); break;mm:goto nn;
case 3: V(a=76); b-=70; goto jj; case 4:V(77); N-=7; M-=7; break; case 5:case
10: if(q<6) { V(78); if(k()) { V(81); R+=9; N+=3; } else { V(f=79); b-=80; T/=4; } I=0; j } else
10: if(q<6) { V(78); if(k()) { V(81); R+=9; N+=3; } else { V(f=79); b-=80; T/=4; I=E=0; } } else
{ V(56); if (k()) { V(a=29); T+=70; break; cc:goto ee; } else { V(f=62); M-=50; b-=35; } } break;
case 9: case 19:V(30); break; case 20:V(32); break; case 21: V(31); break; case 6: goto g; Z: break; case 16: case 22:V(49); break; case 17: V(72); break;
case 7: V(83); M-=10; break; D: goto P; case 8: V(86); R-=30; G-=20; O-=40; V
case 7: V(83); M-=10; break; D: goto P; case 8: V(86); R-=30; G-=20; O-=40; break; V
:switch(x(1,9)) { case 2: if(q>9){ switch(x(1,2)){ q:R+=40; goto o; case 1: switch (x(2,3)) { case 2: V(a=54); goto
m; b: w(48)
case 3:goto J; } case 2: V(5); } goto E; ll:goto mm; J: V(a=54); } goto O; KK:goto JJ; m
case 3:goto J; } case 2: V(5); } goto E; ll:goto mm; J: V(a=54); } goto O; m
:goto O; goto m; default: if(q>10) goto E; if(q>7) { if(N<5) w(99) V(13); N-=5; } break; } M-=17; break; C:goto k; K:R-=R
>23 ? 23 : R > 18 ? 18 : R > 13 ? 13 :
R; goto Y; case 14: V(74); break; case 15: V(x(0,1)?69:68);
break; d: goto I; case 11: goto V; kk:goto ll; case
break; d: goto I; case 11: goto V; goto m; case
12:V(94); M-=5; b-=19; N -= 5; break; G:goto a; case 0:V(20); } if(O>39&&!x(0,9)){ V(e = 19); O -= 40; R+=40; } if(M<951) goto W; if (G < 36) goto b; if (x(0,9) > 2) goto n; V(96); if (x(0,1)) goto p; V(97); M-= 60; goto n; p: if (x(0,9)<5) goto t; V(21); M -=100;
12:V(94); M-=5; b-=19; N -= 5; break; G:goto a; case 0:V(20); } if(O>39&&!x(0,9)){ V(e = 19); O -= 40; R+=40; } if(M<951) goto jj; if (G < 36) goto b; if (x(0,9) > 2) goto n; V(96); if (x(0,1)) goto p; V(97); M-= 60; goto n; p: if (x(0,9)<5) goto t; V(21); M -=100;
goto n; t: V(22); M -= 85; n:if(m) goto z; m=1; if (x(0,9) < 5) goto w; V(23); z: if(M<1951||W) goto
goto n; t: V(22); M -= 85; n:if(m) goto z; m=1; if (x(0,9) < 5) goto w; V(23); z: if(M<1950||W) goto
U; W=1;
if(!d&&!x(0,4)) { V(75); d=1; R+= 50; } if (G<20)w(92)
if(!x(0,4)) w(x(0,5)?84:x(0,3)?33:34) if (x(0,9) < 7) goto w; U: goto W; w:V(35); c=1; M-=101; I += 1; j k: M-=10; goto U; W: if(d&&x(0,1)){ V(39); } while(i)heaven:w(i) if (! B && (f ||
if(!d&&!x(0,4)) { V(75); d=1; R+= 50; }
if(!x(0,4)) w(x(0,5)?84:x(0,3)?33:34) if (x(0,9) < 7) goto w; U: goto W; w:V(35); c=1; M-=101; I += 1; j k: M-=10; goto U; W: if(x(0,1)){ if (d)V(39); if(e)V(25); } while(i)heaven:w(i) if (! B && (f ||
a)) { if(d&&a) V(91); if(T<666) V(B=38); else { Q=a ? 1: Q; h = f?1:h; f=a=0; V(93); T-=666; } } b-=f ? 15
:h ? 5:0; b-= a ? 5 : Q ? 15 : 0; M+=170; M+=O> 99 ? 30:- 99;
b-=10; } while (A++<21); } if(b<1) { if(a){ w(40) XX:goto ZZ; } if(f)w(41) w(45) II:goto KK; } w(M>2169?47:36) hell:return 666; g:goto S; h:goto u; E:goto aa; Q: goto H; ff:goto ii; pp: goto qq; rr:goto XX; }
b-=10; } while (A++<C); } if(b<1) { if(a)w(40) if(f)w(41) w(45) } w(M>2169?47:36) hell:return 666; g:goto S; h:goto u; E:goto aa; Q: goto H; ff:goto ii; }
+1 -1
View File
@@ -8,7 +8,7 @@ unsigned m,D,Q,v,l,f,X,z,B,i,h,
r,u,d,e; long
O,R,E,G,O,N, T,R,A,I,L,
*o[]={ &O,&R,&E,&G,&O,&N} ,a,t[7],q,M, b=666,c,W;
char *y,*p; FILE*K; size_t J;
char *y; FILE*K; size_t J;
#define w(i) { V(i); V(4); goto hell; goto M; }
long Z(long x){ return x * 1663; }
#define S(x,z) while(scanf(&y[Z(x)],&z)!=1)while(getchar()!='\n');
+3 -2
View File
@@ -820,8 +820,9 @@ one of your oxen and somehow you managed to upturn your wagon.
<90>
Really? You tried to shoot a dragon? Well that was pointless. They ate one
of your oxen and upturned your wagon train, causing further delays.
Why in the absolute HELL did you fire your pistol?! There is nobody here to
shoot, except your stupid self! And you nearly blew my head off, you did, you
BLOODY IDIOT!
<91>
+5 -2
View File
@@ -981,8 +981,11 @@ one of your oxen and somehow you managed to upturn your wagon.
<90>
Really? You tried to shoot a dragon? Well that was pointless. They ate one
of your oxen and upturned your wagon train, causing further delays.
🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀🔫
💀Why in the absolute HELL did you fire your pistol?! There is nobody here to💀
🔫shoot, except your stupid self! And you nearly blew my head off, you did, 🔫
💀you BLOODY IDIOT! 💀
🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀🔫
<91>
+6 -2
View File
@@ -1200,8 +1200,12 @@ one of your oxen and somehow you managed to upturn your wagon.
<90>
Really? You tried to shoot a dragon? Well that was pointless. They ate one
of your oxen and upturned your wagon train, causing further delays.
🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫
💀Why in the absolute HELL did you fire your pistol?! 💀
🔫 There is nobody here to shoot, except your stupid 🔫
💀 self! And you nearly blew my head off, you did, you💀
🔫 BLOODY IDIOT! 🔫
💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀 🔫 💀
<91>