First commit.

This commit is contained in:
Niels Serup
2011-08-02 19:57:57 +02:00
commit 0cc9d8fdc5
623 changed files with 28299 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
<?php @header("location:."); ?>
Well done, my friend. You actually made it to the error page. You are worthy.

View File

@@ -0,0 +1,7 @@
<?php @header("location:."); ?>
<h3>Welcome to Eon Aton!</h3>
<h6>Eon Aton is a multisided entertainment center that consists of a game and a story.</h6>
<p>The game tries to mimic retro style RPGs, while the story is a mix of fantasy and science fiction. Eon Aton is a world of its own, merging reality with fantasy. The concept is still in beta fase, though. But that will change someday.</p><br />
<p>Beginning to get curious, are you? Can't wait to start reading the story and playing the game? There's nothing holding you back. Go click on the links in the menu to the left.</p><br />
<h5>By the way..</h5>
<p>The name "Eon Aton" doesn't really mean anything. Aton is a city in the universe of Eon Aton, but the word "Eon" in front of "Aton" simply sounds cool. There's no definite way to pronounce it. It's up to you.</p>

View File

@@ -0,0 +1,3 @@
<?php @header("location:."); ?>
<a id='play' href='game/'>Play Eon Aton</a>
<h5 class='center'>Note: The game is still in beta fase.</h5>

View File

@@ -0,0 +1,4 @@
<?php @header("location:."); ?>
<h3>Instructions</h3>
<p>Use the arrow keys to walk.</p>
<p>Press Shift while using the arrow keys to run.</p>

View File

@@ -0,0 +1,2 @@
<?php @header("location:."); ?>
<p>Coming when the game nears a finished state.</p>

View File

@@ -0,0 +1,5 @@
<?php @header("location:."); ?>
<h3>Technical information</h3>
<p>When finished, Eon Aton will use a combination of JavaScript and XML to power its engine. The JavaScript code will hold the basic information on how to do things, and the XML file will tell the JavaScript code what to do.</p><br />
<p><a href='game/info.xml'>The XML file</a></p><br />
<p>The XML file is currently not being used, though.</p>

View File

@@ -0,0 +1,9 @@
<?php @header("location:."); ?>
<h3>The story</h3>
<p><a href='story/eonaton.pdf'>PDF version</a></p>
<p><a href='story/eonaton.odt'>ODT version</a></p>
<p><a href='story/eonaton.txt'>Plain text version</a> (<a href='story/eonaton.txt.gz'>gzipped version</a>)</p>
<p><a href='story/eonaton80w.txt'>Plain text version with 80-character lines. (<a href='story/eonaton80w.txt.gz'>gzipped version</a>)</a></p>
<br />
<p>Eon Aton is released under Creative Commons Attribution-ShareAlike 3.0. Copyright holder: Niels Serup</p>
<a href='http://creativecommons.org/licenses/by-sa/3.0/'><img style='border:0' src='img/cc-by-sa.png' /></a>

View File

@@ -0,0 +1,17 @@
<?php @header("location:."); ?>
<h3>FAQ</h3>
<h6>(although nobody actually asked these questions..)</h6><br />
<p style='color:#ff0000'>Q: What's this story about?</p>
<p>A: Eon Aton is a story about a bunch of people who seek to have their cities restored. Naturally they'll also want to do some harm to the ones at fault. However, Eon Aton also incorporates themes such as sadness, longing and anger, while still keeping it a bit humourous at times. In theory, that is.</p>
<p style='color:#ff0000'>Q: Why did you make it?</p>
<p>A: I guess I was bored (this goes for the game as well).</p>
<p style='color:#ff0000'>Q: Did you ever consider quitting?</p>
<p>A: I never worked.</p>
<p style='color:#ff0000'>Q: I think I see a resemblance to [write random RPG here] in your story. Is this true?</p>
<p>A: Probably. I've played a few RPG's, and I might've copied some things. After all, there's also a reason why the Eon Aton game is RPG-like.</p>
<p style='color:#ff0000'>Q: Do you expect the public to actually like this story?</p>
<p>A: I don't know.</p>

View File

@@ -0,0 +1,12 @@
<?php @header("location:."); ?>
<p>Who is behind this oddity in which the ulterior purpose is to take over the world? (Oops.. I guess I shouldn't have said that..)</p>
<p>Who has spent hours finishing this project with no real purpose?</p>
<p>Who has written code that's too messy for others to be able to understand it?</p><br />
<p>It is...</p>
<h2>The creator</h2>
<img class='left' src='img/wiz-remake-tiny.jpg' alt='Not me' style='widtH:143px;height:248px;' />
<p>Or whatever you want to call me.</p>
<p>I'm from Denmark. And no, Denmark isn't a city in Sweden, it's a country on its own.</p>
<p>To get to know more about me, simple click on the link "nqpz" in the bottom right corner.</p>
<br />
<p>The wizard to the left isn't me.</p>

View File

@@ -0,0 +1,39 @@
<?php @header("location:."); ?>
<h3>Images</h3>
<p>Here's a couple of logos and such that you can freely download and use yourself.</p><br />
<div class='imglinks'>
<div>The Eon Aton logo in SVG format</div><br />
<a href='stuff/logo.svg'><img src='img/dllogo.png' alt='The Eon Aton logo' style='width:350px;height:153px;' /></a>
<p>SVG rocks!</p>
<div>Grid 8x10</div><br />
<a href='stuff/grid-8x10.png'><img src='stuff/grid-8x10.png' alt='The standard grid' style='width:491px;height:521px;' /></a>
<p>The standard grid used for the movements of most characters in Eon Aton (the game).</p>
<div>Grid 8x10 - Simple arrows</div><br />
<a href='game/char/simplearrows.png'><img src='game/char/simplearrows.png' alt='The standard grid with simple arrows' style='width:491px;height:521px;' /></a>
<p>The standard grid featuring.. simple arrows. Can be used as a guideline for saving movements. Circle means standing still, square means walking, and triangle means running.</p>
<div>Grid 8x10 - Wiz the Wizard</div><br />
<a href='game/char/wizard.png'><img src='game/char/wizard.png' alt='The standard grid with Wiz the Wizard' style='width:491px;height:521px;' /></a>
<p>The standard grid featuring.. Wiz the Wizard! Pretty poorly drawn, but you get the idea.</p>
<div>Original drawing of Wiz the Wizard</div><br />
<a href='stuff/originaldrawing.jpg'><img src='img/originaldrawing-small.jpg' alt='The original drawing of Wiz the Wizard' style='width:500px;height:177px;' /></a>
<p>This is a JPEG file consisting of two scanned A4 papers with the original drawings of Wiz the Wizard.</p>
<div>Wiz the Wizard</div><br />
<a href='stuff/wiz.png'><img src='img/wiz-small.jpg' alt='Another original drawing of Wiz the Wizard' style='width:217px;height:376px;' /></a>
<p>This is a close-up photoshoot with Wiz the Wizard. Notice how smart he looks.</p>
<div>Wiz the Wizard [REMAKE]</div><br />
<a href='stuff/wiz-remake.png'><img src='img/wiz-remake-small.jpg' alt='Remake of another original drawing of Wiz the Wizard' style='width:217px;height:376px;' /></a>
<p>This time Wiz has had a remake.</p>
<div>Wiz the Wizard [TRANSPARENT]</div><br />
<a href='stuff/wiz-transparent.png'><img src='img/wiz-transparent-small.png' alt='He is not a ghost because he is transparent.' style='width:217px;height:376px;' /></a>
<p>This time Wiz has turned semi-transparent.</p>
</div>

View File

@@ -0,0 +1,2 @@
<?php @header("location:."); ?>
<p>You can contact me at <a href='mailto:ns@metanohi.org'>ns@metanohi.org</a>.</p>

View File

@@ -0,0 +1,19 @@
<?php @header("location:."); ?>
<h5>Terms of Use</h5>
<h6>Version 7.5.1.23.5</h6>
<pre id='use'>
TERMS OF USE - PLEASE READ VERY CAREFULLY
While at this site, you are NOT allowed to do one or more of the following actions:
- Bomb buildings
- Pretend you're not yourself
- Play Wolfenstein 3D
- Eat squirrels
- Do silly walks
- Type "f*ck" (typing "fuck" is okay)
- Defeat Bowser
- Mimic Donald Duck
- Count to &infin;
Also, you are not allowed to leave Eon Aton.
</pre>

View File

@@ -0,0 +1,13 @@
<?php @header("location:."); ?>
<h3>Privacy Policy</h3>
<p>(Shit.. I forgot to make one. Better just use the standard version..)</p>
<br />
<pre id='use'>
PRIVACY POLICY - PLEASE DO NOT READ VERY CAREFULLY
The millisecond you entered Eon Aton, all your rights were taken from you.
Eon Aton owns all your rights now. Every move you make is being traced,
and whatever you do from now on to your death will be made public.
On the bright side, you get to play and read Eon Aton!
</pre>

View File

@@ -0,0 +1,2 @@
<?php @header("location:."); ?>
<p>The game is GPL, the story is CC-BY-SA.</p>

View File

@@ -0,0 +1,2 @@
<?php @header("location:."); ?>
<p>I really like time machines.</p>

View File

@@ -0,0 +1,2 @@
<?php @header("location:."); ?>
<p>Lizards are really fascinating creatures.</p>

View File

@@ -0,0 +1,2 @@
<?php @header("location:."); ?>
<p><a href='../browse/#eonaton/index.php'>See source code.</a></p>

View File

@@ -0,0 +1,71 @@
<?php
class quotearray {
private $list=array();
function add($what,$who) {
$this->list[sizeof($this->list)]=array($what,$who);
}
function random() {
$rnd=mt_rand(0,sizeof($this->list)-1);
return "<p>".$this->list[$rnd][0]."<p>\n<p id='who'>- ".$this->list[$rnd][1]."</p>";
}
}
$type=0;
class linksarray {
private $list=array();
private $cats=array();
private $type;
function linksarray() {
global $type;
$this->type=$type;
$type++;
}
function add($page) {
$this->list[sizeof($this->list)]=$page;
}
function cat($title) {
$this->cats[sizeof($this->cats)]=array($title,sizeof($this->list));
}
function size() {
return sizeof($this->list);
}
function generate($split="") {
global $pagetype,$pagesite,$title;
$list_size=sizeof($this->list);
$cats_size=sizeof($this->cats);
$current_cat=0;
$output="";
$i=array();
for ($i[0]=0;$i[0]<$list_size;$i[0]++) {
for ($i[1]=$current_cat;$i[1]<$cats_size;$i[1]++) {
if ($this->cats[$i[1]][1]==$i[0]) $output.="\n<div class='cat'>".$this->cats[$i[1]][0]."</div>\n";
}
if ($pagetype==$this->type && $pagesite==$i[0]) {
$container[0]="<div id='current'>";
$container[1]="</div>";
$title=$this->list[$i[0]];
}
else {
if ($this->type==0 && $i[0]==0) $link=".";
else $link="?t=".$this->type."&s=".$i[0];
$container[0]="<a href='".$link."'>";
$container[1]="</a>";
}
$output.=$container[0].$this->list[$i[0]].$container[1]."\n".$split;
}
return $output;
}
}
?>

View File

@@ -0,0 +1,674 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 315 KiB

View File

@@ -0,0 +1,94 @@
/*
Eon Aton: a RPG-like game system in JavaScript
Copyright (C) 2008-2009 Niels Serup
This file is part of Eon Aton.
Eon Aton is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Eon Aton is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Eon Aton. If not, see <http://www.gnu.org/licenses/>.
*/
/*
This file contains the different classes to be used with Eon Aton.
*/
// Screen
function screen() {
var type, name, description, background, bbackground, width, height, viswidth, visheight, viselem, elem
this.type="screen"
}
screen.prototype.create=function() {
document.body.style.background=style_bg_img(this.bbackground)
this.viselem=document.createElement("div")
this.viselem.id="visgamebox"
if (this.viswidth>this.width) this.viswidth=this.width
if (this.visheight>this.height) this.visheight=this.height
this.viselem.style.width=(this.viswidth)+"px"
this.viselem.style.height=(this.visheight)+"px"
this.viselem.style.marginLeft=(-this.viswidth/2)+"px"
this.viselem.style.marginTop=(-this.visheight/2)+"px"
this.elem=document.createElement("div")
this.elem.style.background=style_bg_img(this.background)
this.elem.id="gamebox"
this.elem.style.width=(this.width)+"px"
this.elem.style.height=(this.height)+"px"
this.viselem.appendChild(this.elem)
document.body.appendChild(this.viselem)
characters_container=document.createElement("div")
characters_container.id="characters"
this.elem.appendChild(characters_container)
}
screen.prototype.add=function(obj) {
eval(obj.type+"s_container").appendChild(obj.elem)
if (obj.type=="character") give_life(obj)
}
screen.prototype.remove=function() {
document.body.style.background=""
document.body.removeChild(this.elem)
}
// Character
function character() {
var type, visible, name, description, src, width, height, dirs, elem, posX, posY
this.type="character"
this.visible=false
this.dirs=new Array(8)
this.posX=0
this.posY=0
}
character.prototype.dir=function(dir,row,stand,walk,run) {
this.dirs[dir]=new Array()
this.dirs[dir][0]=row
this.dirs[dir][1]=stand
this.dirs[dir][2]=walk
this.dirs[dir][3]=run
}
character.prototype.create=function() {
this.elem=document.createElement("div")
this.elem=document.createElement("div")
this.elem.style.background="url("+this.src+")"
this.elem.style.width=(this.width)+"px"
this.elem.style.height=(this.height)+"px"
}
character.prototype.remove=function() {
characters_container.removeChild(this.elem)
}

View File

@@ -0,0 +1,360 @@
/*
Eon Aton: a RPG-like game system in JavaScript
Copyright (C) 2008-2009 Niels Serup
This file is part of Eon Aton.
Eon Aton is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Eon Aton is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Eon Aton. If not, see <http://www.gnu.org/licenses/>.
*/
/*
This file contains various functions to be used together with the classes.
*/
function style_bg_img(background) {
var cssurl
if (background.indexOf(".")!=-1) cssurl=["url(",")"]
else cssurl=["",""]
return cssurl[0]+background+cssurl[1]
}
function remove(obj) {
if (obj.type="character") take_life(obj)
obj.remove()
delete obj
}
function getkeycode(e) {
var keycode
if (window.event) keycode=window.event.keyCode
else if (e) keycode=e.which
else keycode=0
return keycode
}
function START_systems() {
key_up=false
key_right=false
key_down=false
key_left=false
key_shift=false
key_control=false
key_order=new Array()
for (var i=0;i<4;i++) {
key_order[i]=0
}
direction=7
character_state=1
document.onkeydown=keydown
document.onkeyup=keyup
row_num=new Array()
col_num=new Array()
col_length=new Array()
maxwidth=0
maxheight=0
define_pixel_movement(5,10)
define_character_distance(-5)
direction_changing_speed=3
frame_showing_speed=150
movement_speed=50
frame_showing()
movement()
}
function define_pixel_movement(walk,run) {
pixel_movement=[0,walk,run]
diagonal_pixel_movement=[0,Math.sqrt(walk*walk/2),Math.sqrt(run*run/2)]
}
function define_character_distance(dist) {
character_distance=dist
diagonal_character_distance=Math.sqrt(dist*dist*2)
if (dist<0) diagonal_character_distance=-diagonal_character_distance
}
function show_frame(cha_num,row,col) {
characters[cha_num].elem.style.backgroundPosition="-"+(col*(characters[cha_num].width+1)+1)+"px -"+(characters[cha_num].dirs[row][0]*(characters[cha_num].height+1)+1)+"px"
}
function frame_showing() {
for (var i=0;i<characters.length;i++) {
if (col_num[i]<col_length[i]) col_num[i]++
else col_num[i]=0
if (characters[i].visible) show_frame(i,row_num[0],characters[i].dirs[row_num[i]][character_state][col_num[i]])
}
setTimeout(frame_showing,frame_showing_speed)
}
function movement() {
var pixmove=pixel_movement[character_state-1]
var dia_pixmove=diagonal_pixel_movement[character_state-1]
var li, x, y, s_x, s_y, cy
for (var i=0;i<characters.length;i++) {
if (characters[i].visible) {
switch(direction) {
case 1:
if (i==0) {
x=characters[i].posX
y=characters[i].posY-pixmove
}
else {
x=characters[i].posX+(characters[li].posX-characters[i].posX)/direction_changing_speed
y=characters[i].posY+(characters[li].posY-characters[i].posY+character_distance+characters[li].height)/direction_changing_speed
}
break;
case 2:
if (i==0) {
x=characters[i].posX+dia_pixmove
y=characters[i].posY-dia_pixmove
}
else {
x=characters[i].posX+(characters[li].posX-characters[i].posX-diagonal_character_distance-characters[i].width)/direction_changing_speed
y=characters[i].posY+(characters[li].posY-characters[i].posY+diagonal_character_distance+characters[li].height)/direction_changing_speed
}
break;
case 3:
if (i==0) {
x=characters[i].posX+pixmove
y=characters[i].posY
}
else {
x=characters[i].posX+(characters[li].posX-characters[i].posX-character_distance-characters[i].width)/direction_changing_speed
y=characters[i].posY+(characters[li].posY-characters[i].posY)/direction_changing_speed
}
break;
case 4:
if (i==0) {
x=characters[i].posX+dia_pixmove
y=characters[i].posY+dia_pixmove
}
else {
x=characters[i].posX+(characters[li].posX-characters[i].posX-diagonal_character_distance-characters[i].width)/direction_changing_speed
y=characters[i].posY+(characters[li].posY-characters[i].posY-diagonal_character_distance-characters[i].height)/direction_changing_speed
}
break;
case 5:
if (i==0) {
x=characters[i].posX
y=characters[i].posY+pixmove
}
else {
x=characters[i].posX+(characters[li].posX-characters[i].posX)/direction_changing_speed
y=characters[i].posY+(characters[li].posY-characters[i].posY-character_distance-characters[i].height)/direction_changing_speed
}
break;
case 6:
if (i==0) {
x=characters[i].posX-dia_pixmove
y=characters[i].posY+dia_pixmove
}
else {
x=characters[i].posX+(characters[li].posX-characters[i].posX+diagonal_character_distance+characters[li].width)/direction_changing_speed
y=characters[i].posY+(characters[li].posY-characters[i].posY-diagonal_character_distance-characters[i].height)/direction_changing_speed
}
break;
case 7:
if (i==0) {
x=characters[i].posX-pixmove
y=characters[i].posY
}
else {
x=characters[i].posX+(characters[li].posX-characters[i].posX+character_distance+characters[li].width)/direction_changing_speed
y=characters[i].posY+(characters[li].posY-characters[i].posY)/direction_changing_speed
}
break;
case 8:
if (i==0) {
x=characters[i].posX-dia_pixmove
y=characters[i].posY-dia_pixmove
}
else {
x=characters[i].posX+(characters[li].posX-characters[i].posX+diagonal_character_distance+characters[li].width)/direction_changing_speed
y=characters[i].posY+(characters[li].posY-characters[i].posY+diagonal_character_distance+characters[li].height)/direction_changing_speed
}
break;
}
if (x>-1 && x<current_screen.width-characters[i].width+1) characters[i].posX=x
if (y>-1 && y<current_screen.height-characters[i].height+1) characters[i].posY=y
if (direction==1 || direction==5) s_x=(maxwidth-characters[i].width)/2
else s_x=0
if (direction==3 || direction==7) s_y=maxheight-characters[i].height
else s_y=0
characters[i].elem.style.left=characters[i].posX+s_x+"px"
characters[i].elem.style.top=characters[i].posY+s_y+"px"
cy=characters.length+1
for (ii=0;ii<characters.length;ii++) {
if (characters[ii].posY>characters[i].posY) cy--
}
characters[i].elem.style.zIndex=cy
li=i
}
if (characters.length>0) {
if (characters[0].posX>(current_screen.viswidth-characters[0].width)/2 && characters[0].posX<current_screen.width-(current_screen.viswidth+characters[0].width)/2) current_screen.elem.style.left=-(characters[0].posX-(current_screen.viswidth-characters[0].width)/2)+"px"
if (characters[0].posY>(current_screen.visheight-characters[0].height)/2 && characters[0].posY<current_screen.height-(current_screen.visheight+characters[0].height)/2) current_screen.elem.style.top=-(characters[0].posY-(current_screen.visheight-characters[0].height)/2)+"px"
}
}
setTimeout(movement,movement_speed)
}
function get_character_state() {
if (key_order[0]==0) character_state=1
else if (!key_shift && key_order[0]>0) character_state=2
else if (key_shift && key_order[0]>0) character_state=3
}
function get_row_num() {
for (var i=0;i<characters.length;i++) {
if (!characters[i].dirs[direction-1]) {
if (direction==2 && key_order[1]==1) row_num[i]=0
else if (direction==2 && key_order[1]==2) row_num[i]=2
else if (direction==4 && key_order[1]==2) row_num[i]=2
else if (direction==4 && key_order[1]==3) row_num[i]=4
else if (direction==6 && key_order[1]==3) row_num[i]=4
else if (direction==6 && key_order[1]==4) row_num[i]=6
else if (direction==8 && key_order[1]==4) row_num[i]=6
else if (direction==8 && key_order[1]==1) row_num[i]=0
}
else row_num[i]=direction-1
}
}
function get_col_length() {
get_character_state()
get_row_num()
for (var i=0;i<characters.length;i++) {
col_length[i]=characters[i].dirs[row_num[i]][character_state].length-1
}
}
function get_maxs() {
maxwidth=0
maxheight=0
for (var i=0;i<characters.length;i++) {
if (characters[i].width>maxwidth) maxwidth=characters[i].width
if (characters[i].height>maxheight) maxheight=characters[i].height
}
}
function find_direction() {
if (key_order[0]==1 && key_order[1]!=2 && key_order[1]!=4) direction=1
else if ((key_order[0]==1 && key_order[1]==2) || (key_order[0]==2 && key_order[1]==1)) direction=2
else if (key_order[0]==2 && key_order[1]!=1 && key_order[1]!=3) direction=3
else if ((key_order[0]==2 && key_order[1]==3) || (key_order[0]==3 && key_order[1]==2)) direction=4
else if (key_order[0]==3 && key_order[1]!=2 && key_order[1]!=4) direction=5
else if ((key_order[0]==3 && key_order[1]==4) || (key_order[0]==4 && key_order[1]==3)) direction=6
else if (key_order[0]==4 && key_order[1]!=3 && key_order[1]!=1) direction=7
else if ((key_order[0]==4 && key_order[1]==1) || (key_order[0]==1 && key_order[1]==4)) direction=8
else direction=0
}
function keydown(e) {
var keycode=getkeycode(e)
if (keycode==38 && !key_up) {
key_up=true
key_order.splice(0,0,1)
key_order.splice(3,1)
}
else if (keycode==39 && !key_right) {
key_right=true
key_order.splice(0,0,2)
key_order.splice(3,1)
}
else if (keycode==40 && !key_down) {
key_down=true
key_order.splice(0,0,3)
key_order.splice(3,1)
}
else if (keycode==37 && !key_left) {
key_left=true
key_order.splice(0,0,4)
key_order.splice(3,1)
}
else if (keycode==16) key_shift=true
else if (keycode==17) key_control=true
if (keycode==38 || keycode==39 || keycode==40 || keycode==37) find_direction()
if (keycode==38 || keycode==39 || keycode==40 || keycode==37 || keycode==16) get_col_length()
}
function keyup(e) {
var keycode=getkeycode(e)
if (keycode==38 && key_up) {
key_up=false
for (var i=0;i<4;i++) {
if (key_order[i]==1) key_order.splice(i,1)
}
key_order.splice(3,0,0)
}
else if (keycode==39 && key_right) {
key_right=false
for (var i=0;i<4;i++) {
if (key_order[i]==2) key_order.splice(i,1)
}
key_order.splice(3,0,0)
}
else if (keycode==40 && key_down) {
key_down=false
for (var i=0;i<4;i++) {
if (key_order[i]==3) key_order.splice(i,1)
}
key_order.splice(3,0,0)
}
else if (keycode==37 && key_left) {
key_left=false
for (var i=0;i<4;i++) {
if (key_order[i]==4) key_order.splice(i,1)
}
key_order.splice(3,0,0)
}
else if (keycode==16) key_shift=false
else if (keycode==17) key_control=false
if (key_order[0]>0 && (keycode==38 || keycode==39 || keycode==40 || keycode==37)) find_direction()
if (keycode==38 || keycode==39 || keycode==40 || keycode==37 || keycode==16) get_col_length()
}
function exchange_characters(a,b) {
var temp=characters[a]
characters[a]=characters[b]
characters[b]=temp
}
function give_life(cha) {
col_num[characters.length]=0
cha.visible=true
cha.elem.style.display="block"
get_col_length()
get_maxs()
}
function take_life(cha) {
cha.visible=false
cha.elem.style.display="none"
get_maxs()
}

View File

@@ -0,0 +1,34 @@
* {
margin:0;
padding:0;
}
body {
font:normal 11px arial;
}
#visgamebox {
position:absolute;
top:50%;
left:50%;
overflow:hidden;
}
#gamebox {
position:absolute;
top:0;
left:0;
}
#characters {
position:absolute;
top:0;
left:0;
}
#characters div {
position:absolute;
top:0;
left:0;
display:none;
}

