2315 lines
39 KiB
Text
2315 lines
39 KiB
Text
#LyX 2.3 created this file. For more info see http://www.lyx.org/
|
||
\lyxformat 544
|
||
\begin_document
|
||
\begin_header
|
||
\save_transient_properties true
|
||
\origin unavailable
|
||
\textclass scrartcl
|
||
\use_default_options true
|
||
\begin_modules
|
||
theorems-ams
|
||
eqs-within-sections
|
||
figs-within-sections
|
||
\end_modules
|
||
\maintain_unincluded_children false
|
||
\language english
|
||
\language_package default
|
||
\inputencoding auto
|
||
\fontencoding global
|
||
\font_roman "default" "default"
|
||
\font_sans "default" "default"
|
||
\font_typewriter "default" "default"
|
||
\font_math "auto" "auto"
|
||
\font_default_family default
|
||
\use_non_tex_fonts false
|
||
\font_sc false
|
||
\font_osf false
|
||
\font_sf_scale 100 100
|
||
\font_tt_scale 100 100
|
||
\use_microtype false
|
||
\use_dash_ligatures true
|
||
\graphics default
|
||
\default_output_format default
|
||
\output_sync 0
|
||
\bibtex_command default
|
||
\index_command default
|
||
\paperfontsize default
|
||
\spacing single
|
||
\use_hyperref false
|
||
\papersize default
|
||
\use_geometry false
|
||
\use_package amsmath 1
|
||
\use_package amssymb 1
|
||
\use_package cancel 1
|
||
\use_package esint 1
|
||
\use_package mathdots 1
|
||
\use_package mathtools 1
|
||
\use_package mhchem 1
|
||
\use_package stackrel 1
|
||
\use_package stmaryrd 1
|
||
\use_package undertilde 1
|
||
\cite_engine basic
|
||
\cite_engine_type default
|
||
\biblio_style plain
|
||
\use_bibtopic false
|
||
\use_indices false
|
||
\paperorientation portrait
|
||
\suppress_date false
|
||
\justification true
|
||
\use_refstyle 1
|
||
\use_minted 0
|
||
\index Index
|
||
\shortcut idx
|
||
\color #008000
|
||
\end_index
|
||
\secnumdepth 3
|
||
\tocdepth 3
|
||
\paragraph_separation indent
|
||
\paragraph_indentation default
|
||
\is_math_indent 0
|
||
\math_numbering_side default
|
||
\quotes_style english
|
||
\dynamic_quotes 0
|
||
\papercolumns 1
|
||
\papersides 1
|
||
\paperpagestyle default
|
||
\tracking_changes false
|
||
\output_changes false
|
||
\html_math_output 0
|
||
\html_css_as_file 0
|
||
\html_be_strict false
|
||
\end_header
|
||
|
||
\begin_body
|
||
|
||
\begin_layout Title
|
||
Singe
|
||
\end_layout
|
||
|
||
\begin_layout Subtitle
|
||
the Somewhat Interactive Nostalgic Game Engine
|
||
\end_layout
|
||
|
||
\begin_layout Author
|
||
Kangaroo Punch Studios
|
||
\end_layout
|
||
|
||
\begin_layout Publishers
|
||
https://SingeEngine.com
|
||
\end_layout
|
||
|
||
\begin_layout Date
|
||
Copyright 2006-2024 © Scott Duensing
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
\begin_inset CommandInset toc
|
||
LatexCommand tableofcontents
|
||
|
||
\end_inset
|
||
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Part
|
||
About Singe
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
Singe, the Somewhat Interactive Nostalgic Game Engine, (named after the
|
||
dragon in Dragon's Lair) is a Lua-based scripting system that allows for
|
||
rapid prototyping of new laserdisc games, or the creation of entirely new
|
||
games! The language is easy to learn, very powerful, and fast.
|
||
All the features needed to develop your own game are made available through
|
||
a simple application programming interface (API).
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
SINGE provides numerous features to the game developer.
|
||
Some of the more interesting ones are:
|
||
\end_layout
|
||
|
||
\begin_layout Itemize
|
||
Object-Oriented Programming Language
|
||
\end_layout
|
||
|
||
\begin_layout Itemize
|
||
Animated Sprites
|
||
\end_layout
|
||
|
||
\begin_layout Itemize
|
||
TrueType Font Support
|
||
\end_layout
|
||
|
||
\begin_layout Itemize
|
||
32-bit Color Space with Transparency
|
||
\end_layout
|
||
|
||
\begin_layout Itemize
|
||
Multi-Channel, Overlapping, Stereo Sound
|
||
\end_layout
|
||
|
||
\begin_layout Itemize
|
||
Analog and Digital Input Device Support
|
||
\end_layout
|
||
|
||
\begin_layout Itemize
|
||
Wide Support for Video and Audio Formats
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
For players, Singe allows many unemulated and new games to be enjoyed using
|
||
any desired front end or via the included menu system.
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
Since the original release of Singe back in 2006, several revisions have
|
||
been released, both officially and unofficially.
|
||
In 2020, Singe 2.00 was released.
|
||
This was a total rewrite from the ground up adding numerous features while
|
||
staying compatible with existing 1.xx games.
|
||
As of the writing of this manual, the latest release is 2.10.
|
||
\end_layout
|
||
|
||
\begin_layout Part
|
||
Installation and Upgrading
|
||
\end_layout
|
||
|
||
\begin_layout Section
|
||
Installing Singe
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
To install Singe, simply download the appropriate binary for your system.
|
||
Place it in a new folder by itself and run it.
|
||
On the first run, Singe will create all the necessary directories and support
|
||
files needed.
|
||
You’re now ready to install some games!
|
||
\end_layout
|
||
|
||
\begin_layout Section
|
||
Upgrading Singe
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
To upgrade Singe to a newer version, place the new binary in the installation
|
||
folder and rename (or delete) the existing <InstallDir>/Singe folder.
|
||
As with the initial installation, run the new binary with no command line
|
||
arguments to generate the new support files.
|
||
DO NOT run a new Singe binary with an out-of-date set of support files!
|
||
\end_layout
|
||
|
||
\begin_layout Section
|
||
Things to Know
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
Don't touch the Singe/ folder!
|
||
\end_layout
|
||
|
||
\begin_layout Part
|
||
Usage
|
||
\end_layout
|
||
|
||
\begin_layout Section
|
||
Installing Games
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
Games designed for Singe 2.x and later simply need to be unpacked and copied
|
||
into the same folder where you placed the Singe binary.
|
||
The included menu system will automatically detect them and add them to
|
||
the menu.
|
||
\end_layout
|
||
|
||
\begin_layout Section
|
||
Customizing the Controls
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
By default, Singe maps controllers as if they were Xbox 360 gamepads.
|
||
If your controller is not recognized or you wish to change the default
|
||
mappings as they appear to Singe, you can use the free SDL2 Gamepad Tool
|
||
from http://generalarcade.com/gamepadtool/.
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
In addition to configuring your controller, you can remap all the input
|
||
options for Singe as a whole or for any individual game by using controls.cfg
|
||
files.
|
||
When determining how inputs are mapped, Singe begins with the default settings
|
||
and then applies changes specified in controls.cfg files in the following
|
||
order:
|
||
\end_layout
|
||
|
||
\begin_layout Enumerate
|
||
1.
|
||
The main data directory
|
||
\end_layout
|
||
|
||
\begin_layout Enumerate
|
||
2.
|
||
The per-game data directory
|
||
\end_layout
|
||
|
||
\begin_layout Enumerate
|
||
3.
|
||
The game script directory
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
After installing Singe, you can find a sample input configuration file at
|
||
<InstallDir>/Singe/controls.cfg.example.
|
||
To see the available configuration options available to be used in this
|
||
file, read through <InstallDir>/Singe/Framework.singe.
|
||
\end_layout
|
||
|
||
\begin_layout Part
|
||
Frequently Asked Questions
|
||
\end_layout
|
||
|
||
\begin_layout Itemize
|
||
Why is it named Singe?
|
||
\end_layout
|
||
|
||
\begin_layout Quotation
|
||
Singe is the name of the dragon in Dragon's Lair.
|
||
As Singe (the program) began as an add-on to Daphne (the princess in Dragon's
|
||
Lair) I kept with the Dragon's Lair theme.
|
||
\end_layout
|
||
|
||
\begin_layout Itemize
|
||
What is the difference between Daphne, Singe, Hypseus, and Singe 2.x?
|
||
\end_layout
|
||
|
||
\begin_layout Quotation
|
||
Daphne is an actual laserdisc game emulator that can run a handful of classic
|
||
laser games.
|
||
Daphne/Singe or Singe 1.x is the original version of Singe that was an add-on
|
||
for the Daphne emulator.
|
||
Originally it was shipped as a game DLL for Daphne and then later combined
|
||
into a single binary with the Daphne emulation features removed.
|
||
Hypseus-Singe is an enhanced fork of Daphne with Singe 1.x and some Singe
|
||
2.x support.
|
||
Finally, Singe 2.x is an all-new, built-from-scratch, upgrade of the original
|
||
Singe.
|
||
In short, if you want accuracy, use Daphne or Hypseus if they support emulating
|
||
the desired game.
|
||
If it's a Singe game, use Singe 2.x or you can try Hypseus.
|
||
Obviously we'd like you to use Singe 2.x.
|
||
:-)
|
||
\end_layout
|
||
|
||
\begin_layout Itemize
|
||
Why should we not call it an "emulator"?
|
||
\end_layout
|
||
|
||
\begin_layout Quotation
|
||
Emulators use the real software or ROMs from the original game and pretend
|
||
to be the machine they were originally intended to run on.
|
||
From the game's perspective, it's business as usual.
|
||
Singe, on the other hand, requires that every game be re-implemented (aka
|
||
"ported") to run on Singe.
|
||
While the end result may be very similar, how it works is entirely different.
|
||
\end_layout
|
||
|
||
\begin_layout Itemize
|
||
Can I run Singe 1.x games on Singe 2.x?
|
||
\end_layout
|
||
|
||
\begin_layout Quotation
|
||
Yes! Probably.
|
||
But you likely won't want to.
|
||
Almost everything (that I know of) from Singe 1.x has been converted and
|
||
enhanced for Singe 2.x.
|
||
\end_layout
|
||
|
||
\begin_layout Itemize
|
||
Why does the game I just installed not show in the menu?
|
||
\end_layout
|
||
|
||
\begin_layout Quotation
|
||
Whoever packaged the game failed to include a proper games.dat file.
|
||
Yell at them!
|
||
\end_layout
|
||
|
||
\begin_layout Itemize
|
||
Why is HD video slow?
|
||
\end_layout
|
||
|
||
\begin_layout Quotation
|
||
Due to the way Singe accesses video files to provide frame seeking, it is
|
||
unable to offload video decoding to the video card.
|
||
High definition video requires a lot of CPU!
|
||
\end_layout
|
||
|
||
\begin_layout Itemize
|
||
Why does my audio stutter?
|
||
\end_layout
|
||
|
||
\begin_layout Quotation
|
||
Users have discovered that most Singe audio and stuttering problems are
|
||
related to their installed audio driver - especially Realtek based devices.
|
||
Try updating your sound drivers or switching to the generic Windows HD
|
||
Audio driver.
|
||
Disable surround sound - use stereo, not 5.1 or 7.1.
|
||
If your drivers do not allow you to use stereo, you can use Virtual Audio
|
||
Cable to fix this.
|
||
\end_layout
|
||
|
||
\begin_layout Enumerate
|
||
Install VB-CABLE.
|
||
https://vb-audio.com/Cable/
|
||
\end_layout
|
||
|
||
\begin_layout Enumerate
|
||
Go to Windows sound settings (right-click sound on the taskbar then Sounds
|
||
and then Playback).
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Enumerate
|
||
Right-click the Cable Input device and choose "Set as default device".
|
||
(You will lose your current sound output.
|
||
Don't panic.)
|
||
\end_layout
|
||
|
||
\begin_layout Enumerate
|
||
Go to the Recording tab.
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Enumerate
|
||
Right-click Cable Output, then Properties, then Listen, and finally Enable
|
||
Listen to This Device and in the drop-down list choose your actual listening
|
||
device.
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Enumerate
|
||
You should have sound again.
|
||
Load up Singe, and your audio will be working and lag free!
|
||
\end_layout
|
||
|
||
\begin_layout Part
|
||
History
|
||
\end_layout
|
||
|
||
\begin_layout Part
|
||
Game Development
|
||
\end_layout
|
||
|
||
\begin_layout Section
|
||
Lua
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
Singe uses the Lua programming language (http://www.lua.org) for scripting
|
||
game logic.
|
||
Lua is fast, lightweight, object-oriented, easy to use, and actually used
|
||
in the games industry.
|
||
A tutorial in Lua is beyond the scope of this document.
|
||
You can find video tutorials for Lua on our YouTube channel and additional
|
||
documentation by searching the web.
|
||
\end_layout
|
||
|
||
\begin_layout Section
|
||
Basic Rules
|
||
\end_layout
|
||
|
||
\begin_layout Itemize
|
||
Singe is cross-platform, therefore, things you don't normally need to worry
|
||
about on Windows are important.
|
||
Filenames are case sensitive.
|
||
"MyScript.singe" and "myscript.singe" are not the same thing! Also, you should
|
||
use UNIX path separators - that is "/" instead of "
|
||
\backslash
|
||
".
|
||
Not only will this make your code look better (since you don't have to
|
||
duplicate the forward slash to escape it) but it works everywhere Singe
|
||
is supported.
|
||
\end_layout
|
||
|
||
\begin_layout Itemize
|
||
Pick a distinctive name for your game folder.
|
||
Do not use spaces.
|
||
\end_layout
|
||
|
||
\begin_layout Itemize
|
||
Use the included Singe Framework.
|
||
Do not make a copy of this framework in your game scripts! By including
|
||
the provided framework you help with future compatibility as Singe is updated.
|
||
Begin (or end) your game script with:
|
||
\end_layout
|
||
|
||
\begin_layout LyX-Code
|
||
dofile("Singe/Framework.singe")
|
||
\end_layout
|
||
|
||
\begin_layout Itemize
|
||
Stay out of the "Singe" folder.
|
||
This is managed by Singe and anything added or changed here is subject
|
||
to future deletion.
|
||
\end_layout
|
||
|
||
\begin_layout Itemize
|
||
Include a games.dat! This is extremely important for new users! While other
|
||
front ends and Singe-based menu systems exist, it's vital that you include
|
||
data for the built-in menu system.
|
||
Almost all support issues are due to this one simple little file!
|
||
\end_layout
|
||
|
||
\begin_layout Itemize
|
||
Do not distribute non-essential files.
|
||
Never ship Singe binaries or Singe provided scripts with your game! Do
|
||
not ship index files generated from the videos.
|
||
\end_layout
|
||
|
||
\begin_layout Section
|
||
Event Driven...
|
||
Or Not?
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
Traditionally, Singe used an event-driven programming model.
|
||
That is, Singe handles everything and only calls your code when it needs
|
||
to tell you something or update the screen.
|
||
This is very efficient and is how most Lua-based game engines handle things.
|
||
However, it can be very verbose.
|
||
As of Singe 2.10 there is a new
|
||
\begin_inset Quotes eld
|
||
\end_inset
|
||
|
||
threaded
|
||
\begin_inset Quotes erd
|
||
\end_inset
|
||
|
||
model that allows you to write procedural code.
|
||
\end_layout
|
||
|
||
\begin_layout Subsection
|
||
Event Driven
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
With the event-driven programming model, Singe controls the main "program
|
||
loop" and is in charge of the order of program execution.
|
||
Singe automatically handles all the details of decoding and presenting
|
||
video and audio.
|
||
It manages controllers, mice, and keyboard input.
|
||
When Singe needs something game-specific, it calls part of your script.
|
||
The most basic Singe script that demonstrates all the existing "callbacks"
|
||
used by Singe looks like this:
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
\begin_inset listings
|
||
lstparams "basicstyle={\scriptsize},tabsize=4"
|
||
inline false
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
-- Singe Game Skeleton.
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
-- Load the Singe Framework.
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
dofile("Singe/Framework.singe")
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
-- Declare any global variables you need here.
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
function onControllerMoved(axis, value, which)
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
--[[
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
Reports which controller axis was moved as well as it's current value.
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
(Range: -32768 to 32767) This is used for analog devices.
|
||
Digial input
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
is handled by onInput and onKey.
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
--]]
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
end
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
function onInputPressed(what)
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
--[[
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
When in keyboard MODE_NORMAL, input events are reported here when the
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
key or button is first depressed.
|
||
For a full list of keys/buttons/controllers,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
see Singe/Framework.singe.
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
For MODE_FULL, this event will be called with the keysym of the key pressed.
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
--]]
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
end
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
function onInputReleased(what)
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
--[[
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
When in keyboard MODE_NORMAL, input events are reported here when the
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
key or button is released.
|
||
For a full list of keys/buttons/controllers,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
see Singe/Framework.singe.
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
For MODE_FULL, this event will be called with the keysym of the key released.
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
--]]
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
end
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
function onKeyPressed(key, scancode)
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
--[[
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
When in keyboard MODE_FULL, input events are reported here when the key
|
||
is
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
pressed.
|
||
Both the keysym and scancode are returned.
|
||
For a list of available
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
scancodes, see Singe/Framework.singe.
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
--]]
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
end
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
function onKeyReleased(key, scancode)
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
--[[
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
When in keyboard MODE_FULL, input events are reported here when the key
|
||
is
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
released.
|
||
Both the keysym and scancode are returned.
|
||
For a list of available
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
scancodes, see Singe/Framework.singe.
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
--]]
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
end
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
function onMouseMoved(x, y, xr, yr, which)
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
--[[
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
Called when the mouse is moved.
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
When in SINGLE_MOUSE mode, absolute X & Y values as well as the
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
relative change in position is returned.
|
||
For MANY_MOUSE mode, only
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
the relative change is available as well as which mouse was moved.
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
--]]
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
end
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
function onOverlayUpdate()
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
--[[
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
This is the only place you can safely perform drawing operations!
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
If you wish to display a targeting cursor, you will need to save the
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
mouse position from onMouseMoved in global variables and then use those
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
here to render the cursor.
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
--]]
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
-- Tell Singe if we changed the display or not.
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
return(OVERLAY_UPDATED) -- Or OVERLAY_NOT_UPDATED if no drawing was done.
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
end
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
function onShutdown()
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
-- Called when the user exits your game.
|
||
Free loaded resources here.
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
end
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
function onSoundCompleted(id)
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
-- The sound "id" just finished playing.
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
end
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
-- Note: There is no "onStartup" event.
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
-- Any startup code you need can be placed here.
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Subsection
|
||
Threaded
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
As of Singe 2.10, you can now use the classic procedural programming model.
|
||
In order for this to work, you declare a
|
||
\begin_inset Quotes eld
|
||
\end_inset
|
||
|
||
singeMain()
|
||
\begin_inset Quotes erd
|
||
\end_inset
|
||
|
||
function and include the Singe framework at the end of your program rather
|
||
than at the beginning.
|
||
Lua is not truly multithreaded so this model relies on the game developer
|
||
- you - to cooperatively multitask by calling
|
||
\begin_inset Quotes eld
|
||
\end_inset
|
||
|
||
singeYield()
|
||
\begin_inset Quotes erd
|
||
\end_inset
|
||
|
||
anywhere your code consumes any substantial amount of time.
|
||
As with the event-driven model, Singe still manages all input, video decoding,
|
||
etc.
|
||
A sample threaded program looks like this:
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
\begin_inset listings
|
||
lstparams "basicstyle={\scriptsize},tabsize=4"
|
||
inline false
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
function singeMain()
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
x = 10
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
y = 10
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
while(true) do
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
colorBackground(0, 0, 0, 255)
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
overlayClear()
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
colorForeground(255, 255, 255, 255)
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
overlayPrint(x, y, "+")
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
if keyboardGetLastUp() == SCANCODE.LEFT.value then x = x - 1 end
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
if keyboardGetLastUp() == SCANCODE.RIGHT.value then x = x + 1 end
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
if keyboardGetLastUp() == SCANCODE.UP.value then y = y - 1 end
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
if keyboardGetLastUp() == SCANCODE.DOWN.value then y = y + 1 end
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
singeYield()
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
end
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
end
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
dofile("Singe/Framework.singe")
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Section
|
||
games.dat
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
The games.dat file allows Singe to automatically locate new games when they
|
||
are installed by the end user.
|
||
This file is extremely important and must be included with every Singe
|
||
game! Place games.dat in the top-most directory of your game.
|
||
An example (containing multiple games) is below:
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
\begin_inset listings
|
||
lstparams "basicstyle={\scriptsize},tabsize=4"
|
||
inline false
|
||
status open
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
GAMES = {
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
{
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
TITLE = ".38 Ambush Alley",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
SCRIPT = "ActionMax/38AmbushAlley.singe",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
VIDEO = "ActionMax/frame_38AmbushAlley.txt",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
DATA = "ActionMax",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
STRETCH = false,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
NO_MOUSE = false,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
RESOLUTION_X = 720,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
RESOLUTION_Y = 480,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
SINDEN_GUN = "",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
CABINET = "ActionMax/cabinet_38AmbushAlley.png",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
MARQUEE = "ActionMax/marquee_ActionMax.png",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
ATTRACT = "ActionMax/video_38AmbushAlley.mkv",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
ATTRACT_START = 3000,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
ATTRACT_END = 3500,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
YEAR = 1987,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
PLATFORM = "ActionMax",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
DEVELOPER = "Sourcing International, Ltd.",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
PUBLISHER = "Worlds of Wonder, Inc.",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
GENRE = "Shooter",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
DESCRIPTION = "Get your target practice in with real police officers
|
||
then hit the streets.",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
CREATOR = "Scott Duensing",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
SOURCE = "http://kangaroopunch.com"
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
},
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
{
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
TITLE = "Blue Thunder",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
SCRIPT = "ActionMax/BlueThunder.singe",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
VIDEO = "ActionMax/frame_BlueThunder.txt",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
DATA = "ActionMax",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
STRETCH = false,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
NO_MOUSE = false,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
RESOLUTION_X = 720,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
RESOLUTION_Y = 480,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
SINDEN_GUN = "",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
CABINET = "ActionMax/cabinet_BlueThunder.png",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
MARQUEE = "ActionMax/marquee_ActionMax.png",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
ATTRACT = "ActionMax/video_BlueThunder.mkv",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
ATTRACT_START = 3000,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
ATTRACT_END = 3500,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
YEAR = 1987,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
PLATFORM = "ActionMax",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
DEVELOPER = "Sourcing International, Ltd.",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
PUBLISHER = "Worlds of Wonder, Inc.",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
GENRE = "Shooter",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
DESCRIPTION = "Get in your chopper and take out the bad guys in this
|
||
action-packed game.",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
CREATOR = "Scott Duensing",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
SOURCE = "http://kangaroopunch.com"
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
},
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
{
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
TITLE = "Hydrosub: 2021",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
SCRIPT = "ActionMax/Hydrosub2021.singe",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
VIDEO = "ActionMax/frame_Hydrosub2021.txt",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
DATA = "ActionMax",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
STRETCH = false,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
NO_MOUSE = false,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
RESOLUTION_X = 720,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
RESOLUTION_Y = 480,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
SINDEN_GUN = "",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
CABINET = "ActionMax/cabinet_Hydrosub2021.png",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
MARQUEE = "ActionMax/marquee_ActionMax.png",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
ATTRACT = "ActionMax/video_Hydrosub2021.mkv",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
ATTRACT_START = 3000,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
ATTRACT_END = 3500,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
YEAR = 1987,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
PLATFORM = "ActionMax",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
DEVELOPER = "Sourcing International, Ltd.",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
PUBLISHER = "Worlds of Wonder, Inc.",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
GENRE = "Shooter",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
DESCRIPTION = "Shootout beneath the ocean!",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
CREATOR = "Scott Duensing",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
SOURCE = "http://kangaroopunch.com"
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
},
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
{
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
TITLE = "Rescue of Pops Ghostly, The",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
SCRIPT = "ActionMax/PopsGhostly.singe",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
VIDEO = "ActionMax/frame_PopsGhostly.txt",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
DATA = "ActionMax",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
STRETCH = false,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
NO_MOUSE = false,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
RESOLUTION_X = 720,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
RESOLUTION_Y = 480,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
SINDEN_GUN = "",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
CABINET = "ActionMax/cabinet_PopsGhostly.png",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
MARQUEE = "ActionMax/marquee_ActionMax.png",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
ATTRACT = "ActionMax/video_PopsGhostly.mkv",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
ATTRACT_START = 3000,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
ATTRACT_END = 3500,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
YEAR = 1987,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
PLATFORM = "ActionMax",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
DEVELOPER = "Sourcing International, Ltd.",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
PUBLISHER = "Worlds of Wonder, Inc.",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
GENRE = "Shooter",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
DESCRIPTION = "Help Pops Ghostly and his family get rid of the bad spirits
|
||
who have taken over the house.",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
CREATOR = "Scott Duensing",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
SOURCE = "http://kangaroopunch.com"
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
},
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
{
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
TITLE = "Sonic Fury",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
SCRIPT = "ActionMax/SonicFury.singe",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
VIDEO = "ActionMax/frame_SonicFury.txt",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
DATA = "ActionMax",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
STRETCH = false,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
NO_MOUSE = false,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
RESOLUTION_X = 720,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
RESOLUTION_Y = 480,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
SINDEN_GUN = "",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
CABINET = "ActionMax/cabinet_SonicFury.png",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
MARQUEE = "ActionMax/marquee_ActionMax.png",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
ATTRACT = "ActionMax/video_SonicFury.mkv",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
ATTRACT_START = 3000,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
ATTRACT_END = 3500,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
YEAR = 1987,
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
PLATFORM = "ActionMax",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
DEVELOPER = "Sourcing International, Ltd.",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
PUBLISHER = "Worlds of Wonder, Inc.",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
GENRE = "Shooter",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
DESCRIPTION = "Shoot it out with the bad guys in your fighter jet!",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
CREATOR = "Scott Duensing",
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
SOURCE = "http://kangaroopunch.com"
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
}
|
||
\end_layout
|
||
|
||
\begin_layout Plain Layout
|
||
|
||
}
|
||
\end_layout
|
||
|
||
\end_inset
|
||
|
||
|
||
\end_layout
|
||
|
||
\begin_layout Section
|
||
Included Libraries
|
||
\end_layout
|
||
|
||
\begin_layout Section
|
||
API
|
||
\end_layout
|
||
|
||
\begin_layout Subsection
|
||
Color
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
colorBackground
|
||
\end_layout
|
||
|
||
\begin_layout LyX-Code
|
||
colorBackground(r, g, b)
|
||
\end_layout
|
||
|
||
\begin_layout LyX-Code
|
||
colorBackground(r, g, b, o)
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
Specifies the background color to use for following drawing operations.
|
||
Red, green, blue, and opacity values are from 0 to 255.
|
||
If you omit the opacity value, it will default to 0 (transparent).
|
||
The three-argument version of this function is to provide compatibility
|
||
with earlier Singe releases.
|
||
\end_layout
|
||
|
||
\begin_layout Labeling
|
||
\labelwidthstring 00.00.0000
|
||
Example:
|
||
\end_layout
|
||
|
||
\begin_layout LyX-Code
|
||
colorBackground(255, 0, 0, 255) – Solid Red
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
colorForeground
|
||
\end_layout
|
||
|
||
\begin_layout LyX-Code
|
||
colorForeground(r, g, b)
|
||
\end_layout
|
||
|
||
\begin_layout LyX-Code
|
||
colorForeground(r, g, b, o)
|
||
\end_layout
|
||
|
||
\begin_layout Standard
|
||
Specifies the foreground color to use for following drawing operations.
|
||
Red, green, blue, and opacity values are from 0 to 255.
|
||
If you omit the opacity value, it will default to 255 (opaque).
|
||
The three-argument version of this function is to provide compatibility
|
||
with earlier Singe releases.
|
||
\end_layout
|
||
|
||
\begin_layout Labeling
|
||
\labelwidthstring 00.00.0000
|
||
Example:
|
||
\end_layout
|
||
|
||
\begin_layout LyX-Code
|
||
colorForeground(255, 255, 255, 255) – Solid White
|
||
\end_layout
|
||
|
||
\begin_layout Subsection
|
||
Controller
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
controllerGetAxis
|
||
\end_layout
|
||
|
||
\begin_layout Subsection
|
||
Debug
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
debugPrint
|
||
\end_layout
|
||
|
||
\begin_layout Subsection
|
||
Disc
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discAudio
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discChangeSpeed
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discGetAudioTrack
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discGetAudioTracks
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discGetFrame
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discGetHeight
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discGetLanguage
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discGetState
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discGetWidth
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discPause
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discPauseAtFrame
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discPlay
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discSearch
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discSearchBlanking
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discSetAudioTrack
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discSetFPS
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discSkipBackward
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discSkipBlanking
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discSkipForward
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discSkipToFrame
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discStepBackward
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discStepForward
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
discStop
|
||
\end_layout
|
||
|
||
\begin_layout Subsection
|
||
Font
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
fontLoad
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
fontPrint
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
fontQuality
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
fontSelect
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
fontToSprite
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
fontUnload
|
||
\end_layout
|
||
|
||
\begin_layout Subsection
|
||
Keyboard
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
keyboardGetLastDown
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
keyboardGetLastUp
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
keyboardGetMode
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
keyboardGetModifiers
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
keyboardSetMode
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
keyboardIsDown
|
||
\end_layout
|
||
|
||
\begin_layout Subsection
|
||
Mouse
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
mouseEnable
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
mouseDisable
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
mouseGetPosition
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
mouseHowMany
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
mouseSetCaptured
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
mouseSetMode
|
||
\end_layout
|
||
|
||
\begin_layout Subsection
|
||
Overlay
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
overlayBox
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
overlayCircle
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
overlayClear
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
overlayEllipse
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
overlayGetHeight
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
overlayGetWidth
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
overlayLine
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
overlayPlot
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
overlayPrint
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
overlaySetResolution
|
||
\end_layout
|
||
|
||
\begin_layout Subsection
|
||
Script
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
scriptExecute
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
scriptPush
|
||
\end_layout
|
||
|
||
\begin_layout Subsection
|
||
Singe
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
singeDisablePauseKey
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
singeEnablePauseKey
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
singeGetDataPath
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
singeGetHeight
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
singeGetPauseFlag
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
singeGetScriptPath
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
singeGetWidth
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
singeScreenshot
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
singeSetGameName
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
singeSetPauseFlag
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
singeQuit
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
singeVersion
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
singeWantsCrosshairs
|
||
\end_layout
|
||
|
||
\begin_layout Subsection
|
||
Sound
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
soundFullStop
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
soundGetVolume
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
soundIsPlaying
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
soundLoad
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
soundPause
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
soundPlay
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
soundResume
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
soundSetVolume
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
soundStop
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
soundUnload
|
||
\end_layout
|
||
|
||
\begin_layout Subsection
|
||
Sprite
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
spriteDraw
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
spriteGetFrame
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
spriteGetHeight
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
spriteGetWidth
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
spriteIsPlaying
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
spriteLoad
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
spriteLoop
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
spritePause
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
spritePlay
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
spriteQuality
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
spriteRotate
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
spriteRotateAndScale
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
spriteScale
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
spriteSetFrame
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
spriteUnload
|
||
\end_layout
|
||
|
||
\begin_layout Subsection
|
||
Video
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
videoDraw
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
videoGetAudioTrack
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
videoGetAudioTracks
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
videoGetFrame
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
videoGetFrameCount
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
videoGetHeight
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
videoGetLanguage
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
videoGetLanguageDescription
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
videoGetVolume
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
videoGetWidth
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
videoIsPlaying
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
videoLoad
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
videoPause
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
videoPlay
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
videoQuality
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
videoRotate
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
videoRotateAndScale
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
videoScale
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
videoSeek
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
videoSetAudioTrack
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
videoSetVolume
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
videoUnload
|
||
\end_layout
|
||
|
||
\begin_layout Subsection
|
||
VLDP
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
vldpGetHeight
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
vldpGetPixel
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
vldpGetWidth
|
||
\end_layout
|
||
|
||
\begin_layout Subsubsection
|
||
vldpSetVerbose
|
||
\end_layout
|
||
|
||
\end_body
|
||
\end_document
|