Merge pull request #1642 from xexyl/maffiodo214-try-bugs
This commit is contained in:
11 files changed
+348
-61
No files matched your search
+56
-26
@@ -1,30 +1,59 @@
|
|||||||
## To build:
|
## To build:
|
||||||
|
|
||||||
This entry requires SDL to be installed. See the [faq.md](/faq.md) if you don't
|
This entry requires SDL to be installed. See [FAQ 3.8](/faq.md#faq3_8) if you
|
||||||
know how to do this for your system.
|
don't know how to do this for your system.
|
||||||
|
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
make
|
make
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Bugs and (Mis)features:
|
||||||
|
|
||||||
|
The current status of this entry is:
|
||||||
|
|
||||||
|
```
|
||||||
|
STATUS: INABIAF - please **DO NOT** fix
|
||||||
|
```
|
||||||
|
|
||||||
|
For more detailed information see [2014 maffiodo1 in bugs.md](/bugs.md#2014-maffiodo1).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## To use:
|
## To use:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
cat mario.level | ./prog 320 200 800 300 128 144 mario.rgba mario8.wav 10343679
|
cat game.level | ./prog 320 200 800 300 128 144 game.rgba game.wav 10343679
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The parameters to the program are:
|
||||||
|
|
||||||
|
1. Window width.
|
||||||
|
2. Window height.
|
||||||
|
3. Level width.
|
||||||
|
4. Level height.
|
||||||
|
5. Sprites image width.
|
||||||
|
6. Sprites image height.
|
||||||
|
7. Filename of the sprites image (raw RGBA image).
|
||||||
|
8. Filename of the music (WAVE 8000 Hz 8bit Mono).
|
||||||
|
9. Sky color. This number depends on the system where you run the program. See
|
||||||
|
note on macOS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### Try:
|
### Try:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
cat giana.level | ./prog 320 200 1000 300 192 168 giana.rgba giana8.wav 5459393
|
./giana.sh
|
||||||
|
|
||||||
cat mario.level | ./prog 320 200 800 300 128 144 mario.rgba mario8.wav 10343679 && telnet telehack.com 23
|
./mario.sh
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
If you end up telnetting to the server you can try:
|
If you end up telnetting to the server (feature of [mario.sh](mario.sh)) you can
|
||||||
|
try:
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
ls # show files including games
|
ls # show files including games
|
||||||
@@ -33,18 +62,14 @@ advent.gam # you know what this is! :-)
|
|||||||
starwars # animated Star Wars 'film'
|
starwars # animated Star Wars 'film'
|
||||||
```
|
```
|
||||||
|
|
||||||
NOTE: the author stated that the sky colour is incorrect in some versions of
|
If you wish to change the width and height, defaulting at 640 x 480, say to
|
||||||
macOS, offering a workaround. Others tested this out in the most recent macOS
|
800 x 800, try:
|
||||||
version and this does not seem to be a problem any more. As he played (and beat)
|
|
||||||
the entire series many times years ago he can confirm that the sky is more or
|
|
||||||
less correct though it's possible that because he's practically blind he might
|
|
||||||
have missed something :-) He guesses that the problem might have been the
|
|
||||||
version of `SDL1` but he does not know this either way.
|
|
||||||
|
|
||||||
Others notes ironically that the author stated that in Super Mario Bros one cannot
|
```sh
|
||||||
go through walls but there are known glitches where you can in some areas (as he
|
ROWS=800 COLS=800 ./mario.sh
|
||||||
recalls this also applied to the arcade version, Mario Bros, but he cannot
|
|
||||||
confirm this now) :-)
|
ROWS=800 COLS=800 ./giana.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## Judges' remarks:
|
## Judges' remarks:
|
||||||
@@ -60,9 +85,9 @@ the code. In `vim` you can do:
|
|||||||
```
|
```
|
||||||
|
|
||||||
in command mode to see this effect. You don't need to modify your `.vimrc` file!
|
in command mode to see this effect. You don't need to modify your `.vimrc` file!
|
||||||
You can also use `expand` as described below if your terminal has enough rows
|
You can also use `expand` as described below by the author if your terminal has
|
||||||
and you don't want to move about in the code. The vim command should immediately
|
enough rows and you don't want to move about in the code. The vim command should
|
||||||
take effect.
|
immediately take effect.
|
||||||
|
|
||||||
|
|
||||||
## Author's remarks:
|
## Author's remarks:
|
||||||
@@ -95,7 +120,7 @@ for free!
|
|||||||
|
|
||||||
In my two tests I tried to create one level of [Super Mario
|
In my two tests I tried to create one level of [Super Mario
|
||||||
Bros](http://en.wikipedia.org/wiki/Super_Mario_Bros.) and one of [The Great
|
Bros](http://en.wikipedia.org/wiki/Super_Mario_Bros.) and one of [The Great
|
||||||
Giana The Sisters](http://en.wikipedia.org/wiki/The_Great_Giana_Sisters).
|
Giana Sisters](http://en.wikipedia.org/wiki/The_Great_Giana_Sisters).
|
||||||
|
|
||||||
Both games are classic [platform
|
Both games are classic [platform
|
||||||
games](https://en.wikipedia.org/wiki/Platform_game) and both share the same
|
games](https://en.wikipedia.org/wiki/Platform_game) and both share the same
|
||||||
@@ -109,9 +134,10 @@ character more or different powers or abilities!
|
|||||||
- There are walls, floors and ceilings. The character can move and jump over
|
- There are walls, floors and ceilings. The character can move and jump over
|
||||||
these type of obstacles but cannot walk through them.
|
these type of obstacles but cannot walk through them.
|
||||||
|
|
||||||
- There are enemies and; if the character collides with an enemy, the character
|
- There are enemies and if the character collides with an enemy, the character
|
||||||
dies or loses its powers.
|
dies or loses its powers.
|
||||||
|
|
||||||
|
|
||||||
### Running under macOS
|
### Running under macOS
|
||||||
|
|
||||||
[NOTE: this seems to no longer be the case as of 2023 and most likely much
|
[NOTE: this seems to no longer be the case as of 2023 and most likely much
|
||||||
@@ -124,11 +150,12 @@ last parameter of the program:
|
|||||||
|
|
||||||
* GIANA LAST PARAMETER: `3243070463`
|
* GIANA LAST PARAMETER: `3243070463`
|
||||||
|
|
||||||
|
|
||||||
### Regarding how to compile
|
### Regarding how to compile
|
||||||
|
|
||||||
The code requires `SDL1`.
|
The code requires `SDL1`.
|
||||||
|
|
||||||
The build process will generate some warnings (60~ on clang) about:
|
The build process will generate some warnings (~60 with clang) about:
|
||||||
|
|
||||||
- `incompatible pointer types`: because all pointers are declared to `int` or
|
- `incompatible pointer types`: because all pointers are declared to `int` or
|
||||||
`char`, to save bytes.
|
`char`, to save bytes.
|
||||||
@@ -136,6 +163,7 @@ The build process will generate some warnings (60~ on clang) about:
|
|||||||
- `using the result of an assignment as a condition without parentheses`:
|
- `using the result of an assignment as a condition without parentheses`:
|
||||||
because `while(c=getchar())` is not evil.
|
because `while(c=getchar())` is not evil.
|
||||||
|
|
||||||
|
|
||||||
### How it works
|
### How it works
|
||||||
|
|
||||||
## Parameters
|
## Parameters
|
||||||
@@ -194,6 +222,7 @@ Position | Description
|
|||||||
All the others sprites can be used as you want, depending on the game you want
|
All the others sprites can be used as you want, depending on the game you want
|
||||||
to create.
|
to create.
|
||||||
|
|
||||||
|
|
||||||
## Levels
|
## Levels
|
||||||
|
|
||||||
The program reads the level description from `stdin`.
|
The program reads the level description from `stdin`.
|
||||||
@@ -259,7 +288,7 @@ Each row has six columns:
|
|||||||
* `DESTROY` (`64`)
|
* `DESTROY` (`64`)
|
||||||
|
|
||||||
When the player hits the object (e.g. the classic Mario coin) the
|
When the player hits the object (e.g. the classic Mario coin) the
|
||||||
object disappears but the engine does not counts the points, so,
|
object disappears but the engine does not count the points, so,
|
||||||
from the player point of view, this object is useless.
|
from the player point of view, this object is useless.
|
||||||
|
|
||||||
* `DESTROYUP` (`128`)
|
* `DESTROYUP` (`128`)
|
||||||
@@ -272,6 +301,7 @@ If `CLASSFLAGS` is `0` the object only has an aesthetic function.
|
|||||||
The last row of the level descriptor must have all its columns set equal to
|
The last row of the level descriptor must have all its columns set equal to
|
||||||
`-1`.
|
`-1`.
|
||||||
|
|
||||||
|
|
||||||
### Limitations
|
### Limitations
|
||||||
|
|
||||||
Some classical features are missing: throwing objects, shooting, multiple lives,
|
Some classical features are missing: throwing objects, shooting, multiple lives,
|
||||||
@@ -306,12 +336,12 @@ only demonstrates the operation of the program. From my point of view this is a
|
|||||||
tribute to the legendary game [Super Mario
|
tribute to the legendary game [Super Mario
|
||||||
Bros](http://en.wikipedia.org/wiki/Super_Mario_Bros.)!
|
Bros](http://en.wikipedia.org/wiki/Super_Mario_Bros.)!
|
||||||
|
|
||||||
[The Great Giana The
|
[The Great Giana
|
||||||
Sisters](http://en.wikipedia.org/wiki/The_Great_Giana_Sisters) is the game
|
Sisters](http://en.wikipedia.org/wiki/The_Great_Giana_Sisters) is the game
|
||||||
created by [Time Warp
|
created by [Time Warp
|
||||||
Productions](https://www.ign.com/games/producer/time-warp-productions) and my
|
Productions](https://www.ign.com/games/producer/time-warp-productions) and my
|
||||||
justification for the sprites for Mario are the same for this game. Long live
|
justification for the sprites for Mario are the same for this game. Long live
|
||||||
[The Great Giana The
|
[The Great Giana
|
||||||
Sisters](http://en.wikipedia.org/wiki/The_Great_Giana_Sisters) !! :)
|
Sisters](http://en.wikipedia.org/wiki/The_Great_Giana_Sisters) !! :)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Executable
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# giana.sh - demonstrate IOCCC winner 2014/maffiodo1 The Great Giana Sisters
|
||||||
|
#
|
||||||
|
|
||||||
|
# make sure CC is set so that when we do make CC="$CC" it isn't empty. Doing it
|
||||||
|
# this way allows us to have the user specify a different compiler in an easy
|
||||||
|
# way.
|
||||||
|
if [[ -z "$CC" ]]; then
|
||||||
|
CC="cc"
|
||||||
|
fi
|
||||||
|
|
||||||
|
make CC="$CC" all >/dev/null || exit 1
|
||||||
|
|
||||||
|
# clear screen after compilation so that only the entry is shown
|
||||||
|
clear
|
||||||
|
|
||||||
|
# see if the user wants to override width and height
|
||||||
|
if [[ -z "$ROWS" ]]; then
|
||||||
|
ROWS="480"
|
||||||
|
fi
|
||||||
|
if [[ -z "$COLS" ]]; then
|
||||||
|
COLS="640"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ^---------^ SC2002 (style): Useless cat. Consider 'cmd < file | ..' or 'cmd file | ..' instead.
|
||||||
|
# shellcheck disable=SC2002
|
||||||
|
cat giana.level | ./prog "$COLS" "$ROWS" 1000 300 192 168 giana.rgba giana8.wav 5459393
|
||||||
Executable
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# mario.sh - demonstrate IOCCC winner 2014/maffiodo1 Super Mario Bros.
|
||||||
|
#
|
||||||
|
|
||||||
|
# make sure CC is set so that when we do make CC="$CC" it isn't empty. Doing it
|
||||||
|
# this way allows us to have the user specify a different compiler in an easy
|
||||||
|
# way.
|
||||||
|
if [[ -z "$CC" ]]; then
|
||||||
|
CC="cc"
|
||||||
|
fi
|
||||||
|
|
||||||
|
make CC="$CC" all >/dev/null || exit 1
|
||||||
|
|
||||||
|
# clear screen after compilation so that only the entry is shown
|
||||||
|
clear
|
||||||
|
|
||||||
|
# see if the user wants to override width and height
|
||||||
|
if [[ -z "$ROWS" ]]; then
|
||||||
|
ROWS="480"
|
||||||
|
fi
|
||||||
|
if [[ -z "$COLS" ]]; then
|
||||||
|
COLS="640"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ^---------^ SC2002 (style): Useless cat. Consider 'cmd < file | ..' or 'cmd file | ..' instead.
|
||||||
|
# shellcheck disable=SC2002
|
||||||
|
cat mario.level | ./prog "$COLS" "$ROWS" 800 300 128 144 mario.rgba mario8.wav 10343679 && telnet telehack.com 23
|
||||||
@@ -113,8 +113,8 @@ OBJ= ${PROG}.o
|
|||||||
DATA= image.rgb
|
DATA= image.rgb
|
||||||
TARGET= ${PROG}
|
TARGET= ${PROG}
|
||||||
#
|
#
|
||||||
ALT_OBJ=
|
ALT_OBJ= ${PROG}.alt.o
|
||||||
ALT_TARGET=
|
ALT_TARGET= ${PROG}.alt
|
||||||
|
|
||||||
|
|
||||||
#################
|
#################
|
||||||
@@ -137,6 +137,10 @@ ${PROG}: ${PROG}.c
|
|||||||
alt: data ${ALT_TARGET}
|
alt: data ${ALT_TARGET}
|
||||||
@${TRUE}
|
@${TRUE}
|
||||||
|
|
||||||
|
|
||||||
|
${PROG}.alt: ${PROG}.alt.c
|
||||||
|
${CC} ${CFLAGS} $< -o $@ ${LDFLAGS}
|
||||||
|
|
||||||
# data files
|
# data files
|
||||||
#
|
#
|
||||||
data: ${DATA}
|
data: ${DATA}
|
||||||
|
|||||||
@@ -4,6 +4,21 @@
|
|||||||
make
|
make
|
||||||
```
|
```
|
||||||
|
|
||||||
|
There is a 121 byte version provided by the author. See [Alternate
|
||||||
|
code](#alternate-code) below.
|
||||||
|
|
||||||
|
|
||||||
|
### Bugs and (Mis)features:
|
||||||
|
|
||||||
|
The current status of this entry is:
|
||||||
|
|
||||||
|
```
|
||||||
|
STATUS: INABIAF - please **DO NOT** fix
|
||||||
|
```
|
||||||
|
|
||||||
|
For more detailed information see [2014 maffiodo2 in bugs.md](/bugs.md#2014-maffiodo2).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## To use:
|
## To use:
|
||||||
|
|
||||||
@@ -15,7 +30,28 @@ make
|
|||||||
### Try:
|
### Try:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
cat image.rgb | ./prog ' .,:;!$#@'
|
./try.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Alternate code:
|
||||||
|
|
||||||
|
This shorter version is provided by the author. It has a fixed ramp and so not
|
||||||
|
as fun but it's 121 bytes instead of 140.
|
||||||
|
|
||||||
|
|
||||||
|
### Alternate build:
|
||||||
|
|
||||||
|
|
||||||
|
```sh
|
||||||
|
make alt
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Alternate use:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cat image.rgb | ./prog.alt
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@@ -34,14 +70,15 @@ get? And how many people will really understand the tweet?
|
|||||||
### Remarks
|
### Remarks
|
||||||
|
|
||||||
This program convert an image to an ASCII ART. The program reads a raw RGB image
|
This program convert an image to an ASCII ART. The program reads a raw RGB image
|
||||||
from **stdin** and print the ASCII ART to **stdout**.
|
from `stdin` and print the ASCII ART to `stdout`.
|
||||||
|
|
||||||
The build process will raise some warnings about:
|
The build process will raise some warnings about:
|
||||||
|
|
||||||
- declaration specifier missing, defaulting to 'int'
|
- declaration specifier missing, defaulting to 'int'
|
||||||
- implicitly declaring library function
|
- implicitly declaring library function
|
||||||
|
|
||||||
The program crash if run without parameters.
|
The program will crash if run without parameters.
|
||||||
|
|
||||||
|
|
||||||
### Screen size
|
### Screen size
|
||||||
|
|
||||||
@@ -60,13 +97,17 @@ Type this:
|
|||||||
cat image.rgb | ./prog " .:;Y0"
|
cat image.rgb | ./prog " .:;Y0"
|
||||||
```
|
```
|
||||||
|
|
||||||
You can use your own image. Convert the image to a raw RGB image, using imagemagick it's very simple:
|
You can use your own image. Convert the image to a raw RGB image. Using
|
||||||
|
ImageMagick it's very simple:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
convert -geometry 80x source.jpg image.rgb
|
convert -geometry 80x source.jpg image.rgb
|
||||||
```
|
```
|
||||||
|
|
||||||
This program require one parameter, or crash. The parameter of the program is the *convertion ramp*. You can use different ramps or create your own (for ex. using some letters of your name).
|
This program require one parameter or it will crash. The parameter of the
|
||||||
|
program is the *conversion ramp*. You can use different ramps or create your own
|
||||||
|
(for example using some letters of your name).
|
||||||
|
|
||||||
These are some ramps you can try:
|
These are some ramps you can try:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
@@ -74,7 +115,6 @@ These are some ramps you can try:
|
|||||||
./prog " .:;Y0"
|
./prog " .:;Y0"
|
||||||
./prog " .:-=+*#%@"
|
./prog " .:-=+*#%@"
|
||||||
./prog " .,:!-iots&8%#@$"
|
./prog " .,:!-iots&8%#@$"
|
||||||
./prog "$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,"^`'. "
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### 121 byte version
|
### 121 byte version
|
||||||
@@ -85,7 +125,7 @@ An alternative version of this program is only 121bytes long:
|
|||||||
d=80,e,j;g(){j+=getchar();}main(){for(;;){j=0;g();if(j<0)break;g(g());putchar(" .:#@"[j/3*5>>8]);if(!(++e%d))puts("");}}
|
d=80,e,j;g(){j+=getchar();}main(){for(;;){j=0;g();if(j<0)break;g(g());putchar(" .:#@"[j/3*5>>8]);if(!(++e%d))puts("");}}
|
||||||
```
|
```
|
||||||
|
|
||||||
This alternative version have a **fixed ramp**. It's smaller but it's not so fun to use...
|
This alternative version has a **fixed ramp**. It's smaller but it's not so fun to use...
|
||||||
|
|
||||||
|
|
||||||
## Copyright and CC BY-SA 4.0 License:
|
## Copyright and CC BY-SA 4.0 License:
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
d=80,e,j;g(){j+=getchar();}main(){for(;;){j=0;g();if(j<0)break;g(g());putchar(" .:#@"[j/3*5>>8]);if(!(++e%d))puts("");}}
|
||||||
Executable
+58
@@ -0,0 +1,58 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# try.sh - demonstrate IOCCC winner 2014/maffiodo2
|
||||||
|
#
|
||||||
|
|
||||||
|
# make sure CC is set so that when we do make CC="$CC" it isn't empty. Doing it
|
||||||
|
# this way allows us to have the user specify a different compiler in an easy
|
||||||
|
# way.
|
||||||
|
if [[ -z "$CC" ]]; then
|
||||||
|
CC="cc"
|
||||||
|
fi
|
||||||
|
|
||||||
|
make CC="$CC" all >/dev/null || exit 1
|
||||||
|
|
||||||
|
# clear screen after compilation so that only the entry is shown
|
||||||
|
clear
|
||||||
|
|
||||||
|
echo "$ cat image.rgb | ./prog ' .,:;!$#@'" 1>&2
|
||||||
|
read -r -n 1 -p "Press any key to run command (space = next page, q = quit): "
|
||||||
|
echo 1>&2
|
||||||
|
# ^-------^ SC2002 (style): Useless cat. Consider 'cmd < file | ..' or 'cmd file | ..' instead.
|
||||||
|
# shellcheck disable=SC2002
|
||||||
|
cat image.rgb | ./prog ' .,:;!$#@' | less -EXF
|
||||||
|
|
||||||
|
echo "$ cat image.rgb | ./prog ' .:;Y0'" 1>&2
|
||||||
|
read -r -n 1 -p "Press any key to run command (space = next page, q = quit): "
|
||||||
|
echo 1>&2
|
||||||
|
# ^-------^ SC2002 (style): Useless cat. Consider 'cmd < file | ..' or 'cmd file | ..' instead.
|
||||||
|
# shellcheck disable=SC2002
|
||||||
|
cat image.rgb | ./prog " .:;Y0" | less -EXF
|
||||||
|
|
||||||
|
echo "$ cat image.rgb | ./prog ' :1'" 1>&2
|
||||||
|
read -r -n 1 -p "Press any key to run command (space = next page, q = quit): "
|
||||||
|
echo 1>&2
|
||||||
|
# ^-------^ SC2002 (style): Useless cat. Consider 'cmd < file | ..' or 'cmd file | ..' instead.
|
||||||
|
# shellcheck disable=SC2002
|
||||||
|
cat image.rgb | ./prog ' :1' | less -EXF
|
||||||
|
|
||||||
|
echo "$ cat image.rgb | ./prog ' .:;Y0'" 1>&2
|
||||||
|
read -r -n 1 -p "Press any key to run command (space = next page, q = quit): "
|
||||||
|
echo 1>&2
|
||||||
|
# ^-------^ SC2002 (style): Useless cat. Consider 'cmd < file | ..' or 'cmd file | ..' instead.
|
||||||
|
# shellcheck disable=SC2002
|
||||||
|
cat image.rgb | ./prog ' .:;Y0' | less -EXF
|
||||||
|
|
||||||
|
echo "$ cat image.rgb | ./prog ' .:-=+*#%@'" 1>&2
|
||||||
|
read -r -n 1 -p "Press any key to run command (space = next page, q = quit): "
|
||||||
|
echo 1>&2
|
||||||
|
# ^-------^ SC2002 (style): Useless cat. Consider 'cmd < file | ..' or 'cmd file | ..' instead.
|
||||||
|
# shellcheck disable=SC2002
|
||||||
|
cat image.rgb | ./prog ' .:-=+*#%@' | less -EXF
|
||||||
|
|
||||||
|
echo "$ cat image.rgb | ./prog ' .,:!-iots&8%#@$'" 1>&2
|
||||||
|
read -r -n 1 -p "Press any key to run command (space = next page, q = quit): "
|
||||||
|
echo 1>&2
|
||||||
|
# ^-------^ SC2002 (style): Useless cat. Consider 'cmd < file | ..' or 'cmd file | ..' instead.
|
||||||
|
# shellcheck disable=SC2002
|
||||||
|
cat image.rgb | ./prog ' .,:!-iots&8%#@$' | less -EXF
|
||||||
+19
-26
@@ -15,20 +15,7 @@ make
|
|||||||
### Try:
|
### Try:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
make
|
./try.sh
|
||||||
cp -f prog morgan
|
|
||||||
./morgan clobber
|
|
||||||
ls
|
|
||||||
|
|
||||||
./morgan all install
|
|
||||||
ls
|
|
||||||
|
|
||||||
./prog love haste waste supernova
|
|
||||||
ls
|
|
||||||
|
|
||||||
make
|
|
||||||
./prog magic
|
|
||||||
ls
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@@ -36,38 +23,41 @@ ls
|
|||||||
|
|
||||||
Think of this as a Maker Faire's make. :-)
|
Think of this as a Maker Faire's make. :-)
|
||||||
|
|
||||||
It works reasomably well. While not super ultra-featured, it does fair well with the Makefile we supplied.
|
It works reasonably well. While not super ultra-featured, it does fair well
|
||||||
Not only that, it helped uncover a bug we had in our special Makefile rules.
|
with the Makefile we supplied. Not only that, it helped uncover a bug we had in
|
||||||
|
our special Makefile rules.
|
||||||
|
|
||||||
|
|
||||||
## Author's remarks:
|
## Author's remarks:
|
||||||
|
|
||||||
### Remarks
|
### Remarks
|
||||||
|
|
||||||
This program is a tiny `make` clone.
|
This program is a tiny `make(1)` clone.
|
||||||
|
|
||||||
It is able to parse a subset of the `make` syntax and will execute rules for
|
It is able to parse a subset of the `make(1)` syntax and will execute rules for
|
||||||
goals given in arguments if they need to (based on timestamp of dependencies
|
goals given in arguments if they need to (based on timestamp of dependencies
|
||||||
of rule targets).
|
of rule targets).
|
||||||
|
|
||||||
|
|
||||||
## Supported features
|
## Supported features
|
||||||
|
|
||||||
* Variable assignments (only recursive ones). Variable references with recursion.
|
* Variable assignments (only recursive ones). Variable references with recursion.
|
||||||
* Environment variables are available.
|
* Environment variables are available.
|
||||||
* It is possible to specify variables in command line: `name=value`.
|
* It is possible to specify variables in command line: `name=value`.
|
||||||
* Variables given in command line will have precedence over variables defined
|
* Variables given in command line will have precedence over variables defined
|
||||||
in makefile, which will have precedence over environment variables.
|
in Makefile, which will have precedence over environment variables.
|
||||||
* If no goal given in command line, the first target defined will be used.
|
* If no target given in command line, the first target defined will be used.
|
||||||
* Comments, escaped comments, escaped new lines.
|
* Comments, escaped comments, escaped new lines.
|
||||||
|
|
||||||
It should be able to build programs of previous years with the provided `Makefile`
|
It should be able to build programs of previous years with the provided `Makefile`
|
||||||
found in previous contest archives. Simply use this program instead of `make`.
|
found in previous contest archives. Simply use this program instead of `make`.
|
||||||
It will recursively use itself for submake (the `MAKE=` assignment inside
|
It will recursively use itself for sub-make (the `MAKE=` assignment inside
|
||||||
`Makefile` will be ignored to continue using itself).
|
`Makefile` will be ignored to continue using itself).
|
||||||
|
|
||||||
|
|
||||||
## Limitations / Known issues
|
## Limitations / Known issues
|
||||||
|
|
||||||
* There is a lot of memory leak (not a single free).
|
* There are a lot of memory leaks (not a single free).
|
||||||
* The opened file is not closed.
|
* The opened file is not closed.
|
||||||
* The input file shall be named `Makefile`.
|
* The input file shall be named `Makefile`.
|
||||||
* No diagnostic message, but the exit status is non zero to indicates failure
|
* No diagnostic message, but the exit status is non zero to indicates failure
|
||||||
@@ -82,13 +72,16 @@ It will recursively use itself for submake (the `MAKE=` assignment inside
|
|||||||
* No built-in variables (except the one from environment).
|
* No built-in variables (except the one from environment).
|
||||||
* No conditional directives.
|
* No conditional directives.
|
||||||
|
|
||||||
|
|
||||||
### Compilation warnings
|
### Compilation warnings
|
||||||
|
|
||||||
with gcc 4.8.2 on Linux Ubuntu 14.04 64-bit :
|
With gcc 4.8.2 on Linux Ubuntu 14.04 64-bit :
|
||||||
* prog.c:22:15: warning: return makes integer from pointer without a cast [enabled by default]
|
|
||||||
* prog.c:23:72: warning: signed and unsigned type in conditional expression [-Wsign-compare]
|
|
||||||
* prog.c:12:11: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
|
|
||||||
|
|
||||||
|
```
|
||||||
|
prog.c:22:15: warning: return makes integer from pointer without a cast [enabled by default]
|
||||||
|
prog.c:23:72: warning: signed and unsigned type in conditional expression [-Wsign-compare]
|
||||||
|
prog.c:12:11: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
|
||||||
|
```
|
||||||
|
|
||||||
## Copyright and CC BY-SA 4.0 License:
|
## Copyright and CC BY-SA 4.0 License:
|
||||||
|
|
||||||
|
|||||||
Executable
+45
@@ -0,0 +1,45 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# try.sh - demonstrate IOCCC winner 2014/morgan
|
||||||
|
#
|
||||||
|
|
||||||
|
# make sure CC is set so that when we do make CC="$CC" it isn't empty. Doing it
|
||||||
|
# this way allows us to have the user specify a different compiler in an easy
|
||||||
|
# way.
|
||||||
|
if [[ -z "$CC" ]]; then
|
||||||
|
CC="cc"
|
||||||
|
fi
|
||||||
|
|
||||||
|
make CC="$CC" all >/dev/null || exit 1
|
||||||
|
|
||||||
|
# clear screen after compilation so that only the entry is shown
|
||||||
|
clear
|
||||||
|
|
||||||
|
|
||||||
|
echo "$ cp -f prog morgan" 1>&2
|
||||||
|
cp -f prog morgan
|
||||||
|
echo "$ ls" 1>&2
|
||||||
|
ls
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./morgan all install: "
|
||||||
|
echo 1>&2
|
||||||
|
./morgan all install
|
||||||
|
echo 1>&2
|
||||||
|
echo "$ ls" 1>&2
|
||||||
|
ls
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./prog love haste waste supernova: "
|
||||||
|
echo 1>&2
|
||||||
|
./prog love haste waste supernova
|
||||||
|
echo 1>&2
|
||||||
|
echo "$ ls" 1>&2
|
||||||
|
ls
|
||||||
|
echo 1>&2
|
||||||
|
|
||||||
|
read -r -n 1 -p "Press any key to run: ./prog magic: "
|
||||||
|
echo 1>&2
|
||||||
|
./prog magic
|
||||||
|
echo 1>&2
|
||||||
|
echo "$ ls" 1>&2
|
||||||
|
ls
|
||||||
@@ -2955,6 +2955,48 @@ it out as a known limitation it is not a bug but a feature.
|
|||||||
# 2014
|
# 2014
|
||||||
|
|
||||||
|
|
||||||
|
## 2014 maffiodo1
|
||||||
|
|
||||||
|
### STATUS: INABIAF - please **DO NOT** fix
|
||||||
|
### Source code: [2014/maffiodo1/prog.c](2014/maffiodo1/prog.c)
|
||||||
|
### Information: [2014/maffiodo1/README.md](2014/maffiodo1/README.md)
|
||||||
|
|
||||||
|
The author noted that in macOS the colours might be wrong. They gave a solution.
|
||||||
|
However Cody didn't see any problem with it and he beat the series many times.
|
||||||
|
Of course the game here is small and he's practically blind and it's been a
|
||||||
|
while since he last played so it might be wrong. Nevertheless the author does
|
||||||
|
give a way to reconfigure the colours.
|
||||||
|
|
||||||
|
The author noted that the character cannot go through walls and the impression
|
||||||
|
is that this is how it was believed but Cody ironically pointed out that there
|
||||||
|
are known glitches where in some places you actually could go through walls.
|
||||||
|
This might even have applied to the arcade version, Mario Bros, though that can
|
||||||
|
no longer be confirmed by Cody. The point here is that in this game you cannot
|
||||||
|
go through walls but it's not a bug.
|
||||||
|
|
||||||
|
On the other hand, the author also stated:
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
When the `Super character` becomes bigger (`ZOOM` flag), the character can
|
||||||
|
collide with blocks and get stuck inside them. This is a KNOWN BUG. When your
|
||||||
|
player become bigger, stay away from blocks!
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
but since it's documented it's considered a feature, not a bug to fix.
|
||||||
|
|
||||||
|
|
||||||
|
## 2014 maffiodo2
|
||||||
|
|
||||||
|
### STATUS: INABIAF - please **DO NOT** fix
|
||||||
|
### Source code: [2014/maffiodo2/prog.c](2014/maffiodo2/prog.c)
|
||||||
|
### Information: [2014/maffiodo2/README.md](2014/maffiodo2/README.md)
|
||||||
|
|
||||||
|
This program will very likely crash if no arg is given.
|
||||||
|
|
||||||
|
|
||||||
## 2014 vik
|
## 2014 vik
|
||||||
|
|
||||||
### STATUS: known bug - please help us fix
|
### STATUS: known bug - please help us fix
|
||||||
|
|||||||
@@ -3715,6 +3715,24 @@ it is a file with spoilers (and too close to README.md?).
|
|||||||
[Cody](#cody) fixed the build for this entry: it does not require
|
[Cody](#cody) fixed the build for this entry: it does not require
|
||||||
[SDL2](https://www.libsdl.org) but SDL1 so there were linking errors.
|
[SDL2](https://www.libsdl.org) but SDL1 so there were linking errors.
|
||||||
|
|
||||||
|
Cody also added the [mario.sh](2014/maffiodo1/mario.sh) and
|
||||||
|
[giana.sh](2014/maffiodo1/giana.sh) scripts which play, respectively, [Super
|
||||||
|
Mario Bros](http://en.wikipedia.org/wiki/Super_Mario_Bros.) and one of [The
|
||||||
|
Great Giana Sisters](http://en.wikipedia.org/wiki/The_Great_Giana_Sisters), but
|
||||||
|
which let one configure the width and height of the game.
|
||||||
|
|
||||||
|
|
||||||
|
## [2014/maffiodo2](2014/maffiodo2/prog.c) ([README.md](2014/maffiodo2/README.md]))
|
||||||
|
|
||||||
|
[Cody](#cody) added the [try.sh](2014/maffiodo2/try.sh) script and the
|
||||||
|
[alternate code](2014/maffiodo2/README.md#alternate-code) provided by the
|
||||||
|
author.
|
||||||
|
|
||||||
|
|
||||||
|
## [2014/morgan](2014/morgan/prog.c) ([README.md](2014/morgan/README.md))
|
||||||
|
|
||||||
|
[Cody](#cody) added the [try.sh](2014/morgan/try.sh) script.
|
||||||
|
|
||||||
|
|
||||||
## [2014/sinon](2014/sinon/prog.c) ([README.md](2014/sinon/README.md))
|
## [2014/sinon](2014/sinon/prog.c) ([README.md](2014/sinon/README.md))
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user