View File

@@ -0,0 +1,11 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Eon Aton</title>
<link href='general.css' type='text/css' rel='stylesheet' />
<script type='text/javascript' src='functions.js'></script>
<script type='text/javascript' src='classes.js'></script>
<script type='text/javascript' src='load.js'></script>
</head>
<body></body>
</html>

View File

@@ -0,0 +1,175 @@
<?xml version="1.0" encoding="utf-8" ?>
<information>
<defaults>
<actions>
<action id="showdescription">
document.title+="..."
</action>
</actions>
<objects>
<object id="box1">
<name>A box</name>
<description>It is nothing but a.. box.</description>
<image>
<dimensions>
<width>60</width>
<height>50</height>
</dimensions>
<address>objs/box1.png</address>
</image>
<position>
<x>100</x>
<y>70</y>
</position>
<actions>
<action rel="showdescription"></action>
</actions>
</object>
</objects>
<characters>
<character>
<name>Simple arrows</name>
<description>Simple arrows explaining how character movement works.</description>
<image>
<dimensions>
<width>64</width>
<height>48</height>
</dimensions>
<address>char/simplearrows.png</address>
</image>
<movement>
<speed>10</speed>
<directions>
<topcenter>
<row>1</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</topcenter>
<topright>
<row>2</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</topright>
<middleright>
<row>3</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</middleright>
<bottomright>
<row>4</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</bottomright>
<bottomcenter>
<row>5</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</bottomcenter>
<bottomleft>
<row>6</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</bottomleft>
<middleleft>
<row>7</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</middleleft>
<topleft>
<row>8</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</topleft>
</directions>
</movement>
</character>
</characters>
<maps>
<map>
<name>The Sun</name>
<description>The great star</description>
<image>
<dimensions>
<width>640</width>
<height>400</height>
<viswidth>640</viswidth>
<visheight>400</visheight>
</dimensions>
<address>maps/sun.png</address>
</image>
<objects>
<object rel="box1"></object>
</objects>
</map>
</maps>
</defaults>
<actions>
<action state="default"></action>
<action id="msg2">
alert("Hmm...")
</action>
</actions>
<objects>
<object state="default"></object>
<object id="box2">
<name>A small box</name>
<description>Aha! A small box!</description>
<image>
<dimensions>
<width>30</width>
<height>25</height>
</dimensions>
<address>objs/box2.png</address>
</image>
<position>
<x>200</x>
<y>100</y>
</position>
<actions>
<action rel="msg2"></action>
</actions>
</object>
</objects>
<characters>
<character state="default"></character>
<character>
<name>Wiz the Wizard</name>
<description>A poorly drawn wizard, fighting against all evil.</description>
<image>
<address>char/wizard.png</address>
</image>
</character>
</characters>
<maps>
<map state="default"></map>
<map>
<name>The valley of Sunshine</name>
<description>Beams of light break through the sky.</description>
<image>
<address>maps/sunshine.png</address>
</image>
</map>
</maps>
</information>

View File

@@ -0,0 +1,103 @@
/*
Eon Aton: a RPG-like game system in JavaScript
Copyright (C) 2008-2009 Niels Serup
This file is part of Eon Aton.
Eon Aton is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Eon Aton is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Eon Aton. If not, see <http://www.gnu.org/licenses/>.
*/
/*
This file creates the game on page load.
*/
window.onload=function(){
characters=new Array()
START_systems()
current_screen=new screen()
current_screen.name="The Sun"
current_screen.description="The great star"
current_screen.background="maps/sun.png"
current_screen.bbackground="#000"
current_screen.width=1920
current_screen.height=1200
current_screen.viswidth=640
current_screen.visheight=400
current_screen.create()
characters[0]=new character()
characters[0].name="Wiz the Wizard"
characters[0].description="A poorly drawn wizard, fighting against all evil."
characters[0].src="char/wizard.png"
characters[0].width=48
characters[0].height=64
characters[0].posX=285
characters[0].posY=140
characters[0].dir(0,0,[0,1],[2,3,4,5],[6,7,8,9])
characters[0].dir(1,1,[0,1],[2,3,4,5],[6,7,8,9])
characters[0].dir(2,2,[0,1],[2,3,4,5],[6,7,8,9])
characters[0].dir(3,3,[0,1],[2,3,4,5],[6,7,8,9])
characters[0].dir(4,4,[0,1],[2,3,4,5],[6,7,8,9])
characters[0].dir(5,5,[0,1],[2,3,4,5],[6,7,8,9])
characters[0].dir(6,6,[0,1],[2,3,4,5],[6,7,8,9])
characters[0].dir(7,7,[0,1],[2,3,4,5],[6,7,8,9])
characters[0].create()
current_screen.add(characters[0])
characters[1]=new character()
characters[1].name="Wiz the Wizard"
characters[1].description="A poorly drawn wizard, fighting against all evil."
characters[1].src="char/simplearrows.png"
characters[1].width=48
characters[1].height=64
characters[1].posX=335
characters[1].posY=140
characters[1].dir(0,0,[0,1],[2,3,4,5],[6,7,8,9])
characters[1].dir(1,1,[0,1],[2,3,4,5],[6,7,8,9])
characters[1].dir(2,2,[0,1],[2,3,4,5],[6,7,8,9])
characters[1].dir(3,3,[0,1],[2,3,4,5],[6,7,8,9])
characters[1].dir(4,4,[0,1],[2,3,4,5],[6,7,8,9])
characters[1].dir(5,5,[0,1],[2,3,4,5],[6,7,8,9])
characters[1].dir(6,6,[0,1],[2,3,4,5],[6,7,8,9])
characters[1].dir(7,7,[0,1],[2,3,4,5],[6,7,8,9])
characters[1].create()
current_screen.add(characters[1])
characters[2]=new character()
characters[2].name="Wiz the Wizard"
characters[2].description="A poorly drawn wizard, fighting against all evil."
characters[2].src="char/wizard.png"
characters[2].width=48
characters[2].height=64
characters[2].posX=385
characters[2].posY=140
characters[2].dir(0,0,[0,1],[2,3,4,5],[6,7,8,9])
characters[2].dir(1,1,[0,1],[2,3,4,5],[6,7,8,9])
characters[2].dir(2,2,[0,1],[2,3,4,5],[6,7,8,9])
characters[2].dir(3,3,[0,1],[2,3,4,5],[6,7,8,9])
characters[2].dir(4,4,[0,1],[2,3,4,5],[6,7,8,9])
characters[2].dir(5,5,[0,1],[2,3,4,5],[6,7,8,9])
characters[2].dir(6,6,[0,1],[2,3,4,5],[6,7,8,9])
characters[2].dir(7,7,[0,1],[2,3,4,5],[6,7,8,9])
characters[2].create()
current_screen.add(characters[2])
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 546 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 B

View File

@@ -0,0 +1,73 @@
// Screen
function screen() {
var type, name, description, background, bbackground, width, height, viswidth, visheight, elem
this.type="screen"
}
screen.prototype.create=function() {
document.body.style.background=style_bg_img(this.bbackground)
this.elem=document.createElement("div")
this.elem.style.background=style_bg_img(this.background)
this.elem.id="gamebox"
this.elem.style.width=(this.viswidth)+"px"
this.elem.style.height=(this.visheight)+"px"
this.elem.style.marginLeft=(-this.viswidth/2)+"px"
this.elem.style.marginTop=(-this.visheight/2)+"px"
document.body.appendChild(this.elem)
characters_container=document.createElement("div")
characters_container.id="characters"
this.elem.appendChild(characters_container)
}
screen.prototype.add=function(obj) {
eval(obj.type+"s_container").appendChild(obj.elem)
if (obj.type=="character") bring_to_life(obj)
}
screen.prototype.remove=function() {
document.body.style.background=""
document.body.removeChild(this.elem)
}
// Character
function character() {
var type, name, description, src, width, height, dirs, elem, elems
this.type="character"
this.dirs=new Array(8)
}
character.prototype.dir=function(dir) {
this.dirs[dir[0]]=new Array()
this.dirs[dir[0]][0]=dir[1]
for (var i=1;i<4;i++) {
this.dirs[dir[0]][i]=new Array()
}
for (i=2;i<dir.length;i++) {
if (dir[i]==1) this.dirs[dir[0]][1].push(i-2)
else if (dir[i]==2) this.dirs[dir[0]][2].push(i-2)
else if (dir[i]==3) this.dirs[dir[0]][3].push(i-2)
}
this.dirs[dir[0]][4]=dir.length-2
}
character.prototype.create=function() {
this.elems=new Array(8)
this.elem=document.createElement("div")
for (var i=0;i<8;i++) {
if (this.dirs[i]) {
this.elems[i]=new Array()
for (var ii=0;ii<this.dirs[i][4];ii++) {
this.elems[i][ii]=document.createElement("div")
this.elems[i][ii].style.background="url("+this.src+")"
this.elems[i][ii].style.backgroundPosition="-"+(ii*(this.width+1)+1)+"px -"+(this.dirs[i][0]*(this.height+1)+1)+"px"
this.elems[i][ii].style.width=(this.width)+"px"
this.elems[i][ii].style.height=(this.height)+"px"
this.elem.appendChild(this.elems[i][ii])
}
}
}
}
character.prototype.remove=function() {
characters_container.removeChild(this.elem)
}

View File

@@ -0,0 +1,121 @@
function style_bg_img(background) {
var cssurl
if (background.indexOf(".")!=-1) cssurl=["url(",")"]
else cssurl=["",""]
return cssurl[0]+background+cssurl[1]
}
function remove(obj) {
if (obj.type="character") take_life(obj)
obj.remove()
delete obj
}
function getkeycode(e) {
var keycode
if (window.event) keycode=window.event.keyCode
else if (e) keycode=e.which
else keycode=0
return keycode
}
function START__movement_detection_system() {
characters=new Array()
characters_time=setInterval(movement_detection_system,100)
}
function movement_detection_system() {
for (var i=0;i<characters.length;i++) {
characters[i].elems[5][2].style.display="block"
}
}
function find_direction() {
if (key_order[0]==1 && key_order[1]!=2 && key_order[1]!=4) direction=1
else if ((key_order[0]==1 && key_order[1]==2) || (key_order[0]==2 && key_order[1]==1)) direction=2
else if (key_order[0]==2 && key_order[1]!=1 && key_order[1]!=3) direction=3
else if ((key_order[0]==2 && key_order[1]==3) || (key_order[0]==3 && key_order[1]==2)) direction=4
else if (key_order[0]==3 && key_order[1]!=2 && key_order[1]!=4) direction=5
else if ((key_order[0]==3 && key_order[1]==4) || (key_order[0]==4 && key_order[1]==3)) direction=6
else if (key_order[0]==4 && key_order[1]!=3 && key_order[1]!=1) direction=7
else if ((key_order[0]==4 && key_order[1]==1) || (key_order[0]==1 && key_order[1]==4)) direction=8
else direction=0
document.title=direction
}
function keydown(e) {
var keycode=getkeycode(e)
if (keycode==38 && !key_up) {
key_up=true
key_order.splice(0,0,1)
key_order.splice(3,1)
}
else if (keycode==39 && !key_right) {
key_right=true
key_order.splice(0,0,2)
key_order.splice(3,1)
}
else if (keycode==40 && !key_down) {
key_down=true
key_order.splice(0,0,3)
key_order.splice(3,1)
}
else if (keycode==37 && !key_left) {
key_left=true
key_order.splice(0,0,4)
key_order.splice(3,1)
}
else if (keycode==16) key_shift=true
else if (keycode==17) key_control=true
find_direction()
}
function keyup(e) {
var keycode=getkeycode(e)
if (keycode==38 && key_up) {
key_up=false
for (var i=0;i<4;i++) {
if (key_order[i]==1) key_order.splice(i,1)
}
key_order.splice(3,0,0)
}
else if (keycode==39 && key_right) {
key_right=false
for (var i=0;i<4;i++) {
if (key_order[i]==2) key_order.splice(i,1)
}
key_order.splice(3,0,0)
}
else if (keycode==40 && key_down) {
key_down=false
for (var i=0;i<4;i++) {
if (key_order[i]==3) key_order.splice(i,1)
}
key_order.splice(3,0,0)
}
else if (keycode==37 && key_left) {
key_left=false
for (var i=0;i<4;i++) {
if (key_order[i]==4) key_order.splice(i,1)
}
key_order.splice(3,0,0)
}
else if (keycode==16) key_shift=false
else if (keycode==17) key_control=false
find_direction()
}
function bring_to_life(cha) {
characters[characters.length]=cha
}
function take_life(cha) {
for (var i=0;i<characters.length;i++) {
if (characters[i]==cha) characters.splice(i,1)
}
}

View File

@@ -0,0 +1,31 @@
* {
margin:0;
padding:0;
}
body {
font:normal 11px arial;
}
#gamebox {
position:absolute;
top:50%;
left:50%;
}
#characters {
position:absolute;
top:0;
left:0;
}
#characters div {
position:absolute;
top:0;
left:0;
}
#characters div div {
position:absolute;
display:none;
}

View File

@@ -0,0 +1,12 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3c.org/1999/xhtml">
<head>
<title>Eon Aton</title>
<link href='general.css' type='text/css' rel='stylesheet' />
<script type='text/javascript' src='functions.js'></script>
<script type='text/javascript' src='classes.js'></script>
<script type='text/javascript' src='load.js'></script>
</head>
<body>
</body>
</html>

View File

@@ -0,0 +1,175 @@
<?xml version="1.0" encoding="utf-8" ?>
<information>
<defaults>
<actions>
<action id="showdescription">
document.title+="..."
</action>
</actions>
<objects>
<object id="box1">
<name>A box</name>
<description>It is nothing but a.. box.</description>
<image>
<dimensions>
<width>60</width>
<height>50</height>
</dimensions>
<address>objs/box1.png</address>
</image>
<position>
<x>100</x>
<y>70</y>
</position>
<actions>
<action rel="showdescription"></action>
</actions>
</object>
</objects>
<characters>
<character>
<name>Simple arrows</name>
<description>Simple arrows explaining how character movement works.</description>
<image>
<dimensions>
<width>64</width>
<height>48</height>
</dimensions>
<address>char/simplearrows.png</address>
</image>
<movement>
<speed>10</speed>
<directions>
<topcenter>
<row>1</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</topcenter>
<topright>
<row>2</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</topright>
<middleright>
<row>3</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</middleright>
<bottomright>
<row>4</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</bottomright>
<bottomcenter>
<row>5</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</bottomcenter>
<bottomleft>
<row>6</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</bottomleft>
<middleleft>
<row>7</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</middleleft>
<topleft>
<row>8</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</topleft>
</directions>
</movement>
</character>
</characters>
<maps>
<map>
<name>The Sun</name>
<description>The great star</description>
<image>
<dimensions>
<width>640</width>
<height>400</height>
<viswidth>640</viswidth>
<visheight>400</visheight>
</dimensions>
<address>maps/sun.png</address>
</image>
<objects>
<object rel="box1"></object>
</objects>
</map>
</maps>
</defaults>
<actions>
<action state="default"></action>
<action id="msg2">
alert("Hmm...")
</action>
</actions>
<objects>
<object state="default"></object>
<object id="box2">
<name>A small box</name>
<description>Aha! A small box!</description>
<image>
<dimensions>
<width>30</width>
<height>25</height>
</dimensions>
<address>objs/box2.png</address>
</image>
<position>
<x>200</x>
<y>100</y>
</position>
<actions>
<action rel="msg2"></action>
</actions>
</object>
</objects>
<characters>
<character state="default"></character>
<character>
<name>Wiz the Wizard</name>
<description>A poorly drawn wizard, fighting against all evil.</description>
<image>
<address>char/wizard.png</address>
</image>
</character>
</characters>
<maps>
<map state="default"></map>
<map>
<name>The valley of Sunshine</name>
<description>Beams of light break through the sky.</description>
<image>
<address>maps/sunshine.png</address>
</image>
</map>
</maps>
</information>

