The navigation bar for a winning entry now has a "_Original C_" link
(between the ✅ and the Inventory on the right hand side) so that one
may easily view the original C code that was submitted for IOCCC judging.
Ran `make www timestamp` to perform the above.
904 lines
33 KiB
HTML
904 lines
33 KiB
HTML
<!DOCTYPE html>
|
||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||
<!-- START: two lines up starts content from: inc/top.default.html -->
|
||
|
||
<!-- END: this line ends content from: inc/top.default.html -->
|
||
<!-- START: this line starts content from: inc/head.default.html -->
|
||
|
||
<head>
|
||
<link rel="stylesheet" href="../../ioccc.css">
|
||
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap" rel="stylesheet">
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||
<title>2014/maffiodo1 - Homage to a classic game</title>
|
||
<link rel="icon" type="image/x-icon" href="../../favicon.ico">
|
||
<meta name="description" content="2014 IOCCC entry maffiodo1 - Homage to a classic game">
|
||
<meta name="keywords" content="IOCCC, 2014, IOCCC 2014, IOCCC entry, maffiodo1, Homage to a classic game">
|
||
</head>
|
||
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
|
||
<!-- END: this line ends content from: inc/head.default.html -->
|
||
|
||
<!-- -->
|
||
<!-- This web page was formed via the tool: bin/readme2index.sh -->
|
||
<!-- The content of main section of this web page came from: 2014/maffiodo1/README.md -->
|
||
<!-- -->
|
||
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 2014/maffiodo1/README.md !!! -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 2014/maffiodo1/README.md !!! -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 2014/maffiodo1/README.md !!! -->
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
|
||
<!-- Markdown content was converted into HTML via the tool: bin/md2html.sh -->
|
||
|
||
<!-- START: this line starts content from: inc/body.default.html -->
|
||
|
||
<body>
|
||
|
||
<!-- END: this line ends content from: inc/body.default.html -->
|
||
<!-- START: this line starts content from: inc/topbar.default.html -->
|
||
|
||
<div class="theader">
|
||
<nav class="topbar">
|
||
<div class="container">
|
||
<div class="logo">
|
||
<a href="../../index.html" class="logo-link">
|
||
IOCCC
|
||
</a>
|
||
</div>
|
||
|
||
<div class="topbar-items">
|
||
<div class="item">
|
||
<span class="item-header">
|
||
Entries
|
||
</span>
|
||
|
||
<div class="sub-item">
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../years.html" class="sub-item-link">
|
||
Winning entries
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../authors.html" class="sub-item-link">
|
||
Winning authors
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../location.html" class="sub-item-link">
|
||
Location of authors
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../bugs.html" class="sub-item-link">
|
||
Bugs and (mis)features
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../faq.html#fix_an_entry" class="sub-item-link">
|
||
Fixing entries
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../faq.html#fix_author" class="sub-item-link">
|
||
Updating author info
|
||
</a>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="item">
|
||
<span class="item-header">
|
||
Status
|
||
</span>
|
||
|
||
<div class="sub-item">
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../news.html" class="sub-item-link">
|
||
News
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../status.html" class="sub-item-link">
|
||
Contest status
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../next/rules.html" class="sub-item-link">
|
||
IOCCC rules
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../next/guidelines.html" class="sub-item-link">
|
||
IOCCC guidelines
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../markdown.html" class="sub-item-link">
|
||
Markdown guidelines
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../SECURITY.html" class="sub-item-link">
|
||
Security policy
|
||
</a>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="item">
|
||
<span class="item-header">
|
||
FAQ
|
||
</span>
|
||
|
||
<div class="sub-item">
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../faq.html" class="sub-item-link">
|
||
Frequently asked questions
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../quick-start.html#enter" class="sub-item-link">
|
||
Enter the IOCCC
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../faq.html#compiling" class="sub-item-link">
|
||
Compiling entries
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../faq.html#running_entries" class="sub-item-link">
|
||
Running entries
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../faq.html#help" class="sub-item-link">
|
||
How to help
|
||
</a>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="item">
|
||
<span class="item-header">
|
||
About
|
||
</span>
|
||
|
||
<div class="sub-item">
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../index.html" class="sub-item-link">
|
||
Home page
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../social.html" class="sub-item-link">
|
||
IOCCC social media
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../about.html" class="sub-item-link">
|
||
About the IOCCC
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../judges.html" class="sub-item-link">
|
||
The judges
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../thanks-for-help.html" class="sub-item-link">
|
||
Thanks for the help
|
||
</a>
|
||
</div>
|
||
|
||
<div class="outfit-font">
|
||
<a href="../../contact.html" class="sub-item-link">
|
||
Contact us
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
|
||
<div class="header-mobile-menu">
|
||
<noscript>
|
||
<a href="../../nojs-menu.html" class="topbar-js-label">
|
||
Please Enable JavaScript
|
||
</a>
|
||
</noscript>
|
||
|
||
<button id="header-open-menu-button" class="topbar-mobile-menu">
|
||
<img
|
||
src="../../png/hamburger-icon-open.png"
|
||
alt="hamburger style menu icon - open state"
|
||
width=48
|
||
height=48>
|
||
</button>
|
||
|
||
<button id="header-close-menu-button" class="hide-content">
|
||
<img
|
||
src="../../png/hamburger-icon-closed.png"
|
||
alt="hamburger style menu icon - closed state"
|
||
width=48
|
||
height=48>
|
||
</button>
|
||
|
||
<div id="mobile-menu-panel" class="hide-content">
|
||
<div class="mobile-menu-container">
|
||
|
||
<div class="mobile-menu-wrapper">
|
||
<div class="mobile-menu-item">
|
||
Entries
|
||
</div>
|
||
<div class="mobile-submenu-wrapper">
|
||
|
||
<a class="mobile-submenu-item" href="../../years.html">
|
||
Winning entries
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../authors.html">
|
||
Winning authors
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../location.html">
|
||
Location of authors
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../bugs.html">
|
||
Bugs and (mis)features
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../faq.html#fix_an_entry">
|
||
Fixing entries
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../faq.html#fix_author">
|
||
Updating author info
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../thanks-for-help.html">
|
||
Thanks for the help
|
||
</a>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="mobile-menu-wrapper">
|
||
|
||
<div class="mobile-menu-item">
|
||
Status
|
||
</div>
|
||
<div class="mobile-submenu-wrapper">
|
||
|
||
<a class="mobile-submenu-item" href="../../news.html">
|
||
News
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../status.html">
|
||
Contest status
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../next/rules.html">
|
||
IOCCC rules
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../next/guidelines.html">
|
||
IOCCC guidelines
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../markdown.html">
|
||
Markdown guidelines
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../SECURITY.html">
|
||
Security policy
|
||
</a>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="mobile-menu-wrapper">
|
||
<div class="mobile-menu-item">
|
||
FAQ
|
||
</div>
|
||
<div class="mobile-submenu-wrapper">
|
||
|
||
<a class="mobile-submenu-item" href="../../faq.html">
|
||
Frequently asked questions
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../quick-start.html#enter">
|
||
Enter the IOCCC
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../faq.html#compiling">
|
||
Compiling entries
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../faq.html#running_entries">
|
||
Running entries
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../faq.html#help">
|
||
How to help
|
||
</a>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<div class="mobile-menu-wrapper">
|
||
<div class="mobile-menu-item">
|
||
About
|
||
</div>
|
||
<div class="mobile-submenu-wrapper">
|
||
|
||
<a class="mobile-submenu-item" href="../../index.html">
|
||
Home page
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../social.html">
|
||
IOCCC social media
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../about.html">
|
||
About the IOCCC
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../judges.html">
|
||
The judges
|
||
</a>
|
||
|
||
<a class="mobile-submenu-item" href="../../contact.html">
|
||
Contact us
|
||
</a>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<script>
|
||
var headerOpenMenuButton = document.getElementById("header-open-menu-button");
|
||
var headerCloseMenuButton = document.getElementById("header-close-menu-button");
|
||
var mobileMenuPanel = document.getElementById("mobile-menu-panel");
|
||
|
||
headerOpenMenuButton.addEventListener("click", () => {
|
||
headerOpenMenuButton.classList.remove("topbar-mobile-menu");
|
||
headerOpenMenuButton.classList.add("hide-content");
|
||
|
||
headerCloseMenuButton.classList.remove("hide-content");
|
||
headerCloseMenuButton.classList.add("topbar-mobile-menu");
|
||
|
||
mobileMenuPanel.classList.remove("hide-content");
|
||
mobileMenuPanel.classList.add("topbar-mobile-panel");
|
||
});
|
||
|
||
headerCloseMenuButton.addEventListener("click", () => {
|
||
headerCloseMenuButton.classList.remove("topbar-mobile-menu");
|
||
headerCloseMenuButton.classList.add("hide-content");
|
||
|
||
mobileMenuPanel.classList.add("hide-content");
|
||
mobileMenuPanel.classList.remove("topbar-mobile-panel");
|
||
|
||
headerOpenMenuButton.classList.add("topbar-mobile-menu");
|
||
headerOpenMenuButton.classList.remove("hide-content");
|
||
});
|
||
</script>
|
||
|
||
<!-- END: this line ends content from: inc/topbar.default.html -->
|
||
<!-- START: this line starts content from: inc/header.default.html -->
|
||
|
||
<div class="header">
|
||
<a href="../../2011/zucker/index.html">
|
||
<img src="../../png/ioccc.png"
|
||
alt="IOCCC image by Matt Zucker"
|
||
width=300
|
||
height=110>
|
||
</a>
|
||
<h1>The International Obfuscated C Code Contest</h1>
|
||
<h2>2014/maffiodo1 - Homage to a classic game</h2>
|
||
<h3>homage to a popular game</h3>
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/header.default.html -->
|
||
<!-- START: this line starts content from: inc/navbar.mid.html -->
|
||
|
||
<div class="navbar">
|
||
<a class="Left" href="../endoh2/index.html">← 2014/endoh2</a>
|
||
<a class="Left" href="../index.html">↑ 2014 ↑</a>
|
||
<a class="Left" href="../maffiodo2/index.html">2014/maffiodo2 →</a>
|
||
<a class="Right" href="https://github.com/ioccc-src/winner/blob/master/2014/maffiodo1/prog.c">C code</a>
|
||
<a class="Right" href="https://github.com/ioccc-src/winner/blob/master/2014/maffiodo1/Makefile">Makefile</a>
|
||
<a class="Right" href="#inventory">Inventory</a>
|
||
<a class="Right" href="https://github.com/ioccc-src/winner/blob/master/2014/maffiodo1/prog.orig.c">Original C</a>
|
||
<a class="Right" href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fwww.ioccc.org%2F2014%2Fmaffiodo1%2Findex.html">✓</a>
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/navbar.mid.html -->
|
||
<!-- START: this line starts content from: inc/before-content.default.html -->
|
||
|
||
<div class="content" id="content">
|
||
|
||
<!-- END: this line ends content from: inc/before-content.default.html -->
|
||
<!-- START: this line starts content for HTML phase 20 by: bin/output-index-author.sh via bin/md2html.sh -->
|
||
|
||
<!-- START: this line starts content generated by: bin/output-index-author.sh -->
|
||
|
||
<h2 id="author">Author:</h2>
|
||
<ul>
|
||
<li>Name: <a href="../../authors.html#Sandro_Maffiodo">Sandro Maffiodo</a><br>
|
||
Location: <a href="../../location.html#IT">IT</a> - <em>Italian Republic</em> (<em>Italy</em>)</li>
|
||
</ul>
|
||
|
||
<!-- END: next line ends content generated by: bin/output-index-author.sh -->
|
||
|
||
<!-- END: this line ends content for HTML phase 20 by: bin/output-index-author.sh via bin/md2html.sh -->
|
||
<!-- START: this line starts content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
|
||
|
||
<!-- BEFORE: 1st line of markdown file: 2014/maffiodo1/README.md -->
|
||
<h2 id="to-build">To build:</h2>
|
||
<p>This entry requires SDL to be installed. See the
|
||
FAQ on “<a href="../../faq.html#SDL">SDL1 and SDL2</a>”
|
||
if you don’t know how to do this for your system.</p>
|
||
<pre><code> make</code></pre>
|
||
<h3 id="bugs-and-misfeatures">Bugs and (Mis)features:</h3>
|
||
<p>The current status of this entry is:</p>
|
||
<blockquote>
|
||
<p><strong>STATUS: INABIAF - please DO NOT fix</strong></p>
|
||
</blockquote>
|
||
<p>For more detailed information see <a href="../../bugs.html#2014_maffiodo1">2014/maffiodo1 in bugs.html</a>.</p>
|
||
<h2 id="to-use">To use:</h2>
|
||
<pre><code> cat game.level | ./prog 320 200 800 300 128 144 game.rgba game.wav 10343679</code></pre>
|
||
<p>The parameters to the program are:</p>
|
||
<ol type="1">
|
||
<li>Window width.</li>
|
||
<li>Window height.</li>
|
||
<li>Level width.</li>
|
||
<li>Level height.</li>
|
||
<li>Sprites image width.</li>
|
||
<li>Sprites image height.</li>
|
||
<li>Filename of the sprites image (raw RGBA image).</li>
|
||
<li>Filename of the music (WAVE 8000 Hz 8bit Mono).</li>
|
||
<li>Sky color. This number depends on the system where you run the program. <a href="#running-under-macos">See
|
||
note on macOS</a>.</li>
|
||
</ol>
|
||
<h2 id="try">Try:</h2>
|
||
<pre><code> ./giana.sh
|
||
|
||
./mario.sh</code></pre>
|
||
<p>If you end up telnetting to the server (feature of <a href="https://github.com/ioccc-src/winner/blob/master/2014/maffiodo1/mario.sh">mario.sh</a> script) you can
|
||
try:</p>
|
||
<pre><code> ls # show files including games
|
||
wumpus.bas # play Hunt the Wumpus
|
||
advent.gam # you know what this is! :-)
|
||
starwars # animated Star Wars 'film'</code></pre>
|
||
<p>If you wish to change the width and height, defaulting at 640 x 480, say to
|
||
800 x 800, try:</p>
|
||
<pre><code> ROWS=800 COLS=800 ./mario.sh
|
||
|
||
ROWS=800 COLS=800 ./giana.sh</code></pre>
|
||
<h2 id="judges-remarks">Judges’ remarks:</h2>
|
||
<p>A classic for a particular generation. Like all good programs, being data
|
||
driven means you can do fun things in small spaces.</p>
|
||
<p><strong>NOTE</strong>: the author states to use <code>tabsize=4</code> to see the magic of the formatting of
|
||
the code. In <code>vim</code> you can do:</p>
|
||
<pre><code> :set tabstop=4</code></pre>
|
||
<p>in command mode to see this effect. You don’t need to modify your <code>.vimrc</code> file!
|
||
You can also use <code>expand</code> as described below by the author if your terminal has
|
||
enough rows and you don’t want to move about in the code. The vim command should
|
||
immediately take effect.</p>
|
||
<h2 id="authors-remarks">Author’s remarks:</h2>
|
||
<h3 id="remarks">Remarks</h3>
|
||
<p>Use <code>tabsize=4</code> to see the magic.</p>
|
||
<pre><code> expand -t 4 prog.c</code></pre>
|
||
<p>The program returns 0 if the player wins or <em>non-zero</em> if the player loses so
|
||
you can test it and make something useful (or not), like this:</p>
|
||
<pre><code> cat mario.level | ./prog 320 200 800 300 128 144 mario.rgba mario8.wav 10343679 && telnet telehack.com 23</code></pre>
|
||
<p>and type in: <code>starwars</code></p>
|
||
<p>This is an engine for <a href="https://en.wikipedia.org/wiki/Platform_game">platform
|
||
game</a>. It can be used to create
|
||
games like the legendary <a href="http://en.wikipedia.org/wiki/Super_Mario_Bros.">Super Mario
|
||
Bros</a>.</p>
|
||
<p>With this simple and clear source code you can create all the games you want,
|
||
for free!</p>
|
||
<p>In my two tests I tried to create one level of <a href="http://en.wikipedia.org/wiki/Super_Mario_Bros.">Super Mario
|
||
Bros</a> and one of <a href="http://en.wikipedia.org/wiki/The_Great_Giana_Sisters">The Great
|
||
Giana Sisters</a>.</p>
|
||
<p>Both games are classic <a href="https://en.wikipedia.org/wiki/Platform_game">platform
|
||
games</a> and both share the same
|
||
fundamental rules:</p>
|
||
<ul>
|
||
<li><p>There is a character.</p></li>
|
||
<li><p>There are power-ups that can change the look of the character and/or give the
|
||
character more or different powers or abilities!</p></li>
|
||
<li><p>There are walls, floors and ceilings. The character can move and jump over
|
||
these type of obstacles but cannot walk through them.</p></li>
|
||
<li><p>There are enemies and if the character collides with an enemy, the character
|
||
dies or loses its powers.</p></li>
|
||
</ul>
|
||
<h3 id="running-under-macos">Running under macOS</h3>
|
||
<p>The color of the sky is wrong on macOS. You need to flip some bytes from the
|
||
last parameter of the program:</p>
|
||
<ul>
|
||
<li><p>MARIO LAST PARAMETER: <code>4292124159</code></p></li>
|
||
<li><p>GIANA LAST PARAMETER: <code>3243070463</code></p></li>
|
||
</ul>
|
||
<h3 id="regarding-how-to-compile">Regarding how to compile</h3>
|
||
<p>The code requires <code>SDL1</code>.</p>
|
||
<p>The build process will generate some warnings (~60 with clang) about:</p>
|
||
<ul>
|
||
<li><code>incompatible pointer types</code>: because all pointers are declared to <code>int</code> or
|
||
<code>char</code>, to save bytes.</li>
|
||
<li><code>type specifier missing, defaults to 'int'</code>: because I need to save bytes.</li>
|
||
<li><code>using the result of an assignment as a condition without parentheses</code>:
|
||
because <code>while(c=getchar())</code> is not evil.</li>
|
||
</ul>
|
||
<h3 id="how-it-works">How it works</h3>
|
||
<h2 id="parameters">Parameters</h2>
|
||
<ol type="1">
|
||
<li>Window width.</li>
|
||
<li>Window height.</li>
|
||
<li>Level width.</li>
|
||
<li>Level height.</li>
|
||
<li>Sprites image width.</li>
|
||
<li>Sprites image height.</li>
|
||
<li>Filename of the sprites image (raw RGBA image).</li>
|
||
<li>Filename of the music (WAVE 8000 Hz 8bit Mono).</li>
|
||
<li>Sky color. This number depends on the system where you run the program. <a href="#running-under-macos">See
|
||
note on macOS</a>.</li>
|
||
</ol>
|
||
<h2 id="sprites">Sprites</h2>
|
||
<p>The program read a single image that contains all the game sprites. The image
|
||
must be a grid of 8xN sprites. The size of a single sprite must be square. The
|
||
program calculates the size in this way:</p>
|
||
<pre><code> sprite_size = image_width / 8</code></pre>
|
||
<p>Each sprite is identified by its position inside the grid, counting line by
|
||
line, from left to right (for example sprite 0 is the top left sprite in the
|
||
grid, sprite 8 is the first sprite of the second row of the grid etc.).</p>
|
||
<p>Some positions of the grid have a predefined purpose:</p>
|
||
<ul>
|
||
<li>0
|
||
<ul>
|
||
<li>Player standing right</li>
|
||
</ul></li>
|
||
<li>1
|
||
<ul>
|
||
<li>Player walking right frame 0</li>
|
||
</ul></li>
|
||
<li>2
|
||
<ul>
|
||
<li>Player walking right frame 1</li>
|
||
</ul></li>
|
||
<li>3
|
||
<ul>
|
||
<li>Player jumping right</li>
|
||
</ul></li>
|
||
<li>4
|
||
<ul>
|
||
<li>Player standing left</li>
|
||
</ul></li>
|
||
<li>5
|
||
<ul>
|
||
<li>Player walking left frame 0</li>
|
||
</ul></li>
|
||
<li>6
|
||
<ul>
|
||
<li>Player walking left frame 1</li>
|
||
</ul></li>
|
||
<li>7
|
||
<ul>
|
||
<li>Player jumping left</li>
|
||
</ul></li>
|
||
<li>8 <em>(second row)</em>
|
||
<ul>
|
||
<li>Super player standing right</li>
|
||
</ul></li>
|
||
<li>9
|
||
<ul>
|
||
<li>Super player walking right frame 0</li>
|
||
</ul></li>
|
||
<li>10
|
||
<ul>
|
||
<li>Super player walking right frame 1</li>
|
||
</ul></li>
|
||
<li>11
|
||
<ul>
|
||
<li>Super player jumping right</li>
|
||
</ul></li>
|
||
<li>12
|
||
<ul>
|
||
<li>Super player standing left</li>
|
||
</ul></li>
|
||
<li>13
|
||
<ul>
|
||
<li>Super player walking left frame 0</li>
|
||
</ul></li>
|
||
<li>14
|
||
<ul>
|
||
<li>Super player walking left frame 1</li>
|
||
</ul></li>
|
||
<li>15
|
||
<ul>
|
||
<li>Super player jumping left</li>
|
||
</ul></li>
|
||
<li>24
|
||
<ul>
|
||
<li>Player dead</li>
|
||
</ul></li>
|
||
<li>32
|
||
<ul>
|
||
<li>Player won</li>
|
||
</ul></li>
|
||
<li>40
|
||
<ul>
|
||
<li>Super player won</li>
|
||
</ul></li>
|
||
</ul>
|
||
<p>All the others sprites can be used as you want, depending on the game you want
|
||
to create.</p>
|
||
<h2 id="levels">Levels</h2>
|
||
<p>The program reads the level description from <code>stdin</code>.</p>
|
||
<p>The level description is a sequence of rows where each row describe an object.
|
||
You can input as many objects as you want but the maximum number of objects
|
||
handled by the program is 333. You can modify this value by editing the source
|
||
here:</p>
|
||
<pre><code> C[333*7],d=333;</code></pre>
|
||
<p>Each row has six columns:</p>
|
||
<ol type="1">
|
||
<li><code>Screen X</code> : <code>x</code> position of the object in the level.</li>
|
||
<li><code>Screen Y</code> : <code>y</code> position of the object in the level.</li>
|
||
<li><code>Sprite</code> : <code>id</code> of the sprite to be used for the object.</li>
|
||
<li><code>CLASSFLAGS</code> : a bitmask that describe how the object behaves.</li>
|
||
<li><code>CLASSPARAM0</code>: a parameter that depends on <code>CLASSFLAGS</code>.</li>
|
||
<li><code>CLASSPARAM1</code>: a parameter that depends on <code>CLASSFLAGS</code>.</li>
|
||
</ol>
|
||
<p><code>CLASSFLAGS</code> must be a combination (bitwise OR) of some of these constants:</p>
|
||
<ul>
|
||
<li><code>ENEMY</code> (<code>1</code>)
|
||
<ul>
|
||
<li>An enemy. <code>CLASSPARAM0</code> can be 0 if the enemies don’t move, 1 if the
|
||
initial move direction is right, -1 if that direction is left. All enemies
|
||
that walk will change their direction after 20 steps. The sprite of an enemy
|
||
must have 2 other adjacent sprites: <code>SPRITE-1</code>, used when the enemy dies, and
|
||
<code>SPRITE+1</code>, used when it moves.</li>
|
||
</ul></li>
|
||
<li><code>BLOCK</code> (<code>2</code>)
|
||
<ul>
|
||
<li>A wall. Player can walk over the object but can not pass through it.</li>
|
||
</ul></li>
|
||
<li><code>OBJECT BLOCK</code> (<code>4</code>)
|
||
<ul>
|
||
<li>When the player hits the object from below, a new object is created.
|
||
<code>CLASSFLAGS</code> of the new object is defined in <code>CLASSPARAM0</code>. The sprite used
|
||
for the new object is defined in <code>CLASSPARAM1</code>. The sprite of the new object
|
||
must have an adjacent sprite: <code>SPRITE+1</code>, used when the block is hit.</li>
|
||
</ul></li>
|
||
<li><code>POWERUP</code> (<code>8</code>)
|
||
<ul>
|
||
<li>This is a power-up like the classic Mario mushroom. When the character
|
||
hits the power-up object, the character becomes the Super character. If
|
||
<code>CLASSFLAGS</code> has the bit <code>ZOOM</code>, the character height will be doubled. The
|
||
Super character can hit the enemies without dying, but when this happens,
|
||
the Super character goes back to being normal.</li>
|
||
</ul></li>
|
||
<li><code>END</code> (<code>16</code>)
|
||
<ul>
|
||
<li>When the player hits this object the level ends; the player wins.</li>
|
||
</ul></li>
|
||
<li><code>ZOOM</code> (<code>32</code>)
|
||
<ul>
|
||
<li>This flag can be used with <code>POWERUP</code> to indicate a power-up that will
|
||
double the size of the player (like the Mario mushroom).</li>
|
||
</ul></li>
|
||
<li><code>DESTROY</code> (<code>64</code>)
|
||
<ul>
|
||
<li>When the player hits the object (e.g. the classic Mario coin) the object
|
||
disappears but the engine does not count the points, so, from the player
|
||
point of view, this object is useless.</li>
|
||
</ul></li>
|
||
<li><code>DESTROYUP</code> (<code>128</code>)
|
||
<ul>
|
||
<li>This object is like a <code>BLOCK</code> but when the player hits the object from
|
||
below, the object disappears.</li>
|
||
</ul></li>
|
||
</ul>
|
||
<p>If <code>CLASSFLAGS</code> is <code>0</code> the object only has an aesthetic function.</p>
|
||
<p>The last row of the level descriptor must have all its columns set equal to
|
||
<code>-1</code>.</p>
|
||
<h3 id="limitations">Limitations</h3>
|
||
<p>Some classical features are missing: throwing objects, shooting, multiple lives,
|
||
score tracking. You can add those features if you want!</p>
|
||
<p>The program allows only one level. It’s easy to add a menu and multiple levels
|
||
but the size of the engine would too big for the contest.</p>
|
||
<p>When the <code>Super character</code> becomes bigger (<code>ZOOM</code> 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!</p>
|
||
<p>There’s only one audio track (game effects are missing).</p>
|
||
<h3 id="credits">Credits</h3>
|
||
<p>Some of the sprites used in the examples are identical to those of the original
|
||
games; the others were designed by me.</p>
|
||
<p>The music used in the examples have been
|
||
<a href="https://en.wikipedia.org/wiki/Sample-rate_conversion">resampled</a>, starting from
|
||
the original versions for the <a href="http://en.wikipedia.org/wiki/Amiga">Commodore
|
||
Amiga</a> and <a href="http://en.wikipedia.org/wiki/Nintendo_Entertainment_System">Nintendo
|
||
NES</a>.</p>
|
||
<p><a href="http://en.wikipedia.org/wiki/Super_Mario_Bros.">Super Mario Bros</a> is a game
|
||
created by <a href="https://en.wikipedia.org/wiki/Nintendo">Nintendo Co., Ltd</a>. My use
|
||
of the <a href="https://en.wikipedia.org/wiki/Sprite_(computer_graphics)">sprites</a> does
|
||
not intend to infringe the <a href="https://en.wikipedia.org/wiki/Intellectual_property">intellectual
|
||
property</a> of Nintendo but
|
||
only demonstrates the operation of the program. From my point of view this is a
|
||
tribute to the legendary game <a href="http://en.wikipedia.org/wiki/Super_Mario_Bros.">Super Mario
|
||
Bros</a>!</p>
|
||
<p><a href="http://en.wikipedia.org/wiki/The_Great_Giana_Sisters">The Great Giana
|
||
Sisters</a> is the game
|
||
created by <a href="https://www.ign.com/games/producer/time-warp-productions">Time Warp
|
||
Productions</a> and my
|
||
justification for the sprites for Mario are the same for this game. Long live
|
||
<a href="http://en.wikipedia.org/wiki/The_Great_Giana_Sisters">The Great Giana
|
||
Sisters</a> !! :)</p>
|
||
<!--
|
||
|
||
Copyright © 1984-2024 by Landon Curt Noll. All Rights Reserved.
|
||
|
||
You are free to share and adapt this file under the terms of this license:
|
||
|
||
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||
|
||
For more information, see:
|
||
|
||
https://creativecommons.org/licenses/by-sa/4.0/
|
||
|
||
-->
|
||
<!-- AFTER: last line of markdown file: 2014/maffiodo1/README.md -->
|
||
|
||
<!-- END: this line ends content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
|
||
<!-- START: this line starts content for HTML phase 22 by: bin/output-index-inventory.sh via bin/md2html.sh -->
|
||
|
||
<!-- START: this line starts content generated by: bin/output-index-inventory.sh -->
|
||
|
||
<div id="inventory">
|
||
<h1 id="inventory-for-2014maffiodo1">Inventory for 2014/maffiodo1</h1>
|
||
</div>
|
||
<h2 id="primary-files">Primary files</h2>
|
||
<ul>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/2014/maffiodo1/prog.c">prog.c</a> - entry source code</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/2014/maffiodo1/Makefile">Makefile</a> - entry Makefile</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/2014/maffiodo1/prog.orig.c">prog.orig.c</a> - original source code</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/2014/maffiodo1/giana.sh">giana.sh</a> - script to play The Great Giana Sisters</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/2014/maffiodo1/mario.sh">mario.sh</a> - script to play Super Mario Brothers</li>
|
||
<li><a href="screenshot-giana.png">screenshot-giana.png</a> - gameplay screenshot of The Great Giana Sisters</li>
|
||
<li><a href="screenshot-mario.png">screenshot-mario.png</a> - gameplay screenshot of Super Mario Brothers</li>
|
||
<li><a href="giana8.wav">giana8.wav</a> - sound file for The Great Giana Sisters</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/2014/maffiodo1/giana.level">giana.level</a> - game level data for The Great Giana Sisters</li>
|
||
<li><a href="mario8.wav">mario8.wav</a> - sound file for Super Mario Brothers</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/2014/maffiodo1/mario.level">mario.level</a> - game level data for Super Mario Brothers</li>
|
||
</ul>
|
||
<h2 id="secondary-files">Secondary files</h2>
|
||
<ul>
|
||
<li><a href="2014_maffiodo1.tar.bz2">2014_maffiodo1.tar.bz2</a> - download entry tarball</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/2014/maffiodo1/README.md">README.md</a> - markdown source for this web page</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/2014/maffiodo1/.entry.json">.entry.json</a> - entry summary and manifest in JSON</li>
|
||
<li><a href="giana.rgba">giana.rgba</a> - raw RGBA image for The Great Giana Sisters</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/2014/maffiodo1/.gitignore">.gitignore</a> - list of files that should not be committed under git</li>
|
||
<li><a href="mario.rgba">mario.rgba</a> - raw RGBA image for Super Mario Brothers</li>
|
||
<li><a href="https://github.com/ioccc-src/winner/blob/master/2014/maffiodo1/.path">.path</a> - directory path from top level directory</li>
|
||
<li><a href="index.html">index.html</a> - this web page</li>
|
||
</ul>
|
||
<hr style="width:10%;text-align:left;margin-left:0">
|
||
<h4>
|
||
Jump to: <a href="#">top</a>
|
||
</h4>
|
||
|
||
<!-- END: next line ends content generated by: bin/output-index-inventory.sh -->
|
||
|
||
<!-- END: this line ends content for HTML phase 22 by: bin/output-index-inventory.sh via bin/md2html.sh -->
|
||
<!-- START: this line starts content from: inc/after-content.default.html -->
|
||
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/after-content.default.html -->
|
||
<!-- START: this line starts content from: inc/footer.inventory.html -->
|
||
|
||
<!--
|
||
|
||
Copyright © 1984-2025 by Landon Curt Noll. All Rights Reserved.
|
||
|
||
You are free to share and adapt this file under the terms of this license:
|
||
|
||
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||
|
||
For more information, see:
|
||
|
||
https://creativecommons.org/licenses/by-sa/4.0/
|
||
|
||
-->
|
||
|
||
<div class="footer">
|
||
|
||
<div id="copyright"><h3>Copyright © 1984-2025 by Landon Curt Noll:
|
||
<a href="https://creativecommons.org/faq/#what-does-some-rights-reserved-mean"
|
||
target="_blank"
|
||
rel="license noopener noreferrer">Some Rights Reserved</a></h3>
|
||
<p>
|
||
This work is <b>licensed by Landon Curt Noll</b> under
|
||
<b><a href="https://creativecommons.org/licenses/by-sa/4.0/?ref=chooser-v1"
|
||
target="_blank"
|
||
rel="license noopener noreferrer"
|
||
style="display:inline-block;">CC BY-SA 4.0</a></b>.
|
||
<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
|
||
src="../../png/cc.png"
|
||
alt="cc inside circle symbol">
|
||
<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
|
||
src="../../png/by.png"
|
||
alt="person inside circle symbol">
|
||
<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
|
||
src="../../png/sa.png"
|
||
alt="arrow looping back on itself inside circle symbol"><br>
|
||
You should <b>carefully review</b> the
|
||
<b><a href="https://creativecommons.org/licenses/by-sa/4.0/legalcode.en"
|
||
target="_blank"
|
||
rel="license noopener noreferrer">CC BY-SA 4.0 LEGAL CODE</a></b>
|
||
before using the licensed material.<br>
|
||
You may wish to review the
|
||
<b><a href="../../license.html"
|
||
target="_blank"
|
||
rel="license noopener noreferrer">highlights of some of the key features and terms</a></b>
|
||
of <b>CC BY-SA 4.0</b>.<br>
|
||
</p>
|
||
</div>
|
||
|
||
<div id="coda"><h3>Coda</h3>
|
||
<p>
|
||
<a href="https://validator.w3.org/nu/?doc=https%3A%2F%2Fwww.ioccc.org%2F2014%2Fmaffiodo1%2Findex.html" rel="nofollow">Nu HTML check this web page</a><br>
|
||
<a href="#top">Jump to top</a> <a href="#content">Jump to Content</a> <a href="#inventory">Jump to Inventory</a><br>
|
||
</p>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/footer.inventory.html -->
|
||
<!-- START: this line starts content from: inc/bottom.default.html -->
|
||
|
||
</body>
|
||
</html>
|
||
|
||
<!-- END: this line ends content from: inc/bottom.default.html -->
|