Initial commit - a bunch of badly stitched code
This commit is contained in:
commit
20500ec141
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
node_modules
|
||||
build
|
||||
dist
|
||||
dist.zip
|
162
Gulpfile.coffee
Normal file
162
Gulpfile.coffee
Normal file
|
@ -0,0 +1,162 @@
|
|||
browserSync = require('browser-sync')
|
||||
gulp = require('gulp')
|
||||
gutil = require('gulp-util')
|
||||
coffee = require("gulp-coffee")
|
||||
sass = require('gulp-sass')
|
||||
uglify = require('gulp-uglify')
|
||||
zip = require('gulp-zip')
|
||||
concat = require('gulp-concat')
|
||||
rename = require('gulp-rename')
|
||||
fs = require 'fs'
|
||||
|
||||
reload = browserSync.reload
|
||||
|
||||
html = (target, debug) ->
|
||||
return () ->
|
||||
sources = [
|
||||
'html/index.html'
|
||||
]
|
||||
if (debug)
|
||||
sources.push('html/test.html')
|
||||
gulp.src(sources)
|
||||
.pipe(gulp.dest(target))
|
||||
gulp.src(['game/gamepad.min.js'])
|
||||
.pipe(gulp.dest(target+"/game"))
|
||||
if(!fs.existsSync(target+'/game/improv'))
|
||||
fs.mkdirSync(target+'/game/improv')
|
||||
gulp.src([
|
||||
'node_modules/improv/dist/index.js'
|
||||
'node_modules/improv/dist/filters.js'
|
||||
'node_modules/improv/dist/template.js'
|
||||
])
|
||||
.pipe(gulp.dest(target+"/game/improv"))
|
||||
gulp.src(['/www/games/salet-module/lib/index.min.js'])
|
||||
.pipe(rename('salet.min.js'))
|
||||
.pipe(gulp.dest(target+"/game"))
|
||||
|
||||
# Images
|
||||
img = (target) ->
|
||||
return () ->
|
||||
return gulp.src(['img/*.png', 'img/*.jpeg', 'img/*.jpg']).pipe(gulp.dest(target))
|
||||
|
||||
# Audio assets
|
||||
audio = (target) ->
|
||||
return () ->
|
||||
return gulp.src(['audio/*.mp3']).pipe(gulp.dest(target))
|
||||
|
||||
# Fonts
|
||||
fonts = (target) ->
|
||||
return () ->
|
||||
return gulp.src(['fonts/*']).pipe(gulp.dest(target))
|
||||
|
||||
gulp.task('html', html('./build', true))
|
||||
gulp.task('img', img('./build/img'))
|
||||
gulp.task('audio', audio('./build/audio'))
|
||||
gulp.task('fonts', fonts('./build/fonts'))
|
||||
|
||||
# SCSS styles
|
||||
gulp.task('sass', () ->
|
||||
gulp.src('sass/main.scss')
|
||||
.pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError))
|
||||
.pipe(gulp.dest('./build/css'))
|
||||
)
|
||||
|
||||
# Autotests
|
||||
gulp.task('tests', () ->
|
||||
gulp.src('test/*.js')
|
||||
.pipe(gulp.dest('./build/test/'))
|
||||
)
|
||||
|
||||
gulp.task('concatCoffee', () ->
|
||||
gulp.src([
|
||||
# language
|
||||
'./game/translations/ru.coffee'
|
||||
## additional functions
|
||||
## the actual game
|
||||
'./game/engine.coffee' # engine stuff
|
||||
'./game/model.coffee' # story logic
|
||||
'./game/maze.coffee' # map
|
||||
]).pipe(concat('./main.coffee'))
|
||||
.pipe(gulp.dest('./build/game'))
|
||||
)
|
||||
|
||||
gulp.task('coffee', ['concatCoffee'], () ->
|
||||
gulp.src('./build/game/main.coffee')
|
||||
.pipe(coffee({bare: true}))
|
||||
.pipe(gulp.dest('./build/game/'))
|
||||
)
|
||||
|
||||
gulp.task('build', [
|
||||
'html'
|
||||
'img'
|
||||
'sass'
|
||||
'coffee'
|
||||
'audio'
|
||||
'fonts'
|
||||
'tests'
|
||||
])
|
||||
|
||||
gulp.task('serve', ['build'], () ->
|
||||
browserSync({
|
||||
server: {
|
||||
baseDir: 'build'
|
||||
}
|
||||
online: true
|
||||
browser: []
|
||||
ghostMode: false
|
||||
})
|
||||
|
||||
sassListener = () ->
|
||||
reload('./build/css/main.css')
|
||||
|
||||
gulp.watch(['./html/*.html'], ['html'])
|
||||
gulp.watch(['./sass/*.scss'], ['sass'])
|
||||
gulp.watch(['./img/*.png', './img/*.jpeg', './img/*.jpg'], ['img'])
|
||||
gulp.watch([
|
||||
'./game/*.coffee'
|
||||
'./game/translations/*.cson'
|
||||
], ['coffee'])
|
||||
|
||||
gulp.watch(['./build/css/main.css'], sassListener)
|
||||
gulp.watch(
|
||||
['./build/game/bundle.js', './build/img/*', './build/index.html'],
|
||||
browserSync.reload)
|
||||
)
|
||||
|
||||
gulp.task('html-dist', html('./dist', false))
|
||||
gulp.task('fonts-dist', fonts('./dist/fonts'))
|
||||
gulp.task('img-dist', img('./dist/img'))
|
||||
gulp.task('audio-dist', audio('./dist/audio'))
|
||||
gulp.task('legal-dist', () ->
|
||||
return gulp.src(['LICENSE.txt'])
|
||||
.pipe(gulp.dest("./dist"))
|
||||
)
|
||||
gulp.task('sass-dist', () ->
|
||||
return gulp.src('./sass/main.scss')
|
||||
.pipe(sass({outputStyle: 'compressed'}))
|
||||
.pipe(gulp.dest('./dist/css'))
|
||||
)
|
||||
|
||||
gulp.task('coffee-dist', ['concatCoffee'], () ->
|
||||
gulp.src('./build/game/main.coffee', {sourcemaps: false})
|
||||
.pipe(coffee())
|
||||
.pipe(uglify())
|
||||
.on('error', gutil.log)
|
||||
.pipe(gulp.dest('./dist/game/'))
|
||||
)
|
||||
|
||||
gulp.task('dist', [
|
||||
'html-dist'
|
||||
'img-dist'
|
||||
'sass-dist'
|
||||
'coffee-dist'
|
||||
'audio-dist'
|
||||
'fonts-dist'
|
||||
'legal-dist'
|
||||
])
|
||||
|
||||
gulp.task('zip', ['dist'], () ->
|
||||
return gulp.src('dist/**')
|
||||
.pipe(zip('dist.zip'))
|
||||
.pipe(gulp.dest('.'))
|
||||
)
|
675
LICENSE
Normal file
675
LICENSE
Normal file
|
@ -0,0 +1,675 @@
|
|||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
{one line to give the program's name and a brief idea of what it does.}
|
||||
Copyright (C) {year} {name of author}
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
Copyright (C) 2018
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
49
README.md
Normal file
49
README.md
Normal file
|
@ -0,0 +1,49 @@
|
|||
# Демо процедурной генерации карты на Salet
|
||||
|
||||
Работает только в новых браузерах с поддержкой ES6.
|
||||
Если хотите, чтобы работало во всех браузерах, надо компилировать Improv вместе
|
||||
с полифиллом для babel.
|
||||
Сам код игры и Salet такой строгой зависимости не имеет.
|
||||
|
||||
Код демо собран из обрезков разных игр и черновиков. Есть баги.
|
||||
|
||||
Лицензия кода - GPLv3.
|
||||
Если будете использовать, делитесь своими наработками в ответ.
|
||||
|
||||
### Установка
|
||||
|
||||
- Клонировать репозиторий git себе на компьютер
|
||||
- Выполнить `yarn install` или `npm install`
|
||||
- Выполнить `gulp serve`
|
||||
- Открыть живой предпросмотр по адресу `http://localhost:3000`
|
||||
|
||||
Также есть команды `gulp build` для dev-cборки и `gulp dist` для сборки релиза,
|
||||
но игра всё равно не заработает без веб-сервера.
|
||||
|
||||
### Автотесты
|
||||
|
||||
Автотесты вызываются по адресу `http://localhost:3000/test.html` и компилируются через `gulp test`.
|
||||
Автотесты проверяют две вещи: что игра и Salet вообще запускаются, и что во все комнаты можно зайти без багов.
|
||||
Это не так много, но всё-таки кое-что.
|
||||
|
||||
У автотестов нет живого предпросмотра.
|
||||
|
||||
### Процедурный текст
|
||||
|
||||
Текст для генератора Improv пишется в формате CSON.
|
||||
Это как JSON, но от авторов CoffeeScript.
|
||||
|
||||
По самому формату см. [документацию по Improv.](http://improv.readthedocs.io/)
|
||||
|
||||
### Тест частоты процедурного текста
|
||||
|
||||
Запускать `coffee distribution.coffee`.
|
||||
Этот скрипт анализирует файлы Improv и выдаёт оценку сверху по частоте появления
|
||||
каждого тега.
|
||||
Позволяет более-менее балансировать прокген, чтобы не зацикливаться на том, что
|
||||
увидит 1% игроков или меньше.
|
||||
|
||||
### Используемые библиотеки
|
||||
|
||||
* [Salet](https://salet.su) - лицензия MIT
|
||||
* [Improv](http://improv.readthedocs.io/) - лицензия MIT
|
BIN
audio/ash_nightwork.it
Normal file
BIN
audio/ash_nightwork.it
Normal file
Binary file not shown.
BIN
audio/ash_nightwork.mp3
Normal file
BIN
audio/ash_nightwork.mp3
Normal file
Binary file not shown.
73
distribution.coffee
Normal file
73
distribution.coffee
Normal file
|
@ -0,0 +1,73 @@
|
|||
# Improv distribution assessment
|
||||
# Currently only for files
|
||||
# Ignores tags!!! The assessment could be above real value.
|
||||
|
||||
CSON = require 'cson'
|
||||
glob = require 'glob'
|
||||
|
||||
distribution = {}
|
||||
template = (phrase) ->
|
||||
if phrase == undefined or phrase == ''
|
||||
return []
|
||||
[openBracket, closeBracket] = [phrase.indexOf('['), phrase.indexOf(']')]
|
||||
if openBracket == -1
|
||||
return phrase
|
||||
if closeBracket == -1
|
||||
throw new Error("Missing close bracket in phrase: #{phrase}")
|
||||
before = phrase.slice(0, openBracket)
|
||||
after = phrase.slice(closeBracket + 1)
|
||||
directive = phrase.substring(openBracket + 1, closeBracket)
|
||||
return [directive, after]
|
||||
|
||||
parseGroup = (group) ->
|
||||
groups = []
|
||||
occurence = {}
|
||||
for phrase in group.phrases
|
||||
nexttpl = null
|
||||
templates = []
|
||||
while nexttpl != undefined
|
||||
[nexttpl, after] = template (phrase)
|
||||
if nexttpl != undefined
|
||||
templates.push(nexttpl)
|
||||
phrase = after
|
||||
for tpl in templates
|
||||
directive = tpl.slice(0, 1)
|
||||
grp = tpl.substring(1, tpl.length)
|
||||
if groups.indexOf(grp) == -1
|
||||
groups.push grp
|
||||
if directive == ':'
|
||||
occurence[grp] ?= 0
|
||||
occurence[grp] += 1
|
||||
for filename, value of occurence
|
||||
distribution[filename] ?= 1
|
||||
distribution[filename] *= value/group.phrases.length
|
||||
for filename in groups
|
||||
if spec[filename]?
|
||||
for groupdata in spec[filename].groups
|
||||
parseGroup(groupdata)
|
||||
|
||||
filedir = 'game/procgen'
|
||||
languages = glob.sync(filedir)
|
||||
for language in languages
|
||||
files = glob.sync(language+'/*.cson')
|
||||
spec = {}
|
||||
for file in files
|
||||
data = CSON.parseCSONFile(file)
|
||||
if not data.groups?
|
||||
data.groups = []
|
||||
if data.phrases?
|
||||
data.groups.push({
|
||||
tags: [],
|
||||
phrases: data.phrases
|
||||
})
|
||||
data.phrases = null
|
||||
key = file.substr(0, file.lastIndexOf('.')) || file
|
||||
key = key.replace(filedir, '')
|
||||
spec[key] = data
|
||||
|
||||
for group in spec.game.groups
|
||||
parseGroup(group)
|
||||
|
||||
for filename, value of distribution
|
||||
distribution[filename] = Math.round(value * 1000) / 1000
|
||||
console.log distribution
|
BIN
fonts/open-iconic.eot
Normal file
BIN
fonts/open-iconic.eot
Normal file
Binary file not shown.
BIN
fonts/open-iconic.otf
Normal file
BIN
fonts/open-iconic.otf
Normal file
Binary file not shown.
543
fonts/open-iconic.svg
Normal file
543
fonts/open-iconic.svg
Normal file
|
@ -0,0 +1,543 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<!--
|
||||
2014-7-1: Created.
|
||||
-->
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>
|
||||
Created by FontForge 20120731 at Tue Jul 1 20:39:22 2014
|
||||
By P.J. Onori
|
||||
Created by P.J. Onori with FontForge 2.0 (http://fontforge.sf.net)
|
||||
</metadata>
|
||||
<defs>
|
||||
<font id="open-iconic" horiz-adv-x="800" >
|
||||
<font-face
|
||||
font-family="Icons"
|
||||
font-weight="400"
|
||||
font-stretch="normal"
|
||||
units-per-em="800"
|
||||
panose-1="2 0 5 3 0 0 0 0 0 0"
|
||||
ascent="800"
|
||||
descent="0"
|
||||
bbox="-0.5 -101 802 800.126"
|
||||
underline-thickness="50"
|
||||
underline-position="-100"
|
||||
unicode-range="U+E000-E0DE"
|
||||
/>
|
||||
<missing-glyph />
|
||||
<glyph glyph-name="" unicode=""
|
||||
d="M300 700h500v-700h-500v100h400v500h-400v100zM400 500l200 -150l-200 -150v100h-400v100h400v100z" />
|
||||
<glyph glyph-name="1" unicode=""
|
||||
d="M300 700h500v-700h-500v100h400v500h-400v100zM200 500v-100h400v-100h-400v-100l-200 150z" />
|
||||
<glyph glyph-name="2" unicode=""
|
||||
d="M350 700c193 0 350 -157 350 -350v-50h100l-200 -200l-200 200h100v50c0 138 -112 250 -250 250s-250 -112 -250 -250c0 193 157 350 350 350z" />
|
||||
<glyph glyph-name="3" unicode=""
|
||||
d="M450 700c193 0 350 -157 350 -350c0 138 -112 250 -250 250s-250 -112 -250 -250v-50h100l-200 -200l-200 200h100v50c0 193 157 350 350 350z" />
|
||||
<glyph glyph-name="4" unicode=""
|
||||
d="M0 700h800v-100h-800v100zM100 500h600v-100h-600v100zM0 300h800v-100h-800v100zM100 100h600v-100h-600v100z" />
|
||||
<glyph glyph-name="5" unicode=""
|
||||
d="M0 700h800v-100h-800v100zM0 500h600v-100h-600v100zM0 300h800v-100h-800v100zM0 100h600v-100h-600v100z" />
|
||||
<glyph glyph-name="6" unicode=""
|
||||
d="M0 700h800v-100h-800v100zM200 500h600v-100h-600v100zM0 300h800v-100h-800v100zM200 100h600v-100h-600v100z" />
|
||||
<glyph glyph-name="7" unicode=""
|
||||
d="M400 700c75 0 146 -23 206 -59l-75 -225l-322 234c57 31 122 50 191 50zM125 588l191 -138l-310 -222c-4 24 -6 47 -6 72c0 114 49 215 125 288zM688 575c69 -72 112 -168 112 -275c0 -35 -8 -68 -16 -100h-218zM216 253l112 -347c-128 23 -232 109 -287 222zM372 100
|
||||
h372c-64 -109 -177 -185 -310 -197z" />
|
||||
<glyph glyph-name="8" unicode="" horiz-adv-x="600"
|
||||
d="M200 800h100v-500h200l-247 -300l-253 300h200v500z" />
|
||||
<glyph glyph-name="9" unicode=""
|
||||
d="M400 800c221 0 400 -179 400 -400s-179 -400 -400 -400s-400 179 -400 400s179 400 400 400zM300 700v-300h-200l300 -300l300 300h-200v300h-200z" />
|
||||
<glyph glyph-name="a" unicode=""
|
||||
d="M400 800c221 0 400 -179 400 -400s-179 -400 -400 -400s-400 179 -400 400s179 400 400 400zM400 700l-300 -300l300 -300v200h300v200h-300v200z" />
|
||||
<glyph glyph-name="b" unicode=""
|
||||
d="M400 800c221 0 400 -179 400 -400s-179 -400 -400 -400s-400 179 -400 400s179 400 400 400zM400 700v-200h-300v-200h300v-200l300 300z" />
|
||||
<glyph glyph-name="c" unicode=""
|
||||
d="M400 800c221 0 400 -179 400 -400s-179 -400 -400 -400s-400 179 -400 400s179 400 400 400zM400 700l-300 -300h200v-300h200v300h200z" />
|
||||
<glyph glyph-name="d" unicode=""
|
||||
d="M300 600v-200h500v-100h-500v-200l-300 247z" />
|
||||
<glyph glyph-name="e" unicode=""
|
||||
d="M500 600l300 -247l-300 -253v200h-500v100h500v200z" />
|
||||
<glyph glyph-name="f" unicode="" horiz-adv-x="600"
|
||||
d="M200 800h200v-500h200l-297 -300l-303 300h200v500z" />
|
||||
<glyph glyph-name="10" unicode=""
|
||||
d="M300 700v-200h500v-200h-500v-200l-300 297z" />
|
||||
<glyph glyph-name="11" unicode=""
|
||||
d="M500 700l300 -297l-300 -303v200h-500v200h500v200z" />
|
||||
<glyph glyph-name="12" unicode="" horiz-adv-x="600"
|
||||
d="M297 800l303 -300h-200v-500h-200v500h-200z" />
|
||||
<glyph glyph-name="13" unicode="" horiz-adv-x="600"
|
||||
d="M247 800l253 -300h-200v-500h-100v500h-200z" />
|
||||
<glyph glyph-name="14" unicode=""
|
||||
d="M400 800h100v-800h-100v800zM200 700h100v-600h-100v600zM600 600h100v-400h-100v400zM0 500h100v-200h-100v200z" />
|
||||
<glyph glyph-name="15" unicode=""
|
||||
d="M116 600l72 -72c-54 -54 -88 -126 -88 -209s34 -159 88 -213l-72 -72c-72 72 -116 175 -116 285s44 209 116 281zM684 600c72 -72 116 -171 116 -281s-44 -213 -116 -285l-72 72c54 54 88 130 88 213s-34 155 -88 209zM259 460l69 -72c-18 -18 -28 -41 -28 -69
|
||||
s10 -54 28 -72l-69 -72c-36 36 -59 89 -59 144s23 105 59 141zM541 459c36 -36 59 -85 59 -140s-23 -108 -59 -144l-69 72c18 18 28 44 28 72s-10 51 -28 69z" />
|
||||
<glyph glyph-name="16" unicode="" horiz-adv-x="400"
|
||||
d="M200 800c110 0 200 -90 200 -200s-90 -200 -200 -200s-200 90 -200 200s90 200 200 200zM100 319c31 -11 65 -19 100 -19s68 8 100 19v-319l-100 100l-100 -100v319z" />
|
||||
<glyph glyph-name="17" unicode=""
|
||||
d="M400 800c220 0 400 -180 400 -400s-180 -400 -400 -400s-400 180 -400 400s180 400 400 400zM400 700c-166 0 -300 -134 -300 -300c0 -66 21 -126 56 -175l419 419c-49 35 -109 56 -175 56zM644 575l-419 -419c49 -35 109 -56 175 -56c166 0 300 134 300 300
|
||||
c0 66 -21 126 -56 175z" />
|
||||
<glyph glyph-name="18" unicode=""
|
||||
d="M0 700h100v-600h700v-100h-800v700zM500 700h200v-500h-200v500zM200 500h200v-300h-200v300z" />
|
||||
<glyph glyph-name="19" unicode=""
|
||||
d="M397 800c13 1 23 -4 34 -13c2 -2 214 -254 241 -287h128v-100h-100v-366c0 -18 -16 -34 -34 -34h-532c-18 0 -34 16 -34 34v366h-100v100h128l234 281c9 11 22 18 35 19zM400 672l-144 -172h288zM250 300c-28 0 -50 -22 -50 -50v-100c0 -28 22 -50 50 -50s50 22 50 50
|
||||
v100c0 28 -22 50 -50 50zM550 300c-28 0 -50 -22 -50 -50v-100c0 -28 22 -50 50 -50s50 22 50 50v100c0 28 -22 50 -50 50z" />
|
||||
<glyph glyph-name="1a" unicode=""
|
||||
d="M9 700h682c6 0 9 -4 9 -10v-190h100v-200h-100v-191c0 -6 -3 -9 -9 -9h-682c-6 0 -9 3 -9 9v582c0 6 3 9 9 9zM100 600v-400h500v400h-500z" />
|
||||
<glyph glyph-name="1b" unicode=""
|
||||
d="M9 700h682c6 0 9 -4 9 -10v-190h100v-200h-100v-191c0 -6 -3 -9 -9 -9h-682c-6 0 -9 3 -9 9v582c0 6 3 9 9 9z" />
|
||||
<glyph glyph-name="1c" unicode=""
|
||||
d="M92 650c0 23 19 50 45 50h3h5h5h500c28 0 50 -22 50 -50s-22 -50 -50 -50h-50v-141c9 -17 120 -231 166 -309c16 -26 34 -61 34 -106c0 -39 -15 -77 -41 -103h-3c-26 -25 -62 -41 -100 -41h-512c-39 0 -77 15 -103 41s-41 64 -41 103c0 46 18 80 34 106
|
||||
c46 78 157 292 166 309v141h-50c-2 0 -6 -1 -8 -1c-28 0 -50 23 -50 51zM500 600h-200v-162l-6 -10s-63 -123 -119 -228h450c-56 105 -119 228 -119 228l-6 10v162z" />
|
||||
<glyph glyph-name="1d" unicode=""
|
||||
d="M400 800c110 0 200 -90 200 -200c0 -104 52 -198 134 -266c41 -34 66 -82 66 -134h-800c0 52 25 100 66 134c82 68 134 162 134 266c0 110 90 200 200 200zM300 100h200c0 -55 -45 -100 -100 -100s-100 45 -100 100z" />
|
||||
<glyph glyph-name="1e" unicode="" horiz-adv-x="600"
|
||||
d="M150 800h50l350 -250l-225 -147l225 -153l-350 -250h-50v250l-75 -75l-75 75l150 150l-150 150l75 75l75 -75v250zM250 650v-200l150 100zM250 350v-200l150 100z" />
|
||||
<glyph glyph-name="1f" unicode=""
|
||||
d="M0 800h500c110 0 200 -90 200 -200c0 -47 -17 -91 -44 -125c85 -40 144 -125 144 -225c0 -138 -112 -250 -250 -250h-550v100c55 0 100 45 100 100v400c0 55 -45 100 -100 100v100zM300 700v-200h100c55 0 100 45 100 100s-45 100 -100 100h-100zM300 400v-300h150
|
||||
c83 0 150 67 150 150s-67 150 -150 150h-150z" />
|
||||
<glyph glyph-name="20" unicode="" horiz-adv-x="600"
|
||||
d="M300 800v-300h200l-300 -500v300h-200z" />
|
||||
<glyph glyph-name="21" unicode=""
|
||||
d="M100 800h300v-300l100 100l100 -100v300h50c28 0 50 -22 50 -50v-550h-550c-28 0 -50 -22 -50 -50s22 -50 50 -50h550v-100h-550c-83 0 -150 67 -150 150v550l3 19c8 39 39 70 78 78z" />
|
||||
<glyph glyph-name="22" unicode="" horiz-adv-x="400"
|
||||
d="M0 800h400v-800l-200 200l-200 -200v800z" />
|
||||
<glyph glyph-name="23" unicode=""
|
||||
d="M0 800h800v-100h-800v100zM0 600h300v-103h203v103h297v-591c0 -6 -3 -9 -9 -9h-782c-6 0 -9 3 -9 9v591z" />
|
||||
<glyph glyph-name="24" unicode=""
|
||||
d="M300 800h200c55 0 100 -45 100 -100v-100h191c6 0 9 -3 9 -9v-241c0 -28 -22 -50 -50 -50h-700c-28 0 -50 22 -50 50v241c0 6 3 9 9 9h191v100c0 55 45 100 100 100zM300 700v-100h200v100h-200zM0 209c16 -6 32 -9 50 -9h700c18 0 34 3 50 9v-200c0 -6 -3 -9 -9 -9h-782
|
||||
c-6 0 -9 3 -9 9v200z" />
|
||||
<glyph glyph-name="25" unicode="" horiz-adv-x="600"
|
||||
d="M300 800c58 0 110 -16 147 -53s53 -89 53 -147h-100c0 39 -11 61 -25 75s-36 25 -75 25c-35 0 -55 -10 -72 -31s-28 -55 -28 -94c0 -51 20 -107 28 -175h172v-100h-178c-14 -60 -49 -127 -113 -200h491v-100h-600v122l16 12c69 69 95 121 106 166h-122v100h125
|
||||
c-8 50 -25 106 -25 175c0 58 16 114 50 156c34 43 88 69 150 69z" />
|
||||
<glyph glyph-name="26" unicode=""
|
||||
d="M34 700h4h3h4h5h700c28 0 50 -22 50 -50v-700c0 -28 -22 -50 -50 -50h-700c-28 0 -50 22 -50 50v700v2c0 20 15 42 34 48zM150 600c-28 0 -50 -22 -50 -50s22 -50 50 -50s50 22 50 50s-22 50 -50 50zM350 600c-28 0 -50 -22 -50 -50s22 -50 50 -50h300c28 0 50 22 50 50
|
||||
s-22 50 -50 50h-300zM100 400v-400h600v400h-600z" />
|
||||
<glyph glyph-name="27" unicode=""
|
||||
d="M744 797l6 -3l44 -44c4 -4 3 -8 0 -12l-266 -375l-15 -13l-25 -12c-23 72 -78 127 -150 150l12 25l13 15l375 266zM266 400c74 0 134 -60 134 -134c0 -147 -119 -266 -266 -266c-48 0 -95 12 -134 34c80 46 134 133 134 232c0 74 58 134 132 134z" />
|
||||
<glyph glyph-name="28" unicode=""
|
||||
d="M9 451c0 23 19 50 46 50c8 0 19 -3 26 -7l131 -66l29 22c-79 81 -1 250 118 250s197 -167 119 -250l28 -22l131 66c6 4 12 7 21 7c28 0 50 -22 50 -50c0 -17 -12 -37 -27 -45l-115 -56c9 -16 19 -33 25 -50h68c28 0 50 -22 50 -50s-22 -50 -50 -50h-50
|
||||
c0 -23 -2 -45 -6 -66l78 -40c21 -5 37 -28 37 -49c0 -28 -22 -50 -50 -50c-10 0 -23 5 -31 11l-65 35c-24 -46 -62 -86 -103 -110c-35 19 -60 45 -60 72v135v4v5v6v5v5v87c0 28 -22 50 -50 50c-24 0 -45 -17 -50 -40c1 -3 1 -8 1 -11s0 -8 -1 -11v-82v-4v-5v-144
|
||||
c0 -28 -24 -53 -59 -72c-41 25 -79 64 -103 110l-66 -35c-8 -6 -21 -11 -31 -11c-28 0 -50 22 -50 50c0 21 16 44 37 49l78 40c-4 21 -6 43 -6 66h-50h-5c-28 0 -50 22 -50 50c0 26 22 50 50 50h5h69c6 17 16 34 25 50l-116 56c-16 7 -28 27 -28 45z" />
|
||||
<glyph glyph-name="29" unicode=""
|
||||
d="M600 700h91c6 0 9 -3 9 -9v-582c0 -6 -3 -9 -9 -9h-91v600zM210 503l290 147v-500l-250 125v-3c-15 0 -25 -8 -28 -22l75 -178c11 -25 0 -58 -25 -69s-58 0 -69 25l-103 272h-91c-6 0 -9 3 -9 9v182c0 6 3 9 9 9h182z" />
|
||||
<glyph glyph-name="2a" unicode=""
|
||||
d="M9 800h682c6 0 9 -3 9 -9v-782c0 -6 -3 -9 -9 -9h-682c-6 0 -9 3 -9 9v782c0 6 3 9 9 9zM100 700v-200h500v200h-500zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400v-300h100v300h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100z" />
|
||||
<glyph glyph-name="2b" unicode=""
|
||||
d="M0 800h700v-200h-700v200zM0 500h700v-491c0 -6 -3 -9 -9 -9h-682c-6 0 -9 3 -9 9v491zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100z" />
|
||||
<glyph glyph-name="2c" unicode=""
|
||||
d="M409 800h182c6 0 10 -4 12 -9l94 -182c2 -5 6 -9 12 -9h82c6 0 9 -3 9 -9v-582c0 -6 -3 -9 -9 -9h-782c-6 0 -9 3 -9 9v441c0 83 67 150 150 150h141c6 0 10 4 12 9l94 182c2 5 6 9 12 9zM150 500c-28 0 -50 -22 -50 -50s22 -50 50 -50s50 22 50 50s-22 50 -50 50z
|
||||
M500 500c-110 0 -200 -90 -200 -200s90 -200 200 -200s200 90 200 200s-90 200 -200 200zM500 400c55 0 100 -45 100 -100s-45 -100 -100 -100s-100 45 -100 100s45 100 100 100z" />
|
||||
<glyph glyph-name="2d" unicode=""
|
||||
d="M0 600h800l-400 -400z" />
|
||||
<glyph glyph-name="2e" unicode="" horiz-adv-x="400"
|
||||
d="M400 800v-800l-400 400z" />
|
||||
<glyph glyph-name="2f" unicode="" horiz-adv-x="400"
|
||||
d="M0 800l400 -400l-400 -400v800z" />
|
||||
<glyph glyph-name="30" unicode=""
|
||||
d="M400 600l400 -400h-800z" />
|
||||
<glyph glyph-name="31" unicode=""
|
||||
d="M0 550c0 23 20 50 46 50h3h5h4h200c17 0 37 -13 44 -28l38 -72h444c14 0 19 -12 15 -25l-81 -250c-4 -13 -21 -25 -35 -25h-350c-14 0 -30 12 -34 25c-27 83 -54 167 -81 250l-10 25h-150c-2 0 -5 -1 -7 -1c-28 0 -51 23 -51 51zM358 100c28 0 50 -22 50 -50
|
||||
s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50zM658 100c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50z" />
|
||||
<glyph glyph-name="32" unicode=""
|
||||
d="M0 700h500v-100h-300v-300h-100l-100 -100v500zM300 500h500v-500l-100 100h-400v400z" />
|
||||
<glyph glyph-name="33" unicode=""
|
||||
d="M641 700l143 -141l-493 -493c-71 76 -146 148 -219 222l-72 71l141 141c50 -51 101 -101 153 -150c116 117 234 231 347 350z" />
|
||||
<glyph glyph-name="34" unicode=""
|
||||
d="M150 600l250 -250l250 250l150 -150l-400 -400l-400 400z" />
|
||||
<glyph glyph-name="35" unicode="" horiz-adv-x="600"
|
||||
d="M400 800l150 -150l-250 -250l250 -250l-150 -150l-400 400z" />
|
||||
<glyph glyph-name="36" unicode="" horiz-adv-x="600"
|
||||
d="M150 800l400 -400l-400 -400l-150 150l250 250l-250 250z" />
|
||||
<glyph glyph-name="37" unicode=""
|
||||
d="M400 600l400 -400l-150 -150l-250 250l-250 -250l-150 150z" />
|
||||
<glyph glyph-name="38" unicode=""
|
||||
d="M400 800c221 0 400 -179 400 -400s-179 -400 -400 -400s-400 179 -400 400s179 400 400 400zM600 622l-250 -250l-100 100l-72 -72l172 -172l322 322z" />
|
||||
<glyph glyph-name="39" unicode=""
|
||||
d="M400 800c221 0 400 -179 400 -400s-179 -400 -400 -400s-400 179 -400 400s179 400 400 400zM250 622l-72 -72l150 -150l-150 -150l72 -72l150 150l150 -150l72 72l-150 150l150 150l-72 72l-150 -150z" />
|
||||
<glyph glyph-name="3a" unicode=""
|
||||
d="M350 800c28 0 50 -22 50 -50v-50h75c14 0 25 -11 25 -25v-75h-300v75c0 14 11 25 25 25h75v50c0 28 22 50 50 50zM25 700h75v-200h500v200h75c14 0 25 -11 25 -25v-650c0 -14 -11 -25 -25 -25h-650c-14 0 -25 11 -25 25v650c0 14 11 25 25 25z" />
|
||||
<glyph glyph-name="3b" unicode=""
|
||||
d="M400 800c220 0 400 -180 400 -400s-180 -400 -400 -400s-400 180 -400 400s180 400 400 400zM400 700c-166 0 -300 -134 -300 -300s134 -300 300 -300s300 134 300 300s-134 300 -300 300zM350 600h100v-181c23 -24 47 -47 72 -69l-72 -72c-27 30 -55 59 -84 88l-16 12
|
||||
v222z" />
|
||||
<glyph glyph-name="3c" unicode=""
|
||||
d="M450 800c138 0 250 -112 250 -250v-50c58 -21 100 -85 100 -150c0 -18 -3 -34 -9 -50h-191v50c0 83 -67 150 -150 150s-150 -67 -150 -150v-50h-272c-17 30 -28 63 -28 100c0 110 90 200 200 200c23 114 129 200 250 200zM434 400h3h4c3 0 6 1 9 1c28 0 50 -22 50 -50v-1
|
||||
v-150h150l-200 -200l-200 200h150v150v2c0 20 15 42 34 48z" />
|
||||
<glyph glyph-name="3d" unicode=""
|
||||
d="M450 800c138 0 250 -112 250 -250v-50c58 -21 100 -85 100 -150c0 -18 -3 -34 -9 -50h-141l-200 200l-200 -200h-222c-17 30 -28 63 -28 100c0 110 90 200 200 200c23 114 129 200 250 200zM450 350l250 -250h-200v-50c0 -28 -22 -50 -50 -50s-50 22 -50 50v50h-200z" />
|
||||
<glyph glyph-name="3e" unicode=""
|
||||
d="M450 700c138 0 250 -112 250 -250v-50c58 -21 100 -85 100 -150c0 -83 -67 -150 -150 -150h-450c-110 0 -200 90 -200 200s90 200 200 200c23 114 129 200 250 200z" />
|
||||
<glyph glyph-name="3f" unicode=""
|
||||
d="M250 800c82 0 154 -40 200 -100c-143 0 -270 -85 -325 -209c-36 -10 -70 -25 -100 -47c-16 33 -25 67 -25 106c0 138 112 250 250 250zM450 600c138 0 250 -112 250 -250v-50c58 -21 100 -85 100 -150c0 -83 -67 -150 -150 -150h-450c-110 0 -200 90 -200 200
|
||||
s90 200 200 200c23 114 129 200 250 200z" />
|
||||
<glyph glyph-name="40" unicode=""
|
||||
d="M500 700h100l-300 -600h-100zM100 600h100l-100 -200l100 -200h-100l-100 200zM600 600h100l100 -200l-100 -200h-100l100 200z" />
|
||||
<glyph glyph-name="41" unicode=""
|
||||
d="M350 800h100l50 -119l28 -12l119 50l72 -72l-50 -119l12 -28l119 -50v-100l-119 -50l-12 -28l50 -119l-72 -72l-119 50l-28 -12l-50 -119h-100l-50 119l-28 12l-119 -50l-72 72l50 119l-12 28l-119 50v100l119 50l12 28l-50 119l72 72l119 -50l28 12zM400 550
|
||||
c-83 0 -150 -67 -150 -150s67 -150 150 -150s150 67 150 150s-67 150 -150 150z" />
|
||||
<glyph glyph-name="42" unicode=""
|
||||
d="M0 800h800v-200h-800v200zM200 500h400l-200 -200zM0 100h800v-100h-800v100z" />
|
||||
<glyph glyph-name="43" unicode=""
|
||||
d="M0 800h100v-800h-100v800zM600 800h200v-800h-200v800zM500 600v-400l-200 200z" />
|
||||
<glyph glyph-name="44" unicode=""
|
||||
d="M0 800h200v-800h-200v800zM700 800h100v-800h-100v800zM300 600l200 -200l-200 -200v400z" />
|
||||
<glyph glyph-name="45" unicode=""
|
||||
d="M0 800h800v-100h-800v100zM400 500l200 -200h-400zM0 200h800v-200h-800v200z" />
|
||||
<glyph glyph-name="46" unicode=""
|
||||
d="M150 700c83 0 150 -67 150 -150v-50h100v50c0 83 67 150 150 150s150 -67 150 -150s-67 -150 -150 -150h-50v-100h50c83 0 150 -67 150 -150s-67 -150 -150 -150s-150 67 -150 150v50h-100v-50c0 -83 -67 -150 -150 -150s-150 67 -150 150s67 150 150 150h50v100h-50
|
||||
c-83 0 -150 67 -150 150s67 150 150 150zM150 600c-28 0 -50 -22 -50 -50s22 -50 50 -50h50v50c0 28 -22 50 -50 50zM550 600c-28 0 -50 -22 -50 -50v-50h50c28 0 50 22 50 50s-22 50 -50 50zM300 400v-100h100v100h-100zM150 200c-28 0 -50 -22 -50 -50s22 -50 50 -50
|
||||
s50 22 50 50v50h-50zM500 200v-50c0 -28 22 -50 50 -50s50 22 50 50s-22 50 -50 50h-50z" />
|
||||
<glyph glyph-name="47" unicode=""
|
||||
d="M0 791c0 5 4 9 9 9h782c6 0 9 -4 9 -10v-790l-200 200h-591c-6 0 -9 3 -9 9v582z" />
|
||||
<glyph glyph-name="48" unicode=""
|
||||
d="M400 800c220 0 400 -180 400 -400s-180 -400 -400 -400s-400 180 -400 400s180 400 400 400zM400 700c-166 0 -300 -134 -300 -300s134 -300 300 -300s300 134 300 300s-134 300 -300 300zM600 600l-100 -300l-300 -100l100 300zM400 450c-28 0 -50 -22 -50 -50
|
||||
s22 -50 50 -50s50 22 50 50s-22 50 -50 50z" />
|
||||
<glyph glyph-name="49" unicode=""
|
||||
d="M400 800c220 0 400 -180 400 -400s-180 -400 -400 -400s-400 180 -400 400s180 400 400 400zM400 700v-600c166 0 300 134 300 300s-134 300 -300 300z" />
|
||||
<glyph glyph-name="4a" unicode=""
|
||||
d="M0 800h800v-100h-800v100zM0 600h500v-100h-500v100zM0 300h800v-100h-800v100zM0 100h600v-100h-600v100zM750 100c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50z" />
|
||||
<glyph glyph-name="4b" unicode=""
|
||||
d="M25 700h750c14 0 25 -11 25 -25v-75h-800v75c0 14 11 25 25 25zM0 500h800v-375c0 -14 -11 -25 -25 -25h-750c-14 0 -25 11 -25 25v375zM100 300v-100h100v100h-100zM300 300v-100h100v100h-100z" />
|
||||
<glyph glyph-name="4c" unicode=""
|
||||
d="M100 800h100v-100h450l100 100l50 -50l-100 -100v-450h100v-100h-100v-100h-100v100h-500v500h-100v100h100v100zM200 600v-350l350 350h-350zM600 550l-350 -350h350v350z" />
|
||||
<glyph glyph-name="4d" unicode=""
|
||||
d="M400 800c220 0 400 -180 400 -400s-180 -400 -400 -400s-400 180 -400 400s180 400 400 400zM400 700c-166 0 -300 -134 -300 -300s134 -300 300 -300s300 134 300 300s-134 300 -300 300zM400 600c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50z
|
||||
M200 452c0 20 15 42 34 48h3h3h8c12 0 28 -7 36 -16l91 -90l25 6c55 0 100 -45 100 -100s-45 -100 -100 -100s-100 45 -100 100l6 25l-90 91c-9 8 -16 24 -16 36zM550 500c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50z" />
|
||||
<glyph glyph-name="4e" unicode=""
|
||||
d="M300 800h200v-300h200l-300 -300l-300 300h200v300zM0 100h800v-100h-800v100z" />
|
||||
<glyph glyph-name="4f" unicode=""
|
||||
d="M0 800h800v-100h-800v100zM400 600l300 -300h-200v-300h-200v300h-200z" />
|
||||
<glyph glyph-name="50" unicode=""
|
||||
d="M200 700h600v-600h-600l-200 300zM350 622l-72 -72l150 -150l-150 -150l72 -72l150 150l150 -150l72 72l-150 150l150 150l-72 72l-150 -150z" />
|
||||
<glyph glyph-name="51" unicode=""
|
||||
d="M400 700c220 0 400 -180 400 -400h-100c0 166 -134 300 -300 300s-300 -134 -300 -300h-100c0 220 180 400 400 400zM341 491l59 -88l59 88c81 -25 141 -101 141 -191c0 -110 -90 -200 -200 -200s-200 90 -200 200c0 90 60 166 141 191z" />
|
||||
<glyph glyph-name="52" unicode=""
|
||||
d="M0 800h300v-400h400v-400h-700v800zM400 800l300 -300h-300v300zM100 600v-100h100v100h-100zM100 400v-100h100v100h-100zM100 200v-100h400v100h-400z" />
|
||||
<glyph glyph-name="53" unicode="" horiz-adv-x="600"
|
||||
d="M200 700h100v-100h75c30 0 58 -6 81 -22s44 -44 44 -78v-100h-100v94c-4 3 -13 6 -25 6h-250c-14 0 -25 -11 -25 -25v-50c0 -15 20 -40 34 -44l257 -65c66 -16 109 -73 109 -141v-50c0 -68 -57 -125 -125 -125h-75v-100h-100v100h-75c-30 0 -58 6 -81 22s-44 44 -44 78
|
||||
v100h100v-94c4 -3 13 -6 25 -6h250c14 0 25 11 25 25v50c0 15 -20 40 -34 44l-257 65c-66 16 -109 73 -109 141v50c0 68 57 125 125 125h75v100z" />
|
||||
<glyph glyph-name="54" unicode=""
|
||||
d="M0 700h300v-300l-300 -300v600zM500 700h300v-300l-300 -300v600z" />
|
||||
<glyph glyph-name="55" unicode=""
|
||||
d="M300 700v-600h-300v300zM800 700v-600h-300v300z" />
|
||||
<glyph glyph-name="56" unicode=""
|
||||
d="M300 700v-100c-111 0 -200 -89 -200 -200h200v-300h-300v300c0 165 135 300 300 300zM800 700v-100c-111 0 -200 -89 -200 -200h200v-300h-300v300c0 165 135 300 300 300z" />
|
||||
<glyph glyph-name="57" unicode=""
|
||||
d="M0 700h300v-300c0 -165 -135 -300 -300 -300v100c111 0 200 89 200 200h-200v300zM500 700h300v-300c0 -165 -135 -300 -300 -300v100c111 0 200 89 200 200h-200v300z" />
|
||||
<glyph glyph-name="58" unicode="" horiz-adv-x="600"
|
||||
d="M300 800l34 -34c11 -11 266 -270 266 -488c0 -165 -135 -300 -300 -300s-300 135 -300 300c0 218 255 477 266 488zM150 328c-28 0 -50 -22 -50 -50c0 -110 90 -200 200 -200c28 0 50 22 50 50s-22 50 -50 50c-55 0 -100 45 -100 100c0 28 -22 50 -50 50z" />
|
||||
<glyph glyph-name="59" unicode=""
|
||||
d="M400 800l400 -500h-800zM0 200h800v-200h-800v200z" />
|
||||
<glyph glyph-name="5a" unicode="" horiz-adv-x="600"
|
||||
d="M300 800l300 -300h-600zM0 300h600l-300 -300z" />
|
||||
<glyph glyph-name="5b" unicode=""
|
||||
d="M0 500h200v-200h-200v200zM300 500h200v-200h-200v200zM600 500h200v-200h-200v200z" />
|
||||
<glyph glyph-name="5c" unicode=""
|
||||
d="M0 700h800v-100l-400 -200l-400 200v100zM0 500l400 -200l400 200v-400h-800v400z" />
|
||||
<glyph glyph-name="5d" unicode=""
|
||||
d="M400 800l400 -200v-600h-800v600zM400 688l-300 -150v-188l300 -150l300 150v188zM200 500h400v-100l-200 -100l-200 100v100z" />
|
||||
<glyph glyph-name="5e" unicode=""
|
||||
d="M600 700c69 0 134 -19 191 -50l-16 -106c-49 35 -109 56 -175 56c-131 0 -240 -84 -281 -200h331l-16 -100h-334c0 -36 8 -68 19 -100h297l-16 -100h-222c55 -61 133 -100 222 -100c78 0 147 30 200 78v-122c-59 -35 -127 -56 -200 -56c-147 0 -274 82 -344 200h-256
|
||||
l19 100h197c-8 32 -16 66 -16 100h-200l25 100h191c45 172 198 300 384 300z" />
|
||||
<glyph glyph-name="5f" unicode=""
|
||||
d="M0 700h700v-100h-700v100zM0 500h500v-100h-500v100zM0 300h800v-100h-800v100zM0 100h100v-100h-100v100zM200 100h100v-100h-100v100zM400 100h100v-100h-100v100z" />
|
||||
<glyph glyph-name="60" unicode=""
|
||||
d="M0 800h800v-100h-800v100zM200 600h400l-200 -200zM0 200h800v-200h-800v200z" />
|
||||
<glyph glyph-name="61" unicode=""
|
||||
d="M0 800h100v-800h-100v800zM600 800h200v-800h-200v800zM200 600l200 -200l-200 -200v400z" />
|
||||
<glyph glyph-name="62" unicode=""
|
||||
d="M0 800h200v-800h-200v800zM700 800h100v-800h-100v800zM600 600v-400l-200 200z" />
|
||||
<glyph glyph-name="63" unicode=""
|
||||
d="M0 800h800v-200h-800v200zM400 400l200 -200h-400zM0 100h800v-100h-800v100z" />
|
||||
<glyph glyph-name="64" unicode=""
|
||||
d="M0 800h200v-100h-100v-600h600v100h100v-200h-800v800zM400 800h400v-400l-150 150l-250 -250l-100 100l250 250z" />
|
||||
<glyph glyph-name="65" unicode=""
|
||||
d="M403 700c247 0 397 -300 397 -300s-150 -300 -397 -300c-253 0 -403 300 -403 300s150 300 403 300zM400 600c-110 0 -200 -90 -200 -200s90 -200 200 -200s200 90 200 200s-90 200 -200 200zM400 500c10 0 19 -3 28 -6c-16 -8 -28 -24 -28 -44c0 -28 22 -50 50 -50
|
||||
c20 0 36 12 44 28c3 -9 6 -18 6 -28c0 -55 -45 -100 -100 -100s-100 45 -100 100s45 100 100 100z" />
|
||||
<glyph glyph-name="66" unicode="" horiz-adv-x="900"
|
||||
d="M331 700h3h3c3 1 7 1 10 1c12 0 29 -8 37 -17l94 -93l66 65c57 57 155 57 212 0c58 -58 58 -154 0 -212l-65 -66l93 -94c10 -8 18 -25 18 -38c0 -28 -22 -50 -50 -50c-13 0 -32 9 -40 20l-62 65l-381 -381h-269v272l375 381l-63 63c-9 8 -16 24 -16 36c0 20 16 42 35 48z
|
||||
M447 481l-313 -315l128 -132l316 316z" />
|
||||
<glyph glyph-name="67" unicode=""
|
||||
d="M0 800h300v-400h400v-400h-700v800zM400 800l300 -300h-300v300z" />
|
||||
<glyph glyph-name="68" unicode=""
|
||||
d="M200 800c0 0 200 -100 200 -300s-298 -302 -200 -500c0 0 -200 100 -200 300s300 300 200 500zM500 500c0 0 200 -100 200 -300c0 -150 -60 -200 -100 -200h-300c0 200 300 300 200 500z" />
|
||||
<glyph glyph-name="69" unicode=""
|
||||
d="M0 800h100v-800h-100v800zM200 800h300v-100h300l-200 -203l200 -197h-400v100h-200v400z" />
|
||||
<glyph glyph-name="6a" unicode="" horiz-adv-x="400"
|
||||
d="M150 800h150l-100 -200h200l-150 -300h150l-300 -300l-100 300h134l66 200h-200z" />
|
||||
<glyph glyph-name="6b" unicode=""
|
||||
d="M0 800h300v-100h500v-100h-800v200zM0 500h800v-450c0 -28 -22 -50 -50 -50h-700c-28 0 -50 22 -50 50v450z" />
|
||||
<glyph glyph-name="6c" unicode=""
|
||||
d="M150 800c83 0 150 -67 150 -150c0 -66 -41 -121 -100 -141v-118c15 5 33 9 50 9h200c28 0 50 22 50 50v59c-59 20 -100 75 -100 141c0 83 67 150 150 150s150 -67 150 -150c0 -66 -41 -121 -100 -141v-59c0 -82 -68 -150 -150 -150h-200c-14 0 -25 -7 -34 -16
|
||||
c50 -24 84 -74 84 -134c0 -83 -67 -150 -150 -150s-150 67 -150 150c0 66 41 121 100 141v218c-59 20 -100 75 -100 141c0 83 67 150 150 150z" />
|
||||
<glyph glyph-name="6d" unicode=""
|
||||
d="M0 800h400l-150 -150l150 -150l-100 -100l-150 150l-150 -150v400zM500 400l150 -150l150 150v-400h-400l150 150l-150 150z" />
|
||||
<glyph glyph-name="6e" unicode=""
|
||||
d="M100 800l150 -150l150 150v-400h-400l150 150l-150 150zM400 400h400l-150 -150l150 -150l-100 -100l-150 150l-150 -150v400z" />
|
||||
<glyph glyph-name="6f" unicode=""
|
||||
d="M400 800c221 0 400 -179 400 -400s-179 -400 -400 -400s-400 179 -400 400s179 400 400 400zM400 700c-56 0 -108 -17 -153 -44l22 -19c33 -18 13 -48 -13 -59c-30 -13 -77 10 -65 -41c13 -55 -27 -3 -47 -15c-42 -26 49 -152 31 -156l-59 34c-8 0 -13 -5 -16 -10
|
||||
c1 -30 10 -57 19 -84c28 -11 77 -2 100 -25c47 -28 97 -115 75 -159c34 -13 68 -22 106 -22c101 0 193 48 247 125c3 24 -8 44 -50 44c-69 0 -156 13 -153 97c2 46 101 108 66 143c-30 30 12 39 12 66c0 37 -65 32 -69 50s20 36 41 56c-30 10 -60 19 -94 19zM631 591
|
||||
c-38 -11 -94 -35 -87 -53c6 -15 52 -1 65 -13c11 -10 16 -59 44 -31l22 22v3c-11 26 -26 50 -44 72z" />
|
||||
<glyph glyph-name="70" unicode=""
|
||||
d="M703 800l97 -100l-400 -400l-100 100l-200 -203l-100 100l300 303l100 -100zM0 100h800v-100h-800v100z" />
|
||||
<glyph glyph-name="71" unicode=""
|
||||
d="M0 700h100v-100h-100v100zM200 700h100v-100h-100v100zM400 700h100v-100h-100v100zM600 700h100v-100h-100v100zM0 500h100v-100h-100v100zM200 500h100v-100h-100v100zM400 500h100v-100h-100v100zM600 500h100v-100h-100v100zM0 300h100v-100h-100v100zM200 300h100
|
||||
v-100h-100v100zM400 300h100v-100h-100v100zM600 300h100v-100h-100v100zM0 100h100v-100h-100v100zM200 100h100v-100h-100v100zM400 100h100v-100h-100v100zM600 100h100v-100h-100v100z" />
|
||||
<glyph glyph-name="72" unicode=""
|
||||
d="M0 800h200v-200h-200v200zM300 800h200v-200h-200v200zM600 800h200v-200h-200v200zM0 500h200v-200h-200v200zM300 500h200v-200h-200v200zM600 500h200v-200h-200v200zM0 200h200v-200h-200v200zM300 200h200v-200h-200v200zM600 200h200v-200h-200v200z" />
|
||||
<glyph glyph-name="73" unicode=""
|
||||
d="M0 800h300v-300h-300v300zM500 800h300v-300h-300v300zM0 300h300v-300h-300v300zM500 300h300v-300h-300v300z" />
|
||||
<glyph glyph-name="74" unicode=""
|
||||
d="M19 800h662c11 0 19 -8 19 -19v-331c0 -28 -22 -50 -50 -50h-600c-28 0 -50 22 -50 50v331c0 11 8 19 19 19zM0 309c16 -6 32 -9 50 -9h600c18 0 34 3 50 9v-290c0 -11 -8 -19 -19 -19h-662c-11 0 -19 8 -19 19v290zM550 200c-28 0 -50 -22 -50 -50s22 -50 50 -50
|
||||
s50 22 50 50s-22 50 -50 50z" />
|
||||
<glyph glyph-name="75" unicode=""
|
||||
d="M0 700h300v-100h-50c-28 0 -50 -22 -50 -50v-150h300v150c0 28 -22 50 -50 50h-50v100h300v-100h-50c-28 0 -50 -22 -50 -50v-400c0 -28 22 -50 50 -50h50v-100h-300v100h50c28 0 50 22 50 50v150h-300v-150c0 -28 22 -50 50 -50h50v-100h-300v100h50c28 0 50 22 50 50
|
||||
v400c0 28 -22 50 -50 50h-50v100z" />
|
||||
<glyph glyph-name="76" unicode=""
|
||||
d="M400 700c165 0 300 -135 300 -300v-100h50c28 0 50 -22 50 -50v-200c0 -28 -22 -50 -50 -50h-100c-28 0 -50 22 -50 50v350c0 111 -89 200 -200 200s-200 -89 -200 -200v-350c0 -28 -22 -50 -50 -50h-100c-28 0 -50 22 -50 50v200c0 28 22 50 50 50h50v100
|
||||
c0 165 135 300 300 300z" />
|
||||
<glyph glyph-name="77" unicode=""
|
||||
d="M0 500c0 109 91 200 200 200s200 -91 200 -200c0 109 91 200 200 200s200 -91 200 -200c0 -55 -23 -105 -59 -141l-341 -340l-341 340c-36 36 -59 86 -59 141z" />
|
||||
<glyph glyph-name="78" unicode=""
|
||||
d="M400 700l400 -300l-100 3v-403h-200v200h-200v-200h-200v400h-100z" />
|
||||
<glyph glyph-name="79" unicode=""
|
||||
d="M0 800h800v-800h-800v800zM100 700v-300l100 100l400 -400h100v100l-200 200l100 100l100 -100v300h-600z" />
|
||||
<glyph glyph-name="7a" unicode=""
|
||||
d="M19 800h762c11 0 19 -8 19 -19v-762c0 -11 -8 -19 -19 -19h-762c-11 0 -19 8 -19 19v762c0 11 8 19 19 19zM100 600v-300h100l100 -100h200l100 100h100v300h-600z" />
|
||||
<glyph glyph-name="7b" unicode=""
|
||||
d="M200 600c80 0 142 -56 200 -122c58 66 119 122 200 122c131 0 200 -101 200 -200s-69 -200 -200 -200c-81 0 -142 56 -200 122c-58 -66 -121 -122 -200 -122c-131 0 -200 101 -200 200s69 200 200 200zM200 500c-74 0 -100 -54 -100 -100s26 -100 100 -100
|
||||
c42 0 88 47 134 100c-46 53 -92 100 -134 100zM600 500c-43 0 -88 -47 -134 -100c46 -53 91 -100 134 -100c74 0 100 54 100 100s-26 100 -100 100z" />
|
||||
<glyph glyph-name="7c" unicode="" horiz-adv-x="400"
|
||||
d="M300 800c55 0 100 -45 100 -100s-45 -100 -100 -100s-100 45 -100 100s45 100 100 100zM150 550c83 0 150 -69 150 -150c0 -66 -100 -214 -100 -250c0 -28 22 -50 50 -50s50 22 50 50h100c0 -83 -67 -150 -150 -150s-150 64 -150 150s100 222 100 250s-22 50 -50 50
|
||||
s-50 -22 -50 -50h-100c0 83 67 150 150 150z" />
|
||||
<glyph glyph-name="7d" unicode=""
|
||||
d="M200 800h500v-100h-122c-77 -197 -156 -392 -234 -588l-6 -12h162v-100h-500v100h122c77 197 156 392 234 588l7 12h-163v100z" />
|
||||
<glyph glyph-name="7e" unicode=""
|
||||
d="M0 700h800v-100h-800v100zM0 500h800v-100h-800v100zM0 300h800v-100h-800v100zM100 100h600v-100h-600v100z" />
|
||||
<glyph glyph-name="7f" unicode=""
|
||||
d="M0 700h800v-100h-800v100zM0 500h800v-100h-800v100zM0 300h800v-100h-800v100zM0 100h600v-100h-600v100z" />
|
||||
<glyph glyph-name="80" unicode=""
|
||||
d="M0 700h800v-100h-800v100zM0 500h800v-100h-800v100zM0 300h800v-100h-800v100zM200 100h600v-100h-600v100z" />
|
||||
<glyph glyph-name="81" unicode=""
|
||||
d="M550 800c138 0 250 -112 250 -250s-112 -250 -250 -250c-16 0 -32 0 -47 3l-3 -3v-100h-200v-200h-300v200l303 303c-3 15 -3 31 -3 47c0 138 112 250 250 250zM600 700c-55 0 -100 -45 -100 -100s45 -100 100 -100s100 45 100 100s-45 100 -100 100z" />
|
||||
<glyph glyph-name="82" unicode=""
|
||||
d="M134 600h3h4h4h5h500c28 0 50 -22 50 -50v-350h100v-150c0 -28 -22 -50 -50 -50h-700c-28 0 -50 22 -50 50v150h100v350v2c0 20 15 42 34 48zM200 500v-300h100v-100h200v100h100v300h-400z" />
|
||||
<glyph glyph-name="83" unicode=""
|
||||
d="M0 800h400v-400h-400v400zM500 600h100v-400h-400v100h300v300zM700 400h100v-400h-400v100h300v300z" />
|
||||
<glyph glyph-name="84" unicode="" horiz-adv-x="600"
|
||||
d="M337 694c6 4 12 7 21 7c28 0 50 -22 50 -50c0 -17 -12 -37 -27 -45l-300 -150c-8 -6 -21 -11 -31 -11c-28 0 -50 22 -50 50c0 21 16 44 37 49zM437 544c6 4 12 7 21 7c28 0 50 -22 50 -50c0 -17 -12 -37 -27 -45l-400 -200c-8 -6 -21 -11 -31 -11c-28 0 -50 22 -50 50
|
||||
c0 21 16 44 37 49zM437 344c6 4 12 7 21 7c28 0 50 -22 50 -50c0 -17 -12 -37 -27 -45l-106 -56c24 -4 43 -26 43 -50c0 -28 -23 -51 -51 -51c-2 0 -6 1 -8 1h-200c-26 1 -48 24 -48 50c0 16 12 36 26 44zM151 -50c0 23 20 50 46 50h3h4h5h100c28 0 50 -22 50 -50
|
||||
s-22 -50 -50 -50h-100c-2 0 -6 -1 -8 -1c-28 0 -50 23 -50 51z" />
|
||||
<glyph glyph-name="85" unicode=""
|
||||
d="M199 800h100v-200h-200v100h100v100zM586 797h1c18 1 38 1 56 -3c36 -8 69 -26 97 -54c78 -78 78 -203 0 -281l-150 -150c-8 -13 -28 -24 -43 -24c-28 0 -50 22 -50 50c0 15 11 35 24 43l150 150c40 40 39 105 0 144c-41 41 -110 34 -144 0l-44 -44
|
||||
c-8 -13 -27 -24 -42 -24c-28 0 -50 22 -50 50c0 15 11 35 24 43l43 44c32 33 72 53 128 56zM208 490c4 5 14 16 22 16h3c2 0 6 1 8 1c28 0 50 -22 50 -50c0 -11 -6 -27 -14 -35l-150 -150c-40 -40 -39 -105 0 -144c41 -41 110 -34 144 0l44 44c8 13 27 24 42 24
|
||||
c28 0 50 -22 50 -50c0 -15 -11 -35 -24 -43l-43 -44c-22 -22 -48 -37 -75 -47c-70 -25 -151 -9 -207 47c-78 78 -78 203 0 281zM499 200h200v-100h-100v-100h-100v200z" />
|
||||
<glyph glyph-name="86" unicode=""
|
||||
d="M586 797c18 1 39 1 57 -3c36 -8 69 -26 97 -54c78 -78 78 -203 0 -281l-150 -150c-62 -62 -132 -81 -182 -78s-69 17 -84 25s-26 27 -26 44c0 28 22 51 50 51c8 0 19 -3 26 -7c0 0 15 -11 41 -13s62 3 106 47l150 150c40 40 39 105 0 144c-41 41 -110 34 -144 0
|
||||
c-8 -13 -28 -24 -43 -24c-28 0 -50 22 -50 50c0 15 11 35 24 43c32 33 72 53 128 56zM386 566c50 -2 64 -17 85 -22s37 -28 37 -49c0 -28 -22 -50 -50 -50c-10 0 -23 5 -31 11c0 0 -19 9 -47 10s-63 -4 -103 -44l-150 -150c-40 -40 -39 -105 0 -144c41 -41 110 -34 144 0
|
||||
c8 13 27 24 42 24c28 0 50 -22 50 -50c0 -15 -10 -35 -23 -43c-22 -22 -48 -37 -75 -47c-70 -25 -151 -9 -207 47c-78 78 -78 203 0 281l150 150c60 60 128 78 178 76z" />
|
||||
<glyph glyph-name="87" unicode=""
|
||||
d="M0 700h300v-300h-300v300zM400 700h400v-100h-400v100zM400 500h300v-100h-300v100zM0 300h300v-300h-300v300zM400 300h400v-100h-400v100zM400 100h300v-100h-300v100z" />
|
||||
<glyph glyph-name="88" unicode=""
|
||||
d="M50 700c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50zM200 700h600v-100h-600v100zM50 500c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50zM200 500h600v-100h-600v100zM50 300c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50
|
||||
s22 50 50 50zM200 300h600v-100h-600v100zM50 100c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50zM200 100h600v-100h-600v100z" />
|
||||
<glyph glyph-name="89" unicode=""
|
||||
d="M800 800l-400 -800l-100 300l-300 100z" />
|
||||
<glyph glyph-name="8a" unicode="" horiz-adv-x="600"
|
||||
d="M300 700c110 0 200 -90 200 -200v-100h100v-400h-600v400h100v100c0 110 90 200 200 200zM300 600c-56 0 -100 -44 -100 -100v-100h200v100c0 56 -44 100 -100 100z" />
|
||||
<glyph glyph-name="8b" unicode="" horiz-adv-x="600"
|
||||
d="M300 800c110 0 200 -90 200 -200v-200h100v-400h-600v400h400v200c0 56 -44 100 -100 100s-100 -44 -100 -100h-100c0 110 90 200 200 200z" />
|
||||
<glyph glyph-name="8c" unicode=""
|
||||
d="M400 700v-100c-111 0 -200 -89 -200 -200h100l-150 -200l-150 200h100c0 165 135 300 300 300zM650 600l150 -200h-100c0 -165 -135 -300 -300 -300v100c111 0 200 89 200 200h-100z" />
|
||||
<glyph glyph-name="8d" unicode=""
|
||||
d="M100 800h600v-300h100l-150 -250l-150 250h100v200h-400v-100h-100v200zM150 550l150 -250h-100v-200h400v100h100v-200h-600v300h-100z" />
|
||||
<glyph glyph-name="8e" unicode=""
|
||||
d="M600 700l200 -150l-200 -150v100h-500v-100h-100v100c0 55 45 100 100 100h500v100zM200 300v-100h500v100h100v-100c0 -55 -45 -100 -100 -100h-500v-100l-200 150z" />
|
||||
<glyph glyph-name="8f" unicode="" horiz-adv-x="900"
|
||||
d="M350 800c193 0 350 -157 350 -350c0 -60 -17 -117 -44 -166c5 -3 12 -8 16 -12l100 -100c16 -16 30 -49 30 -72c0 -56 -46 -102 -102 -102c-23 0 -56 14 -72 30l-100 100c-4 3 -9 9 -12 13c-49 -26 -107 -41 -166 -41c-193 0 -350 157 -350 350s157 350 350 350zM350 200
|
||||
c142 0 250 108 250 250c0 139 -111 250 -250 250s-250 -111 -250 -250s111 -250 250 -250z" />
|
||||
<glyph glyph-name="90" unicode="" horiz-adv-x="600"
|
||||
d="M300 800c166 0 300 -134 300 -300c0 -200 -300 -500 -300 -500s-300 300 -300 500c0 166 134 300 300 300zM300 700c-110 0 -200 -90 -200 -200s90 -200 200 -200s200 90 200 200s-90 200 -200 200z" />
|
||||
<glyph glyph-name="91" unicode="" horiz-adv-x="900"
|
||||
d="M0 800h800v-541c1 -3 1 -8 1 -11s0 -7 -1 -10v-238h-800v800zM495 250c0 26 22 50 50 50h5h150v400h-600v-600h600v100h-150h-5c-28 0 -50 22 -50 50zM350 600c83 0 150 -67 150 -150c0 -100 -150 -250 -150 -250s-150 150 -150 250c0 83 67 150 150 150zM350 500
|
||||
c-28 0 -50 -22 -50 -50s22 -50 50 -50s50 22 50 50s-22 50 -50 50z" />
|
||||
<glyph glyph-name="92" unicode="" horiz-adv-x="600"
|
||||
d="M0 700h200v-600h-200v600zM400 700h200v-600h-200v600z" />
|
||||
<glyph glyph-name="93" unicode="" horiz-adv-x="600"
|
||||
d="M0 700l600 -300l-600 -300v600z" />
|
||||
<glyph glyph-name="94" unicode="" horiz-adv-x="600"
|
||||
d="M300 700c166 0 300 -134 300 -300s-134 -300 -300 -300s-300 134 -300 300s134 300 300 300z" />
|
||||
<glyph glyph-name="95" unicode=""
|
||||
d="M400 700v-600l-400 300zM400 400l400 300v-600z" />
|
||||
<glyph glyph-name="96" unicode=""
|
||||
d="M0 700l400 -300l-400 -300v600zM400 100v600l400 -300z" />
|
||||
<glyph glyph-name="97" unicode=""
|
||||
d="M0 700h200v-600h-200v600zM200 400l500 300v-600z" />
|
||||
<glyph glyph-name="98" unicode=""
|
||||
d="M0 700l500 -300l-500 -300v600zM500 100v600h200v-600h-200z" />
|
||||
<glyph glyph-name="99" unicode="" horiz-adv-x="600"
|
||||
d="M0 700h600v-600h-600v600z" />
|
||||
<glyph glyph-name="9a" unicode=""
|
||||
d="M200 800h400v-200h200v-400h-200v-200h-400v200h-200v400h200v200z" />
|
||||
<glyph glyph-name="9b" unicode=""
|
||||
d="M0 700h800v-100h-800v100zM0 403h800v-100h-800v100zM0 103h800v-100h-800v100z" />
|
||||
<glyph glyph-name="9c" unicode="" horiz-adv-x="600"
|
||||
d="M278 700c7 2 13 4 22 4c55 0 100 -45 100 -100v-4v-200c0 -55 -45 -100 -100 -100s-100 45 -100 100v200v2c0 44 35 88 78 98zM34 500h4h3c3 0 6 1 9 1c28 0 50 -22 50 -50v-1v-50c0 -111 89 -200 200 -200s200 89 200 200v50c0 28 22 50 50 50s50 -22 50 -50v-50
|
||||
c0 -148 -109 -270 -250 -294v-106h50c55 0 100 -45 100 -100h-400c0 55 45 100 100 100h50v106c-141 24 -250 146 -250 294v50v2c0 20 15 42 34 48z" />
|
||||
<glyph glyph-name="9d" unicode=""
|
||||
d="M0 500h800v-200h-800v200z" />
|
||||
<glyph glyph-name="9e" unicode=""
|
||||
d="M34 700h4h3h4h5h700c28 0 50 -22 50 -50v-500c0 -28 -22 -50 -50 -50h-250v-100h100c55 0 100 -45 100 -100h-600c0 55 45 100 100 100h100v100h-250c-28 0 -50 22 -50 50v500v2c0 20 15 42 34 48zM100 600v-400h600v400h-600z" />
|
||||
<glyph glyph-name="9f" unicode=""
|
||||
d="M272 700c-14 -40 -22 -83 -22 -128c0 -221 179 -400 400 -400c45 0 88 8 128 22c-53 -158 -202 -272 -378 -272c-221 0 -400 179 -400 400c0 176 114 325 272 378z" />
|
||||
<glyph glyph-name="a0" unicode=""
|
||||
d="M350 700l150 -150h-100v-150h150v100l150 -150l-150 -150v100h-150v-150h100l-150 -150l-150 150h100v150h-150v-100l-150 150l150 150v-100h150v150h-100z" />
|
||||
<glyph glyph-name="a1" unicode=""
|
||||
d="M800 800v-550c0 -83 -67 -150 -150 -150s-150 67 -150 150s67 150 150 150c17 0 35 -4 50 -9v206c-201 -6 -327 -27 -400 -50v-397c0 -83 -67 -150 -150 -150s-150 67 -150 150s67 150 150 150c17 0 35 -4 50 -9v409s100 100 600 100z" />
|
||||
<glyph glyph-name="a2" unicode="" horiz-adv-x="700"
|
||||
d="M499 700c51 0 102 -20 141 -59c78 -78 78 -203 0 -281l-250 -244c-48 -48 -127 -48 -175 0s-48 127 0 175l96 97l69 -69l-90 -94l-7 -3c-10 -10 -10 -28 0 -38s28 -10 38 0l250 247c37 40 39 102 0 141s-104 40 -144 0l-278 -275c-66 -69 -68 -179 0 -247
|
||||
c69 -69 181 -69 250 0l9 12l116 113l69 -69l-125 -125c-107 -107 -281 -107 -388 0s-107 281 0 388l278 272c39 39 90 59 141 59z" />
|
||||
<glyph glyph-name="a3" unicode=""
|
||||
d="M600 800l200 -200l-100 -100l-200 200zM400 600l200 -200l-400 -400h-200v200z" />
|
||||
<glyph glyph-name="a4" unicode=""
|
||||
d="M550 800c83 0 150 -90 150 -200s-67 -200 -150 -200c-22 0 -40 8 -59 19c6 26 9 52 9 81c0 84 -27 158 -72 212c27 52 71 88 122 88zM250 700c83 0 150 -90 150 -200s-67 -200 -150 -200s-150 90 -150 200s67 200 150 200zM725 384c44 -22 75 -66 75 -118v-166h-200v66
|
||||
c0 50 -17 96 -44 134c66 2 126 33 169 84zM75 284c45 -53 106 -84 175 -84s130 31 175 84c44 -22 75 -66 75 -118v-166h-500v166c0 52 31 96 75 118z" />
|
||||
<glyph glyph-name="a5" unicode=""
|
||||
d="M400 800c110 0 200 -112 200 -250s-90 -250 -200 -250s-200 112 -200 250s90 250 200 250zM191 300c54 -61 128 -100 209 -100s155 39 209 100c106 -5 191 -92 191 -200v-100h-800v100c0 108 85 195 191 200z" />
|
||||
<glyph glyph-name="a6" unicode="" horiz-adv-x="600"
|
||||
d="M19 800h462c11 0 19 -8 19 -19v-762c0 -11 -8 -19 -19 -19h-462c-11 0 -19 8 -19 19v762c0 11 8 19 19 19zM100 700v-500h300v500h-300zM250 150c-28 0 -50 -22 -50 -50s22 -50 50 -50s50 22 50 50s-22 50 -50 50z" />
|
||||
<glyph glyph-name="a7" unicode=""
|
||||
d="M350 800c17 0 34 -1 50 -3v-397l-297 297c63 64 150 103 247 103zM500 694c169 -25 300 -168 300 -344c0 -193 -157 -350 -350 -350c-85 0 -161 31 -222 81l272 272v341zM91 562l237 -234l-212 -212c-70 55 -116 138 -116 234c0 84 35 158 91 212z" />
|
||||
<glyph glyph-name="a8" unicode=""
|
||||
d="M92 650c0 23 20 50 46 50h3h4h5h400c28 0 50 -22 50 -50s-22 -50 -50 -50h-50v-200h100c55 0 100 -45 100 -100h-300v-300l-56 -100l-44 100v300h-300c0 55 45 100 100 100h100v200h-50c-2 0 -6 -1 -8 -1c-28 0 -50 23 -50 51z" />
|
||||
<glyph glyph-name="a9" unicode=""
|
||||
d="M400 800c221 0 400 -179 400 -400s-179 -400 -400 -400s-400 179 -400 400s179 400 400 400zM300 600v-400l300 200z" />
|
||||
<glyph glyph-name="aa" unicode=""
|
||||
d="M300 800h200v-300h300v-200h-300v-300h-200v300h-300v200h300v300z" />
|
||||
<glyph glyph-name="ab" unicode=""
|
||||
d="M300 800h100v-400h-100v400zM172 656l62 -78l-40 -31c-58 -46 -94 -117 -94 -197c0 -139 111 -250 250 -250s250 111 250 250c0 80 -39 151 -97 197l-37 31l62 78l38 -31c82 -64 134 -164 134 -275c0 -193 -157 -350 -350 -350s-350 157 -350 350c0 111 53 211 134 275z
|
||||
" />
|
||||
<glyph glyph-name="ac" unicode=""
|
||||
d="M200 800h400v-200h-400v200zM9 500h782c6 0 9 -3 9 -9v-282c0 -6 -3 -9 -9 -9h-91v200h-600v-200h-91c-6 0 -9 3 -9 9v282c0 6 3 9 9 9zM200 300h400v-300h-400v300z" />
|
||||
<glyph glyph-name="ad" unicode=""
|
||||
d="M0 700h100v-700h-100v700zM700 700h100v-700h-100v700zM200 600h200v-100h-200v100zM300 400h200v-100h-200v100zM400 200h200v-100h-200v100z" />
|
||||
<glyph glyph-name="ae" unicode=""
|
||||
d="M325 700c42 -141 87 -280 131 -419c29 74 59 148 88 222c30 -57 58 -114 87 -172h169v-100h-231l-13 28c-37 -92 -74 -184 -112 -275c-38 129 -79 257 -119 385c-42 -133 -83 -267 -125 -400c-28 88 -56 175 -84 262h-116v100h188l9 -34l3 -6c42 137 83 273 125 409z" />
|
||||
<glyph glyph-name="af" unicode=""
|
||||
d="M200 600c0 57 43 100 100 100s100 -43 100 -100c0 -28 -18 -48 -28 -72c-3 -6 -3 -16 -3 -28h231v-231c12 0 22 0 28 3c24 10 44 28 72 28c57 0 100 -43 100 -100s-43 -100 -100 -100c-28 0 -48 18 -72 28c-6 3 -16 3 -28 3v-231h-231c0 12 0 22 3 28c10 24 28 44 28 72
|
||||
c0 57 -43 100 -100 100s-100 -43 -100 -100c0 -28 18 -48 28 -72c3 -6 3 -16 3 -28h-231v600h231c0 12 0 22 -3 28c-10 24 -28 44 -28 72z" />
|
||||
<glyph glyph-name="b0" unicode="" horiz-adv-x="500"
|
||||
d="M247 700c84 0 148 -20 191 -59s59 -93 59 -141c0 -117 -69 -181 -119 -225s-81 -67 -81 -150v-25h-100v25c0 117 65 181 115 225s85 67 85 150c0 25 -8 48 -28 66s-56 34 -122 34s-97 -18 -116 -37s-27 -43 -31 -69l-100 12c5 38 19 88 59 128s103 66 188 66zM197 0h100
|
||||
v-100h-100v100z" />
|
||||
<glyph glyph-name="b1" unicode=""
|
||||
d="M450 800c138 0 250 -112 250 -250v-50c58 -21 100 -85 100 -150c0 -69 -48 -127 -112 -144c-22 55 -75 94 -138 94c-20 0 -39 -5 -56 -12c-17 64 -75 112 -144 112s-127 -48 -144 -112c-17 7 -36 12 -56 12c-37 0 -71 -12 -97 -34c-33 36 -53 82 -53 134
|
||||
c0 110 90 200 200 200c23 114 129 200 250 200zM334 300h4h3c3 0 6 1 9 1c28 0 50 -22 50 -50v-1v-200c0 -28 -22 -50 -50 -50s-50 22 -50 50v200v2c0 20 15 42 34 48zM134 200h4h3c3 0 6 1 9 1c28 0 50 -22 50 -50v-1v-100c0 -28 -22 -50 -50 -50s-50 22 -50 50v100v2
|
||||
c0 20 15 42 34 48zM534 200h3h4c3 0 6 1 9 1c28 0 50 -22 50 -50v-1v-100c0 -28 -22 -50 -50 -50s-50 22 -50 50v100v2c0 20 15 42 34 48z" />
|
||||
<glyph glyph-name="b2" unicode=""
|
||||
d="M600 800l200 -150l-200 -150v100h-50l-153 -191l175 -206l6 -3h22v100l200 -150l-200 -150v100h-25c-35 0 -56 12 -78 38l-166 190l-153 -190c-22 -27 -43 -38 -78 -38h-100v100h100l166 206l-163 191l-3 3h-100v100h100c34 0 56 -12 78 -38l153 -178l141 178
|
||||
c22 27 43 38 78 38h50v100z" />
|
||||
<glyph glyph-name="b3" unicode=""
|
||||
d="M400 800c110 0 209 -47 281 -119l119 119v-300h-300l109 109c-54 55 -126 91 -209 91c-166 0 -300 -134 -300 -300s134 -300 300 -300c83 0 158 34 212 88l72 -72c-72 -72 -174 -116 -284 -116c-220 0 -400 180 -400 400s180 400 400 400z" />
|
||||
<glyph glyph-name="b4" unicode=""
|
||||
d="M400 800h400v-400l-166 166l-400 -400l166 -166h-400v400l166 -166l400 400z" />
|
||||
<glyph glyph-name="b5" unicode="" horiz-adv-x="600"
|
||||
d="M250 800l250 -300h-200v-200h200l-250 -300l-250 300h200v200h-200z" />
|
||||
<glyph glyph-name="b6" unicode=""
|
||||
d="M300 600v-200h200v200l300 -250l-300 -250v200h-200v-200l-300 250z" />
|
||||
<glyph glyph-name="b7" unicode=""
|
||||
d="M0 800c441 0 800 -359 800 -800h-200c0 333 -267 600 -600 600v200zM0 500c275 0 500 -225 500 -500h-200c0 167 -133 300 -300 300v200zM0 200c110 0 200 -90 200 -200h-200v200z" />
|
||||
<glyph glyph-name="b8" unicode=""
|
||||
d="M100 800c386 0 700 -314 700 -700h-100c0 332 -268 600 -600 600v100zM100 600c276 0 500 -224 500 -500h-100c0 222 -178 400 -400 400v100zM100 400c165 0 300 -135 300 -300h-100c0 111 -89 200 -200 200v100zM100 200c55 0 100 -45 100 -100s-45 -100 -100 -100
|
||||
s-100 45 -100 100s45 100 100 100z" />
|
||||
<glyph glyph-name="b9" unicode=""
|
||||
d="M300 800h400c55 0 100 -45 100 -100v-200h-400v150c0 28 -22 50 -50 50s-50 -22 -50 -50v-250h400v-300c0 -55 -45 -100 -100 -100h-500c-55 0 -100 45 -100 100v200h100v-150c0 -28 22 -50 50 -50s50 22 50 50v550c0 55 45 100 100 100z" />
|
||||
<glyph glyph-name="ba" unicode=""
|
||||
d="M75 700h225v-100h-200v-500h400v100h100v-125c0 -41 -34 -75 -75 -75h-450c-41 0 -75 34 -75 75v550c0 41 34 75 75 75zM600 700l200 -200l-200 -200v100h-200c-94 0 -173 -65 -194 -153c23 199 189 353 394 353v100z" />
|
||||
<glyph glyph-name="bb" unicode=""
|
||||
d="M500 700l300 -284l-300 -316v200h-100c-200 0 -348 -102 -400 -300c0 295 100 500 500 500v200z" />
|
||||
<glyph glyph-name="bc" unicode=""
|
||||
d="M381 791l19 9l19 -9c127 -53 253 -108 381 -160v-31c0 -166 -67 -313 -147 -419c-40 -53 -83 -97 -125 -128s-82 -53 -128 -53s-86 22 -128 53s-85 75 -125 128c-80 107 -147 253 -147 419v31c128 52 254 107 381 160zM400 100v591l-294 -122c8 -126 58 -243 122 -328
|
||||
c35 -46 73 -86 106 -110s62 -31 66 -31z" />
|
||||
<glyph glyph-name="bd" unicode=""
|
||||
d="M600 800h100v-800h-100v800zM400 700h100v-700h-100v700zM200 500h100v-500h-100v500zM0 300h100v-300h-100v300z" />
|
||||
<glyph glyph-name="be" unicode=""
|
||||
d="M300 800h100v-200h200l100 -100l-100 -100h-200v-400h-100v500h-200l-100 100l100 100h200v100z" />
|
||||
<glyph glyph-name="bf" unicode=""
|
||||
d="M200 800h100v-600h200l-250 -200l-250 200h200v600zM400 800h200v-100h-200v100zM400 600h300v-100h-300v100zM400 400h400v-100h-400v100z" />
|
||||
<glyph glyph-name="c0" unicode=""
|
||||
d="M200 800h100v-600h200l-250 -200l-250 200h200v600zM400 800h400v-100h-400v100zM400 600h300v-100h-300v100zM400 400h200v-100h-200v100z" />
|
||||
<glyph glyph-name="c1" unicode=""
|
||||
d="M75 700h650c41 0 75 -34 75 -75v-550c0 -41 -34 -75 -75 -75h-650c-41 0 -75 34 -75 75v550c0 41 34 75 75 75zM100 600v-100h100v100h-100zM300 600v-100h400v100h-400zM100 400v-100h100v100h-100zM300 400v-100h400v100h-400zM100 200v-100h100v100h-100zM300 200
|
||||
v-100h400v100h-400z" />
|
||||
<glyph glyph-name="c2" unicode=""
|
||||
d="M400 800l100 -300h300l-250 -200l100 -300l-250 200l-250 -200l100 300l-250 200h300z" />
|
||||
<glyph glyph-name="c3" unicode=""
|
||||
d="M400 800c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50zM150 700c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50zM650 700c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50zM400 600c110 0 200 -90 200 -200
|
||||
s-90 -200 -200 -200s-200 90 -200 200s90 200 200 200zM50 450c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50zM750 450c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50zM150 200c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50
|
||||
s22 50 50 50zM650 200c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50zM400 100c28 0 50 -22 50 -50s-22 -50 -50 -50s-50 22 -50 50s22 50 50 50z" />
|
||||
<glyph glyph-name="c4" unicode=""
|
||||
d="M34 800h632c18 0 34 -16 34 -34v-732c0 -18 -16 -34 -34 -34h-632c-18 0 -34 16 -34 34v732c0 18 16 34 34 34zM100 700v-500h500v500h-500zM350 150c-38 0 -63 -42 -44 -75s69 -33 88 0s-6 75 -44 75z" />
|
||||
<glyph glyph-name="c5" unicode=""
|
||||
d="M0 800h300l500 -500l-300 -300l-500 500v300zM200 700c-55 0 -100 -45 -100 -100s45 -100 100 -100s100 45 100 100s-45 100 -100 100z" />
|
||||
<glyph glyph-name="c6" unicode=""
|
||||
d="M0 600h200l300 -300l-200 -200l-300 300v200zM340 600h160l300 -300l-200 -200l-78 78l119 122zM150 500c-28 0 -50 -22 -50 -50s22 -50 50 -50s50 22 50 50s-22 50 -50 50z" />
|
||||
<glyph glyph-name="c7" unicode=""
|
||||
d="M400 800c220 0 400 -180 400 -400s-180 -400 -400 -400s-400 180 -400 400s180 400 400 400zM400 700c-166 0 -300 -134 -300 -300s134 -300 300 -300s300 134 300 300s-134 300 -300 300zM400 600c110 0 200 -90 200 -200s-90 -200 -200 -200s-200 90 -200 200
|
||||
s90 200 200 200zM400 500c-56 0 -100 -44 -100 -100s44 -100 100 -100s100 44 100 100s-44 100 -100 100z" />
|
||||
<glyph glyph-name="c8" unicode=""
|
||||
d="M0 700h559l-100 -100h-359v-500h500v159l100 100v-359h-700v700zM700 700l100 -100l-400 -400l-200 200l100 100l100 -100z" />
|
||||
<glyph glyph-name="c9" unicode=""
|
||||
d="M9 800h782c6 0 9 -3 9 -9v-782c0 -6 -3 -9 -9 -9h-782c-6 0 -9 3 -9 9v782c0 6 3 9 9 9zM150 722l-72 -72l100 -100l-100 -100l72 -72l172 172zM400 500v-100h300v100h-300z" />
|
||||
<glyph glyph-name="ca" unicode=""
|
||||
d="M0 800h800v-200h-50c0 55 -45 100 -100 100h-150v-550c0 -28 22 -50 50 -50h50v-100h-400v100h50c28 0 50 22 50 50v550h-150c-55 0 -100 -45 -100 -100h-50v200z" />
|
||||
<glyph glyph-name="cb" unicode=""
|
||||
d="M0 700h100v-400h-100v400zM200 700h350c21 0 39 -13 47 -31c0 0 103 -291 103 -319s-22 -50 -50 -50h-150c-28 0 -50 -25 -50 -50s39 -158 47 -184s-5 -55 -31 -63s-52 5 -66 31s-109 219 -128 238s-44 28 -72 28v400z" />
|
||||
<glyph glyph-name="cc" unicode=""
|
||||
d="M400 666c10 19 28 32 47 34l19 -3c26 -8 39 -37 31 -63s-47 -159 -47 -184s22 -50 50 -50h150c28 0 50 -22 50 -50s-103 -319 -103 -319c-8 -18 -26 -31 -47 -31h-350v400c28 0 53 9 72 28s114 212 128 238zM0 400h100v-400h-100v400z" />
|
||||
<glyph glyph-name="cd" unicode=""
|
||||
d="M200 700h300v-100h-100v-6c25 -4 50 -8 72 -16l-34 -94c-28 11 -58 16 -88 16c-139 0 -250 -111 -250 -250s111 -250 250 -250s250 111 250 250c0 31 -5 60 -16 88l91 37c14 -38 25 -81 25 -125c0 -193 -157 -350 -350 -350s-350 157 -350 350c0 176 130 323 300 347v3
|
||||
h-100v100zM700 584c0 0 -296 -348 -316 -368s-48 -20 -68 0s-20 48 0 68s384 300 384 300z" />
|
||||
<glyph glyph-name="ce" unicode=""
|
||||
d="M600 700l200 -150l-200 -150v100h-600v100h600v100zM200 300v-100h600v-100h-600v-100l-200 150z" />
|
||||
<glyph glyph-name="cf" unicode=""
|
||||
d="M300 800h100c55 0 100 -45 100 -100h100c55 0 100 -45 100 -100h-700c0 55 45 100 100 100h100c0 55 45 100 100 100zM100 500h100v-350c0 -28 22 -50 50 -50s50 22 50 50v350h100v-350c0 -28 22 -50 50 -50s50 22 50 50v350h100v-481c0 -11 -8 -19 -19 -19h-462
|
||||
c-11 0 -19 8 -19 19v481z" />
|
||||
<glyph glyph-name="d0" unicode=""
|
||||
d="M100 800h200v-400c0 -55 45 -100 100 -100s100 45 100 100v400h100v-400c0 -110 -90 -200 -200 -200h-50c-138 0 -250 90 -250 200v400zM0 100h700v-100h-700v100z" />
|
||||
<glyph glyph-name="d1" unicode=""
|
||||
d="M9 700h182c6 0 9 -3 9 -9v-482c0 -6 -3 -9 -9 -9h-182c-6 0 -9 3 -9 9v482c0 6 3 9 9 9zM609 700h182c6 0 9 -3 9 -9v-482c0 -6 -3 -9 -9 -9h-182c-6 0 -9 3 -9 9v482c0 6 3 9 9 9zM309 500h182c6 0 9 -3 9 -9v-282c0 -6 -3 -9 -9 -9h-182c-6 0 -9 3 -9 9v282
|
||||
c0 6 3 9 9 9zM0 100h800v-100h-800v100z" />
|
||||
<glyph glyph-name="d2" unicode=""
|
||||
d="M10 700h181c6 0 9 -3 9 -9v-191h-200v191c0 6 4 9 10 9zM610 700h181c6 0 9 -3 9 -9v-191h-200v191c0 6 5 9 10 9zM310 600h181c6 0 9 -3 9 -9v-91h-200v91c0 6 4 9 10 9zM0 400h800v-100h-800v100zM0 200h200v-191c0 -6 -3 -9 -9 -9h-182c-6 0 -9 3 -9 9v191zM300 200
|
||||
h200v-91c0 -6 -3 -9 -9 -9h-181c-6 0 -10 3 -10 9v91zM600 200h200v-191c0 -6 -3 -9 -9 -9h-181c-6 0 -10 3 -10 9v191z" />
|
||||
<glyph glyph-name="d3" unicode=""
|
||||
d="M0 700h800v-100h-800v100zM9 500h182c6 0 9 -3 9 -9v-482c0 -6 -3 -9 -9 -9h-182c-6 0 -9 3 -9 9v482c0 6 3 9 9 9zM309 500h182c6 0 9 -3 9 -9v-282c0 -6 -3 -9 -9 -9h-182c-6 0 -9 3 -9 9v282c0 6 3 9 9 9zM609 500h182c6 0 9 -3 9 -9v-482c0 -6 -3 -9 -9 -9h-182
|
||||
c-6 0 -9 3 -9 9v482c0 6 3 9 9 9z" />
|
||||
<glyph glyph-name="d4" unicode=""
|
||||
d="M50 600h500c28 0 50 -22 50 -50v-150l100 100h100v-300h-100l-100 100v-150c0 -28 -22 -50 -50 -50h-500c-28 0 -50 22 -50 50v400c0 28 22 50 50 50z" />
|
||||
<glyph glyph-name="d5" unicode=""
|
||||
d="M334 800h66v-800h-66l-134 200h-200v400h200zM500 600v100c26 0 52 -4 75 -10c130 -33 225 -150 225 -290s-95 -258 -225 -291h-3c-23 -6 -47 -9 -72 -9v100c17 0 34 2 50 6c86 22 150 100 150 194s-64 172 -150 194c-16 4 -33 6 -50 6zM500 500l25 -3
|
||||
c44 -11 75 -51 75 -97s-32 -86 -75 -97l-25 -3v200z" />
|
||||
<glyph glyph-name="d6" unicode="" horiz-adv-x="600"
|
||||
d="M334 800h66v-800h-66l-134 200h-200v400h200zM500 500l25 -3c44 -11 75 -51 75 -97s-32 -86 -75 -97l-25 -3v200z" />
|
||||
<glyph glyph-name="d7" unicode="" horiz-adv-x="400"
|
||||
d="M334 800h66v-800h-66l-134 200h-200v400h200z" />
|
||||
<glyph glyph-name="d8" unicode=""
|
||||
d="M309 800h82c6 0 10 -4 12 -9l294 -682l3 -19v-81c0 -6 -3 -9 -9 -9h-682c-6 0 -9 3 -9 9v81l3 19l294 682c2 5 6 9 12 9zM300 500v-200h100v200h-100zM300 200v-100h100v100h-100z" />
|
||||
<glyph glyph-name="d9" unicode=""
|
||||
d="M375 800c138 0 269 -39 378 -109l-53 -82c-93 60 -205 91 -325 91c-119 0 -229 -32 -322 -91l-53 82c109 70 237 109 375 109zM375 500c78 0 154 -23 216 -62l-53 -85c-46 30 -104 47 -163 47c-60 0 -112 -17 -159 -47l-54 85c62 40 134 62 213 62zM375 200
|
||||
c55 0 100 -45 100 -100s-45 -100 -100 -100s-100 45 -100 100s45 100 100 100z" />
|
||||
<glyph glyph-name="da" unicode="" horiz-adv-x="900"
|
||||
d="M551 800c16 0 32 0 47 -3l-97 -97v-200h200l97 97c3 -15 3 -31 3 -47c0 -138 -112 -250 -250 -250c-32 0 -62 8 -90 19l-288 -291c-20 -20 -46 -28 -72 -28s-52 8 -72 28c-39 39 -39 105 0 144l291 287c-11 28 -19 59 -19 91c0 138 112 250 250 250zM101 150
|
||||
c-28 0 -50 -22 -50 -50s22 -50 50 -50s50 22 50 50s-22 50 -50 50z" />
|
||||
<glyph glyph-name="db" unicode=""
|
||||
d="M141 700c84 -84 169 -167 253 -250c82 83 167 165 247 250l143 -141l-253 -253c84 -82 167 -166 253 -247l-143 -143c-81 86 -165 169 -247 253l-253 -253l-141 143c85 80 167 164 250 247c-83 84 -166 169 -250 253z" />
|
||||
<glyph glyph-name="dc" unicode=""
|
||||
d="M0 800h100l231 -300h38l231 300h100l-225 -300h225v-100h-300v-100h300v-100h-300v-200h-100v200h-300v100h300v100h-300v100h225z" />
|
||||
<glyph glyph-name="dd" unicode="" horiz-adv-x="900"
|
||||
d="M350 800c193 0 350 -157 350 -350c0 -61 -17 -119 -44 -169c4 -2 10 -6 13 -9l103 -100c16 -16 30 -49 30 -72c0 -56 -46 -102 -102 -102c-23 0 -56 14 -72 30l-100 103c-3 3 -7 9 -9 13c-50 -28 -108 -44 -169 -44c-193 0 -350 157 -350 350s157 350 350 350zM350 700
|
||||
c-139 0 -250 -111 -250 -250s111 -250 250 -250c62 0 119 23 163 60c7 11 19 25 31 31l3 3c34 43 53 97 53 156c0 139 -111 250 -250 250zM300 600h100v-100h100v-100h-100v-100h-100v100h-100v100h100v100z" />
|
||||
<glyph glyph-name="de" unicode="" horiz-adv-x="900"
|
||||
d="M350 800c193 0 350 -157 350 -350c0 -61 -17 -119 -44 -169c4 -2 10 -6 13 -9l103 -100c16 -16 30 -49 30 -72c0 -56 -46 -102 -102 -102c-23 0 -56 14 -72 30l-100 103c-3 3 -7 9 -9 13c-50 -28 -108 -44 -169 -44c-193 0 -350 157 -350 350s157 350 350 350zM350 700
|
||||
c-139 0 -250 -111 -250 -250s111 -250 250 -250c62 0 119 23 163 60c7 11 19 25 31 31l3 3c34 43 53 97 53 156c0 139 -111 250 -250 250zM200 500h300v-100h-300v100z" />
|
||||
</font>
|
||||
</defs></svg>
|
After Width: | Height: | Size: 54 KiB |
BIN
fonts/open-iconic.ttf
Normal file
BIN
fonts/open-iconic.ttf
Normal file
Binary file not shown.
BIN
fonts/open-iconic.woff
Normal file
BIN
fonts/open-iconic.woff
Normal file
Binary file not shown.
126
game/engine.coffee
Normal file
126
game/engine.coffee
Normal file
|
@ -0,0 +1,126 @@
|
|||
###
|
||||
# This is the file with all thing *around* Salet.
|
||||
###
|
||||
|
||||
salet.game_id = "2868be0e-0011-4d94-87a9-1a80f65ff7f0"
|
||||
salet.game_version = "1.0"
|
||||
salet.optionsRoom = "settings"
|
||||
salet.start = "language"
|
||||
salet.autosave = false
|
||||
salet.autoload = false
|
||||
|
||||
switchTab = (tabid) ->
|
||||
$(".tab").removeClass("active")
|
||||
$("#"+tabid).addClass("active")
|
||||
if tabid == "story" and not salet.here().canSave
|
||||
salet.goBack()
|
||||
|
||||
setup_keys = () ->
|
||||
$(document).keydown((e) ->
|
||||
if window.down != false # никаких западающих клавиш
|
||||
return false
|
||||
window.down = true
|
||||
switch(e.which)
|
||||
when 37 #left
|
||||
$("#west a").click()
|
||||
when 38 #up
|
||||
$("#north a").click()
|
||||
when 39 # right
|
||||
$("#east a").click()
|
||||
when 40 # down
|
||||
$("#south a").click()
|
||||
when 49 # 1
|
||||
$(".options li:nth-child(1)").click()
|
||||
when 50
|
||||
$(".options li:nth-child(2)").click()
|
||||
when 51
|
||||
$(".options li:nth-child(3)").click()
|
||||
when 52
|
||||
$(".options li:nth-child(4)").click()
|
||||
when 53
|
||||
$(".options li:nth-child(5)").click()
|
||||
when 54
|
||||
$(".options li:nth-child(6)").click()
|
||||
else
|
||||
return
|
||||
e.preventDefault()
|
||||
)
|
||||
$(document).keyup((e) ->
|
||||
window.down = false
|
||||
)
|
||||
|
||||
$(document).ready(() ->
|
||||
window.addEventListener('popstate', (event) ->
|
||||
salet.goBack()
|
||||
)
|
||||
$("body").on("click", ".tab", (event) ->
|
||||
id = $(event.target).attr("id")
|
||||
if not id?
|
||||
id = $(event.target).parent().attr("id")
|
||||
switchTab(id)
|
||||
return true
|
||||
)
|
||||
$("body").on("click", '#night', () ->
|
||||
if (window.night)
|
||||
$("body").removeClass("night")
|
||||
$("#night").removeClass("active")
|
||||
window.night = false
|
||||
else
|
||||
$("body").addClass("night")
|
||||
$("#night").addClass("active")
|
||||
window.night = true
|
||||
)
|
||||
$("#page").on("click", "a", (event) ->
|
||||
if (window.hasOwnProperty('TogetherJS') and !window.remote and TogetherJS.running)
|
||||
options = {
|
||||
type: "click"
|
||||
}
|
||||
link = $(event.target)
|
||||
if link.attr("id") != undefined
|
||||
options.id = link.attr("id")
|
||||
if link.attr("href") != undefined
|
||||
options.href = link.attr("href")
|
||||
if options.href == undefined and options.id == undefined
|
||||
return
|
||||
TogetherJS.send(options)
|
||||
)
|
||||
window.remote = false
|
||||
if (window.hasOwnProperty('TogetherJS'))
|
||||
TogetherJS.config("ignoreForms", true)
|
||||
TogetherJS.config("ignoreMessages", [
|
||||
"cursor-update"
|
||||
"keydown"
|
||||
"scroll-update"
|
||||
"form-focus"
|
||||
"cursor-click"
|
||||
])
|
||||
TogetherJS.hub.on("click", (msg) ->
|
||||
if (! msg.sameUrl)
|
||||
return
|
||||
window.remote = true
|
||||
if msg.id != undefined
|
||||
$("##{msg.id}").trigger("click")
|
||||
else if msg.href != undefined
|
||||
$("#page a[href=#{msg.href}]").trigger("click")
|
||||
window.remote = false
|
||||
)
|
||||
salet.beginGame()
|
||||
)
|
||||
|
||||
$(document).on('init', () ->
|
||||
salet.character.improv = new Improv(window.improvdata, {
|
||||
filters: [
|
||||
tagMismatchFilter
|
||||
]
|
||||
reincorporate: true
|
||||
})
|
||||
salet.incstat = (statname) ->
|
||||
if @character.statname < 10
|
||||
@character.statname++
|
||||
salet.decstat = (statname) ->
|
||||
if @character.statname > 1
|
||||
@character.statname--
|
||||
salet.specials =
|
||||
cedar: () ->
|
||||
return "cedar".l()
|
||||
)
|
9
game/gamepad.min.js
vendored
Normal file
9
game/gamepad.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
210
game/maze.coffee
Normal file
210
game/maze.coffee
Normal file
|
@ -0,0 +1,210 @@
|
|||
class Maze
|
||||
# карта игры, см. map.ods
|
||||
# forest - лес
|
||||
# shore - берег
|
||||
# lake - озеро
|
||||
# stream - ручей
|
||||
# stones - камни
|
||||
# rock - скалы
|
||||
# mouth - устье
|
||||
# bank - берег ручья
|
||||
# cave - вход в пещеру
|
||||
# ucavei - вход в подводную пещеру
|
||||
# ucavee - выход из подводной пещеры
|
||||
map: [
|
||||
['forest', 'shore', 'lake', 'shore', 'forest', 'forest', 'shore', 'lake', 'stones','stones']
|
||||
['shore', 'lake', 'lake', 'shore', 'forest', 'forest', 'shore', 'lake', 'stones','stones']
|
||||
['lake', 'lake', 'lake', 'shore', 'shore', 'shore', 'shore', 'lake', 'stones','stones']
|
||||
['lake', 'lake', 'lake', 'lake', 'lake', 'lake', 'lake', 'lake', 'stones','stones']
|
||||
['lake', 'ucavei','lake', 'lake', 'lake', 'lake', 'lake', 'lake', 'shore', 'stones']
|
||||
['lake', 'lake', 'lake', 'lake', 'lake', 'lake', 'lake', 'lake', 'shore', 'forest']
|
||||
['shore', 'shore', 'shore', 'shore', 'shore', 'mouth', 'shore', 'shore', 'shore', 'forest']
|
||||
['forest', 'forest','forest','forest','bank', 'stream', 'bank', 'forest','forest','forest']
|
||||
['forest', 'cave', 'forest','forest','bank', 'stream', 'bank', 'forest','rock', 'rock' ]
|
||||
['forest', 'forest','forest','forest','bank', 'stream', 'bank', 'forest','rock', 'rock' ]
|
||||
['forest', 'forest','forest','forest','bank', 'stream', 'bank', 'forest','forest','forest']
|
||||
['forest', 'rock', 'rock', 'forest','bank', 'stream', 'stream','bank', 'cave', 'forest']
|
||||
['rock', 'rock', 'rock', 'forest','forest', 'bank', 'stream','bank', 'forest','forest']
|
||||
['rock', 'ucavee','rock', 'forest','forest', 'bank', 'stream','stream','bank', 'forest']
|
||||
['forest', 'forest','rock', 'forest','forest', 'forest', 'bank', 'stream','stream','bank' ]
|
||||
['forest', 'forest','rock', 'forest','forest', 'forest', 'forest','bank', 'stream','bank' ]
|
||||
]
|
||||
gridData: (x, y) ->
|
||||
maptype = @map[y][x]
|
||||
|
||||
# тип ячейки:
|
||||
# lowstones - камни лёгкого наклона
|
||||
# medstones - камни среднего наклона
|
||||
# histones - камни крутого наклона
|
||||
# rareforest - редкий лес
|
||||
# thickforest - густой лес
|
||||
# deepforest - дремучий лес
|
||||
# thickshrub - густой кустарник
|
||||
# openfield - открытое поле
|
||||
# swamp - болото
|
||||
# jungle - густые джунгли кустарника
|
||||
# calmstream - тихая заводь ручья
|
||||
# lake - озеро
|
||||
# stream - ручей
|
||||
# rock - скалы
|
||||
# cave - пещера
|
||||
# ucavei - вход в подводную пещеру
|
||||
# ucavee - выход из подводной пещеры
|
||||
switch maptype
|
||||
when "forest"
|
||||
rnd = salet.rnd.rand(20)
|
||||
switch
|
||||
when rnd < 4 then type = "thickforest"
|
||||
when rnd < 8 then type = "rareforest"
|
||||
when rnd < 12 then type = "openfield"
|
||||
when rnd < 16 then type = "deepforest"
|
||||
else type = "swamp"
|
||||
when "stones"
|
||||
rnd = salet.rnd.rand(12)
|
||||
switch
|
||||
when rnd < 4 then type = "lowstones"
|
||||
when rnd < 8 then type = "medstones"
|
||||
else type = "histones"
|
||||
when "bank"
|
||||
rnd = salet.rnd.rand(20)
|
||||
switch
|
||||
when rnd < 5 then type = "rareforest"
|
||||
when rnd < 10 then type = "jungle"
|
||||
when rnd < 15 then type = "thickforest"
|
||||
else type = "calmstream"
|
||||
else
|
||||
type = maptype
|
||||
return type
|
||||
constructor: (@width, @height) ->
|
||||
@data = []
|
||||
for y in [0..(@height-1)]
|
||||
for x in [0..(@width-1)]
|
||||
@data[x] ?= []
|
||||
@data[x][y] = new Maze.Cell
|
||||
@data[x][y].setTag('type', @gridData(x, y))
|
||||
|
||||
# special encounters
|
||||
specialEncounters = Object.keys(salet.specials).shuffle()
|
||||
plotEncounters = ["meet1"]
|
||||
# зд. возможно что две особых встречи упадут на одну клетку.
|
||||
for event in specialEncounters
|
||||
rnd = salet.rnd.rand(20) # вероятность 5%
|
||||
if plotEncounters.indexOf(event) != false
|
||||
rnd = 1 # вероятность 100%
|
||||
if rnd != 1
|
||||
continue
|
||||
x = salet.rnd.rand(@width-1)
|
||||
y = salet.rnd.rand(@height-1)
|
||||
@data[x][y].setTag('special', event)
|
||||
console.log "Special encounter set to (#{x}, #{y})"
|
||||
return true
|
||||
at: (x, y) -> return @data[x][y]
|
||||
describe: (x, y, improv) ->
|
||||
model = @data[x][y]
|
||||
model = setAdjacent(model)
|
||||
return improv.gen('description', model)
|
||||
isEast: (x, y) -> return (x+1) <= (@width - 1)
|
||||
isWest: (x, y) -> return (x-1) >= 0
|
||||
isNorth: (x, y) -> return (y-1) >= 0
|
||||
isSouth: (x, y) -> return (y+1) <= (@height - 1)
|
||||
getEast: (x, y) ->
|
||||
if @isEast(x, y)
|
||||
return @at(x+1, y)
|
||||
return false
|
||||
getWest: (x, y) ->
|
||||
if @isWest(x, y)
|
||||
return @at(x-1, y)
|
||||
return false
|
||||
getNorth: (x, y) ->
|
||||
if @isNorth(x, y)
|
||||
return @at(x, y-1)
|
||||
return false
|
||||
getSouth: (x, y) ->
|
||||
if @isSouth(x, y)
|
||||
return @at(x+1, y+1)
|
||||
return false
|
||||
log: () ->
|
||||
map = ""
|
||||
for y in [0..(@height-1)]
|
||||
for x in [0..(@width-1)]
|
||||
map += @data[x][y].log()
|
||||
map += "\n"
|
||||
console.log map
|
||||
bezier: (type) ->
|
||||
halfheight = Math.floor(@height/2)
|
||||
halfwidth = Math.floor(@width/2)
|
||||
rnd = salet.rnd.rand(2)
|
||||
if rnd == 1
|
||||
# P0 is in the lower left quadrant
|
||||
x0 = salet.rnd.rand(halfwidth)
|
||||
y0 = halfheight + salet.rnd.rand(halfheight)
|
||||
else
|
||||
# P0 is in the lower right quadrant
|
||||
x0 = halfwidth + salet.rnd.rand(halfwidth)
|
||||
y0 = halfheight + salet.rnd.rand(halfheight)
|
||||
rnd = salet.rnd.rand(2)
|
||||
if rnd == 1
|
||||
# P1 - higher left
|
||||
x1 = salet.rnd.rand(halfwidth)
|
||||
y1 = salet.rnd.rand(halfheight)
|
||||
else
|
||||
# P1 - lower left
|
||||
x1 = salet.rnd.rand(halfwidth)
|
||||
y1 = halfheight + salet.rnd.rand(halfheight)
|
||||
# P2 - always higher right
|
||||
x2 = halfwidth+salet.rnd.rand(halfwidth)
|
||||
y2 = salet.rnd.rand(halfheight)
|
||||
# quadratic bezier curve
|
||||
for t in [0..@width] by 0.1
|
||||
xp = Math.floor(Math.pow((1-t), 2)*x0+2*t*x1-2*Math.pow(t, 2)*x1+Math.pow(t, 2)*x2)
|
||||
yp = Math.floor(Math.pow((1-t), 2)*y0+2*t*y1-2*Math.pow(t, 2)*y1+Math.pow(t, 2)*y2)
|
||||
if @data[xp] == undefined or @data[xp][yp] == undefined
|
||||
break
|
||||
@data[xp][yp].setTag('type', type)
|
||||
|
||||
class Maze.Cell
|
||||
constructor: () ->
|
||||
@tags = []
|
||||
getTag: (tagName) ->
|
||||
for tag in @tags
|
||||
if tag[0] == tagName
|
||||
return tag[1]
|
||||
return undefined
|
||||
hasTag: (tagName) ->
|
||||
for tag in @tags
|
||||
if tag[0] == tagName
|
||||
return true
|
||||
return false
|
||||
setTag: (tagName, value) ->
|
||||
for tag, index in @tags
|
||||
if tag[0] == tagName
|
||||
@tags[index][1] = value
|
||||
return true
|
||||
@tags.push([tagName, value])
|
||||
return true
|
||||
setTagIfNotPresent: (tagName, value) ->
|
||||
if @getTag(tagName) == undefined
|
||||
@tags.push([tagName, value])
|
||||
log: () ->
|
||||
type = @getTag('type')
|
||||
switch type
|
||||
when "lowstones" then return "s"
|
||||
when "medstones" then return "s"
|
||||
when "histones" then return "s"
|
||||
when "rareforest" then return "f"
|
||||
when "thickforest" then return "f"
|
||||
when "deepforest" then return "f"
|
||||
when "thickshrub" then return "t"
|
||||
when "openfield" then return "o"
|
||||
when "swamp" then return "w"
|
||||
when "jungle" then return "j"
|
||||
when "calmstream" then return "c"
|
||||
when "lake" then return "l"
|
||||
when "stream" then return "s"
|
||||
when "rock" then return "r"
|
||||
when "cave" then return "a"
|
||||
when "ucavee" then return "a"
|
||||
when "ucavei" then return "a"
|
||||
when "special" then return "!"
|
||||
when "shore" then return "h"
|
||||
else return "?"
|
195
game/model.coffee
Normal file
195
game/model.coffee
Normal file
|
@ -0,0 +1,195 @@
|
|||
###
|
||||
# This is the file with all logic code *inside* Salet.
|
||||
# This is not story code but something around the story and inside the game.
|
||||
###
|
||||
|
||||
###
|
||||
Element helpers. There is no real need to build monsters like a().id("hello")
|
||||
because you won't use them as is. It does not make sense in context, the
|
||||
author has Markdown and all utilities to *forget* about the markup.
|
||||
###
|
||||
way_to = (content, ref) ->
|
||||
return "<a href='#{ref}' class='way'>#{content}</a>"
|
||||
textlink = (content, ref) ->
|
||||
return "<a href='./_writer_#{ref}' class='once'>#{content}</a>"
|
||||
actlink = (content, ref) ->
|
||||
return "<a href='./#{ref}' class='once'>#{content}</a>"
|
||||
choice = (text, url) ->
|
||||
retval = '<a'
|
||||
if url?
|
||||
retval += " href='#{url}'"
|
||||
retval += "><div><div class='title'>#{text}</div></div></a>"
|
||||
return retval
|
||||
|
||||
sysroom = (name, options) ->
|
||||
options.canSave = false
|
||||
options.exit = () ->
|
||||
if document.querySelector('#current-room')
|
||||
salet.view.clearContent('#current-room')
|
||||
$(".action").show()
|
||||
options.dsc ?= () ->
|
||||
return @text.fcall()+"\n\n"+"""
|
||||
<div class="center"><a href="./exit" tabindex=999><button class="btn btn-lg btn-outline-primary">#{"back".l()}</button></a></div>
|
||||
"""
|
||||
options.text ?= () -> name.l()
|
||||
options.actions = {
|
||||
exit: () ->
|
||||
return salet.goBack()
|
||||
}
|
||||
return croom(name, options)
|
||||
|
||||
croom = (name, spec) ->
|
||||
spec.clear ?= true
|
||||
spec.optionColor ?= ""
|
||||
spec.optionText ?= () ->
|
||||
retval = """
|
||||
<div class="#{spec.optionColor}">
|
||||
<div class="title">#{spec.title.fcall()}</div>
|
||||
"""
|
||||
if (spec.subtitle?)
|
||||
retval += """
|
||||
<div class="subtitle">#{spec.subtitle.fcall()}</div>
|
||||
"""
|
||||
retval += '</div>'
|
||||
spec.dsc ?= () -> name.l()
|
||||
return room(name, spec)
|
||||
|
||||
$(document).on("room_enter", (event, data) ->
|
||||
# Piwik analytics: room stats
|
||||
if salet.interactive and _paq?
|
||||
_paq.push(['trackPageView', data.to])
|
||||
)
|
||||
|
||||
sysroom "inventory",
|
||||
text: () ->
|
||||
if salet.character.inventory.length == 0
|
||||
text = "inventory_empty".l()
|
||||
else
|
||||
text = "inventory_contains".l()+"\n\n"
|
||||
for thing in salet.character.inventory
|
||||
text += "* #{salet.character.listinv(thing.name)}\n"
|
||||
|
||||
sysroom "map",
|
||||
text: () ->
|
||||
return "<div id='map'></div>"
|
||||
after: () ->
|
||||
data = {
|
||||
edges: []
|
||||
nodes: []
|
||||
}
|
||||
edges = []
|
||||
rooms = []
|
||||
globx = 1
|
||||
globy = 1
|
||||
deltas = [
|
||||
# [1, 0], # looks bad on our map
|
||||
[0, 1],
|
||||
[-1, 0],
|
||||
[0, -1],
|
||||
]
|
||||
for name, room of salet.rooms
|
||||
if room.canSave == false or name == "start"
|
||||
continue
|
||||
if rooms.indexOf(name) == -1
|
||||
data.nodes.push({
|
||||
"id": name
|
||||
"label": room.title()
|
||||
"size": 5
|
||||
"color": "#000"
|
||||
"x": globx
|
||||
"y": globy
|
||||
})
|
||||
rooms.push(name)
|
||||
if room.ways? and room.ways.length > 0
|
||||
delta = 0
|
||||
for way in room.ways
|
||||
id = "edge_"+name+"_"+way
|
||||
# we don't want to display a two-way link twice
|
||||
if edges.indexOf("edge_"+way+"_"+name) == -1
|
||||
edges.push(id)
|
||||
data.edges.push({
|
||||
"id": id
|
||||
"source": room.name
|
||||
"target": way
|
||||
"size": 1
|
||||
"color": "#ccc"
|
||||
})
|
||||
if rooms.indexOf(way) == -1
|
||||
data.nodes.push({
|
||||
"id": way
|
||||
"label": salet.rooms[way].title()
|
||||
"size": 5
|
||||
"color": "#000"
|
||||
"x": globx + deltas[delta][0]
|
||||
"y": globy + deltas[delta][1]
|
||||
})
|
||||
rooms.push(way)
|
||||
delta++
|
||||
globy = globy - 2
|
||||
s = new sigma({
|
||||
graph: data,
|
||||
container: 'map'
|
||||
})
|
||||
s.bind('clickNode', (e) ->
|
||||
switchTab("storytab")
|
||||
salet.goTo(e.data.node.id)
|
||||
)
|
||||
return ""
|
||||
|
||||
$(document).on("room_language_after_choices", () ->
|
||||
$(".options").addClass("narrowchoice")
|
||||
)
|
||||
sysroom "language",
|
||||
dsc: ""
|
||||
choices: "#language"
|
||||
|
||||
sysroom "ru",
|
||||
title: "Русский",
|
||||
tags: ["language"]
|
||||
dsc: ""
|
||||
enter: () ->
|
||||
i18n.lang = "ru"
|
||||
salet.goTo('maze')
|
||||
|
||||
sysroom "en",
|
||||
title: "English",
|
||||
tags: ["language"]
|
||||
canChoose: false
|
||||
dsc: ""
|
||||
enter: () ->
|
||||
i18n.lang = "en"
|
||||
salet.goTo('maze')
|
||||
|
||||
sysroom "menu",
|
||||
dsc: ""
|
||||
choices: "#menu"
|
||||
|
||||
sysroom "settings",
|
||||
tags: ["menu"]
|
||||
title: () -> "settings_title".l()
|
||||
text: () ->
|
||||
nightclass = ""
|
||||
if window.night
|
||||
nightclass = "active"
|
||||
return "credits".l() + """\n
|
||||
<ul class="options">
|
||||
<li id="night" tabindex=1 class="#{nightclass}">#{choice("night".l())}</li>
|
||||
<li tabindex=2 onclick="TogetherJS(this); return false;">
|
||||
#{choice("multiplayer".l())}
|
||||
</li>
|
||||
</ul>
|
||||
"""
|
||||
|
||||
sysroom "inventory",
|
||||
text: () ->
|
||||
if salet.character.inventory.length == 0
|
||||
text = "inventory_empty".l()
|
||||
else
|
||||
text = "inventory_contains".l()+"\n\n"
|
||||
for thing in salet.character.inventory
|
||||
text += "* #{salet.character.listinv(thing.name)}\n"
|
||||
|
||||
sysroom "map",
|
||||
text: () -> """
|
||||
Здесь будет карта
|
||||
"""
|
44
game/plot.coffee
Normal file
44
game/plot.coffee
Normal file
|
@ -0,0 +1,44 @@
|
|||
plotscene = (title, options) ->
|
||||
options ?= {}
|
||||
options.clear ?= false
|
||||
options.choices ?= "##{title}"
|
||||
options.dsc ?= () ->
|
||||
return "#{title}".l()
|
||||
options.optionText ?= () ->
|
||||
return "#{title}_option".l()
|
||||
options.afterChoices ?= () ->
|
||||
if salet.interactive
|
||||
# Scroll to the text input
|
||||
salet.view.scrollToBottom()
|
||||
# Piwik analytics: room stats
|
||||
if _paq?
|
||||
_paq.push(['trackPageView', title])
|
||||
return ""
|
||||
return room(title, options)
|
||||
|
||||
## Встреча 1
|
||||
plotscene "meet1",
|
||||
enter: () ->
|
||||
hideSidebar()
|
||||
beforeChoices: () ->
|
||||
$("#content").on("submit", "form", (event) ->
|
||||
event.preventDefault()
|
||||
input = $("#name").val()
|
||||
# _paq.push(['setCustomDimension', 2, input]) # record the name
|
||||
salet.character.name = input
|
||||
if input.length > 0
|
||||
salet.processClick("meet1_cont")
|
||||
return false
|
||||
)
|
||||
|
||||
plotscene "meet1_noname",
|
||||
tags: ["meet1"]
|
||||
choices: "#meet1_cont"
|
||||
dsc: "meet1_cont".l()
|
||||
|
||||
plotscene "meet1_cont",
|
||||
tags: ["meet1"]
|
||||
choices: "#meet1_cont"
|
||||
canChoose: () -> return false
|
||||
optionText: () ->
|
||||
return "meet1_cont_option".l()+" <form class='inline'><input name='keyword' class='form-control' type='text' id='name' placeholder='#{"enter_name".l()}'></input><button class='btn' type='submit'>#{"say".l()}</button></form>"
|
34
game/procgen/ru/action.cson
Normal file
34
game/procgen/ru/action.cson
Normal file
|
@ -0,0 +1,34 @@
|
|||
groups: [
|
||||
tags: [
|
||||
["weather", "cold"],
|
||||
]
|
||||
phrases: [
|
||||
"Вы видите облачка вашего дыхания."
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['type', 'stones']
|
||||
]
|
||||
phrases: [
|
||||
"""
|
||||
Через несколько камней перед вами пробегает бурундук.
|
||||
Он скрывается в серых валунах.
|
||||
"""
|
||||
"Вы чуть не потеряли равновесие на камне, который внезапно пошевелился под вашей ногой."
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['type', 'track']
|
||||
]
|
||||
phrases: [
|
||||
"Порыв ветра сбрасывает на тропу еловую шишку."
|
||||
"В темноте вы не замечаете паутины между деревьями и вам приходится чистить лицо от природной пряжи."
|
||||
"Вы оступаетесь, но тут же встаёте."
|
||||
]
|
||||
,
|
||||
tags: []
|
||||
phrases: [
|
||||
"По небу пролетает ястреб."
|
||||
"По земле пролетает тень ястреба."
|
||||
]
|
||||
]
|
16
game/procgen/ru/dark_color.cson
Normal file
16
game/procgen/ru/dark_color.cson
Normal file
|
@ -0,0 +1,16 @@
|
|||
phrases: [
|
||||
"чёрный"
|
||||
"тёмно-красный"
|
||||
"пурпурный"
|
||||
"бурый"
|
||||
"тёмно-серый"
|
||||
"серый"
|
||||
"тёмный"
|
||||
"бесцветный"
|
||||
"багряный"
|
||||
"червлёный"
|
||||
"алый"
|
||||
"малиновый"
|
||||
"багровый"
|
||||
"угольный"
|
||||
]
|
16
game/procgen/ru/dark_color_plural.cson
Normal file
16
game/procgen/ru/dark_color_plural.cson
Normal file
|
@ -0,0 +1,16 @@
|
|||
phrases: [
|
||||
"чёрные"
|
||||
"тёмно-красные"
|
||||
"пурпурные"
|
||||
"бурые"
|
||||
"тёмно-серые"
|
||||
"серые"
|
||||
"тёмные"
|
||||
"бесцветные"
|
||||
"багряные"
|
||||
"червлёные"
|
||||
"алые"
|
||||
"малиновые"
|
||||
"багровые"
|
||||
"угольные"
|
||||
]
|
14
game/procgen/ru/description.cson
Normal file
14
game/procgen/ru/description.cson
Normal file
|
@ -0,0 +1,14 @@
|
|||
phrases: [
|
||||
"[:object] [:smell] [:sound]"
|
||||
"[:action] [:smell] [:sound]"
|
||||
"[:object] [:sound] [:smell]"
|
||||
"[:action] [:sound] [:smell]"
|
||||
"[:object] [:sound]"
|
||||
"[:object] [:action]"
|
||||
"[:action] [:object]"
|
||||
"[:action] [:sound]"
|
||||
"[:action] [:smell]"
|
||||
"[:sound] [:object]"
|
||||
"[:object] [:smell]"
|
||||
"[:smell] [:sound]"
|
||||
]
|
21
game/procgen/ru/hallucination.cson
Normal file
21
game/procgen/ru/hallucination.cson
Normal file
|
@ -0,0 +1,21 @@
|
|||
phrases: [
|
||||
"чьё-то лицо"
|
||||
"своё имя"
|
||||
"какую-то надпись"
|
||||
"чьё-то имя"
|
||||
"чью-то улыбку"
|
||||
"необычный узор"
|
||||
"просто отражение"
|
||||
"просто узор"
|
||||
"просто особый камень"
|
||||
"особый камень"
|
||||
"что-то знакомое"
|
||||
"что-то… хотя нет, это невозможно. Ведь правда"
|
||||
"что-то нездешнее"
|
||||
"кусочек яблока"
|
||||
"песочный замок"
|
||||
"песочный крестик"
|
||||
"след лапы",
|
||||
"след большой мохнатой лапы",
|
||||
"след ноги, которая не совсем похожа на человеческую"
|
||||
]
|
219
game/procgen/ru/object.cson
Normal file
219
game/procgen/ru/object.cson
Normal file
|
@ -0,0 +1,219 @@
|
|||
###
|
||||
В этом файле описывается объект или описание на ячейке.
|
||||
Описание сохраняется, то есть, здесь не должно быть движения или действий.
|
||||
|
||||
Возможные типы ячеек:
|
||||
|
||||
lowstones - камни лёгкого наклона
|
||||
medstones - камни среднего наклона
|
||||
histones - камни крутого наклона
|
||||
rareforest - редкий лес
|
||||
thickforest - густой лес
|
||||
deepforest - дремучий лес
|
||||
thickshrub - густой кустарник
|
||||
openfield - открытое поле
|
||||
swamp - болото
|
||||
jungle - густые джунгли кустарника
|
||||
calmstream - тихая заводь ручья
|
||||
lake - озеро
|
||||
stream - ручей
|
||||
rock - скалы
|
||||
cave - пещера
|
||||
ucavei - вход в подводную пещеру
|
||||
ucavee - выход из подводной пещеры
|
||||
###
|
||||
bind: true
|
||||
groups: [
|
||||
tags: [
|
||||
['type', 'openfield']
|
||||
]
|
||||
phrases: [
|
||||
"Поляна покрыта зелёным мхом. Вам кажется, что мох дышит."
|
||||
"Трава переливается серебряным."
|
||||
"Трава слабо качается."
|
||||
"Поляна затянута сильным туманом."
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['type', 'shore']
|
||||
]
|
||||
phrases: [
|
||||
"Бурая мокрая земля блестит на солнце."
|
||||
"Вы стоите на крупном камне возле самого края озера."
|
||||
"Тёмные камни блестят на солнце."
|
||||
"""
|
||||
По озеру стелется плотный туман.
|
||||
Вам трудно различить, где кончается берег.
|
||||
"""
|
||||
"""
|
||||
Озеро тихо.
|
||||
Пурпурные волны гладят [:dark_color] корни травяного берега.
|
||||
"""
|
||||
"По озеру пробегает лёгкая рябь."
|
||||
"""
|
||||
В озёрной ряби вам кажется чей-то силуэт.
|
||||
Но разве бывают настолько большие животные?
|
||||
"""
|
||||
"""
|
||||
Вода выбросила на берег несколько серых веток.
|
||||
"""
|
||||
"""
|
||||
Вы всматриваетесь в [:dark_color_plural] камешки на берегу.
|
||||
Вам показалось, что вы увидели что-то.
|
||||
Может быть, [:hallucination]?
|
||||
"""
|
||||
"""
|
||||
На другом берегу озера вы замечаете блеск.
|
||||
Что бы там ни было, оно быстро исчезает.
|
||||
"""
|
||||
"""
|
||||
Вы видите какое-то серебряное облако на середине озера.
|
||||
Оно просто плавает там, качается над волнами.
|
||||
"""
|
||||
"""
|
||||
Вы видите кусок льда, который плывёт мимо вас по озеру.
|
||||
Над водой возвышается только небольшой бугорок, но под ним есть
|
||||
что-то большое и белое.
|
||||
"""
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['type', 'lowstones']
|
||||
]
|
||||
phrases: [
|
||||
"""
|
||||
Камни вокруг вас совершенно гладкие, как будто вы идёте по руслу
|
||||
высохшей реки.
|
||||
"""
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['type', ['lowstones', 'medstones', 'histones']]
|
||||
]
|
||||
phrases: [
|
||||
"Камни затянуты сильным туманом."
|
||||
"""
|
||||
Камни скрыты в тумане.
|
||||
Если вы вытянете руку, вы не увидите кончиков пальцев.
|
||||
Вы серьёзно рискуете оступиться и сломать ногу, но вам надо идти дальше.
|
||||
"""
|
||||
"Камни переливаются серебром."
|
||||
"Мох на камнях блестит росой."
|
||||
"Тёмные капли на камнях тускло блестят."
|
||||
"Свет. Повсюду белый свет."
|
||||
"Вы с трудом прокладываете путь по тёмным камням."
|
||||
"""
|
||||
Камни вокруг кажутся живыми.
|
||||
Вы не хотите проверять это.
|
||||
"""
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['type', 'snow']
|
||||
]
|
||||
phrases: [
|
||||
"Снег блестит на свету, как будто вы идёте по стеклу."
|
||||
"Здесь снег перемешан с чёрной грязью - светлее грязи, но серее обычного снежника."
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['type', 'stream']
|
||||
]
|
||||
phrases: [
|
||||
"Ручей переливается и бурлит прозрачной водой по тёмным камням."
|
||||
"Сквозь прозрачную быстротечную воду ручья вы видите гладкие камни."
|
||||
"""
|
||||
Здесь ручей мельчает и растекается шире.
|
||||
Посередине течения в песке застряла большая несуразная коряга.
|
||||
"""
|
||||
"""
|
||||
Берег ручья резко обрывается.
|
||||
Прямо под вами быстрина.
|
||||
"""
|
||||
"Ветки деревьев свисают над ручьём, почти касаются воды."
|
||||
"""
|
||||
Ручей пробегает в густом кустарнике.
|
||||
Вы не видите, где кончается берег и не хотите прощупывать его ногами.
|
||||
"""
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['type', 'thickshrub']
|
||||
]
|
||||
phrases: [
|
||||
"""
|
||||
Вы стоите в густом кустарнике.
|
||||
Сухие тонкие ветки сплетаются над вашей головой.
|
||||
"""
|
||||
"Вам кажется, что вы попали в большое гнездо."
|
||||
"Вы оставляете глубокие следы в мокрой грязи."
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['type', 'swamp']
|
||||
]
|
||||
phrases: [
|
||||
"""
|
||||
Вы утопаете в мокрой смеси песка и земли.
|
||||
"""
|
||||
"""
|
||||
Вы утопаете в грязи.
|
||||
"""
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['type', 'rareforest']
|
||||
]
|
||||
phrases: [
|
||||
"Между редкими деревьями дует пронизывающий ветер."
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['type', 'thickforest']
|
||||
]
|
||||
phrases: [
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['type', 'deepforest']
|
||||
]
|
||||
phrases: [
|
||||
"""
|
||||
Вы случайно забрели в бурелом.
|
||||
Вокруг лежат поваленные деревья, и тёмные ветви высоких елей закрывают вам солнце.
|
||||
"""
|
||||
"В глубокой лесной чаще вам трудно найти путь. Вы не совсем уверены, откуда вы пришли."
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['type', ['rareforest', 'thickforest', 'deepforest']]
|
||||
]
|
||||
phrases: [
|
||||
"Туман стелется по земле, скрывая тропу."
|
||||
"Лес тонет в тумане. Вы с трудом различаете тропу."
|
||||
"Туман густеет и скользит по земле."
|
||||
"Пелена тумана скрывает тропу от ваших глаз."
|
||||
"От дерева к дереву тянутся тонкие серебристые нити паутины."
|
||||
"По этой тропе до вас ещё не ходил ни один человек."
|
||||
"На тропе много оленьих следов."
|
||||
"Вы замечаете, что тропа медвежья."
|
||||
"Вы замечаете, что ваш путь протоптал волк."
|
||||
]
|
||||
,
|
||||
tags: []
|
||||
phrases: [
|
||||
"Отсюда видно чистое глубокое небо."
|
||||
"Отсюда видно чистое голубое небо."
|
||||
"Сверху на вас смотрит тяжёлая синь неба."
|
||||
"Горы вокруг вас поднимаются в небо, как будто поддерживают его на пиках."
|
||||
"Высокие горы протыкают небо снежными пиками."
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['type', ['rareforest', 'thickforest', 'deepforest']]
|
||||
['adjacent', 'shore']
|
||||
]
|
||||
phrases: [
|
||||
'Вы видите просвет в деревьях на [shore_direction_vocative].'
|
||||
]
|
||||
]
|
32
game/procgen/ru/smell.cson
Normal file
32
game/procgen/ru/smell.cson
Normal file
|
@ -0,0 +1,32 @@
|
|||
bind: true
|
||||
groups: [
|
||||
tags: [
|
||||
['element', 'fire']
|
||||
['distance','close']
|
||||
],
|
||||
phrases: [
|
||||
'Вы чувствуете запах серы.'
|
||||
"Вам чудится запах дыма."
|
||||
'В воздухе чувствуется сильный запах серы.'
|
||||
'Здесь всё пропитано серой.'
|
||||
]
|
||||
,
|
||||
tags: [],
|
||||
phrases: [
|
||||
'Этот воздух настолько чист, что вы можете ощутить его прозрачность на нюх.'
|
||||
"Лес душно пахнет [:smell_instrumental]."
|
||||
"Вы чувствуете слабый запах [:smell_weird_genitive]."
|
||||
"Слабый запах [:smell_genitive]."
|
||||
"Слабый животный запах."
|
||||
"Слабый рыбный запах."
|
||||
"Здесь всё пахнет [:smell_instrumental]."
|
||||
"Воздух пахнет [:smell_instrumental]."
|
||||
"Запах [:smell_instrumental]."
|
||||
"Вам чудится запах дома: [:smell_weird_genitive] и почему-то [:smell_weird_genitive]."
|
||||
"Вам кажется странный запах, ни на что не похожий."
|
||||
"Вам чудится запах [:smell_genitive] и, как ни странно, [:smell_weird_genitive]."
|
||||
"Вы чувствуете запах осени. Даже несмотря на то, что сейчас лето."
|
||||
"В спокойном воздухе вы чувствуете запах [:smell_genitive]."
|
||||
"До вас доносится запах [:smell_genitive]."
|
||||
]
|
||||
]
|
35
game/procgen/ru/smell_genitive.cson
Normal file
35
game/procgen/ru/smell_genitive.cson
Normal file
|
@ -0,0 +1,35 @@
|
|||
# обычный запах, родительный падеж
|
||||
phrases: [
|
||||
'хвои'
|
||||
'сирени'
|
||||
'грязи'
|
||||
'животных'
|
||||
'старого мха'
|
||||
'земли'
|
||||
'дождя'
|
||||
'травы'
|
||||
'лапника'
|
||||
'грибов'
|
||||
'лишайника'
|
||||
'растений'
|
||||
'цветов'
|
||||
'дряни'
|
||||
'гадости'
|
||||
'пакости'
|
||||
'нечистот'
|
||||
'противности'
|
||||
'тошноты'
|
||||
'разложения'
|
||||
'зверя'
|
||||
'скота'
|
||||
'проливного дождя'
|
||||
'неприятностей'
|
||||
'слякоти'
|
||||
'проливня'
|
||||
'ливня'
|
||||
'хляби'
|
||||
'непогоды'
|
||||
'чернозёма'
|
||||
'грозы'
|
||||
'горячей травы'
|
||||
]
|
35
game/procgen/ru/smell_instrumental.cson
Normal file
35
game/procgen/ru/smell_instrumental.cson
Normal file
|
@ -0,0 +1,35 @@
|
|||
# обычный запах, творительный падеж
|
||||
phrases: [
|
||||
'хвоёй'
|
||||
'сиренью'
|
||||
'грязью'
|
||||
'животными'
|
||||
'старым мхом'
|
||||
'землёй'
|
||||
'дождём'
|
||||
'травой'
|
||||
'лапником'
|
||||
'грибами'
|
||||
'лишайником'
|
||||
'растениями'
|
||||
'цветами'
|
||||
'дрянью'
|
||||
'гадостью'
|
||||
'пакостью'
|
||||
'нечистотами'
|
||||
'противностью'
|
||||
'тошнотой'
|
||||
'разложением'
|
||||
'зверем'
|
||||
'скотом'
|
||||
'проливным дождём'
|
||||
'неприятностями'
|
||||
'слякотью'
|
||||
'проливнем'
|
||||
'ливнем'
|
||||
'хлябью'
|
||||
'непогодой'
|
||||
'чернозёмом'
|
||||
'грозой'
|
||||
'горячей травой'
|
||||
]
|
44
game/procgen/ru/smell_weird_genitive.cson
Normal file
44
game/procgen/ru/smell_weird_genitive.cson
Normal file
|
@ -0,0 +1,44 @@
|
|||
# странный запах
|
||||
phrases: [
|
||||
'мокрой листвы'
|
||||
'крыжовника'
|
||||
'болотной воды'
|
||||
'лаванды'
|
||||
'розы'
|
||||
'пластика'
|
||||
'пыли'
|
||||
'шоколада'
|
||||
'патоки'
|
||||
'картошки'
|
||||
'бумаги'
|
||||
'борща'
|
||||
'вареников'
|
||||
'востока'
|
||||
'чистоты'
|
||||
'свежей бумаги'
|
||||
'чёрного чая'
|
||||
'ржавчины'
|
||||
'супа'
|
||||
'манной каши'
|
||||
'молока'
|
||||
'пушистых кошек'
|
||||
'мороза'
|
||||
'пороха'
|
||||
'машинного масла'
|
||||
'свежей краски'
|
||||
'свежей золы'
|
||||
'бананов'
|
||||
'скошенного сена'
|
||||
'сухофруктов'
|
||||
'строительного клея'
|
||||
'уксуса'
|
||||
'чёрного терпкого чая'
|
||||
'пыли'
|
||||
'лака для ногтей'
|
||||
'лака для волос'
|
||||
'вашего дезодоранта'
|
||||
'волос вашей матери'
|
||||
'духов вашей матери'
|
||||
'парфюма'
|
||||
'кукурузы'
|
||||
]
|
88
game/procgen/ru/sound.cson
Normal file
88
game/procgen/ru/sound.cson
Normal file
|
@ -0,0 +1,88 @@
|
|||
groups: [
|
||||
tags: []
|
||||
phrases: [
|
||||
"Ни звука."
|
||||
"Лес подозрительно тих."
|
||||
"""
|
||||
Ветер доносит до вас слабые звуки.
|
||||
Они не похожи ни на что, вам знакомое.
|
||||
"""
|
||||
"""
|
||||
Где-то вдалеке прогремел гром.
|
||||
Идёт гроза.
|
||||
"""
|
||||
"""
|
||||
Туман разом съедает все звуки.
|
||||
Вы стоите в полной тишине.
|
||||
"""
|
||||
"Вы слышите далёкое ржание лошадей."
|
||||
# а теперь меня потянуло на гекзаметр
|
||||
"Ветер шумит и гуляет по горной долине."
|
||||
# и я тут же его сломал
|
||||
"Тихо туманы клубятся меж елей и сосен."
|
||||
"Горные склоны молча стоят недвижимы."
|
||||
"Горы молча наблюдают за вами."
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['type', 'field']
|
||||
]
|
||||
phrases: [
|
||||
'Вы слышите слабый шёпот травы: «…[:voice]…»'
|
||||
"""
|
||||
Свист рябчика.
|
||||
Обернувшись, вы видите птицу, которая тут же скрывается за деревьями.
|
||||
"""
|
||||
"""
|
||||
Вы слышите шипение змеи в траве.
|
||||
Она где-то рядом, но шипела не на вас.
|
||||
"""
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['type', 'track']
|
||||
]
|
||||
phrases: [
|
||||
'Вы слышите слабый шёпот деревьев: «…[:voice]…»'
|
||||
"Деревья сонно шепчутся кронами."
|
||||
"Деревья шепчут вам: «…[:voice]…»."
|
||||
"Тихо шуршит под ногами опавшая хвоя."
|
||||
"Вы слышите свист рябчика, откуда-то из глубины леса."
|
||||
"Деревья мягко шушукаются вокруг вас."
|
||||
"Слабый ветер тянет верхушки деревьев."
|
||||
"Над кем-то смеётся синица."
|
||||
"Вам показалось, или где-то не спит дятел?"
|
||||
"Деревья тихо шумят на ветру."
|
||||
"Ветер качает деревья, шум поднимая."
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['type', 'stones']
|
||||
]
|
||||
phrases: [
|
||||
'Вы слышите слабый шёпот камней: «…[:voice]…»'
|
||||
"Слышно, как камешек где-то с горы покатился."
|
||||
"Камни вокруг вас шепчут: «…[:voice]…»"
|
||||
"Где-то в камнях журчит мелкий ручеёк."
|
||||
"Между камнями пролетел писк бурундучка."
|
||||
"Где-то под каменной рекой с писком прошмыгнул грызун."
|
||||
"Слабый тёплый ветерок неведомо откуда небрежно пошевелил мелкие камни."
|
||||
"Внезапный сильный порыв ветра чуть не опрокинул вас."
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['adjacent', 'lake']
|
||||
]
|
||||
phrases: [
|
||||
'Вы слышите шум воды на [lake_direction_vocative].'
|
||||
'Вы слышите шум воды [lake_direction_adverb] от вас.'
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['adjacent', ['deepforest']]
|
||||
]
|
||||
phrases: [
|
||||
'Из глубокой чащи на [deepforest_direction_vocative] раздаются странные звуки.'
|
||||
'Деревья непроходимого леса [deepforest_direction_adverb] от вас шепчут вам: «…[:voice]…».'
|
||||
]
|
||||
]
|
161
game/procgen/ru/transition.cson
Normal file
161
game/procgen/ru/transition.cson
Normal file
|
@ -0,0 +1,161 @@
|
|||
###
|
||||
В этом файле описывается переход между двумя ячейками.
|
||||
|
||||
Возможные типы ячеек:
|
||||
|
||||
outside - вход извне, начало игры
|
||||
|
||||
lowstones - камни лёгкого наклона
|
||||
medstones - камни среднего наклона
|
||||
histones - камни крутого наклона
|
||||
rareforest - редкий лес
|
||||
thickforest - густой лес
|
||||
deepforest - дремучий лес
|
||||
thickshrub - густой кустарник
|
||||
openfield - открытое поле
|
||||
swamp - болото
|
||||
jungle - густые джунгли кустарника
|
||||
calmstream - тихая заводь ручья
|
||||
lake - озеро
|
||||
stream - ручей
|
||||
rock - скалы
|
||||
cave - пещера
|
||||
ucavei - вход в подводную пещеру
|
||||
ucavee - выход из подводной пещеры
|
||||
###
|
||||
|
||||
groups: [
|
||||
tags: [
|
||||
['to', ['thickforest', 'rareforest', 'deepforest']]
|
||||
]
|
||||
phrases: [
|
||||
"""
|
||||
Вы выходите на тропу. К сожалению, вы не можете сказать, откуда она
|
||||
начинается, но хотя бы видите, куда она ведёт.
|
||||
"""
|
||||
"Вы выходите на животные тропы."
|
||||
"Вы находите животную тропу. Она петляет и теряется, но всё-таки куда-то ведёт."
|
||||
"Вы находите слабую тропу, которая петляет и теряется."
|
||||
"Тропа провожает вас через старый бурелом в измороси."
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['to', 'thickshrub']
|
||||
]
|
||||
phrases: [
|
||||
"Тропа провожает вас в чащу голых промёрзших кустарников."
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['from', 'shore']
|
||||
['to', 'shore']
|
||||
]
|
||||
phrases: [
|
||||
"Вы идёте дальше по берегу."
|
||||
"Вы идёте дальше по берегу озера."
|
||||
"Вы идёте по камням вдоль озера."
|
||||
"Вы идёте вдоль озера по чистой траве."
|
||||
"Вы идёте вдоль озера, прыгая по прибрежным камням."
|
||||
"Вы идёте по скалистому берегу озера."
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['to', 'shore']
|
||||
]
|
||||
phrases: [
|
||||
"Вы выходите на берег озера."
|
||||
"Вы идёте к озеру."
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['from', 'outside']
|
||||
]
|
||||
phrases: [
|
||||
'Вы входите по животным тропам.'
|
||||
"Вы выходите через открытую поляну."
|
||||
"Вы проходите через каменную реку и спрыгиваете по камням."
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['from', 'thickforest']
|
||||
['to', 'openfield']
|
||||
]
|
||||
phrases: [
|
||||
'Тропа выводит вас на открытую поляну.'
|
||||
'Тропа открывается на широкую поляну.'
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['to', 'openfield']
|
||||
]
|
||||
phrases: [
|
||||
'Вы выходите на просторную поляну.'
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['to', 'field']
|
||||
]
|
||||
phrases: [
|
||||
"Вы выходите на открытую поляну."
|
||||
"Вы выходите на ясную поляну."
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['to', 'field']
|
||||
['weather', 'cold']
|
||||
]
|
||||
phrases: [
|
||||
"Вы выходите на поляну, которая покрыта тонким инеем."
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['to', ['medstones', 'lowstones', 'histones']]
|
||||
]
|
||||
phrases: [
|
||||
"Вы забираетесь на камни."
|
||||
"""
|
||||
Вы осторожно заползаете на ближайший камень и передвигаетесь вперёд
|
||||
на руках и ногах, чтобы не подскользнуться.
|
||||
"""
|
||||
"Вы запрыгиваете на камень и бодро шагаете вперёд по каменной реке."
|
||||
"""
|
||||
Вы запрыгиваете на камень, но он шатается под вашей ногой.
|
||||
Вы осторожно идёте вперёд, проверяя камни перед тем, как перенести вес на них.
|
||||
"""
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['from', ['medstones', 'lowstones', 'histones']]
|
||||
['to', ['medstones', 'lowstones', 'histones']]
|
||||
]
|
||||
phrases: [
|
||||
"Вы идёте дальше по каменной реке."
|
||||
"На вас находит прилив безрассудства. Вы прыгаете с камня на камень без опаски оступиться."
|
||||
"Вы бодро шагаете вперёд по каменной реке."
|
||||
"Вы осторожно идёте вперёд, проверяя камни перед тем, как перенести вес на них."
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['from', ['medstones', 'lowstones', 'histones']]
|
||||
['to', ['thickforest', 'rareforest', 'deepforest']]
|
||||
]
|
||||
phrases: [
|
||||
"Вы подходите к лесу и спрыгиваете на слабо различимую тропинку."
|
||||
"Вы замечаете тропинку и спрыгиваете на неё."
|
||||
"Вы находите тропку и следуете по ней."
|
||||
"Здесь камни заканчиваются, и теперь вы идёте по какой-то тропе."
|
||||
]
|
||||
,
|
||||
tags: [
|
||||
['to', 'stream']
|
||||
]
|
||||
phrases: [
|
||||
"""
|
||||
Вы находите ручей.
|
||||
Вы решаете пойти по течению, пока что.
|
||||
"""
|
||||
"Ручей переливается и бурлит прозрачной водой по тёмным камням."
|
||||
"Вы выходите к горному ручью, холодному и быстрому."
|
||||
]
|
||||
]
|
||||
|
30
game/procgen/ru/voice.cson
Normal file
30
game/procgen/ru/voice.cson
Normal file
|
@ -0,0 +1,30 @@
|
|||
phrases: [
|
||||
"моё имя"
|
||||
"иди на север"
|
||||
"иди на юг"
|
||||
"иди на восток"
|
||||
"иди на запад"
|
||||
"посмотри на небо"
|
||||
"жить"
|
||||
"рассвет нескоро"
|
||||
"живи"
|
||||
"любить"
|
||||
"передай белкам"
|
||||
"шишки"
|
||||
"реки"
|
||||
"ищи шишки"
|
||||
"найди куст роз"
|
||||
"куст"
|
||||
"гора"
|
||||
"ручей"
|
||||
"мысль"
|
||||
"ммм"
|
||||
"человек"
|
||||
"вкусно"
|
||||
"одиночка"
|
||||
"иди к нам"
|
||||
"навсегда"
|
||||
"никогда"
|
||||
"съесть"
|
||||
"теперь вы наши"
|
||||
]
|
31
game/translations/ru.coffee
Normal file
31
game/translations/ru.coffee
Normal file
|
@ -0,0 +1,31 @@
|
|||
strings =
|
||||
begingame: "Начать игру"
|
||||
settings_title: "Настройки"
|
||||
back: "Обратно"
|
||||
start: """
|
||||
Все счастливые семьи похожи друг на друга, каждая несчастливая семья несчастлива по-своему.
|
||||
|
||||
Все смешалось в доме Облонских. Жена узнала, что муж был в связи с бывшею в их доме француженкою-гувернанткой, и объявила мужу, что не может жить с ним в одном доме. Положение это продолжалось уже третий день и мучительно чувствовалось и самими супругами, и всеми членами семьи, и домочадцами. Все члены семьи и домочадцы чувствовали, что нет смысла в их сожительстве и что на каждом постоялом дворе случайно сошедшиеся люди более связаны между собой, чем они, члены семьи и домочадцы Облонских. Жена не выходила из своих комнат, мужа третий день не было дома. Дети бегали по всему дому, как потерянные; англичанка поссорилась с экономкой и написала записку приятельнице, прося приискать ей новое место; повар ушел вчера со двора, во время самого обеда; черная кухарка и кучер просили расчета.
|
||||
"""
|
||||
choice1: """
|
||||
На третий день после ссоры князь Степан Аркадьич Облонский — Стива, как его звали в свете, — в обычный час, то есть в восемь часов утра, проснулся не в спальне жены, а в своем кабинете, на сафьянном диване. Он повернул свое полное, выхоленное тело на пружинах дивана, как бы желая опять заснуть надолго, с другой стороны крепко обнял подушку и прижался к ней щекой; но вдруг вскочил, сел на диван и открыл глаза.
|
||||
"""
|
||||
choice2: """
|
||||
«Да, да, как это было? — думал он, вспоминая сон. — Да, как это было? Да! Алабин давал обед в Дармштадте; нет, не в Дармштадте, а что-то американское. Да, но там Дармштадт был в Америке. Да, Алабин давал обед на стеклянных столах, да, — и столы пели: Il mio tesoro, и не Il mio tesoro, а что-то лучше, и какие-то маленькие графинчики, и они же женщины», — вспоминал он.
|
||||
"""
|
||||
choice3: """
|
||||
А эта комната демонстрирует совсем короткий текст.
|
||||
|
||||
Пользуясь случаем, передаю привет Льву Толстому.
|
||||
"""
|
||||
credits: """
|
||||
Игра написана Александром Яковлевым.
|
||||
|
||||
Игра использует библиотеку Salet. Код Salet лицензирован согласно лицензии MIT,
|
||||
список авторов библиотеки доступен [по ссылке.](https://gitlab.com/Oreolek/salet-module#list-of-contributors)
|
||||
"""
|
||||
night: "Ночной режим"
|
||||
multiplayer: "Режим мультиплеера"
|
||||
erase_message: "Вы точно хотите стереть сохранение и начать игру заново?"
|
||||
|
||||
window.i18n.push("ru", strings)
|
59
html/index.html
Normal file
59
html/index.html
Normal file
|
@ -0,0 +1,59 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Демо интерфейса</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link href='https://fonts.googleapis.com/css?family=PT+Sans:400,400italic|PT+Sans+Caption' rel='stylesheet' type='text/css'>
|
||||
<link rel="stylesheet" href="css/main.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div class="container">
|
||||
<div class="tab_wrapper">
|
||||
<span class="tab active" id="story">
|
||||
<span class="oi oi-copywriting" aria-hidden="true"></span>
|
||||
Повествование
|
||||
</span>
|
||||
<span class="tab" id="map">
|
||||
<a href="map">
|
||||
<span class="oi oi-map" aria-hidden="true"></span> Карта
|
||||
</a>
|
||||
</span>
|
||||
<span class="tab" id="character">
|
||||
<a href="inventory">
|
||||
<span class="oi oi-eye" aria-hidden="true"></span> Персонаж
|
||||
</a>
|
||||
</span>
|
||||
<span class="tab" id="settings">
|
||||
<a href="settings">
|
||||
<span class="oi oi-menu" aria-hidden="true"></span>
|
||||
Настройки
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
<div id="content_wrapper">
|
||||
<div id="content" class="content">
|
||||
<noscript>Эта игра требует включённого Javascript.</noscript>
|
||||
</div>
|
||||
<a name="end_of_content"></a>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div id="choices"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- End of div.page -->
|
||||
|
||||
<!-- CDN JS Libraries -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/0.3.5/marked.min.js"></script>
|
||||
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
|
||||
<script src="game/improv/index.js"></script>
|
||||
<script src="game/improv/filters.js"></script>
|
||||
<script src="game/improv/template.js"></script>
|
||||
<script src="game/salet.min.js"></script>
|
||||
<script src="game/gamepad.min.js"></script>
|
||||
<script src="https://togetherjs.com/togetherjs-min.js"></script>
|
||||
|
||||
<script type="text/javascript" defer="defer" src="game/main.js"></script>
|
||||
</body>
|
||||
</html>
|
64
html/test.html
Normal file
64
html/test.html
Normal file
|
@ -0,0 +1,64 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title></title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="https://code.jquery.com/qunit/qunit-2.3.3.css">
|
||||
<style>#page{display: none}</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="page">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class='ways'>
|
||||
<ul class="nav nav-pills" id="ways">
|
||||
</ul>
|
||||
</div>
|
||||
</div> <!-- End of div.tools_wrapper -->
|
||||
<div id="content_wrapper">
|
||||
<div id="content" class="content narrow">
|
||||
<noscript>This game requires Javascript.</noscript>
|
||||
</div>
|
||||
<div class="sidebar">
|
||||
<div class="ui">
|
||||
<a href="#" id="storytab" class="tab active"></a>
|
||||
<a href="inventory" id="chartab" class="tab"></a>
|
||||
<a href="map" id="maptab" class="tab"></a>
|
||||
</div>
|
||||
<div class="action">
|
||||
<div class="verb" data-verb="examine">Examine</div>
|
||||
<ul class="objects" id="examinelist" data-verb="examine">
|
||||
</ul>
|
||||
<div class="verb" data-verb="take">Take</div>
|
||||
<ul class="objects" id="takelist" data-verb="take">
|
||||
</ul>
|
||||
<div class="verb" data-verb="drop">Drop</div>
|
||||
<ul class="objects" id="droplist" data-verb="drop">
|
||||
</ul>
|
||||
<div class="verb" data-verb="wear">Wear</div>
|
||||
<ul class="objects" id="wearlist" data-verb="wear">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<a name="end_of_content"></a>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- End of div.page -->
|
||||
|
||||
<div id="qunit"></div>
|
||||
<div id="qunit-fixture"></div>
|
||||
|
||||
<!-- Dependency JS Libraries -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/0.3.5/marked.min.js"></script>
|
||||
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/sigma.js/1.2.0/sigma.min.js"></script>
|
||||
<script src="https://code.jquery.com/qunit/qunit-2.3.3.js"></script>
|
||||
|
||||
<script src="game/salet.min.js"></script>
|
||||
<script src="game/main.js"></script>
|
||||
|
||||
<script defer="defer" src="test/main.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
BIN
img/stars.jpg
Normal file
BIN
img/stars.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 182 KiB |
6376
package-lock.json
generated
Normal file
6376
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
20
package.json
Normal file
20
package.json
Normal file
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"dependencies": {
|
||||
"cson": "^5.1.0",
|
||||
"improv": "^1.0.0"
|
||||
},
|
||||
"private": true,
|
||||
"devDependencies": {
|
||||
"bootstrap": "^4.0.0-beta",
|
||||
"browser-sync": "^2.18.13",
|
||||
"coffee-script": "^1.12.7",
|
||||
"gulp": "^3.8.11",
|
||||
"gulp-coffee": "^2.3.4",
|
||||
"gulp-concat": "^2.6.1",
|
||||
"gulp-rename": "^1.2.2",
|
||||
"gulp-sass": "^3.1.0",
|
||||
"gulp-uglify": "^3.0.0",
|
||||
"gulp-util": "^3.0.8",
|
||||
"gulp-zip": "^4.0.0"
|
||||
}
|
||||
}
|
50
sass/_bootstrap.scss
Normal file
50
sass/_bootstrap.scss
Normal file
|
@ -0,0 +1,50 @@
|
|||
// Core variables and mixins
|
||||
@import "../node_modules/bootstrap/scss/functions";
|
||||
@import "../node_modules/bootstrap/scss/variables";
|
||||
@import "../node_modules/bootstrap/scss/mixins";
|
||||
|
||||
// Reset and dependencies
|
||||
@import "../node_modules/bootstrap/scss/print";
|
||||
@import "../node_modules/bootstrap/scss/reboot";
|
||||
|
||||
// Core CSS
|
||||
@import "../node_modules/bootstrap/scss/type";
|
||||
@import "../node_modules/bootstrap/scss/images";
|
||||
// @import "../node_modules/bootstrap/scss/code";
|
||||
@import "../node_modules/bootstrap/scss/grid";
|
||||
// @import "../node_modules/bootstrap/scss/tables";
|
||||
// @import "../node_modules/bootstrap/scss/forms";
|
||||
@import "../node_modules/bootstrap/scss/buttons";
|
||||
|
||||
/*
|
||||
// Components
|
||||
@import "../node_modules/bootstrap/scss/transitions";
|
||||
@import "../node_modules/bootstrap/scss/dropdown";
|
||||
@import "../node_modules/bootstrap/scss/button-group";
|
||||
@import "../node_modules/bootstrap/scss/input-group";
|
||||
@import "../node_modules/bootstrap/scss/custom-forms";
|
||||
*/
|
||||
@import "../node_modules/bootstrap/scss/nav";
|
||||
@import "../node_modules/bootstrap/scss/navbar";
|
||||
/*
|
||||
@import "../node_modules/bootstrap/scss/card";
|
||||
@import "../node_modules/bootstrap/scss/breadcrumb";
|
||||
@import "../node_modules/bootstrap/scss/pagination";
|
||||
@import "../node_modules/bootstrap/scss/badge";
|
||||
@import "../node_modules/bootstrap/scss/jumbotron";
|
||||
@import "../node_modules/bootstrap/scss/alert";
|
||||
@import "../node_modules/bootstrap/scss/progress";
|
||||
@import "../node_modules/bootstrap/scss/media";
|
||||
@import "../node_modules/bootstrap/scss/list-group";
|
||||
@import "../node_modules/bootstrap/scss/responsive-embed";
|
||||
@import "../node_modules/bootstrap/scss/close";
|
||||
|
||||
// Components w/ JavaScript
|
||||
@import "../node_modules/bootstrap/scss/modal";
|
||||
@import "../node_modules/bootstrap/scss/tooltip";
|
||||
@import "../node_modules/bootstrap/scss/popover";
|
||||
@import "../node_modules/bootstrap/scss/carousel";
|
||||
|
||||
// Utility classes
|
||||
@import "../node_modules/bootstrap/scss/utilities";
|
||||
*/
|
32
sass/_variables.scss
Normal file
32
sass/_variables.scss
Normal file
|
@ -0,0 +1,32 @@
|
|||
$font-family-sans-serif: 'Scada', 'PT Sans', sans-serif;
|
||||
$font-family-serif: 'PT Serif', serif;
|
||||
$headings-font-family: "PT Sans Caption",$font-family-sans-serif;
|
||||
$font-family-base: $font-family-serif;
|
||||
|
||||
$body-bg: #000;
|
||||
$body-background: url("../img/stars.jpg");
|
||||
$body-color: #fff;
|
||||
$body-color-night: #fefefe;
|
||||
$link-color: #4400b9;
|
||||
$btn-bg: grey;
|
||||
$btn-color: lighten($btn-bg, 50%);
|
||||
$secondary-bg: #F1EED9;
|
||||
|
||||
$brand-primary: lighten($body-color, 20%);
|
||||
$brand-danger: darken(#fff, 30%);
|
||||
|
||||
$waycolor: $link-color;
|
||||
$text_background: transparent;
|
||||
$animation_duration: 2s;
|
||||
|
||||
$enable-rounded: true;
|
||||
$enable-shadows: false;
|
||||
$enable-gradients: false;
|
||||
$enable-transitions: false;
|
||||
$enable-hover-media-query: false;
|
||||
$enable-grid-classes: false;
|
||||
$enable-print-styles: true;
|
||||
|
||||
$ok-color: $link-color;
|
||||
$neutral-color: brown;
|
||||
$warning-color: darkred;
|
159
sass/main.scss
Normal file
159
sass/main.scss
Normal file
|
@ -0,0 +1,159 @@
|
|||
@import "variables";
|
||||
@import "bootstrap";
|
||||
@import "open-iconic";
|
||||
|
||||
body {
|
||||
background-color: $body-bg;
|
||||
background-image: $body-background;
|
||||
}
|
||||
.container {
|
||||
@include make-container();
|
||||
@include make-container-max-widths();
|
||||
}
|
||||
#content_wrapper {
|
||||
@include make-row();
|
||||
background: $text_background;
|
||||
max-height: 70%;
|
||||
}
|
||||
.footer {
|
||||
@include make-row();
|
||||
#choices {
|
||||
@include make-col(12);
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
.content {
|
||||
@include make-col(12);
|
||||
@include media-breakpoint-up(md) {
|
||||
padding-left: 3em;
|
||||
padding-right: 3em;
|
||||
}
|
||||
padding: 1em;
|
||||
h1, h2, h3, h4, h5 {
|
||||
text-align: center;
|
||||
}
|
||||
blockquote {
|
||||
font-family: "EB Garamond", serif;
|
||||
margin: 1em 2em;
|
||||
line-height: 1.45;
|
||||
color: #383838;
|
||||
font-size: $font-size-base* 1.4;
|
||||
}
|
||||
.room-start {
|
||||
border-top: none;
|
||||
}
|
||||
}
|
||||
ul.options {
|
||||
margin: 0;
|
||||
padding: 0 0 0 1em;
|
||||
padding: 0;
|
||||
margin-top: 0.5em;
|
||||
margin-bottom: 0.7em;
|
||||
list-style-type: none;
|
||||
li {
|
||||
@include make-col(9);
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
text-align: left;
|
||||
&.active a > div{
|
||||
background-image: linear-gradient(45deg, #a0e0e0, #fff) !important;
|
||||
}
|
||||
.title {
|
||||
font-size: 16pt;
|
||||
}
|
||||
.subtitle {
|
||||
font-size: 12pt;
|
||||
}
|
||||
}
|
||||
li a {
|
||||
display: block;
|
||||
margin-bottom: 0.5em;
|
||||
font-family: $headings-font-family;
|
||||
text-decoration: none;
|
||||
> div {
|
||||
border-radius: 5px;
|
||||
border: 1px solid #000;
|
||||
padding: 1em;
|
||||
background-image: linear-gradient( 45deg, #ccc, #fff );
|
||||
color: $ok-color;
|
||||
&:hover {
|
||||
background-color: rgba(153,136,119,0.2);
|
||||
background-image: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
.warning {
|
||||
background-image: linear-gradient( 45deg, #ddd, #fff );
|
||||
color: $warning-color;
|
||||
}
|
||||
.neutral {
|
||||
background-image: linear-gradient( 90deg, #ccc, #fff );
|
||||
color: $neutral-color;
|
||||
}
|
||||
&.narrowchoice {
|
||||
margin-right: 30% !important;
|
||||
margin-left: 30% !important;
|
||||
}
|
||||
}
|
||||
hr {
|
||||
width: 50%;
|
||||
border-color: $body-color;
|
||||
}
|
||||
.center {
|
||||
text-align: center;
|
||||
}
|
||||
.effect {
|
||||
color: #4c20dd;
|
||||
}
|
||||
#map {
|
||||
max-width: 400px;
|
||||
height: 400px;
|
||||
margin: auto;
|
||||
}
|
||||
.medskip {
|
||||
margin-top: $font-size-base * 1.5;
|
||||
margin-bottom: $font-size-base * 1.5;
|
||||
}
|
||||
.night {
|
||||
background-image: radial-gradient(circle,rgba(0,0,0,.7),rgba(0,0,0,1)) !important;
|
||||
background-size: 100% 100%;
|
||||
color: $body-color-night !important;
|
||||
.nav-item {
|
||||
a {
|
||||
color: $body-color-night !important;
|
||||
}
|
||||
}
|
||||
a {
|
||||
color: lighten($link-color, 30%);
|
||||
}
|
||||
.btn-outline-primary {
|
||||
color: #777;
|
||||
}
|
||||
.tab.active {
|
||||
background: #333 !important;
|
||||
}
|
||||
}
|
||||
button.center {
|
||||
display: block;
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
}
|
||||
.tab_wrapper {
|
||||
text-align: center;
|
||||
margin-bottom: 1em;
|
||||
margin-top: 1em;
|
||||
.tab {
|
||||
padding: 1em 1.5em;
|
||||
cursor: pointer;
|
||||
&.active {
|
||||
background-color: invert($body-bg);
|
||||
color: invert($body-color);
|
||||
a {
|
||||
color: invert($body-color);
|
||||
}
|
||||
}
|
||||
a {
|
||||
color: $body-color;
|
||||
}
|
||||
}
|
||||
}
|
958
sass/open-iconic.scss
Normal file
958
sass/open-iconic.scss
Normal file
|
@ -0,0 +1,958 @@
|
|||
/* Bootstrap */
|
||||
|
||||
/* Override Bootstrap default variable */
|
||||
$icon-font-path: '../fonts/' !default;
|
||||
|
||||
@font-face {
|
||||
font-family: 'Open Iconic';
|
||||
src: url('#{$icon-font-path}open-iconic.eot');
|
||||
src: url('#{$icon-font-path}open-iconic.eot?#iconic-sm') format('embedded-opentype'), url('#{$icon-font-path}open-iconic.woff') format('woff'), url('#{$icon-font-path}open-iconic.ttf') format('truetype'), url('#{$icon-font-path}open-iconic.svg#iconic-sm') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
// Catchall baseclass
|
||||
.oi {
|
||||
position: relative;
|
||||
top: 1px;
|
||||
display: inline-block;
|
||||
font-family: 'Open Iconic';
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
line-height: 1;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
|
||||
|
||||
&:empty:before {
|
||||
width: 1em;
|
||||
text-align: center;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
&.oi-align-center:before {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
&.oi-align-left:before {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
&.oi-align-right:before {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
|
||||
&.oi-flip-horizontal:before {
|
||||
-webkit-transform: scale(-1, 1);
|
||||
-ms-transform: scale(-1, 1);
|
||||
transform: scale(-1, 1);
|
||||
}
|
||||
|
||||
&.oi-flip-vertical:before {
|
||||
-webkit-transform: scale(1, -1);
|
||||
-ms-transform: scale(-1, 1);
|
||||
transform: scale(1, -1);
|
||||
}
|
||||
|
||||
&.oi-flip-horizontal-vertical:before {
|
||||
-webkit-transform: scale(-1, -1);
|
||||
-ms-transform: scale(-1, 1);
|
||||
transform: scale(-1, -1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
.oi-account-login:before {
|
||||
content:'\e000';
|
||||
}
|
||||
|
||||
.oi-account-logout:before {
|
||||
content:'\e001';
|
||||
}
|
||||
|
||||
.oi-action-redo:before {
|
||||
content:'\e002';
|
||||
}
|
||||
|
||||
.oi-action-undo:before {
|
||||
content:'\e003';
|
||||
}
|
||||
|
||||
.oi-align-center:before {
|
||||
content:'\e004';
|
||||
}
|
||||
|
||||
.oi-align-left:before {
|
||||
content:'\e005';
|
||||
}
|
||||
|
||||
.oi-align-right:before {
|
||||
content:'\e006';
|
||||
}
|
||||
|
||||
.oi-aperture:before {
|
||||
content:'\e007';
|
||||
}
|
||||
|
||||
.oi-arrow-bottom:before {
|
||||
content:'\e008';
|
||||
}
|
||||
|
||||
.oi-arrow-circle-bottom:before {
|
||||
content:'\e009';
|
||||
}
|
||||
|
||||
.oi-arrow-circle-left:before {
|
||||
content:'\e00a';
|
||||
}
|
||||
|
||||
.oi-arrow-circle-right:before {
|
||||
content:'\e00b';
|
||||
}
|
||||
|
||||
.oi-arrow-circle-top:before {
|
||||
content:'\e00c';
|
||||
}
|
||||
|
||||
.oi-arrow-left:before {
|
||||
content:'\e00d';
|
||||
}
|
||||
|
||||
.oi-arrow-right:before {
|
||||
content:'\e00e';
|
||||
}
|
||||
|
||||
.oi-arrow-thick-bottom:before {
|
||||
content:'\e00f';
|
||||
}
|
||||
|
||||
.oi-arrow-thick-left:before {
|
||||
content:'\e010';
|
||||
}
|
||||
|
||||
.oi-arrow-thick-right:before {
|
||||
content:'\e011';
|
||||
}
|
||||
|
||||
.oi-arrow-thick-top:before {
|
||||
content:'\e012';
|
||||
}
|
||||
|
||||
.oi-arrow-top:before {
|
||||
content:'\e013';
|
||||
}
|
||||
|
||||
.oi-audio-spectrum:before {
|
||||
content:'\e014';
|
||||
}
|
||||
|
||||
.oi-audio:before {
|
||||
content:'\e015';
|
||||
}
|
||||
|
||||
.oi-badge:before {
|
||||
content:'\e016';
|
||||
}
|
||||
|
||||
.oi-ban:before {
|
||||
content:'\e017';
|
||||
}
|
||||
|
||||
.oi-bar-chart:before {
|
||||
content:'\e018';
|
||||
}
|
||||
|
||||
.oi-basket:before {
|
||||
content:'\e019';
|
||||
}
|
||||
|
||||
.oi-battery-empty:before {
|
||||
content:'\e01a';
|
||||
}
|
||||
|
||||
.oi-battery-full:before {
|
||||
content:'\e01b';
|
||||
}
|
||||
|
||||
.oi-beaker:before {
|
||||
content:'\e01c';
|
||||
}
|
||||
|
||||
.oi-bell:before {
|
||||
content:'\e01d';
|
||||
}
|
||||
|
||||
.oi-bluetooth:before {
|
||||
content:'\e01e';
|
||||
}
|
||||
|
||||
.oi-bold:before {
|
||||
content:'\e01f';
|
||||
}
|
||||
|
||||
.oi-bolt:before {
|
||||
content:'\e020';
|
||||
}
|
||||
|
||||
.oi-book:before {
|
||||
content:'\e021';
|
||||
}
|
||||
|
||||
.oi-bookmark:before {
|
||||
content:'\e022';
|
||||
}
|
||||
|
||||
.oi-box:before {
|
||||
content:'\e023';
|
||||
}
|
||||
|
||||
.oi-briefcase:before {
|
||||
content:'\e024';
|
||||
}
|
||||
|
||||
.oi-british-pound:before {
|
||||
content:'\e025';
|
||||
}
|
||||
|
||||
.oi-browser:before {
|
||||
content:'\e026';
|
||||
}
|
||||
|
||||
.oi-brush:before {
|
||||
content:'\e027';
|
||||
}
|
||||
|
||||
.oi-bug:before {
|
||||
content:'\e028';
|
||||
}
|
||||
|
||||
.oi-bullhorn:before {
|
||||
content:'\e029';
|
||||
}
|
||||
|
||||
.oi-calculator:before {
|
||||
content:'\e02a';
|
||||
}
|
||||
|
||||
.oi-calendar:before {
|
||||
content:'\e02b';
|
||||
}
|
||||
|
||||
.oi-camera-slr:before {
|
||||
content:'\e02c';
|
||||
}
|
||||
|
||||
.oi-caret-bottom:before {
|
||||
content:'\e02d';
|
||||
}
|
||||
|
||||
.oi-caret-left:before {
|
||||
content:'\e02e';
|
||||
}
|
||||
|
||||
.oi-caret-right:before {
|
||||
content:'\e02f';
|
||||
}
|
||||
|
||||
.oi-caret-top:before {
|
||||
content:'\e030';
|
||||
}
|
||||
|
||||
.oi-cart:before {
|
||||
content:'\e031';
|
||||
}
|
||||
|
||||
.oi-chat:before {
|
||||
content:'\e032';
|
||||
}
|
||||
|
||||
.oi-check:before {
|
||||
content:'\e033';
|
||||
}
|
||||
|
||||
.oi-chevron-bottom:before {
|
||||
content:'\e034';
|
||||
}
|
||||
|
||||
.oi-chevron-left:before {
|
||||
content:'\e035';
|
||||
}
|
||||
|
||||
.oi-chevron-right:before {
|
||||
content:'\e036';
|
||||
}
|
||||
|
||||
.oi-chevron-top:before {
|
||||
content:'\e037';
|
||||
}
|
||||
|
||||
.oi-circle-check:before {
|
||||
content:'\e038';
|
||||
}
|
||||
|
||||
.oi-circle-x:before {
|
||||
content:'\e039';
|
||||
}
|
||||
|
||||
.oi-clipboard:before {
|
||||
content:'\e03a';
|
||||
}
|
||||
|
||||
.oi-clock:before {
|
||||
content:'\e03b';
|
||||
}
|
||||
|
||||
.oi-cloud-download:before {
|
||||
content:'\e03c';
|
||||
}
|
||||
|
||||
.oi-cloud-upload:before {
|
||||
content:'\e03d';
|
||||
}
|
||||
|
||||
.oi-cloud:before {
|
||||
content:'\e03e';
|
||||
}
|
||||
|
||||
.oi-cloudy:before {
|
||||
content:'\e03f';
|
||||
}
|
||||
|
||||
.oi-code:before {
|
||||
content:'\e040';
|
||||
}
|
||||
|
||||
.oi-cog:before {
|
||||
content:'\e041';
|
||||
}
|
||||
|
||||
.oi-collapse-down:before {
|
||||
content:'\e042';
|
||||
}
|
||||
|
||||
.oi-collapse-left:before {
|
||||
content:'\e043';
|
||||
}
|
||||
|
||||
.oi-collapse-right:before {
|
||||
content:'\e044';
|
||||
}
|
||||
|
||||
.oi-collapse-up:before {
|
||||
content:'\e045';
|
||||
}
|
||||
|
||||
.oi-command:before {
|
||||
content:'\e046';
|
||||
}
|
||||
|
||||
.oi-comment-square:before {
|
||||
content:'\e047';
|
||||
}
|
||||
|
||||
.oi-compass:before {
|
||||
content:'\e048';
|
||||
}
|
||||
|
||||
.oi-contrast:before {
|
||||
content:'\e049';
|
||||
}
|
||||
|
||||
.oi-copywriting:before {
|
||||
content:'\e04a';
|
||||
}
|
||||
|
||||
.oi-credit-card:before {
|
||||
content:'\e04b';
|
||||
}
|
||||
|
||||
.oi-crop:before {
|
||||
content:'\e04c';
|
||||
}
|
||||
|
||||
.oi-dashboard:before {
|
||||
content:'\e04d';
|
||||
}
|
||||
|
||||
.oi-data-transfer-download:before {
|
||||
content:'\e04e';
|
||||
}
|
||||
|
||||
.oi-data-transfer-upload:before {
|
||||
content:'\e04f';
|
||||
}
|
||||
|
||||
.oi-delete:before {
|
||||
content:'\e050';
|
||||
}
|
||||
|
||||
.oi-dial:before {
|
||||
content:'\e051';
|
||||
}
|
||||
|
||||
.oi-document:before {
|
||||
content:'\e052';
|
||||
}
|
||||
|
||||
.oi-dollar:before {
|
||||
content:'\e053';
|
||||
}
|
||||
|
||||
.oi-double-quote-sans-left:before {
|
||||
content:'\e054';
|
||||
}
|
||||
|
||||
.oi-double-quote-sans-right:before {
|
||||
content:'\e055';
|
||||
}
|
||||
|
||||
.oi-double-quote-serif-left:before {
|
||||
content:'\e056';
|
||||
}
|
||||
|
||||
.oi-double-quote-serif-right:before {
|
||||
content:'\e057';
|
||||
}
|
||||
|
||||
.oi-droplet:before {
|
||||
content:'\e058';
|
||||
}
|
||||
|
||||
.oi-eject:before {
|
||||
content:'\e059';
|
||||
}
|
||||
|
||||
.oi-elevator:before {
|
||||
content:'\e05a';
|
||||
}
|
||||
|
||||
.oi-ellipses:before {
|
||||
content:'\e05b';
|
||||
}
|
||||
|
||||
.oi-envelope-closed:before {
|
||||
content:'\e05c';
|
||||
}
|
||||
|
||||
.oi-envelope-open:before {
|
||||
content:'\e05d';
|
||||
}
|
||||
|
||||
.oi-euro:before {
|
||||
content:'\e05e';
|
||||
}
|
||||
|
||||
.oi-excerpt:before {
|
||||
content:'\e05f';
|
||||
}
|
||||
|
||||
.oi-expand-down:before {
|
||||
content:'\e060';
|
||||
}
|
||||
|
||||
.oi-expand-left:before {
|
||||
content:'\e061';
|
||||
}
|
||||
|
||||
.oi-expand-right:before {
|
||||
content:'\e062';
|
||||
}
|
||||
|
||||
.oi-expand-up:before {
|
||||
content:'\e063';
|
||||
}
|
||||
|
||||
.oi-external-link:before {
|
||||
content:'\e064';
|
||||
}
|
||||
|
||||
.oi-eye:before {
|
||||
content:'\e065';
|
||||
}
|
||||
|
||||
.oi-eyedropper:before {
|
||||
content:'\e066';
|
||||
}
|
||||
|
||||
.oi-file:before {
|
||||
content:'\e067';
|
||||
}
|
||||
|
||||
.oi-fire:before {
|
||||
content:'\e068';
|
||||
}
|
||||
|
||||
.oi-flag:before {
|
||||
content:'\e069';
|
||||
}
|
||||
|
||||
.oi-flash:before {
|
||||
content:'\e06a';
|
||||
}
|
||||
|
||||
.oi-folder:before {
|
||||
content:'\e06b';
|
||||
}
|
||||
|
||||
.oi-fork:before {
|
||||
content:'\e06c';
|
||||
}
|
||||
|
||||
.oi-fullscreen-enter:before {
|
||||
content:'\e06d';
|
||||
}
|
||||
|
||||
.oi-fullscreen-exit:before {
|
||||
content:'\e06e';
|
||||
}
|
||||
|
||||
.oi-globe:before {
|
||||
content:'\e06f';
|
||||
}
|
||||
|
||||
.oi-graph:before {
|
||||
content:'\e070';
|
||||
}
|
||||
|
||||
.oi-grid-four-up:before {
|
||||
content:'\e071';
|
||||
}
|
||||
|
||||
.oi-grid-three-up:before {
|
||||
content:'\e072';
|
||||
}
|
||||
|
||||
.oi-grid-two-up:before {
|
||||
content:'\e073';
|
||||
}
|
||||
|
||||
.oi-hard-drive:before {
|
||||
content:'\e074';
|
||||
}
|
||||
|
||||
.oi-header:before {
|
||||
content:'\e075';
|
||||
}
|
||||
|
||||
.oi-headphones:before {
|
||||
content:'\e076';
|
||||
}
|
||||
|
||||
.oi-heart:before {
|
||||
content:'\e077';
|
||||
}
|
||||
|
||||
.oi-home:before {
|
||||
content:'\e078';
|
||||
}
|
||||
|
||||
.oi-image:before {
|
||||
content:'\e079';
|
||||
}
|
||||
|
||||
.oi-inbox:before {
|
||||
content:'\e07a';
|
||||
}
|
||||
|
||||
.oi-infinity:before {
|
||||
content:'\e07b';
|
||||
}
|
||||
|
||||
.oi-info:before {
|
||||
content:'\e07c';
|
||||
}
|
||||
|
||||
.oi-italic:before {
|
||||
content:'\e07d';
|
||||
}
|
||||
|
||||
.oi-justify-center:before {
|
||||
content:'\e07e';
|
||||
}
|
||||
|
||||
.oi-justify-left:before {
|
||||
content:'\e07f';
|
||||
}
|
||||
|
||||
.oi-justify-right:before {
|
||||
content:'\e080';
|
||||
}
|
||||
|
||||
.oi-key:before {
|
||||
content:'\e081';
|
||||
}
|
||||
|
||||
.oi-laptop:before {
|
||||
content:'\e082';
|
||||
}
|
||||
|
||||
.oi-layers:before {
|
||||
content:'\e083';
|
||||
}
|
||||
|
||||
.oi-lightbulb:before {
|
||||
content:'\e084';
|
||||
}
|
||||
|
||||
.oi-link-broken:before {
|
||||
content:'\e085';
|
||||
}
|
||||
|
||||
.oi-link-intact:before {
|
||||
content:'\e086';
|
||||
}
|
||||
|
||||
.oi-list-rich:before {
|
||||
content:'\e087';
|
||||
}
|
||||
|
||||
.oi-list:before {
|
||||
content:'\e088';
|
||||
}
|
||||
|
||||
.oi-location:before {
|
||||
content:'\e089';
|
||||
}
|
||||
|
||||
.oi-lock-locked:before {
|
||||
content:'\e08a';
|
||||
}
|
||||
|
||||
.oi-lock-unlocked:before {
|
||||
content:'\e08b';
|
||||
}
|
||||
|
||||
.oi-loop-circular:before {
|
||||
content:'\e08c';
|
||||
}
|
||||
|
||||
.oi-loop-square:before {
|
||||
content:'\e08d';
|
||||
}
|
||||
|
||||
.oi-loop:before {
|
||||
content:'\e08e';
|
||||
}
|
||||
|
||||
.oi-magnifying-glass:before {
|
||||
content:'\e08f';
|
||||
}
|
||||
|
||||
.oi-map-marker:before {
|
||||
content:'\e090';
|
||||
}
|
||||
|
||||
.oi-map:before {
|
||||
content:'\e091';
|
||||
}
|
||||
|
||||
.oi-media-pause:before {
|
||||
content:'\e092';
|
||||
}
|
||||
|
||||
.oi-media-play:before {
|
||||
content:'\e093';
|
||||
}
|
||||
|
||||
.oi-media-record:before {
|
||||
content:'\e094';
|
||||
}
|
||||
|
||||
.oi-media-skip-backward:before {
|
||||
content:'\e095';
|
||||
}
|
||||
|
||||
.oi-media-skip-forward:before {
|
||||
content:'\e096';
|
||||
}
|
||||
|
||||
.oi-media-step-backward:before {
|
||||
content:'\e097';
|
||||
}
|
||||
|
||||
.oi-media-step-forward:before {
|
||||
content:'\e098';
|
||||
}
|
||||
|
||||
.oi-media-stop:before {
|
||||
content:'\e099';
|
||||
}
|
||||
|
||||
.oi-medical-cross:before {
|
||||
content:'\e09a';
|
||||
}
|
||||
|
||||
.oi-menu:before {
|
||||
content:'\e09b';
|
||||
}
|
||||
|
||||
.oi-microphone:before {
|
||||
content:'\e09c';
|
||||
}
|
||||
|
||||
.oi-minus:before {
|
||||
content:'\e09d';
|
||||
}
|
||||
|
||||
.oi-monitor:before {
|
||||
content:'\e09e';
|
||||
}
|
||||
|
||||
.oi-moon:before {
|
||||
content:'\e09f';
|
||||
}
|
||||
|
||||
.oi-move:before {
|
||||
content:'\e0a0';
|
||||
}
|
||||
|
||||
.oi-musical-note:before {
|
||||
content:'\e0a1';
|
||||
}
|
||||
|
||||
.oi-paperclip:before {
|
||||
content:'\e0a2';
|
||||
}
|
||||
|
||||
.oi-pencil:before {
|
||||
content:'\e0a3';
|
||||
}
|
||||
|
||||
.oi-people:before {
|
||||
content:'\e0a4';
|
||||
}
|
||||
|
||||
.oi-person:before {
|
||||
content:'\e0a5';
|
||||
}
|
||||
|
||||
.oi-phone:before {
|
||||
content:'\e0a6';
|
||||
}
|
||||
|
||||
.oi-pie-chart:before {
|
||||
content:'\e0a7';
|
||||
}
|
||||
|
||||
.oi-pin:before {
|
||||
content:'\e0a8';
|
||||
}
|
||||
|
||||
.oi-play-circle:before {
|
||||
content:'\e0a9';
|
||||
}
|
||||
|
||||
.oi-plus:before {
|
||||
content:'\e0aa';
|
||||
}
|
||||
|
||||
.oi-power-standby:before {
|
||||
content:'\e0ab';
|
||||
}
|
||||
|
||||
.oi-print:before {
|
||||
content:'\e0ac';
|
||||
}
|
||||
|
||||
.oi-project:before {
|
||||
content:'\e0ad';
|
||||
}
|
||||
|
||||
.oi-pulse:before {
|
||||
content:'\e0ae';
|
||||
}
|
||||
|
||||
.oi-puzzle-piece:before {
|
||||
content:'\e0af';
|
||||
}
|
||||
|
||||
.oi-question-mark:before {
|
||||
content:'\e0b0';
|
||||
}
|
||||
|
||||
.oi-rain:before {
|
||||
content:'\e0b1';
|
||||
}
|
||||
|
||||
.oi-random:before {
|
||||
content:'\e0b2';
|
||||
}
|
||||
|
||||
.oi-reload:before {
|
||||
content:'\e0b3';
|
||||
}
|
||||
|
||||
.oi-resize-both:before {
|
||||
content:'\e0b4';
|
||||
}
|
||||
|
||||
.oi-resize-height:before {
|
||||
content:'\e0b5';
|
||||
}
|
||||
|
||||
.oi-resize-width:before {
|
||||
content:'\e0b6';
|
||||
}
|
||||
|
||||
.oi-rss-alt:before {
|
||||
content:'\e0b7';
|
||||
}
|
||||
|
||||
.oi-rss:before {
|
||||
content:'\e0b8';
|
||||
}
|
||||
|
||||
.oi-script:before {
|
||||
content:'\e0b9';
|
||||
}
|
||||
|
||||
.oi-share-boxed:before {
|
||||
content:'\e0ba';
|
||||
}
|
||||
|
||||
.oi-share:before {
|
||||
content:'\e0bb';
|
||||
}
|
||||
|
||||
.oi-shield:before {
|
||||
content:'\e0bc';
|
||||
}
|
||||
|
||||
.oi-signal:before {
|
||||
content:'\e0bd';
|
||||
}
|
||||
|
||||
.oi-signpost:before {
|
||||
content:'\e0be';
|
||||
}
|
||||
|
||||
.oi-sort-ascending:before {
|
||||
content:'\e0bf';
|
||||
}
|
||||
|
||||
.oi-sort-descending:before {
|
||||
content:'\e0c0';
|
||||
}
|
||||
|
||||
.oi-spreadsheet:before {
|
||||
content:'\e0c1';
|
||||
}
|
||||
|
||||
.oi-star:before {
|
||||
content:'\e0c2';
|
||||
}
|
||||
|
||||
.oi-sun:before {
|
||||
content:'\e0c3';
|
||||
}
|
||||
|
||||
.oi-tablet:before {
|
||||
content:'\e0c4';
|
||||
}
|
||||
|
||||
.oi-tag:before {
|
||||
content:'\e0c5';
|
||||
}
|
||||
|
||||
.oi-tags:before {
|
||||
content:'\e0c6';
|
||||
}
|
||||
|
||||
.oi-target:before {
|
||||
content:'\e0c7';
|
||||
}
|
||||
|
||||
.oi-task:before {
|
||||
content:'\e0c8';
|
||||
}
|
||||
|
||||
.oi-terminal:before {
|
||||
content:'\e0c9';
|
||||
}
|
||||
|
||||
.oi-text:before {
|
||||
content:'\e0ca';
|
||||
}
|
||||
|
||||
.oi-thumb-down:before {
|
||||
content:'\e0cb';
|
||||
}
|
||||
|
||||
.oi-thumb-up:before {
|
||||
content:'\e0cc';
|
||||
}
|
||||
|
||||
.oi-timer:before {
|
||||
content:'\e0cd';
|
||||
}
|
||||
|
||||
.oi-transfer:before {
|
||||
content:'\e0ce';
|
||||
}
|
||||
|
||||
.oi-trash:before {
|
||||
content:'\e0cf';
|
||||
}
|
||||
|
||||
.oi-underline:before {
|
||||
content:'\e0d0';
|
||||
}
|
||||
|
||||
.oi-vertical-align-bottom:before {
|
||||
content:'\e0d1';
|
||||
}
|
||||
|
||||
.oi-vertical-align-center:before {
|
||||
content:'\e0d2';
|
||||
}
|
||||
|
||||
.oi-vertical-align-top:before {
|
||||
content:'\e0d3';
|
||||
}
|
||||
|
||||
.oi-video:before {
|
||||
content:'\e0d4';
|
||||
}
|
||||
|
||||
.oi-volume-high:before {
|
||||
content:'\e0d5';
|
||||
}
|
||||
|
||||
.oi-volume-low:before {
|
||||
content:'\e0d6';
|
||||
}
|
||||
|
||||
.oi-volume-off:before {
|
||||
content:'\e0d7';
|
||||
}
|
||||
|
||||
.oi-warning:before {
|
||||
content:'\e0d8';
|
||||
}
|
||||
|
||||
.oi-wifi:before {
|
||||
content:'\e0d9';
|
||||
}
|
||||
|
||||
.oi-wrench:before {
|
||||
content:'\e0da';
|
||||
}
|
||||
|
||||
.oi-x:before {
|
||||
content:'\e0db';
|
||||
}
|
||||
|
||||
.oi-yen:before {
|
||||
content:'\e0dc';
|
||||
}
|
||||
|
||||
.oi-zoom-in:before {
|
||||
content:'\e0dd';
|
||||
}
|
||||
|
||||
.oi-zoom-out:before {
|
||||
content:'\e0de';
|
||||
}
|
||||
|
36
test/main.js
Normal file
36
test/main.js
Normal file
|
@ -0,0 +1,36 @@
|
|||
salet.autosave = false;
|
||||
salet.autoload = false;
|
||||
|
||||
$(document).ready(function() {
|
||||
QUnit.test("The game starts okay.", function(assert) {
|
||||
assert.notEqual(salet, void 0, "Salet is initialized");
|
||||
return assert.equal(salet.current, salet.start, "Salet is in the room called '"+salet.start+"'");
|
||||
});
|
||||
QUnit.test("There are no game-breaking bugs when entering rooms.", function(assert) {
|
||||
for (var key in salet.rooms) {
|
||||
// skip loop if the property is from prototype
|
||||
if (!salet.rooms.hasOwnProperty(key)) continue;
|
||||
|
||||
var room = salet.rooms[key];
|
||||
|
||||
assert.ok(salet.goTo(room.name), "Entered room "+room.name);
|
||||
}
|
||||
});
|
||||
QUnit.test("There are no game-breaking bugs in all actions.", function(assert) {
|
||||
for (var key in salet.rooms) {
|
||||
// skip loop if the property is from prototype
|
||||
if (!salet.rooms.hasOwnProperty(key)) continue;
|
||||
var room = salet.rooms[key];
|
||||
|
||||
salet.goTo(room.name);
|
||||
for (var act in room.actions) {
|
||||
if (!room.actions.hasOwnProperty(act)) continue;
|
||||
assert.ok(act.fcall(room), "Executed action "+act);
|
||||
}
|
||||
for (var act in room.writers) {
|
||||
if (!room.writers.hasOwnProperty(act)) continue;
|
||||
assert.ok(act.fcall(room), "Executed action "+act);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
Loading…
Reference in a new issue