View File

@@ -0,0 +1,51 @@
window.onload=function(){
key_up=false
key_right=false
key_down=false
key_left=false
key_shift=false
key_control=false
key_order=new Array()
for (var i=0;i<4;i++) {
key_order[i]=0
}
direction=0
document.onkeydown=keydown
document.onkeyup=keyup
START__movement_detection_system()
scr=new screen()
scr.name="The Sun"
scr.description="The great star"
scr.background="maps/sun.png"
scr.bbackground="#000"
scr.width=640
scr.height=400
scr.viswidth=scr.width
scr.visheight=scr.height
scr.create()
//remove(scr)
cha=new character()
cha.name="Wiz the Wizard"
cha.description="A poorly drawn wizard, fighting against all evil."
cha.src="char/simplearrows.png"
cha.width=48
cha.height=64
cha.dir([0,0,1,1,2,2,2,2,3,3,3,3])
cha.dir([1,1,1,1,2,2,2,2,3,3,3,3])
cha.dir([2,2,1,1,2,2,2,2,3,3,3,3])
cha.dir([3,3,1,1,2,2,2,2,3,3,3,3])
cha.dir([4,4,1,1,2,2,2,2,3,3,3,3])
cha.dir([5,5,1,1,2,2,2,2,3,3,3,3])
cha.dir([6,6,1,1,2,2,2,2,3,3,3,3])
cha.dir([7,7,1,1,2,2,2,2,3,3,3,3])
cha.create()
scr.add(cha)
//take_life(cha)
//remove(cha)
}

View File

@@ -0,0 +1,59 @@
// Screen
function screen() {
var type, name, description, background, bbackground, width, height, viswidth, visheight, elem
this.type="screen"
}
screen.prototype.create=function() {
document.body.style.background=style_bg_img(this.bbackground)
this.elem=document.createElement("div")
this.elem.style.background=style_bg_img(this.background)
this.elem.id="gamebox"
this.elem.style.width=(this.viswidth)+"px"
this.elem.style.height=(this.visheight)+"px"
this.elem.style.marginLeft=(-this.viswidth/2)+"px"
this.elem.style.marginTop=(-this.visheight/2)+"px"
document.body.appendChild(this.elem)
characters_container=document.createElement("div")
characters_container.id="characters"
this.elem.appendChild(characters_container)
}
screen.prototype.add=function(obj) {
eval(obj.type+"s_container").appendChild(obj.elem)
if (obj.type=="character") give_life(obj)
}
screen.prototype.remove=function() {
document.body.style.background=""
document.body.removeChild(this.elem)
}
// Character
function character() {
var type, name, description, src, width, height, dirs, elem, posX, posY
this.type="character"
this.dirs=new Array(8)
this.posX=0
this.posY=0
}
character.prototype.dir=function(dir,row,stand,walk,run) {
this.dirs[dir]=new Array()
this.dirs[dir][0]=row
this.dirs[dir][1]=stand
this.dirs[dir][2]=walk
this.dirs[dir][3]=run
}
character.prototype.create=function() {
this.elem=document.createElement("div")
this.elem=document.createElement("div")
this.elem.style.background="url("+this.src+")"
this.elem.style.width=(this.width)+"px"
this.elem.style.height=(this.height)+"px"
}
character.prototype.remove=function() {
characters_container.removeChild(this.elem)
}

View File

@@ -0,0 +1,260 @@
function style_bg_img(background) {
var cssurl
if (background.indexOf(".")!=-1) cssurl=["url(",")"]
else cssurl=["",""]
return cssurl[0]+background+cssurl[1]
}
function create(scr) {
scr.create()
link(scr)
}
function remove(obj) {
if (obj.type="character") take_life(obj)
obj.remove()
delete obj
}
function getkeycode(e) {
var keycode
if (window.event) keycode=window.event.keyCode
else if (e) keycode=e.which
else keycode=0
return keycode
}
function START_systems() {
key_up=false
key_right=false
key_down=false
key_left=false
key_shift=false
key_control=false
key_order=new Array()
for (var i=0;i<4;i++) {
key_order[i]=0
}
direction=7
character_state=1
document.onkeydown=keydown
document.onkeyup=keyup
characters=new Array()
row_num=new Array()
col_num=new Array()
col_length=new Array()
define_pixel_movement(3,5)
frame_showing_speed=150
character_movement_speed=50
frame_showing()
character_movement()
//setInterval(debugging,100)
}
function debugging() {
document.title=direction+" | "+col_length[0]+" | "+col_num[0]+" | "+character_state
}
function define_pixel_movement(walk,run) {
pixel_movement=[0,walk,run]
diagonal_pixel_movement=[0,Math.sqrt(walk*walk/2),Math.sqrt(run*run/2)]
}
function show_frame(cha_num,row,col) {
characters[cha_num].elem.style.backgroundPosition="-"+(col*(cha.width+1)+1)+"px -"+(cha.dirs[row][0]*(cha.height+1)+1)+"px"
}
function frame_showing() {
for (var i=0;i<characters.length;i++) {
if (col_num[i]<col_length[i]) col_num[i]++
else col_num[i]=0
show_frame(i,row_num[0],characters[i].dirs[row_num[i]][character_state][col_num[i]])
}
setTimeout(frame_showing,frame_showing_speed)
}
function character_movement() {
var pixmove=pixel_movement[character_state-1]
var dia_pixmove=diagonal_pixel_movement[character_state-1]
var x,y
for (var i=0;i<characters.length;i++) {
switch(direction) {
case 1:
y=characters[i].posY-pixmove
if (y>-1) characters[i].posY=y
break;
case 2:
y=characters[i].posY-dia_pixmove
x=characters[i].posX+dia_pixmove
if (y>-1) characters[i].posY=y
if (x<current_screen.width-characters[i].width+1) characters[i].posX=x
break;
case 3:
x=characters[i].posX+pixmove
if (x<current_screen.width-characters[i].width+1) characters[i].posX=x
break;
case 4:
x=characters[i].posX+dia_pixmove
y=characters[i].posY+dia_pixmove
if (x<current_screen.width-characters[i].width+1) characters[i].posX=x
if (y<current_screen.height-characters[i].height+1) characters[i].posY=y
break;
case 5:
y=characters[i].posY+pixmove
if (y<current_screen.height-characters[i].height+1) characters[i].posY=y
break;
case 6:
y=characters[i].posY+dia_pixmove
x=characters[i].posX-dia_pixmove
if (y<current_screen.height-characters[i].height+1) characters[i].posY=y
if (x>-1) characters[i].posX=x
break;
case 7:
x=characters[i].posX-pixmove
if (x>-1) characters[i].posX=x
break;
case 8:
x=characters[i].posX-dia_pixmove
y=characters[i].posY-dia_pixmove
if (x>-1) characters[i].posX=x
if (y>-1) characters[i].posY=y
break;
}
characters[i].elem.style.left=characters[i].posX+"px"
characters[i].elem.style.top=characters[i].posY+"px"
}
setTimeout(character_movement,character_movement_speed)
}
function get_character_state() {
if (key_order[0]==0) character_state=1
else if (!key_shift && key_order[0]>0) character_state=2
else if (key_shift && key_order[0]>0) character_state=3
}
function get_row_num() {
for (var i=0;i<characters.length;i++) {
if (!characters[i].dirs[direction-1]) {
if (direction==2 && key_order[1]==1) row_num[i]=0
else if (direction==2 && key_order[1]==2) row_num[i]=2
else if (direction==4 && key_order[1]==2) row_num[i]=2
else if (direction==4 && key_order[1]==3) row_num[i]=4
else if (direction==6 && key_order[1]==3) row_num[i]=4
else if (direction==6 && key_order[1]==4) row_num[i]=6
else if (direction==8 && key_order[1]==4) row_num[i]=6
else if (direction==8 && key_order[1]==1) row_num[i]=0
}
else row_num[i]=direction-1
}
}
function get_col_length() {
get_character_state()
get_row_num()
for (var i=0;i<characters.length;i++) {
col_length[i]=characters[i].dirs[row_num[i]][character_state].length-1
}
}
function find_direction() {
if (key_order[0]==1 && key_order[1]!=2 && key_order[1]!=4) direction=1
else if ((key_order[0]==1 && key_order[1]==2) || (key_order[0]==2 && key_order[1]==1)) direction=2
else if (key_order[0]==2 && key_order[1]!=1 && key_order[1]!=3) direction=3
else if ((key_order[0]==2 && key_order[1]==3) || (key_order[0]==3 && key_order[1]==2)) direction=4
else if (key_order[0]==3 && key_order[1]!=2 && key_order[1]!=4) direction=5
else if ((key_order[0]==3 && key_order[1]==4) || (key_order[0]==4 && key_order[1]==3)) direction=6
else if (key_order[0]==4 && key_order[1]!=3 && key_order[1]!=1) direction=7
else if ((key_order[0]==4 && key_order[1]==1) || (key_order[0]==1 && key_order[1]==4)) direction=8
else direction=0
}
function keydown(e) {
var keycode=getkeycode(e)
if (keycode==38 && !key_up) {
key_up=true
key_order.splice(0,0,1)
key_order.splice(3,1)
}
else if (keycode==39 && !key_right) {
key_right=true
key_order.splice(0,0,2)
key_order.splice(3,1)
}
else if (keycode==40 && !key_down) {
key_down=true
key_order.splice(0,0,3)
key_order.splice(3,1)
}
else if (keycode==37 && !key_left) {
key_left=true
key_order.splice(0,0,4)
key_order.splice(3,1)
}
else if (keycode==16) key_shift=true
else if (keycode==17) key_control=true
if (keycode==38 || keycode==39 || keycode==40 || keycode==37) find_direction()
if (keycode==38 || keycode==39 || keycode==40 || keycode==37 || keycode==16) get_col_length()
}
function keyup(e) {
var keycode=getkeycode(e)
if (keycode==38 && key_up) {
key_up=false
for (var i=0;i<4;i++) {
if (key_order[i]==1) key_order.splice(i,1)
}
key_order.splice(3,0,0)
}
else if (keycode==39 && key_right) {
key_right=false
for (var i=0;i<4;i++) {
if (key_order[i]==2) key_order.splice(i,1)
}
key_order.splice(3,0,0)
}
else if (keycode==40 && key_down) {
key_down=false
for (var i=0;i<4;i++) {
if (key_order[i]==3) key_order.splice(i,1)
}
key_order.splice(3,0,0)
}
else if (keycode==37 && key_left) {
key_left=false
for (var i=0;i<4;i++) {
if (key_order[i]==4) key_order.splice(i,1)
}
key_order.splice(3,0,0)
}
else if (keycode==16) key_shift=false
else if (keycode==17) key_control=false
if (key_order[0]>0 && (keycode==38 || keycode==39 || keycode==40 || keycode==37)) find_direction()
if (keycode==38 || keycode==39 || keycode==40 || keycode==37 || keycode==16) get_col_length()
}
function link(scr) {
current_screen=scr
}
function give_life(cha) {
col_num[characters.length]=0
characters[characters.length]=cha
get_col_length()
}
function take_life(cha) {
for (var i=0;i<characters.length;i++) {
if (characters[i]==cha) characters.splice(i,1)
}
}

View File

@@ -0,0 +1,26 @@
* {
margin:0;
padding:0;
}
body {
font:normal 11px arial;
}
#gamebox {
position:absolute;
top:50%;
left:50%;
}
#characters {
position:absolute;
top:0;
left:0;
}
#characters div {
position:absolute;
top:0;
left:0;
}

View File

@@ -0,0 +1,12 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3c.org/1999/xhtml">
<head>
<title>Eon Aton</title>
<link href='general.css' type='text/css' rel='stylesheet' />
<script type='text/javascript' src='functions.js'></script>
<script type='text/javascript' src='classes.js'></script>
<script type='text/javascript' src='load.js'></script>
</head>
<body>
</body>
</html>

View File

@@ -0,0 +1,175 @@
<?xml version="1.0" encoding="utf-8" ?>
<information>
<defaults>
<actions>
<action id="showdescription">
document.title+="..."
</action>
</actions>
<objects>
<object id="box1">
<name>A box</name>
<description>It is nothing but a.. box.</description>
<image>
<dimensions>
<width>60</width>
<height>50</height>
</dimensions>
<address>objs/box1.png</address>
</image>
<position>
<x>100</x>
<y>70</y>
</position>
<actions>
<action rel="showdescription"></action>
</actions>
</object>
</objects>
<characters>
<character>
<name>Simple arrows</name>
<description>Simple arrows explaining how character movement works.</description>
<image>
<dimensions>
<width>64</width>
<height>48</height>
</dimensions>
<address>char/simplearrows.png</address>
</image>
<movement>
<speed>10</speed>
<directions>
<topcenter>
<row>1</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</topcenter>
<topright>
<row>2</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</topright>
<middleright>
<row>3</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</middleright>
<bottomright>
<row>4</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</bottomright>
<bottomcenter>
<row>5</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</bottomcenter>
<bottomleft>
<row>6</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</bottomleft>
<middleleft>
<row>7</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</middleleft>
<topleft>
<row>8</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</topleft>
</directions>
</movement>
</character>
</characters>
<maps>
<map>
<name>The Sun</name>
<description>The great star</description>
<image>
<dimensions>
<width>640</width>
<height>400</height>
<viswidth>640</viswidth>
<visheight>400</visheight>
</dimensions>
<address>maps/sun.png</address>
</image>
<objects>
<object rel="box1"></object>
</objects>
</map>
</maps>
</defaults>
<actions>
<action state="default"></action>
<action id="msg2">
alert("Hmm...")
</action>
</actions>
<objects>
<object state="default"></object>
<object id="box2">
<name>A small box</name>
<description>Aha! A small box!</description>
<image>
<dimensions>
<width>30</width>
<height>25</height>
</dimensions>
<address>objs/box2.png</address>
</image>
<position>
<x>200</x>
<y>100</y>
</position>
<actions>
<action rel="msg2"></action>
</actions>
</object>
</objects>
<characters>
<character state="default"></character>
<character>
<name>Wiz the Wizard</name>
<description>A poorly drawn wizard, fighting against all evil.</description>
<image>
<address>char/wizard.png</address>
</image>
</character>
</characters>
<maps>
<map state="default"></map>
<map>
<name>The valley of Sunshine</name>
<description>Beams of light break through the sky.</description>
<image>
<address>maps/sunshine.png</address>
</image>
</map>
</maps>
</information>

View File

@@ -0,0 +1,56 @@
window.onload=function(){
START_systems()
scr=new screen()
scr.name="The Sun"
scr.description="The great star"
scr.background="maps/sun.png"
scr.bbackground="#000"
scr.width=640
scr.height=400
scr.viswidth=scr.width
scr.visheight=scr.height
create(scr)
cha=new character()
cha.name="Wiz the Wizard"
cha.description="A poorly drawn wizard, fighting against all evil."
cha.src="char/wizard.png"
cha.width=48
cha.height=64
cha.posX=285
cha.posY=140
cha.dir(0,0,[0,1],[2,3,4,5],[6,7,8,9])
cha.dir(1,1,[0,1],[2,3,4,5],[6,7,8,9])
cha.dir(2,2,[0,1],[2,3,4,5],[6,7,8,9])
cha.dir(3,3,[0,1],[2,3,4,5],[6,7,8,9])
cha.dir(4,4,[0,1],[2,3,4,5],[6,7,8,9])
cha.dir(5,5,[0,1],[2,3,4,5],[6,7,8,9])
cha.dir(6,6,[0,1],[2,3,4,5],[6,7,8,9])
cha.dir(7,7,[0,1],[2,3,4,5],[6,7,8,9])
cha.create()
scr.add(cha)
chab=new character()
chab.name="test"
chab.description="test"
chab.src="char/simplearrows.png"
chab.width=48
chab.height=64
chab.posX=50
chab.posY=160
chab.dir(0,0,[0,1],[2,3,4,5],[6,7,8,9])
chab.dir(1,1,[0,1],[2,3,4,5],[6,7,8,9])
chab.dir(2,2,[0,1],[2,3,4,5],[6,7,8,9])
chab.dir(3,3,[0,1],[2,3,4,5],[6,7,8,9])
chab.dir(4,4,[0,1],[2,3,4,5],[6,7,8,9])
chab.dir(5,5,[0,1],[2,3,4,5],[6,7,8,9])
chab.dir(6,6,[0,1],[2,3,4,5],[6,7,8,9])
chab.dir(7,7,[0,1],[2,3,4,5],[6,7,8,9])
chab.create()
scr.add(chab)
}

View File

@@ -0,0 +1,71 @@
// Screen
function screen() {
var type, name, description, background, bbackground, width, height, viswidth, visheight, viselem, elem
this.type="screen"
}
screen.prototype.create=function() {
document.body.style.background=style_bg_img(this.bbackground)
this.viselem=document.createElement("div")
this.viselem.id="visgamebox"
if (this.viswidth>this.width) this.viswidth=this.width
if (this.visheight>this.height) this.visheight=this.height
this.viselem.style.width=(this.viswidth)+"px"
this.viselem.style.height=(this.visheight)+"px"
this.viselem.style.marginLeft=(-this.viswidth/2)+"px"
this.viselem.style.marginTop=(-this.visheight/2)+"px"
this.elem=document.createElement("div")
this.elem.style.background=style_bg_img(this.background)
this.elem.id="gamebox"
this.elem.style.width=(this.width)+"px"
this.elem.style.height=(this.height)+"px"
this.viselem.appendChild(this.elem)
document.body.appendChild(this.viselem)
characters_container=document.createElement("div")
characters_container.id="characters"
this.elem.appendChild(characters_container)
}
screen.prototype.add=function(obj) {
eval(obj.type+"s_container").appendChild(obj.elem)
if (obj.type=="character") give_life(obj)
}
screen.prototype.remove=function() {
document.body.style.background=""
document.body.removeChild(this.elem)
}
// Character
function character() {
var type, visible, name, description, src, width, height, dirs, elem, posX, posY
this.type="character"
this.visible=false
this.dirs=new Array(8)
this.posX=0
this.posY=0
}
character.prototype.dir=function(dir,row,stand,walk,run) {
this.dirs[dir]=new Array()
this.dirs[dir][0]=row
this.dirs[dir][1]=stand
this.dirs[dir][2]=walk
this.dirs[dir][3]=run
}
character.prototype.create=function() {
this.elem=document.createElement("div")
this.elem=document.createElement("div")
this.elem.style.background="url("+this.src+")"
this.elem.style.width=(this.width)+"px"
this.elem.style.height=(this.height)+"px"
}
character.prototype.remove=function() {
characters_container.removeChild(this.elem)
}

View File

