RLdev: a visual novel development kitHælethVersion 1.40 — 2006-06-22 |
Synopsis: kprl options (files | archive [ranges])One option is always required, to select the operation to perform. Which of files and archive is used, and what other options (if any) are available, depends on the operation.
goto or end()). Enabling this option will
suppress any code that is provably unreferenced; this is normally safe.
Synopsis: rlc [options] filefile is the name of a Kepago source file to compile. Only one main file can be processed at a time, though it may include code from other files. It will be compiled to RealLive bytecode in a standalone scenario, which can either be interpreted directly or added to a scenario archive.
Synopsis: vaconv [options] filesfiles is the names of the bitmap files to convert.
PRESERVE,
causes output files to be placed in the same directory as their respective
inputs. If this option is not passed at all, output files are placed in the
current working directory.
-f G00; you should not use -f and
-g together.
| 0 | 24-bit RGB, no mask | |
| 1 | 8-bit paletted; palette is ARGB | |
| 2 | 32-bit ARGB, plus extra features (see below) |
Synopsis: rlxml [options] filesfiles is the names of the files to convert. Their format will be determined automatically from their extension. If they are RealLive data files, they will be converted to a human-readable XML format; if they are XML files, they will be converted back to the appropriate RealLive binary format.
#load 'global'. Placing configuration
options and common definitions in such a file will automatically share them
among every source file in the directory.C[] array for temporary
integers, and S[1900] to S[1999] for temporary
strings. If you are writing a program from scratch, you can either avoid
using these memory areas manually, or change them to something more
convenient. If you are modifying an existing program, you will have to
analyse its memory usage yourself to discover whether these defaults are
suitable, and modify them if they are not. Be warned that any direct access
or modification of a variable in a space that has been assigned to Rlc
could cause your program to malfunction, but Rlc has no way to detect
such conflicts automatically.//, and
block comments (which behave like C comments, i.e. they cannot be nested)
are delimited by {- and -}.eof keyword; nothing following this
will be processed by Rlc.-~! are recognised as unary
operators, again with the same semantics as in C; these all have equal
precedence greater than any binary operation. Precedence can, as usual, be
overridden with parentheses.| upwards) can have an
= appended to form assignment operators, again as in C; note
however that these cannot be used on the right-hand side of an expression or
within function calls. There are currently no unary increment/decrement
operators and no address or pointer dereference operators.+, which
performs string concatenation. It is also legal, within integer expressions,
to compare strings with the comparison operators. Apart from that it is not
legal to mix strings and integers in expressions, though the various integer
types may be mixed freely.: and closed with ;, and function in much
the same way as braces in C-style languages.goto statements can be defined at any point where a statement is
valid; a label is any valid identifier beginning with @. The
scope of a label is global; if the same label is defined multiple times, a
warning is issued and the later definition is used. = value; addresses
are declared with the form
identifier -> space.address. For
example:
| int | 32-bit integer | |
| byte | 8-bit integer | |
| bit4 | 4-bit integer | |
| bit2 | 2-bit integer | |
| bit | 1-bit integer | |
| str | character string |
bit x, y, z allocates three whole words even though only three
bits are being used. You can get round this by allocating variables of
smaller sizes in arrays or with the block directive.x = 1, not x = 0, even though
the value of the logical variable x was never modified!
Safe usage of the current system requires that any variables be allocated
outside the largest scope in which they are used; in the example above,
x would have to be declared at the top level, and any variable
which is to be used after a call to another scenario should be declared
globally in a project header file to ensure that its memory will not be
used for anything else unintentionally.#define IDENT
#undef IDENTS
#const IDENT = EXPR
#set IDENT = EXPR
#set foo += 1 instead of
#set foo = foo + 1; the same goes for other arithmetic operators.
#; unlike in
C, these are processed by the compiler itself, not a preprocessor.#load 'FILE'
#include
directive.
#file 'FILE'
#target TARGET
#version A[.B[.C[.D]]]
#resource 'FILE'
#resource directive to the end of the file; it must precede
any #res directives referencing its contents.
#res<ID>
#entrypoint INDEX
#character 'NAME'
#character directive is ignored
when compiling for that target.
#line LINE
#kidoku_type TYPE
#print EXPR
#warn EXPR
#error EXPR
#if EXPR#elseif EXPR#else#endif
:; blocks, the contents of these directives are not
counted as blocks for scoping purposes.
#ifdef EXPR#ifndef EXPR
#if, except that every
identifier in EXPR that is not directly compared with anything
else is replaced with a call to the defined?() macro.if CONDITION STATEMENTif CONDITION STATEMENT else STATEMENT
else allows a statement to be specified for execution
if the condition evaluates to zero.else' problem: each else is taken to apply to the
innermost available if. This can be overridden by use of blocks:while CONDITION STATEMENT
break
statement, or jump straight to the next iteration with the
continue statement.
repeat STATEMENTS till CONDITION
while. STATEMENTS is executed
at least once, and the loop continues for as long as CONDITION
is zero.repeat loop is a block in itself: you can include multiple
statements without a :; block.
for (INITIALISATION) (CONDITION) (INCREMENT) STATEMENT
case EXPRof CASEotherecase
other clause is
equivalent to an of clause, but always matches; it is
optional, and if present must be the last clause.break statement, or execution will fall through to the next
case. This is useful where multiple values require the same treatment:other clauses that raise an error, you may wish
to raise the error at compile-time in such cases). Rlc therefore
defines the symbol __ConstantCase__ when compiling
case blocks; if it is non-zero, then the innermost case block
currently being compiled has been optimised away.
op<type:module:opcode, overload>', which can be followed with a
parenthesised parameter list as any function (but cannot be used in
assignments). The variables are all integers; type and
module appear to be used to identify groups of related
functions, opcode identifies a particular function (its value is
only unique within a particular type/module combination), and finally
overload identifies an instance of that opcode (different
instances have the same broad semantics, but take varying numbers of
parameters).op<0:Msg:00017, 0>.op<>. This can be
accomplished by editing reallive.kfn, or more easily by providing
the author with an example and description, upon which he'll happily do it
for you.' or "; there is
no semantic difference between the two. Due to the limitations of the
RealLive system itself, only JIS characters are valid in strings. To use
within a string a quote of the type being used to delimit that string, it must
be escaped with a backslash; line breaks must also be escaped, and any
whitespace at the start of the following line will be ignored, unless this too
is escaped:
\identifier{}, where what goes between the curly braces has the
same syntax as the contents of the parentheses in a normal function
call — in most cases the braces are either empty or contain a
single integer or variable. Note that for control codes of more than one
letter, braces are always required, even if no parameters are being passed
to the code.\n
\r
\p
\wait{time}
\m{name}\l{name}
\i{int}
\i:length{int}; if
this is supplied, the number will be left-padded with zeroes to ensure
that it is always at least length digits.
\s{str}
\size{[pixels]}
\c{idx, [bg_idx]}
\ruby{text}={gloss}
\e{index, [size]}\em{...}
\mv{x, y}\mvx{x}\mvy{y}
\mvx{8}
to insert a narrower-than-usual space).'\e{0}\mvx{-4}' would be a suitable way to display a bitmap
containing a character four pixels narrower than the font height.\pos{x, y}\posx{x}\posy{y}
\{text}. text is
arbitrary text, which is used as the current character name.\name{} as well, but \{} is the canonical
form. This is just to save typing, as this is the most common control code.
Secondly, if it is followed by a space, that is gobbled. This
permits you to write '\{Foo} "..."', and have it appear correctly
spaced in the output. If you actually wanted a space after the name, escape
it with another backslash: '\{Foo}\ "..."'. (You probably won't
like the results.)\{\m{A}}.\g.
The syntax is
\g{text}={gloss}.
text is arbitrary text, which is always output in the normal way,
and may be highlighted in some way. When it is clicked on, the value of
gloss is passed as a string to a handler routine, which would
typically display it in a subsidiary window.<$00d> identifies the
same string as <13> and <0013>. Secondly, keys may
not contain spaces, line breaks, or the characters > and
}. Both of these restrictions can be worked round by quoting
the key; such a key uses the normal string literal syntax, can contain any
character, and distinguishes between different representations of integers.< must be written \<.
// must be written
\// and literal {-
must be written {\-.
For block comments, note that control codes take precedence: that is to
say, \{- will be interpreted as the opening of a name block
(see 3.5.4) that begins with a - character, and
\i{-1-}{1} will raise a syntax error, since it will be interpreted
as \i{ -1 - } followed by the text {1}, and Kepago
requires a right-hand side to what is being read as a subtraction operator.
\_ can be used to represent a
non-trimmable space.
\d
\a{[str]}
<str> will be added after it as
another display string command; if the referencing command was followed
by a pause() call, another pause() will be added after the
new string. If multiple \a codes appear in one resource string,
the extra strings will be added in the order of the \a codes.<foo> resolves to
<quux>, because <baz> has been taken by the
\a in <bar>.A[0] to
A[1999], and likewise B[] to F[];
G[] and Z[] are global equivalents.A8b[],
A4b[], A2b[], Ab[], and similarly
named equivalents for B[] to G[] and
Z[]. Indexing is based on the element size: the 8-bit arrays
have elements from 0 to 7,999, arranged such that the four bytes of
A[100] can be accessed as A8b[400] to
A8b[403], in the little-endian order; this pattern is
consistent, so for example Gb[42784] shares the same memory
as the least significant bit of G[1337].A[100] may be
accessed by referencing the variable intA[100].store. This is a
register used to return values from functions such as strlen() and
select(); in all other respects it behaves exactly like any other
variable.store directly:
store; in general you cannot
assume that its value will remain unchanged between two statements.S[0] to S[1999] holds local string
variables. In RealLive (but not in AVG2000) there is also an array
M[], of the same size, the contents of which are global.strS[] and
strM[].\m{A}, the second \m{B},
through \m{Z}, \m{AA} to \m{AZ}, and
so on up to \m{ZZ}.S[] is to
M[]. These are introduced inline with \l in place of
\m, the getter/setter functions are GetLocalName() and
SetLocalName(), and the gameexe.ini variables defining their default
values are called #LOCALNAME.\l{C}).K[] (three string variables) and L[] (40 integer
variables). These can be used as ordinary variables, but they are intended
for use with the functions gosub_with() and
farcall_with().strK[0] to strK[2] and intL[0] to
intL[39].| 0 | Save menu_save() |
|
| 1 | Load menu_load() |
|
| 2 | * | Message speed MessageSpeed() |
| 3 | * | |
| 4 | * | |
| 5 | + | Display mode (full-screen or windowed) ScreenMode() |
| 6 | * | Miscellaneous settings CursorMono(), SkipAnimations(), LowPriority(), ConfirmSaveLoad(), ReduceDistortion(), and SoundQuality() |
| 8 | Voice settings (whether to use text, voice, or both) KoeMode() |
|
| 9 | * | Font selection |
| 10 | * | |
| 11 | BGM settings (DirectSound or CDDA) |
|
| 12 | Window decoration style GetWakuAll() |
|
| 13 | * | |
| 14 | Return to previous selection point ReturnPrevSelect() |
|
| 15 | Enable/disable character voices UseKoe() |
|
| 16 | * | Display game version |
| 17 | Enable/disable environmental effects ShowWeather() |
|
| 18 | Show/hide object 1 Meaning is application-defined; in Clannad, this is the date window setting. ShowObject1() |
|
| 19 | ||
| 20 | Enable/disable colour-based text classification Meaning is not fully understood, but it may be something to do with displaying text in a different colour if it has already been viewed, or using different colours for different characters. ClassifyText() |
|
| 21 | ||
| 22 | ||
| 24 | Open file Opens the file named by #MANUAL_PATH in gameexe.ini. This function is not available in all RealLive builds; it was introduced between versions 1.2.3 and 1.2.6. It is not clear whether it can be accessed other than through the right-click menu. |
|
| 25 | Skip read text SetSkipMode() |
|
| 26 | Enable auto mode AutoMode() |
|
| 28 | Return to main menu MenuReturn() |
|
| 29 | Exit game end() |
|
| 30 | Hide menu |
|
| 31 | Hide text window ShowBackground() |
OLD_INTERFACE when compiling your code.OnLoad function is called once when the DLL is loaded
into memory.*StatecbSizeOnFree function is called once when the DLL is unloaded.OnInit function is called
each time the interpreter is reset (see immediately above).OnCall function is the entrypoint for calls from
RealLive bytecode (see CallDLL()).arg1 .. arg5OnCall function will dispatch control to other functions in
your DLL accordingly.
RealLiveState structure is the official interface by
which extension DLLs can access the internal state of the interpreter.dwSizehMainWindow*intA .. *intZintA[1000] has exactly
the same meaning in an extension DLL as it does in Kepago.
*strS, *strMBankInfo*pData is a pointer to the raw pixel data,
and the other two members are pointers to the dimensions of that data,
probably in pixels.
szGamePathszSavePathszBgmPath, szKoePath, szMovPathszDataPathstore
(and can therefore be used with or without an assignment to an integer
variable). Where multiple related functions have identical parameters and
return types, all but the first in a group are given `...' in place of the
parameter list.load2, and
are not otherwise documented here. If you encounter one, refer to the base
function, and if you wish to know which functions I have designated thus,
refer to reallive.kfn. I would be particularly interested if anyone
were able to tell me about any differences in behaviour between functions I
have grouped in this way.KPACAPI before loading this
header. This may be useful if you are writing code that will be shared
between RealLive and AVG32 projects.rlcInit()rlcSetAllocation(iarray, ifirst, ilast, sfirst, slast)| MEMARR_A | Use the range A[ifirst]...A[ilast] | |
| MEMARR_B | Use the range B[ifirst]...B[ilast] | |
| MEMARR_C | Use the range C[ifirst]...C[ilast] | |
| MEMARR_D | Use the range D[ifirst]...D[ilast] | |
| MEMARR_E | Use the range E[ifirst]...E[ilast] | |
| MEMARR_F | Use the range F[ifirst]...F[ilast] |
defined?(symbols...): integer constant#ifdef Foo is literally a shorthand for
#if defined?(Foo).
default(symbol, expr): expressionconstant?(exprs...): integer constantconst_eq?(expr, const): integer constant__empty_string?(string): integer constantrlc_parse_string(string): statements or expressionin_gameexe?(key): integer constantgameexe(key, [index], [default]): expressionend()halt()jump(scenario, [entrypoint])farcall(scenario, [entrypoint])rtl()farcall_with(scenario, entrypoint, parameter...): storefarcall_with([value])store and used as
the return value of the farcall_with() call.
ReturnMenu()jump(menu), where menu is defined by #SEEN_MENU in
gameexe.ini.
MenuReturn()rtlButton()rtlCancel()rtlSystem()goto @label@label in the current scenario. See section
3.4.2 for details on labels.
gosub @label@label in the current scenario. Call ret() to resume
execution at the next statement.
ret()gosub_with (parameter...) @label: storeret_with([value])store and used as
the return value of the gosub_with() call.
goto_if (condition) @labelgoto_unless (condition) @label@label if the value of condition is non-zero, and
goto_unless() jumps if it is zero.gosub_if (condition) @labelgosub_unless (condition) @labelgoto_on (expr) { @label0, @label1, ..., @labeln }gosub_on...goto_case (expr) { val1: @label1; val2: @label2; ...; _: @default }gosub_case...SceneNum(): storeCallStackSize(): storeCallStackPop([count])CallStackTrunc(length)CallStackTrunc(len) is equivalent to
CallStackPop(CallStackSize - len).
CallStackClear()CallStackNop([count])SetInterrupt(scenario, entrypoint)ClearInterrupt()yield()rnd([min], max): storemin(a, b): storemax(a, b): storeconstrain(min, x, max): storepcnt(numerator, denominator): storesign(val): storeabs(val): storemodulus(x1, y1, x2, y2): storepower(base, [exponent]): storesin(angle, [divisor]): storecos...angle(x1, y1, x2, y2): storeindex_series(index, offset, init, [{start, end, endval, [mode]}...]): store| f(start < x ≤ end) = init + (endval − init) |
|
array? (symbols...): integer constantlength (array): integersetarray(origin, values...)setarray_stepped(origin, step, values...)setrng(array, [value])setrng(first, last, [value])setrng_stepped(origin, step, count, [value])cpyrng(source, dest, count)cpyvars(dest, offset, source...)sum(first, last): storesums({first, last}...): storestrused(var): storestrlen(var): storestrcharlen(var): storestrcpy(dest, source, [count])strcat(dest, source)strclear(first, [last])strtrunc(var, length)stralloc(var, length)strsub(source, offset, [length]): stringstrrsub...strpos(string, substring): storestrlpos(string, substring): storestrcmp(a, b): storeUppercase([source]): stringLowercase...hantozen([source]): stringzentohan...itoa(value, [length]): stringitoa_s...itoa_w...itoa_ws...itoa_s(-1, 3) returns
'- 1'.
digits(value): storedigit(value, dest, n): storeatoi(string): storeintout(value)strout(string)GetName(index): stringGetLocalName...SetName(index, string)SetLocalName...select(options...): storeselect_s...select_w [window] (options...): storehideThe option is not presented at all, although a return value is still allocated
for it. This is probably only meaningful with conditions.
blankA blank, non-selectable line is presented in place of the option.
colour(colour)Displays the option in the given colour, which is an index to #COLOR_TABLE
in gameexe.ini.
title([colour])Disables the option. If colour is specified, it has the same effect as the
colour function as well.
cursor(index)Displays an icon next to the option when it is highlighted. The icon chosen
is defined by #CURSOR.index in gameexe.ini.
if and then an
expression; the effect will be applied only if the expression evaluates to a
non-zero value.ReturnPrevSelect()CreateInput(index, x, y, width, height, fontsize, br, bg, bb, fr, fg, fb)CloseInput(index)CloseAllInputs()FocusInput(index)SetInput(index, text)GetInput(index): stringGetClick(x, y): store| 1 | left button | |
| 0 | neither | |
| -1 | right button |
WaitClick(time, x, y): storeGetCursorPos(x, y, [button1, button2])| 0 | unpressed | |
| 1 | being pressed | |
| 2 | pressed and released |
FlushClick()SetCursorPos(x, y)CtrlPressed(): storeShiftPressed(): storeCtrlKeySkip(): storeCtrlKeySkipOn()CtrlKeySkipOff()KeyMouseOn()KeyMouseOff()pause()pause_all()page()spause()br()par()TextOffset(x, y)TextOffsetX(x)TextOffsetY(y)TextPos(x, yTextPosX(x)TextPosY(y)TextWindow([index])GetWindowPos(index, origin, x, y)GetWindowDefaultPos(index, origin, x, y)| 0 | top and left | |
| 1 | top and right | |
| 2 | bottom and left | |
| 3 | bottom and right |
SetWindowPos(index, origin, x, y)ResetWindowPos(index)GetWakuAll(): storeSetWakuAll(style)FontColour([text], [shadow])SetFontColour...SetFontColourAll...FontSize([size])FontSizeAll...GetWindowAttr(r, g, b, [alpha], [filter])DefWindowAttr...SetWindowAttr(r, g, b, [alpha], [filter])WindowAttrR(): storeWindowAttrG...WindowAttrB...WindowAttrA...WindowAttrF...DefWindowAttrR...DefWindowAttrG...DefWindowAttrB...DefWindowAttrA...DefWindowAttrF...SetWindowAttrR(r)SetWindowAttrG(g)SetWindowAttrB(b)SetWindowAttrA(alpha)SetWindowAttrF(filter)FastText()NormalText()SetMessageNoWait(flag)MessageNoWait(): storeDefMessageNoWait...SetMessageSpeed(speed)MessageSpeed(): storeDefMessageSpeed...msgHide()msgHideAll()msgHideAllTemp()msgClear()msgClearAll()EnableWindowAnm(window)DisableWindowAnm(window)GetOpenAnmMod(window): storeGetCloseAnmMod...GetOpenAnmTime...GetCloseAnmTime...SetOpenAnmMod(window, mod)SetCloseAnmMod...SetOpenAnmTime(window, ms)SetCloseAnmTime...FaceOpen(file, [index])FaceClear([index])SetSoundQuality(setting)| 0 | 11 kHz | 8 bit | ||
| 1 | 11 kHz | 16 bit | ||
| 2 | 22 kHz | 8 bit | ||
| 3 | 22 kHz | 16 bit | ||
| 4 | 44 kHz | 8 bit | ||
| 5 | 44 kHz | 16 bit | ||
| 6 | 48 kHz | 8 bit | ||
| 7 | 48 hKz | 16 bit |
SoundQuality(): storeSetReduceDistortion(flag)ReduceDistortion(): storeSetBgmEnabled(flag)BgmEnabled(): storeSetBgmVolMod(level)BgmVolMod(): storebgmPlay(track, [fadein], [fadeout])bgmPlayEx(track, [fadein], [fadeout])bgmLoop(track, [fadein], [fadeout])bgmWait()bgmStatus(): store| 0 | Idle | |
| 1 | Playing music | |
| 2 | Fading out music |
bgmPlaying(): storebgmStop()bgmFadeOut(fadetime)bgmFadeOutEx([fadetime])bgmRewind()bgmTimer(): storebgmSetVolume(level, [fadetime])| level × modbgm | |
| 255 |
bgmVolume(): storebgmMute([fadetime])bgmUnMute...SetPcmEnabled(flag)PcmEnabled(): storeSetPcmVolMod(level)PcmVolMod(): storewavPlay(filename, [channel], [fadein])wavPlayEx(filename, channel, [fadein])wavLoop(filename, channel, [fadein])wavWait(channel)wavPlaying(channel): storewavStop([channel])wavStopAll()wavFadeOut(channel, fadetime)wavRewind(channel)wavSetVolume(channel, level, [fadetime])wavVolume(channel): storewavMute(channel, [fadetime])wavUnMute...SetSeEnabled(flag)SeEnabled(): storeSetSeVolMod(level)SeVolMod(): storesePlay(index)SetKoeEnabled(flag)KoeEnabled(): storeSetKoeVolMod(level)KoeVolMod(): storeSetUseKoe(character, flag)UseKoe(character): storeSetKoeMode(mode)| 0 | Text and voice | |
| 1 | Text only | |
| 2 | Voice only |
KoeMode(): storeSetBgmKoeFade(flag)BgmKoeFade(): storeDefBgmKoeFade...SetBgmKoeFadeVol(flag)BgmKoeFadeVol(): storeDefBgmKoeFadeVol...koePlay(koe, [character])koeDoPlay...UseKoe(character).
koePlayEx(koe, [character])koeDoPlayEx...koePlayExC(koe, [character]): storekoeDoPlayExC...koeWait()koeWaitC(): storekoePlaying(): storekoeStop()koeSetVolume(level, [fadetime])koeVolume(): storekoeMute([fadetime])koeUnMute...ScreenWidth(): integer constantScreenHeight(): integer constantModeToScreenSize(mode, width, height)BOXCOPYEASY in their development kit.
I have retained my own names out of habit. VisualArt's names are given in appendix
A.allocDC(dc, width, height)freeDC(dc)GetDCPixel(x, y, dc, r, g, b)'???'. This
refers to one of two “previous bitmap” variables, the “default grp” (which
is used in grp and rec functions), and the “default bgr”
(used in bgr functions). These are set automatically to the files
loaded by certain functions (such as grpOpenBg()), but may also be queried
and modified with the functions in this section.DefaultGrp(): stringSetDefaultGrp(filename)DefaultBgr(): stringSetDefaultGrp(filename)grpLoadMask(filename, mask)wipe(dc, r, g, b)recFade([x, y, width, height], colour, [time])recFade([x, y, width, height], r, g, b, [time])recFlash([x, y, width, height], r, g, b, [time])recOpen(filename, effect, [opacity])recOpen(filename, effect, x, y, width, height, dx, dy, [opacity])recOpen(filename, x, y, width, height, dx, dy, steps, style, direction, interpolation, density, speed, a, b, opacity, c)recMaskOpen...grpMaskOpen and recMaskOpen are the same as
grpOpen and recOpen, except that filename's alpha
mask is used to determine transparent areas in the loaded bitmap.
recOpenBg(filename, effect, [opacity])recOpenBg(filename, effect, x, y, width, height, dx, dy, [opacity])recOpenBg(filename, x, y, width, height, dx, dy, steps, style, direction, interpolation, density, speed, a, b, opacity, c)recLoad(filename, dc, [opacity])recLoad(filename, dc, x, y, width, height, dx, dy, [opacity])recMaskLoad...'???'. If the second form is used, the given area of the bitmap
is loaded at the given location.recMaskLoad is the same as recLoad, except that
filename's alpha mask is used to determine transparent areas in the loaded
bitmap.
grpBuffer(filename, dc, [opacity])grpBuffer(filename, dc, x, y, x', y', dx, dy, [opacity])grpMaskBuffer...recDisplay(dc, effect, [opacity])recDisplay(dc, effect, x, y, width, height, dx, dy, [opacity])recDisplay(dc, x, y, width, height, dx, dy, steps, style, direction, interpolation, density, speed, a, b, opacity, c)recMulti(source, effect, [opacity], compositors...)recMulti(source, effect, x, y, width, height, dx, dy, [opacity], compositors...)recMulti(source, x, y, width, height, dx, dy, steps, style, direction, interpolation, density, speed, a, b, opacity, c, compositors...)copy(filename, [effect], [opacity])area(filename, x, y, width, height, dx, dy, [opacity])recCopy(src, dst, [opacity])recCopy(x, y, width, height, src, dx, dy, dst, [opacity])recMaskCopy...grpCopy
(see the naming convention explanation under section
5.10) — is copied to (dx, dy), otherwise the
whole bitmap is copied to (0, 0).recMaskCopy is the same as recCopy, except that the
source bitmap's alpha mask is used to determine transparent areas in the
copied area.
recMaskBlend(src, dst)recMaskBlend(x, y, width, height, src, dx, dy, dst)recCopyWithMask(src, dst, mask, [opacity])recCopyWithMask(x, y, width, height, src, dx, dy, dst, mask, [maskXmod, maskYmod, levels, threshold], [opacity])recCopyInvMask...recMaskCopyWithMask...recMaskCopyInvMask...| α' = |
|
recCopyInvMask is the same as recCopyWithMask, except
that the external mask is inverted. The same is true for
recMaskCopyInvMask.
recSwap(src, dst)recSwap(x, y, width, height, src, dx, dy, dst)recStretchBlt(x, y, width, height, src, dx, dy, dwidth, dheight, dst, [opacity])recMaskStretchBlt...recRotate(x, y, width, height, xorg, yorg, src, dx, dy, dwidth, dheight, dxorg, dyorg, angle, xscale, yscale, opacity)recMaskRotate...recCMaskCopy(src, dst, r, g, b, [opacity])recOutline([x, y, width, height], dc, r, g, b, [opacity])recFill([x, y, width, height], dc, r, g, b, [opacity])recInvert([x, y, width, height], dc, [opacity])recMono([x, y, width, height], dc, [opacity])recColour([x, y, width, height], dc, r, g, b)recLight([x, y, width, height], dc, level)recAnd(src, dst)recAnd(x, y, width, height, src, dx, dy, dst)recOr...recAdd(src, dst, [opacity])recAdd(x, y, width, height, src, dx, dy, dst, [opacity])recSub...recMaskAdd...recMaskSub...recAddWithMask(src, dst, mask, [opacity])recAddWithMask(x, y, width, height, src, dx, dy, dst, mask, [maskXmod, maskYmod, levels, threshold], [opacity])recSubWithMask...recMaskAddWithMask...recMaskSubWithMask...recAddInvMask...recSubInvMask...recMaskAddInvMask...recMaskSubInvMask...recRotateAdd(x, y, width, height, xorg, yorg, src, dx, dy, dwidth, dheight, dxorg, dyorg, angle, xscale, yscale, opacity)recRotateSub...recMaskRotateAdd...recMaskRotateSub...recZoom(x1, y1, width1, height1, x2, y2, width2, height2, src, dx, dy, dwidth, dheight, time)recPan(x1, y1, x2, y2, src, dx, dy, width, height, time)recShift(x, y, dim_x, dim_y, src, dx, dy, width, height, direction, time)recSlide...| 0 | down | |
| 1 | up | |
| 2 | right | |
| 3 | left |
recShift and recSlide is that
the former scrolls the previous contents of the window out as the new contents
are scrolled in, while the latter scrolls the new contents in over the old
contents.
grpTextout(text, x, y, dst, size, r, g, b)grpNumber(n, digits, pad, sign, x, y, width, height, mod_x, mod_y, src, dx, dy, mod_dx, mod_dy, dst, [opacity])grpMaskNumber...grpMaskNumber,
the source bitmap's alpha mask will be used to determine transparent areas in
the digits.
bgrLoadHaikei (which appears to be similar to grpOpen(), but
without modifying any DCs) and bgrMulti (which appears to be very
similar to grpMulti()) are given names at present.stackSize(): storestackClear()stackPop(count)stackTrunc(length)stackTrunc(len) is equivalent to
stackPop(stackSize - len).
stackNop(count)refresh()DrawAuto()DrawSemiAuto()DrawManual()shake(spec)ShakeScreen(direction, amount, speed, rep, faderep)ShakeScreenEx...| DOWNUP | Shake vertically in both directions | |
| RIGHTLEFT | Shake horizontally in both directions | |
| UP | Bounce up | |
| DOWN | Bounce down | |
| LEFT | Bounce left | |
| RIGHT | Bounce right | |
| ZOOM | Shake `towards' player by zooming |
ShakeScreen2D(hamount, hspeed, vamount, vspeed, rep, faderep)ShakeScreen2DEx...ShakeSpec(spec, rep, faderep)ShakeSpecEx...ShakeStop([time])ShakeLayers(direction, amount, speed, rep, faderep, win, txt, bg, objs, [flag])ShakeLayersEx...| win | Text window backgrounds | |
| txt | The text in the windows | |
| bg | The background graphics | |
| objs | Objects |
ShakeLayers2D(hamount, hspeed, vamount, vspeed, rep, faderep, win, txt, bg, objs, [flag])ShakeLayers2DEx...ShakeLayersSpec(spec, rep, faderep, win, txt, bg, objs, [flag])ShakeLayersSpecEx...ShakeLayersStop([time], [flag])snmPlay(buf, x, y, {filename, time}...)snmPlayEx(buf, x, y, {filename, time}...)snmLoop(buf, x, y, {filename, time}...)snmPlayCmp(buf, x, y, {filename, time}...)snmPlayCmpEx...snmLoopCmp...Cmp functions, whereas it is
`Thaw' (i.e. decompress) for the versions without Cmp. The
meaning of this is unclear. Could it have something to do with whether
graphics are decompressed in advance or as needed, or something along those
lines?
snmPlayNc(buf, x, y, {filename, time}...)snmPlayNcEx...snmLoopNc...snmStretch(buf, x1, y1, x2, y2, {filename, time}...)snmStretchEx...snmStretchLoop...snmStretchCmp...snmStretchCmpEx...snmStretchLoopCmp...snmStretchNc...snmStretchNcEx...snmStretchLoopNc...snmScroll(buf, x1, y1, x2, y2, filename, right, down, left, up, time)snmScrollEx(buf, x1, y1, x2, y2, filename, right, down, left, up, time)snmScrollLoop(buf, x1, y1, x2, y2, filename, right, down, left, up, time)movPlay(file, x1, y1, x2, y2)movPlayEx(file, x1, y1, x2, y2)movPlayExC...: storemovLoop(file, x1, y1, x2, y2)movStop()movWait()movPlaying(): storeobjOfArea(buf, [x, y, x', y'], [visible])objOfRect(buf, [[x, y], [width, height]], [visible])objOfFile(buf, filename, [visible], [x, y], [pattern], [scrollX, scrollY])objOfFileGan(buf, filename, ganname, [visible], [x, y], [pattern], [scrollX, scrollY])objOfFileAnm, and does not have the pattern, scrollX, or
scrollY parameters; the animation files it uses are in a different
format and have the extension anm.
#
followed by certain alphabetical characters are interpreted as control codes.
The mapping between RealLive text object control codes and Kepago control
codes is as follows:| ## | Separator | |
| #c | \c | |
| #d | \n | |
| #s | \size | |
| #x | \posx | |
| #y | \posy |
"-?[0-9]+"; if it does, then that
integer is passed as a parameter to the code. To prevent following characters
being interpreted as parameters, the separator ## may be used, such that
the following are equivalent:#-syntax when constructing strings
separately. Kprl never attempts to convert the #-syntax
into standard Kepago control codes. So while the two lines of the previous
example are equivalent, the following are not equivalent:objOfText(buf, text, [visible], [x, y], [scrollX, scrollY])objSetText(buf, [text])objRangeSetText(min, max, [text])objTextOpts(buf, size, xspace, yspace, vertical, colour, shadow)objRangeTextOpts(min, max, ...)| size | Font size (pixels) | |
| xspace | Extra character spacing (line spacing when vertical) | |
| yspace | Extra line spacing (character spacing when vertical) | |
| vertical | If 1, text is vertical (see note below); if 0, horizontal. | |
| colour | Foreground colour, as an index to #COLOR_TABLE. | |
| shadow | Shadow colour, as an index to #COLOR_TABLE, or −1 to disable the shadow. |
objOfDigits(buf, filename, [visible], [x, y], [scrollX, scrollY])objSetDigits(buf, value)objRangeSetDigits(first, last, value)objNumOpts(buf, digits, zero, sign, pack, space)objRangeNumOpts(first, last, ...)| digits | Minimum number of digits; the number is padded to this length. | |
| zero | If 0, padding is with spaces; if 1, with zeroes. | |
| sign | If 0, only negative numbers are signed, and the sign is counted as a digit when present. If 1, all numbers are signed, and the sign is not counted as a digit for padding purposes. The ± pattern is used to sign 0 in this case. | |
| pack | If 1, and the number is less than digits digits long, the sign is placed next to the first digit (after the padding); if 0, the sign is placed in the first column and the padding follows it. This has no effect if zero is 1. | |
| space | If non-zero, the width in pixels of each digit. If zero, the width is determined by the width of the digit's bitmap instead. |
objDriftOfFile(buf, filename, [visible], [x, y], [scrollX, scrollY])objDriftOpts(buf, count, <?>, pattern, <?>, <?>, yspeed, <?>, <?>, <drift?>, <spread?>, driftspeed, x, y, x', y')objRangeDriftOpts(min, max, ...)objFadeOpts(buf, min_alpha, max_alpha, <?>, <?>, <?>)objRangeFadeOpts(min, max, ...)objDelete(buf, [maxbuf])objClear(buf, [maxbuf])objCopy(src, dst)objCopyToBg(src, dst)objBgCopyToFg...objBgCopyToBg() (this function is simply objBgCopy()),
and likewise no objCopyToFg() (this function is simply
objCopy()).
objWipeCopyOn(buf, [maxbuf])objWipeCopyOff...objShow(buf, flag)objMove(buf, x, y)objLeft(buf, x)objTop(buf, y)objAdjust(buf, index, x, y)objAdjustX(buf, index, x)objAdjustY(buf, index, y)objAdjustAll(buf, x, y)objAdjustAllX(buf, x)objAdjustAllY(buf, y)objAdjustVert(buf, y)objOrigin(buf, x, y)objOriginX(buf, x)objOriginY(buf, y)objRepOrigin(buf, x, y)objRepOriginX(buf, x)objRepOriginY(buf, y)objScale(buf, width, height)objWidth(buf, width)objHeight(buf, height)objRotate(buf, angle)objPattNo(buf, index)objAlpha(buf, alpha)objDispArea(buf, [x, y, x', y'])objDispRect(buf, [x, y, width, height])objDispCorner(buf, [x, y])objMono(buf, level)objInvert(buf, level)objLight(buf, level)objTint(buf, r, g, b)objTintR(buf, r)objTintG(buf, g)objTintB(buf, b)objColour(buf, r, g, b, level)objColR(buf, r)objColG(buf, g)objColB(buf, b)objColLevel(buf, level)objComposite(buf, mode)| 0 | normal | (object is displayed as though with grpMaskCopy()) | |
| 1 | add | (object is displayed as though with grpMaskAdd()) | |
| 2 | subtract | (object is displayed as though with grpMaskSub()) |
objLayer(buf, layer)objDepth(buf, depth)objOrder(buf, order)objQuarterView(buf, qview)objScrollRate(buf, x, y)objScrollRateX(buf, x)objScrollRateY(buf, y)objStop(buf, [pattern])ganPlay(buf, set)objPlay(buf, time)ganPlayEx(buf, set)objPlayEx(buf, time)ganPlayOnce(buf, set)objPlayOnce(buf, time)ganPlayOnceEx(buf, set)objPlayOnceEx(buf, time)ganLoop(buf, set)objLoop(buf, time)ganPlayBlink(buf, set)objPlayBlink(buf, time)wait(time)waitC(time): store| 0 | The pause was not cancelled, or it was cancelled by use of the Control key. | |
| 1 | The pause was cancelled with a left click. | |
| -1 | The pause was cancelled with a right click. |
ResetTimer([counter])ResetExTimer...SetTimer(time, [counter])SetExTimer...time(time, [counter])timeEx...timeC(time, [counter]): storetimeExC...| 0 | The pause was not cancelled. | |
| 1 | The pause was cancelled with a left click. | |
| -1 | The pause was cancelled with a right click. |
Timer([counter]): storeExTimer...CmpTimer(time, [counter]): storeCmpExTimer...InitFrame(counter, limit1, limit2, time)InitExFrame...
|
ms |
InitFrameAccel(counter, limit1, limit2, time)InitFrameDecel...InitExFrameAccel...InitExFrameDecel...InitFrameLoop(counter, limit1, limit2, time)InitFrameTurn...InitExFrameLoop...InitExFrameTurn...InitFrames({counter, limit1, limit2, time}...)InitFramesAccel...InitFramesDecel...InitFramesLoop...InitFramesTurn...InitExFrames...InitExFramesAccel...InitExFramesDecel...InitExFramesLoop...InitExFramesTurn...ReadFrame(counter): storeReadExFrame...ReadFrames({counter, value}...): storeReadExFrames...ClearFrame(counter, [value])ClearExFrame...ClearAllFrames([value])ClearAllExFrames...FrameActive(counter): storeExFrameActive...AnyFrameActive: storeAnyExFrameActive...LoadDLL(index, filename): storeOnLoad() function, or 0 if the load
was unsuccessful.UnloadDLL(index): storeOnFree() function, or 0 if there was no DLL in that slot.
CallDLL(index, [arg1, [arg2, [arg3, [arg4, [arg5]]]]]): storeOnCall() function with the given arguments (any not supplied are
set to 0), or 0 if there was no DLL in that slot.
shell(filename, [argv])ShellExecute() function.
launch(target)GetDateTime(y, m, d, wd, hh, mm, ss, ms)GetDate(y, m, d, wd)GetTime(hh, mm, ss, ms)title(text)PauseCursor(index)MouseCursor(index)GetMouseCursor(): storeShowCursor()HideCursor()SetCursorMono(flag)CursorMono(): storeSetScreenMode(mode)ScreenMode(): storesavemenu(): storeloadmenu(): storesave(slot)load...save_always...load_always...menu_save(): storemenu_load(): storemenu_save_always(): storemenu_load_always(): storeSaveInfo(slot, y, m, d, wd, hh, mm, ss, ms, title): storeSaveDate(slot, y, m, d, wd): storeSaveTime(slot, hh, mm, ss, ms): storeSaveDateTime(slot, y, m, d, wd, hh, mm, ss, ms): storeGetSaveFlag(slot, {src, dst, count}...): storeLatestSave(): storeSetConfirmSaveLoad(flag)ConfirmSaveLoad(): storeContextMenu()SyscomEnabled(syscom): storeHideSyscom([syscom])EnableSyscom([syscom])DisableSyscom(syscom)InvokeSyscom(syscom, [value])InvokeSyscom(5, val) is exactly equivalent to
SetScreenMode(val)).
ReadSyscom(syscom): storeReadSyscom(5) is exactly equivalent to
ScreenMode().
ShowBackground()SetSkipMode()ClearSkipMode()SkipMode(): storeSetLocalSkipMode()ClearLocalSkipMode()LocalSkipMode(): storeEnableSkipMode()DisableSkipMode()SetAutoMode(flag)SetAutoBaseTime(time)SetAutoCharTime(time)AutoMode(): storeDefAutoMode...AutoBaseTime(): storeDefAutoBaseTime...AutoCharTime(): storeDefAutoCharTime...Z[] array, which is set to 1 when the associated file is
accessed.4cgGetTotal(): storecgGetViewed(): storecgGetViewedPcnt(): storecgGetFlag(filename): storecgStatus(filename): store| 1 | CG has been viewed | |
| 0 | CG has not been viewed | |
| -1 | filename is not a CG image |
SetFontQuality(value)FontQuality(): store| 0 | No antialiasing | |
| 1 | Low quality | |
| 2 | High quality |
SetFontWeight(value)FontWeight(): storeSetFontShadow(value)FontShadow(): storeSetLowPriority(flag)LowPriority(): storeSetSkipAnimations(flag)SkipAnimations(): storeSetShowObject1(flag)SetShowObject2...ShowObject1(): storeShowObject2...ShowObject1 is used to control display of the date
marker at the top left of the screen (object 84).
SetShowWeather(flag)ShowWeather(): storeSetClassifyText(flag)ClassifyText(): storeSetGeneric1(value)SetGeneric2...Generic1(): storeGeneric2...DefGeneric1...DefGeneric2...__Memory?(): store__Debugging?(): storeassert(expr, [message])__DebugMessage(message)__DebugMsgBox(message, [type]): store| DEBUG_OK | `OK' button only. This is the default if no type is given. | |
| DEBUG_OKCANCEL | `OK' and `Cancel' buttons. Returns 0 for `OK' and 1 for `Cancel'. | |
| DEBUG_YESNO | `Yes' and `No' buttons. Returns 0 for `Yes' and 1 for `No'. |
__DebugInputInt(prompt, [default], [min, max]): integer__DebugInputStr(prompt, [default]): string__DebugStartTimer([index])__DebugGetElapsed([index]): store__SaveBuffer(file, [dc])__SaveBufferIdx(prefix, [dc])#NAME_ENC = enc\b
\u
'R2D2! It \bis\u you!' outputs “R2D2! It
is you!”.#RLBABEL_E_MOJI_WIDTHS = width[, width...]MessageBox(expr, [title]): storeGetTextWindow(): storeSetNameMod(value, [window]): storeGetNameMod([window]): storeSetCurrentWindowName(name): store__DynamicLineation__ to 0, but this is
not recommended.__DebugTextout__ before loading the library.#CAPTION = "title"#SUBTITLE = flag#SCREENSIZE_MOD = flag#INIT_SCREENMODE = flag#REGNAME = "key"#FOLDNAME.ext = "folder" = archive : "arcname"| ANM | PDT animations | |
| ARD | Area definitions | |
| BGM | Music files (*.nwa, *.ogg, etc.) | |
| DAT | General data files | |
| G00 | Graphics | |
| GAN | G00 animations | |
| HIK | ||
| KOE | Voice data | |
| M00 | ||
| MOV | Video files (*.avi, *.mpg, etc.) | |
| PDT | PDT graphics (used for cursors) | |
| TXT | Bytecode | |
| WAV | Sound effects |
#CGTABLE_FILENAME = "file"#KOESYNC_FILENAME = "file"#TONECURVE_FILENAME = "file"#BUSTSHOT_FILENAME = "file"#MANUAL_PATH = "file"#SEEN_START = index#SEEN_MENU = index#CANCELCALL = scenario, entrypoint#CANCELCALL_MOD = flag#intvar[index] = value#strvar[index] = "value"int prefix (e.g. #C[100],
#G2B[4000]). Valid values of strvar are S and
M.
#NAME.var = "value"#LOCALNAME.var = "value"A to Z and AA to ZZ.
#NAME_MAXLEN = len#WINDOW_MOVE_MODE = mode| 0 | display only a box outline | |
| 1 | render border only | |
| 2 | render border and background | |
| 3 | render border, background, and text |
#WINDOW_ATTR = r, g, b, alpha, filter#INIT_FONT_TYPE = type#INIT_FONT_NAME = "font"#INIT_FONT_QUALITY = quality#INIT_FONT_WEIGHT = weight#WINDOW.index.variable = ..., which
defines the setting of variable for window index. Possible variables are
described in this section.#WINDOW.index.ATTR_MOD = mod
#WINDOW.index.ATTR = r, g, b, alpha, filter#WINDOW.index.POS = origin : x, y| 0 | Top and left | |
| 1 | Top and right | |
| 2 | Bottom and left | |
| 3 | Bottom and right |
#WINDOW.index.WAKU_SETNO = waku#WINDOW.index.WAKU_MOD = waku_mod
#WINDOW.index.WAKU_NO = pattern#WINDOW.index.KEYCUR_MOD = type : x, y#WINDOW.index.OPEN_ANM_MOD = mod
#WINDOW.index.CLOSE_ANM_MOD = mod| 0 | Instantaneous | |
| 1 | Fade | |
| 2 | Scroll off/on via top of screen | |
| 3 | Scroll off/on via bottom of screen | |
| 4 | Scroll off/on via left of screen | |
| 5 | Scroll off/on via right of screen | |
| 6 | Scroll off/on vertically via nearest edge of screen | |
| 7 | Scroll off/on horizontally via nearest edge of screen | |
| 8 | Scroll off/on via nearest edge of screen (?) | |
| 9 | Expand horizontally and vertically | |
| 10 | Expand horizontally, contract vertically | |
| 11 | Expand horizontally | |
| 12 | Contract horizontally, expand vertically | |
| 13 | Contract horizontally and vertically | |
| 14 | Contract horizontally | |
| 15 | Expand vertically | |
| 16 | Contract vertically |
#WINDOW.index.OPEN_ANM_TIME = ms
#WINDOW.index.CLOSE_ANM_TIME = ms#WINDOW.index.MOJI_CNT = horizontally, vertically#WINDOW.index.MOJI_POS = top, bottom, left, right#WINDOW.index.MOJI_SIZE = size#WINDOW.index.MOJI_REP = x, [y]#WINDOW.index.LUBY_SIZE = size#WINDOW.index.INDENT_USE = flag#WINDOW.index.MOJI_SHADOW = flag#WINDOW.index.KINSOKU_USE = flag#WINDOW.index.R_COMMAND_MOD = flag#WINDOW.index.SELCOM_USE = flag#WINDOW.index.MOJI_MIN = width, height#WINDOW.index.SELCOM_SETPOS = horizontal, vertical, x, y| 0 | use settings from #WINDOW.POS | |
| 1 | centered | |
| 2 | relative to left or top of screen | |
| 3 | relative to right or bottom of screen |
#WINDOW.index.SELCOM_MOJIPOS = flag#WINDOW.index.SELCOM_CURSORSELECT = flag
#WINDOW.index.SELCOM_CURSORNO = cursor
#WINDOW.index.SELCOM_MOJIDARK = amount#WINDOW.index.SELCOM_MOUSESET = flag#WINDOW.index.NAME_MOD = name_mod\{}) are displayed inline in the text window. This
is not the only option. Valid settings of name_mod are:| 0 | Display names inline (default) | |
| 1 | Display names in a separate window. | |
| 2 | Do not display names. | |
| 3 | Same as 2? |
#WINDOW.index.NAME_POS = x, y#WINDOW.index.NAME_MOJI_SIZE = size#WINDOW.index.NAME_MOJI_REP = x#WINDOW.index.NAME_MOJI_POS = x, y#WINDOW.index.NAME_MOJI_MIN = width#WINDOW.index.NAME_WAKU_DIR = flag#WINDOW.index.NAME_WAKU_SETNO = waku#WINDOW.index.NAME_CENTERING = flag#WINDOW.index.EXBTN_$nnn$_USE = flag#WINDOW.index.MOVE_USE = flag#WINDOW.index.CLEAR_USE = flag#WINDOW.index.READJUMP_USE = flag#WINDOW.index.AUTOMODE_USE = flag#WINDOW.index.MSGBK_USE = flag#WINDOW.index.MSGBKLEFT_USE = flag#WINDOW.index.MSGBKRIGHT_USE = flag#WINDOW.index.KOEPLAY_USE = flag#WINDOW.index.MESSAGE_MOD = mod
#WINDOW.index.NOVELBACK = x1, y1, x2, y2#WINDOW.index.FACE.n = x, y, behind, <?>, <?>#CDTRACK = from - to - loop = "name"#DSTRACK = from - to - loop = "file" = "name"#SE.index = "file" = channel#MEMORY = flag#DEBUG_MESSAGE_LOG = flagUndocumented variables#SYSCOM_MOD = flag#SYSCOM_MOD2 = flag#SAVELOADDLG_USE = flag#DLL.idx = "filename"
BANKALLOC allocDC() BANKBANK BANKFREE freeDC() BG grpOpenBg() BGCHR grpMulti() BGCHRDC grpMulti() BGCHRKEEP BOXANTIMASKCOPY grpCopyInvMask() BOXANTIMASKCOPYMASK grpMaskCopyInvMask() BOXANTIMASKCOPYMASK_ADD grpMaskAddInvMask() BOXANTIMASKCOPYMASK_SUB grpMaskSubInvMask() BOXANTIMASKCOPY_ADD grpAddInvMask() BOXANTIMASKCOPY_SUB grpSubInvMask() BOXANTIMASKDARK BOXANTIMASKEMPTY BOXANTIMASKFILL BOXANTIMASKMONO BOXANTIMASKNEGA BOXANTIMASKRGB BOXBG BOXBGCHR BOXBGCHRDC BOXBGCHRKEEP BOXCHR BOXCOPY grpCopy() BOXCOPYAND grpAnd() BOXCOPYEASY grpCMaskCopy() BOXCOPYMASK grpMaskCopy() BOXCOPYMASKBLEND grpMaskBlend() BOXCOPYMASK_ADD grpMaskAdd() BOXCOPYMASK_SUB grpMaskSub() BOXCOPYOR grpOr() BOXCOPY_ADD grpAdd() BOXCOPY_SUB grpSub() BOXDARK grpLight() BOXEMPTY grpOutline() BOXFADE grpFade() BOXFILL grpFill() BOXGRP BOXMASKCOPY grpCopyWithMask() BOXMASKCOPYMASK grpMaskCopyWithMask() BOXMASKCOPYMASK_ADD grpMaskAddWithMask() BOXMASKCOPYMASK_SUB grpMaskSubWithMask() BOXMASKCOPY_ADD grpAddWithMask() BOXMASKCOPY_SUB grpSubWithMask() BOXMASKDARK BOXMASKEMPTY BOXMASKFILL BOXMASKMONO BOXMASKNEGA BOXMASKRGB BOXMONO grpMono() BOXNEGA grpInvert() BOXNUMBER grpNumber() BOXNUMBERMASK grpMaskNumber() BOXPDTEXPAND grpLoad() BOXPDTEXPANDCHR grpMaskLoad() BOXRGB grpColour() BOXROTATECOPY grpRotate() BOXROTATECOPYMASK grpMaskRotate() BOXROTATECOPYMASK_ADD grpMaskRotateAdd() BOXROTATECOPYMASK_SUB grpMaskRotateSub() BOXROTATECOPY_ADD grpRotateAdd() BOXROTATECOPY_SUB grpRotateSub() BOXSCROLL grpPan() BOXSHIFT grpShift() BOXSLIDE grpSlide() BOXSTRETCH grpMaskStretchBlt() BOXSTRETCH grpStretchBlt() BOXSTRETCHMASK BOXSTRETCHMOVE grpZoom() BOXWAIP BOXXCHG grpSwap() CHR grpMaskOpen() FARRETURN rtl() GCLS wipe() GRP grpOpen() GRPKEEP INIT_CALLSTACK CallStackClear() KANJI grpTextout() MASKBANKCOPY NOP stackNop() PDTEXPAND grpBuffer() PDTEXPANDCHR grpMaskBuffer() PDTEXPANDMASK grpLoadMask() PIXELPUT PIXELSET RECTANTIMASKCOPY recCopyInvMask() RECTANTIMASKCOPYMASK recMaskCopyInvMask() RECTANTIMASKCOPYMASK_ADD recMaskAddInvMask() RECTANTIMASKCOPYMASK_SUB recMaskSubInvMask() RECTANTIMASKCOPY_ADD recAddInvMask() RECTANTIMASKCOPY_SUB recSubInvMask() RECTANTIMASKDARK RECTANTIMASKEMPTY RECTANTIMASKFILL RECTANTIMASKMONO RECTANTIMASKNEGA RECTANTIMASKRGB RECTBG RECTBGCHR recMulti() RECTBGCHRDC recMulti() RECTBGCHRKEEP RECTCHR RECTCOPY recCopy() RECTCOPYAND recAnd() RECTCOPYEASY recCMaskCopy() RECTCOPYMASK recMaskCopy() RECTCOPYMASKBLEND recMaskBlend() RECTCOPYMASK_ADD recMaskAdd() RECTCOPYMASK_SUB recMaskSub() RECTCOPYOR recOr() RECTCOPY_ADD recAdd() RECTCOPY_SUB recSub() RECTDARK recLight() RECTEMPTY recOutline() RECTFADE recFade() RECTFILL recFill() RECTGRP RECTMASKCOPY recCopyWithMask() RECTMASKCOPYMASK recMaskCopyWithMask() RECTMASKCOPYMASK_ADD recMaskAddWithMask() RECTMASKCOPYMASK_SUB recMaskSubWithMask() RECTMASKCOPY_ADD recAddWithMask() RECTMASKCOPY_SUB recSubWithMask() RECTMASKDARK RECTMASKEMPTY RECTMASKFILL RECTMASKMONO RECTMASKNEGA RECTMASKRGB RECTMONO recMono() RECTNEGA recInvert() RECTNUMBER RECTNUMBERMASK RECTPDTEXPAND recLoad() RECTPDTEXPANDCHR recMaskLoad() RECTRGB recColour() RECTROTATECOPY recRotate() RECTROTATECOPYMASK recMaskRotate() RECTROTATECOPYMASK_ADD recMaskRotateAdd() RECTROTATECOPYMASK_SUB recMaskRotateSub() RECTROTATECOPY_ADD recRotateAdd() RECTROTATECOPY_SUB recRotateSub() RECTSCROLL recPan() RECTSHIFT recShift() RECTSLIDE recSlide() RECTSTRETCH recMaskStretchBlt() RECTSTRETCH recStretchBlt() RECTSTRETCHMASK RECTSTRETCHMOVE recZoom() RECTWAIP RECTXCHG recSwap() RETURN ret() SERIALPDTANM snmPlay(), etc. SERIALPDTSCROLL snmScroll(), etc. SERIALPDTSTRETCHANM snmStretch(), etc. SUB_CALLSTACK CallStackPop() WAIP grpDisplay()
<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 2 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, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.Also add information on how to contact you by electronic and paper mail.
Gnomovision version 69, Copyright (C) <year> <name of author> Gnomovision 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, the commands you use may be called something other than show w and show c; they could even be mouse-clicks or menu items — whatever suits your program.
<one line to give the library's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USAAlso add information on how to contact you by electronic and paper mail.
Copyright © 2001 Kazunori Ueno(JAGARL) <jagarl@creator.club.ne.jp>The code in question can be obtained by extracting the file src/common/lzcomp.h from the RLdev source code; at the time of writing, the original file could be found at http://www.creator.club.ne.jp/~jagarl/lzcomp.h.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 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.
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
|
|
|
|
|
|
|
This document was translated from LATEX by HEVEA.