============================================================
=----------------------------------------------------------=
=----------------------(  VSCycles  )----------------------=
=----------------------------------------------------------=
============================================================

-VSCycles v1.0-
Lowser-compatable Distribution
An NGDesigns Creation
'NeonGenesis' - adam_gertenbach AT yahoo DOT com

----
If anyone is interested in assisting me in converting this
game to a stand-alone application, please contact me. I have
already set up an icon0.png and pic1.png file, and just need
someone with all the necessary toolchains installed, etc.
----

-----------------------
How to Install VSCycles
-----------------------
To use VSCycles, you must have LuaPlayer set up on your PSP,
or some other program capable of loading Lua scripts.

This distribution is compatable with LuaPlayer's 'Lowser'.
To install, copy the complete 'VSCycles' folder to your PSP
in your LuaPlayer's 'Applications' folder.

Example:
\PSP\GAME\luaplayer\Applications\

-----------------
What is VSCycles?
-----------------
VSCycles is a 2D Tron clone for the Sony PSP written in Lua.

For those not familiar with the Tron concept, players control
'lightcycles', moving objects which constantly travel in a
straight line over a playfield and turn in 90 degree intervals.
However, there is a catch. Lightcycles leave a wall trailing
behind them in the same color as the lightcycle.

The goal of the game is simple: Don't Crash. If you crash into
one of your own walls, or leave the play area, you lose a point.
If your opponent crashes into one of your walls, you gain a point.
First player to the winning score wins the match.