@@ -0,0 +1,337 @@
function style_bg_img(background) {
var cssurl
if (background.indexOf(".")!=-1) cssurl=["url(",")"]
else cssurl=["",""]
return cssurl[0]+background+cssurl[1]
}
function remove(obj) {
if (obj.type="character") take_life(obj)
obj.remove()
delete obj
}
function getkeycode(e) {
var keycode
if (window.event) keycode=window.event.keyCode
else if (e) keycode=e.which
else keycode=0
return keycode
}
function START_systems() {
key_up=false
key_right=false
key_down=false
key_left=false
key_shift=false
key_control=false
key_order=new Array()
for (var i=0;i<4;i++) {
key_order[i]=0
}
direction=7
character_state=1
document.onkeydown=keydown
document.onkeyup=keyup
row_num=new Array()
col_num=new Array()
col_length=new Array()
maxwidth=0
maxheight=0
define_pixel_movement(5,10)
define_character_distance(-5)
direction_changing_speed=3
frame_showing_speed=150
movement_speed=50
frame_showing()
movement()
}
function define_pixel_movement(walk,run) {
pixel_movement=[0,walk,run]
diagonal_pixel_movement=[0,Math.sqrt(walk*walk/2),Math.sqrt(run*run/2)]
}
function define_character_distance(dist) {
character_distance=dist
diagonal_character_distance=Math.sqrt(dist*dist*2)
if (dist<0) diagonal_character_distance=-diagonal_character_distance
}
function show_frame(cha_num,row,col) {
characters[cha_num].elem.style.backgroundPosition="-"+(col*(characters[cha_num].width+1)+1)+"px -"+(characters[cha_num].dirs[row][0]*(characters[cha_num].height+1)+1)+"px"
}
function frame_showing() {
for (var i=0;i<characters.length;i++) {
if (col_num[i]<col_length[i]) col_num[i]++
else col_num[i]=0
if (characters[i].visible) show_frame(i,row_num[0],characters[i].dirs[row_num[i]][character_state][col_num[i]])
}
setTimeout(frame_showing,frame_showing_speed)
}
function movement() {
var pixmove=pixel_movement[character_state-1]
var dia_pixmove=diagonal_pixel_movement[character_state-1]
var li, x, y, s_x, s_y, cy
for (var i=0;i<characters.length;i++) {
if (characters[i].visible) {
switch(direction) {
case 1:
if (i==0) {
x=characters[i].posX
y=characters[i].posY-pixmove
}
else {
x=characters[i].posX+(characters[li].posX-characters[i].posX)/direction_changing_speed
y=characters[i].posY+(characters[li].posY-characters[i].posY+character_distance+characters[li].height)/direction_changing_speed
}
break;
case 2:
if (i==0) {
x=characters[i].posX+dia_pixmove
y=characters[i].posY-dia_pixmove
}
else {
x=characters[i].posX+(characters[li].posX-characters[i].posX-diagonal_character_distance-characters[i].width)/direction_changing_speed
y=characters[i].posY+(characters[li].posY-characters[i].posY+diagonal_character_distance+characters[li].height)/direction_changing_speed
}
break;
case 3:
if (i==0) {
x=characters[i].posX+pixmove
y=characters[i].posY
}
else {
x=characters[i].posX+(characters[li].posX-characters[i].posX-character_distance-characters[i].width)/direction_changing_speed
y=characters[i].posY+(characters[li].posY-characters[i].posY)/direction_changing_speed
}
break;
case 4:
if (i==0) {
x=characters[i].posX+dia_pixmove
y=characters[i].posY+dia_pixmove
}
else {
x=characters[i].posX+(characters[li].posX-characters[i].posX-diagonal_character_distance-characters[i].width)/direction_changing_speed
y=characters[i].posY+(characters[li].posY-characters[i].posY-diagonal_character_distance-characters[i].height)/direction_changing_speed
}
break;
case 5:
if (i==0) {
x=characters[i].posX
y=characters[i].posY+pixmove
}
else {
x=characters[i].posX+(characters[li].posX-characters[i].posX)/direction_changing_speed
y=characters[i].posY+(characters[li].posY-characters[i].posY-character_distance-characters[i].height)/direction_changing_speed
}
break;
case 6:
if (i==0) {
x=characters[i].posX-dia_pixmove
y=characters[i].posY+dia_pixmove
}
else {
x=characters[i].posX+(characters[li].posX-characters[i].posX+diagonal_character_distance+characters[li].width)/direction_changing_speed
y=characters[i].posY+(characters[li].posY-characters[i].posY-diagonal_character_distance-characters[i].height)/direction_changing_speed
}
break;
case 7:
if (i==0) {
x=characters[i].posX-pixmove
y=characters[i].posY
}
else {
x=characters[i].posX+(characters[li].posX-characters[i].posX+character_distance+characters[li].width)/direction_changing_speed
y=characters[i].posY+(characters[li].posY-characters[i].posY)/direction_changing_speed
}
break;
case 8:
if (i==0) {
x=characters[i].posX-dia_pixmove
y=characters[i].posY-dia_pixmove
}
else {
x=characters[i].posX+(characters[li].posX-characters[i].posX+diagonal_character_distance+characters[li].width)/direction_changing_speed
y=characters[i].posY+(characters[li].posY-characters[i].posY+diagonal_character_distance+characters[li].height)/direction_changing_speed
}
break;
}
if (x>-1 && x<current_screen.width-characters[i].width+1) characters[i].posX=x
if (y>-1 && y<current_screen.height-characters[i].height+1) characters[i].posY=y
if (direction==1 || direction==5) s_x=(maxwidth-characters[i].width)/2
else s_x=0
if (direction==3 || direction==7) s_y=maxheight-characters[i].height
else s_y=0
characters[i].elem.style.left=characters[i].posX+s_x+"px"
characters[i].elem.style.top=characters[i].posY+s_y+"px"
cy=characters.length+1
for (ii=0;ii<characters.length;ii++) {
if (characters[ii].posY>characters[i].posY) cy--
}
characters[i].elem.style.zIndex=cy
li=i
}
if (characters.length>0) {
if (characters[0].posX>(current_screen.viswidth-characters[0].width)/2 && characters[0].posX<current_screen.width-(current_screen.viswidth+characters[0].width)/2) current_screen.elem.style.left=-(characters[0].posX-(current_screen.viswidth-characters[0].width)/2)+"px"
if (characters[0].posY>(current_screen.visheight-characters[0].height)/2 && characters[0].posY<current_screen.height-(current_screen.visheight+characters[0].height)/2) current_screen.elem.style.top=-(characters[0].posY-(current_screen.visheight-characters[0].height)/2)+"px"
}
}
setTimeout(movement,movement_speed)
}
function get_character_state() {
if (key_order[0]==0) character_state=1
else if (!key_shift && key_order[0]>0) character_state=2
else if (key_shift && key_order[0]>0) character_state=3
}
function get_row_num() {
for (var i=0;i<characters.length;i++) {
if (!characters[i].dirs[direction-1]) {
if (direction==2 && key_order[1]==1) row_num[i]=0
else if (direction==2 && key_order[1]==2) row_num[i]=2
else if (direction==4 && key_order[1]==2) row_num[i]=2
else if (direction==4 && key_order[1]==3) row_num[i]=4
else if (direction==6 && key_order[1]==3) row_num[i]=4
else if (direction==6 && key_order[1]==4) row_num[i]=6
else if (direction==8 && key_order[1]==4) row_num[i]=6
else if (direction==8 && key_order[1]==1) row_num[i]=0
}
else row_num[i]=direction-1
}
}
function get_col_length() {
get_character_state()
get_row_num()
for (var i=0;i<characters.length;i++) {
col_length[i]=characters[i].dirs[row_num[i]][character_state].length-1
}
}
function get_maxs() {
maxwidth=0
maxheight=0
for (var i=0;i<characters.length;i++) {
if (characters[i].width>maxwidth) maxwidth=characters[i].width
if (characters[i].height>maxheight) maxheight=characters[i].height
}
}
function find_direction() {
if (key_order[0]==1 && key_order[1]!=2 && key_order[1]!=4) direction=1
else if ((key_order[0]==1 && key_order[1]==2) || (key_order[0]==2 && key_order[1]==1)) direction=2
else if (key_order[0]==2 && key_order[1]!=1 && key_order[1]!=3) direction=3
else if ((key_order[0]==2 && key_order[1]==3) || (key_order[0]==3 && key_order[1]==2)) direction=4
else if (key_order[0]==3 && key_order[1]!=2 && key_order[1]!=4) direction=5
else if ((key_order[0]==3 && key_order[1]==4) || (key_order[0]==4 && key_order[1]==3)) direction=6
else if (key_order[0]==4 && key_order[1]!=3 && key_order[1]!=1) direction=7
else if ((key_order[0]==4 && key_order[1]==1) || (key_order[0]==1 && key_order[1]==4)) direction=8
else direction=0
}
function keydown(e) {
var keycode=getkeycode(e)
if (keycode==38 && !key_up) {
key_up=true
key_order.splice(0,0,1)
key_order.splice(3,1)
}
else if (keycode==39 && !key_right) {
key_right=true
key_order.splice(0,0,2)
key_order.splice(3,1)
}
else if (keycode==40 && !key_down) {
key_down=true
key_order.splice(0,0,3)
key_order.splice(3,1)
}
else if (keycode==37 && !key_left) {
key_left=true
key_order.splice(0,0,4)
key_order.splice(3,1)
}
else if (keycode==16) key_shift=true
else if (keycode==17) key_control=true
if (keycode==38 || keycode==39 || keycode==40 || keycode==37) find_direction()
if (keycode==38 || keycode==39 || keycode==40 || keycode==37 || keycode==16) get_col_length()
}
function keyup(e) {
var keycode=getkeycode(e)
if (keycode==38 && key_up) {
key_up=false
for (var i=0;i<4;i++) {
if (key_order[i]==1) key_order.splice(i,1)
}
key_order.splice(3,0,0)
}
else if (keycode==39 && key_right) {
key_right=false
for (var i=0;i<4;i++) {
if (key_order[i]==2) key_order.splice(i,1)
}
key_order.splice(3,0,0)
}
else if (keycode==40 && key_down) {
key_down=false
for (var i=0;i<4;i++) {
if (key_order[i]==3) key_order.splice(i,1)
}
key_order.splice(3,0,0)
}
else if (keycode==37 && key_left) {
key_left=false
for (var i=0;i<4;i++) {
if (key_order[i]==4) key_order.splice(i,1)
}
key_order.splice(3,0,0)
}
else if (keycode==16) key_shift=false
else if (keycode==17) key_control=false
if (key_order[0]>0 && (keycode==38 || keycode==39 || keycode==40 || keycode==37)) find_direction()
if (keycode==38 || keycode==39 || keycode==40 || keycode==37 || keycode==16) get_col_length()
}
function exchange_characters(a,b) {
var temp=characters[a]
characters[a]=characters[b]
characters[b]=temp
}
function give_life(cha) {
col_num[characters.length]=0
cha.visible=true
cha.elem.style.display="block"
get_col_length()
get_maxs()
}
function take_life(cha) {
cha.visible=false
cha.elem.style.display="none"
get_maxs()
}

View File

@@ -0,0 +1,34 @@
* {
margin:0;
padding:0;
}
body {
font:normal 11px arial;
}
#visgamebox {
position:absolute;
top:50%;
left:50%;
overflow:hidden;
}
#gamebox {
position:absolute;
top:0;
left:0;
}
#characters {
position:absolute;
top:0;
left:0;
}
#characters div {
position:absolute;
top:0;
left:0;
display:none;
}

View File

@@ -0,0 +1,11 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3c.org/1999/xhtml">
<head>
<title>Eon Aton</title>
<link href='general.css' type='text/css' rel='stylesheet' />
<script type='text/javascript' src='functions.js'></script>
<script type='text/javascript' src='classes.js'></script>
<script type='text/javascript' src='load.js'></script>
</head>
<body></body>
</html>

View File

@@ -0,0 +1,175 @@
<?xml version="1.0" encoding="utf-8" ?>
<information>
<defaults>
<actions>
<action id="showdescription">
document.title+="..."
</action>
</actions>
<objects>
<object id="box1">
<name>A box</name>
<description>It is nothing but a.. box.</description>
<image>
<dimensions>
<width>60</width>
<height>50</height>
</dimensions>
<address>objs/box1.png</address>
</image>
<position>
<x>100</x>
<y>70</y>
</position>
<actions>
<action rel="showdescription"></action>
</actions>
</object>
</objects>
<characters>
<character>
<name>Simple arrows</name>
<description>Simple arrows explaining how character movement works.</description>
<image>
<dimensions>
<width>64</width>
<height>48</height>
</dimensions>
<address>char/simplearrows.png</address>
</image>
<movement>
<speed>10</speed>
<directions>
<topcenter>
<row>1</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</topcenter>
<topright>
<row>2</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</topright>
<middleright>
<row>3</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</middleright>
<bottomright>
<row>4</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</bottomright>
<bottomcenter>
<row>5</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</bottomcenter>
<bottomleft>
<row>6</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</bottomleft>
<middleleft>
<row>7</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</middleleft>
<topleft>
<row>8</row>
<stand>1-2</stand>
<walk>3-6</walk>
<run>7-10</run>
</topleft>
</directions>
</movement>
</character>
</characters>
<maps>
<map>
<name>The Sun</name>
<description>The great star</description>
<image>
<dimensions>
<width>640</width>
<height>400</height>
<viswidth>640</viswidth>
<visheight>400</visheight>
</dimensions>
<address>maps/sun.png</address>
</image>
<objects>
<object rel="box1"></object>
</objects>
</map>
</maps>
</defaults>
<actions>
<action state="default"></action>
<action id="msg2">
alert("Hmm...")
</action>
</actions>
<objects>
<object state="default"></object>
<object id="box2">
<name>A small box</name>
<description>Aha! A small box!</description>
<image>
<dimensions>
<width>30</width>
<height>25</height>
</dimensions>
<address>objs/box2.png</address>
</image>
<position>
<x>200</x>
<y>100</y>
</position>
<actions>
<action rel="msg2"></action>
</actions>
</object>
</objects>
<characters>
<character state="default"></character>
<character>
<name>Wiz the Wizard</name>
<description>A poorly drawn wizard, fighting against all evil.</description>
<image>
<address>char/wizard.png</address>
</image>
</character>
</characters>
<maps>
<map state="default"></map>
<map>
<name>The valley of Sunshine</name>
<description>Beams of light break through the sky.</description>
<image>
<address>maps/sunshine.png</address>
</image>
</map>
</maps>
</information>

View File

@@ -0,0 +1,80 @@
window.onload=function(){
characters=new Array()
START_systems()
current_screen=new screen()
current_screen.name="The Sun"
current_screen.description="The great star"
current_screen.background="maps/sun.png"
current_screen.bbackground="#000"
current_screen.width=640
current_screen.height=400
current_screen.viswidth=640
current_screen.visheight=400
current_screen.create()
characters[0]=new character()
characters[0].name="Wiz the Wizard"
characters[0].description="A poorly drawn wizard, fighting against all evil."
characters[0].src="char/wizard.png"
characters[0].width=48
characters[0].height=64
characters[0].posX=285
characters[0].posY=140
characters[0].dir(0,0,[0,1],[2,3,4,5],[6,7,8,9])
characters[0].dir(1,1,[0,1],[2,3,4,5],[6,7,8,9])
characters[0].dir(2,2,[0,1],[2,3,4,5],[6,7,8,9])
characters[0].dir(3,3,[0,1],[2,3,4,5],[6,7,8,9])
characters[0].dir(4,4,[0,1],[2,3,4,5],[6,7,8,9])
characters[0].dir(5,5,[0,1],[2,3,4,5],[6,7,8,9])
characters[0].dir(6,6,[0,1],[2,3,4,5],[6,7,8,9])
characters[0].dir(7,7,[0,1],[2,3,4,5],[6,7,8,9])
characters[0].create()
current_screen.add(characters[0])
characters[1]=new character()
characters[1].name="Wiz the Wizard"
characters[1].description="A poorly drawn wizard, fighting against all evil."
characters[1].src="char/simplearrows.png"
characters[1].width=48
characters[1].height=64
characters[1].posX=335
characters[1].posY=140
characters[1].dir(0,0,[0,1],[2,3,4,5],[6,7,8,9])
characters[1].dir(1,1,[0,1],[2,3,4,5],[6,7,8,9])
characters[1].dir(2,2,[0,1],[2,3,4,5],[6,7,8,9])
characters[1].dir(3,3,[0,1],[2,3,4,5],[6,7,8,9])
characters[1].dir(4,4,[0,1],[2,3,4,5],[6,7,8,9])
characters[1].dir(5,5,[0,1],[2,3,4,5],[6,7,8,9])
characters[1].dir(6,6,[0,1],[2,3,4,5],[6,7,8,9])
characters[1].dir(7,7,[0,1],[2,3,4,5],[6,7,8,9])
characters[1].create()
current_screen.add(characters[1])
characters[2]=new character()
characters[2].name="Wiz the Wizard"
characters[2].description="A poorly drawn wizard, fighting against all evil."
characters[2].src="char/wizard.png"
characters[2].width=48
characters[2].height=64
characters[2].posX=385
characters[2].posY=140
characters[2].dir(0,0,[0,1],[2,3,4,5],[6,7,8,9])
characters[2].dir(1,1,[0,1],[2,3,4,5],[6,7,8,9])
characters[2].dir(2,2,[0,1],[2,3,4,5],[6,7,8,9])
characters[2].dir(3,3,[0,1],[2,3,4,5],[6,7,8,9])
characters[2].dir(4,4,[0,1],[2,3,4,5],[6,7,8,9])
characters[2].dir(5,5,[0,1],[2,3,4,5],[6,7,8,9])
characters[2].dir(6,6,[0,1],[2,3,4,5],[6,7,8,9])
characters[2].dir(7,7,[0,1],[2,3,4,5],[6,7,8,9])
characters[2].create()
current_screen.add(characters[2])
}

View File

@@ -0,0 +1,2 @@
0. comment code
1. develop

View File

@@ -0,0 +1,64 @@
* {
font-weight:normal;
}
h1 {
font-size:50px;
}
h2 {
font-size:41px;
}
h3 {
font-size:33px;
}
h4 {
font-size:26px;
}
h5 {
font-size:20px;
}
h6 {
font-size:15px;
}
p {
font-size:12px;
}
.center {
text-align:center;
}
.left {
float:left;
margin:5px;
}
.right {
float:right;
margin:5px;
}
.inline {
display:inline;
}
#site a:link,#site a:visited {
text-decoration:none;
color:#4965ff;
display:inline;
}
#site a:hover {
color:#49bfff;
}
img {
border:1px solid #fff;
display:block;
}

View File

@@ -0,0 +1,3 @@
#footer #current {
margin-right:3px;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1009 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 953 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

View File

@@ -0,0 +1,142 @@
* {
margin:0;
padding:0;
font-size:12px;
font-family:arial,freesans,'nimbus sans l';
}
body {
background:#b5b5b5 url(img/bg.png) repeat-x fixed;
}
#wrapper {
width:700px;
margin:0 auto;
border-width:0 5px;
border-color:#ddd;
border-style:solid;
}
#header {
height:175px;
background:#ff6600 url(img/headerlogo.png) no-repeat;
position:relative;
border-bottom:1px solid #2c3f00;
}
#header a {
display:block;
position:absolute;
top:30px;
left:40px;
height:120px;
width:340px;
}
#header #headerbox {
position:absolute;
top:40px;
left:450px;
width:200px;
height:60px;
padding-top:30px;
background:url(img/quote.png) no-repeat 2px 5px;
}
#header #headerbox p {
color:#fff;
}
#header #headerbox p#who {
color:#000;
}
#content {
background:#172100 url(img/contentbg.png) repeat-y;
border-width:0 5px 5px 5px;
border-color:#ddd;
border-style:solid;
margin-left:-5px;
float:left;
}
#menu {
width:158px;
padding-bottom:50px;
float:left;
}
#menu div,#menu a {
border-bottom:1px solid #2c3f00;
background-image:url(img/menuentrybg.png);
background-repeat:repeat-y;
width:138px;
padding:2px 17px 2px 3px;
}
#menu div.cat {
background-position:0 0;
color:#ddd;
font-size:14px;
font-weight:bold;
font-family:verdana,'bitstream vera sans','dejavu sans';
}
#menu a:link,a:visited {
display:block;
text-decoration:none;
background-position:0 -50px;
color:#002f51;
}
#menu a:hover {
background-position:0 -100px;
color:#e8f5ff;
}
#menu #current {
background-position:0 -150px;
color:#eee;
}
#site {
width:532px;
padding:5px 0 5px 5px;
float:left;
color:#ddd;
}
#footer {
width:694px;
padding:2px 3px;
background:#ff6600;
color:#fff;
float:left;
text-align:center;
border-top:1px solid #2c3f00;
}
#footer div,#footer a {
display:inline;
padding:2px 5px;
}
#footer a:link,#footer a:visited {
text-decoration:none;
color:#142991;
}
#footer a:hover {
color:#050C28;
}
#footer #current {
color:#fff;
background-color:#000;
}
#space {
width:100%;
height:10px;
float:left;
}

View File

@@ -0,0 +1,74 @@
<?php
// INFO ABOUT CURRENT PAGE
$pagetype=$_GET["t"];
$pagesite=$_GET["s"];
if (!$pagetype) $pagetype=0;
if (!$pagesite) $pagesite=0;
if (!is_numeric($pagetype) || !is_numeric($pagesite)) {
$pagetype=-1;
$pagesite=-1;
}
// STUFF
$title="Error";
// CLASSES
include("classes.php");
// INFO
include("info.php");
// DOUBLE CHECKING
if ($pagetype>$type-1 || ($pagetype==0 && $pagesite>$menu->size()-1) || ($pagetype==1 && $pagesite>$footer->size()-1) || $pagetype<0 || $pagesite<0) {
$pagetype=-1;
$pagesite=-1;
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Eon Aton :: <?php echo $title; ?></title>
<link href='index.css' type='text/css' rel='stylesheet' />
<link href='general.css' type='text/css' rel='stylesheet' />
<link href='special.css' type='text/css' rel='stylesheet' />
<!--[if IE]>
<link href='iefix.css' type='text/css' rel='stylesheet' />
<![endif]-->
</head>
<body>
<div id='wrapper'>
<div id='header'>
<a href='.'></a>
<div id='headerbox'>
<?php echo $quotes_output; ?>
</div>
</div>
<div id='content'>
<div id='menu'>
<?php echo $menu_output; ?>
</div>
<div id='site'>
<?php include($pagetype."_".$pagesite.".php"); ?>
</div>
<div id='footer'>
<?php echo $footer_output; ?>
<a href='../'>nqpz</a>
</div>
</div>
</div>
<div id='space'></div>
</body>
</html>

View File

@@ -0,0 +1,45 @@
<?php
// QUOTES
$quotes=new quotearray();
$quotes->add("Eon Aton is the best game I've played in ages!","Yooichi Wada, president of Square Enix");
$quotes->add("Eon Aton is the best story I've ever read!","The ghost of H. G. Wells, author of \"The Time Machine\"");
$quotes->add("I used to be bored. Now I'm not!","Anonymous");
$quotes->add("Th15 5h17 r0xx0rz!","1337 p3r50n");
$quotes->add("Eon Aton's JavaScript code rules!","Brendan Eich, creator of the JavaScript programming language");
// MENU
$menu=new linksarray();
$menu->add("Home");
//HEADER\\
$menu->cat("The game");
$menu->add("Play the game");
$menu->add("Instructions");
$menu->add("Screenshots");
$menu->add("Technical info");
//HEADER\\
$menu->cat("The story");
$menu->add("Read the story");
$menu->add("About the story");
//HEADER\\
$menu->cat("Other");
$menu->add("The creator");
$menu->add("Images");
$menu->add("Contact");
// FOOTER
$footer=new linksarray();
$footer->add("Terms of Use");
$footer->add("Privacy Policy");
$footer->add("Copyright");
$footer->add("Time machines");
$footer->add("Lizards");
$footer->add("May the source be with you");
// OUTPUT
$quotes_output=$quotes->random();
$menu_output=$menu->generate();
$footer_output=$footer->generate("- ");
?>

View File

@@ -0,0 +1,50 @@
a#play:link,a#play:visited {
display:block;
width:300px;
margin:0 auto;
border:2px solid #fff;
background:#00e516;
color:#222;
font-size:30px;
font-family:verdana,'bitstream vera sans','dejavu sans';
text-align:center;
padding:10px 0;
margin-top:50px;
}
a#play:hover {
background:#00990c;
color:#ddd;
}
.imglinks div {
display:inline;
background:#ff6666;
padding:3px 5px 1px 5px;
border-width:1px 1px 0 1px;
border-style:solid;
border-color:#fff;
position:relative;
left:10px;
z-index:2;
color:#000;
}
.imglinks a img {
display:inline;
border-width:1px;
border-style:solid;
border-color:#fff;
}
.imglinks p {
margin-bottom:25px;
}
#use {
width:500px;
background:#fff;
border:1px solid #999;
color:#000;
padding:5px;
}

View File