To play, move your lightcycle in the play area, taking advantage
of your trailing wall (and the opponent's wall, if you can) to
force the other player into crashing into it.

--------
Controls
--------
VSCycles is a two player game designed for play on a single
PSP. Each player stands on one end of the PSP,

            _____ ___________________________________ _____
           /____/:::::::::::::::::::::::::::::::::::::\____\
  P       /P     ------------------------------------- SONY \       P
  L      /       |                                   |       \      L
  A     |  [^]   |                                   |   (^)  |     A
  Y     |[<] [>] |                                   | () (o)|     Y
  E     |  [v]   |                                   |   (x)  |     E
  R     |        |                                   |        |     R
        |    __  |                                   |        |
  1      \ /  \ |                                   |      /      2
          \\__/ |___________________________________|     /
           \_____ [  ]  []  []  P S P  [] [] [  ] [  ] ____/
            '----|____________________________________/

Player 1 is the Blue Player, and controls the blue lightcycle
with the 'Up' and 'Down' buttons (which will appear as 'Left' and
'Right', respectively, when viewed from that angle), which will turn
the blue lightcycle left or right in relation to its current position.

Player 2 is the Red Player, and controls the red lightcycle with
the 'Triangle' and 'Cross' keys, which will turn the red lightcycle
left or right in relation to its current position.

To exit the current game and return to the main menu, press 'Start'
at any time during the gameplay.

--------------------
How to Play VSCycles
--------------------
VSCycles loads into the main menu by default. From the main menu,
you may choose to start a New Game, view a short guide on 'How to
Play', set your game's Options, or exit VSCycles. Choose your selection
with the arrows and press Cross (X) to confirm.

Under the Options menu, you can currently set the winning score as
either 5, 10, or 15 points, and adjust the gameplay speed from a range
of 0 to 20, with 0 being the slowest, 20 being the fastest, and 15
being the default setting. For more info on Speed settings and Options,
read the FAQ at the end of this document.

Once you select a new game, the screen will display 'Get Ready!'. You
will have a couple of seconds to get both players ready, and then the
game will begin. In the event of a collision with another player or
with the edge of the game field, the game will judge whether to award
or subtract points to a player, or call a draw for the round, and will
display the results on screen. The next round will begin with no further
input after a few seconds. For more information about how the game decides
on a draw, read the FAQ at the end of this document.

Once a player reaches the winning score, the game will display the winner
on screen, and give both players the option to initiate a new game or
return to the main menu.

-------------
Compatability
-------------
VSCycles is distributed in LuaPlayer's 'Lowser' formatting. However, during
the game's development, the dev copy was run from File Assistant. For whatever
reason, loading Lua scripts from FA seemed to lack the ability to use system
timers. For that reason, a custom, non-seconds based timer function was used
instead that will allow VSCycles to be run from File Assistant.

VSCycles has been tested on a 1.5 Firmware PSP running LuaPlayer v0.16, and
on a 1.5 Firmware PSP running File Assistant ++.

If you load VSCycles from another browser/loader, please contact me as to the
results, and any effects on gameplay. Because such things as the timer and the
game speed are based on internal counters, I cannot be absolutely certain that
running VSCycles from a non-tested loader will not adversely affect game speed.

---------------------------
Things to Do / Known Issues
---------------------------

---
Known Issue: The game's actual play speed is based off of two variables, 'step'
and 'speed'. Step determines the length in pixels used for drawing additional
player walls onscreen. Speed determines the wait time between game cycles. As
of the moment, the two are not directly related, so that slower 'speed' variables
in conjunction with the currently locked in pixel step will result in a noticable
choppiness in gameplay. Modifying the step to certain values will "break" the game,
as it is not properly holding control over initial player locations and the play
area size.

To Do: Link the 'step' variable to the initial player location and play area size
so that the relationship between them doesn't "break" the gameplay. Link the 'step'
variable to the 'speed' variable, so that adjustments to 'speed' will adjust the
'step' for smoother images at lower speeds.
---

---
Known Issue: No sound and music!

To Do: I need to find some good, public domain audio and music files to integrate
into the game, instead of just ripping off another Tron clone's sounds.
---

Other Things to Do: 
-Impliment all originally intended graphical effects. I started to develop several
game effects, such as an active background, collision effects, animated cycles,
and several other special effects. However, I wanted to release 1.0 as just the
core game, because I am not sure how some of those concepts will pan out. Look for
them in future versions.
-Design an A.I. system for single player games. Not my specialty, though, so don't
look for this one any time soon...
-Impliment multiple control schemes. I used a fairly simple control scheme, but in
the few chances I have had to test the game with other people, there were attempts
to use all four directional buttons to control the cycle in an absolute instead
of relative manner. I may put this in as an option in future versions if there is
any requests for it.
-Code Cleanup. There is still a bunch of inefficient and unrequired code lurking
around in the VSCycles source. Some of it is there for the purpose of adding some
of the above graphical effects in later versions, some of it is not.
-----------------------------------
F.A.Q. (Frequently Asked Questions)
-----------------------------------
Okay, so it's not really frequently asked questions, as this is v1.0, and no
one has asked any, yet. So, let's consider it the "L.A.Q. (Likely Asked Questions)",
instead...

---
Question: Can I use 'insert code snippet or graphic' in one of my games?

Answer: Most likely, yes, as long as you give proper credit. All of the graphics in
VSCycles, minus the image of the PSP on the 'How to Play' menu, were created by
NGDesigns. If you would like to reuse or modify any of these graphics, please contact
me by e-mail beforehand for express permission. As far as the code, all of the code
except the 'Rotate.lua' functions (clearly defined in the code) were written from
scratch by NeonGenesis/NGDesigns. I do not mind if you use sections of my code without
e-mailing me first, but I do ask that you give me credit for them. And yes, the ASCII
graphic of the PSP in the ReadMe is my creation. Use it freely, please give credit.
---
Question: What criteria does the game use to determine what happens when both
players collide with something at the same time?

Answer: There are several 'multiple collision' circumstances which the game tests for.
If both players attempt to move to the same location, regardless of direction, the game
will call 'Draw!'. If both players collide with their own walls at the same time, the
game will call 'Draw'!. If either player leaves the play field and the other player
collides with any wall at the same time, the game will call 'Draw!'. Lastly, if both
players leave the play field at the same time, the game will call 'Draw!'. The only
multiple collision that will affect points is if one player collides with their own
wall at the same time the other player collides with the first player's wall. The
collision with the player's own wall takes priority, and that player will lose a point.
---
Question: What does 'insert code snippet/function' do?

Answer: For the purpose of assisting people new to programming, or those curious as
to how I performed a particular action or effect in the game,  I have included a
special commented copy of the VSCycles source in the '/src' directory. It is provided
in regular text format, but will run perfectly fine as a Lua script if renamed with
a '.lua' extension. Again, you are welcome to reuse portions of my code, but I do ask
that you give proper credit for it.
---
Question: Why is your code so sloppy/inefficient/redundant/[insert word here]?

Answer: Well, probably one of three reasons. First, I've only been working with Lua and
the PSP in any development capacity for about a week. VSCycles is my first complete
Lua project, and I am still familiarizing myself with Lua/PSP specifics, so there is
bound to be some redundancy and inefficiency with te code. Second, this is VSCycles 1.0,
which means just that; it is the first release version. Third, I wrote some portions of
the code to be receptive to future planned additions, particularly graphical, so I have
left some redundancy to allow changes to particular events/situations.

---------------------------------------------------------------------------------
About NGDesigns / Credits/ Distribution / Contact Information / How to Contribute
---------------------------------------------------------------------------------

NGDesigns is:
'NeonGenesis' - adam_gertenbach AT yahoo DOT com

Yes, that's it! It's had more members in the past, but as of the current, it is just one
person again. However, NGDesigns is the label I have used on many of my past projects,
and so it continues to be so. 

----------------------------------
Thanks go out to:
-Anyone and everyone who has developed anything for the PSP. My PSP would not have
been worth the price tag if it weren't for all the homebrew developers out there.

-The LuaPlayer team. Lua is very powerful and flexible for the level of complexity
required to develop with it. Thanks for making it possible to use it on the PSP!

-'Shine', for his 'Snake' distribution included in the LuaPlayer package. It was
extremely valuable to me in learning proper Lua syntax and PSP specific functions.
Thanks also go to Shine, if I am not mistaken, for the text rotating functions
provided in the LuaPlayer samples.
----------------------------------

I have a few more PSP Lua projects in the works, including a 'Qix' clone, some digital
board games, and 'Tetrikus', a Tetris clone that integrates an adaptive graphics design
scheme (Graphics improve/decrease based on gameplay - think 'Rez').

If you would like to contribute to VSCycles or future NGDesigns creations, I am in
need of suitable, free, high-traffic web hosting, preferably ad-free, for a homepage
for NGDesigns. If you would be willing to host a site, as well as NGDesigns projects
for distribution, please contact me.

Also, I am in desparate need of computer hardware, as well as development software. I am
currently using a PII 266mhz laptop with 64mb RAM, with a dial-up connection. If you have
any extra hardware lying around that you would be willing to donate and ship to me, please
contact me. Also, the dial up connection makes it extremely difficult to download most
development suites for the PSP in any reasonable time. If anyone would be willing to burn
me a CD and mail it to me, it would be greatly appreciated, so please contact me.

All of the code except the 'Rotate.lua' functions were created from scratch by NeonGenesis/
NGDesigns. All of the graphics except the photo of the PSP in the 'How To Play' menu were
created by NeonGenesis/NGDesigns.

The 'VSCycles' package, minus those specifically credited to other authors, is the intellectual
property of NGDesigns.

'VSCycles' is free to distribute, as long as all included files in the package remain unmodified.
No right to charge for this package is given to any party. Any persons wishing to use or modify
any portion of 'VSCycles' graphics for anything but personal, private use must request and
receive express permission from NGDesigns. Any persons wishing to use/reuse portions of the code
to 'VSCycles' are free to do so without the express consent of NGDesigns, provided proper credit
is reasonably given to NGDesigns. Any persons wishing to modify and/or edit and rerelease the 'VSCycles'
package must have express permission from NGDesigns. NGDesigns is not responsible for any damages
caused by 'VSCycles' to any console on which it is run or stored, nor is NGDesigns responsible for
damages due to the use of unofficial or modified 'VSCycles' packages. As with all games, there is
the risk of epileptic seizures caused by flashing lights. NGDesigns cannot be held responsible for
any negative effects on the user from using 'VSCycles'.

Also, in 'legalese':
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTA-
BILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTI-
TUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION
) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