@@ -0,0 +1,3 @@
Eon Aton (the story) is released under the
Creative Commons Attribution-ShareAlike 3.0 license.
Author: Niels Serup

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,138 @@
Eon Aton
By Niels Serup
"Sidus! Sidus!" Mirie yelled. Sidus had been asleep for almost a day, but he still wanted to sleep more. Mirie, on the other hand, had got up right after hearing what had happened to their city. After a lot of yelling and shouting on Mirie's part, Sidus finally woke up, and Mirie was now able to tell him the terrible truth: Their city was gone.
It had now been two days since the unbearable truth was revealed to Mirie and Sidus. They were the only people who on that fateful night were outside the city, and now they wanted to find out what excactly had happened. Sidus and Mirie had been living in the city of Aton for all their 16-year old life, and they had never been away for more than 3 days at a time and not more than 50 miles away. Aton had it all: Shops, activities, schools, just everything a normal middle-sized city would have. But now there was nothing. There were no marks after explosions, and there was not any debris either. It was like the city had been conjured away, but both Mirie and Sidus knew that was not the case. About a day ago they had seen a terrifying light in the sky that did not look like something natural. They thought it to be odd that they were the only two who had noticed it, and they still did not understand it. "It has to have something to do with the disapperance of the city. It has to," Sidus told Mirie, "why else would we've been the only ones who could see the light AND be the only ones to not disappear? It HAS to have something to do with each other." Mirie agreed, and together they decided to find the city. But to do that, they first had to find out whether their city was the only city that had disappeared, or if all cities in all of Orb, their country, were victims. "We'll have to get some proviant," Mirie exclaimed, "and some warm clothes. It's going to be cold outside in the night." Their first travel had begun.
Having decided to head north, Sidus now understood what Mirie meant with "cold". However, it was not cold, it was freezing. There were no living animals, nor any plants. Everything was frozen. The temperature did not vary at all. At night it was far below 0 degrees, and it was the same at daytime. Sidus and Mirie barely managed to breathe. They walked for a week, only seeing ice wherever they looked, before finally reaching a small city. Sidus and Mirie instantly fainted in front of an old house. The inhibitants heard them faint and dragged them inside. The life savers put the two wanderers in bed, trying to get some warmth into them. Mirie and Sidus were in a very bad condition.
Mirie finally awoke. "Where am I?" she said out loud, looking around. She couldn't spot Sidus. Suddenly a female voice appeared behind her. "How are you?" it said. Mirie looked at the person but was confused and did not answer instantly. Thoughts kept circling her mind. "Where is Sidus? Where is this? Who is this person?" At last she made a reply. "I'm fine," she said, but it was more of a standard response than anything.
"No, really, how are you?" the voice reanswered.
"Well.. Who are you? And.. And.. WHERE IS SIDUS?!?" Mirie yelled all of a sudden.
"I'm Asitera. My husband, Maes, is treating your friend in the next room. He -" the person told Mirie, with Mirie interrupting her in the end, shouting: "SIDUS? How is he? Is he alright? Does he have any wounds? Did he -"
"Calm down," Asitera said, "He's fine. It's just that he had a few wounds. Nothing serious, really. Both of you were really lucky. Where were you headed?" Mirie ignored the question and hurried into the next room. Sidus was lying in a bed, wrapped in a couple of bandages. Mirie didn't think he looked too bad and started to relax. "I'm not really a doctor, but he should be alright," Maes told her, "just a few scratches here and there. It's actually a bit weird you were completely unhurt." Mirie looked at herself and did not see any wounds. She wondered about it for a moment but let it go. She walked back to the other room, thanked Asitera and went to sleep again.
Three days had passed. Sidus had now completely recovered from his wounds, and both him and Mirie began to refocus on their plan about finding cities. This small outskirt did not qualify as a city in Sidus and Mirie's eyes. They told Asitera and Maes about what had happened and what their plan was, and to their surprise both Asitera and Maes knew about the disappearance of cities. "We don't know about who is behind all of this," Maes started, "but we're aware that every city with more than 100 citizens is gone." Mirie was confused. "Why do you two know that?" she asked. Sidus was also a bit confused, but he had an idea: "The citizens of this small town probably used to live in the different cities, and they all ended up here. Is this correct, Maes?" Maes nodded, saying: "20 persons inhabit this village. They come from 15 different cities. They all say their city was suddenly gone, and that they were the only ones who didn't disappear. They all somehow ended up here. We were actually a bit surprised when we got here. It would've been natural if it was a ruin, but when we got here, it looked as if it had been restored recently. Everything was fixed. We thought about it-"
Asitera broke in, setting a stop to the random chitchat. "I suppose your situation is the same, right?" she asked Sidus and Mirie. They both nodded.
"Now the only thing left is to find out who or what did all this. Let's try to find some leads," Sidus suggested with a determined mind. Maes and Asitera began to gather the people of the village and told them about the plan. They all agreed on trying to find clues, and after distributing some proviant and something equivalent to walkie talkies, they began looking in different directions. No one knew what to look for, but they all knew that the future of the world very much depended on them. Destiny lay in their hands.
"Shit."
Sidus eyes had suddenly become focused on a giant creature about a mile away moving very fast towards him and Mirie. Mirie noticed it too, but when she did, it was only half a mile away. Soon after, it had fully catched up with the two. Mirie and Sidus felt like they had been stunned. A giant sandworm, about 100 feet wide and several 100 feet long, had appeared before them. Mirie thought it had an odd, eerie glow that would make it visible even in total darkness. Sidus noticed that the giant sandworm seemed to be launching an attack, and he quickly regained his senses. However, both him and Mirie were useless. The sandworm was larger than them, faster than them, and they did not have any weapons at all. Seconds later the giant sandworm swallowed them. They were doomed.
The walkie talkie beeped again and again. Finally Sidus heard it, and he got up, noticing that he was still somehow alive. Then he thought of Mirie. He called after her, but no one answered. "She must be near me," Sidus thought, and he began looking. However, it was completely dark. He could not even see his own feet. Despite of that, Sidus tried walking forward, hoping to find a torch or something similar. Not long time went before he tripped and fell, and apparently someome heard that, as a couple of lamps above Sidus were suddenly turned on. Then he found out. He was trapped inside a large cage, and Mirie was nowhere to be seen. He grabbed the walkie talkie and tried to communicate with the other groups. No signal. Apparently all it could do was beep. "Probably the batteries," Sidus thought, putting it in his pocket. Then he started to look around. He was amazed to see the size of the room his cage was in. His cage was the same. It was probably ten times the size of what it needed to be to keep him trapped. The cage he was in had large steel bars keeping him from escaping. The floor, walls and roof were all in a dark brown color, and there were many doors but no windows. Judging by the inventory, Sidus had the idea that he was in some kind of laboratory. However, he did not get more time to observe. A short, dark-haired man entered through one of the many doors. He walked slowly towards Sidus, taking heavy but short steps. When the man was only a couple of inches in front of the cage, he looked at Sidus and started talking. Sidus was scared.
"You are the one." the short man told sidus. Sidus was surprised and gathered enough courage to answer. "What do you mean?" Sidus replied.
"You are the one."
"But why? How? And where's Mirie?"
"Mirie is safe. The point is, several thousands years ago, you was chosen to become the leader of the group called Radical Believers. We consist of thousands of people trying to save the world from misery. And you will be our leader."
"But WHY? I'm just Sidus, an ordinary boy from the city of Aton! What could I help with at all? I don't get it!"
The short man sighed and turned around. Then he told Sidus in a quiet voice: "Your father."
Sidus' father had died when Sidus was only 3 years old. Sidus had very few memories of him and did not want to think too much about him. He did not, to this day, even know anything about his father's background. He had never asked his mother about it. And now this dwarf-like person mentioned him! Sidus suddenly felt like he desperately needed an answer. Before he could say anything, though, the short man started talking again: "I'm Ibaxo. Your father was our former leader, but unfortunately he passed away 13 years ago. If I remember correctly, his name was.. Liwe?" Sidus nodded. Ibaxo continued: "For 15 years he led our group to great victories over evil. But then he was defeated. And now -"
"Who defeated my father?" Sidus yelled all of a sudden, interrupting Ibaxo's explanation. He had almost completely forgotten about Mirie. He just wanted to know who defeated his father -- badly. Ibaxo did not seem surprised, and Sidus thought Ibaxo might have foreseen this. A few seconds of silence went by, and Ibaxo continued as if nothing had happened: "- and now you will be our new leader. This is no easy feat. You must control thousands of people in their effort to save the world. And of course... You must be able to use the CHRONO CHANGER." Sidus looked troubled. He knew that "chronos" meant "time" in Latin, and he soon realized that "time changer" might mean what he would call a time machine. "Is this thing we're talking about a time machine?" Sidus asked Ibaxo, trying to speak calmly. Ibaxo took a deep breath before quietly nodding. "It's difficult to use. But it's powerful and very useful in some situations. But beware! It might.. backfire." Ibaxo told Sidus.
Sidus felt he was prepared, though he did not completely understand the last part. But he knew he would someday. Sidus was given the Chrono Changer, and he was surprised to see that it was in fact a fairly small machine.
Sidus had been reunited with Mirie, and they had been freed on a location near the small town. They were now able to communicate via the walkie talkie. All teams were fine and heading back to the town. Sidus told them that he and Mirie were also heading back, keeping the secret about the Chrono Changer to himself. Back in the town, though, he decided to tell the citizens about his newly aquired time machine. He felt he had to tell them as a "thank you" for helping him. Also, he did not know how to use it, and he hoped one of the citizens could help him.
"So that's how it is, right?" one of the citizens said. It was a dark-haired, tall male, probably about 90 years old. Sidus had just told him and the others about the Chrono Changer, and how he forgot to ask Ibaxo how to use it. They were sitting around a small fire, and the old man was the only one who seemed to know something.
"I thought it was just a legend," the old man continued, "but apparently it's not. This must be fate. You see, years ago my grandmother told me about 'a machinery that will alter human history'. I thought it sounded funny, but one day I met this young man - he might've been your greatgrandfather or something - who told me about it in details. I still didn't really believe it, and I quickly forgot about it. But it seems it's true. If I remember correctly, one of the things he told me was how to use this little piece of machinery. Now, what did he say? Oh, yes, you just think of the date you want to travel to and put a bit of your blood and the blood of a person close to you into this container to confirm that you are in fact you and that you will not use the machine for evil purposes. Anyone who touches the Chrono Changer when it's starting will travel in time together with the owner."
Sidus and Mirie were thrilled and tried it without thought. Sidus thought of two weeks ago and put a little drop of his blood into a container in the machine. Mirie subsequently put a drop of her blood into the container, making the Chrono Changer emit a multi-colored beam. Mirie was surprised and let go of the machine. Sidus still had it in his hands when a great, blue light appeared.
He was gone.
Sidus was standing in the middle of the desert. He was surrounded by a circle of small houses. It looked like the houses had been left a long time ago. Sidus immediately recognized the place as the small town that he had been in just a couple of seconds ago, though this time it looked more like ruins than anything else. "Is this.. two weeks ago?" Sidus thought. He walked into Asitera and Maes' house, but no one was there. And on the contrary to when Sidus last visited their house, this time it was full of dust and webs. It was then that he understood how true the Chrono Changer was. Sidus had no intentions of staying in the time frame two weeks ago, and so he desperately tried to get back to the future. All of his attempts were futile. He did not have the blood of a person close to him. He sat down, looked into the sky and thought of his possibilities. He soon realized that there was no way he would be able to return to in two week's time. It was then he remembered what Maes had told them about how the village did not look like ruins when they had arrived. "Maybe.." Sidus thought, "maybe, I was the one who restored the buildings!" He did not completely understand the situation, but nonetheless, he slowly began restoring the houses. A week passed, and he noticed a couple of people in the distance. He quickly hid behind one of the houses. After a short amount of time, he heard two familiar voices.
"We should stay here, Maes"
"Yep, Asitera. But I wonder why it looks this well. It doesn't seem like anyone would want to live out here. Odd."
Sidus knew he had to hide until the Sidus from the future had gone to the past. He simply did not want to cause a paradox.
During the two weeks of hiding, occasionally Sidus was able to get proviant. When the inhibitants of the village had wandered off to find clues, Sidus was finally able to sleep in a bed. He spent most of his time thinking about the meaning of life. Was time travelling really that great? What if humans were simply destined to be exterminated? Sidus was not sure of what to do anymore, and he fell asleep.
The great, blue light appeared once again. The oldest Sidus looked intensily at himself disappearing into the past. "Did another Sidus also look at me when I disappeared?" Sidus thought, "Did he think the same thoughts that I'm thinking in this very moment?" Sidus did not want to worry about it anymore, and he showed himself to Maes, Asitera and the rest. One of the first responses was about the Chrono Changer only being a teleporter. Soon everyone was talking about the Chrono Changer and its attributes. Sidus had to yell "STOP!" to make them quit talking. Sidus then told them everything -- his time travel, what he had done in the past two weeks, simply everything. The villagers were stunned. Some of them looked like they were not able to comprehend the situation, Sidus observed. One kept talking about not understanding a thing, while another kept coming with theories that were supposed to point out the current Sidus as a traitor. After some time, Asitera broke in.
"Take it easy," she said calmly, looking at the old man who had told Sidus how the Chrono Changer works, "Sidus is right -- he is, isn't he?"
The old man nodded. The villagers slowly walked away, still thinking about what they had witnessed. The old man turned to look at Sidus, telling him quietly: "We need to talk."
Sidus, Mirie and the old man were sitting around a table inside what seemed to be the old man's house. Mirie had insisted on joining the two, and the old man had agreed in the end. The old man had just walked into the kitchen, and Sidus took a look at the house from the inside. It was a fairly large house, though it did not seem that the old man was the only one living here. From where he was sitting he could see several beds, none of which looked unused.
The old man had just reentered. He sat down by the table.
"How are you?" the old man asked Sidus and Mirie.
"Not to well," Mirie said.
"Could've been better," Sidus remarked.
The old man seemed to understand and started talking.
"I'm Jonathan. What I told you about the Chrono Changer was indeed true, but there is more to it. The Chrono Changer has a long history."
Sidus and Mirie yawned. "How long?" Mirie asked. Jonathan seemed to completely ignore this as he started to talk.
"A long time ago, a very advanced race inhabited the mountains of Hujy. They were called Sphyxes, had wings and were able to teleport to different places in a nanosecond. They were able to do this because of their infinite energy resource -- the Zidtron. They lived in harmony and peace, only eating animals that had died of natural causes and plants. They were happy. But they were also powerful. And with power comes the lust to rule."
Sidus and Mirie started to get interested.
"You see," Jonathan continued, "about 4000 years ago, the Sphyxes invented the Chrono Changer. They wanted to be able to travel in time and not just be able to teleport. Most Sphyxes believed this to be a great invention, and within a short period of time it was decided that the Chrono Changer should be used to change the course of history -- in favour of the Sphyxhes, naturally. Fortunately for the rest of the world, there was one Sphyx who did not want to use the Chrono Changer for such things. He hid it within a sealed barrier that only humans, animals and plants - in fact, anything that wasn't a Sphyx - could enter. The Chrono Changer was later picked up by an adventurer. The Sphyx who put up the barrier was eventually killed by his own race. Before getting killed, he managed to put up another barrier, this time restraining all access to the Zidtron. Because they did not have access to the Zidtron, they gradually grew weaker, and in the end they died. Or so I thought."
"What do you mean by that?" Mirie and Sidus almost synchronously asked.
"The disappearing cities might have something to do with them. I've thought up a theory, which would explain it. You see, the barrier that stopped the Sphyxes getting into contact with the Zidtron relies not on species recogniton, but on energy level recognition. In short, that means that only a creature with an energy level below a certain point can enter the barrier. A Sphyx has a very high energy level, which is why they can't enter. However, the Sphyxes have been drained for energy during these thousands years, so there's a risk they might be able to enter the barrier by now. If that's the case, they might want to take revenge on the human race for stealing the Chrono Changer."
Sidus looked at Jonathan, then at Mirie. He had made up his mind. "We must go back to our town and travel back to the day it disappeared. Maybe we can catch a glimpse of some Sphyxes," he said determined. Mirie seemed to agree, but Jonathan did not. "What if it is the Sphyxes? What will you do in that case? And what if it isn't the Sphyxes?" he told the two, "You have to make a fairly bulletproof plan to be able to get the cities back all over the world. And I'll gladly help you."
Mirie and Sidus nodded.
A few days had passes. Sidus and Mirie had been helping with various tasks in the small village, while in the meantime Jonathan had tried coming up with a plan on how to get the cities back with the help of the Chrono Changer. Sidus had just finished eating dinner with the rest of the village, when he heard Jonathan call for him and Mirie. The three gathered in Jonathan's house -- which Sidus now had learnt was also inhabited by some of the other villagers -- and sat down by the table. Jonathan started talking.
"It has been a difficult task to make a plan. But I've succeeded. We know that cities have been disappearing, and we know that the Chrono Changer has once again become active. We think that the Sphyxes might have regained their powers. The point here is, even if the Sphyxes has got their powers back, why would they want to make cities disappear? If they are indeed back, they would surely want to kill the inhibitants of the cities. And somebody would have to protect the inhibitants of those cities. You, that is."
Sidus looked at Mirie, and Mirie looked back at him. A few seconds went by, when they almost simultaneously exclaimed:
"THE CHRONO CHANGER!"
Jonathan nodded, continuing explaining his plan: "Yes, that's right. At some point you'll travel back in time and somehow make the cities disappear. That way, the Sphyxes will not be able to kill any humans. The problem is, it's actually pretty diffcult to make cities disappear. And this is where my plan comes into action."
"Just tell us already!" Sidus shouted impatiently. Jonathan did not seem to notice and continued as if nothing had happened: "Back in the days when I was merely a student in the art of planning, my master told me a secret - the secret of the Mass Uniter. It's a device that can merge a lot of things into one thing. I don't know the details, but you should be able to use it to make the cities time-transferable. You see, the Chrono Changer is only able to travel in time with one object at a time. However, if more than one object touches it, the Chrono Changer will detect it as only one object. If you used the Chrono Changer at a city, only part of it would travel in time, and that's why you need to get the Mass Uniter. As far as I remember, it's located in a city north of here named Neythity. You must go there and ask for a person called Finn Frenzy. I don't know how he got that name, but everybody calls him that. You know, he was actually my old master."
"But if he's your master, he must be relatively older than you. You are old, so your master must either be very old or just dead, right?" Mirie asked.
Jonathan nodded. "My master is indeed very dead. But with the help of the Chrono Changer he'll once again be alive. Your task is to go about twenty years back in time and visit my now-dead but then-alive master Frenzy. After that you must go forward in time to the date the cities started disappearing, use the Mass Uniter to merge you with the cities and take the cities to the future. I'm sorry if my plan isn't very detailed, but I simply don't know that much."
"We'll do it!" Sidus said in a determined voice. "Let's go!" Mirie yelled.
Mirie and Sidus stood in the middle of the village with the inhibitants gathered around them. Jonathan had given them a compass and provisions to hold out for a week. Sidus put a drop of his blood into the Chrono Changer, held Mirie's hand and thought of a date 20 years ago. Like the last time, a great, blue light appeared. A second or so passed, and Sidus was gone together with Mirie.
Sidus couldn't see a thing. Neither could Mirie. It seemed as if they had landed in the middle of a sandstorm. Sidus tried looking in all directions to see where the storm was coming from, and he noticed that the sandstorm was coming from everywhere. Then he and Mirie started being pulled downwards by a mysterious force. They tried fighting the force, but with no luck. They were, once again, doomed.
It was dark. Sidus had just awaken. In the distance he could hear footsteps, though he was unable to determine if it came from one or more persons. Suddenly the light was turned on, and before Sidus stood none other than Ibaxo. Sidus suddenly remembered his promise about being the leader of the group called Radical Believers and felt bad about completely having forgotten it. He then had a slight dejavu, sitting in the same cage as the last time he was captured by Ibaxo, looking at the same room as the last time he was captured. Ibaxo started talking, but Sidus barely noticed what he said. He had just noticed that Ibaxo was not alone in the room. In the back of the room two people - a man and a woman - was walking. Sidus was unable to completely grasp how they looked, but they seemed very familiar to him.
This time Mirie had not been removed from the cage. As she woke up, Sidus regained focus and started listening to what Ibaxo had to say. Ibaxo, however, had stopped talking. Instead he held up two identical Chrono Changers. Sidus and Mirie could not find Sidus' Chrono Changer and quickly realised what had gone wrong. Ibaxo's facial expression changed from being angry to being confused, and as soon as the two people walking in the back of the room had exited the room, he started talking again.
"You posses a Chrono Changer identical to the one my leader has. You are a stranger, and yet you resemble my leader very much. Who are you?" Ibaxo looked closely at Sidus. Sidus did not fully understand what Ibaxo meant, but as he thought of the two people that he has seen a moment ago, he suddenly got it and could not help but yell. "FATHER!" Sidus had just remembered that Liwe, his father, had been the leader of Radical Believers until his death 13 years ago -- no, in 7 years time. "You.. You're from the future?" Ibaxo asked. He did not look very well. Mirie and Sidus looked at each other, then at Ibaxo, and nodded. Ibaxo tried to act calm and asked about Sidus and Mirie's reason for going back in time. They explained to him about the towns disappearing, obtaining the Chrono Changer, the Sphyxes and the Mass Uniter.
After a short amount of time of thinking, Ibaxo agreed to let the two go free. "I see no other way out of this mess," he said. Sidus and Mirie then left, once again looking for the city of Neythity.
It had been several days before Sidus and Mirie had left for Neythity. They had met a bunch of wild animals and were low on provisions. They were walking, low on hope, when they finally saw a city in the distance. They hurried towards the city, and within minutes they stood in front of a great gate. It was open, and they walked straight into it. The next step was for them to find Finn Frenzy. They asked the first person they saw, but it seemed the person did not know. After having asked a lot of people with no result, Sidus and Mirie decided to get something to eat. They found a place called "The Qwizzor's Diner" and entered. They got a table and ordered something to eat. While waiting for their food to come, they took a look at the diner. It was full of drunk men talking nonsense in an odd language. It was not the type of people you would want to ask something, and Sidus and Mirie quickly decided to just sit still. That, however, did not seem to be an option. Within a few seconds, the men had already noticed Mirie, the only female in the room who was not a waitress, and Sidus, who probably seemed a bit odd compared to the rest of the customers. The two adventurers were a bit scared, though they did not take long to realise that there was nothing to fear. It did not take long for the men to start asking.
"Heyy ya oddity," one in a large, red handkerchief said, "what ya doin' here?" Sidus thought he both sounded and looked like a pirate, but he did not comment it.
Another man, this one wearing a oversized blue shirt and a cap that seemed to cover his eyes, then looked closely at Sidus and Mirie. "You lookin' for something.. or someone?" he asked, "We'll help you for free."
Sidus and Mirie did not have any second thought about strange men saying they would help, and instantly said that they were looking for Finn Frenzy. The men's faces stiffened, and within moments they had gone back to their tables and started talking about something else. Sidus and Mirie's food arrived, and they could not see any other solution than simply start eating it. When they had finished they left, but as they went through the exit, a voice called them. The voice seemed strangely familiar, and they followed it. It was dark outside, and they were not able to clearly see the owner of the voice. They made it to a small house and went inside. A light was turned on, and the voice revealed itself. It was Jonathan.
"How are you?" Jonathan asked. Mirie and Sidus thought that somehow revealing they knew him in the future was be a bad idea, and they did not.
"We're fine," they answered, not thinking too much.
"I heard you were talking about Finn Frenzy," Jonathan continued, "Do you have any business with him?"
"Well.. Eh.." Sidus had no idea to what he should say.
"We have to deliver a personal message to him!" Mirie then said. Jonathan seemed to accept that purpose, and he asked Sidus and Mirie to sit down.
"I will lead you to master Frenzy the first thing in the morning. But for now, you must sleep," he said. Mirie and Sidus nodded and went to sleep.
Sidus and Mirie had been woken by Jonathan as the sun was starting to rise. They hurried out of town and made it to a small hut located in the middle of nowhere. "This is here," Jonathan said. He turned around and left. Sidus and Mirie slowly walked towards the hut. They thought of what to say when they met what they thought of as a "frenzy fellow", but they were unable to come up with something very clever. As they came closer to the hut, the main door seemed to be opening. An old man appeared from inside the hut and seemed to be waiting for the two adventurers. When Sidus and Mirie had reached the hut, he welcomed them. "I am Finn Frenzy. Welcome." he said in an almost solemn tone. Sidus and Mirie followed him into his hut and sat down by a table. Finn told them to wait a couple of minutes and then went into a room. While waiting, Mirie and Sidus thought about what they had seen. They had originally believed that Finn Frenzy was an insanely powerful and wise man, but when they looked at Finn, it seemed to them that he was simply an old, powerless man. Finn then reentered with a small, black object.
"This.." Finn started, "..is the Mass Uniter. This is what you're looking for, right?"
"It is!" Mirie shouted, "but how did you know that?"
Finn then turned away from Mirie and Sidus, leaving them to their own thoughts. "The world is in your hands. Don't waste the Mass Uniter on unneccessary things." Then he left. And then Sidus and Mirie left too.
Sidus and Mirie had decided to get something to eat before travelling forward in time. They weren't sure as to how the Mass Uniter was supposed to work, and they decided that they would try to merge themselves with a couple of random objects lying unconnected on the ground before travelling in time. But for now they were in need of food. And sleep. Outside it had already turned dark. They found somewhere to spend the night, and the next morning they were ready to leave. They then found three small rocks, placed them so they didn't touch them, and looked at the Mass Uniter. They noticed a button and clicked it. The moment they touched it, a great, green light erupted from it, and then a voice appeared out of nowhere. "Do not use me for simple rocks," it said, "do not waste the Mass Uniter!" And then it disappeared as quickly as it had appeared. Mirie and Sidus were surprised but decided they had to believe the strange voice. They then used the Chrono Changer to travel forward in time to the date when the cities started disappearing. They had earlier come to a conclusion that the disappearance must have started a three weeks or so before the city that Sidus and Mirie used to live in disappeared. After all, they had been the last to arrive at the small village.
With the date in mind, they held onto the Chrono Changer. Sidus and Mirie placed some of their blood in the small container on the Chrono Changer, and the usual blue light once again appeared, bringing the two to the future.
"Look!" Mirie had noticed a city in the distance. Mirie had always been good at geography, and she immediately recognised it. "Let's start with that one," she then said. With limited proviant the two wandereded in the desert for hours, finally making it to the city. They agreed to enter and examine the city before sending it to the future. On their way into the city, they noticed Maes and Asitera leaving the town. "Then we'll be going!", Maes said, leaving the entire population of the city to what would seem to be total destruction but was in fact nothing more than a tiny time travel. Mirie and Sidus decided to wait for about an hour or so before they made the city disappear. That way Maes and Asitera would not be able to see who did it but they would still notice it. Mirie and Sidus looked at each other. They were sure this was the best solution.
After having waited for about an hour, Sidus and Mirie positioned themselves about 100 metres away from the city. Sidus took the Mass Uniter out and clicked the button they had clicked earlier. The same voice as last time appeared.
"I see you've found quite a task for me!" the voice said, "But don't worry, I'll handle it."
All of a sudden, the city was surrounded by a barrier covered in the colors of the rainbow. Sidus hurriedly took his Chrono Changer out and put a drop of his blood and a drop of Mirie's blood into the container. He and Mirie then thought of the date ten years from now. They believed that to be enough. The usual blue light appeared, sending both the city, Sidus and Mirie into the future.
The first city transfer had succeeded. Ten years into the future, Sidus, Mirie and the city stood as if nothing had happened. Both the surroundings and the weather was unchanged, leaving behind an impression that no time travel had ever taken place.
"I guess we must do this with all the cities in this area. I'm glad we have a month to do it in!" Mirie said.
Sidus then looked away, starting to mumble. "Well, eh.. The truth is, we only have one day to do it. I miscalculated the date," he said quietly. He expected Mirie to become mad, but as he looked at her, it seemed as if she had suddenly got an idea. "Why not simply travel a day back in time whenever we're in need of that?" she said. Sidus immediately understood. When travelling back in time now, they would not travel back to a couple of seconds after they had gone to the future. Rather, they would travel back 10 years plus a couple of days. This way all the cities could disappear at the same time.
"The only problem with this plan," Sidus started, "is that our city was the last one to disappear. If we must make all cities disappear within a day, our city is going to disappear sooner than it really did. And then we're going to start our wandering earlier! That'll screw up the entire time-space continuum!"
Mirie looked thoughtful for a moment. Then she looked up at the sky. "We must poison ourselves," she said. Sidus looked stunned, but Mirie continued: "Nothing serious - it's just to make sure we'll sleep for another week. That way, we'll arrive at the time that we originally arrived at. I don't like the idea, but I don't see any other solution. Argh." Sidus nodded. It was indeed very neccesary, though it was not something he looked forward to. There was however one thing that he was not able to find an answer to, and he said out loud: "How do we get sleeping pills that'll make us sleep for a week but not kill us? I mean, sleeping for a week means not drinking anything for a week and not eating anything for a week. That can easily result in what we know as death. And that's not very nice!"
Mirie spaced out for a while, looking into the endless desert. "I know.." she started, looking like she didn't feel very well, "a way."
Sidus looked at her, as she continued.
"A long time ago, a secret was passed down to me by my grandmother. She told me that -" Mirie hesitated, clearly doubting that she should tell Sidus the secret. Nevertheless, after taking a deep breath, she started talking again: "- that a spell that can put people into a type of hibernation exists. I've never thought it to be true, but I suppose it's our only solution. My grandmother told me of a woman that used to live south of our city. Apparently she could do magic."
"MAGIC?!?" Sidus yelled. Sidus had never liked the occult. He simply did not believe in witches or the likes. He told that to Mirie, but she did not react. Instead, she kept talking.
"She used to live just outside our city. If we travel, say, 20 years back in time, I'm sure we'll be able to find her. We'll make sure none of the people we know sees us."
Sidus still clearly did not like it, but he nodded. He was able to do it. "Let's take care of the other cities before we handle our own, though. It'll be easier that way," Sidus said. Then they traveled 10 years and one day back in time and went to the next city engraved on Mirie's inner map.
They kept doing the cycle of travelling back and forth in time for a month or so. Though it did not take more than one day, timetravelling all the time was quite exhausting. Sidus and Mirie needed a break before they were to poison themselves. However, that was impossible, and they kept on wandering.
At last they were able to see their city in the distance. The sight of it brought back memories. Sidus and Mirie kept walking in spite of the nostalgia starting to kick in, and within an hour they were standing not far away from what used to be the city they lived in. It was however still not dark, and they were fully aware that they themselves were inside the city right know. They had to wait.
It was now dark. Sidus and Mirie had been calculating for some time now, and they had reached the conclusion that putting themselves to sleep tonight would keep the time cycle the way it was supposed to be. The poisoning was done in a matter of seconds. Sidus and Mirie -- the ones not poisoned -- then traveled back to the future, to right after the time in which they had first traveled back in time. They walked through desert and icy areas for a week, consuming all proviant. They barely made it. Back in the village, the inhibitants greeted the two time travelers. Sidus and Mirie were however very tired and went to sleep.
Sidus and Mirie had slept for a couple of days before they woke up. They then used a lot of time telling Jonathan, Asitera, Maes and the others about what had happened, before going to sleep once again. The next day Jonathan woke Sidus and Mirie. They sat down by a table, and what seemed would turn into a long talk was starting.
"So, how are you? Are you alright?" Jonathan started. Mirie and Sidus nodded, although they did not feel entirely well.
Jonathan then continued: "To us it seems that it was only a week since you left. But I'm sure you've spent much time travelling in time, right? Let me see the Chrono Changer."
Sidus handed over the Changer in disbelief.
"Hmhmm.. Let's see - oh..!" Jonathan's facial expression suddenly stiffened.
"What's wrong?" Sidus asked.
Jonathan apparently tried to calm down. He was still shocked, but he kept on talking:
"This is.. serious. While you were away I found a couple of old books describing how the Chrono Changer works. I was surprised to find out that there is a well-preserved secret regarding the Changer. Apparently, one who travels in time is subject to forces unknown to man. Those forces are dangerous and can mean that one obtains mysterious powers. However, those powers have only been obtained if the Chono Changer has a mark. That's what the book said. And the Changer -- it has the mark."
"A... mark?" Mirie was troubled.
"A mark, yes," Jonathan continued, "a mark that tells us that the distortion of time has increased to a level above the accepted. In other words, you have overused the Chrono Changer."
Jonathan then turned the Changer, making the mark visible to Sidus and Mirie. Sidus took a good look at it. It was the mark of a unicorn. And it seemed as if it was bleeding. "What does this mean?" Sidus asked, looking at the mark. Jonathan turned his back to Sidus and took a couple of steps.
"It's a curse."
Sidus and Mirie then fell, followed by the mumble of Jonathan: "It's the curse."

Binary file not shown.

View File

@@ -0,0 +1,595 @@
Eon Aton
By Niels Serup
"Sidus! Sidus!" Mirie yelled. Sidus had been asleep for almost a day, but he
still wanted to sleep more. Mirie, on the other hand, had got up right after
hearing what had happened to their city. After a lot of yelling and shouting on
Mirie's part, Sidus finally woke up, and Mirie was now able to tell him the
terrible truth: Their city was gone.
It had now been two days since the unbearable truth was revealed to Mirie and
Sidus. They were the only people who on that fateful night were outside the
city, and now they wanted to find out what excactly had happened. Sidus and
Mirie had been living in the city of Aton for all their 16-year old life, and
they had never been away for more than 3 days at a time and not more than 50
miles away. Aton had it all: Shops, activities, schools, just everything a
normal middle-sized city would have. But now there was nothing. There were no
marks after explosions, and there was not any debris either. It was like the
city had been conjured away, but both Mirie and Sidus knew that was not the
case. About a day ago they had seen a terrifying light in the sky that did not
look like something natural. They thought it to be odd that they were the only
two who had noticed it, and they still did not understand it. "It has to have
something to do with the disapperance of the city. It has to," Sidus told Mirie,
"why else would we've been the only ones who could see the light AND be the only
ones to not disappear? It HAS to have something to do with each other." Mirie
agreed, and together they decided to find the city. But to do that, they first
had to find out whether their city was the only city that had disappeared, or if
all cities in all of Orb, their country, were victims. "We'll have to get some
proviant," Mirie exclaimed, "and some warm clothes. It's going to be cold
outside in the night." Their first travel had begun.
Having decided to head north, Sidus now understood what Mirie meant with "cold".
However, it was not cold, it was freezing. There were no living animals, nor any
plants. Everything was frozen. The temperature did not vary at all. At night it
was far below 0 degrees, and it was the same at daytime. Sidus and Mirie barely
managed to breathe. They walked for a week, only seeing ice wherever they
looked, before finally reaching a small city. Sidus and Mirie instantly fainted
in front of an old house. The inhibitants heard them faint and dragged them
inside. The life savers put the two wanderers in bed, trying to get some warmth
into them. Mirie and Sidus were in a very bad condition.
Mirie finally awoke. "Where am I?" she said out loud, looking around. She
couldn't spot Sidus. Suddenly a female voice appeared behind her. "How are you?"
it said. Mirie looked at the person but was confused and did not answer
instantly. Thoughts kept circling her mind. "Where is Sidus? Where is this? Who
is this person?" At last she made a reply. "I'm fine," she said, but it was more
of a standard response than anything.
"No, really, how are you?" the voice reanswered.
"Well.. Who are you? And.. And.. WHERE IS SIDUS?!?" Mirie yelled all of a
sudden.
"I'm Asitera. My husband, Maes, is treating your friend in the next room. He -"
the person told Mirie, with Mirie interrupting her in the end, shouting: "SIDUS?
How is he? Is he alright? Does he have any wounds? Did he -"
"Calm down," Asitera said, "He's fine. It's just that he had a few wounds.
Nothing serious, really. Both of you were really lucky. Where were you headed?"
Mirie ignored the question and hurried into the next room. Sidus was lying in a
bed, wrapped in a couple of bandages. Mirie didn't think he looked too bad and
started to relax. "I'm not really a doctor, but he should be alright," Maes told
her, "just a few scratches here and there. It's actually a bit weird you were
completely unhurt." Mirie looked at herself and did not see any wounds. She
wondered about it for a moment but let it go. She walked back to the other room,
thanked Asitera and went to sleep again.
Three days had passed. Sidus had now completely recovered from his wounds, and
both him and Mirie began to refocus on their plan about finding cities. This
small outskirt did not qualify as a city in Sidus and Mirie's eyes. They told
Asitera and Maes about what had happened and what their plan was, and to their
surprise both Asitera and Maes knew about the disappearance of cities. "We don't
know about who is behind all of this," Maes started, "but we're aware that every
city with more than 100 citizens is gone." Mirie was confused. "Why do you two
know that?" she asked. Sidus was also a bit confused, but he had an idea: "The
citizens of this small town probably used to live in the different cities, and
they all ended up here. Is this correct, Maes?" Maes nodded, saying: "20 persons
inhabit this village. They come from 15 different cities. They all say their
city was suddenly gone, and that they were the only ones who didn't disappear.
They all somehow ended up here. We were actually a bit surprised when we got
here. It would've been natural if it was a ruin, but when we got here, it looked
as if it had been restored recently. Everything was fixed. We thought about it-"
Asitera broke in, setting a stop to the random chitchat. "I suppose your
situation is the same, right?" she asked Sidus and Mirie. They both nodded.
"Now the only thing left is to find out who or what did all this. Let's try to
find some leads," Sidus suggested with a determined mind. Maes and Asitera began
to gather the people of the village and told them about the plan. They all
agreed on trying to find clues, and after distributing some proviant and
something equivalent to walkie talkies, they began looking in different
directions. No one knew what to look for, but they all knew that the future of
the world very much depended on them. Destiny lay in their hands.
"Shit."
Sidus eyes had suddenly become focused on a giant creature about a mile away
moving very fast towards him and Mirie. Mirie noticed it too, but when she did,
it was only half a mile away. Soon after, it had fully catched up with the two.
Mirie and Sidus felt like they had been stunned. A giant sandworm, about 100
feet wide and several 100 feet long, had appeared before them. Mirie thought it
had an odd, eerie glow that would make it visible even in total darkness. Sidus
noticed that the giant sandworm seemed to be launching an attack, and he quickly
regained his senses. However, both him and Mirie were useless. The sandworm was
larger than them, faster than them, and they did not have any weapons at all.
Seconds later the giant sandworm swallowed them. They were doomed.
The walkie talkie beeped again and again. Finally Sidus heard it, and he got up,
noticing that he was still somehow alive. Then he thought of Mirie. He called
after her, but no one answered. "She must be near me," Sidus thought, and he
began looking. However, it was completely dark. He could not even see his own
feet. Despite of that, Sidus tried walking forward, hoping to find a torch or
something similar. Not long time went before he tripped and fell, and apparently
someome heard that, as a couple of lamps above Sidus were suddenly turned on.
Then he found out. He was trapped inside a large cage, and Mirie was nowhere to
be seen. He grabbed the walkie talkie and tried to communicate with the other
groups. No signal. Apparently all it could do was beep. "Probably the
batteries," Sidus thought, putting it in his pocket. Then he started to look
around. He was amazed to see the size of the room his cage was in. His cage was
the same. It was probably ten times the size of what it needed to be to keep him
trapped. The cage he was in had large steel bars keeping him from escaping. The
floor, walls and roof were all in a dark brown color, and there were many doors
but no windows. Judging by the inventory, Sidus had the idea that he was in some
kind of laboratory. However, he did not get more time to observe. A short,
dark-haired man entered through one of the many doors. He walked slowly towards
Sidus, taking heavy but short steps. When the man was only a couple of inches in
front of the cage, he looked at Sidus and started talking. Sidus was scared.
"You are the one." the short man told sidus. Sidus was surprised and gathered
enough courage to answer. "What do you mean?" Sidus replied.
"You are the one."
"But why? How? And where's Mirie?"
"Mirie is safe. The point is, several thousands years ago, you was chosen to
become the leader of the group called Radical Believers. We consist of thousands
of people trying to save the world from misery. And you will be our leader."
"But WHY? I'm just Sidus, an ordinary boy from the city of Aton! What could I
help with at all? I don't get it!"
The short man sighed and turned around. Then he told Sidus in a quiet voice:
"Your father."
Sidus' father had died when Sidus was only 3 years old. Sidus had very few
memories of him and did not want to think too much about him. He did not, to
this day, even know anything about his father's background. He had never asked
his mother about it. And now this dwarf-like person mentioned him! Sidus
suddenly felt like he desperately needed an answer. Before he could say
anything, though, the short man started talking again: "I'm Ibaxo. Your father
was our former leader, but unfortunately he passed away 13 years ago. If I
remember correctly, his name was.. Liwe?" Sidus nodded. Ibaxo continued: "For 15
years he led our group to great victories over evil. But then he was defeated.
And now -"
"Who defeated my father?" Sidus yelled all of a sudden, interrupting Ibaxo's
explanation. He had almost completely forgotten about Mirie. He just wanted to
know who defeated his father -- badly. Ibaxo did not seem surprised, and Sidus
thought Ibaxo might have foreseen this. A few seconds of silence went by, and
Ibaxo continued as if nothing had happened: "- and now you will be our new
leader. This is no easy feat. You must control thousands of people in their
effort to save the world. And of course... You must be able to use the CHRONO
CHANGER." Sidus looked troubled. He knew that "chronos" meant "time" in Latin,
and he soon realized that "time changer" might mean what he would call a time
machine. "Is this thing we're talking about a time machine?" Sidus asked Ibaxo,
trying to speak calmly. Ibaxo took a deep breath before quietly nodding. "It's
difficult to use. But it's powerful and very useful in some situations. But
beware! It might.. backfire." Ibaxo told Sidus.
Sidus felt he was prepared, though he did not completely understand the last
part. But he knew he would someday. Sidus was given the Chrono Changer, and he
was surprised to see that it was in fact a fairly small machine.
Sidus had been reunited with Mirie, and they had been freed on a location near
the small town. They were now able to communicate via the walkie talkie. All
teams were fine and heading back to the town. Sidus told them that he and Mirie
were also heading back, keeping the secret about the Chrono Changer to himself.
Back in the town, though, he decided to tell the citizens about his newly
aquired time machine. He felt he had to tell them as a "thank you" for helping
him. Also, he did not know how to use it, and he hoped one of the citizens could
help him.
"So that's how it is, right?" one of the citizens said. It was a dark-haired,
tall male, probably about 90 years old. Sidus had just told him and the others
about the Chrono Changer, and how he forgot to ask Ibaxo how to use it. They
were sitting around a small fire, and the old man was the only one who seemed to
know something.
"I thought it was just a legend," the old man continued, "but apparently it's
not. This must be fate. You see, years ago my grandmother told me about 'a
machinery that will alter human history'. I thought it sounded funny, but one
day I met this young man - he might've been your greatgrandfather or something -
who told me about it in details. I still didn't really believe it, and I quickly
forgot about it. But it seems it's true. If I remember correctly, one of the
things he told me was how to use this little piece of machinery. Now, what did
he say? Oh, yes, you just think of the date you want to travel to and put a bit
of your blood and the blood of a person close to you into this container to
confirm that you are in fact you and that you will not use the machine for evil
purposes. Anyone who touches the Chrono Changer when it's starting will travel
in time together with the owner."
Sidus and Mirie were thrilled and tried it without thought. Sidus thought of two
weeks ago and put a little drop of his blood into a container in the machine.
Mirie subsequently put a drop of her blood into the container, making the Chrono
Changer emit a multi-colored beam. Mirie was surprised and let go of the
machine. Sidus still had it in his hands when a great, blue light appeared.
He was gone.
Sidus was standing in the middle of the desert. He was surrounded by a circle of
small houses. It looked like the houses had been left a long time ago. Sidus
immediately recognized the place as the small town that he had been in just a
couple of seconds ago, though this time it looked more like ruins than anything
else. "Is this.. two weeks ago?" Sidus thought. He walked into Asitera and Maes'
house, but no one was there. And on the contrary to when Sidus last visited
their house, this time it was full of dust and webs. It was then that he
understood how true the Chrono Changer was. Sidus had no intentions of staying
in the time frame two weeks ago, and so he desperately tried to get back to the
future. All of his attempts were futile. He did not have the blood of a person
close to him. He sat down, looked into the sky and thought of his possibilities.
He soon realized that there was no way he would be able to return to in two
week's time. It was then he remembered what Maes had told them about how the
village did not look like ruins when they had arrived. "Maybe.." Sidus thought,
"maybe, I was the one who restored the buildings!" He did not completely
understand the situation, but nonetheless, he slowly began restoring the houses.
A week passed, and he noticed a couple of people in the distance. He quickly hid
behind one of the houses. After a short amount of time, he heard two familiar
voices.
"We should stay here, Maes"
"Yep, Asitera. But I wonder why it looks this well. It doesn't seem like anyone
would want to live out here. Odd."
Sidus knew he had to hide until the Sidus from the future had gone to the past.
He simply did not want to cause a paradox.
During the two weeks of hiding, occasionally Sidus was able to get proviant.
When the inhibitants of the village had wandered off to find clues, Sidus was
finally able to sleep in a bed. He spent most of his time thinking about the
meaning of life. Was time travelling really that great? What if humans were
simply destined to be exterminated? Sidus was not sure of what to do anymore,
and he fell asleep.
The great, blue light appeared once again. The oldest Sidus looked intensily at
himself disappearing into the past. "Did another Sidus also look at me when I
disappeared?" Sidus thought, "Did he think the same thoughts that I'm thinking
in this very moment?" Sidus did not want to worry about it anymore, and he
showed himself to Maes, Asitera and the rest. One of the first responses was
about the Chrono Changer only being a teleporter. Soon everyone was talking
about the Chrono Changer and its attributes. Sidus had to yell "STOP!" to make
them quit talking. Sidus then told them everything -- his time travel, what he
had done in the past two weeks, simply everything. The villagers were stunned.
Some of them looked like they were not able to comprehend the situation, Sidus
observed. One kept talking about not understanding a thing, while another kept
coming with theories that were supposed to point out the current Sidus as a
traitor. After some time, Asitera broke in.
"Take it easy," she said calmly, looking at the old man who had told Sidus how
the Chrono Changer works, "Sidus is right -- he is, isn't he?"
The old man nodded. The villagers slowly walked away, still thinking about what
they had witnessed. The old man turned to look at Sidus, telling him quietly:
"We need to talk."
Sidus, Mirie and the old man were sitting around a table inside what seemed to
be the old man's house. Mirie had insisted on joining the two, and the old man
had agreed in the end. The old man had just walked into the kitchen, and Sidus
took a look at the house from the inside. It was a fairly large house, though it
did not seem that the old man was the only one living here. From where he was
sitting he could see several beds, none of which looked unused.
The old man had just reentered. He sat down by the table.
"How are you?" the old man asked Sidus and Mirie.
"Not to well," Mirie said.
"Could've been better," Sidus remarked.
The old man seemed to understand and started talking.
"I'm Jonathan. What I told you about the Chrono Changer was indeed true, but
there is more to it. The Chrono Changer has a long history."
Sidus and Mirie yawned. "How long?" Mirie asked. Jonathan seemed to completely
ignore this as he started to talk.
"A long time ago, a very advanced race inhabited the mountains of Hujy. They
were called Sphyxes, had wings and were able to teleport to different places in
a nanosecond. They were able to do this because of their infinite energy
resource -- the Zidtron. They lived in harmony and peace, only eating animals
that had died of natural causes and plants. They were happy. But they were also
powerful. And with power comes the lust to rule."
Sidus and Mirie started to get interested.
"You see," Jonathan continued, "about 4000 years ago, the Sphyxes invented the
Chrono Changer. They wanted to be able to travel in time and not just be able to
teleport. Most Sphyxes believed this to be a great invention, and within a short
period of time it was decided that the Chrono Changer should be used to change
the course of history -- in favour of the Sphyxhes, naturally. Fortunately for
the rest of the world, there was one Sphyx who did not want to use the Chrono
Changer for such things. He hid it within a sealed barrier that only humans,
animals and plants - in fact, anything that wasn't a Sphyx - could enter. The
Chrono Changer was later picked up by an adventurer. The Sphyx who put up the
barrier was eventually killed by his own race. Before getting killed, he managed
to put up another barrier, this time restraining all access to the Zidtron.
Because they did not have access to the Zidtron, they gradually grew weaker, and
in the end they died. Or so I thought."
"What do you mean by that?" Mirie and Sidus almost synchronously asked.
"The disappearing cities might have something to do with them. I've thought up a
theory, which would explain it. You see, the barrier that stopped the Sphyxes
getting into contact with the Zidtron relies not on species recogniton, but on
energy level recognition. In short, that means that only a creature with an
energy level below a certain point can enter the barrier. A Sphyx has a very
high energy level, which is why they can't enter. However, the Sphyxes have been
drained for energy during these thousands years, so there's a risk they might be
able to enter the barrier by now. If that's the case, they might want to take
revenge on the human race for stealing the Chrono Changer."
Sidus looked at Jonathan, then at Mirie. He had made up his mind. "We must go
back to our town and travel back to the day it disappeared. Maybe we can catch a
glimpse of some Sphyxes," he said determined. Mirie seemed to agree, but
Jonathan did not. "What if it is the Sphyxes? What will you do in that case? And
what if it isn't the Sphyxes?" he told the two, "You have to make a fairly
bulletproof plan to be able to get the cities back all over the world. And I'll
gladly help you."
Mirie and Sidus nodded.
A few days had passes. Sidus and Mirie had been helping with various tasks in
the small village, while in the meantime Jonathan had tried coming up with a
plan on how to get the cities back with the help of the Chrono Changer. Sidus
had just finished eating dinner with the rest of the village, when he heard
Jonathan call for him and Mirie. The three gathered in Jonathan's house -- which
Sidus now had learnt was also inhabited by some of the other villagers -- and
sat down by the table. Jonathan started talking.
"It has been a difficult task to make a plan. But I've succeeded. We know that
cities have been disappearing, and we know that the Chrono Changer has once
again become active. We think that the Sphyxes might have regained their powers.
The point here is, even if the Sphyxes has got their powers back, why would they
want to make cities disappear? If they are indeed back, they would surely want
to kill the inhibitants of the cities. And somebody would have to protect the
inhibitants of those cities. You, that is."
Sidus looked at Mirie, and Mirie looked back at him. A few seconds went by, when
they almost simultaneously exclaimed:
"THE CHRONO CHANGER!"
Jonathan nodded, continuing explaining his plan: "Yes, that's right. At some
point you'll travel back in time and somehow make the cities disappear. That
way, the Sphyxes will not be able to kill any humans. The problem is, it's
actually pretty diffcult to make cities disappear. And this is where my plan
comes into action."
"Just tell us already!" Sidus shouted impatiently. Jonathan did not seem to
notice and continued as if nothing had happened: "Back in the days when I was
merely a student in the art of planning, my master told me a secret - the secret
of the Mass Uniter. It's a device that can merge a lot of things into one thing.
I don't know the details, but you should be able to use it to make the cities
time-transferable. You see, the Chrono Changer is only able to travel in time
with one object at a time. However, if more than one object touches it, the
Chrono Changer will detect it as only one object. If you used the Chrono Changer
at a city, only part of it would travel in time, and that's why you need to get
the Mass Uniter. As far as I remember, it's located in a city north of here
named Neythity. You must go there and ask for a person called Finn Frenzy. I
don't know how he got that name, but everybody calls him that. You know, he was
actually my old master."
"But if he's your master, he must be relatively older than you. You are old, so
your master must either be very old or just dead, right?" Mirie asked.
Jonathan nodded. "My master is indeed very dead. But with the help of the Chrono
Changer he'll once again be alive. Your task is to go about twenty years back in
time and visit my now-dead but then-alive master Frenzy. After that you must go
forward in time to the date the cities started disappearing, use the Mass Uniter
to merge you with the cities and take the cities to the future. I'm sorry if my
plan isn't very detailed, but I simply don't know that much."
"We'll do it!" Sidus said in a determined voice. "Let's go!" Mirie yelled.
Mirie and Sidus stood in the middle of the village with the inhibitants gathered
around them. Jonathan had given them a compass and provisions to hold out for a
week. Sidus put a drop of his blood into the Chrono Changer, held Mirie's hand
and thought of a date 20 years ago. Like the last time, a great, blue light
appeared. A second or so passed, and Sidus was gone together with Mirie.
Sidus couldn't see a thing. Neither could Mirie. It seemed as if they had landed
in the middle of a sandstorm. Sidus tried looking in all directions to see where
the storm was coming from, and he noticed that the sandstorm was coming from
everywhere. Then he and Mirie started being pulled downwards by a mysterious
force. They tried fighting the force, but with no luck. They were, once again,
doomed.
It was dark. Sidus had just awaken. In the distance he could hear footsteps,
though he was unable to determine if it came from one or more persons. Suddenly
the light was turned on, and before Sidus stood none other than Ibaxo. Sidus
suddenly remembered his promise about being the leader of the group called
Radical Believers and felt bad about completely having forgotten it. He then had
a slight dejavu, sitting in the same cage as the last time he was captured by
Ibaxo, looking at the same room as the last time he was captured. Ibaxo started
talking, but Sidus barely noticed what he said. He had just noticed that Ibaxo
was not alone in the room. In the back of the room two people - a man and a
woman - was walking. Sidus was unable to completely grasp how they looked, but
they seemed very familiar to him.
This time Mirie had not been removed from the cage. As she woke up, Sidus
regained focus and started listening to what Ibaxo had to say. Ibaxo, however,
had stopped talking. Instead he held up two identical Chrono Changers. Sidus and
Mirie could not find Sidus' Chrono Changer and quickly realised what had gone
wrong. Ibaxo's facial expression changed from being angry to being confused, and
as soon as the two people walking in the back of the room had exited the room,
he started talking again.
"You posses a Chrono Changer identical to the one my leader has. You are a
stranger, and yet you resemble my leader very much. Who are you?" Ibaxo looked
closely at Sidus. Sidus did not fully understand what Ibaxo meant, but as he
thought of the two people that he has seen a moment ago, he suddenly got it and
could not help but yell. "FATHER!" Sidus had just remembered that Liwe, his
father, had been the leader of Radical Believers until his death 13 years ago --
no, in 7 years time. "You.. You're from the future?" Ibaxo asked. He did not
look very well. Mirie and Sidus looked at each other, then at Ibaxo, and nodded.
Ibaxo tried to act calm and asked about Sidus and Mirie's reason for going back
in time. They explained to him about the towns disappearing, obtaining the
Chrono Changer, the Sphyxes and the Mass Uniter.
After a short amount of time of thinking, Ibaxo agreed to let the two go free.
"I see no other way out of this mess," he said. Sidus and Mirie then left, once
again looking for the city of Neythity.
It had been several days before Sidus and Mirie had left for Neythity. They had
met a bunch of wild animals and were low on provisions. They were walking, low
on hope, when they finally saw a city in the distance. They hurried towards the
city, and within minutes they stood in front of a great gate. It was open, and
they walked straight into it. The next step was for them to find Finn Frenzy.
They asked the first person they saw, but it seemed the person did not know.
After having asked a lot of people with no result, Sidus and Mirie decided to
get something to eat. They found a place called "The Qwizzor's Diner" and
entered. They got a table and ordered something to eat. While waiting for their
food to come, they took a look at the diner. It was full of drunk men talking
nonsense in an odd language. It was not the type of people you would want to ask
something, and Sidus and Mirie quickly decided to just sit still. That, however,
did not seem to be an option. Within a few seconds, the men had already noticed
Mirie, the only female in the room who was not a waitress, and Sidus, who
probably seemed a bit odd compared to the rest of the customers. The two
adventurers were a bit scared, though they did not take long to realise that
there was nothing to fear. It did not take long for the men to start asking.
"Heyy ya oddity," one in a large, red handkerchief said, "what ya doin' here?"
Sidus thought he both sounded and looked like a pirate, but he did not comment
it.
Another man, this one wearing a oversized blue shirt and a cap that seemed to
cover his eyes, then looked closely at Sidus and Mirie. "You lookin' for
something.. or someone?" he asked, "We'll help you for free."
Sidus and Mirie did not have any second thought about strange men saying they
would help, and instantly said that they were looking for Finn Frenzy. The men's
faces stiffened, and within moments they had gone back to their tables and
started talking about something else. Sidus and Mirie's food arrived, and they
could not see any other solution than simply start eating it. When they had
finished they left, but as they went through the exit, a voice called them. The
voice seemed strangely familiar, and they followed it. It was dark outside, and
they were not able to clearly see the owner of the voice. They made it to a
small house and went inside. A light was turned on, and the voice revealed
itself. It was Jonathan.
"How are you?" Jonathan asked. Mirie and Sidus thought that somehow revealing
they knew him in the future was be a bad idea, and they did not.
"We're fine," they answered, not thinking too much.
"I heard you were talking about Finn Frenzy," Jonathan continued, "Do you have
any business with him?"
"Well.. Eh.." Sidus had no idea to what he should say.
"We have to deliver a personal message to him!" Mirie then said. Jonathan seemed
to accept that purpose, and he asked Sidus and Mirie to sit down.
"I will lead you to master Frenzy the first thing in the morning. But for now,
you must sleep," he said. Mirie and Sidus nodded and went to sleep.
Sidus and Mirie had been woken by Jonathan as the sun was starting to rise. They
hurried out of town and made it to a small hut located in the middle of nowhere.
"This is here," Jonathan said. He turned around and left. Sidus and Mirie slowly
walked towards the hut. They thought of what to say when they met what they
thought of as a "frenzy fellow", but they were unable to come up with something
very clever. As they came closer to the hut, the main door seemed to be opening.
An old man appeared from inside the hut and seemed to be waiting for the two
adventurers. When Sidus and Mirie had reached the hut, he welcomed them. "I am
Finn Frenzy. Welcome." he said in an almost solemn tone. Sidus and Mirie
followed him into his hut and sat down by a table. Finn told them to wait a
couple of minutes and then went into a room. While waiting, Mirie and Sidus
thought about what they had seen. They had originally believed that Finn Frenzy
was an insanely powerful and wise man, but when they looked at Finn, it seemed
to them that he was simply an old, powerless man. Finn then reentered with a
small, black object.
"This.." Finn started, "..is the Mass Uniter. This is what you're looking for,
right?"
"It is!" Mirie shouted, "but how did you know that?"
Finn then turned away from Mirie and Sidus, leaving them to their own thoughts.
"The world is in your hands. Don't waste the Mass Uniter on unneccessary
things." Then he left. And then Sidus and Mirie left too.
Sidus and Mirie had decided to get something to eat before travelling forward in
time. They weren't sure as to how the Mass Uniter was supposed to work, and they
decided that they would try to merge themselves with a couple of random objects
lying unconnected on the ground before travelling in time. But for now they were
in need of food. And sleep. Outside it had already turned dark. They found
somewhere to spend the night, and the next morning they were ready to leave.
They then found three small rocks, placed them so they didn't touch them, and
looked at the Mass Uniter. They noticed a button and clicked it. The moment they
touched it, a great, green light erupted from it, and then a voice appeared out
of nowhere. "Do not use me for simple rocks," it said, "do not waste the Mass
Uniter!" And then it disappeared as quickly as it had appeared. Mirie and Sidus
were surprised but decided they had to believe the strange voice. They then used
the Chrono Changer to travel forward in time to the date when the cities started
disappearing. They had earlier come to a conclusion that the disappearance must
have started a three weeks or so before the city that Sidus and Mirie used to
live in disappeared. After all, they had been the last to arrive at the small
village.
With the date in mind, they held onto the Chrono Changer. Sidus and Mirie placed
some of their blood in the small container on the Chrono Changer, and the usual
blue light once again appeared, bringing the two to the future.
"Look!" Mirie had noticed a city in the distance. Mirie had always been good at
geography, and she immediately recognised it. "Let's start with that one," she
then said. With limited proviant the two wandereded in the desert for hours,
finally making it to the city. They agreed to enter and examine the city before
sending it to the future. On their way into the city, they noticed Maes and
Asitera leaving the town. "Then we'll be going!", Maes said, leaving the entire
population of the city to what would seem to be total destruction but was in
fact nothing more than a tiny time travel. Mirie and Sidus decided to wait for
about an hour or so before they made the city disappear. That way Maes and
Asitera would not be able to see who did it but they would still notice it.
Mirie and Sidus looked at each other. They were sure this was the best solution.
After having waited for about an hour, Sidus and Mirie positioned themselves
about 100 metres away from the city. Sidus took the Mass Uniter out and clicked
the button they had clicked earlier. The same voice as last time appeared.
"I see you've found quite a task for me!" the voice said, "But don't worry, I'll
handle it."
All of a sudden, the city was surrounded by a barrier covered in the colors of
the rainbow. Sidus hurriedly took his Chrono Changer out and put a drop of his
blood and a drop of Mirie's blood into the container. He and Mirie then thought
of the date ten years from now. They believed that to be enough. The usual blue
light appeared, sending both the city, Sidus and Mirie into the future.
The first city transfer had succeeded. Ten years into the future, Sidus, Mirie
and the city stood as if nothing had happened. Both the surroundings and the
weather was unchanged, leaving behind an impression that no time travel had ever
taken place.
"I guess we must do this with all the cities in this area. I'm glad we have a
month to do it in!" Mirie said.
Sidus then looked away, starting to mumble. "Well, eh.. The truth is, we only
have one day to do it. I miscalculated the date," he said quietly. He expected
Mirie to become mad, but as he looked at her, it seemed as if she had suddenly
got an idea. "Why not simply travel a day back in time whenever we're in need of
that?" she said. Sidus immediately understood. When travelling back in time now,
they would not travel back to a couple of seconds after they had gone to the
future. Rather, they would travel back 10 years plus a couple of days. This way
all the cities could disappear at the same time.
"The only problem with this plan," Sidus started, "is that our city was the last
one to disappear. If we must make all cities disappear within a day, our city is
going to disappear sooner than it really did. And then we're going to start our
wandering earlier! That'll screw up the entire time-space continuum!"
Mirie looked thoughtful for a moment. Then she looked up at the sky. "We must
poison ourselves," she said. Sidus looked stunned, but Mirie continued: "Nothing
serious - it's just to make sure we'll sleep for another week. That way, we'll
arrive at the time that we originally arrived at. I don't like the idea, but I
don't see any other solution. Argh." Sidus nodded. It was indeed very neccesary,
though it was not something he looked forward to. There was however one thing
that he was not able to find an answer to, and he said out loud: "How do we get
sleeping pills that'll make us sleep for a week but not kill us? I mean,
sleeping for a week means not drinking anything for a week and not eating
anything for a week. That can easily result in what we know as death. And that's
not very nice!"
Mirie spaced out for a while, looking into the endless desert. "I know.." she
started, looking like she didn't feel very well, "a way."
Sidus looked at her, as she continued.
"A long time ago, a secret was passed down to me by my grandmother. She told me
that -" Mirie hesitated, clearly doubting that she should tell Sidus the secret.
Nevertheless, after taking a deep breath, she started talking again: "- that a
spell that can put people into a type of hibernation exists. I've never thought
it to be true, but I suppose it's our only solution. My grandmother told me of a
woman that used to live south of our city. Apparently she could do magic."
"MAGIC?!?" Sidus yelled. Sidus had never liked the occult. He simply did not
believe in witches or the likes. He told that to Mirie, but she did not react.
Instead, she kept talking.
"She used to live just outside our city. If we travel, say, 20 years back in
time, I'm sure we'll be able to find her. We'll make sure none of the people we
know sees us."
Sidus still clearly did not like it, but he nodded. He was able to do it. "Let's
take care of the other cities before we handle our own, though. It'll be easier
that way," Sidus said. Then they traveled 10 years and one day back in time and
went to the next city engraved on Mirie's inner map.
They kept doing the cycle of travelling back and forth in time for a month or
so. Though it did not take more than one day, timetravelling all the time was
quite exhausting. Sidus and Mirie needed a break before they were to poison
themselves. However, that was impossible, and they kept on wandering.
At last they were able to see their city in the distance. The sight of it
brought back memories. Sidus and Mirie kept walking in spite of the nostalgia
starting to kick in, and within an hour they were standing not far away from
what used to be the city they lived in. It was however still not dark, and they
were fully aware that they themselves were inside the city right know. They had
to wait.
It was now dark. Sidus and Mirie had been calculating for some time now, and
they had reached the conclusion that putting themselves to sleep tonight would
keep the time cycle the way it was supposed to be. The poisoning was done in a
matter of seconds. Sidus and Mirie -- the ones not poisoned -- then traveled
back to the future, to right after the time in which they had first traveled
back in time. They walked through desert and icy areas for a week, consuming all
proviant. They barely made it. Back in the village, the inhibitants greeted the
two time travelers. Sidus and Mirie were however very tired and went to sleep.
Sidus and Mirie had slept for a couple of days before they woke up. They then
used a lot of time telling Jonathan, Asitera, Maes and the others about what had
happened, before going to sleep once again. The next day Jonathan woke Sidus and
Mirie. They sat down by a table, and what seemed would turn into a long talk was
starting.
"So, how are you? Are you alright?" Jonathan started. Mirie and Sidus nodded,
although they did not feel entirely well.
Jonathan then continued: "To us it seems that it was only a week since you left.
But I'm sure you've spent much time travelling in time, right? Let me see the
Chrono Changer."
Sidus handed over the Changer in disbelief.
"Hmhmm.. Let's see - oh..!" Jonathan's facial expression suddenly stiffened.
"What's wrong?" Sidus asked.
Jonathan apparently tried to calm down. He was still shocked, but he kept on
talking:
"This is.. serious. While you were away I found a couple of old books describing
how the Chrono Changer works. I was surprised to find out that there is a
well-preserved secret regarding the Changer. Apparently, one who travels in time
is subject to forces unknown to man. Those forces are dangerous and can mean
that one obtains mysterious powers. However, those powers have only been
obtained if the Chono Changer has a mark. That's what the book said. And the
Changer -- it has the mark."
"A... mark?" Mirie was troubled.
"A mark, yes," Jonathan continued, "a mark that tells us that the distortion of
time has increased to a level above the accepted. In other words, you have
overused the Chrono Changer."
Jonathan then turned the Changer, making the mark visible to Sidus and Mirie.
Sidus took a good look at it. It was the mark of a unicorn. And it seemed as if
it was bleeding. "What does this mean?" Sidus asked, looking at the mark.
Jonathan turned his back to Sidus and took a couple of steps.
"It's a curse."
Sidus and Mirie then fell, followed by the mumble of Jonathan: "It's the curse."

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1 @@
bak/

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,240 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="400"
height="175"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.45.1+0.46pre1+devel"
version="1.0"
sodipodi:docname="logo.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="C:\Inetpub\wwwroot\n\eonaton\andet\logo.png"
inkscape:export-xdpi="118.66666"
inkscape:export-ydpi="118.66666">
<defs
id="defs4">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="-50 : 600 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="700 : 600 : 1"
inkscape:persp3d-origin="300 : 400 : 1"
id="perspective22" />
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="110.63919 : 573.92767 : 1"
inkscape:vp_y="6.1230318e-14 : 1000 : 0"
inkscape:vp_z="860.63919 : 573.92767 : 1"
inkscape:persp3d-origin="460.63919 : 373.92767 : 1"
id="perspective10" />
<filter
inkscape:collect="always"
id="filter3232"
x="-0.097213246"
width="1.1944265"
y="-0.28518957"
height="1.5703791">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="10.543699"
id="feGaussianBlur3234" />
</filter>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
gridtolerance="10000"
guidetolerance="10"
objecttolerance="10"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.9725"
inkscape:cx="200"
inkscape:cy="87.5"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1280"
inkscape:window-height="938"
inkscape:window-x="0"
inkscape:window-y="52" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="opacity:1;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect3274"
width="400"
height="175"
x="0"
y="0" />
<rect
style="opacity:1;fill:#00ff00;fill-opacity:0.56999972;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3232)"
id="rect2408"
width="260.30276"
height="88.730026"
x="23.095039"
y="23.98233"
transform="scale(1.296298,1.2962963)" />
<text
xml:space="preserve"
style="font-size:90.74080658px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#008000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Blackadder ITC;-inkscape-font-specification:Blackadder ITC"
x="34.892014"
y="125.0246"
id="text2388"><tspan
sodipodi:role="line"
id="tspan2390"
x="34.892014"
y="125.0246">Eon Aton</tspan></text>
<path
sodipodi:type="star"
style="opacity:1;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3250"
sodipodi:sides="5"
sodipodi:cx="206.89655"
sodipodi:cy="128.84776"
sodipodi:r1="12.224089"
sodipodi:r2="6.1120443"
sodipodi:arg1="2.677945"
sodipodi:arg2="3.3062636"
inkscape:flatsided="false"
inkscape:rounded="0"
inkscape:randomized="0"
d="M 195.96299,134.31454 L 200.86718,127.84583 L 198.31867,120.13866 L 205.98627,122.80388 L 212.52869,117.99846 L 212.36332,126.11437 L 218.95527,130.85163 L 211.18548,133.20231 L 208.71711,140.93552 L 204.08047,134.27241 L 195.96299,134.31454 z"
transform="matrix(1.296298,0,0,1.2962963,-129.23732,-104.86482)" />
<path
sodipodi:type="star"
style="opacity:1;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3252"
sodipodi:sides="5"
sodipodi:cx="342.30447"
sodipodi:cy="142.72498"
sodipodi:r1="9.8978996"
sodipodi:r2="4.9489498"
sodipodi:arg1="-1.784857"
sodipodi:arg2="-1.1565385"
inkscape:flatsided="false"
inkscape:rounded="0"
inkscape:randomized="0"
d="M 340.20187,133.05298 L 344.29648,138.19463 L 350.85335,137.73647 L 347.22865,143.21953 L 349.69057,149.3139 L 343.35578,147.56097 L 338.32046,151.78566 L 338.03004,145.21923 L 332.45612,141.73586 L 338.61142,139.43051 L 340.20187,133.05298 z"
transform="matrix(1.296298,0,0,1.2962963,-129.23732,-104.86482)" />
<path
sodipodi:type="star"
style="opacity:1;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3254"
sodipodi:sides="5"
sodipodi:cx="239.2767"
sodipodi:cy="146.50967"
sodipodi:r1="16.101086"
sodipodi:r2="8.0505428"
sodipodi:arg1="-2.4301335"
sodipodi:arg2="-1.801815"
inkscape:flatsided="false"
inkscape:rounded="0"
inkscape:randomized="0"
d="M 227.08158,135.99664 L 237.43338,138.673 L 245.5067,131.66272 L 246.1602,142.3349 L 255.32217,147.84679 L 245.37426,151.76619 L 242.96336,162.18301 L 236.16171,153.93315 L 225.50971,154.85922 L 231.25397,145.84112 L 227.08158,135.99664 z"
transform="matrix(1.296298,0,0,1.2962963,-129.23732,-104.86482)" />
<path
sodipodi:type="star"
style="opacity:1;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3256"
sodipodi:sides="5"
sodipodi:cx="362.4895"
sodipodi:cy="125.90412"
sodipodi:r1="13.978781"
sodipodi:r2="6.9893904"
sodipodi:arg1="-1.94013"
sodipodi:arg2="-1.3118115"
inkscape:flatsided="false"
inkscape:rounded="0"
inkscape:randomized="0"
d="M 357.44324,112.86796 L 364.27948,119.14782 L 373.32825,117.07645 L 369.46826,125.51868 L 374.23448,133.48448 L 365.01263,132.4222 L 358.90954,139.41672 L 357.07013,130.31796 L 348.53199,126.675 L 356.61702,122.11394 L 357.44324,112.86796 z"
transform="matrix(1.296298,0,0,1.2962963,-129.23732,-104.86482)" />
<path
sodipodi:type="star"
style="opacity:1;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3258"
sodipodi:sides="5"
sodipodi:cx="320.01682"
sodipodi:cy="122.11943"
sodipodi:r1="10.101272"
sodipodi:r2="5.0506358"
sodipodi:arg1="-3.0999501"
sodipodi:arg2="-2.4716315"
inkscape:flatsided="false"
inkscape:rounded="0"
inkscape:randomized="0"
d="M 309.9243,121.69891 L 316.0579,118.98321 L 317.298,112.39093 L 321.77616,117.38513 L 328.42901,116.52741 L 325.06307,122.32969 L 327.93465,128.39187 L 321.37622,126.98368 L 316.49812,131.58803 L 315.81072,124.91544 L 309.9243,121.69891 z"
transform="matrix(1.296298,0,0,1.2962963,-129.23732,-104.86482)" />
<path
sodipodi:type="star"
style="opacity:1;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3262"
sodipodi:sides="5"
sodipodi:cx="183.76787"
sodipodi:cy="151.13541"
sodipodi:r1="4.6257358"
sodipodi:r2="2.3128679"
sodipodi:arg1="3.1415927"
sodipodi:arg2="3.7699112"
inkscape:flatsided="false"
inkscape:rounded="0"
inkscape:randomized="0"
d="M 179.14213,151.13541 L 181.89672,149.77594 L 182.33844,146.73607 L 184.48258,148.93574 L 187.51017,148.41647 L 186.08074,151.13541 L 187.51017,153.85435 L 184.48258,153.33507 L 182.33844,155.53474 L 181.89672,152.49488 L 179.14213,151.13541 z"
transform="matrix(1.296298,0,0,1.2962963,-129.23732,-104.86482)" />
<path
sodipodi:type="star"
style="opacity:1;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3266"
sodipodi:sides="5"
sodipodi:cx="253.15392"
sodipodi:cy="124.64256"
sodipodi:r1="6.6490278"
sodipodi:r2="3.3245139"
sodipodi:arg1="-0.96525166"
sodipodi:arg2="-0.33693313"
inkscape:flatsided="false"
inkscape:rounded="0"
inkscape:randomized="0"
d="M 256.93861,119.17578 L 256.2915,123.5435 L 259.52267,126.55269 L 255.16876,127.28696 L 253.30533,131.28987 L 251.26157,127.37595 L 246.87874,126.84069 L 249.96954,123.6875 L 249.12423,119.35378 L 253.07821,121.31891 L 256.93861,119.17578 z"
transform="matrix(1.296298,0,0,1.2962963,-129.23732,-104.86482)" />
<path
sodipodi:type="star"
style="opacity:1;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3260"
sodipodi:sides="5"
sodipodi:cx="148.86459"
sodipodi:cy="123.80151"
sodipodi:r1="9.2227554"
sodipodi:r2="4.6113777"
sodipodi:arg1="-2.7187387"
sodipodi:arg2="-2.0904202"
inkscape:flatsided="false"
inkscape:rounded="0"
inkscape:randomized="0"
d="M 140.45416,120.01682 L 146.5748,119.79881 L 149.86509,114.63319 L 151.9638,120.38688 L 157.89336,121.91987 L 153.06981,125.69386 L 153.44419,131.80692 L 148.36435,128.38568 L 142.66617,130.63077 L 144.35021,124.74234 L 140.45416,120.01682 z"
transform="matrix(1.296298,0,0,1.2962963,-129.23732,-104.86482)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB